From e5c3c3c57a2343e1c4d7b8fbc658edcd78f1a292 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 2 Feb 2022 14:42:23 +0100 Subject: [PATCH] Removed community_server folder, removed reference to community_server. --- .github/workflows/publish.yml | 48 +- .github/workflows/test.yml | 93 - community_server/.gitignore | 10 - community_server/.gitmodules | 3 - community_server/Dockerfile | 30 - community_server/README.md | 51 - community_server/bin/cake | 75 - community_server/bin/cake.bat | 27 - community_server/bin/cake.php | 12 - community_server/composer.json | 58 - community_server/composer.lock | 5577 ------ community_server/config/app.default.php | 407 - community_server/config/bootstrap.php | 212 - community_server/config/bootstrap_cli.php | 28 - community_server/config/horizontal_form.php | 46 - community_server/config/nginx/fastcgi.conf | 25 - community_server/config/nginx/mime.types | 88 - community_server/config/nginx/nginx.conf | 86 - community_server/config/paths.php | 89 - .../config/php-fpm/php-ini-overrides.ini | 2 - community_server/config/requirements.php | 39 - .../config/ripple_control_group_form.php | 25 - community_server/config/routes.php | 160 - community_server/config/schema/i18n.sql | 18 - community_server/config/schema/sessions.sql | 15 - community_server/copy_to_www.sh | 38 - community_server/docu/community-server.api.md | 132 - community_server/index.php | 16 - community_server/npm-debug.log | 6001 ------- community_server/parse_proto.sh | 20 - community_server/phpunit.xml.dist | 41 - community_server/plugins/empty | 0 community_server/src/Application.php | 117 - community_server/src/Console/Installer.php | 246 - .../src/Controller/AddressTypesController.php | 106 - .../src/Controller/AdminErrorsController.php | 111 - .../src/Controller/AppController.php | 386 - .../src/Controller/AppRequestsController.php | 465 - .../Controller/BlockchainTypesController.php | 106 - .../CommunityProfilesController.php | 106 - .../Component/GradidoNumberComponent.php | 33 - .../Component/JsonRequestClientComponent.php | 184 - .../JsonRpcRequestClientComponent.php | 83 - .../src/Controller/DashboardController.php | 78 - .../src/Controller/ElopageBuysController.php | 165 - .../Controller/ElopageWebhookController.php | 51 - .../src/Controller/ErrorController.php | 70 - .../JsonRequestHandlerController.php | 559 - .../Controller/OperatorTypesController.php | 106 - .../src/Controller/OperatorsController.php | 236 - .../src/Controller/PagesController.php | 86 - .../src/Controller/ProfileController.php | 206 - .../src/Controller/RolesController.php | 108 - .../src/Controller/ServerUsersController.php | 132 - .../Controller/StateBalancesController.php | 399 - .../src/Controller/StateCreatedController.php | 113 - .../src/Controller/StateErrorsController.php | 173 - .../StateGroupAddressesController.php | 113 - .../StateGroupRelationshipsController.php | 115 - .../src/Controller/StateGroupsController.php | 111 - .../StateRelationshipTypesController.php | 106 - .../Controller/StateUserRolesController.php | 185 - .../StateUserTransactionsController.php | 291 - .../src/Controller/StateUsersController.php | 616 - .../TransactionCreationsController.php | 681 - .../TransactionGroupAddaddressController.php | 113 - .../TransactionGroupAllowtradesController.php | 113 - .../TransactionGroupCreatesController.php | 113 - .../TransactionSendCoinsController.php | 469 - .../TransactionSignaturesController.php | 111 - .../Controller/TransactionTypesController.php | 106 - .../src/Controller/TransactionsController.php | 450 - .../src/Controller/UsersController.php | 167 - community_server/src/Form/AssignRoleForm.php | 30 - community_server/src/Form/CreationForm.php | 73 - .../src/Form/DecodeTransaction.php | 8 - community_server/src/Form/ProfileForm.php | 52 - community_server/src/Form/TransferForm.php | 82 - community_server/src/Form/TransferRawForm.php | 73 - community_server/src/Form/UserSearchForm.php | 58 - community_server/src/Locale/cake.pot | 29 - community_server/src/Locale/de_DE/default.mo | Bin 923 -> 0 bytes community_server/src/Locale/de_DE/default.po | 3097 ---- community_server/src/Locale/default.pot | 3566 ---- community_server/src/Model/Behavior/empty | 0 .../src/Model/Entity/AddressType.php | 33 - .../src/Model/Entity/AdminError.php | 41 - .../src/Model/Entity/BlockchainType.php | 30 - .../src/Model/Entity/CommunityProfile.php | 30 - .../src/Model/Entity/ElopageBuy.php | 57 - .../src/Model/Entity/Operator.php | 32 - .../src/Model/Entity/OperatorType.php | 31 - community_server/src/Model/Entity/Role.php | 26 - .../src/Model/Entity/ServerUser.php | 57 - .../src/Model/Entity/StateBalance.php | 89 - .../src/Model/Entity/StateCreated.php | 41 - .../src/Model/Entity/StateError.php | 37 - .../src/Model/Entity/StateGroup.php | 43 - .../src/Model/Entity/StateGroupAddress.php | 35 - .../Model/Entity/StateGroupRelationship.php | 37 - .../Model/Entity/StateRelationshipType.php | 28 - .../src/Model/Entity/StateUser.php | 58 - .../src/Model/Entity/StateUserRole.php | 30 - .../src/Model/Entity/StateUserTransaction.php | 37 - .../src/Model/Entity/Transaction.php | 53 - .../src/Model/Entity/TransactionCreation.php | 39 - .../Entity/TransactionGroupAddaddres.php | 37 - .../Entity/TransactionGroupAllowtrade.php | 35 - .../Model/Entity/TransactionGroupCreate.php | 37 - .../src/Model/Entity/TransactionSendCoin.php | 43 - .../src/Model/Entity/TransactionSignature.php | 33 - .../src/Model/Entity/TransactionType.php | 31 - community_server/src/Model/Entity/User.php | 58 - .../GPBMetadata/Gradido/BasicTypes.php | 39 - .../GPBMetadata/Gradido/GradidoCreation.php | 30 - .../Gradido/GradidoTransaction.php | 29 - .../GPBMetadata/Gradido/GradidoTransfer.php | 41 - .../Gradido/GroupFriendsUpdate.php | 30 - .../GPBMetadata/Gradido/GroupMemberUpdate.php | 36 - .../GPBMetadata/Gradido/ManageNodeBody.php | 32 - .../Gradido/ManageNodeGroupAdd.php | 30 - .../GPBMetadata/Gradido/ManageNodeRequest.php | 36 - .../GPBMetadata/Gradido/TransactionBody.php | 46 - .../Proto/Gradido/CrossGroupTransfer.php | 146 - .../Proto/Gradido/GradidoCreation.php | 102 - .../Proto/Gradido/GradidoTransaction.php | 116 - .../Proto/Gradido/GradidoTransfer.php | 109 - .../Proto/Gradido/GroupFriendsUpdate.php | 92 - .../Gradido/GroupFriendsUpdate/Action.php | 51 - .../Gradido/GroupFriendsUpdate_Action.php | 16 - .../Proto/Gradido/GroupMemberUpdate.php | 146 - .../GroupMemberUpdate/MemberUpdateType.php | 56 - .../GroupMemberUpdate_MemberUpdateType.php | 16 - .../Model/Messages/Proto/Gradido/HederaID.php | 135 - .../src/Model/Messages/Proto/Gradido/Key.php | 96 - .../Messages/Proto/Gradido/LocalTransfer.php | 85 - .../Messages/Proto/Gradido/ManageNodeBody.php | 90 - .../Proto/Gradido/ManageNodeGroupAdd.php | 119 - .../Proto/Gradido/ManageNodeRequest.php | 92 - .../Proto/Gradido/ManageNodeResponse.php | 85 - .../Gradido/ManageNodeResponse/ErrorCode.php | 61 - .../Gradido/ManageNodeResponse_ErrorCode.php | 16 - .../Messages/Proto/Gradido/SignatureMap.php | 65 - .../Messages/Proto/Gradido/SignaturePair.php | 123 - .../Messages/Proto/Gradido/Timestamp.php | 101 - .../Proto/Gradido/TimestampSeconds.php | 67 - .../Proto/Gradido/TransactionBody.php | 220 - .../Messages/Proto/Gradido/TransferAmount.php | 85 - .../src/Model/Navigation/NaviBreakLine.php | 16 - .../src/Model/Navigation/NaviEntry.php | 89 - .../Navigation/NaviEntryAbsoluteLink.php | 92 - .../src/Model/Navigation/NaviEntryBase.php | 31 - .../Model/Navigation/NaviEntryExternLink.php | 26 - .../src/Model/Navigation/NaviEntrySub.php | 105 - .../src/Model/Navigation/NaviHierarchy.php | 49 - .../Model/Navigation/NaviHierarchyEntry.php | 53 - .../src/Model/Navigation/TitleOnly.php | 37 - .../src/Model/Table/AddressTypesTable.php | 74 - .../src/Model/Table/AdminErrorsTable.php | 107 - community_server/src/Model/Table/AppTable.php | 41 - .../src/Model/Table/BlockchainTypesTable.php | 94 - .../Model/Table/CommunityProfilesTable.php | 81 - .../src/Model/Table/ElopageBuysTable.php | 116 - .../src/Model/Table/OperatorTypesTable.php | 70 - .../src/Model/Table/OperatorsTable.php | 93 - .../src/Model/Table/RolesTable.php | 72 - .../src/Model/Table/ServerUsersTable.php | 101 - .../src/Model/Table/StateBalancesTable.php | 325 - .../src/Model/Table/StateCreatedTable.php | 96 - .../src/Model/Table/StateErrorsTable.php | 88 - .../Model/Table/StateGroupAddressesTable.php | 85 - .../Table/StateGroupRelationshipsTable.php | 85 - .../src/Model/Table/StateGroupsTable.php | 102 - .../Table/StateRelationshipTypesTable.php | 63 - .../src/Model/Table/StateUserRolesTable.php | 86 - .../Table/StateUserTransactionsTable.php | 85 - .../src/Model/Table/StateUsersTable.php | 136 - .../Model/Table/TransactionCreationsTable.php | 89 - .../Table/TransactionGroupAddaddressTable.php | 88 - .../TransactionGroupAllowtradesTable.php | 83 - .../Table/TransactionGroupCreatesTable.php | 89 - .../Model/Table/TransactionSendCoinsTable.php | 102 - .../Table/TransactionSignaturesTable.php | 81 - .../src/Model/Table/TransactionTypesTable.php | 120 - .../src/Model/Table/TransactionsTable.php | 469 - .../src/Model/Table/UsersTable.php | 130 - .../src/Model/Transactions/Record.php | 575 - .../src/Model/Transactions/SignatureMap.php | 68 - .../src/Model/Transactions/Transaction.php | 289 - .../Model/Transactions/TransactionBase.php | 166 - .../Model/Transactions/TransactionBody.php | 194 - .../Transactions/TransactionCreation.php | 249 - .../Transactions/TransactionTransfer.php | 249 - .../Model/Validation/GenericValidation.php | 35 - .../Validation/TransactionValidation.php | 49 - community_server/src/Shell/ConsoleShell.php | 81 - .../src/Template/AddressTypes/add.ctp | 28 - .../src/Template/AddressTypes/edit.ctp | 34 - .../src/Template/AddressTypes/index.ctp | 53 - .../src/Template/AddressTypes/view.ctp | 92 - .../src/Template/AdminErrors/add.ctp | 30 - .../src/Template/AdminErrors/edit.ctp | 36 - .../src/Template/AdminErrors/index.ctp | 58 - .../src/Template/AdminErrors/view.ctp | 54 - .../src/Template/AppRequests/get_balance.ctp | 15 - .../AppRequests/list_transactions.ctp | 31 - .../src/Template/BlockchainTypes/add.ctp | 25 - .../src/Template/BlockchainTypes/edit.ctp | 31 - .../src/Template/BlockchainTypes/index.ctp | 51 - .../src/Template/BlockchainTypes/view.ctp | 36 - community_server/src/Template/Cell/empty | 1 - .../src/Template/CommunityProfiles/add.ctp | 24 - .../src/Template/CommunityProfiles/edit.ctp | 30 - .../src/Template/CommunityProfiles/index.ctp | 49 - .../src/Template/CommunityProfiles/view.ctp | 32 - .../Template/Dashboard/error_http_request.ctp | 14 - .../src/Template/Dashboard/index.ctp | 143 - .../src/Template/Dashboard/server_index.ctp | 36 - .../src/Template/Element/Flash/default.ctp | 13 - .../src/Template/Element/Flash/error.ctp | 10 - .../src/Template/Element/Flash/success.ctp | 10 - .../src/Template/Element/centToFloat.ctp | 22 - .../src/Template/Element/navi.ctp | 38 - .../src/Template/Element/navi_center.ctp | 7 - .../src/Template/Element/navi_header.ctp | 45 - .../src/Template/Element/navi_notify.ctp | 44 - .../src/Template/Element/printEuro.ctp | 24 - .../src/Template/Element/printGDT.ctp | 24 - .../src/Template/Element/printGradido.ctp | 19 - .../src/Template/Element/user_menu.ctp | 43 - .../src/Template/ElopageBuys/add.ctp | 33 - .../src/Template/ElopageBuys/edit.ctp | 39 - .../src/Template/ElopageBuys/index.ctp | 67 - .../src/Template/ElopageBuys/statistics.ctp | 35 - .../src/Template/ElopageBuys/view.ctp | 68 - .../src/Template/Email/html/default.ctp | 20 - .../src/Template/Email/text/default.ctp | 16 - .../Email/text/notification_creation.ctp | 19 - .../text/notification_transaction_failed.ctp | 50 - .../Email/text/notification_transfer.ctp | 26 - .../src/Template/Error/error400.ctp | 38 - .../src/Template/Error/error500.ctp | 43 - .../Template/Layout/Email/html/default.ctp | 24 - .../Template/Layout/Email/text/default.ctp | 16 - community_server/src/Template/Layout/ajax.ctp | 16 - .../src/Template/Layout/default.ctp | 53 - .../src/Template/Layout/error.ctp | 47 - .../src/Template/Layout/frontend.ctp | 113 - .../src/Template/Layout/rss/default.ctp | 11 - .../src/Template/OperatorTypes/add.ctp | 26 - .../src/Template/OperatorTypes/edit.ctp | 32 - .../src/Template/OperatorTypes/index.ctp | 51 - .../src/Template/OperatorTypes/view.ctp | 61 - .../src/Template/Operators/add.ctp | 26 - .../src/Template/Operators/edit.ctp | 32 - .../src/Template/Operators/index.ctp | 56 - .../src/Template/Operators/view.ctp | 40 - .../src/Template/Pages/cake_home.ctp | 276 - .../src/Template/Pages/gradido.ctp | 14 - community_server/src/Template/Pages/home.ctp | 19 - community_server/src/Template/Pages/js.ctp | 41 - .../src/Template/Pages/visitor.ctp | 16 - .../src/Template/Profile/edit.ctp | 41 - .../src/Template/Profile/index.ctp | 82 - community_server/src/Template/Roles/add.ctp | 23 - community_server/src/Template/Roles/edit.ctp | 29 - community_server/src/Template/Roles/index.ctp | 47 - community_server/src/Template/Roles/view.ctp | 28 - .../src/Template/ServerUsers/add.ctp | 26 - .../src/Template/ServerUsers/edit.ctp | 34 - .../src/Template/ServerUsers/index.ctp | 59 - .../src/Template/ServerUsers/login.ctp | 22 - .../src/Template/ServerUsers/view.ctp | 56 - .../src/Template/StateBalances/add.ctp | 27 - .../src/Template/StateBalances/edit.ctp | 33 - .../src/Template/StateBalances/index.ctp | 54 - .../src/Template/StateBalances/overview.ctp | 166 - .../Template/StateBalances/overview_gdt.ctp | 123 - .../src/Template/StateBalances/view.ctp | 39 - .../src/Template/StateCreated/add.ctp | 31 - .../src/Template/StateCreated/edit.ctp | 37 - .../src/Template/StateCreated/index.ctp | 61 - .../src/Template/StateCreated/view.ctp | 52 - .../src/Template/StateErrors/add.ctp | 29 - .../src/Template/StateErrors/edit.ctp | 35 - .../src/Template/StateErrors/index.ctp | 55 - .../Template/StateErrors/show_for_user.ctp | 51 - .../src/Template/StateErrors/view.ctp | 44 - .../src/Template/StateGroupAddresses/add.ctp | 28 - .../src/Template/StateGroupAddresses/edit.ctp | 34 - .../Template/StateGroupAddresses/index.ctp | 55 - .../src/Template/StateGroupAddresses/view.ctp | 36 - .../Template/StateGroupRelationships/add.ctp | 25 - .../Template/StateGroupRelationships/edit.ctp | 31 - .../StateGroupRelationships/index.ctp | 51 - .../Template/StateGroupRelationships/view.ctp | 36 - .../src/Template/StateGroups/add.ctp | 32 - .../src/Template/StateGroups/edit.ctp | 38 - .../src/Template/StateGroups/index.ctp | 57 - .../src/Template/StateGroups/view.ctp | 152 - .../Template/StateRelationshipTypes/add.ctp | 24 - .../Template/StateRelationshipTypes/edit.ctp | 30 - .../Template/StateRelationshipTypes/index.ctp | 49 - .../Template/StateRelationshipTypes/view.ctp | 32 - .../Template/StateUserRoles/assign_role.ctp | 49 - .../src/Template/StateUserRoles/index.ctp | 69 - .../src/Template/StateUserRoles/search.ctp | 53 - .../Template/StateUserTransactions/add.ctp | 31 - .../Template/StateUserTransactions/edit.ctp | 37 - .../Template/StateUserTransactions/index.ctp | 57 - .../Template/StateUserTransactions/view.ctp | 42 - .../src/Template/StateUsers/add.ctp | 34 - .../src/Template/StateUsers/edit.ctp | 39 - .../src/Template/StateUsers/index.ctp | 69 - .../Template/StateUsers/list_ident_hashes.ctp | 29 - .../src/Template/StateUsers/search.ctp | 79 - .../src/Template/StateUsers/view.ctp | 143 - .../src/Template/TransactionCreations/add.ctp | 29 - .../Template/TransactionCreations/create.ctp | 31 - .../TransactionCreations/create_multi.ctp | 229 - .../Template/TransactionCreations/edit.ctp | 35 - .../Template/TransactionCreations/index.ctp | 58 - .../Template/TransactionCreations/view.ctp | 40 - .../TransactionGroupAddaddress/add.ctp | 28 - .../TransactionGroupAddaddress/edit.ctp | 34 - .../TransactionGroupAddaddress/index.ctp | 55 - .../TransactionGroupAddaddress/view.ctp | 36 - .../TransactionGroupAllowtrades/add.ctp | 27 - .../TransactionGroupAllowtrades/edit.ctp | 33 - .../TransactionGroupAllowtrades/index.ctp | 53 - .../TransactionGroupAllowtrades/view.ctp | 38 - .../Template/TransactionGroupCreates/add.ctp | 29 - .../Template/TransactionGroupCreates/edit.ctp | 35 - .../TransactionGroupCreates/index.ctp | 55 - .../Template/TransactionGroupCreates/view.ctp | 40 - .../src/Template/TransactionSendCoins/add.ctp | 30 - .../Template/TransactionSendCoins/create.ctp | 40 - .../TransactionSendCoins/create_raw.ctp | 55 - .../Template/TransactionSendCoins/edit.ctp | 36 - .../Template/TransactionSendCoins/index.ctp | 57 - .../Template/TransactionSendCoins/view.ctp | 44 - .../Template/TransactionSignatures/add.ctp | 25 - .../Template/TransactionSignatures/edit.ctp | 31 - .../Template/TransactionSignatures/index.ctp | 49 - .../Template/TransactionSignatures/view.ctp | 30 - .../src/Template/TransactionTypes/add.ctp | 26 - .../src/Template/TransactionTypes/edit.ctp | 32 - .../src/Template/TransactionTypes/index.ctp | 51 - .../src/Template/TransactionTypes/view.ctp | 63 - .../src/Template/Transactions/add.ctp | 44 - .../src/Template/Transactions/decode.ctp | 36 - .../src/Template/Transactions/edit.ctp | 49 - .../src/Template/Transactions/index.ctp | 58 - .../Transactions/manual_transaction.ctp | 63 - .../Template/Transactions/send_to_node.ctp | 106 - ...nchronize_with_state_user_transactions.ctp | 46 - .../src/Template/Transactions/view.ctp | 259 - community_server/src/Template/Users/add.ctp | 28 - community_server/src/Template/Users/edit.ctp | 34 - community_server/src/Template/Users/index.ctp | 59 - .../src/Template/Users/statistics.ctp | 98 - community_server/src/Template/Users/view.ctp | 52 - community_server/src/View/AjaxView.php | 49 - community_server/src/View/AppView.php | 40 - community_server/src/View/Cell/empty | 0 community_server/src/View/Helper/empty | 0 community_server/testJson.sh | 5 - .../tests/Fixture/AddressTypesFixture.php | 46 - .../tests/Fixture/AdminErrorsFixture.php | 56 - .../tests/Fixture/BaseTestFixture.php | 36 - .../Fixture/CommunityProfilesFixture.php | 51 - .../tests/Fixture/ElopageBuysFixture.php | 64 - .../tests/Fixture/OperatorTypesFixture.php | 46 - .../tests/Fixture/OperatorsFixture.php | 49 - .../tests/Fixture/RolesFixture.php | 45 - .../tests/Fixture/ServerUsersFixture.php | 58 - .../tests/Fixture/StateBalancesFixture.php | 46 - .../tests/Fixture/StateCreatedFixture.php | 63 - .../tests/Fixture/StateErrorsFixture.php | 50 - .../Fixture/StateGroupAddressesFixture.php | 49 - .../StateGroupRelationshipsFixture.php | 48 - .../tests/Fixture/StateGroupsFixture.php | 50 - .../Fixture/StateRelationshipTypesFixture.php | 46 - .../Fixture/StateUserTransactionsFixture.php | 59 - .../tests/Fixture/StateUsersFixture.php | 54 - .../Fixture/TransactionCreationsFixture.php | 44 - .../TransactionGroupAddaddressFixture.php | 54 - .../TransactionGroupAllowtradesFixture.php | 48 - .../TransactionGroupCreatesFixture.php | 50 - .../Fixture/TransactionSendCoinsFixture.php | 54 - .../Fixture/TransactionSignaturesFixture.php | 51 - .../tests/Fixture/TransactionTypesFixture.php | 51 - .../tests/Fixture/TransactionsFixture.php | 55 - .../tests/Fixture/UsersFixture.php | 61 - .../tests/TestCase/ApplicationTest.php | 83 - .../Controller/AddressTypesControllerTest.php | 77 - .../Controller/AdminErrorsControllerTest.php | 76 - .../AppRequestControllerTest.php.old | 345 - .../CommunityProfilesControllerTest.php | 75 - .../Component/GradidoNumberComponentTest.php | 95 - .../JsonRequestClientComponentTest.php | 72 - .../Controller/DashboardControllerTest.php | 45 - .../JsonRequestHandlerControllerTest.php | 176 - .../Controller/PagesControllerTest.php | 101 - .../Controller/ProfilesControllerTest.php | 76 - .../Controller/RolesControllerTest.php | 75 - .../StateBalancesControllerTest.php | 179 - .../Controller/StateErrorsControllerTest.php | 77 - .../StateUserTransactionsControllerTest.php | 78 - .../TransactionCreationsControllerTest.php | 97 - .../tests/TestCase/Model/Behavior/empty | 0 .../Model/Table/AddressTypesTableTest.php | 74 - .../Model/Table/AdminErrorsTableTest.php | 83 - .../Table/CommunityProfilesTableTest.php | 72 - .../TestCase/Model/Table/RolesTableTest.php | 82 - .../Model/Table/StateBalancesTableTest.php | 124 - .../Model/Table/StateErrorsTableTest.php | 84 - .../Table/StateUserTransactionsTableTest.php | 85 - .../Model/Table/StateUsersTableTest.php | 97 - .../Transactions/TransactionCreationTest.php | 41 - .../tests/TestCase/View/Helper/empty | 0 community_server/tests/bootstrap.php | 12 - community_server/tests/data/smallest.png | Bin 67 -> 0 bytes community_server/tests/data/verysmall.jpg | 1 - community_server/tests/testApi.sh | 4 - community_server/webroot/.htaccess | 5 - community_server/webroot/css/fonts_local.css | 79 - community_server/webroot/css/grd_styles.css | 1821 -- .../webroot/css/loginServer/style.css | 14488 --------------- community_server/webroot/css/main.css | 25 - .../webroot/css/materialdesignicons.min.css | 2 - community_server/webroot/css/normalize.css | 349 - .../webroot/css/rippleUI/style.css | 14705 ---------------- community_server/webroot/css/styles.css | 347 - community_server/webroot/favicon.ico | Bin 5694 -> 0 bytes community_server/webroot/favicon.png | Bin 7955 -> 0 bytes .../webroot/font/cakedingbats-webfont.eot | Bin 75538 -> 0 bytes .../webroot/font/cakedingbats-webfont.svg | 78 - .../webroot/font/cakedingbats-webfont.ttf | Bin 75412 -> 0 bytes .../webroot/font/cakedingbats-webfont.woff | Bin 43484 -> 0 bytes .../webroot/font/cakedingbats-webfont.woff2 | Bin 35456 -> 0 bytes .../Material-Icons-Outline.eot | Bin 220322 -> 0 bytes .../Material-Icons-Outline.ttf | Bin 189152 -> 0 bytes .../Material-Icons-Outline.woff | Bin 130986 -> 0 bytes .../Material-Icons-Outline.woff2 | Bin 67204 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Black.ttf | Bin 171480 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Bold.ttf | Bin 170760 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Light.ttf | Bin 170420 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Medium.ttf | Bin 172064 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Regular.ttf | Bin 171676 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Thin.ttf | Bin 171904 -> 0 bytes .../fonts/materialdesignicons-webfont.eot | Bin 531696 -> 0 bytes .../fonts/materialdesignicons-webfont.svg | 1 - .../fonts/materialdesignicons-webfont.ttf | Bin 531476 -> 0 bytes .../fonts/materialdesignicons-webfont.woff | Bin 256404 -> 0 bytes .../fonts/materialdesignicons-webfont.woff2 | Bin 188316 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-300.eot | Bin 15891 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-300.svg | 332 - .../webroot/fonts/open-sans-v18-latin-300.ttf | Bin 28208 -> 0 bytes .../fonts/open-sans-v18-latin-300.woff | Bin 18668 -> 0 bytes .../fonts/open-sans-v18-latin-300.woff2 | Bin 14932 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-600.eot | Bin 15952 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-600.svg | 336 - .../webroot/fonts/open-sans-v18-latin-600.ttf | Bin 28100 -> 0 bytes .../fonts/open-sans-v18-latin-600.woff | Bin 18696 -> 0 bytes .../fonts/open-sans-v18-latin-600.woff2 | Bin 14880 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-700.eot | Bin 16045 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-700.svg | 334 - .../webroot/fonts/open-sans-v18-latin-700.ttf | Bin 28848 -> 0 bytes .../fonts/open-sans-v18-latin-700.woff | Bin 18900 -> 0 bytes .../fonts/open-sans-v18-latin-700.woff2 | Bin 15056 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-800.eot | Bin 16123 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-800.svg | 336 - .../webroot/fonts/open-sans-v18-latin-800.ttf | Bin 28820 -> 0 bytes .../fonts/open-sans-v18-latin-800.woff | Bin 19072 -> 0 bytes .../fonts/open-sans-v18-latin-800.woff2 | Bin 15088 -> 0 bytes .../fonts/open-sans-v18-latin-regular.eot | Bin 15404 -> 0 bytes .../fonts/open-sans-v18-latin-regular.svg | 336 - .../fonts/open-sans-v18-latin-regular.ttf | Bin 27088 -> 0 bytes .../fonts/open-sans-v18-latin-regular.woff | Bin 18100 -> 0 bytes .../fonts/open-sans-v18-latin-regular.woff2 | Bin 14380 -> 0 bytes community_server/webroot/img/50x50.png | Bin 182 -> 0 bytes community_server/webroot/img/cake-logo.png | Bin 2683 -> 0 bytes community_server/webroot/img/cake.icon.png | Bin 943 -> 0 bytes community_server/webroot/img/cake.logo.svg | 41 - community_server/webroot/img/cake.power.gif | Bin 201 -> 0 bytes .../webroot/img/gradido_logo_web.png | Bin 22236 -> 0 bytes .../webroot/img/gradido_logo_web.webp | Bin 13480 -> 0 bytes community_server/webroot/img/logo_half.png | Bin 6832 -> 0 bytes community_server/webroot/img/logo_half.webp | Bin 2490 -> 0 bytes community_server/webroot/img/logo_schrift.png | Bin 22236 -> 0 bytes .../webroot/img/logo_schrift.webp | Bin 13480 -> 0 bytes community_server/webroot/index.php | 41 - community_server/webroot/js/basic.js | 116 - community_server/webroot/js/core.js | 1 - .../webroot/js/ensurePassphrase.js | 1927 -- .../webroot/js/ensurePassphrase.min.js | 1 - community_server/webroot/js/popper.min.js | 6 - community_server/webroot/js/tabs.js | 27 - .../webroot/js/time_calculations.js | 68 - .../webroot/js/tippy-bundle.umd.min.js | 2 - community_server/webroot/js/userSearch.js | 9185 ---------- community_server/webroot/js/userSearch.min.js | 1 - community_server/webroot/js/vendor.addons.js | 1 - .../transaktion-bestaetigen-login.html | 129 - community_server/websrc/gulpfile.js | 58 - community_server/websrc/package.json | 36 - .../websrc/src/less/01-layout.less | 113 - .../websrc/src/less/02-colors.less | 160 - .../websrc/src/less/03-typography.less | 32 - .../websrc/src/less/05-screen.less | 174 - .../websrc/src/less/06-messages.less | 89 - community_server/websrc/src/less/07-user.less | 134 - community_server/websrc/src/less/08-navi.less | 451 - .../websrc/src/less/09-notification.less | 160 - .../websrc/src/less/10-center.less | 224 - .../src/less/12-center-form-single.less | 164 - .../websrc/src/less/15-facts.less | 62 - community_server/websrc/src/less/20-list.less | 239 - community_server/websrc/src/less/21-tabs.less | 45 - community_server/websrc/src/less/30-form.less | 238 - configs/community_server/app.php | 431 - docker-compose.override.yml | 17 - docker-compose.test.yml | 18 - docker-compose.yml | 19 - php-fpm/Dockerfile | 9 - 526 files changed, 1 insertion(+), 97999 deletions(-) delete mode 100644 community_server/.gitignore delete mode 100644 community_server/.gitmodules delete mode 100644 community_server/Dockerfile delete mode 100644 community_server/README.md delete mode 100755 community_server/bin/cake delete mode 100644 community_server/bin/cake.bat delete mode 100644 community_server/bin/cake.php delete mode 100644 community_server/composer.json delete mode 100644 community_server/composer.lock delete mode 100644 community_server/config/app.default.php delete mode 100644 community_server/config/bootstrap.php delete mode 100644 community_server/config/bootstrap_cli.php delete mode 100644 community_server/config/horizontal_form.php delete mode 100644 community_server/config/nginx/fastcgi.conf delete mode 100644 community_server/config/nginx/mime.types delete mode 100644 community_server/config/nginx/nginx.conf delete mode 100644 community_server/config/paths.php delete mode 100644 community_server/config/php-fpm/php-ini-overrides.ini delete mode 100644 community_server/config/requirements.php delete mode 100644 community_server/config/ripple_control_group_form.php delete mode 100644 community_server/config/routes.php delete mode 100644 community_server/config/schema/i18n.sql delete mode 100644 community_server/config/schema/sessions.sql delete mode 100755 community_server/copy_to_www.sh delete mode 100644 community_server/docu/community-server.api.md delete mode 100644 community_server/index.php delete mode 100644 community_server/npm-debug.log delete mode 100755 community_server/parse_proto.sh delete mode 100644 community_server/phpunit.xml.dist delete mode 100644 community_server/plugins/empty delete mode 100644 community_server/src/Application.php delete mode 100644 community_server/src/Console/Installer.php delete mode 100644 community_server/src/Controller/AddressTypesController.php delete mode 100644 community_server/src/Controller/AdminErrorsController.php delete mode 100644 community_server/src/Controller/AppController.php delete mode 100644 community_server/src/Controller/AppRequestsController.php delete mode 100644 community_server/src/Controller/BlockchainTypesController.php delete mode 100644 community_server/src/Controller/CommunityProfilesController.php delete mode 100644 community_server/src/Controller/Component/GradidoNumberComponent.php delete mode 100644 community_server/src/Controller/Component/JsonRequestClientComponent.php delete mode 100644 community_server/src/Controller/Component/JsonRpcRequestClientComponent.php delete mode 100644 community_server/src/Controller/DashboardController.php delete mode 100644 community_server/src/Controller/ElopageBuysController.php delete mode 100644 community_server/src/Controller/ElopageWebhookController.php delete mode 100644 community_server/src/Controller/ErrorController.php delete mode 100644 community_server/src/Controller/JsonRequestHandlerController.php delete mode 100644 community_server/src/Controller/OperatorTypesController.php delete mode 100644 community_server/src/Controller/OperatorsController.php delete mode 100644 community_server/src/Controller/PagesController.php delete mode 100644 community_server/src/Controller/ProfileController.php delete mode 100644 community_server/src/Controller/RolesController.php delete mode 100644 community_server/src/Controller/ServerUsersController.php delete mode 100644 community_server/src/Controller/StateBalancesController.php delete mode 100644 community_server/src/Controller/StateCreatedController.php delete mode 100644 community_server/src/Controller/StateErrorsController.php delete mode 100644 community_server/src/Controller/StateGroupAddressesController.php delete mode 100644 community_server/src/Controller/StateGroupRelationshipsController.php delete mode 100644 community_server/src/Controller/StateGroupsController.php delete mode 100644 community_server/src/Controller/StateRelationshipTypesController.php delete mode 100644 community_server/src/Controller/StateUserRolesController.php delete mode 100644 community_server/src/Controller/StateUserTransactionsController.php delete mode 100644 community_server/src/Controller/StateUsersController.php delete mode 100644 community_server/src/Controller/TransactionCreationsController.php delete mode 100644 community_server/src/Controller/TransactionGroupAddaddressController.php delete mode 100644 community_server/src/Controller/TransactionGroupAllowtradesController.php delete mode 100644 community_server/src/Controller/TransactionGroupCreatesController.php delete mode 100644 community_server/src/Controller/TransactionSendCoinsController.php delete mode 100644 community_server/src/Controller/TransactionSignaturesController.php delete mode 100644 community_server/src/Controller/TransactionTypesController.php delete mode 100644 community_server/src/Controller/TransactionsController.php delete mode 100644 community_server/src/Controller/UsersController.php delete mode 100644 community_server/src/Form/AssignRoleForm.php delete mode 100644 community_server/src/Form/CreationForm.php delete mode 100644 community_server/src/Form/DecodeTransaction.php delete mode 100644 community_server/src/Form/ProfileForm.php delete mode 100644 community_server/src/Form/TransferForm.php delete mode 100644 community_server/src/Form/TransferRawForm.php delete mode 100644 community_server/src/Form/UserSearchForm.php delete mode 100644 community_server/src/Locale/cake.pot delete mode 100644 community_server/src/Locale/de_DE/default.mo delete mode 100644 community_server/src/Locale/de_DE/default.po delete mode 100644 community_server/src/Locale/default.pot delete mode 100644 community_server/src/Model/Behavior/empty delete mode 100644 community_server/src/Model/Entity/AddressType.php delete mode 100644 community_server/src/Model/Entity/AdminError.php delete mode 100644 community_server/src/Model/Entity/BlockchainType.php delete mode 100644 community_server/src/Model/Entity/CommunityProfile.php delete mode 100644 community_server/src/Model/Entity/ElopageBuy.php delete mode 100644 community_server/src/Model/Entity/Operator.php delete mode 100644 community_server/src/Model/Entity/OperatorType.php delete mode 100644 community_server/src/Model/Entity/Role.php delete mode 100644 community_server/src/Model/Entity/ServerUser.php delete mode 100644 community_server/src/Model/Entity/StateBalance.php delete mode 100644 community_server/src/Model/Entity/StateCreated.php delete mode 100644 community_server/src/Model/Entity/StateError.php delete mode 100644 community_server/src/Model/Entity/StateGroup.php delete mode 100644 community_server/src/Model/Entity/StateGroupAddress.php delete mode 100644 community_server/src/Model/Entity/StateGroupRelationship.php delete mode 100644 community_server/src/Model/Entity/StateRelationshipType.php delete mode 100644 community_server/src/Model/Entity/StateUser.php delete mode 100644 community_server/src/Model/Entity/StateUserRole.php delete mode 100644 community_server/src/Model/Entity/StateUserTransaction.php delete mode 100644 community_server/src/Model/Entity/Transaction.php delete mode 100644 community_server/src/Model/Entity/TransactionCreation.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupAddaddres.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupAllowtrade.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupCreate.php delete mode 100644 community_server/src/Model/Entity/TransactionSendCoin.php delete mode 100644 community_server/src/Model/Entity/TransactionSignature.php delete mode 100644 community_server/src/Model/Entity/TransactionType.php delete mode 100644 community_server/src/Model/Entity/User.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/HederaID.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/Key.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/SignatureMap.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/Timestamp.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php delete mode 100644 community_server/src/Model/Navigation/NaviBreakLine.php delete mode 100644 community_server/src/Model/Navigation/NaviEntry.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryBase.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryExternLink.php delete mode 100644 community_server/src/Model/Navigation/NaviEntrySub.php delete mode 100644 community_server/src/Model/Navigation/NaviHierarchy.php delete mode 100644 community_server/src/Model/Navigation/NaviHierarchyEntry.php delete mode 100644 community_server/src/Model/Navigation/TitleOnly.php delete mode 100644 community_server/src/Model/Table/AddressTypesTable.php delete mode 100644 community_server/src/Model/Table/AdminErrorsTable.php delete mode 100644 community_server/src/Model/Table/AppTable.php delete mode 100644 community_server/src/Model/Table/BlockchainTypesTable.php delete mode 100644 community_server/src/Model/Table/CommunityProfilesTable.php delete mode 100644 community_server/src/Model/Table/ElopageBuysTable.php delete mode 100644 community_server/src/Model/Table/OperatorTypesTable.php delete mode 100644 community_server/src/Model/Table/OperatorsTable.php delete mode 100644 community_server/src/Model/Table/RolesTable.php delete mode 100644 community_server/src/Model/Table/ServerUsersTable.php delete mode 100644 community_server/src/Model/Table/StateBalancesTable.php delete mode 100644 community_server/src/Model/Table/StateCreatedTable.php delete mode 100644 community_server/src/Model/Table/StateErrorsTable.php delete mode 100644 community_server/src/Model/Table/StateGroupAddressesTable.php delete mode 100644 community_server/src/Model/Table/StateGroupRelationshipsTable.php delete mode 100644 community_server/src/Model/Table/StateGroupsTable.php delete mode 100644 community_server/src/Model/Table/StateRelationshipTypesTable.php delete mode 100644 community_server/src/Model/Table/StateUserRolesTable.php delete mode 100644 community_server/src/Model/Table/StateUserTransactionsTable.php delete mode 100644 community_server/src/Model/Table/StateUsersTable.php delete mode 100644 community_server/src/Model/Table/TransactionCreationsTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupAddaddressTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupAllowtradesTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupCreatesTable.php delete mode 100644 community_server/src/Model/Table/TransactionSendCoinsTable.php delete mode 100644 community_server/src/Model/Table/TransactionSignaturesTable.php delete mode 100644 community_server/src/Model/Table/TransactionTypesTable.php delete mode 100644 community_server/src/Model/Table/TransactionsTable.php delete mode 100644 community_server/src/Model/Table/UsersTable.php delete mode 100644 community_server/src/Model/Transactions/Record.php delete mode 100644 community_server/src/Model/Transactions/SignatureMap.php delete mode 100644 community_server/src/Model/Transactions/Transaction.php delete mode 100644 community_server/src/Model/Transactions/TransactionBase.php delete mode 100644 community_server/src/Model/Transactions/TransactionBody.php delete mode 100644 community_server/src/Model/Transactions/TransactionCreation.php delete mode 100644 community_server/src/Model/Transactions/TransactionTransfer.php delete mode 100644 community_server/src/Model/Validation/GenericValidation.php delete mode 100644 community_server/src/Model/Validation/TransactionValidation.php delete mode 100644 community_server/src/Shell/ConsoleShell.php delete mode 100644 community_server/src/Template/AddressTypes/add.ctp delete mode 100644 community_server/src/Template/AddressTypes/edit.ctp delete mode 100644 community_server/src/Template/AddressTypes/index.ctp delete mode 100644 community_server/src/Template/AddressTypes/view.ctp delete mode 100644 community_server/src/Template/AdminErrors/add.ctp delete mode 100644 community_server/src/Template/AdminErrors/edit.ctp delete mode 100644 community_server/src/Template/AdminErrors/index.ctp delete mode 100644 community_server/src/Template/AdminErrors/view.ctp delete mode 100644 community_server/src/Template/AppRequests/get_balance.ctp delete mode 100644 community_server/src/Template/AppRequests/list_transactions.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/add.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/edit.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/index.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/view.ctp delete mode 100644 community_server/src/Template/Cell/empty delete mode 100644 community_server/src/Template/CommunityProfiles/add.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/edit.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/index.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/view.ctp delete mode 100644 community_server/src/Template/Dashboard/error_http_request.ctp delete mode 100644 community_server/src/Template/Dashboard/index.ctp delete mode 100644 community_server/src/Template/Dashboard/server_index.ctp delete mode 100644 community_server/src/Template/Element/Flash/default.ctp delete mode 100644 community_server/src/Template/Element/Flash/error.ctp delete mode 100644 community_server/src/Template/Element/Flash/success.ctp delete mode 100644 community_server/src/Template/Element/centToFloat.ctp delete mode 100644 community_server/src/Template/Element/navi.ctp delete mode 100644 community_server/src/Template/Element/navi_center.ctp delete mode 100644 community_server/src/Template/Element/navi_header.ctp delete mode 100644 community_server/src/Template/Element/navi_notify.ctp delete mode 100644 community_server/src/Template/Element/printEuro.ctp delete mode 100644 community_server/src/Template/Element/printGDT.ctp delete mode 100644 community_server/src/Template/Element/printGradido.ctp delete mode 100644 community_server/src/Template/Element/user_menu.ctp delete mode 100644 community_server/src/Template/ElopageBuys/add.ctp delete mode 100644 community_server/src/Template/ElopageBuys/edit.ctp delete mode 100644 community_server/src/Template/ElopageBuys/index.ctp delete mode 100644 community_server/src/Template/ElopageBuys/statistics.ctp delete mode 100644 community_server/src/Template/ElopageBuys/view.ctp delete mode 100644 community_server/src/Template/Email/html/default.ctp delete mode 100644 community_server/src/Template/Email/text/default.ctp delete mode 100644 community_server/src/Template/Email/text/notification_creation.ctp delete mode 100644 community_server/src/Template/Email/text/notification_transaction_failed.ctp delete mode 100644 community_server/src/Template/Email/text/notification_transfer.ctp delete mode 100644 community_server/src/Template/Error/error400.ctp delete mode 100644 community_server/src/Template/Error/error500.ctp delete mode 100644 community_server/src/Template/Layout/Email/html/default.ctp delete mode 100644 community_server/src/Template/Layout/Email/text/default.ctp delete mode 100644 community_server/src/Template/Layout/ajax.ctp delete mode 100644 community_server/src/Template/Layout/default.ctp delete mode 100644 community_server/src/Template/Layout/error.ctp delete mode 100644 community_server/src/Template/Layout/frontend.ctp delete mode 100644 community_server/src/Template/Layout/rss/default.ctp delete mode 100644 community_server/src/Template/OperatorTypes/add.ctp delete mode 100644 community_server/src/Template/OperatorTypes/edit.ctp delete mode 100644 community_server/src/Template/OperatorTypes/index.ctp delete mode 100644 community_server/src/Template/OperatorTypes/view.ctp delete mode 100644 community_server/src/Template/Operators/add.ctp delete mode 100644 community_server/src/Template/Operators/edit.ctp delete mode 100644 community_server/src/Template/Operators/index.ctp delete mode 100644 community_server/src/Template/Operators/view.ctp delete mode 100644 community_server/src/Template/Pages/cake_home.ctp delete mode 100644 community_server/src/Template/Pages/gradido.ctp delete mode 100644 community_server/src/Template/Pages/home.ctp delete mode 100644 community_server/src/Template/Pages/js.ctp delete mode 100644 community_server/src/Template/Pages/visitor.ctp delete mode 100644 community_server/src/Template/Profile/edit.ctp delete mode 100644 community_server/src/Template/Profile/index.ctp delete mode 100644 community_server/src/Template/Roles/add.ctp delete mode 100644 community_server/src/Template/Roles/edit.ctp delete mode 100644 community_server/src/Template/Roles/index.ctp delete mode 100644 community_server/src/Template/Roles/view.ctp delete mode 100644 community_server/src/Template/ServerUsers/add.ctp delete mode 100644 community_server/src/Template/ServerUsers/edit.ctp delete mode 100644 community_server/src/Template/ServerUsers/index.ctp delete mode 100644 community_server/src/Template/ServerUsers/login.ctp delete mode 100644 community_server/src/Template/ServerUsers/view.ctp delete mode 100644 community_server/src/Template/StateBalances/add.ctp delete mode 100644 community_server/src/Template/StateBalances/edit.ctp delete mode 100644 community_server/src/Template/StateBalances/index.ctp delete mode 100644 community_server/src/Template/StateBalances/overview.ctp delete mode 100644 community_server/src/Template/StateBalances/overview_gdt.ctp delete mode 100644 community_server/src/Template/StateBalances/view.ctp delete mode 100644 community_server/src/Template/StateCreated/add.ctp delete mode 100644 community_server/src/Template/StateCreated/edit.ctp delete mode 100644 community_server/src/Template/StateCreated/index.ctp delete mode 100644 community_server/src/Template/StateCreated/view.ctp delete mode 100644 community_server/src/Template/StateErrors/add.ctp delete mode 100644 community_server/src/Template/StateErrors/edit.ctp delete mode 100644 community_server/src/Template/StateErrors/index.ctp delete mode 100644 community_server/src/Template/StateErrors/show_for_user.ctp delete mode 100644 community_server/src/Template/StateErrors/view.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/add.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/edit.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/index.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/view.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/add.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/edit.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/index.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/view.ctp delete mode 100644 community_server/src/Template/StateGroups/add.ctp delete mode 100644 community_server/src/Template/StateGroups/edit.ctp delete mode 100644 community_server/src/Template/StateGroups/index.ctp delete mode 100644 community_server/src/Template/StateGroups/view.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/add.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/edit.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/index.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/view.ctp delete mode 100644 community_server/src/Template/StateUserRoles/assign_role.ctp delete mode 100644 community_server/src/Template/StateUserRoles/index.ctp delete mode 100644 community_server/src/Template/StateUserRoles/search.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/add.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/edit.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/index.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/view.ctp delete mode 100644 community_server/src/Template/StateUsers/add.ctp delete mode 100644 community_server/src/Template/StateUsers/edit.ctp delete mode 100644 community_server/src/Template/StateUsers/index.ctp delete mode 100644 community_server/src/Template/StateUsers/list_ident_hashes.ctp delete mode 100644 community_server/src/Template/StateUsers/search.ctp delete mode 100644 community_server/src/Template/StateUsers/view.ctp delete mode 100644 community_server/src/Template/TransactionCreations/add.ctp delete mode 100644 community_server/src/Template/TransactionCreations/create.ctp delete mode 100644 community_server/src/Template/TransactionCreations/create_multi.ctp delete mode 100644 community_server/src/Template/TransactionCreations/edit.ctp delete mode 100644 community_server/src/Template/TransactionCreations/index.ctp delete mode 100644 community_server/src/Template/TransactionCreations/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/view.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/add.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/create.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/create_raw.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/edit.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/index.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/view.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/add.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/edit.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/index.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/view.ctp delete mode 100644 community_server/src/Template/TransactionTypes/add.ctp delete mode 100644 community_server/src/Template/TransactionTypes/edit.ctp delete mode 100644 community_server/src/Template/TransactionTypes/index.ctp delete mode 100644 community_server/src/Template/TransactionTypes/view.ctp delete mode 100644 community_server/src/Template/Transactions/add.ctp delete mode 100644 community_server/src/Template/Transactions/decode.ctp delete mode 100644 community_server/src/Template/Transactions/edit.ctp delete mode 100644 community_server/src/Template/Transactions/index.ctp delete mode 100644 community_server/src/Template/Transactions/manual_transaction.ctp delete mode 100644 community_server/src/Template/Transactions/send_to_node.ctp delete mode 100644 community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp delete mode 100644 community_server/src/Template/Transactions/view.ctp delete mode 100644 community_server/src/Template/Users/add.ctp delete mode 100644 community_server/src/Template/Users/edit.ctp delete mode 100644 community_server/src/Template/Users/index.ctp delete mode 100644 community_server/src/Template/Users/statistics.ctp delete mode 100644 community_server/src/Template/Users/view.ctp delete mode 100644 community_server/src/View/AjaxView.php delete mode 100644 community_server/src/View/AppView.php delete mode 100644 community_server/src/View/Cell/empty delete mode 100644 community_server/src/View/Helper/empty delete mode 100755 community_server/testJson.sh delete mode 100644 community_server/tests/Fixture/AddressTypesFixture.php delete mode 100644 community_server/tests/Fixture/AdminErrorsFixture.php delete mode 100644 community_server/tests/Fixture/BaseTestFixture.php delete mode 100644 community_server/tests/Fixture/CommunityProfilesFixture.php delete mode 100644 community_server/tests/Fixture/ElopageBuysFixture.php delete mode 100644 community_server/tests/Fixture/OperatorTypesFixture.php delete mode 100644 community_server/tests/Fixture/OperatorsFixture.php delete mode 100644 community_server/tests/Fixture/RolesFixture.php delete mode 100644 community_server/tests/Fixture/ServerUsersFixture.php delete mode 100644 community_server/tests/Fixture/StateBalancesFixture.php delete mode 100644 community_server/tests/Fixture/StateCreatedFixture.php delete mode 100644 community_server/tests/Fixture/StateErrorsFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupAddressesFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupRelationshipsFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupsFixture.php delete mode 100644 community_server/tests/Fixture/StateRelationshipTypesFixture.php delete mode 100644 community_server/tests/Fixture/StateUserTransactionsFixture.php delete mode 100644 community_server/tests/Fixture/StateUsersFixture.php delete mode 100644 community_server/tests/Fixture/TransactionCreationsFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupAddaddressFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupCreatesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionSendCoinsFixture.php delete mode 100644 community_server/tests/Fixture/TransactionSignaturesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionTypesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionsFixture.php delete mode 100644 community_server/tests/Fixture/UsersFixture.php delete mode 100644 community_server/tests/TestCase/ApplicationTest.php delete mode 100644 community_server/tests/TestCase/Controller/AddressTypesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old delete mode 100644 community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php delete mode 100644 community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php delete mode 100644 community_server/tests/TestCase/Controller/DashboardControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/PagesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/ProfilesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/RolesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateBalancesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateErrorsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php delete mode 100644 community_server/tests/TestCase/Model/Behavior/empty delete mode 100644 community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/RolesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateUsersTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php delete mode 100644 community_server/tests/TestCase/View/Helper/empty delete mode 100644 community_server/tests/bootstrap.php delete mode 100644 community_server/tests/data/smallest.png delete mode 100644 community_server/tests/data/verysmall.jpg delete mode 100755 community_server/tests/testApi.sh delete mode 100644 community_server/webroot/.htaccess delete mode 100644 community_server/webroot/css/fonts_local.css delete mode 100644 community_server/webroot/css/grd_styles.css delete mode 100644 community_server/webroot/css/loginServer/style.css delete mode 100644 community_server/webroot/css/main.css delete mode 100644 community_server/webroot/css/materialdesignicons.min.css delete mode 100644 community_server/webroot/css/normalize.css delete mode 100644 community_server/webroot/css/rippleUI/style.css delete mode 100644 community_server/webroot/css/styles.css delete mode 100644 community_server/webroot/favicon.ico delete mode 100644 community_server/webroot/favicon.png delete mode 100644 community_server/webroot/font/cakedingbats-webfont.eot delete mode 100644 community_server/webroot/font/cakedingbats-webfont.svg delete mode 100644 community_server/webroot/font/cakedingbats-webfont.ttf delete mode 100644 community_server/webroot/font/cakedingbats-webfont.woff delete mode 100644 community_server/webroot/font/cakedingbats-webfont.woff2 delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Black.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Bold.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Light.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Medium.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Regular.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Thin.ttf delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.eot delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.svg delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.ttf delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.woff delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 delete mode 100644 community_server/webroot/img/50x50.png delete mode 100644 community_server/webroot/img/cake-logo.png delete mode 100644 community_server/webroot/img/cake.icon.png delete mode 100644 community_server/webroot/img/cake.logo.svg delete mode 100644 community_server/webroot/img/cake.power.gif delete mode 100644 community_server/webroot/img/gradido_logo_web.png delete mode 100644 community_server/webroot/img/gradido_logo_web.webp delete mode 100644 community_server/webroot/img/logo_half.png delete mode 100644 community_server/webroot/img/logo_half.webp delete mode 100644 community_server/webroot/img/logo_schrift.png delete mode 100644 community_server/webroot/img/logo_schrift.webp delete mode 100644 community_server/webroot/index.php delete mode 100644 community_server/webroot/js/basic.js delete mode 100644 community_server/webroot/js/core.js delete mode 100644 community_server/webroot/js/ensurePassphrase.js delete mode 100644 community_server/webroot/js/ensurePassphrase.min.js delete mode 100644 community_server/webroot/js/popper.min.js delete mode 100644 community_server/webroot/js/tabs.js delete mode 100644 community_server/webroot/js/time_calculations.js delete mode 100644 community_server/webroot/js/tippy-bundle.umd.min.js delete mode 100644 community_server/webroot/js/userSearch.js delete mode 100644 community_server/webroot/js/userSearch.min.js delete mode 100644 community_server/webroot/js/vendor.addons.js delete mode 100644 community_server/webroot/transaktion-bestaetigen-login.html delete mode 100644 community_server/websrc/gulpfile.js delete mode 100644 community_server/websrc/package.json delete mode 100644 community_server/websrc/src/less/01-layout.less delete mode 100644 community_server/websrc/src/less/02-colors.less delete mode 100644 community_server/websrc/src/less/03-typography.less delete mode 100644 community_server/websrc/src/less/05-screen.less delete mode 100644 community_server/websrc/src/less/06-messages.less delete mode 100644 community_server/websrc/src/less/07-user.less delete mode 100644 community_server/websrc/src/less/08-navi.less delete mode 100644 community_server/websrc/src/less/09-notification.less delete mode 100644 community_server/websrc/src/less/10-center.less delete mode 100644 community_server/websrc/src/less/12-center-form-single.less delete mode 100644 community_server/websrc/src/less/15-facts.less delete mode 100644 community_server/websrc/src/less/20-list.less delete mode 100644 community_server/websrc/src/less/21-tabs.less delete mode 100644 community_server/websrc/src/less/30-form.less delete mode 100644 configs/community_server/app.php delete mode 100644 php-fpm/Dockerfile diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9f34c7f5e..ff372f061 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -106,43 +106,6 @@ jobs: name: docker-database-production_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD PRODUCTION COMMUNITY SERVER ############################## - ############################################################################## - build_production_community_server: - name: Docker Build Production - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # COMMUNITY SERVER ####################################################### - ########################################################################## - - name: Community Server | Build `production` image - run: | - docker build -t "gradido/community_server:latest" -t "gradido/community_server:production" -t "gradido/community_server:${VERSION}" -t "gradido/community_server:${BUILD_VERSION}" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-production - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD PRODUCTION MARIADB ####################################### ############################################################################## @@ -223,7 +186,7 @@ jobs: upload_to_dockerhub: name: Upload to Dockerhub runs-on: ubuntu-latest - needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_community_server, build_production_mariadb, build_production_nginx] + needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_mariadb, build_production_nginx] env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -257,13 +220,6 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/database_up.tar - - name: Download Docker Image (Community Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - name: Download Docker Image (MariaDB) uses: actions/download-artifact@v2 with: @@ -289,8 +245,6 @@ jobs: run: docker push --all-tags gradido/backend - name: Push database run: docker push --all-tags gradido/database - - name: Push community_server - run: docker push --all-tags gradido/community_server - name: Push MariaDB run: docker push --all-tags gradido/mariadb - name: Push Nginx diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e3a140658..f1fb929d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -107,32 +107,6 @@ jobs: name: docker-database-test_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD TEST COMMUNITY SERVER #################################### - ############################################################################## - build_test_community_server: - name: Docker Build Test - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # BUILD COMMUNITY SERVER DOCKER IMAGE #################################### - ########################################################################## - - name: community server | Build `test` image - run: | - docker build -t "gradido/community_server:test" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server:test" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-test - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD TEST MARIADB ############################################# ############################################################################## @@ -509,73 +483,6 @@ jobs: min_coverage: 38 token: ${{ github.token }} - ############################################################################## - # JOB: UNIT TEST COMMUNITY-SERVER ########################################### - ############################################################################## - unit_test_community_server: - name: Unit tests - Community Server - runs-on: ubuntu-latest - needs: [build_test_community_server] - services: - mariadb: - image: gradido/mariadb:test - env: - MARIADB_ALLOW_EMPTY_PASSWORD: 1 - MARIADB_USER: root - options: --health-cmd="mysqladmin ping" - --health-interval=5s - --health-timeout=5s - --health-retries=3 - steps: - - name: get mariadb container id - run: echo "::set-output name=id::$(docker container ls | grep mariadb | awk '{ print $1 }')" - id: mariadb_container - - name: get automatic created network - run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')" - id: network - - name: Start database migration - run: docker run --network ${{ steps.network.outputs.id }} --name=database --env NODE_ENV=production --env DB_HOST=mariadb --env DB_DATABASE=gradido_community_test -d gradido/database:production_up - - name: get database migration container id - run: echo "::set-output name=id::$(docker container ls | grep database | awk '{ print $1 }')" - id: database_container - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # DOWNLOAD DOCKER IMAGE ################################################## - ########################################################################## - - name: Download Docker Image (Community-Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-test - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - - name: check mariadb - run: docker logs ${{ steps.mariadb_container.outputs.id }} - - name: check migration - run: docker logs ${{ steps.database_container.outputs.id }} - ########################################################################## - # UNIT TESTS BACKEND COMMUNITY-SERVER ####################################### - ########################################################################## - - name: community server | Unit tests - run: | - docker run --network ${{ steps.network.outputs.id }} -v ~/coverage:/var/www/cakephp/webroot/coverage gradido/community_server:test - cp -r ~/coverage ./coverage - ######################################################################### - # COVERAGE CHECK BACKEND COMMUNITY-SERVER #################################### - ########################################################################## - - name: backend community | Coverage check - uses: einhornimmond/coverage-check-action@master - with: - report_name: Coverage Backend Community - type: phpunit - result_path: ./coverage/coverage.info - min_coverage: 10 - token: ${{ github.token }} - ########################################################################## # DATABASE MIGRATION TEST UP + RESET ##################################### ########################################################################## diff --git a/community_server/.gitignore b/community_server/.gitignore deleted file mode 100644 index 633978598..000000000 --- a/community_server/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -config/app.php -logs/ -src/GPBMetadata/ -tmp/ -vendor/ -websrc/node_modules/ -websrc/package-lock.json -mithril_client/ -websrc/src/less-files.css - diff --git a/community_server/.gitmodules b/community_server/.gitmodules deleted file mode 100644 index 8499eaac6..000000000 --- a/community_server/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "src/protobuf"] - path = src/protobuf - url = git@github.com:gradido/gradido_protocol.git diff --git a/community_server/Dockerfile b/community_server/Dockerfile deleted file mode 100644 index c553137c6..000000000 --- a/community_server/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -FROM phpdockerio/php74-fpm as community_server - -# install php fpm -RUN apt-get update \ - && apt-get -y --no-install-recommends install curl unzip php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql php7.4-xdebug \ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - -WORKDIR /var/www/cakephp -RUN mkdir logs && mkdir tmp && chmod 777 logs && chmod 777 tmp -COPY ./community_server/ . -COPY ./configs/community_server/app.php ./config/ - -RUN composer update -RUN composer dump-autoload - -######### special for code coverage and testing -FROM community_server as test - - -RUN apt-get update \ - && apt-get -y --no-install-recommends install php7.4-xdebug \ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - - -ENV XDEBUG_MODE=coverage -#RUN composer require --dev rregeer/phpunit-coverage-check - -#CMD ./vendor/bin/phpunit --coverage-clover=./webroot/coverage/clover.xml -CMD ./vendor/bin/phpunit --coverage-text=./webroot/coverage/coverage.info - diff --git a/community_server/README.md b/community_server/README.md deleted file mode 100644 index 61f89d306..000000000 --- a/community_server/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# CakePHP Application Skeleton - -[![Build Status](https://img.shields.io/travis/cakephp/app/master.svg?style=flat-square)](https://travis-ci.org/cakephp/app) -[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/app.svg?style=flat-square)](https://packagist.org/packages/cakephp/app) - -A skeleton for creating applications with [CakePHP](https://cakephp.org) 3.x. - -The framework source code can be found here: [cakephp/cakephp](https://github.com/cakephp/cakephp). - -## Installation - -1. Download [Composer](https://getcomposer.org/doc/00-intro.md) or update `composer self-update`. -2. Run `php composer.phar create-project --prefer-dist cakephp/app [app_name]`. - -If Composer is installed globally, run - -```bash -composer create-project --prefer-dist cakephp/app -``` - -In case you want to use a custom app dir name (e.g. `/myapp/`): - -```bash -composer create-project --prefer-dist cakephp/app myapp -``` - -You can now either use your machine's webserver to view the default home page, or start -up the built-in webserver with: - -```bash -bin/cake server -p 8765 -``` - -Then visit `http://localhost:8765` to see the welcome page. - -## Update - -Since this skeleton is a starting point for your application and various files -would have been modified as per your needs, there isn't a way to provide -automated upgrades, so you have to do any updates manually. - -## Configuration - -Read and edit `config/app.php` and setup the `'Datasources'` and any other -configuration relevant for your application. - -## Layout - -The app skeleton uses a subset of [Foundation](http://foundation.zurb.com/) (v5) CSS -framework by default. You can, however, replace it with any other library or -custom styles. diff --git a/community_server/bin/cake b/community_server/bin/cake deleted file mode 100755 index 4b696c883..000000000 --- a/community_server/bin/cake +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env sh -################################################################################ -# -# Cake is a shell script for invoking CakePHP shell commands -# -# CakePHP(tm) : Rapid Development Framework (https://cakephp.org) -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# -# @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# @link https://cakephp.org CakePHP(tm) Project -# @since 1.2.0 -# @license https://opensource.org/licenses/mit-license.php MIT License -# -################################################################################ - -# Canonicalize by following every symlink of the given name recursively -canonicalize() { - NAME="$1" - if [ -f "$NAME" ] - then - DIR=$(dirname -- "$NAME") - NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME") - fi - while [ -h "$NAME" ]; do - DIR=$(dirname -- "$NAME") - SYM=$(readlink "$NAME") - NAME=$(cd "$DIR" > /dev/null && cd "$(dirname -- "$SYM")" > /dev/null && pwd)/$(basename -- "$SYM") - done - echo "$NAME" -} - -# Find a CLI version of PHP -findCliPhp() { - for TESTEXEC in php php-cli /usr/local/bin/php - do - SAPI=$(echo "" | $TESTEXEC 2>/dev/null) - if [ "$SAPI" = "cli" ] - then - echo $TESTEXEC - return - fi - done - echo "Failed to find a CLI version of PHP; falling back to system standard php executable" >&2 - echo "php"; -} - -# If current path is a symlink, resolve to real path -realname="$0" -if [ -L "$realname" ] -then - realname=$(readlink -f "$0") -fi - -CONSOLE=$(dirname -- "$(canonicalize "$realname")") -APP=$(dirname "$CONSOLE") - -# If your CLI PHP is somewhere that this doesn't find, you can define a PHP environment -# variable with the correct path in it. -if [ -z "$PHP" ] -then - PHP=$(findCliPhp) -fi - -if [ "$(basename "$realname")" != 'cake' ] -then - exec "$PHP" "$CONSOLE"/cake.php "$(basename "$realname")" "$@" -else - exec "$PHP" "$CONSOLE"/cake.php "$@" -fi - -exit diff --git a/community_server/bin/cake.bat b/community_server/bin/cake.bat deleted file mode 100644 index ad1378229..000000000 --- a/community_server/bin/cake.bat +++ /dev/null @@ -1,27 +0,0 @@ -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Cake is a Windows batch script for invoking CakePHP shell commands -:: -:: CakePHP(tm) : Rapid Development Framework (https://cakephp.org) -:: Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -:: -:: Licensed under The MIT License -:: Redistributions of files must retain the above copyright notice. -:: -:: @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -:: @link https://cakephp.org CakePHP(tm) Project -:: @since 2.0.0 -:: @license https://opensource.org/licenses/mit-license.php MIT License -:: -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -@echo off - -SET app=%0 -SET lib=%~dp0 - -php "%lib%cake.php" %* - -echo. - -exit /B %ERRORLEVEL% diff --git a/community_server/bin/cake.php b/community_server/bin/cake.php deleted file mode 100644 index 320ee3643..000000000 --- a/community_server/bin/cake.php +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/php -q -run($argv)); diff --git a/community_server/composer.json b/community_server/composer.json deleted file mode 100644 index dbd031048..000000000 --- a/community_server/composer.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "cakephp/app", - "description": "CakePHP skeleton app", - "homepage": "https://cakephp.org", - "type": "project", - "license": "MIT", - "require": { - "php": ">=5.6", - "cakephp/cakephp": "3.9.*", - "cakephp/plugin-installer": "^1.0", - "datto/json-rpc": "^6.0", - "google/protobuf": "v3.10.*", - "mobiledetect/mobiledetectlib": "2.*", - "paragonie/sodium_compat": "^1.11", - "tuupola/base58": "^2.0" - }, - "require-dev": { - "cakephp/bake": "^1.9.0", - "cakephp/cakephp-codesniffer": "^3.0", - "cakephp/debug_kit": "^3.17.0", - "josegonzalez/dotenv": "3.*", - "phpunit/phpunit": "^5.7|^6.0", - "psy/psysh": "@stable" - }, - "suggest": { - "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.", - "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility." - }, - "autoload": { - "psr-4": { - "App\\": "src/", - "" : "src/", - "GPBMetadata\\Gradido\\": "src/Model/Messages/GPBMetadata/Gradido/", - "Proto\\Gradido\\" : "src/Model/Messages/Proto/Gradido/" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Test\\": "tests/", - "Cake\\Test\\": "vendor/cakephp/cakephp/tests/" - } - }, - "scripts": { - "post-install-cmd": "App\\Console\\Installer::postInstall", - "post-create-project-cmd": "App\\Console\\Installer::postInstall", - "check": [ - "@test", - "@cs-check" - ], - "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/", - "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/", - "test": "phpunit --colors=always" - }, - "prefer-stable": true, - "config": { - "sort-packages": true - } -} diff --git a/community_server/composer.lock b/community_server/composer.lock deleted file mode 100644 index 41674bb88..000000000 --- a/community_server/composer.lock +++ /dev/null @@ -1,5577 +0,0 @@ -{ - "_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": "8a3d1923190a6c9d6066359057844457", - "packages": [ - { - "name": "aura/intl", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/auraphp/Aura.Intl.git", - "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926", - "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926", - "shasum": "" - }, - "require": { - "php": "^5.6|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aura\\Intl\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aura.Intl Contributors", - "homepage": "https://github.com/auraphp/Aura.Intl/contributors" - } - ], - "description": "The Aura Intl package provides internationalization tools, specifically message translation.", - "homepage": "https://github.com/auraphp/Aura.Intl", - "keywords": [ - "g11n", - "globalization", - "i18n", - "internationalization", - "intl", - "l10n", - "localization" - ], - "support": { - "issues": "https://github.com/auraphp/Aura.Intl/issues", - "source": "https://github.com/auraphp/Aura.Intl/tree/3.x" - }, - "time": "2017-01-20T05:00:11+00:00" - }, - { - "name": "cakephp/cakephp", - "version": "3.9.8", - "source": { - "type": "git", - "url": "https://github.com/cakephp/cakephp.git", - "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/cakephp/zipball/b0e43e810132a8b1f66cf89b038b54c090811c32", - "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32", - "shasum": "" - }, - "require": { - "aura/intl": "^3.0.0", - "cakephp/chronos": "^1.0.1", - "ext-intl": "*", - "ext-mbstring": "*", - "laminas/laminas-diactoros": "^1.4.0", - "paragonie/random_compat": "^1.4|^2.0|9.99.99", - "php": ">=5.6.0,<8.0.0", - "psr/log": "^1.0.0", - "psr/simple-cache": "^1.0.0" - }, - "conflict": { - "phpunit/phpunit": "<5.7" - }, - "replace": { - "cakephp/cache": "self.version", - "cakephp/collection": "self.version", - "cakephp/core": "self.version", - "cakephp/database": "self.version", - "cakephp/datasource": "self.version", - "cakephp/event": "self.version", - "cakephp/filesystem": "self.version", - "cakephp/form": "self.version", - "cakephp/i18n": "self.version", - "cakephp/log": "self.version", - "cakephp/orm": "self.version", - "cakephp/utility": "self.version", - "cakephp/validation": "self.version" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "cakephp/chronos": "^1.2.1", - "paragonie/csp-builder": "^1.4|^2.3", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "ext-curl": "To enable more efficient network calls in Http\\Client.", - "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.", - "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()", - "paragonie/csp-builder": "CSP builder, to use the CSP Middleware" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\": "src/" - }, - "files": [ - "src/Core/functions.php", - "src/Collection/functions.php", - "src/I18n/functions.php", - "src/Utility/bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/cakephp/graphs/contributors" - } - ], - "description": "The CakePHP framework", - "homepage": "https://cakephp.org", - "keywords": [ - "conventions over configuration", - "dry", - "form", - "framework", - "mvc", - "orm", - "psr-7", - "rapid-development", - "validation" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/cakephp" - }, - "time": "2021-03-10T02:10:31+00:00" - }, - { - "name": "cakephp/chronos", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/chronos.git", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/ba2bab98849e7bf29b02dd634ada49ab36472959", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "athletic/athletic": "~0.1", - "cakephp/cakephp-codesniffer": "^3.0", - "phpbench/phpbench": "@dev", - "phpunit/phpunit": "<6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\Chronos\\": "src/" - }, - "files": [ - "src/carbon_compat.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "The CakePHP Team", - "homepage": "http://cakephp.org" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://cakephp.org", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/chronos/issues", - "source": "https://github.com/cakephp/chronos" - }, - "time": "2019-11-30T02:33:19+00:00" - }, - { - "name": "cakephp/migrations", - "version": "2.4.2", - "source": { - "type": "git", - "url": "https://github.com/cakephp/migrations.git", - "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/migrations/zipball/7fa4f1f8a4cd90df59cd8e3a46958c822abe457e", - "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e", - "shasum": "" - }, - "require": { - "cakephp/cache": "^3.6.0", - "cakephp/orm": "^3.6.0", - "php": ">=5.6.0", - "robmorgan/phinx": "^0.10.3|^0.11.1" - }, - "require-dev": { - "cakephp/bake": "^1.7.0", - "cakephp/cakephp": "^3.6.0", - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "cakephp/bake": "If you want to generate migrations." - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "Migrations\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/migrations/graphs/contributors" - } - ], - "description": "Database Migration plugin for CakePHP based on Phinx", - "homepage": "https://github.com/cakephp/migrations", - "keywords": [ - "cakephp", - "migrations" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/migrations/issues", - "source": "https://github.com/cakephp/migrations" - }, - "time": "2020-02-05T15:00:43+00:00" - }, - { - "name": "cakephp/plugin-installer", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/cakephp/plugin-installer.git", - "reference": "e27027aa2d3d8ab64452c6817629558685a064cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/e27027aa2d3d8ab64452c6817629558685a064cb", - "reference": "e27027aa2d3d8ab64452c6817629558685a064cb", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.3", - "composer/composer": "^2.0", - "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5 || ^9.3" - }, - "type": "composer-plugin", - "extra": { - "class": "Cake\\Composer\\Plugin" - }, - "autoload": { - "psr-4": { - "Cake\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://cakephp.org" - } - ], - "description": "A composer installer for CakePHP 3.0+ plugins.", - "support": { - "issues": "https://github.com/cakephp/plugin-installer/issues", - "source": "https://github.com/cakephp/plugin-installer/tree/1.3.1" - }, - "time": "2020-10-29T04:00:42+00:00" - }, - { - "name": "datto/json-rpc", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/datto/php-json-rpc.git", - "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/datto/php-json-rpc/zipball/ad4d735f48d80c6b53f7405e5007d97c996533f6", - "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Datto\\JsonRpc\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Spencer Mortensen", - "email": "smortensen@datto.com", - "homepage": "http://spencermortensen.com", - "role": "Developer" - } - ], - "description": "Fully unit-tested JSON-RPC 2.0 for PHP", - "homepage": "http://datto.com", - "keywords": [ - "json", - "json-rpc", - "jsonrpc", - "php", - "php-json-rpc", - "rpc" - ], - "support": { - "issues": "https://github.com/datto/php-json-rpc/issues", - "source": "https://github.com/datto/php-json-rpc/tree/6.1.0" - }, - "time": "2020-02-28T23:54:06+00:00" - }, - { - "name": "google/protobuf", - "version": "v3.10.0", - "source": { - "type": "git", - "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/5dffdd2c84112e6c91fd84f92e3df96649426881", - "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": ">=4.8.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": { - "issues": "https://github.com/protocolbuffers/protobuf-php/issues", - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.10.0" - }, - "time": "2019-10-03T20:08:37+00:00" - }, - { - "name": "laminas/laminas-diactoros", - "version": "1.8.7p2", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "replace": { - "zendframework/zend-diactoros": "~1.8.7.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-coding-standard": "~1.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-release-1.8": "1.8.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "time": "2020-03-23T15:28:28+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2020-09-14T14:23:00+00:00" - }, - { - "name": "mobiledetect/mobiledetectlib", - "version": "2.8.37", - "source": { - "type": "git", - "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7", - "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7", - "shasum": "" - }, - "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35||~5.7" - }, - "type": "library", - "autoload": { - "classmap": [ - "Mobile_Detect.php" - ], - "psr-0": { - "Detection": "namespaced/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Serban Ghita", - "email": "serbanghita@gmail.com", - "homepage": "http://mobiledetect.net", - "role": "Developer" - } - ], - "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", - "homepage": "https://github.com/serbanghita/Mobile-Detect", - "keywords": [ - "detect mobile devices", - "mobile", - "mobile detect", - "mobile detector", - "php mobile detect" - ], - "support": { - "issues": "https://github.com/serbanghita/Mobile-Detect/issues", - "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.37" - }, - "funding": [ - { - "url": "https://github.com/serbanghita", - "type": "github" - } - ], - "time": "2021-02-19T21:22:57+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "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": "2018-07-02T15:55:56+00:00" - }, - { - "name": "paragonie/sodium_compat", - "version": "v1.14.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", - "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", - "shasum": "" - }, - "require": { - "paragonie/random_compat": ">=1", - "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" - }, - "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." - }, - "type": "library", - "autoload": { - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com" - }, - { - "name": "Frank Denis", - "email": "jedisct1@pureftpd.org" - } - ], - "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", - "keywords": [ - "Authentication", - "BLAKE2b", - "ChaCha20", - "ChaCha20-Poly1305", - "Chapoly", - "Curve25519", - "Ed25519", - "EdDSA", - "Edwards-curve Digital Signature Algorithm", - "Elliptic Curve Diffie-Hellman", - "Poly1305", - "Pure-PHP cryptography", - "RFC 7748", - "RFC 8032", - "Salpoly", - "Salsa20", - "X25519", - "XChaCha20-Poly1305", - "XSalsa20-Poly1305", - "Xchacha20", - "Xsalsa20", - "aead", - "cryptography", - "ecdh", - "elliptic curve", - "elliptic curve cryptography", - "encryption", - "libsodium", - "php", - "public-key cryptography", - "secret-key cryptography", - "side-channel resistant" - ], - "support": { - "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.14.0" - }, - "time": "2020-12-03T16:26:19+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "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/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "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": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "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": "http://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.3" - }, - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "robmorgan/phinx", - "version": "0.11.7", - "source": { - "type": "git", - "url": "https://github.com/cakephp/phinx.git", - "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/3cdde73e0c33c410e076108b3e1603fabb5b330d", - "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d", - "shasum": "" - }, - "require": { - "cakephp/collection": "^3.7", - "cakephp/database": "^3.7", - "php": ">=5.6", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "ext-json": "*", - "phpunit/phpunit": ">=5.7,<8.0", - "sebastian/comparator": ">=1.2.3" - }, - "suggest": { - "ext-json": "Install if using JSON configuration format", - "symfony/yaml": "Install if using YAML configuration format" - }, - "bin": [ - "bin/phinx" - ], - "type": "library", - "autoload": { - "psr-4": { - "Phinx\\": "src/Phinx/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Morgan", - "email": "robbym@gmail.com", - "homepage": "https://robmorgan.id.au", - "role": "Lead Developer" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com", - "homepage": "https://shadowhand.me", - "role": "Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Developer" - }, - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/phinx/graphs/contributors", - "role": "Developer" - } - ], - "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", - "homepage": "https://phinx.org", - "keywords": [ - "database", - "database migrations", - "db", - "migrations", - "phinx" - ], - "support": { - "issues": "https://github.com/cakephp/phinx/issues", - "source": "https://github.com/cakephp/phinx/tree/0.11.7" - }, - "time": "2020-05-09T13:59:05+00:00" - }, - { - "name": "symfony/config", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/212d54675bf203ff8aef7d8cee8eecfb72f4a263", - "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v5.2.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": "2021-02-23T23:58:19+00:00" - }, - { - "name": "symfony/console", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^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", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.2.6" - }, - "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": "2021-03-28T09:42:18+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-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/master" - }, - "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": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "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 basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.6" - }, - "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": "2021-03-28T14:30:26+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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.22.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": "2021-01-07T16:49:33+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.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": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.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": "2021-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.22.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": "2021-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.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": "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.22.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": "2021-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.22.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": "2021-01-07T16:49:33+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.22.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": "2021-01-07T16:49:33+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "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/master" - }, - "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": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/string", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.6" - }, - "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": "2021-03-17T17:12:15+00:00" - }, - { - "name": "symfony/yaml", - "version": "v5.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "298a08ddda623485208506fcee08817807a251dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/298a08ddda623485208506fcee08817807a251dd", - "reference": "298a08ddda623485208506fcee08817807a251dd", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "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/v5.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": "2021-03-06T07:59:01+00:00" - }, - { - "name": "tuupola/base58", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/tuupola/base58.git", - "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tuupola/base58/zipball/4cd1a3972679946e87c0746f59ff8f0760240b4c", - "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "overtrue/phplint": "^1.0.0", - "phpbench/phpbench": "^0.13.0", - "phpstan/phpstan": "^0.12.37", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "suggest": { - "ext-gmp": "GMP extension provides the fastest encoding and decoding." - }, - "type": "library", - "autoload": { - "psr-4": { - "Tuupola\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mika Tuupola", - "email": "tuupola@appelsiini.net", - "homepage": "https://appelsiini.net/", - "role": "Developer" - } - ], - "description": "Base58 encoder and decoder for arbitrary data", - "homepage": "https://github.com/tuupola/base58", - "keywords": [ - "base58" - ], - "support": { - "issues": "https://github.com/tuupola/base58/issues", - "source": "https://github.com/tuupola/base58/tree/2.1.0" - }, - "funding": [ - { - "url": "https://github.com/tuupola", - "type": "github" - } - ], - "time": "2020-09-09T11:38:20+00:00" - } - ], - "packages-dev": [ - { - "name": "ajgl/breakpoint-twig-extension", - "version": "0.3.5", - "source": { - "type": "git", - "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git", - "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/9875feea0ac4bc3c9f308c62bae4727669d6052a", - "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "twig/twig": "^1.34|^2.0|^3.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "symfony/framework-bundle": "^2.7|^3.4|^4.4|^5.2", - "symfony/phpunit-bridge": "^4.4|^5.2", - "symfony/twig-bundle": "^2.7|^3.4|^4.4|^5.2" - }, - "suggest": { - "ext-xdebug": "The Xdebug extension is required for the breakpoint to work", - "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony", - "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Ajgl\\Twig\\Extension\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Antonio J. García Lagar", - "email": "aj@garcialagar.es", - "homepage": "http://aj.garcialagar.es", - "role": "developer" - } - ], - "description": "Twig extension to set breakpoints", - "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension", - "keywords": [ - "Xdebug", - "breakpoint", - "twig" - ], - "support": { - "issues": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/issues", - "source": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/tree/0.3.5" - }, - "time": "2021-02-08T10:48:05+00:00" - }, - { - "name": "aptoma/twig-markdown", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/aptoma/twig-markdown.git", - "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aptoma/twig-markdown/zipball/64a9c5c7418c08faf91c4410b34bdb65fb25c23d", - "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d", - "shasum": "" - }, - "require": { - "twig/twig": "~1.12" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "erusev/parsedown": "^1.6", - "knplabs/github-api": "~1.2", - "league/commonmark": "~0.5", - "michelf/php-markdown": "~1", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "~0.6" - }, - "suggest": { - "knplabs/github-api": "Needed for using GitHub's Markdown engine provided through their API.", - "michelf/php-markdown": "Original Markdown engine with MarkdownExtra." - }, - "type": "library", - "autoload": { - "psr-0": { - "Aptoma": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joris Berthelot", - "email": "joris@berthelot.tel" - }, - { - "name": "Gunnar Lium", - "email": "gunnar@aptoma.com" - } - ], - "description": "Twig extension to work with Markdown content", - "keywords": [ - "markdown", - "twig" - ], - "support": { - "issues": "https://github.com/aptoma/twig-markdown/issues", - "source": "https://github.com/aptoma/twig-markdown/tree/master" - }, - "time": "2015-10-23T20:27:08+00:00" - }, - { - "name": "asm89/twig-cache-extension", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/asm89/twig-cache-extension.git", - "reference": "13787226956ec766f4770722082288097aebaaf3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/13787226956ec766f4770722082288097aebaaf3", - "reference": "13787226956ec766f4770722082288097aebaaf3", - "shasum": "" - }, - "require": { - "php": ">=5.3.2", - "twig/twig": "^1.0|^2.0" - }, - "require-dev": { - "doctrine/cache": "~1.0", - "phpunit/phpunit": "^5.0 || ^4.8.10" - }, - "suggest": { - "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cache fragments of templates directly within Twig.", - "homepage": "https://github.com/asm89/twig-cache-extension", - "keywords": [ - "cache", - "extension", - "twig" - ], - "support": { - "issues": "https://github.com/asm89/twig-cache-extension/issues", - "source": "https://github.com/asm89/twig-cache-extension/tree/1.4.0" - }, - "abandoned": "twig/cache-extension", - "time": "2020-01-01T20:47:37+00:00" - }, - { - "name": "cakephp/bake", - "version": "1.12.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/bake.git", - "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/bake/zipball/33e8ee8419ba36c13fa4074c208c93352b5530cf", - "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf", - "shasum": "" - }, - "require": { - "cakephp/cakephp": "^3.8.0", - "cakephp/plugin-installer": "^1.0", - "php": ">=5.6.0", - "wyrihaximus/twig-view": "^4.3.7" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "Bake\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/bake/graphs/contributors" - } - ], - "description": "Bake plugin for CakePHP 3", - "homepage": "https://github.com/cakephp/bake", - "keywords": [ - "bake", - "cakephp" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/bake/issues", - "source": "https://github.com/cakephp/bake" - }, - "time": "2019-12-07T20:34:43+00:00" - }, - { - "name": "cakephp/cakephp-codesniffer", - "version": "3.3.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/cakephp-codesniffer.git", - "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/7998a191e787fd5b68cb635d7050cb0d7b55e1a1", - "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "squizlabs/php_codesniffer": "^3.0.0" - }, - "require-dev": { - "phpunit/phpunit": "<6.0" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "CakePHP\\": "CakePHP/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/cakephp-codesniffer/graphs/contributors" - } - ], - "description": "CakePHP CodeSniffer Standards", - "homepage": "https://cakephp.org", - "keywords": [ - "codesniffer", - "framework" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp-codesniffer/issues", - "source": "https://github.com/cakephp/cakephp-codesniffer" - }, - "time": "2019-12-07T03:02:34+00:00" - }, - { - "name": "cakephp/debug_kit", - "version": "3.22.4", - "source": { - "type": "git", - "url": "https://github.com/cakephp/debug_kit.git", - "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/5bec3c49a2b8d9bd12655f2ec35e52ec90befe17", - "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17", - "shasum": "" - }, - "require": { - "cakephp/cakephp": "^3.7.0", - "cakephp/chronos": "^1.0.0", - "cakephp/plugin-installer": "^1.0.0", - "composer/composer": "^1.3.0", - "jdorn/sql-formatter": "^1.2.0", - "php": ">=5.6.0" - }, - "require-dev": { - "cakephp/authorization": "^1.3.2", - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "ext-pdo_sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use." - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "DebugKit\\": "src/", - "DebugKit\\Test\\Fixture\\": "tests/Fixture/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Story", - "homepage": "https://mark-story.com", - "role": "Author" - }, - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors" - } - ], - "description": "CakePHP Debug Kit", - "homepage": "https://github.com/cakephp/debug_kit", - "keywords": [ - "cakephp", - "debug", - "kit" - ], - "support": { - "forum": "http://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/debug_kit/issues", - "source": "https://github.com/cakephp/debug_kit" - }, - "time": "2020-04-22T17:27:39+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.2.9", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.2.9" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-01-12T12:10:35+00:00" - }, - { - "name": "composer/composer", - "version": "1.10.21", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/04021432f4a9cbd9351dd166b8c193f42c36a39c", - "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^5.2.10", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpspec/prophecy": "^1.10", - "symfony/phpunit-bridge": "^4.2" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/1.10.21" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-04-01T07:16:35+00:00" - }, - { - "name": "composer/semver", - "version": "1.7.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/1.7.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-12-03T15:47:16+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.5", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "de30328a7af8680efdc03e396aad24befd513200" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200", - "reference": "de30328a7af8680efdc03e396aad24befd513200", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-12-03T16:04:16+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.4.6", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-03-25T17:01:18+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "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.4.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": "2020-11-10T18:47:58+00:00" - }, - { - "name": "jasny/twig-extensions", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/jasny/twig-extensions.git", - "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/30bdf3a3903c021544f36332c9d5d4d563527da4", - "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4", - "shasum": "" - }, - "require": { - "php": ">=7.0.0 | >=5.6.0", - "twig/twig": "^2.0 | ^1.12" - }, - "require-dev": { - "ext-intl": "*", - "ext-pcre": "*", - "jasny/php-code-quality": "^2.1", - "phpunit/phpunit": "^5.0" - }, - "suggest": { - "ext-intl": "Required for the use of the LocalDate Twig extension", - "ext-pcre": "Required for the use of the PCRE Twig extension" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jasny\\Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Arnold Daniels", - "email": "arnold@jasny.net", - "homepage": "http://www.jasny.net" - } - ], - "description": "A set of useful Twig filters", - "homepage": "http://github.com/jasny/twig-extensions#README", - "keywords": [ - "PCRE", - "array", - "date", - "datetime", - "preg", - "regex", - "templating", - "text", - "time" - ], - "support": { - "issues": "https://github.com/jasny/twig-extensions/issues", - "source": "https://github.com/jasny/twig-extensions" - }, - "time": "2017-09-13T07:38:01+00:00" - }, - { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", - "source": { - "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "lib" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "support": { - "issues": "https://github.com/jdorn/sql-formatter/issues", - "source": "https://github.com/jdorn/sql-formatter/tree/master" - }, - "time": "2014-01-12T16:20:24+00:00" - }, - { - "name": "josegonzalez/dotenv", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/josegonzalez/php-dotenv.git", - "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/josegonzalez/php-dotenv/zipball/f19174d9d7213a6c20e8e5e268aa7dd042d821ca", - "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca", - "shasum": "" - }, - "require": { - "m1/env": "2.*", - "php": ">=5.5.0" - }, - "require-dev": { - "php-mock/php-mock-phpunit": "^1.1", - "satooshi/php-coveralls": "1.*", - "squizlabs/php_codesniffer": "2.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "josegonzalez\\Dotenv": [ - "src", - "tests" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jose Diaz-Gonzalez", - "email": "dotenv@josegonzalez.com", - "homepage": "http://josediazgonzalez.com", - "role": "Maintainer" - } - ], - "description": "dotenv file parsing for PHP", - "homepage": "https://github.com/josegonzalez/php-dotenv", - "keywords": [ - "configuration", - "dotenv", - "php" - ], - "support": { - "issues": "https://github.com/josegonzalez/php-dotenv/issues", - "source": "https://github.com/josegonzalez/php-dotenv/tree/master" - }, - "time": "2017-09-19T15:49:58+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.10", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" - }, - "time": "2020-05-27T16:41:55+00:00" - }, - { - "name": "m1/env", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/m1/Env.git", - "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/m1/Env/zipball/5c296e3e13450a207e12b343f3af1d7ab569f6f3", - "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "scrutinizer/ocular": "~1.1", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "josegonzalez/dotenv": "For loading of .env", - "m1/vars": "For loading of configs" - }, - "type": "library", - "autoload": { - "psr-4": { - "M1\\Env\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Miles Croxford", - "email": "hello@milescroxford.com", - "homepage": "http://milescroxford.com", - "role": "Developer" - } - ], - "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.", - "homepage": "https://github.com/m1/Env", - "keywords": [ - ".env", - "config", - "dotenv", - "env", - "loader", - "m1", - "parser", - "support" - ], - "support": { - "issues": "https://github.com/m1/Env/issues", - "source": "https://github.com/m1/Env/tree/2.2.0" - }, - "time": "2020-02-19T09:02:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "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.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" - }, - "time": "2020-12-20T10:01:03+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": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "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/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "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" - }, - "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/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "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.4.0" - }, - "time": "2020-09-17T18:55:26+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.5", - "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.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "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/master" - }, - "time": "2017-02-26T11:10:40+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.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", - "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.10" - }, - "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.10.7", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "a395af46999a12006213c0c8346c9445eb31640c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", - "reference": "a395af46999a12006213c0c8346c9445eb31640c", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.10.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" - }, - "time": "2021-03-14T02:14:56+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", - "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.2" - }, - "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.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "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-08-03T08:09:46+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.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "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.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:47:53+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.4", - "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.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:40:27+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.2", - "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.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:37:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.1", - "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.1" - }, - "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": "seld/jsonlint", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2020-11-11T09:19:24+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phar" - ], - "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/master" - }, - "time": "2020-07-07T18:42:57+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-04-09T00:54:41+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "0d639a0943822626290d169965804f79400e6a04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04", - "reference": "0d639a0943822626290d169965804f79400e6a04", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "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/v5.2.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": "2021-02-15T18:55:04+00:00" - }, - { - "name": "symfony/process", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" - }, - "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/v5.2.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": "2021-01-27T10:15:41+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "89412a68ea2e675b4e44f260a5666729f77f668e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89412a68ea2e675b4e44f260a5666729f77f668e", - "reference": "89412a68ea2e675b4e44f260a5666729f77f668e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "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": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.6" - }, - "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": "2021-03-28T09:42:18+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "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/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "twig/twig", - "version": "v1.44.2", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/138c493c5b8ee7cff3821f80b8896d371366b5fe", - "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.44-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v1.44.2" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2021-01-05T10:10:05+00:00" - }, - { - "name": "umpirsky/twig-php-function", - "version": "v0.1", - "source": { - "type": "git", - "url": "https://github.com/umpirsky/twig-php-function.git", - "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/umpirsky/twig-php-function/zipball/53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", - "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "twig/twig": "~1.12" - }, - "require-dev": { - "phpspec/phpspec": "~2.0", - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "Umpirsky\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Saša Stamenković", - "email": "umpirsky@gmail.com" - } - ], - "description": "Call (almost) any PHP function from your Twig templates.", - "support": { - "issues": "https://github.com/umpirsky/twig-php-function/issues", - "source": "https://github.com/umpirsky/twig-php-function/tree/master" - }, - "time": "2016-03-12T16:36:32+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "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.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - }, - { - "name": "wyrihaximus/twig-view", - "version": "4.4.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/legacy-twig-view.git", - "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/legacy-twig-view/zipball/463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb", - "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb", - "shasum": "" - }, - "require": { - "ajgl/breakpoint-twig-extension": "^0.3.0", - "aptoma/twig-markdown": "^2.0", - "asm89/twig-cache-extension": "^1.0", - "cakephp/cakephp": "^3.7", - "jasny/twig-extensions": "^1.0", - "php": "^5.6 || ^7.0", - "twig/twig": "^1.27", - "umpirsky/twig-php-function": "0.1" - }, - "require-dev": { - "cakephp/bake": "^1.5", - "cakephp/debug_kit": "^3.0", - "phake/phake": "^2.3.2", - "phpunit/phpunit": "^5.7.14", - "squizlabs/php_codesniffer": "^3.4.0", - "wyrihaximus/phpunit-class-reflection-helpers": "dev-master" - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "WyriHaximus\\TwigView\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Cees-Jan Kiewiet", - "email": "ceesjank@gmail.com", - "homepage": "http://wyrihaximus.net/" - } - ], - "description": "Twig powered View for CakePHP3", - "keywords": [ - "cakephp", - "cakephp3", - "twig", - "view" - ], - "support": { - "issues": "https://github.com/cakephp/legacy-twig-view/issues", - "source": "https://github.com/cakephp/legacy-twig-view/tree/4.4.0" - }, - "time": "2021-04-06T15:42:50+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "psy/psysh": 0 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": ">=5.6" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/community_server/config/app.default.php b/community_server/config/app.default.php deleted file mode 100644 index 04c8cede2..000000000 --- a/community_server/config/app.default.php +++ /dev/null @@ -1,407 +0,0 @@ - filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. When set to false (default) - * CakePHP generates required value based on `HTTP_HOST` environment variable. - * However, you can define it manually to optimize performance or if you - * are concerned about people manipulating the `Host` header. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => env('APP_ENCODING', 'UTF-8'), - 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), - 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'), - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - //'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => env('SECURITY_SALT', '__SALT__'), - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - //'timestamp' => true, - // 'cacheTime' => '+1 year' - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => FileEngine::class, - 'path' => CACHE, - 'url' => env('CACHE_DEFAULT_URL', null), - ], - - /** - * Configure the cache used for general framework caching. - * Translation cache files are stored with this configuration. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - * If you set 'className' => 'Null' core cache will be disabled. - */ - '_cake_core_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKECORE_URL', null), - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - */ - '_cake_model_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEMODEL_URL', null), - ], - - /** - * Configure the cache for routes. The cached routes collection is built the - * first time the routes are processed via `config/routes.php`. - * Duration will be set to '+2 seconds' in bootstrap.php when debug = true - */ - '_cake_routes_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_routes_', - 'path' => CACHE, - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEROUTES_URL', null), - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Http\Exception\NotFoundException', 'Cake\Http\Exception\UnauthorizedException']` - * - `extraFatalErrorMemory` - int - The number of megabytes to increase - * the memory limit by when a fatal error is encountered. This allows - * breathing room to complete logging or error handling. - */ - 'Error' => [ - 'errorLevel' => E_ALL, - 'exceptionRenderer' => ExceptionRenderer::class, - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Mailer/Transport. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => MailTransport::class, - /* - * The following keys are used in SMTP transports: - */ - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => null, - 'password' => null, - 'client' => null, - 'tls' => null, - 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), - ], - ], - - /** - * Email delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` - * for more information. - */ - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * - * ### Notes - * - Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - * - Do not use periods in database name - it may lead to error. - * See https://github.com/cakephp/cakephp/issues/6471 for details. - * - 'encoding' is recommended to be set to full UTF-8 4-Byte support. - * E.g set it to 'utf8mb4' in MariaDB and MySQL and 'utf8' for any - * other RDBMS. - */ - 'Datasources' => [ - 'default' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'localhost', - /* - * CakePHP will use the default DB port based on the driver selected - * MySQL on MAMP uses port 8889, MAMP users will want to uncomment - * the following line and set the port accordingly - */ - //'port' => 'non_standard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'my_app', - /* - * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). - */ - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'flags' => [], - 'cacheMetadata' => true, - 'log' => false, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - - 'url' => env('DATABASE_URL', null), - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'localhost', - //'port' => 'non_standard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'test_myapp', - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - 'log' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - 'url' => env('DATABASE_TEST_URL', null), - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'debug', - 'url' => env('LOG_DEBUG_URL', null), - 'scopes' => false, - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'error', - 'url' => env('LOG_ERROR_URL', null), - 'scopes' => false, - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - // To enable this dedicated query log, you need set your datasource's log flag to true - 'queries' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'queries', - 'url' => env('LOG_QUERIES_URL', null), - 'scopes' => ['queriesLog'], - ], - ], - - /** - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. Avoid using `.` in cookie names, - * as PHP will drop sessions from cookies with `.` in the name. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * Please note that php.ini's session.gc_maxlifetime must be equal to or greater - * than the largest Session['timeout'] in all served websites for it to have the - * desired effect. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], - // Gradido specific configuration - // Login Server ip and port - 'LoginServer' => [ - 'host' => 'http://127.0.0.1', - 'port' => 1201 - ], - 'API' => [ - 'allowedCaller' => [''] // insert domains or ips from login-server and gdt if they not at localhost - ], - 'ServerAdminEmail' => 'info@gradido.net', // email 'from' field for transfer notification emails - 'noReplyEmail' => 'no-replay@gradido.net', // email sender for creation notification emails to user - - 'GroupNode' => false -]; diff --git a/community_server/config/bootstrap.php b/community_server/config/bootstrap.php deleted file mode 100644 index 77264ee0a..000000000 --- a/community_server/config/bootstrap.php +++ /dev/null @@ -1,212 +0,0 @@ -parse() -// ->putenv() -// ->toEnv() -// ->toServer(); -// } - -/* - * Read configuration file and inject configuration into various - * CakePHP classes. - * - * By default there is only one configuration file. It is often a good - * idea to create multiple configuration files, and separate the configuration - * that changes from configuration that does not. This makes deployment simpler. - */ -try { - Configure::config('default', new PhpConfig()); - Configure::load('app', 'default', false); -} catch (\Exception $e) { - exit($e->getMessage() . "\n"); -} - -/* - * Load an environment local configuration file. - * You can use a file like app_local.php to provide local overrides to your - * shared configuration. - */ -//Configure::load('app_local', 'default'); - -/* - * When debug = true the metadata cache should only last - * for a short time. - */ -if (Configure::read('debug')) { - Configure::write('Cache._cake_model_.duration', '+2 minutes'); - Configure::write('Cache._cake_core_.duration', '+2 minutes'); - // disable router cache during development - Configure::write('Cache._cake_routes_.duration', '+2 seconds'); -} - -/* - * Set the default server timezone. Using UTC makes time calculations / conversions easier. - * Check http://php.net/manual/en/timezones.php for list of valid timezone strings. - */ -date_default_timezone_set(Configure::read('App.defaultTimezone')); - -/* - * Configure the mbstring extension to use the correct encoding. - */ -mb_internal_encoding(Configure::read('App.encoding')); - -/* - * Set the default locale. This controls how dates, number and currency is - * formatted and sets the default language to use for translations. - */ -ini_set('intl.default_locale', Configure::read('App.defaultLocale')); - -/* - * Register application error and exception handlers. - */ - -$isCli = PHP_SAPI === 'cli'; - -if ($isCli) { - (new ConsoleErrorHandler(Configure::read('Error')))->register(); -} else { - (new ErrorHandler(Configure::read('Error')))->register(); -} - -/* - * Include the CLI bootstrap overrides. - */ -if ($isCli) { - require __DIR__ . '/bootstrap_cli.php'; -} - -/* - * Set the full base URL. - * This URL is used as the base of all absolute links. - * - * If you define fullBaseUrl in your config file you can remove this. - */ -if (!Configure::read('App.fullBaseUrl')) { - $s = null; - if (env('HTTPS')) { - $s = 's'; - } - - $httpHost = env('HTTP_HOST'); - if (isset($httpHost)) { - Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); - } - unset($httpHost, $s); -} - -Cache::setConfig(Configure::consume('Cache')); -ConnectionManager::setConfig(Configure::consume('Datasources')); -TransportFactory::setConfig(Configure::consume('EmailTransport')); -Email::setConfig(Configure::consume('Email')); -Log::setConfig(Configure::consume('Log')); -Security::setSalt(Configure::consume('Security.salt')); - -/* - * The default crypto extension in 3.0 is OpenSSL. - * If you are migrating from 2.x uncomment this code to - * use a more compatible Mcrypt based implementation - */ -//Security::engine(new \Cake\Utility\Crypto\Mcrypt()); - -/* - * Setup detectors for mobile and tablet. - */ -ServerRequest::addDetector('mobile', function ($request) { - $detector = new \Detection\MobileDetect(); - - return $detector->isMobile(); -}); -ServerRequest::addDetector('tablet', function ($request) { - $detector = new \Detection\MobileDetect(); - - return $detector->isTablet(); -}); - -/* - * Enable immutable time objects in the ORM. - * - * You can enable default locale format parsing by adding calls - * to `useLocaleParser()`. This enables the automatic conversion of - * locale specific date formats. For details see - * @link https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data - */ -Type::build('time') - ->useImmutable(); -Type::build('date') - ->useImmutable(); -Type::build('datetime') - ->useImmutable(); -Type::build('timestamp') - ->useImmutable(); - -header('Access-Control-Allow-Origin: *'); -header('Access-Control-Allow-Methods: POST, GET, PUT, PATCH, DELETE, OPTIONS'); -header('Access-Control-Allow-Headers: *'); -if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'OPTIONS') { - exit(0); -} - -/* - * Custom Inflector rules, can be set to correctly pluralize or singularize - * table, model, controller names or whatever other string is passed to the - * inflection functions. - */ -//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); -//Inflector::rules('irregular', ['red' => 'redlings']); -//Inflector::rules('uninflected', ['dontinflectme']); -//Inflector::rules('transliteration', ['/å/' => 'aa']); diff --git a/community_server/config/bootstrap_cli.php b/community_server/config/bootstrap_cli.php deleted file mode 100644 index d3679d754..000000000 --- a/community_server/config/bootstrap_cli.php +++ /dev/null @@ -1,28 +0,0 @@ - '{{content}}', - // Container element used by control() when a field has an error. - 'inputContainerError' => '
{{content}}{{error}}
', - // Label element when inputs are not nested inside the label. - 'label' => '{{text}}', - // Generic input element. - 'input' => '', - // Textarea input element, - 'textarea' => '', - // Error message wrapper elements. - 'error' => '
' - . '{{content}}' - . '
', - // Container for error items. - 'errorList' => '{{content}}', - // Error item wrapper. - 'errorItem' => '
{{text}}
' -]; -/* - -
-
- -
-
- -
-
- - -
- - -
- - */ diff --git a/community_server/config/nginx/fastcgi.conf b/community_server/config/nginx/fastcgi.conf deleted file mode 100644 index 238f7869f..000000000 --- a/community_server/config/nginx/fastcgi.conf +++ /dev/null @@ -1,25 +0,0 @@ -fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; -fastcgi_param QUERY_STRING $query_string; -fastcgi_param REQUEST_METHOD $request_method; -fastcgi_param CONTENT_TYPE $content_type; -fastcgi_param CONTENT_LENGTH $content_length; - -fastcgi_param SCRIPT_NAME $fastcgi_script_name; -fastcgi_param REQUEST_URI $request_uri; -fastcgi_param DOCUMENT_URI $document_uri; -fastcgi_param DOCUMENT_ROOT $document_root; -fastcgi_param SERVER_PROTOCOL $server_protocol; -fastcgi_param REQUEST_SCHEME $scheme; -fastcgi_param HTTPS $https if_not_empty; - -fastcgi_param GATEWAY_INTERFACE CGI/1.1; -fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; - -fastcgi_param REMOTE_ADDR $remote_addr; -fastcgi_param REMOTE_PORT $remote_port; -fastcgi_param SERVER_ADDR $server_addr; -fastcgi_param SERVER_PORT $server_port; -fastcgi_param SERVER_NAME $server_name; - -# PHP only, required if PHP was built with --enable-force-cgi-redirect -fastcgi_param REDIRECT_STATUS 200; \ No newline at end of file diff --git a/community_server/config/nginx/mime.types b/community_server/config/nginx/mime.types deleted file mode 100644 index cd3d700ea..000000000 --- a/community_server/config/nginx/mime.types +++ /dev/null @@ -1,88 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - image/webp webp; - - application/font-woff woff; - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; - application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/community_server/config/nginx/nginx.conf b/community_server/config/nginx/nginx.conf deleted file mode 100644 index 197c96167..000000000 --- a/community_server/config/nginx/nginx.conf +++ /dev/null @@ -1,86 +0,0 @@ - -server { - - listen 80 ; - listen [::]:80; - server_name 0.0.0.0; - - #include /etc/nginx/common/protect.conf; - #include /etc/nginx/common/protect_add_header.conf; - #include /etc/nginx/common/ssl.conf; - - - root /usr/share/nginx/html/webroot; - index index.php; - - location ~* \.(png|jpg|ico|webp)\$ { - expires 30d; - } - - location ~* \.(js|css) { - # expires 1d; - expires 1d; - } - - location ~ \.php\$ { - # regex to split $uri to $fastcgi_script_name and $fastcgi_path - fastcgi_split_path_info ^(.+\.php)(/.+)$; - - # Check that the PHP script exists before passing it - try_files $fastcgi_script_name =404; - - # Bypass the fact that try_files resets $fastcgi_path_info - # see: http://trac.nginx.org/nginx/ticket/321 - set $path_info $fastcgi_path_info; - fastcgi_param PATH_INFO $path_info; - - fastcgi_index index.php; - include fastcgi.conf; - - #fastcgi_pass unix:/run/php/php7.3-fpm.sock; - fastcgi_pass 127.0.0.1:9000; - - } - - location ~ /\.ht { - deny all; - } - - location /account { - proxy_http_version 1.1; - proxy_set_header Upgrade \$http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_cache_bypass \$http_upgrade; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$remote_addr; - proxy_set_header Host \$host; - rewrite /account/(.*) /\$1 break; - - #proxy_next_upstream error timeout invalid_header http_502 non_idempotent; - proxy_pass http://login-server:1200; - proxy_redirect off; - - - } - - location /login_api { - proxy_http_version 1.1; - proxy_set_header Upgrade \$http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_cache_bypass \$http_upgrade; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$remote_addr; - proxy_set_header Host \$host; - rewrite /login_api/(.*) /\$1 break; - - proxy_pass http://login-server:1201; - proxy_redirect off; - } - - location / { - try_files \$uri \$uri/ /index.php?\$args; - } - -# access_log /var/log/nginx/access.log main; - -} \ No newline at end of file diff --git a/community_server/config/paths.php b/community_server/config/paths.php deleted file mode 100644 index 1c8121588..000000000 --- a/community_server/config/paths.php +++ /dev/null @@ -1,89 +0,0 @@ - '{{content}}', - 'input' => '
' - . '' - . '
', - 'error' => '
' - . '{{content}}' - . '
', - - // Container for error items. - //'errorList' => '
    {{content}}
', - 'errorList' => '{{content}}', - - // Error item wrapper. - //'errorItem' => '
  • {{text}}
  • ', - 'errorItem' => '
    {{text}}
    ' -]; diff --git a/community_server/config/routes.php b/community_server/config/routes.php deleted file mode 100644 index 20fc1ff62..000000000 --- a/community_server/config/routes.php +++ /dev/null @@ -1,160 +0,0 @@ - true - ]); - - // Token check will be skipped when callback returns `true`. - $csrf->whitelistCallback(function ($request) { - // Skip token check for API URLs. - //die($request->getParam('controller')); - $whitelist = ['JsonRequestHandler', 'ElopageWebhook', 'AppRequests']; - $ajaxWhitelist = ['TransactionSendCoins', 'TransactionCreations']; - - $callerIp = $request->clientIp(); - - foreach($whitelist as $entry) { - if($request->getParam('controller') === $entry) { - if($entry == 'ElopageWebhook' || $entry == 'AppRequests') { - return true; - } - $allowedIpLocalhost = ['127.0.0.1', 'localhost', '', '::1']; - if(in_array($callerIp, $allowedIpLocalhost)) { - return true; - } - $allowedCaller = Configure::read('API.allowedCaller'); - $ipPerHost = []; - if($allowedCaller && count($allowedCaller) > 0) { - - foreach($allowedCaller as $allowed) { - $ip = gethostbyname($allowed); - $ipPerHost[$allowed] = $ip; - if($ip === $callerIp) return true; - } - //die("caller ip: $callerIp
    "); - } - //var_dump(['caller_ip' => $callerIp, 'ips' => $ipPerHost]); - die(json_encode(['state' => 'error', 'details' => ['caller_ip' => $callerIp, 'ips' => $ipPerHost]])); - } - } - // disable csfr for all ajax requests in ajax whitelisted controller - foreach($ajaxWhitelist as $entry) { - if($request->getParam('controller') === $entry) { - $action = $request->getParam('action'); - if(preg_match('/^ajax/', $action)) { - return true; - } - } - } - }); - - // Register scoped middleware for in scopes. - $routes->registerMiddleware('csrf', $csrf); - - /** - * Apply a middleware to the current route scope. - * Requires middleware to be registered via `Application::routes()` with `registerMiddleware()` - */ - $routes->applyMiddleware('csrf'); - - /** - * Here, we are connecting '/' (base path) to a controller called 'Pages', - * its action called 'display', and we pass a param to select the view file - * to use (in this case, src/Template/Pages/home.ctp)... - */ - //$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); - $routes->connect('/', ['controller' => 'Dashboard', 'action' => 'index']); - $routes->connect('/api/:action/*', ['controller' => 'AppRequests'], ['routeClass' => 'DashedRoute']); - //$routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'js']); - $routes->connect('/server', ['controller' => 'Dashboard', 'action' => 'serverIndex']); - $routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'vue']); - $routes->connect('/vue-dev', ['controller' => 'Pages', 'action' => 'display', 'vue-dev']); - //$routes->connect('/', 'https://gradido2.dario-rekowski.de/account', array('status' => 303)); - - /** - * ...and connect the rest of 'Pages' controller's URLs. - */ - $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); - - /** - * Connect catchall routes for all controllers. - * - * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for - * - * ``` - * $routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']); - * $routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']); - * ``` - * - * Any route class can be used with this method, such as: - * - DashedRoute - * - InflectedRoute - * - Route - * - Or your own route class - * - * You can remove these routes once you've connected the - * routes you want in your application. - */ - $routes->fallbacks(DashedRoute::class); -}); - -/** - * If you need a different set of middleware or none at all, - * open new scope and define routes there. - * - * ``` - * Router::scope('/api', function (RouteBuilder $routes) { - * // No $routes->applyMiddleware() here. - * // Connect API actions here. - * }); - * ``` - */ diff --git a/community_server/config/schema/i18n.sql b/community_server/config/schema/i18n.sql deleted file mode 100644 index e59d1e651..000000000 --- a/community_server/config/schema/i18n.sql +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (https://opensource.org/licenses/mit-license.php) - -CREATE TABLE i18n ( - id int NOT NULL auto_increment, - locale varchar(6) NOT NULL, - model varchar(255) NOT NULL, - foreign_key int(10) NOT NULL, - field varchar(255) NOT NULL, - content text, - PRIMARY KEY (id), - UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), - INDEX I18N_FIELD(model, foreign_key, field) -); diff --git a/community_server/config/schema/sessions.sql b/community_server/config/schema/sessions.sql deleted file mode 100644 index 1aa0a0f54..000000000 --- a/community_server/config/schema/sessions.sql +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (https://opensource.org/licenses/mit-license.php) - -CREATE TABLE `sessions` ( - `id` char(40) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, - `created` datetime DEFAULT CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+ - `modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+ - `data` blob DEFAULT NULL, -- for PostgreSQL use bytea instead of blob - `expires` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/community_server/copy_to_www.sh b/community_server/copy_to_www.sh deleted file mode 100755 index f6519919f..000000000 --- a/community_server/copy_to_www.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -[! -z "${FOLDER_NAME}"] && FOLDER_NAME=community_server - -COLOR_GREEN="\033[0;32m" -COLOR_YELLOW="\e[33m" -COLOR_NONE="\033[0m" - -SCRIPT=`realpath -s $0` -SCRIPTPATH=`dirname $SCRIPT` -#echo -e "script: $SCRIPT, Path: $SCRIPTPATH " - -cd /var/www/html -if [ ! -d "$FOLDER_NAME" ] ; then - mkdir $FOLDER_NAME -else - chmod -R 0755 $FOLDER_NAME -fi -cd $FOLDER_NAME -cp -r $SCRIPTPATH/src . -cp -r $SCRIPTPATH/config . -cp -r $SCRIPTPATH/composer.json . -cp -r $SCRIPTPATH/webroot . -composer install -if [ ! -d "tmp" ] ; then - mkdir tmp - chown -R www-data:www-data ./tmp -fi -if [ ! -d "logs" ] ; then - mkdir logs - chown -R www-data:www-data ./logs -fi - -cd .. -chown -R www-data:www-data $FOLDER_NAME -chmod -R 0755 $FOLDER_NAME/src -chmod -R 0755 $FOLDER_NAME/config -chmod -R 0755 $FOLDER_NAME/webroot diff --git a/community_server/docu/community-server.api.md b/community_server/docu/community-server.api.md deleted file mode 100644 index 6032ce0a2..000000000 --- a/community_server/docu/community-server.api.md +++ /dev/null @@ -1,132 +0,0 @@ - -# community server api - -In this examples I assume that you use gradido with docker-compose build on your local maschine - -## Konto Overview -return current account balance - -GET http://localhost/state-balances/ajaxGetBalance/-127182 - -If session is valid, return: -```json -{"state":"success","balance":174500} -``` -- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 174500 = 17,45 GDD - -## List Transactions -List all transactions from logged in user, currently without paging -Ajax: -GET http://localhost/state-balances/ajaxListTransactions/-127182/ -or -GET http://localhost/state-balances/ajaxListTransactions/-127182/DESC -to get transaction in descending order - -Antwort: -Wenn alles okay: -```json -{"state":"success", "transactions": - [ - { - "name": "Max Mustermann", - "email": "Maxim Mustermann", - "type": "send", - "transaction_id": 2, - "date": "2021-02-19T13:25:36+00:00", - "balance": 1920000, - "memo": "a piece of cake :)", - "pubkey": "038a6f93270dc57b91d76bf110ad3863fcb7d1b08e7692e793fcdb4467e5b6a7" - } - ], - "transactionExecutingCount": 0, - "count": 1, - "gdtSum": 0, - "timeUsed": 0.04562687873840332 -} -``` - -- name: name of other involved party or empty if unknown (if other party don't belong to group) - - if type is send, name is name of receiver - - if type is receive, name is name of sender - - if type is creation currently I use a static string ("Gradido Akademie) -- email: optional, only if type is send or receive and other user is known -- pubkey: optional, only if type is send or receive and other user isn't known -- type: type of transaction - - creation: user has get gradidos created - - send: user has send another user gradidos - - receiver: user has received gradidos from another user -- transaction_id: id of transaction in db, in stage2 also the hedera sequence number of transaction -- date: date of ordering transaction (booking date) -- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 1920000 = 192,00 GDD -- memo: Details about transaction -- pubkey: optional, if other party isn't known, hexadecimal representation of 32 Byte public key of user [0-9a-f] - -- transactionExecutingCount: how many transaction for this user currently pending and waiting for signing -- count: sum of finished transactions user is involved -- gdtSum: sum of gdt of user in cent with 2 places (Nachkommastellen) -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -## Creation Transaction -Make a creation transaction -With new Option set in Login-Server: -```ini -unsecure.allow_auto_sign_transactions = 1 -``` -transactions can be auto-signed directly with handing in transaction. -Normally a forwarding to login-server check transactions side is neccessary to minimize security risks. - -POST http://localhost/transaction-creations/ajaxCreate -```json -{ - "session_id" : -127182, - "email": "max.musterman@gmail.de", - "amount": 10000000, - "target_date":"2021-02-19T13:25:36+00:00", - "memo":"AGE", - "auto_sign": true -} -``` -return if everything is ok: -```json -{"state":"success", "timeUsed": 0.0122} -``` -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -## Send Coins Transaction -Make a simple GDD Transaction, send Coins from one user to other. -With new Option set in Login-Server: -```ini -unsecure.allow_auto_sign_transactions = 1 -``` -transactions can be auto-signed directly with handing in transaction. -Normally a forwarding to login-server check transactions side is neccessary to minimize security risks. - -POST http://localhost/transaction-send-coins/ajaxCreate -```json -{ - "session_id" : -127182, - "amount": 2000000, - "email": "max.musterman@gmail.de", - "memo":"Thank you :)", - "auto_sign": true -} -``` -- amout: amount to transfer, 2000000 = 200,00 GDD -- email: receiver email address, must be differ from user email -- memo: Details about transaction -- auto_sign: set to true to directly sign transaction if unsecure.allow_auto_sign_transactions = 1 is set - -return if everything is ok: -```json -{"state":"success", "timeUsed": 0.0122} -``` -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -Than the transaction was created on community server, send to login-server, signed (if unsecure.allow_auto_sign_transactions = 1 and auto_sign = true) -and send back to community server and put into db. -After you get this answear you see the new transaction if you list transactions or call for the balance. - -Without auto-sign the transaction is pending on login-server and waits for the user to review it at -http://localhost/account/checkTransactions - - diff --git a/community_server/index.php b/community_server/index.php deleted file mode 100644 index 459176916..000000000 --- a/community_server/index.php +++ /dev/null @@ -1,16 +0,0 @@ -=2.1.2 <3.0.0', -175 silly cache add type: 'range' } -176 silly addNamed clone@>=2.1.2 <3.0.0 -177 verbose addNamed ">=2.1.2 <3.0.0" is a valid semver range for clone -178 silly addNameRange { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: false } -179 silly mapToRegistry name clone -180 silly mapToRegistry using default registry -181 silly mapToRegistry registry https://registry.npmjs.org/ -182 silly mapToRegistry uri https://registry.npmjs.org/clone -183 verbose addNameRange registry:https://registry.npmjs.org/clone not in flight; fetching -184 verbose get https://registry.npmjs.org/clone not expired, no request -185 silly addNameRange number 2 { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: true } -186 silly addNameRange versions [ 'clone', -186 silly addNameRange [ '0.0.0', -186 silly addNameRange '0.0.1', -186 silly addNameRange '0.0.2', -186 silly addNameRange '0.0.3', -186 silly addNameRange '0.0.4', -186 silly addNameRange '0.0.5', -186 silly addNameRange '0.0.6', -186 silly addNameRange '0.0.7', -186 silly addNameRange '0.1.0', -186 silly addNameRange '0.1.1', -186 silly addNameRange '0.1.2', -186 silly addNameRange '0.1.3', -186 silly addNameRange '0.1.4', -186 silly addNameRange '0.1.5', -186 silly addNameRange '0.1.6', -186 silly addNameRange '0.1.7', -186 silly addNameRange '0.1.8', -186 silly addNameRange '0.1.9', -186 silly addNameRange '0.1.10', -186 silly addNameRange '0.1.11', -186 silly addNameRange '0.1.12', -186 silly addNameRange '0.1.13', -186 silly addNameRange '0.1.14', -186 silly addNameRange '0.1.15', -186 silly addNameRange '0.1.16', -186 silly addNameRange '0.1.17', -186 silly addNameRange '0.1.18', -186 silly addNameRange '0.2.0', -186 silly addNameRange '0.1.19', -186 silly addNameRange '1.0.0', -186 silly addNameRange '1.0.1', -186 silly addNameRange '1.0.2', -186 silly addNameRange '2.0.0', -186 silly addNameRange '2.1.0', -186 silly addNameRange '2.1.1', -186 silly addNameRange '1.0.3', -186 silly addNameRange '2.1.2', -186 silly addNameRange '1.0.4' ] ] -187 silly addNamed clone@2.1.2 -188 verbose addNamed "2.1.2" is a plain semver version for clone -189 silly mapToRegistry name clone -190 silly mapToRegistry using default registry -191 silly mapToRegistry registry https://registry.npmjs.org/ -192 silly mapToRegistry uri https://registry.npmjs.org/clone -193 verbose addRemoteTarball https://registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding -194 verbose addRemoteTarball [ 'https://registry.npmjs.org/clone/-/clone-2.1.2.tgz', -194 verbose addRemoteTarball '1b7f4b9f591f1e8f83670401600345a02887435f' ] -195 info retry fetch attempt 1 at 13:48:57 -196 info attempt registry request try #1 at 13:48:57 -197 http fetch GET https://registry.npmjs.org/clone/-/clone-2.1.2.tgz -198 http fetch 200 https://registry.npmjs.org/clone/-/clone-2.1.2.tgz -199 silly fetchAndShaCheck shasum 1b7f4b9f591f1e8f83670401600345a02887435f -200 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding -201 verbose addTmpTarball already have metadata; skipping unpack for clone@2.1.2 -202 http 200 https://registry.npmjs.org/mime -203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -203 verbose headers 'content-type': 'application/json', -203 verbose headers 'transfer-encoding': 'chunked', -203 verbose headers connection: 'keep-alive', -203 verbose headers 'set-cookie': -203 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -203 verbose headers 'cf-ray': '59764fa1caba6347-FRA', -203 verbose headers age: '5658', -203 verbose headers 'cache-control': 'public, max-age=300', -203 verbose headers etag: 'W/"06d541b2c21df82e268be063f8846ba5"', -203 verbose headers 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT', -203 verbose headers vary: 'accept-encoding, accept', -203 verbose headers 'cf-cache-status': 'HIT', -203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -203 verbose headers server: 'cloudflare', -203 verbose headers 'content-encoding': 'gzip', -203 verbose headers 'cf-request-id': '02ddd0192000006347e8890200000001' } -204 silly get cb [ 200, -204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -204 silly get 'content-type': 'application/json', -204 silly get 'transfer-encoding': 'chunked', -204 silly get connection: 'keep-alive', -204 silly get 'set-cookie': -204 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -204 silly get 'cf-ray': '59764fa1caba6347-FRA', -204 silly get age: '5658', -204 silly get 'cache-control': 'public, max-age=300', -204 silly get etag: 'W/"06d541b2c21df82e268be063f8846ba5"', -204 silly get 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT', -204 silly get vary: 'accept-encoding, accept', -204 silly get 'cf-cache-status': 'HIT', -204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -204 silly get server: 'cloudflare', -204 silly get 'content-encoding': 'gzip', -204 silly get 'cf-request-id': '02ddd0192000006347e8890200000001' } ] -205 verbose get saving mime to /home/christine/.npm/registry.npmjs.org/mime/.cache.json -206 http 304 https://registry.npmjs.org/errno -207 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -207 verbose headers connection: 'keep-alive', -207 verbose headers 'set-cookie': -207 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -207 verbose headers 'cf-ray': '59764fa1ddccd6e9-FRA', -207 verbose headers age: '5629', -207 verbose headers 'cache-control': 'public, max-age=300', -207 verbose headers etag: '"93d3c79a655f99137298121fc95d36c6"', -207 verbose headers 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT', -207 verbose headers vary: 'Accept-Encoding', -207 verbose headers 'cf-cache-status': 'HIT', -207 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -207 verbose headers server: 'cloudflare', -207 verbose headers 'cf-request-id': '02ddd019240000d6e975b00200000001' } -208 silly get cb [ 304, -208 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -208 silly get connection: 'keep-alive', -208 silly get 'set-cookie': -208 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -208 silly get 'cf-ray': '59764fa1ddccd6e9-FRA', -208 silly get age: '5629', -208 silly get 'cache-control': 'public, max-age=300', -208 silly get etag: '"93d3c79a655f99137298121fc95d36c6"', -208 silly get 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT', -208 silly get vary: 'Accept-Encoding', -208 silly get 'cf-cache-status': 'HIT', -208 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -208 silly get server: 'cloudflare', -208 silly get 'cf-request-id': '02ddd019240000d6e975b00200000001' } ] -209 verbose etag https://registry.npmjs.org/errno from cache -210 verbose get saving errno to /home/christine/.npm/registry.npmjs.org/errno/.cache.json -211 http 200 https://registry.npmjs.org/promise -212 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -212 verbose headers 'content-type': 'application/json', -212 verbose headers 'transfer-encoding': 'chunked', -212 verbose headers connection: 'keep-alive', -212 verbose headers 'set-cookie': -212 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -212 verbose headers 'cf-ray': '59764fa1c9c76413-FRA', -212 verbose headers age: '5628', -212 verbose headers 'cache-control': 'public, max-age=300', -212 verbose headers etag: 'W/"0560bb757d840a7a46bf8d008bc75194"', -212 verbose headers 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT', -212 verbose headers vary: 'accept-encoding, accept', -212 verbose headers 'cf-cache-status': 'HIT', -212 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -212 verbose headers server: 'cloudflare', -212 verbose headers 'content-encoding': 'gzip', -212 verbose headers 'cf-request-id': '02ddd01920000064135f8cb200000001' } -213 silly get cb [ 200, -213 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -213 silly get 'content-type': 'application/json', -213 silly get 'transfer-encoding': 'chunked', -213 silly get connection: 'keep-alive', -213 silly get 'set-cookie': -213 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -213 silly get 'cf-ray': '59764fa1c9c76413-FRA', -213 silly get age: '5628', -213 silly get 'cache-control': 'public, max-age=300', -213 silly get etag: 'W/"0560bb757d840a7a46bf8d008bc75194"', -213 silly get 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT', -213 silly get vary: 'accept-encoding, accept', -213 silly get 'cf-cache-status': 'HIT', -213 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -213 silly get server: 'cloudflare', -213 silly get 'content-encoding': 'gzip', -213 silly get 'cf-request-id': '02ddd01920000064135f8cb200000001' } ] -214 verbose get saving promise to /home/christine/.npm/registry.npmjs.org/promise/.cache.json -215 http 200 https://registry.npmjs.org/graceful-fs -216 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -216 verbose headers 'content-type': 'application/json', -216 verbose headers 'transfer-encoding': 'chunked', -216 verbose headers connection: 'keep-alive', -216 verbose headers 'set-cookie': -216 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -216 verbose headers 'cf-ray': '59764fa1da22325c-FRA', -216 verbose headers age: '5345', -216 verbose headers 'cache-control': 'public, max-age=300', -216 verbose headers etag: 'W/"84e1c483529d18a582ac0265096141af"', -216 verbose headers 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT', -216 verbose headers vary: 'accept-encoding, accept', -216 verbose headers 'cf-cache-status': 'HIT', -216 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -216 verbose headers server: 'cloudflare', -216 verbose headers 'content-encoding': 'gzip', -216 verbose headers 'cf-request-id': '02ddd019250000325c4cbef200000001' } -217 silly get cb [ 200, -217 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -217 silly get 'content-type': 'application/json', -217 silly get 'transfer-encoding': 'chunked', -217 silly get connection: 'keep-alive', -217 silly get 'set-cookie': -217 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -217 silly get 'cf-ray': '59764fa1da22325c-FRA', -217 silly get age: '5345', -217 silly get 'cache-control': 'public, max-age=300', -217 silly get etag: 'W/"84e1c483529d18a582ac0265096141af"', -217 silly get 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT', -217 silly get vary: 'accept-encoding, accept', -217 silly get 'cf-cache-status': 'HIT', -217 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -217 silly get server: 'cloudflare', -217 silly get 'content-encoding': 'gzip', -217 silly get 'cf-request-id': '02ddd019250000325c4cbef200000001' } ] -218 verbose get saving graceful-fs to /home/christine/.npm/registry.npmjs.org/graceful-fs/.cache.json -219 silly resolveWithNewModule errno@0.1.7 checking installable status -220 silly cache add args [ 'errno@^0.1.1', null ] -221 verbose cache add spec errno@^0.1.1 -222 silly cache add parsed spec Result { -222 silly cache add raw: 'errno@^0.1.1', -222 silly cache add scope: null, -222 silly cache add name: 'errno', -222 silly cache add rawSpec: '^0.1.1', -222 silly cache add spec: '>=0.1.1 <0.2.0', -222 silly cache add type: 'range' } -223 silly addNamed errno@>=0.1.1 <0.2.0 -224 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for errno -225 silly addNameRange { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: false } -226 silly mapToRegistry name errno -227 silly mapToRegistry using default registry -228 silly mapToRegistry registry https://registry.npmjs.org/ -229 silly mapToRegistry uri https://registry.npmjs.org/errno -230 verbose addNameRange registry:https://registry.npmjs.org/errno not in flight; fetching -231 silly resolveWithNewModule mime@1.6.0 checking installable status -232 silly cache add args [ 'mime@^1.4.1', null ] -233 verbose cache add spec mime@^1.4.1 -234 silly cache add parsed spec Result { -234 silly cache add raw: 'mime@^1.4.1', -234 silly cache add scope: null, -234 silly cache add name: 'mime', -234 silly cache add rawSpec: '^1.4.1', -234 silly cache add spec: '>=1.4.1 <2.0.0', -234 silly cache add type: 'range' } -235 silly addNamed mime@>=1.4.1 <2.0.0 -236 verbose addNamed ">=1.4.1 <2.0.0" is a valid semver range for mime -237 silly addNameRange { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: false } -238 silly mapToRegistry name mime -239 silly mapToRegistry using default registry -240 silly mapToRegistry registry https://registry.npmjs.org/ -241 silly mapToRegistry uri https://registry.npmjs.org/mime -242 verbose addNameRange registry:https://registry.npmjs.org/mime not in flight; fetching -243 http 200 https://registry.npmjs.org/tslib -244 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -244 verbose headers 'content-type': 'application/json', -244 verbose headers 'transfer-encoding': 'chunked', -244 verbose headers connection: 'keep-alive', -244 verbose headers 'set-cookie': -244 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -244 verbose headers 'cf-ray': '59764fa1d9e7d715-FRA', -244 verbose headers age: '5299', -244 verbose headers 'cache-control': 'public, max-age=300', -244 verbose headers etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"', -244 verbose headers 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT', -244 verbose headers vary: 'accept-encoding, accept', -244 verbose headers 'cf-cache-status': 'HIT', -244 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -244 verbose headers server: 'cloudflare', -244 verbose headers 'content-encoding': 'gzip', -244 verbose headers 'cf-request-id': '02ddd019240000d715c11d3200000001' } -245 silly get cb [ 200, -245 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -245 silly get 'content-type': 'application/json', -245 silly get 'transfer-encoding': 'chunked', -245 silly get connection: 'keep-alive', -245 silly get 'set-cookie': -245 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -245 silly get 'cf-ray': '59764fa1d9e7d715-FRA', -245 silly get age: '5299', -245 silly get 'cache-control': 'public, max-age=300', -245 silly get etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"', -245 silly get 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT', -245 silly get vary: 'accept-encoding, accept', -245 silly get 'cf-cache-status': 'HIT', -245 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -245 silly get server: 'cloudflare', -245 silly get 'content-encoding': 'gzip', -245 silly get 'cf-request-id': '02ddd019240000d715c11d3200000001' } ] -246 verbose get saving tslib to /home/christine/.npm/registry.npmjs.org/tslib/.cache.json -247 verbose get https://registry.npmjs.org/errno not expired, no request -248 silly addNameRange number 2 { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: true } -249 silly addNameRange versions [ 'errno', -249 silly addNameRange [ '0.0.1', -249 silly addNameRange '0.0.2', -249 silly addNameRange '0.0.3', -249 silly addNameRange '0.0.4', -249 silly addNameRange '0.0.5', -249 silly addNameRange '0.1.0', -249 silly addNameRange '0.1.1', -249 silly addNameRange '0.1.2', -249 silly addNameRange '0.1.3', -249 silly addNameRange '0.1.4', -249 silly addNameRange '0.1.5', -249 silly addNameRange '0.1.6', -249 silly addNameRange '0.1.7' ] ] -250 silly addNamed errno@0.1.7 -251 verbose addNamed "0.1.7" is a plain semver version for errno -252 verbose get https://registry.npmjs.org/mime not expired, no request -253 silly addNameRange number 2 { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: true } -254 silly addNameRange versions [ 'mime', -254 silly addNameRange [ '1.0.0', -254 silly addNameRange '1.1.0', -254 silly addNameRange '1.2.1', -254 silly addNameRange '1.2.2', -254 silly addNameRange '1.2.3', -254 silly addNameRange '1.2.4', -254 silly addNameRange '1.2.5', -254 silly addNameRange '1.2.6', -254 silly addNameRange '1.2.7', -254 silly addNameRange '1.2.8', -254 silly addNameRange '1.2.9', -254 silly addNameRange '1.2.10', -254 silly addNameRange '1.2.11', -254 silly addNameRange '1.3.0', -254 silly addNameRange '1.3.2', -254 silly addNameRange '1.3.3', -254 silly addNameRange '1.3.4', -254 silly addNameRange '1.3.5', -254 silly addNameRange '1.3.6', -254 silly addNameRange '1.4.0', -254 silly addNameRange '2.0.0', -254 silly addNameRange '2.0.1', -254 silly addNameRange '2.0.2', -254 silly addNameRange '1.4.1', -254 silly addNameRange '2.0.3', -254 silly addNameRange '1.5.0', -254 silly addNameRange '1.6.0', -254 silly addNameRange '2.0.5', -254 silly addNameRange '2.1.0', -254 silly addNameRange '2.2.0', -254 silly addNameRange '2.2.1', -254 silly addNameRange '2.2.2', -254 silly addNameRange '2.3.0', -254 silly addNameRange '2.3.1', -254 silly addNameRange '2.4.0', -254 silly addNameRange '2.4.1', -254 silly addNameRange '2.4.2', -254 silly addNameRange '2.4.3', -254 silly addNameRange '2.4.4', -254 silly addNameRange '2.4.5' ] ] -255 silly addNamed mime@1.6.0 -256 verbose addNamed "1.6.0" is a plain semver version for mime -257 silly cache afterAdd clone@2.1.2 -258 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json not in flight; writing -259 silly mapToRegistry name mime -260 silly mapToRegistry using default registry -261 silly mapToRegistry registry https://registry.npmjs.org/ -262 silly mapToRegistry uri https://registry.npmjs.org/mime -263 verbose addRemoteTarball https://registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding -264 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime/-/mime-1.6.0.tgz', -264 verbose addRemoteTarball '32cd9e5c64553bd58d19a568af452acff04981b1' ] -265 http 200 https://registry.npmjs.org/mkdirp -266 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -266 verbose headers 'content-type': 'application/json', -266 verbose headers 'transfer-encoding': 'chunked', -266 verbose headers connection: 'keep-alive', -266 verbose headers 'set-cookie': -266 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -266 verbose headers 'cf-ray': '59764fa1fe51175a-FRA', -266 verbose headers age: '5346', -266 verbose headers 'cache-control': 'public, max-age=300', -266 verbose headers etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"', -266 verbose headers 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT', -266 verbose headers vary: 'accept-encoding, accept', -266 verbose headers 'cf-cache-status': 'HIT', -266 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -266 verbose headers server: 'cloudflare', -266 verbose headers 'content-encoding': 'gzip', -266 verbose headers 'cf-request-id': '02ddd019380000175a1e1e7200000001' } -267 silly get cb [ 200, -267 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -267 silly get 'content-type': 'application/json', -267 silly get 'transfer-encoding': 'chunked', -267 silly get connection: 'keep-alive', -267 silly get 'set-cookie': -267 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -267 silly get 'cf-ray': '59764fa1fe51175a-FRA', -267 silly get age: '5346', -267 silly get 'cache-control': 'public, max-age=300', -267 silly get etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"', -267 silly get 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT', -267 silly get vary: 'accept-encoding, accept', -267 silly get 'cf-cache-status': 'HIT', -267 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -267 silly get server: 'cloudflare', -267 silly get 'content-encoding': 'gzip', -267 silly get 'cf-request-id': '02ddd019380000175a1e1e7200000001' } ] -268 verbose get saving mkdirp to /home/christine/.npm/registry.npmjs.org/mkdirp/.cache.json -269 silly resolveWithNewModule graceful-fs@4.2.4 checking installable status -270 silly cache add args [ 'graceful-fs@^4.1.2', null ] -271 verbose cache add spec graceful-fs@^4.1.2 -272 silly cache add parsed spec Result { -272 silly cache add raw: 'graceful-fs@^4.1.2', -272 silly cache add scope: null, -272 silly cache add name: 'graceful-fs', -272 silly cache add rawSpec: '^4.1.2', -272 silly cache add spec: '>=4.1.2 <5.0.0', -272 silly cache add type: 'range' } -273 silly addNamed graceful-fs@>=4.1.2 <5.0.0 -274 verbose addNamed ">=4.1.2 <5.0.0" is a valid semver range for graceful-fs -275 silly addNameRange { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: false } -276 silly mapToRegistry name graceful-fs -277 silly mapToRegistry using default registry -278 silly mapToRegistry registry https://registry.npmjs.org/ -279 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs -280 verbose addNameRange registry:https://registry.npmjs.org/graceful-fs not in flight; fetching -281 http 200 https://registry.npmjs.org/image-size -282 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -282 verbose headers 'content-type': 'application/json', -282 verbose headers 'transfer-encoding': 'chunked', -282 verbose headers connection: 'keep-alive', -282 verbose headers 'set-cookie': -282 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -282 verbose headers 'cf-ray': '59764fa1cf14648b-FRA', -282 verbose headers age: '4621', -282 verbose headers 'cache-control': 'public, max-age=300', -282 verbose headers etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"', -282 verbose headers 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT', -282 verbose headers vary: 'accept-encoding, accept', -282 verbose headers 'cf-cache-status': 'HIT', -282 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -282 verbose headers server: 'cloudflare', -282 verbose headers 'content-encoding': 'gzip', -282 verbose headers 'cf-request-id': '02ddd0191b0000648bda3f1200000001' } -283 silly get cb [ 200, -283 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -283 silly get 'content-type': 'application/json', -283 silly get 'transfer-encoding': 'chunked', -283 silly get connection: 'keep-alive', -283 silly get 'set-cookie': -283 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -283 silly get 'cf-ray': '59764fa1cf14648b-FRA', -283 silly get age: '4621', -283 silly get 'cache-control': 'public, max-age=300', -283 silly get etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"', -283 silly get 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT', -283 silly get vary: 'accept-encoding, accept', -283 silly get 'cf-cache-status': 'HIT', -283 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -283 silly get server: 'cloudflare', -283 silly get 'content-encoding': 'gzip', -283 silly get 'cf-request-id': '02ddd0191b0000648bda3f1200000001' } ] -284 verbose get saving image-size to /home/christine/.npm/registry.npmjs.org/image-size/.cache.json -285 silly resolveWithNewModule promise@7.3.1 checking installable status -286 silly cache add args [ 'promise@^7.1.1', null ] -287 verbose cache add spec promise@^7.1.1 -288 silly cache add parsed spec Result { -288 silly cache add raw: 'promise@^7.1.1', -288 silly cache add scope: null, -288 silly cache add name: 'promise', -288 silly cache add rawSpec: '^7.1.1', -288 silly cache add spec: '>=7.1.1 <8.0.0', -288 silly cache add type: 'range' } -289 silly addNamed promise@>=7.1.1 <8.0.0 -290 verbose addNamed ">=7.1.1 <8.0.0" is a valid semver range for promise -291 silly addNameRange { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: false } -292 silly mapToRegistry name promise -293 silly mapToRegistry using default registry -294 silly mapToRegistry registry https://registry.npmjs.org/ -295 silly mapToRegistry uri https://registry.npmjs.org/promise -296 verbose addNameRange registry:https://registry.npmjs.org/promise not in flight; fetching -297 info retry fetch attempt 1 at 13:48:57 -298 info attempt registry request try #1 at 13:48:57 -299 http fetch GET https://registry.npmjs.org/mime/-/mime-1.6.0.tgz -300 silly resolveWithNewModule tslib@1.13.0 checking installable status -301 silly cache add args [ 'tslib@^1.10.0', null ] -302 verbose cache add spec tslib@^1.10.0 -303 silly cache add parsed spec Result { -303 silly cache add raw: 'tslib@^1.10.0', -303 silly cache add scope: null, -303 silly cache add name: 'tslib', -303 silly cache add rawSpec: '^1.10.0', -303 silly cache add spec: '>=1.10.0 <2.0.0', -303 silly cache add type: 'range' } -304 silly addNamed tslib@>=1.10.0 <2.0.0 -305 verbose addNamed ">=1.10.0 <2.0.0" is a valid semver range for tslib -306 silly addNameRange { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: false } -307 silly mapToRegistry name tslib -308 silly mapToRegistry using default registry -309 silly mapToRegistry registry https://registry.npmjs.org/ -310 silly mapToRegistry uri https://registry.npmjs.org/tslib -311 verbose addNameRange registry:https://registry.npmjs.org/tslib not in flight; fetching -312 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json written -313 verbose get https://registry.npmjs.org/graceful-fs not expired, no request -314 silly addNameRange number 2 { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: true } -315 silly addNameRange versions [ 'graceful-fs', -315 silly addNameRange [ '1.0.0', -315 silly addNameRange '1.0.1', -315 silly addNameRange '1.0.2', -315 silly addNameRange '1.1.0', -315 silly addNameRange '1.1.1', -315 silly addNameRange '1.1.2', -315 silly addNameRange '1.1.3', -315 silly addNameRange '1.1.4', -315 silly addNameRange '1.1.5', -315 silly addNameRange '1.1.6', -315 silly addNameRange '1.1.7', -315 silly addNameRange '1.1.8', -315 silly addNameRange '1.1.9', -315 silly addNameRange '1.1.10', -315 silly addNameRange '1.1.11', -315 silly addNameRange '1.1.12', -315 silly addNameRange '1.1.13', -315 silly addNameRange '1.1.14', -315 silly addNameRange '1.2.0', -315 silly addNameRange '1.2.1', -315 silly addNameRange '1.2.2', -315 silly addNameRange '1.2.3', -315 silly addNameRange '2.0.0', -315 silly addNameRange '2.0.1', -315 silly addNameRange '2.0.2', -315 silly addNameRange '2.0.3', -315 silly addNameRange '3.0.0', -315 silly addNameRange '3.0.1', -315 silly addNameRange '3.0.2', -315 silly addNameRange '3.0.3', -315 silly addNameRange '3.0.4', -315 silly addNameRange '3.0.5', -315 silly addNameRange '3.0.6', -315 silly addNameRange '3.0.7', -315 silly addNameRange '3.0.8', -315 silly addNameRange '4.1.0', -315 silly addNameRange '4.1.1', -315 silly addNameRange '4.1.2', -315 silly addNameRange '4.1.3', -315 silly addNameRange '4.1.4', -315 silly addNameRange '4.1.5', -315 silly addNameRange '3.0.9', -315 silly addNameRange '4.1.6', -315 silly addNameRange '3.0.10', -315 silly addNameRange '3.0.11', -315 silly addNameRange '4.1.7', -315 silly addNameRange '4.1.8', -315 silly addNameRange '4.1.9', -315 silly addNameRange '4.1.10', -315 silly addNameRange '4.1.11', -315 silly addNameRange '4.1.12', -315 silly addNameRange '4.1.13', -315 silly addNameRange '4.1.14', -315 silly addNameRange '4.1.15', -315 silly addNameRange '4.2.0', -315 silly addNameRange '4.2.1', -315 silly addNameRange '3.0.12', -315 silly addNameRange '4.2.2', -315 silly addNameRange '4.2.3', -315 silly addNameRange '4.2.4' ] ] -316 silly addNamed graceful-fs@4.2.4 -317 verbose addNamed "4.2.4" is a plain semver version for graceful-fs -318 silly cache afterAdd errno@0.1.7 -319 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json not in flight; writing -320 silly mapToRegistry name graceful-fs -321 silly mapToRegistry using default registry -322 silly mapToRegistry registry https://registry.npmjs.org/ -323 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs -324 verbose addRemoteTarball https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding -325 verbose addRemoteTarball [ 'https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz', -325 verbose addRemoteTarball '2256bde14d3632958c465ebc96dc467ca07a29fb' ] -326 verbose get https://registry.npmjs.org/promise not expired, no request -327 silly addNameRange number 2 { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: true } -328 silly addNameRange versions [ 'promise', -328 silly addNameRange [ '1.2.1', -328 silly addNameRange '1.2.2', -328 silly addNameRange '1.3.0', -328 silly addNameRange '2.0.0', -328 silly addNameRange '3.0.0', -328 silly addNameRange '3.0.1', -328 silly addNameRange '3.1.0', -328 silly addNameRange '3.2.0', -328 silly addNameRange '4.0.0', -328 silly addNameRange '5.0.0', -328 silly addNameRange '6.0.0', -328 silly addNameRange '6.0.1', -328 silly addNameRange '6.1.0', -328 silly addNameRange '7.0.0', -328 silly addNameRange '7.0.1', -328 silly addNameRange '7.0.2', -328 silly addNameRange '7.0.3', -328 silly addNameRange '7.0.4', -328 silly addNameRange '7.1.0', -328 silly addNameRange '7.1.1', -328 silly addNameRange '7.2.0', -328 silly addNameRange '7.3.0', -328 silly addNameRange '7.3.1', -328 silly addNameRange '8.0.0', -328 silly addNameRange '8.0.1', -328 silly addNameRange '8.0.2', -328 silly addNameRange '8.0.3', -328 silly addNameRange '8.1.0' ] ] -329 silly addNamed promise@7.3.1 -330 verbose addNamed "7.3.1" is a plain semver version for promise -331 verbose get https://registry.npmjs.org/tslib not expired, no request -332 silly addNameRange number 2 { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: true } -333 silly addNameRange versions [ 'tslib', -333 silly addNameRange [ '0.0.1-security', -333 silly addNameRange '1.0.0', -333 silly addNameRange '1.1.0', -333 silly addNameRange '1.2.0', -333 silly addNameRange '1.3.0', -333 silly addNameRange '1.4.0', -333 silly addNameRange '1.5.0', -333 silly addNameRange '1.6.0', -333 silly addNameRange '1.6.1', -333 silly addNameRange '1.7.0', -333 silly addNameRange '1.7.1', -333 silly addNameRange '1.8.0', -333 silly addNameRange '1.8.1', -333 silly addNameRange '1.9.0', -333 silly addNameRange '1.9.1', -333 silly addNameRange '1.9.2', -333 silly addNameRange '1.9.3', -333 silly addNameRange '1.10.0', -333 silly addNameRange '1.11.0', -333 silly addNameRange '1.11.1', -333 silly addNameRange '1.11.2', -333 silly addNameRange '1.12.0', -333 silly addNameRange '1.13.0', -333 silly addNameRange '2.0.0' ] ] -334 silly addNamed tslib@1.13.0 -335 verbose addNamed "1.13.0" is a plain semver version for tslib -336 silly mapToRegistry name promise -337 silly mapToRegistry using default registry -338 silly mapToRegistry registry https://registry.npmjs.org/ -339 silly mapToRegistry uri https://registry.npmjs.org/promise -340 verbose addRemoteTarball https://registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding -341 verbose addRemoteTarball [ 'https://registry.npmjs.org/promise/-/promise-7.3.1.tgz', -341 verbose addRemoteTarball '064b72602b18f90f29192b8b1bc418ffd1ebd3bf' ] -342 silly resolveWithNewModule mkdirp@0.5.5 checking installable status -343 silly cache add args [ 'mkdirp@^0.5.0', null ] -344 verbose cache add spec mkdirp@^0.5.0 -345 silly cache add parsed spec Result { -345 silly cache add raw: 'mkdirp@^0.5.0', -345 silly cache add scope: null, -345 silly cache add name: 'mkdirp', -345 silly cache add rawSpec: '^0.5.0', -345 silly cache add spec: '>=0.5.0 <0.6.0', -345 silly cache add type: 'range' } -346 silly addNamed mkdirp@>=0.5.0 <0.6.0 -347 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for mkdirp -348 silly addNameRange { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: false } -349 silly mapToRegistry name mkdirp -350 silly mapToRegistry using default registry -351 silly mapToRegistry registry https://registry.npmjs.org/ -352 silly mapToRegistry uri https://registry.npmjs.org/mkdirp -353 verbose addNameRange registry:https://registry.npmjs.org/mkdirp not in flight; fetching -354 silly mapToRegistry name tslib -355 silly mapToRegistry using default registry -356 silly mapToRegistry registry https://registry.npmjs.org/ -357 silly mapToRegistry uri https://registry.npmjs.org/tslib -358 verbose addRemoteTarball https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding -359 verbose addRemoteTarball [ 'https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz', -359 verbose addRemoteTarball 'c881e13cc7015894ed914862d276436fa9a47043' ] -360 info retry fetch attempt 1 at 13:48:57 -361 info attempt registry request try #1 at 13:48:57 -362 http fetch GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz -363 info retry fetch attempt 1 at 13:48:57 -364 info attempt registry request try #1 at 13:48:57 -365 http fetch GET https://registry.npmjs.org/promise/-/promise-7.3.1.tgz -366 http 200 https://registry.npmjs.org/source-map -367 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -367 verbose headers 'content-type': 'application/json', -367 verbose headers 'transfer-encoding': 'chunked', -367 verbose headers connection: 'keep-alive', -367 verbose headers 'set-cookie': -367 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -367 verbose headers 'cf-ray': '59764fa1f8a405fd-FRA', -367 verbose headers age: '5629', -367 verbose headers 'cache-control': 'public, max-age=300', -367 verbose headers etag: 'W/"ed6422e25077febab77501a786cb4bdd"', -367 verbose headers 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT', -367 verbose headers vary: 'accept-encoding, accept', -367 verbose headers 'cf-cache-status': 'HIT', -367 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -367 verbose headers server: 'cloudflare', -367 verbose headers 'content-encoding': 'gzip', -367 verbose headers 'cf-request-id': '02ddd0193d000005fd8da0d200000001' } -368 silly get cb [ 200, -368 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -368 silly get 'content-type': 'application/json', -368 silly get 'transfer-encoding': 'chunked', -368 silly get connection: 'keep-alive', -368 silly get 'set-cookie': -368 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -368 silly get 'cf-ray': '59764fa1f8a405fd-FRA', -368 silly get age: '5629', -368 silly get 'cache-control': 'public, max-age=300', -368 silly get etag: 'W/"ed6422e25077febab77501a786cb4bdd"', -368 silly get 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT', -368 silly get vary: 'accept-encoding, accept', -368 silly get 'cf-cache-status': 'HIT', -368 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -368 silly get server: 'cloudflare', -368 silly get 'content-encoding': 'gzip', -368 silly get 'cf-request-id': '02ddd0193d000005fd8da0d200000001' } ] -369 verbose get saving source-map to /home/christine/.npm/registry.npmjs.org/source-map/.cache.json -370 silly resolveWithNewModule image-size@0.5.5 checking installable status -371 silly cache add args [ 'image-size@~0.5.0', null ] -372 verbose cache add spec image-size@~0.5.0 -373 silly cache add parsed spec Result { -373 silly cache add raw: 'image-size@~0.5.0', -373 silly cache add scope: null, -373 silly cache add name: 'image-size', -373 silly cache add rawSpec: '~0.5.0', -373 silly cache add spec: '>=0.5.0 <0.6.0', -373 silly cache add type: 'range' } -374 silly addNamed image-size@>=0.5.0 <0.6.0 -375 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for image-size -376 silly addNameRange { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: false } -377 silly mapToRegistry name image-size -378 silly mapToRegistry using default registry -379 silly mapToRegistry registry https://registry.npmjs.org/ -380 silly mapToRegistry uri https://registry.npmjs.org/image-size -381 verbose addNameRange registry:https://registry.npmjs.org/image-size not in flight; fetching -382 info retry fetch attempt 1 at 13:48:57 -383 info attempt registry request try #1 at 13:48:57 -384 http fetch GET https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz -385 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json written -386 verbose get https://registry.npmjs.org/mkdirp not expired, no request -387 silly addNameRange number 2 { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: true } -388 silly addNameRange versions [ 'mkdirp', -388 silly addNameRange [ '0.0.1', -388 silly addNameRange '0.0.2', -388 silly addNameRange '0.0.3', -388 silly addNameRange '0.0.4', -388 silly addNameRange '0.0.5', -388 silly addNameRange '0.0.6', -388 silly addNameRange '0.0.7', -388 silly addNameRange '0.1.0', -388 silly addNameRange '0.2.0', -388 silly addNameRange '0.2.1', -388 silly addNameRange '0.2.2', -388 silly addNameRange '0.3.0', -388 silly addNameRange '0.3.1', -388 silly addNameRange '0.3.2', -388 silly addNameRange '0.3.3', -388 silly addNameRange '0.3.4', -388 silly addNameRange '0.3.5', -388 silly addNameRange '0.4.0', -388 silly addNameRange '0.4.1', -388 silly addNameRange '0.4.2', -388 silly addNameRange '0.5.0', -388 silly addNameRange '0.5.1', -388 silly addNameRange '1.0.0', -388 silly addNameRange '1.0.1', -388 silly addNameRange '1.0.2', -388 silly addNameRange '1.0.3', -388 silly addNameRange '0.5.2', -388 silly addNameRange '0.5.3', -388 silly addNameRange '0.5.4', -388 silly addNameRange '1.0.4', -388 silly addNameRange '0.5.5' ] ] -389 silly addNamed mkdirp@0.5.5 -390 verbose addNamed "0.5.5" is a plain semver version for mkdirp -391 silly mapToRegistry name mkdirp -392 silly mapToRegistry using default registry -393 silly mapToRegistry registry https://registry.npmjs.org/ -394 silly mapToRegistry uri https://registry.npmjs.org/mkdirp -395 verbose addRemoteTarball https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding -396 verbose addRemoteTarball [ 'https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz', -396 verbose addRemoteTarball 'd91cefd62d1436ca0f41620e251288d420099def' ] -397 verbose get https://registry.npmjs.org/image-size not expired, no request -398 silly addNameRange number 2 { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: true } -399 silly addNameRange versions [ 'image-size', -399 silly addNameRange [ '0.0.2', -399 silly addNameRange '0.0.3', -399 silly addNameRange '0.0.5', -399 silly addNameRange '0.1.0', -399 silly addNameRange '0.1.1', -399 silly addNameRange '0.1.2', -399 silly addNameRange '0.1.3', -399 silly addNameRange '0.1.4', -399 silly addNameRange '0.1.5', -399 silly addNameRange '0.1.6', -399 silly addNameRange '0.1.7', -399 silly addNameRange '0.1.10', -399 silly addNameRange '0.1.15', -399 silly addNameRange '0.0.16', -399 silly addNameRange '0.1.16', -399 silly addNameRange '0.1.17', -399 silly addNameRange '0.1.20', -399 silly addNameRange '0.2.1', -399 silly addNameRange '0.2.2', -399 silly addNameRange '0.2.3', -399 silly addNameRange '0.2.4', -399 silly addNameRange '0.2.5', -399 silly addNameRange '0.3.0', -399 silly addNameRange '0.3.1', -399 silly addNameRange '0.3.2', -399 silly addNameRange '0.3.3', -399 silly addNameRange '0.3.5', -399 silly addNameRange '0.4.0', -399 silly addNameRange '0.5.0', -399 silly addNameRange '0.5.1', -399 silly addNameRange '0.5.2', -399 silly addNameRange '0.5.3', -399 silly addNameRange '0.5.4', -399 silly addNameRange '0.5.5', -399 silly addNameRange '0.6.0', -399 silly addNameRange '0.6.1', -399 silly addNameRange '0.6.2', -399 silly addNameRange '0.6.3', -399 silly addNameRange '0.7.0', -399 silly addNameRange '0.7.1', -399 silly addNameRange '0.7.2', -399 silly addNameRange '0.7.3', -399 silly addNameRange '0.7.4', -399 silly addNameRange '0.7.5', -399 silly addNameRange '0.8.0', -399 silly addNameRange '0.8.1', -399 silly addNameRange '0.8.2', -399 silly addNameRange '0.8.3' ] ] -400 silly addNamed image-size@0.5.5 -401 verbose addNamed "0.5.5" is a plain semver version for image-size -402 silly mapToRegistry name image-size -403 silly mapToRegistry using default registry -404 silly mapToRegistry registry https://registry.npmjs.org/ -405 silly mapToRegistry uri https://registry.npmjs.org/image-size -406 verbose addRemoteTarball https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding -407 verbose addRemoteTarball [ 'https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz', -407 verbose addRemoteTarball '09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c' ] -408 http fetch 200 https://registry.npmjs.org/mime/-/mime-1.6.0.tgz -409 info retry fetch attempt 1 at 13:48:57 -410 info attempt registry request try #1 at 13:48:57 -411 http fetch GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz -412 http 200 https://registry.npmjs.org/request -413 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -413 verbose headers 'content-type': 'application/json', -413 verbose headers 'transfer-encoding': 'chunked', -413 verbose headers connection: 'keep-alive', -413 verbose headers 'set-cookie': -413 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -413 verbose headers 'cf-ray': '59764fa1dc0ec272-FRA', -413 verbose headers age: '5668', -413 verbose headers 'cache-control': 'public, max-age=300', -413 verbose headers etag: 'W/"f6a50554348a0710692c70f1bd6574ab"', -413 verbose headers 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT', -413 verbose headers vary: 'accept-encoding, accept', -413 verbose headers 'cf-cache-status': 'HIT', -413 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -413 verbose headers server: 'cloudflare', -413 verbose headers 'content-encoding': 'gzip', -413 verbose headers 'cf-request-id': '02ddd0192b0000c27238899200000001' } -414 silly get cb [ 200, -414 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -414 silly get 'content-type': 'application/json', -414 silly get 'transfer-encoding': 'chunked', -414 silly get connection: 'keep-alive', -414 silly get 'set-cookie': -414 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -414 silly get 'cf-ray': '59764fa1dc0ec272-FRA', -414 silly get age: '5668', -414 silly get 'cache-control': 'public, max-age=300', -414 silly get etag: 'W/"f6a50554348a0710692c70f1bd6574ab"', -414 silly get 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT', -414 silly get vary: 'accept-encoding, accept', -414 silly get 'cf-cache-status': 'HIT', -414 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -414 silly get server: 'cloudflare', -414 silly get 'content-encoding': 'gzip', -414 silly get 'cf-request-id': '02ddd0192b0000c27238899200000001' } ] -415 verbose get saving request to /home/christine/.npm/registry.npmjs.org/request/.cache.json -416 silly resolveWithNewModule source-map@0.6.1 checking installable status -417 silly cache add args [ 'source-map@~0.6.0', null ] -418 verbose cache add spec source-map@~0.6.0 -419 silly cache add parsed spec Result { -419 silly cache add raw: 'source-map@~0.6.0', -419 silly cache add scope: null, -419 silly cache add name: 'source-map', -419 silly cache add rawSpec: '~0.6.0', -419 silly cache add spec: '>=0.6.0 <0.7.0', -419 silly cache add type: 'range' } -420 silly addNamed source-map@>=0.6.0 <0.7.0 -421 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for source-map -422 silly addNameRange { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: false } -423 silly mapToRegistry name source-map -424 silly mapToRegistry using default registry -425 silly mapToRegistry registry https://registry.npmjs.org/ -426 silly mapToRegistry uri https://registry.npmjs.org/source-map -427 verbose addNameRange registry:https://registry.npmjs.org/source-map not in flight; fetching -428 info retry fetch attempt 1 at 13:48:57 -429 info attempt registry request try #1 at 13:48:57 -430 http fetch GET https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz -431 silly fetchAndShaCheck shasum 32cd9e5c64553bd58d19a568af452acff04981b1 -432 http fetch 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz -433 http fetch 200 https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz -434 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding -435 verbose addTmpTarball already have metadata; skipping unpack for mime@1.6.0 -436 verbose get https://registry.npmjs.org/source-map not expired, no request -437 silly addNameRange number 2 { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: true } -438 silly addNameRange versions [ 'source-map', -438 silly addNameRange [ '0.0.0', -438 silly addNameRange '0.1.0', -438 silly addNameRange '0.1.1', -438 silly addNameRange '0.1.2', -438 silly addNameRange '0.1.3', -438 silly addNameRange '0.1.4', -438 silly addNameRange '0.1.5', -438 silly addNameRange '0.1.6', -438 silly addNameRange '0.1.7', -438 silly addNameRange '0.1.8', -438 silly addNameRange '0.1.9', -438 silly addNameRange '0.1.10', -438 silly addNameRange '0.1.11', -438 silly addNameRange '0.1.12', -438 silly addNameRange '0.1.13', -438 silly addNameRange '0.1.14', -438 silly addNameRange '0.1.15', -438 silly addNameRange '0.1.16', -438 silly addNameRange '0.1.17', -438 silly addNameRange '0.1.18', -438 silly addNameRange '0.1.19', -438 silly addNameRange '0.1.20', -438 silly addNameRange '0.1.21', -438 silly addNameRange '0.1.22', -438 silly addNameRange '0.1.23', -438 silly addNameRange '0.1.24', -438 silly addNameRange '0.1.25', -438 silly addNameRange '0.1.26', -438 silly addNameRange '0.1.27', -438 silly addNameRange '0.1.28', -438 silly addNameRange '0.1.29', -438 silly addNameRange '0.1.30', -438 silly addNameRange '0.1.31', -438 silly addNameRange '0.1.32', -438 silly addNameRange '0.1.33', -438 silly addNameRange '0.1.34', -438 silly addNameRange '0.1.35', -438 silly addNameRange '0.1.36', -438 silly addNameRange '0.1.37', -438 silly addNameRange '0.1.38', -438 silly addNameRange '0.1.39', -438 silly addNameRange '0.1.40', -438 silly addNameRange '0.1.41', -438 silly addNameRange '0.1.42', -438 silly addNameRange '0.1.43', -438 silly addNameRange '0.2.0', -438 silly addNameRange '0.3.0', -438 silly addNameRange '0.4.0', -438 silly addNameRange '0.4.1', -438 silly addNameRange '0.4.2', -438 silly addNameRange '0.4.3', -438 silly addNameRange '0.4.4', -438 silly addNameRange '0.5.0', -438 silly addNameRange '0.5.1', -438 silly addNameRange '0.5.2', -438 silly addNameRange '0.5.3', -438 silly addNameRange '0.5.4', -438 silly addNameRange '0.5.5', -438 silly addNameRange '0.5.6', -438 silly addNameRange '0.5.7', -438 silly addNameRange '0.6.0', -438 silly addNameRange '0.6.1', -438 silly addNameRange '0.7.0', -438 silly addNameRange '0.7.1', -438 silly addNameRange '0.7.2', -438 silly addNameRange '0.7.3', -438 silly addNameRange '0.8.0-beta.0' ] ] -439 silly addNamed source-map@0.6.1 -440 verbose addNamed "0.6.1" is a plain semver version for source-map -441 silly fetchAndShaCheck shasum 2256bde14d3632958c465ebc96dc467ca07a29fb -442 silly fetchAndShaCheck shasum c881e13cc7015894ed914862d276436fa9a47043 -443 silly resolveWithNewModule request@2.88.2 checking installable status -444 silly cache add args [ 'request@^2.83.0', null ] -445 verbose cache add spec request@^2.83.0 -446 silly cache add parsed spec Result { -446 silly cache add raw: 'request@^2.83.0', -446 silly cache add scope: null, -446 silly cache add name: 'request', -446 silly cache add rawSpec: '^2.83.0', -446 silly cache add spec: '>=2.83.0 <3.0.0', -446 silly cache add type: 'range' } -447 silly addNamed request@>=2.83.0 <3.0.0 -448 verbose addNamed ">=2.83.0 <3.0.0" is a valid semver range for request -449 silly addNameRange { name: 'request', range: '>=2.83.0 <3.0.0', hasData: false } -450 silly mapToRegistry name request -451 silly mapToRegistry using default registry -452 silly mapToRegistry registry https://registry.npmjs.org/ -453 silly mapToRegistry uri https://registry.npmjs.org/request -454 verbose addNameRange registry:https://registry.npmjs.org/request not in flight; fetching -455 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding -456 verbose addTmpTarball already have metadata; skipping unpack for graceful-fs@4.2.4 -457 http fetch 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz -458 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding -459 verbose addTmpTarball already have metadata; skipping unpack for tslib@1.13.0 -460 verbose get https://registry.npmjs.org/request not expired, no request -461 silly addNameRange number 2 { name: 'request', range: '>=2.83.0 <3.0.0', hasData: true } -462 silly addNameRange versions [ 'request', -462 silly addNameRange [ '0.10.0', -462 silly addNameRange '0.8.3', -462 silly addNameRange '0.9.0', -462 silly addNameRange '0.9.1', -462 silly addNameRange '0.9.5', -462 silly addNameRange '1.0.0', -462 silly addNameRange '1.1.0', -462 silly addNameRange '1.1.1', -462 silly addNameRange '1.2.0', -462 silly addNameRange '1.9.0', -462 silly addNameRange '1.9.1', -462 silly addNameRange '1.9.2', -462 silly addNameRange '1.9.3', -462 silly addNameRange '1.9.5', -462 silly addNameRange '1.9.7', -462 silly addNameRange '1.9.8', -462 silly addNameRange '1.9.9', -462 silly addNameRange '2.0.0', -462 silly addNameRange '2.0.1', -462 silly addNameRange '2.0.2', -462 silly addNameRange '2.0.3', -462 silly addNameRange '2.0.4', -462 silly addNameRange '2.0.5', -462 silly addNameRange '2.1.0', -462 silly addNameRange '2.1.1', -462 silly addNameRange '2.2.0', -462 silly addNameRange '2.2.5', -462 silly addNameRange '2.2.6', -462 silly addNameRange '2.2.9', -462 silly addNameRange '2.9.0', -462 silly addNameRange '2.9.1', -462 silly addNameRange '2.9.2', -462 silly addNameRange '2.9.3', -462 silly addNameRange '2.9.100', -462 silly addNameRange '2.9.150', -462 silly addNameRange '2.9.151', -462 silly addNameRange '2.9.152', -462 silly addNameRange '2.9.153', -462 silly addNameRange '2.9.200', -462 silly addNameRange '2.9.201', -462 silly addNameRange '2.9.202', -462 silly addNameRange '2.9.203', -462 silly addNameRange '2.10.0', -462 silly addNameRange '2.11.0', -462 silly addNameRange '2.11.1', -462 silly addNameRange '2.11.2', -462 silly addNameRange '2.11.3', -462 silly addNameRange '2.11.4', -462 silly addNameRange '2.12.0', -462 silly addNameRange '2.14.0', -462 silly addNameRange '2.16.0', -462 silly addNameRange '2.16.2', -462 silly addNameRange '2.16.4', -462 silly addNameRange '2.16.6', -462 silly addNameRange '2.18.0', -462 silly addNameRange '2.19.0', -462 silly addNameRange '2.20.0', -462 silly addNameRange '2.21.0', -462 silly addNameRange '2.22.0', -462 silly addNameRange '2.23.0', -462 silly addNameRange '2.24.0', -462 silly addNameRange '2.25.0', -462 silly addNameRange '2.26.0', -462 silly addNameRange '2.27.0', -462 silly addNameRange '2.28.0', -462 silly addNameRange '2.29.0', -462 silly addNameRange '2.30.0', -462 silly addNameRange '2.31.0', -462 silly addNameRange '2.32.0', -462 silly addNameRange '2.33.0', -462 silly addNameRange '2.34.0', -462 silly addNameRange '2.35.0', -462 silly addNameRange '2.36.0', -462 silly addNameRange '2.37.0', -462 silly addNameRange '2.38.0', -462 silly addNameRange '2.39.0', -462 silly addNameRange '2.40.0', -462 silly addNameRange '2.41.0', -462 silly addNameRange '2.42.0', -462 silly addNameRange '2.43.0', -462 silly addNameRange '2.44.0', -462 silly addNameRange '2.45.0', -462 silly addNameRange '2.46.0', -462 silly addNameRange '2.47.0', -462 silly addNameRange '2.48.0', -462 silly addNameRange '2.49.0', -462 silly addNameRange '2.50.0', -462 silly addNameRange '2.51.0', -462 silly addNameRange '2.52.0', -462 silly addNameRange '2.53.0', -462 silly addNameRange '2.54.0', -462 silly addNameRange '2.55.0', -462 silly addNameRange '2.56.0', -462 silly addNameRange '2.57.0', -462 silly addNameRange '2.58.0', -462 silly addNameRange '2.59.0', -462 silly addNameRange '2.60.0', -462 silly addNameRange '2.61.0', -462 silly addNameRange '2.62.0', -462 silly addNameRange '2.63.0', -462 silly addNameRange ... 26 more items ] ] -463 silly addNamed request@2.88.2 -464 verbose addNamed "2.88.2" is a plain semver version for request -465 warn deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 -466 silly fetchAndShaCheck shasum d91cefd62d1436ca0f41620e251288d420099def -467 silly cache afterAdd source-map@0.6.1 -468 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json not in flight; writing -469 silly mapToRegistry name request -470 silly mapToRegistry using default registry -471 silly mapToRegistry registry https://registry.npmjs.org/ -472 silly mapToRegistry uri https://registry.npmjs.org/request -473 verbose addRemoteTarball https://registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding -474 verbose addRemoteTarball [ 'https://registry.npmjs.org/request/-/request-2.88.2.tgz', -474 verbose addRemoteTarball 'd73c918731cb5a87da047e207234146f664d12b3' ] -475 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding -476 verbose addTmpTarball already have metadata; skipping unpack for mkdirp@0.5.5 -477 info retry fetch attempt 1 at 13:48:57 -478 info attempt registry request try #1 at 13:48:57 -479 http fetch GET https://registry.npmjs.org/request/-/request-2.88.2.tgz -480 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json written -481 silly cache afterAdd graceful-fs@4.2.4 -482 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json not in flight; writing -483 silly cache afterAdd tslib@1.13.0 -484 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json not in flight; writing -485 silly cache afterAdd mime@1.6.0 -486 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json not in flight; writing -487 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json written -488 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json written -489 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json written -490 silly cache afterAdd mkdirp@0.5.5 -491 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json not in flight; writing -492 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json written -493 http fetch 200 https://registry.npmjs.org/promise/-/promise-7.3.1.tgz -494 silly fetchAndShaCheck shasum 064b72602b18f90f29192b8b1bc418ffd1ebd3bf -495 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding -496 verbose addTmpTarball already have metadata; skipping unpack for promise@7.3.1 -497 silly cache afterAdd promise@7.3.1 -498 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json not in flight; writing -499 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json written -500 http fetch 200 https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz -501 silly fetchAndShaCheck shasum 09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c -502 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding -503 verbose addTmpTarball already have metadata; skipping unpack for image-size@0.5.5 -504 http fetch 200 https://registry.npmjs.org/request/-/request-2.88.2.tgz -505 silly cache afterAdd image-size@0.5.5 -506 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json not in flight; writing -507 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json written -508 silly fetchAndShaCheck shasum d73c918731cb5a87da047e207234146f664d12b3 -509 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding -510 verbose addTmpTarball already have metadata; skipping unpack for request@2.88.2 -511 silly cache afterAdd request@2.88.2 -512 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json not in flight; writing -513 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json written -514 silly fetchNamedPackageData prr -515 silly mapToRegistry name prr -516 silly mapToRegistry using default registry -517 silly mapToRegistry registry https://registry.npmjs.org/ -518 silly mapToRegistry uri https://registry.npmjs.org/prr -519 verbose request uri https://registry.npmjs.org/prr -520 verbose request no auth needed -521 info attempt registry request try #1 at 13:48:57 -522 verbose etag W/"07ebb6c11e7a8b0a67aabb93f8b3aa09" -523 verbose lastModified Sun, 27 May 2018 13:04:47 GMT -524 http request GET https://registry.npmjs.org/prr -525 http 304 https://registry.npmjs.org/prr -526 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -526 verbose headers connection: 'keep-alive', -526 verbose headers 'set-cookie': -526 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -526 verbose headers 'cf-ray': '59764fa31fae648b-FRA', -526 verbose headers age: '5629', -526 verbose headers 'cache-control': 'public, max-age=300', -526 verbose headers etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"', -526 verbose headers 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT', -526 verbose headers vary: 'Accept-Encoding', -526 verbose headers 'cf-cache-status': 'HIT', -526 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -526 verbose headers server: 'cloudflare', -526 verbose headers 'cf-request-id': '02ddd019ef0000648bda3f9200000001' } -527 silly get cb [ 304, -527 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -527 silly get connection: 'keep-alive', -527 silly get 'set-cookie': -527 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -527 silly get 'cf-ray': '59764fa31fae648b-FRA', -527 silly get age: '5629', -527 silly get 'cache-control': 'public, max-age=300', -527 silly get etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"', -527 silly get 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT', -527 silly get vary: 'Accept-Encoding', -527 silly get 'cf-cache-status': 'HIT', -527 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -527 silly get server: 'cloudflare', -527 silly get 'cf-request-id': '02ddd019ef0000648bda3f9200000001' } ] -528 verbose etag https://registry.npmjs.org/prr from cache -529 verbose get saving prr to /home/christine/.npm/registry.npmjs.org/prr/.cache.json -530 silly resolveWithNewModule prr@1.0.1 checking installable status -531 silly cache add args [ 'prr@~1.0.1', null ] -532 verbose cache add spec prr@~1.0.1 -533 silly cache add parsed spec Result { -533 silly cache add raw: 'prr@~1.0.1', -533 silly cache add scope: null, -533 silly cache add name: 'prr', -533 silly cache add rawSpec: '~1.0.1', -533 silly cache add spec: '>=1.0.1 <1.1.0', -533 silly cache add type: 'range' } -534 silly addNamed prr@>=1.0.1 <1.1.0 -535 verbose addNamed ">=1.0.1 <1.1.0" is a valid semver range for prr -536 silly addNameRange { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: false } -537 silly mapToRegistry name prr -538 silly mapToRegistry using default registry -539 silly mapToRegistry registry https://registry.npmjs.org/ -540 silly mapToRegistry uri https://registry.npmjs.org/prr -541 verbose addNameRange registry:https://registry.npmjs.org/prr not in flight; fetching -542 verbose get https://registry.npmjs.org/prr not expired, no request -543 silly addNameRange number 2 { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: true } -544 silly addNameRange versions [ 'prr', [ '0.0.0', '1.0.0', '1.0.1' ] ] -545 silly addNamed prr@1.0.1 -546 verbose addNamed "1.0.1" is a plain semver version for prr -547 silly cache afterAdd prr@1.0.1 -548 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json not in flight; writing -549 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json written -550 silly fetchNamedPackageData minimist -551 silly mapToRegistry name minimist -552 silly mapToRegistry using default registry -553 silly mapToRegistry registry https://registry.npmjs.org/ -554 silly mapToRegistry uri https://registry.npmjs.org/minimist -555 verbose request uri https://registry.npmjs.org/minimist -556 verbose request no auth needed -557 info attempt registry request try #1 at 13:48:57 -558 verbose etag W/"81c2eaf8bba19c1bd6131ba9e932902f" -559 verbose lastModified Sun, 11 Aug 2019 09:03:19 GMT -560 http request GET https://registry.npmjs.org/minimist -561 http 200 https://registry.npmjs.org/minimist -562 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -562 verbose headers 'content-type': 'application/json', -562 verbose headers 'transfer-encoding': 'chunked', -562 verbose headers connection: 'keep-alive', -562 verbose headers 'set-cookie': -562 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -562 verbose headers 'cf-ray': '59764fa35d5205fd-FRA', -562 verbose headers age: '5653', -562 verbose headers 'cache-control': 'public, max-age=300', -562 verbose headers etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"', -562 verbose headers 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT', -562 verbose headers vary: 'accept-encoding, accept', -562 verbose headers 'cf-cache-status': 'HIT', -562 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -562 verbose headers server: 'cloudflare', -562 verbose headers 'content-encoding': 'gzip', -562 verbose headers 'cf-request-id': '02ddd01a16000005fd8da2d200000001' } -563 silly get cb [ 200, -563 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -563 silly get 'content-type': 'application/json', -563 silly get 'transfer-encoding': 'chunked', -563 silly get connection: 'keep-alive', -563 silly get 'set-cookie': -563 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -563 silly get 'cf-ray': '59764fa35d5205fd-FRA', -563 silly get age: '5653', -563 silly get 'cache-control': 'public, max-age=300', -563 silly get etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"', -563 silly get 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT', -563 silly get vary: 'accept-encoding, accept', -563 silly get 'cf-cache-status': 'HIT', -563 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -563 silly get server: 'cloudflare', -563 silly get 'content-encoding': 'gzip', -563 silly get 'cf-request-id': '02ddd01a16000005fd8da2d200000001' } ] -564 verbose get saving minimist to /home/christine/.npm/registry.npmjs.org/minimist/.cache.json -565 silly resolveWithNewModule minimist@1.2.5 checking installable status -566 silly cache add args [ 'minimist@^1.2.5', null ] -567 verbose cache add spec minimist@^1.2.5 -568 silly cache add parsed spec Result { -568 silly cache add raw: 'minimist@^1.2.5', -568 silly cache add scope: null, -568 silly cache add name: 'minimist', -568 silly cache add rawSpec: '^1.2.5', -568 silly cache add spec: '>=1.2.5 <2.0.0', -568 silly cache add type: 'range' } -569 silly addNamed minimist@>=1.2.5 <2.0.0 -570 verbose addNamed ">=1.2.5 <2.0.0" is a valid semver range for minimist -571 silly addNameRange { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: false } -572 silly mapToRegistry name minimist -573 silly mapToRegistry using default registry -574 silly mapToRegistry registry https://registry.npmjs.org/ -575 silly mapToRegistry uri https://registry.npmjs.org/minimist -576 verbose addNameRange registry:https://registry.npmjs.org/minimist not in flight; fetching -577 verbose get https://registry.npmjs.org/minimist not expired, no request -578 silly addNameRange number 2 { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: true } -579 silly addNameRange versions [ 'minimist', -579 silly addNameRange [ '0.0.0', -579 silly addNameRange '0.0.1', -579 silly addNameRange '0.0.2', -579 silly addNameRange '0.0.3', -579 silly addNameRange '0.0.4', -579 silly addNameRange '0.0.5', -579 silly addNameRange '0.0.6', -579 silly addNameRange '0.0.7', -579 silly addNameRange '0.0.8', -579 silly addNameRange '0.0.9', -579 silly addNameRange '0.0.10', -579 silly addNameRange '0.1.0', -579 silly addNameRange '0.2.0', -579 silly addNameRange '1.0.0', -579 silly addNameRange '1.1.0', -579 silly addNameRange '1.1.1', -579 silly addNameRange '1.1.2', -579 silly addNameRange '1.1.3', -579 silly addNameRange '1.2.0', -579 silly addNameRange '1.2.1', -579 silly addNameRange '1.2.2', -579 silly addNameRange '1.2.3', -579 silly addNameRange '1.2.4', -579 silly addNameRange '0.2.1', -579 silly addNameRange '1.2.5' ] ] -580 silly addNamed minimist@1.2.5 -581 verbose addNamed "1.2.5" is a plain semver version for minimist -582 silly mapToRegistry name minimist -583 silly mapToRegistry using default registry -584 silly mapToRegistry registry https://registry.npmjs.org/ -585 silly mapToRegistry uri https://registry.npmjs.org/minimist -586 verbose addRemoteTarball https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding -587 verbose addRemoteTarball [ 'https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz', -587 verbose addRemoteTarball '67d66014b66a6a8aaa0c083c5fd58df4e4e97602' ] -588 info retry fetch attempt 1 at 13:48:57 -589 info attempt registry request try #1 at 13:48:57 -590 http fetch GET https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz -591 http fetch 200 https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz -592 silly fetchAndShaCheck shasum 67d66014b66a6a8aaa0c083c5fd58df4e4e97602 -593 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding -594 verbose addTmpTarball already have metadata; skipping unpack for minimist@1.2.5 -595 silly cache afterAdd minimist@1.2.5 -596 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json not in flight; writing -597 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json written -598 silly fetchNamedPackageData asap -599 silly mapToRegistry name asap -600 silly mapToRegistry using default registry -601 silly mapToRegistry registry https://registry.npmjs.org/ -602 silly mapToRegistry uri https://registry.npmjs.org/asap -603 verbose request uri https://registry.npmjs.org/asap -604 verbose request no auth needed -605 info attempt registry request try #1 at 13:48:57 -606 http request GET https://registry.npmjs.org/asap -607 http 200 https://registry.npmjs.org/asap -608 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -608 verbose headers 'content-type': 'application/json; charset=UTF-8', -608 verbose headers 'transfer-encoding': 'chunked', -608 verbose headers connection: 'keep-alive', -608 verbose headers 'set-cookie': -608 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -608 verbose headers 'cf-ray': '59764fa3da5bdfc7-FRA', -608 verbose headers age: '5027', -608 verbose headers 'cache-control': 'public, max-age=300', -608 verbose headers etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"', -608 verbose headers 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT', -608 verbose headers vary: 'accept-encoding, accept', -608 verbose headers 'cf-cache-status': 'HIT', -608 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -608 verbose headers server: 'cloudflare', -608 verbose headers 'content-encoding': 'gzip', -608 verbose headers 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' } -609 silly get cb [ 200, -609 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -609 silly get 'content-type': 'application/json; charset=UTF-8', -609 silly get 'transfer-encoding': 'chunked', -609 silly get connection: 'keep-alive', -609 silly get 'set-cookie': -609 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -609 silly get 'cf-ray': '59764fa3da5bdfc7-FRA', -609 silly get age: '5027', -609 silly get 'cache-control': 'public, max-age=300', -609 silly get etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"', -609 silly get 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT', -609 silly get vary: 'accept-encoding, accept', -609 silly get 'cf-cache-status': 'HIT', -609 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -609 silly get server: 'cloudflare', -609 silly get 'content-encoding': 'gzip', -609 silly get 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' } ] -610 verbose get saving asap to /home/christine/.npm/registry.npmjs.org/asap/.cache.json -611 silly resolveWithNewModule asap@2.0.6 checking installable status -612 silly cache add args [ 'asap@~2.0.3', null ] -613 verbose cache add spec asap@~2.0.3 -614 silly cache add parsed spec Result { -614 silly cache add raw: 'asap@~2.0.3', -614 silly cache add scope: null, -614 silly cache add name: 'asap', -614 silly cache add rawSpec: '~2.0.3', -614 silly cache add spec: '>=2.0.3 <2.1.0', -614 silly cache add type: 'range' } -615 silly addNamed asap@>=2.0.3 <2.1.0 -616 verbose addNamed ">=2.0.3 <2.1.0" is a valid semver range for asap -617 silly addNameRange { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: false } -618 silly mapToRegistry name asap -619 silly mapToRegistry using default registry -620 silly mapToRegistry registry https://registry.npmjs.org/ -621 silly mapToRegistry uri https://registry.npmjs.org/asap -622 verbose addNameRange registry:https://registry.npmjs.org/asap not in flight; fetching -623 verbose get https://registry.npmjs.org/asap not expired, no request -624 silly addNameRange number 2 { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: true } -625 silly addNameRange versions [ 'asap', -625 silly addNameRange [ '0.0.0', -625 silly addNameRange '1.0.0', -625 silly addNameRange '2.0.0', -625 silly addNameRange '2.0.1', -625 silly addNameRange '2.0.2', -625 silly addNameRange '2.0.3', -625 silly addNameRange '2.0.4', -625 silly addNameRange '2.0.5', -625 silly addNameRange '2.0.6' ] ] -626 silly addNamed asap@2.0.6 -627 verbose addNamed "2.0.6" is a plain semver version for asap -628 silly mapToRegistry name asap -629 silly mapToRegistry using default registry -630 silly mapToRegistry registry https://registry.npmjs.org/ -631 silly mapToRegistry uri https://registry.npmjs.org/asap -632 verbose addRemoteTarball https://registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding -633 verbose addRemoteTarball [ 'https://registry.npmjs.org/asap/-/asap-2.0.6.tgz', -633 verbose addRemoteTarball 'e50347611d7e690943208bbdafebcbc2fb866d46' ] -634 info retry fetch attempt 1 at 13:48:57 -635 info attempt registry request try #1 at 13:48:57 -636 http fetch GET https://registry.npmjs.org/asap/-/asap-2.0.6.tgz -637 http fetch 200 https://registry.npmjs.org/asap/-/asap-2.0.6.tgz -638 silly fetchAndShaCheck shasum e50347611d7e690943208bbdafebcbc2fb866d46 -639 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding -640 verbose addTmpTarball already have metadata; skipping unpack for asap@2.0.6 -641 silly cache afterAdd asap@2.0.6 -642 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json not in flight; writing -643 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json written -644 silly fetchNamedPackageData aws-sign2 -645 silly mapToRegistry name aws-sign2 -646 silly mapToRegistry using default registry -647 silly mapToRegistry registry https://registry.npmjs.org/ -648 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2 -649 silly fetchNamedPackageData aws4 -650 silly mapToRegistry name aws4 -651 silly mapToRegistry using default registry -652 silly mapToRegistry registry https://registry.npmjs.org/ -653 silly mapToRegistry uri https://registry.npmjs.org/aws4 -654 silly fetchNamedPackageData caseless -655 silly mapToRegistry name caseless -656 silly mapToRegistry using default registry -657 silly mapToRegistry registry https://registry.npmjs.org/ -658 silly mapToRegistry uri https://registry.npmjs.org/caseless -659 silly fetchNamedPackageData combined-stream -660 silly mapToRegistry name combined-stream -661 silly mapToRegistry using default registry -662 silly mapToRegistry registry https://registry.npmjs.org/ -663 silly mapToRegistry uri https://registry.npmjs.org/combined-stream -664 silly fetchNamedPackageData extend -665 silly mapToRegistry name extend -666 silly mapToRegistry using default registry -667 silly mapToRegistry registry https://registry.npmjs.org/ -668 silly mapToRegistry uri https://registry.npmjs.org/extend -669 silly fetchNamedPackageData forever-agent -670 silly mapToRegistry name forever-agent -671 silly mapToRegistry using default registry -672 silly mapToRegistry registry https://registry.npmjs.org/ -673 silly mapToRegistry uri https://registry.npmjs.org/forever-agent -674 silly fetchNamedPackageData form-data -675 silly mapToRegistry name form-data -676 silly mapToRegistry using default registry -677 silly mapToRegistry registry https://registry.npmjs.org/ -678 silly mapToRegistry uri https://registry.npmjs.org/form-data -679 silly fetchNamedPackageData har-validator -680 silly mapToRegistry name har-validator -681 silly mapToRegistry using default registry -682 silly mapToRegistry registry https://registry.npmjs.org/ -683 silly mapToRegistry uri https://registry.npmjs.org/har-validator -684 silly fetchNamedPackageData http-signature -685 silly mapToRegistry name http-signature -686 silly mapToRegistry using default registry -687 silly mapToRegistry registry https://registry.npmjs.org/ -688 silly mapToRegistry uri https://registry.npmjs.org/http-signature -689 silly fetchNamedPackageData is-typedarray -690 silly mapToRegistry name is-typedarray -691 silly mapToRegistry using default registry -692 silly mapToRegistry registry https://registry.npmjs.org/ -693 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray -694 silly fetchNamedPackageData isstream -695 silly mapToRegistry name isstream -696 silly mapToRegistry using default registry -697 silly mapToRegistry registry https://registry.npmjs.org/ -698 silly mapToRegistry uri https://registry.npmjs.org/isstream -699 silly fetchNamedPackageData json-stringify-safe -700 silly mapToRegistry name json-stringify-safe -701 silly mapToRegistry using default registry -702 silly mapToRegistry registry https://registry.npmjs.org/ -703 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe -704 silly fetchNamedPackageData mime-types -705 silly mapToRegistry name mime-types -706 silly mapToRegistry using default registry -707 silly mapToRegistry registry https://registry.npmjs.org/ -708 silly mapToRegistry uri https://registry.npmjs.org/mime-types -709 silly fetchNamedPackageData oauth-sign -710 silly mapToRegistry name oauth-sign -711 silly mapToRegistry using default registry -712 silly mapToRegistry registry https://registry.npmjs.org/ -713 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign -714 silly fetchNamedPackageData performance-now -715 silly mapToRegistry name performance-now -716 silly mapToRegistry using default registry -717 silly mapToRegistry registry https://registry.npmjs.org/ -718 silly mapToRegistry uri https://registry.npmjs.org/performance-now -719 silly fetchNamedPackageData qs -720 silly mapToRegistry name qs -721 silly mapToRegistry using default registry -722 silly mapToRegistry registry https://registry.npmjs.org/ -723 silly mapToRegistry uri https://registry.npmjs.org/qs -724 silly fetchNamedPackageData safe-buffer -725 silly mapToRegistry name safe-buffer -726 silly mapToRegistry using default registry -727 silly mapToRegistry registry https://registry.npmjs.org/ -728 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -729 silly fetchNamedPackageData tough-cookie -730 silly mapToRegistry name tough-cookie -731 silly mapToRegistry using default registry -732 silly mapToRegistry registry https://registry.npmjs.org/ -733 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -734 silly fetchNamedPackageData tunnel-agent -735 silly mapToRegistry name tunnel-agent -736 silly mapToRegistry using default registry -737 silly mapToRegistry registry https://registry.npmjs.org/ -738 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent -739 silly fetchNamedPackageData uuid -740 silly mapToRegistry name uuid -741 silly mapToRegistry using default registry -742 silly mapToRegistry registry https://registry.npmjs.org/ -743 silly mapToRegistry uri https://registry.npmjs.org/uuid -744 verbose request uri https://registry.npmjs.org/aws-sign2 -745 verbose request no auth needed -746 info attempt registry request try #1 at 13:48:57 -747 verbose etag W/"7bf763d2cccd0806178c5c3e43895950" -748 verbose lastModified Sat, 26 May 2018 17:48:52 GMT -749 http request GET https://registry.npmjs.org/aws-sign2 -750 verbose request uri https://registry.npmjs.org/aws4 -751 verbose request no auth needed -752 info attempt registry request try #1 at 13:48:57 -753 verbose etag W/"95c9834de9b7164b9a063970ba631035" -754 verbose lastModified Mon, 13 Jan 2020 23:25:51 GMT -755 http request GET https://registry.npmjs.org/aws4 -756 verbose request uri https://registry.npmjs.org/caseless -757 verbose request no auth needed -758 info attempt registry request try #1 at 13:48:57 -759 verbose etag W/"37dc2c2e48fd048da76bb52a97386418" -760 verbose lastModified Sat, 26 May 2018 19:27:25 GMT -761 http request GET https://registry.npmjs.org/caseless -762 verbose request uri https://registry.npmjs.org/combined-stream -763 verbose request no auth needed -764 info attempt registry request try #1 at 13:48:57 -765 verbose etag W/"01d038e7b9fcfd5e5654a7d7003bfe74" -766 verbose lastModified Sun, 12 May 2019 17:49:50 GMT -767 http request GET https://registry.npmjs.org/combined-stream -768 verbose request uri https://registry.npmjs.org/extend -769 verbose request no auth needed -770 info attempt registry request try #1 at 13:48:57 -771 verbose etag W/"924fa39abddd399eb964b1aa611da651" -772 verbose lastModified Thu, 19 Jul 2018 22:12:47 GMT -773 http request GET https://registry.npmjs.org/extend -774 verbose request uri https://registry.npmjs.org/forever-agent -775 verbose request no auth needed -776 info attempt registry request try #1 at 13:48:57 -777 verbose etag W/"9e6ef96089dd23304c2ea7d2fb731c9c" -778 verbose lastModified Sun, 27 May 2018 01:06:13 GMT -779 http request GET https://registry.npmjs.org/forever-agent -780 verbose request uri https://registry.npmjs.org/form-data -781 verbose request no auth needed -782 info attempt registry request try #1 at 13:48:57 -783 verbose etag W/"5e211bf0fabf58f7b2a855c8b4ce28a4" -784 verbose lastModified Wed, 06 Nov 2019 07:57:03 GMT -785 http request GET https://registry.npmjs.org/form-data -786 verbose request uri https://registry.npmjs.org/har-validator -787 verbose request no auth needed -788 info attempt registry request try #1 at 13:48:57 -789 verbose etag W/"a261ac4614f4e022065b83613ee209ab" -790 verbose lastModified Fri, 04 Jan 2019 02:36:17 GMT -791 http request GET https://registry.npmjs.org/har-validator -792 verbose request uri https://registry.npmjs.org/http-signature -793 verbose request no auth needed -794 info attempt registry request try #1 at 13:48:57 -795 verbose etag W/"a22cccd7d585d00e5e26fe5111bee01d" -796 verbose lastModified Fri, 13 Dec 2019 16:32:29 GMT -797 http request GET https://registry.npmjs.org/http-signature -798 verbose request uri https://registry.npmjs.org/is-typedarray -799 verbose request no auth needed -800 info attempt registry request try #1 at 13:48:57 -801 verbose etag W/"e7b88219ebe721b877b678c51795c9c5" -802 verbose lastModified Sun, 27 May 2018 04:59:55 GMT -803 http request GET https://registry.npmjs.org/is-typedarray -804 verbose request uri https://registry.npmjs.org/isstream -805 verbose request no auth needed -806 info attempt registry request try #1 at 13:48:57 -807 verbose etag W/"9dc7f37e087df077683bf238c847ad45" -808 verbose lastModified Sun, 27 May 2018 05:02:31 GMT -809 http request GET https://registry.npmjs.org/isstream -810 verbose request uri https://registry.npmjs.org/json-stringify-safe -811 verbose request no auth needed -812 info attempt registry request try #1 at 13:48:57 -813 verbose etag W/"7f39a9aafcaefe8efbf43a9f2e56c4eb" -814 verbose lastModified Sun, 27 May 2018 05:41:03 GMT -815 http request GET https://registry.npmjs.org/json-stringify-safe -816 verbose request uri https://registry.npmjs.org/oauth-sign -817 verbose request no auth needed -818 info attempt registry request try #1 at 13:48:57 -819 verbose etag W/"3032c1efe9ec61d748d027a1da2bab61" -820 verbose lastModified Thu, 02 Aug 2018 18:04:02 GMT -821 http request GET https://registry.npmjs.org/oauth-sign -822 verbose request uri https://registry.npmjs.org/mime-types -823 verbose request no auth needed -824 info attempt registry request try #1 at 13:48:57 -825 verbose etag W/"ace0d1d2bbdfabcc2f0fdf5db2297cb9" -826 verbose lastModified Mon, 06 Jan 2020 03:47:58 GMT -827 http request GET https://registry.npmjs.org/mime-types -828 verbose request uri https://registry.npmjs.org/performance-now -829 verbose request no auth needed -830 info attempt registry request try #1 at 13:48:57 -831 verbose etag W/"5f12ad497b3e39323dcdde75c34f5767" -832 verbose lastModified Sun, 27 May 2018 12:05:53 GMT -833 http request GET https://registry.npmjs.org/performance-now -834 verbose request uri https://registry.npmjs.org/qs -835 verbose request no auth needed -836 info attempt registry request try #1 at 13:48:57 -837 verbose etag W/"ccaef4541845c31c4cc05bcf8dd00ce6" -838 verbose lastModified Fri, 08 Nov 2019 06:46:39 GMT -839 http request GET https://registry.npmjs.org/qs -840 verbose request uri https://registry.npmjs.org/tough-cookie -841 verbose request no auth needed -842 info attempt registry request try #1 at 13:48:57 -843 verbose etag W/"f1d93d88b646bb4c354f8c481852a1b7" -844 verbose lastModified Tue, 05 Feb 2019 03:09:49 GMT -845 http request GET https://registry.npmjs.org/tough-cookie -846 verbose request uri https://registry.npmjs.org/tunnel-agent -847 verbose request no auth needed -848 info attempt registry request try #1 at 13:48:57 -849 verbose etag W/"03911fc1f433b33bccf8a4a2a5de2375" -850 verbose lastModified Sun, 27 May 2018 20:02:57 GMT -851 http request GET https://registry.npmjs.org/tunnel-agent -852 verbose request uri https://registry.npmjs.org/safe-buffer -853 verbose request no auth needed -854 info attempt registry request try #1 at 13:48:57 -855 verbose etag W/"00b820fed08175238fc3473b2b3e0278" -856 verbose lastModified Fri, 05 Jul 2019 18:04:37 GMT -857 http request GET https://registry.npmjs.org/safe-buffer -858 verbose request uri https://registry.npmjs.org/uuid -859 verbose request no auth needed -860 info attempt registry request try #1 at 13:48:57 -861 verbose etag W/"e1230e67a078f82b785335adbba5abd3" -862 verbose lastModified Thu, 16 Jan 2020 21:05:42 GMT -863 http request GET https://registry.npmjs.org/uuid -864 http 304 https://registry.npmjs.org/aws-sign2 -865 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -865 verbose headers connection: 'keep-alive', -865 verbose headers 'set-cookie': -865 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -865 verbose headers 'cf-ray': '59764fa49cf4d6e9-FRA', -865 verbose headers age: '5657', -865 verbose headers 'cache-control': 'public, max-age=300', -865 verbose headers etag: '"7bf763d2cccd0806178c5c3e43895950"', -865 verbose headers 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT', -865 verbose headers vary: 'Accept-Encoding', -865 verbose headers 'cf-cache-status': 'HIT', -865 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -865 verbose headers server: 'cloudflare', -865 verbose headers 'cf-request-id': '02ddd01ae00000d6e975b28200000001' } -866 silly get cb [ 304, -866 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -866 silly get connection: 'keep-alive', -866 silly get 'set-cookie': -866 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -866 silly get 'cf-ray': '59764fa49cf4d6e9-FRA', -866 silly get age: '5657', -866 silly get 'cache-control': 'public, max-age=300', -866 silly get etag: '"7bf763d2cccd0806178c5c3e43895950"', -866 silly get 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT', -866 silly get vary: 'Accept-Encoding', -866 silly get 'cf-cache-status': 'HIT', -866 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -866 silly get server: 'cloudflare', -866 silly get 'cf-request-id': '02ddd01ae00000d6e975b28200000001' } ] -867 verbose etag https://registry.npmjs.org/aws-sign2 from cache -868 verbose get saving aws-sign2 to /home/christine/.npm/registry.npmjs.org/aws-sign2/.cache.json -869 silly resolveWithNewModule aws-sign2@0.7.0 checking installable status -870 silly cache add args [ 'aws-sign2@~0.7.0', null ] -871 verbose cache add spec aws-sign2@~0.7.0 -872 silly cache add parsed spec Result { -872 silly cache add raw: 'aws-sign2@~0.7.0', -872 silly cache add scope: null, -872 silly cache add name: 'aws-sign2', -872 silly cache add rawSpec: '~0.7.0', -872 silly cache add spec: '>=0.7.0 <0.8.0', -872 silly cache add type: 'range' } -873 silly addNamed aws-sign2@>=0.7.0 <0.8.0 -874 verbose addNamed ">=0.7.0 <0.8.0" is a valid semver range for aws-sign2 -875 silly addNameRange { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: false } -876 silly mapToRegistry name aws-sign2 -877 silly mapToRegistry using default registry -878 silly mapToRegistry registry https://registry.npmjs.org/ -879 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2 -880 verbose addNameRange registry:https://registry.npmjs.org/aws-sign2 not in flight; fetching -881 verbose get https://registry.npmjs.org/aws-sign2 not expired, no request -882 silly addNameRange number 2 { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: true } -883 silly addNameRange versions [ 'aws-sign2', [ '0.4.0', '0.5.0', '0.6.0', '0.7.0' ] ] -884 silly addNamed aws-sign2@0.7.0 -885 verbose addNamed "0.7.0" is a plain semver version for aws-sign2 -886 silly cache afterAdd aws-sign2@0.7.0 -887 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json not in flight; writing -888 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json written -889 http 304 https://registry.npmjs.org/form-data -890 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -890 verbose headers connection: 'keep-alive', -890 verbose headers 'set-cookie': -890 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -890 verbose headers 'cf-ray': '59764fa4ba1305fd-FRA', -890 verbose headers age: '5355', -890 verbose headers 'cache-control': 'public, max-age=300', -890 verbose headers etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"', -890 verbose headers 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT', -890 verbose headers vary: 'Accept-Encoding', -890 verbose headers 'cf-cache-status': 'HIT', -890 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -890 verbose headers server: 'cloudflare', -890 verbose headers 'cf-request-id': '02ddd01af4000005fd8da55200000001' } -891 silly get cb [ 304, -891 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -891 silly get connection: 'keep-alive', -891 silly get 'set-cookie': -891 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -891 silly get 'cf-ray': '59764fa4ba1305fd-FRA', -891 silly get age: '5355', -891 silly get 'cache-control': 'public, max-age=300', -891 silly get etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"', -891 silly get 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT', -891 silly get vary: 'Accept-Encoding', -891 silly get 'cf-cache-status': 'HIT', -891 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -891 silly get server: 'cloudflare', -891 silly get 'cf-request-id': '02ddd01af4000005fd8da55200000001' } ] -892 verbose etag https://registry.npmjs.org/form-data from cache -893 verbose get saving form-data to /home/christine/.npm/registry.npmjs.org/form-data/.cache.json -894 http 304 https://registry.npmjs.org/har-validator -895 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -895 verbose headers connection: 'keep-alive', -895 verbose headers 'set-cookie': -895 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -895 verbose headers 'cf-ray': '59764fa4b9a6c272-FRA', -895 verbose headers age: '5655', -895 verbose headers 'cache-control': 'public, max-age=300', -895 verbose headers etag: '"a261ac4614f4e022065b83613ee209ab"', -895 verbose headers 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT', -895 verbose headers vary: 'Accept-Encoding', -895 verbose headers 'cf-cache-status': 'HIT', -895 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -895 verbose headers server: 'cloudflare', -895 verbose headers 'cf-request-id': '02ddd01af40000c272388b2200000001' } -896 silly get cb [ 304, -896 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -896 silly get connection: 'keep-alive', -896 silly get 'set-cookie': -896 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -896 silly get 'cf-ray': '59764fa4b9a6c272-FRA', -896 silly get age: '5655', -896 silly get 'cache-control': 'public, max-age=300', -896 silly get etag: '"a261ac4614f4e022065b83613ee209ab"', -896 silly get 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT', -896 silly get vary: 'Accept-Encoding', -896 silly get 'cf-cache-status': 'HIT', -896 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -896 silly get server: 'cloudflare', -896 silly get 'cf-request-id': '02ddd01af40000c272388b2200000001' } ] -897 verbose etag https://registry.npmjs.org/har-validator from cache -898 verbose get saving har-validator to /home/christine/.npm/registry.npmjs.org/har-validator/.cache.json -899 http 304 https://registry.npmjs.org/caseless -900 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -900 verbose headers connection: 'keep-alive', -900 verbose headers 'set-cookie': -900 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -900 verbose headers 'cf-ray': '59764fa4b9de325c-FRA', -900 verbose headers age: '5655', -900 verbose headers 'cache-control': 'public, max-age=300', -900 verbose headers etag: '"37dc2c2e48fd048da76bb52a97386418"', -900 verbose headers 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT', -900 verbose headers vary: 'Accept-Encoding', -900 verbose headers 'cf-cache-status': 'HIT', -900 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -900 verbose headers server: 'cloudflare', -900 verbose headers 'cf-request-id': '02ddd01af40000325c4c810200000001' } -901 silly get cb [ 304, -901 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -901 silly get connection: 'keep-alive', -901 silly get 'set-cookie': -901 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -901 silly get 'cf-ray': '59764fa4b9de325c-FRA', -901 silly get age: '5655', -901 silly get 'cache-control': 'public, max-age=300', -901 silly get etag: '"37dc2c2e48fd048da76bb52a97386418"', -901 silly get 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT', -901 silly get vary: 'Accept-Encoding', -901 silly get 'cf-cache-status': 'HIT', -901 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -901 silly get server: 'cloudflare', -901 silly get 'cf-request-id': '02ddd01af40000325c4c810200000001' } ] -902 verbose etag https://registry.npmjs.org/caseless from cache -903 verbose get saving caseless to /home/christine/.npm/registry.npmjs.org/caseless/.cache.json -904 http 304 https://registry.npmjs.org/is-typedarray -905 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -905 verbose headers connection: 'keep-alive', -905 verbose headers 'set-cookie': -905 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -905 verbose headers 'cf-ray': '59764fa4bc4a6347-FRA', -905 verbose headers age: '5655', -905 verbose headers 'cache-control': 'public, max-age=300', -905 verbose headers etag: '"e7b88219ebe721b877b678c51795c9c5"', -905 verbose headers 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT', -905 verbose headers vary: 'Accept-Encoding', -905 verbose headers 'cf-cache-status': 'HIT', -905 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -905 verbose headers server: 'cloudflare', -905 verbose headers 'cf-request-id': '02ddd01af400006347e88ad200000001' } -906 silly get cb [ 304, -906 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -906 silly get connection: 'keep-alive', -906 silly get 'set-cookie': -906 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -906 silly get 'cf-ray': '59764fa4bc4a6347-FRA', -906 silly get age: '5655', -906 silly get 'cache-control': 'public, max-age=300', -906 silly get etag: '"e7b88219ebe721b877b678c51795c9c5"', -906 silly get 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT', -906 silly get vary: 'Accept-Encoding', -906 silly get 'cf-cache-status': 'HIT', -906 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -906 silly get server: 'cloudflare', -906 silly get 'cf-request-id': '02ddd01af400006347e88ad200000001' } ] -907 verbose etag https://registry.npmjs.org/is-typedarray from cache -908 verbose get saving is-typedarray to /home/christine/.npm/registry.npmjs.org/is-typedarray/.cache.json -909 http 304 https://registry.npmjs.org/forever-agent -910 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -910 verbose headers connection: 'keep-alive', -910 verbose headers 'set-cookie': -910 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -910 verbose headers 'cf-ray': '59764fa4b87c648b-FRA', -910 verbose headers age: '5655', -910 verbose headers 'cache-control': 'public, max-age=300', -910 verbose headers etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"', -910 verbose headers 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT', -910 verbose headers vary: 'Accept-Encoding', -910 verbose headers 'cf-cache-status': 'HIT', -910 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -910 verbose headers server: 'cloudflare', -910 verbose headers 'cf-request-id': '02ddd01af40000648bda003200000001' } -911 silly get cb [ 304, -911 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -911 silly get connection: 'keep-alive', -911 silly get 'set-cookie': -911 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -911 silly get 'cf-ray': '59764fa4b87c648b-FRA', -911 silly get age: '5655', -911 silly get 'cache-control': 'public, max-age=300', -911 silly get etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"', -911 silly get 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT', -911 silly get vary: 'Accept-Encoding', -911 silly get 'cf-cache-status': 'HIT', -911 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -911 silly get server: 'cloudflare', -911 silly get 'cf-request-id': '02ddd01af40000648bda003200000001' } ] -912 verbose etag https://registry.npmjs.org/forever-agent from cache -913 verbose get saving forever-agent to /home/christine/.npm/registry.npmjs.org/forever-agent/.cache.json -914 silly resolveWithNewModule form-data@2.3.3 checking installable status -915 silly cache add args [ 'form-data@~2.3.2', null ] -916 verbose cache add spec form-data@~2.3.2 -917 silly cache add parsed spec Result { -917 silly cache add raw: 'form-data@~2.3.2', -917 silly cache add scope: null, -917 silly cache add name: 'form-data', -917 silly cache add rawSpec: '~2.3.2', -917 silly cache add spec: '>=2.3.2 <2.4.0', -917 silly cache add type: 'range' } -918 silly addNamed form-data@>=2.3.2 <2.4.0 -919 verbose addNamed ">=2.3.2 <2.4.0" is a valid semver range for form-data -920 silly addNameRange { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: false } -921 silly mapToRegistry name form-data -922 silly mapToRegistry using default registry -923 silly mapToRegistry registry https://registry.npmjs.org/ -924 silly mapToRegistry uri https://registry.npmjs.org/form-data -925 verbose addNameRange registry:https://registry.npmjs.org/form-data not in flight; fetching -926 silly resolveWithNewModule har-validator@5.1.3 checking installable status -927 silly cache add args [ 'har-validator@~5.1.3', null ] -928 verbose cache add spec har-validator@~5.1.3 -929 silly cache add parsed spec Result { -929 silly cache add raw: 'har-validator@~5.1.3', -929 silly cache add scope: null, -929 silly cache add name: 'har-validator', -929 silly cache add rawSpec: '~5.1.3', -929 silly cache add spec: '>=5.1.3 <5.2.0', -929 silly cache add type: 'range' } -930 silly addNamed har-validator@>=5.1.3 <5.2.0 -931 verbose addNamed ">=5.1.3 <5.2.0" is a valid semver range for har-validator -932 silly addNameRange { name: 'har-validator', -932 silly addNameRange range: '>=5.1.3 <5.2.0', -932 silly addNameRange hasData: false } -933 silly mapToRegistry name har-validator -934 silly mapToRegistry using default registry -935 silly mapToRegistry registry https://registry.npmjs.org/ -936 silly mapToRegistry uri https://registry.npmjs.org/har-validator -937 verbose addNameRange registry:https://registry.npmjs.org/har-validator not in flight; fetching -938 http 304 https://registry.npmjs.org/extend -939 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -939 verbose headers connection: 'keep-alive', -939 verbose headers 'set-cookie': -939 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -939 verbose headers 'cf-ray': '59764fa4bc61175a-FRA', -939 verbose headers age: '5656', -939 verbose headers 'cache-control': 'public, max-age=300', -939 verbose headers etag: '"924fa39abddd399eb964b1aa611da651"', -939 verbose headers 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT', -939 verbose headers vary: 'Accept-Encoding', -939 verbose headers 'cf-cache-status': 'HIT', -939 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -939 verbose headers server: 'cloudflare', -939 verbose headers 'cf-request-id': '02ddd01af40000175a1e1fb200000001' } -940 silly get cb [ 304, -940 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -940 silly get connection: 'keep-alive', -940 silly get 'set-cookie': -940 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -940 silly get 'cf-ray': '59764fa4bc61175a-FRA', -940 silly get age: '5656', -940 silly get 'cache-control': 'public, max-age=300', -940 silly get etag: '"924fa39abddd399eb964b1aa611da651"', -940 silly get 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT', -940 silly get vary: 'Accept-Encoding', -940 silly get 'cf-cache-status': 'HIT', -940 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -940 silly get server: 'cloudflare', -940 silly get 'cf-request-id': '02ddd01af40000175a1e1fb200000001' } ] -941 verbose etag https://registry.npmjs.org/extend from cache -942 verbose get saving extend to /home/christine/.npm/registry.npmjs.org/extend/.cache.json -943 http 304 https://registry.npmjs.org/combined-stream -944 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -944 verbose headers connection: 'keep-alive', -944 verbose headers 'set-cookie': -944 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -944 verbose headers 'cf-ray': '59764fa4b963d715-FRA', -944 verbose headers age: '5355', -944 verbose headers 'cache-control': 'public, max-age=300', -944 verbose headers etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"', -944 verbose headers 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT', -944 verbose headers vary: 'Accept-Encoding', -944 verbose headers 'cf-cache-status': 'HIT', -944 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -944 verbose headers server: 'cloudflare', -944 verbose headers 'cf-request-id': '02ddd01af40000d715c11f3200000001' } -945 silly get cb [ 304, -945 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -945 silly get connection: 'keep-alive', -945 silly get 'set-cookie': -945 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -945 silly get 'cf-ray': '59764fa4b963d715-FRA', -945 silly get age: '5355', -945 silly get 'cache-control': 'public, max-age=300', -945 silly get etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"', -945 silly get 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT', -945 silly get vary: 'Accept-Encoding', -945 silly get 'cf-cache-status': 'HIT', -945 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -945 silly get server: 'cloudflare', -945 silly get 'cf-request-id': '02ddd01af40000d715c11f3200000001' } ] -946 verbose etag https://registry.npmjs.org/combined-stream from cache -947 verbose get saving combined-stream to /home/christine/.npm/registry.npmjs.org/combined-stream/.cache.json -948 silly resolveWithNewModule is-typedarray@1.0.0 checking installable status -949 silly cache add args [ 'is-typedarray@~1.0.0', null ] -950 verbose cache add spec is-typedarray@~1.0.0 -951 silly cache add parsed spec Result { -951 silly cache add raw: 'is-typedarray@~1.0.0', -951 silly cache add scope: null, -951 silly cache add name: 'is-typedarray', -951 silly cache add rawSpec: '~1.0.0', -951 silly cache add spec: '>=1.0.0 <1.1.0', -951 silly cache add type: 'range' } -952 silly addNamed is-typedarray@>=1.0.0 <1.1.0 -953 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for is-typedarray -954 silly addNameRange { name: 'is-typedarray', -954 silly addNameRange range: '>=1.0.0 <1.1.0', -954 silly addNameRange hasData: false } -955 silly mapToRegistry name is-typedarray -956 silly mapToRegistry using default registry -957 silly mapToRegistry registry https://registry.npmjs.org/ -958 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray -959 verbose addNameRange registry:https://registry.npmjs.org/is-typedarray not in flight; fetching -960 silly resolveWithNewModule caseless@0.12.0 checking installable status -961 silly cache add args [ 'caseless@~0.12.0', null ] -962 verbose cache add spec caseless@~0.12.0 -963 silly cache add parsed spec Result { -963 silly cache add raw: 'caseless@~0.12.0', -963 silly cache add scope: null, -963 silly cache add name: 'caseless', -963 silly cache add rawSpec: '~0.12.0', -963 silly cache add spec: '>=0.12.0 <0.13.0', -963 silly cache add type: 'range' } -964 silly addNamed caseless@>=0.12.0 <0.13.0 -965 verbose addNamed ">=0.12.0 <0.13.0" is a valid semver range for caseless -966 silly addNameRange { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: false } -967 silly mapToRegistry name caseless -968 silly mapToRegistry using default registry -969 silly mapToRegistry registry https://registry.npmjs.org/ -970 silly mapToRegistry uri https://registry.npmjs.org/caseless -971 verbose addNameRange registry:https://registry.npmjs.org/caseless not in flight; fetching -972 http 304 https://registry.npmjs.org/aws4 -973 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -973 verbose headers connection: 'keep-alive', -973 verbose headers 'set-cookie': -973 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -973 verbose headers 'cf-ray': '59764fa4bb7d6413-FRA', -973 verbose headers age: '5655', -973 verbose headers 'cache-control': 'public, max-age=300', -973 verbose headers etag: '"95c9834de9b7164b9a063970ba631035"', -973 verbose headers 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT', -973 verbose headers vary: 'Accept-Encoding', -973 verbose headers 'cf-cache-status': 'HIT', -973 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -973 verbose headers server: 'cloudflare', -973 verbose headers 'cf-request-id': '02ddd01af4000064135f8e3200000001' } -974 silly get cb [ 304, -974 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -974 silly get connection: 'keep-alive', -974 silly get 'set-cookie': -974 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -974 silly get 'cf-ray': '59764fa4bb7d6413-FRA', -974 silly get age: '5655', -974 silly get 'cache-control': 'public, max-age=300', -974 silly get etag: '"95c9834de9b7164b9a063970ba631035"', -974 silly get 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT', -974 silly get vary: 'Accept-Encoding', -974 silly get 'cf-cache-status': 'HIT', -974 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -974 silly get server: 'cloudflare', -974 silly get 'cf-request-id': '02ddd01af4000064135f8e3200000001' } ] -975 verbose etag https://registry.npmjs.org/aws4 from cache -976 verbose get saving aws4 to /home/christine/.npm/registry.npmjs.org/aws4/.cache.json -977 silly resolveWithNewModule forever-agent@0.6.1 checking installable status -978 silly cache add args [ 'forever-agent@~0.6.1', null ] -979 verbose cache add spec forever-agent@~0.6.1 -980 silly cache add parsed spec Result { -980 silly cache add raw: 'forever-agent@~0.6.1', -980 silly cache add scope: null, -980 silly cache add name: 'forever-agent', -980 silly cache add rawSpec: '~0.6.1', -980 silly cache add spec: '>=0.6.1 <0.7.0', -980 silly cache add type: 'range' } -981 silly addNamed forever-agent@>=0.6.1 <0.7.0 -982 verbose addNamed ">=0.6.1 <0.7.0" is a valid semver range for forever-agent -983 silly addNameRange { name: 'forever-agent', -983 silly addNameRange range: '>=0.6.1 <0.7.0', -983 silly addNameRange hasData: false } -984 silly mapToRegistry name forever-agent -985 silly mapToRegistry using default registry -986 silly mapToRegistry registry https://registry.npmjs.org/ -987 silly mapToRegistry uri https://registry.npmjs.org/forever-agent -988 verbose addNameRange registry:https://registry.npmjs.org/forever-agent not in flight; fetching -989 verbose get https://registry.npmjs.org/form-data not expired, no request -990 silly addNameRange number 2 { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: true } -991 silly addNameRange versions [ 'form-data', -991 silly addNameRange [ '0.0.0', -991 silly addNameRange '0.0.2', -991 silly addNameRange '0.0.3', -991 silly addNameRange '0.0.4', -991 silly addNameRange '0.0.5', -991 silly addNameRange '0.0.6', -991 silly addNameRange '0.0.7', -991 silly addNameRange '0.0.8', -991 silly addNameRange '0.0.9', -991 silly addNameRange '0.0.10', -991 silly addNameRange '0.1.0', -991 silly addNameRange '0.1.1', -991 silly addNameRange '0.1.2', -991 silly addNameRange '0.1.3', -991 silly addNameRange '0.1.4', -991 silly addNameRange '0.2.0', -991 silly addNameRange '1.0.0-rc1', -991 silly addNameRange '1.0.0-rc2', -991 silly addNameRange '1.0.0-rc3', -991 silly addNameRange '1.0.0-rc4', -991 silly addNameRange '1.0.0', -991 silly addNameRange '1.0.1', -991 silly addNameRange '2.0.0', -991 silly addNameRange '2.1.0', -991 silly addNameRange '2.1.1', -991 silly addNameRange '2.1.2', -991 silly addNameRange '2.1.4', -991 silly addNameRange '2.2.0', -991 silly addNameRange '2.3.1', -991 silly addNameRange '2.3.2-rc1', -991 silly addNameRange '2.3.2', -991 silly addNameRange '2.3.3', -991 silly addNameRange '2.4.0', -991 silly addNameRange '2.5.0', -991 silly addNameRange '2.5.1', -991 silly addNameRange '3.0.0' ] ] -992 silly addNamed form-data@2.3.3 -993 verbose addNamed "2.3.3" is a plain semver version for form-data -994 http 200 https://registry.npmjs.org/http-signature -995 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -995 verbose headers 'content-type': 'application/json', -995 verbose headers 'transfer-encoding': 'chunked', -995 verbose headers connection: 'keep-alive', -995 verbose headers 'set-cookie': -995 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -995 verbose headers 'cf-ray': '59764fa4bcfedfc7-FRA', -995 verbose headers age: '5657', -995 verbose headers 'cache-control': 'public, max-age=300', -995 verbose headers etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"', -995 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT', -995 verbose headers vary: 'accept-encoding, accept', -995 verbose headers 'cf-cache-status': 'HIT', -995 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -995 verbose headers server: 'cloudflare', -995 verbose headers 'content-encoding': 'gzip', -995 verbose headers 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' } -996 silly get cb [ 200, -996 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -996 silly get 'content-type': 'application/json', -996 silly get 'transfer-encoding': 'chunked', -996 silly get connection: 'keep-alive', -996 silly get 'set-cookie': -996 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -996 silly get 'cf-ray': '59764fa4bcfedfc7-FRA', -996 silly get age: '5657', -996 silly get 'cache-control': 'public, max-age=300', -996 silly get etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"', -996 silly get 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT', -996 silly get vary: 'accept-encoding, accept', -996 silly get 'cf-cache-status': 'HIT', -996 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -996 silly get server: 'cloudflare', -996 silly get 'content-encoding': 'gzip', -996 silly get 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' } ] -997 verbose get saving http-signature to /home/christine/.npm/registry.npmjs.org/http-signature/.cache.json -998 verbose get https://registry.npmjs.org/har-validator not expired, no request -999 silly addNameRange number 2 { name: 'har-validator', range: '>=5.1.3 <5.2.0', hasData: true } -1000 silly addNameRange versions [ 'har-validator', -1000 silly addNameRange [ '1.0.0', -1000 silly addNameRange '1.0.1', -1000 silly addNameRange '1.0.2', -1000 silly addNameRange '1.1.0', -1000 silly addNameRange '1.1.1', -1000 silly addNameRange '1.1.2', -1000 silly addNameRange '1.1.3', -1000 silly addNameRange '1.2.0', -1000 silly addNameRange '1.3.0', -1000 silly addNameRange '1.3.1', -1000 silly addNameRange '1.4.0', -1000 silly addNameRange '1.5.0', -1000 silly addNameRange '1.5.1', -1000 silly addNameRange '1.6.0', -1000 silly addNameRange '1.6.1', -1000 silly addNameRange '1.7.0', -1000 silly addNameRange '1.7.1', -1000 silly addNameRange '1.8.0', -1000 silly addNameRange '2.0.0', -1000 silly addNameRange '2.0.1', -1000 silly addNameRange '2.0.2', -1000 silly addNameRange '2.0.3', -1000 silly addNameRange '2.0.4', -1000 silly addNameRange '2.0.5', -1000 silly addNameRange '2.0.6', -1000 silly addNameRange '2.1.0', -1000 silly addNameRange '2.1.1', -1000 silly addNameRange '2.1.2', -1000 silly addNameRange '2.1.3', -1000 silly addNameRange '3.0.0', -1000 silly addNameRange '3.1.0', -1000 silly addNameRange '3.2.0', -1000 silly addNameRange '3.3.0', -1000 silly addNameRange '3.3.1', -1000 silly addNameRange '3.4.0', -1000 silly addNameRange '4.0.0', -1000 silly addNameRange '4.0.1', -1000 silly addNameRange '4.0.2', -1000 silly addNameRange '4.0.3', -1000 silly addNameRange '4.0.4', -1000 silly addNameRange '4.1.0', -1000 silly addNameRange '4.1.1', -1000 silly addNameRange '4.1.2', -1000 silly addNameRange '4.2.0', -1000 silly addNameRange '4.2.1', -1000 silly addNameRange '5.0.0', -1000 silly addNameRange '5.0.1', -1000 silly addNameRange '5.0.2', -1000 silly addNameRange '5.0.3', -1000 silly addNameRange '5.1.0', -1000 silly addNameRange '5.1.3' ] ] -1001 silly addNamed har-validator@5.1.3 -1002 verbose addNamed "5.1.3" is a plain semver version for har-validator -1003 verbose get https://registry.npmjs.org/is-typedarray not expired, no request -1004 silly addNameRange number 2 { name: 'is-typedarray', range: '>=1.0.0 <1.1.0', hasData: true } -1005 silly addNameRange versions [ 'is-typedarray', [ '0.0.0', '1.0.0' ] ] -1006 silly addNamed is-typedarray@1.0.0 -1007 verbose addNamed "1.0.0" is a plain semver version for is-typedarray -1008 verbose get https://registry.npmjs.org/caseless not expired, no request -1009 silly addNameRange number 2 { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: true } -1010 silly addNameRange versions [ 'caseless', -1010 silly addNameRange [ '0.1.0', -1010 silly addNameRange '0.2.0', -1010 silly addNameRange '0.3.0', -1010 silly addNameRange '0.4.0', -1010 silly addNameRange '0.5.0', -1010 silly addNameRange '0.6.0', -1010 silly addNameRange '0.7.0', -1010 silly addNameRange '0.8.0', -1010 silly addNameRange '0.9.0', -1010 silly addNameRange '0.10.0', -1010 silly addNameRange '0.11.0', -1010 silly addNameRange '0.12.0' ] ] -1011 silly addNamed caseless@0.12.0 -1012 verbose addNamed "0.12.0" is a plain semver version for caseless -1013 verbose get https://registry.npmjs.org/forever-agent not expired, no request -1014 silly addNameRange number 2 { name: 'forever-agent', range: '>=0.6.1 <0.7.0', hasData: true } -1015 silly addNameRange versions [ 'forever-agent', -1015 silly addNameRange [ '0.2.0', '0.3.0', '0.4.0', '0.5.0', '0.5.2', '0.6.0', '0.6.1' ] ] -1016 silly addNamed forever-agent@0.6.1 -1017 verbose addNamed "0.6.1" is a plain semver version for forever-agent -1018 silly resolveWithNewModule combined-stream@1.0.8 checking installable status -1019 silly cache add args [ 'combined-stream@~1.0.6', null ] -1020 verbose cache add spec combined-stream@~1.0.6 -1021 silly cache add parsed spec Result { -1021 silly cache add raw: 'combined-stream@~1.0.6', -1021 silly cache add scope: null, -1021 silly cache add name: 'combined-stream', -1021 silly cache add rawSpec: '~1.0.6', -1021 silly cache add spec: '>=1.0.6 <1.1.0', -1021 silly cache add type: 'range' } -1022 silly addNamed combined-stream@>=1.0.6 <1.1.0 -1023 verbose addNamed ">=1.0.6 <1.1.0" is a valid semver range for combined-stream -1024 silly addNameRange { name: 'combined-stream', -1024 silly addNameRange range: '>=1.0.6 <1.1.0', -1024 silly addNameRange hasData: false } -1025 silly mapToRegistry name combined-stream -1026 silly mapToRegistry using default registry -1027 silly mapToRegistry registry https://registry.npmjs.org/ -1028 silly mapToRegistry uri https://registry.npmjs.org/combined-stream -1029 verbose addNameRange registry:https://registry.npmjs.org/combined-stream not in flight; fetching -1030 silly resolveWithNewModule extend@3.0.2 checking installable status -1031 silly cache add args [ 'extend@~3.0.2', null ] -1032 verbose cache add spec extend@~3.0.2 -1033 silly cache add parsed spec Result { -1033 silly cache add raw: 'extend@~3.0.2', -1033 silly cache add scope: null, -1033 silly cache add name: 'extend', -1033 silly cache add rawSpec: '~3.0.2', -1033 silly cache add spec: '>=3.0.2 <3.1.0', -1033 silly cache add type: 'range' } -1034 silly addNamed extend@>=3.0.2 <3.1.0 -1035 verbose addNamed ">=3.0.2 <3.1.0" is a valid semver range for extend -1036 silly addNameRange { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: false } -1037 silly mapToRegistry name extend -1038 silly mapToRegistry using default registry -1039 silly mapToRegistry registry https://registry.npmjs.org/ -1040 silly mapToRegistry uri https://registry.npmjs.org/extend -1041 verbose addNameRange registry:https://registry.npmjs.org/extend not in flight; fetching -1042 silly cache afterAdd form-data@2.3.3 -1043 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json not in flight; writing -1044 silly resolveWithNewModule aws4@1.9.1 checking installable status -1045 silly cache add args [ 'aws4@^1.8.0', null ] -1046 verbose cache add spec aws4@^1.8.0 -1047 silly cache add parsed spec Result { -1047 silly cache add raw: 'aws4@^1.8.0', -1047 silly cache add scope: null, -1047 silly cache add name: 'aws4', -1047 silly cache add rawSpec: '^1.8.0', -1047 silly cache add spec: '>=1.8.0 <2.0.0', -1047 silly cache add type: 'range' } -1048 silly addNamed aws4@>=1.8.0 <2.0.0 -1049 verbose addNamed ">=1.8.0 <2.0.0" is a valid semver range for aws4 -1050 silly addNameRange { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: false } -1051 silly mapToRegistry name aws4 -1052 silly mapToRegistry using default registry -1053 silly mapToRegistry registry https://registry.npmjs.org/ -1054 silly mapToRegistry uri https://registry.npmjs.org/aws4 -1055 verbose addNameRange registry:https://registry.npmjs.org/aws4 not in flight; fetching -1056 silly resolveWithNewModule http-signature@1.2.0 checking installable status -1057 silly cache add args [ 'http-signature@~1.2.0', null ] -1058 verbose cache add spec http-signature@~1.2.0 -1059 silly cache add parsed spec Result { -1059 silly cache add raw: 'http-signature@~1.2.0', -1059 silly cache add scope: null, -1059 silly cache add name: 'http-signature', -1059 silly cache add rawSpec: '~1.2.0', -1059 silly cache add spec: '>=1.2.0 <1.3.0', -1059 silly cache add type: 'range' } -1060 silly addNamed http-signature@>=1.2.0 <1.3.0 -1061 verbose addNamed ">=1.2.0 <1.3.0" is a valid semver range for http-signature -1062 silly addNameRange { name: 'http-signature', -1062 silly addNameRange range: '>=1.2.0 <1.3.0', -1062 silly addNameRange hasData: false } -1063 silly mapToRegistry name http-signature -1064 silly mapToRegistry using default registry -1065 silly mapToRegistry registry https://registry.npmjs.org/ -1066 silly mapToRegistry uri https://registry.npmjs.org/http-signature -1067 verbose addNameRange registry:https://registry.npmjs.org/http-signature not in flight; fetching -1068 silly cache afterAdd har-validator@5.1.3 -1069 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json not in flight; writing -1070 verbose get https://registry.npmjs.org/extend not expired, no request -1071 silly addNameRange number 2 { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: true } -1072 silly addNameRange versions [ 'extend', -1072 silly addNameRange [ '1.0.0', -1072 silly addNameRange '1.1.0', -1072 silly addNameRange '1.1.1', -1072 silly addNameRange '1.1.3', -1072 silly addNameRange '1.2.0', -1072 silly addNameRange '1.2.1', -1072 silly addNameRange '1.3.0', -1072 silly addNameRange '2.0.0', -1072 silly addNameRange '2.0.1', -1072 silly addNameRange '3.0.0', -1072 silly addNameRange '3.0.1', -1072 silly addNameRange '3.0.2', -1072 silly addNameRange '2.0.2' ] ] -1073 silly addNamed extend@3.0.2 -1074 verbose addNamed "3.0.2" is a plain semver version for extend -1075 verbose get https://registry.npmjs.org/combined-stream not expired, no request -1076 silly addNameRange number 2 { name: 'combined-stream', -1076 silly addNameRange range: '>=1.0.6 <1.1.0', -1076 silly addNameRange hasData: true } -1077 silly addNameRange versions [ 'combined-stream', -1077 silly addNameRange [ '0.0.0', -1077 silly addNameRange '0.0.1', -1077 silly addNameRange '0.0.2', -1077 silly addNameRange '0.0.3', -1077 silly addNameRange '0.0.4', -1077 silly addNameRange '0.0.5', -1077 silly addNameRange '0.0.7', -1077 silly addNameRange '1.0.0', -1077 silly addNameRange '1.0.1', -1077 silly addNameRange '1.0.2', -1077 silly addNameRange '1.0.3', -1077 silly addNameRange '1.0.4', -1077 silly addNameRange '1.0.5', -1077 silly addNameRange '1.0.6-rc1', -1077 silly addNameRange '1.0.6', -1077 silly addNameRange '1.0.7', -1077 silly addNameRange '1.0.8' ] ] -1078 silly addNamed combined-stream@1.0.8 -1079 verbose addNamed "1.0.8" is a plain semver version for combined-stream -1080 silly cache afterAdd is-typedarray@1.0.0 -1081 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json not in flight; writing -1082 silly cache afterAdd caseless@0.12.0 -1083 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json not in flight; writing -1084 silly cache afterAdd forever-agent@0.6.1 -1085 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json not in flight; writing -1086 verbose get https://registry.npmjs.org/aws4 not expired, no request -1087 silly addNameRange number 2 { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: true } -1088 silly addNameRange versions [ 'aws4', -1088 silly addNameRange [ '0.0.1', -1088 silly addNameRange '0.1.0', -1088 silly addNameRange '0.1.1', -1088 silly addNameRange '0.1.2', -1088 silly addNameRange '0.1.3', -1088 silly addNameRange '0.1.4', -1088 silly addNameRange '0.1.5', -1088 silly addNameRange '0.1.6', -1088 silly addNameRange '0.1.7', -1088 silly addNameRange '0.1.8', -1088 silly addNameRange '0.1.9', -1088 silly addNameRange '0.1.10', -1088 silly addNameRange '0.1.12', -1088 silly addNameRange '0.2.0', -1088 silly addNameRange '0.2.1', -1088 silly addNameRange '0.2.2', -1088 silly addNameRange '0.2.3', -1088 silly addNameRange '0.3.0', -1088 silly addNameRange '0.4.0', -1088 silly addNameRange '0.4.1', -1088 silly addNameRange '0.4.2', -1088 silly addNameRange '0.5.0', -1088 silly addNameRange '0.5.1', -1088 silly addNameRange '1.0.0', -1088 silly addNameRange '1.0.1', -1088 silly addNameRange '1.0.2', -1088 silly addNameRange '1.0.3', -1088 silly addNameRange '1.0.4', -1088 silly addNameRange '1.1.0', -1088 silly addNameRange '1.2.0', -1088 silly addNameRange '1.2.1', -1088 silly addNameRange '1.3.1', -1088 silly addNameRange '1.3.2', -1088 silly addNameRange '1.4.0', -1088 silly addNameRange '1.4.1', -1088 silly addNameRange '1.5.0', -1088 silly addNameRange '1.6.0', -1088 silly addNameRange '1.7.0', -1088 silly addNameRange '1.8.0', -1088 silly addNameRange '1.9.0', -1088 silly addNameRange '1.9.1' ] ] -1089 silly addNamed aws4@1.9.1 -1090 verbose addNamed "1.9.1" is a plain semver version for aws4 -1091 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json written -1092 verbose get https://registry.npmjs.org/http-signature not expired, no request -1093 silly addNameRange number 2 { name: 'http-signature', -1093 silly addNameRange range: '>=1.2.0 <1.3.0', -1093 silly addNameRange hasData: true } -1094 silly addNameRange versions [ 'http-signature', -1094 silly addNameRange [ '0.9.0', -1094 silly addNameRange '0.9.2', -1094 silly addNameRange '0.9.3', -1094 silly addNameRange '0.9.4', -1094 silly addNameRange '0.9.5', -1094 silly addNameRange '0.9.6', -1094 silly addNameRange '0.9.7', -1094 silly addNameRange '0.9.8', -1094 silly addNameRange '0.9.9', -1094 silly addNameRange '0.9.10', -1094 silly addNameRange '0.9.11', -1094 silly addNameRange '0.10.0', -1094 silly addNameRange '0.10.1', -1094 silly addNameRange '0.11.0', -1094 silly addNameRange '1.0.0', -1094 silly addNameRange '1.0.1', -1094 silly addNameRange '1.0.2', -1094 silly addNameRange '1.1.0', -1094 silly addNameRange '1.1.1', -1094 silly addNameRange '1.2.0', -1094 silly addNameRange '1.3.0', -1094 silly addNameRange '1.3.1', -1094 silly addNameRange '1.3.2', -1094 silly addNameRange '1.3.3', -1094 silly addNameRange '1.3.4' ] ] -1095 silly addNamed http-signature@1.2.0 -1096 verbose addNamed "1.2.0" is a plain semver version for http-signature -1097 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json written -1098 http 304 https://registry.npmjs.org/isstream -1099 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1099 verbose headers connection: 'keep-alive', -1099 verbose headers 'set-cookie': -1099 verbose headers [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1099 verbose headers 'cf-ray': '59764fa4fe4d05bb-FRA', -1099 verbose headers age: '5355', -1099 verbose headers 'cache-control': 'public, max-age=300', -1099 verbose headers etag: '"9dc7f37e087df077683bf238c847ad45"', -1099 verbose headers 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT', -1099 verbose headers vary: 'Accept-Encoding', -1099 verbose headers 'cf-cache-status': 'HIT', -1099 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1099 verbose headers server: 'cloudflare', -1099 verbose headers 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' } -1100 silly get cb [ 304, -1100 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1100 silly get connection: 'keep-alive', -1100 silly get 'set-cookie': -1100 silly get [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1100 silly get 'cf-ray': '59764fa4fe4d05bb-FRA', -1100 silly get age: '5355', -1100 silly get 'cache-control': 'public, max-age=300', -1100 silly get etag: '"9dc7f37e087df077683bf238c847ad45"', -1100 silly get 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT', -1100 silly get vary: 'Accept-Encoding', -1100 silly get 'cf-cache-status': 'HIT', -1100 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1100 silly get server: 'cloudflare', -1100 silly get 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' } ] -1101 verbose etag https://registry.npmjs.org/isstream from cache -1102 verbose get saving isstream to /home/christine/.npm/registry.npmjs.org/isstream/.cache.json -1103 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json written -1104 silly cache afterAdd combined-stream@1.0.8 -1105 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json not in flight; writing -1106 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json written -1107 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json written -1108 silly cache afterAdd extend@3.0.2 -1109 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json not in flight; writing -1110 silly cache afterAdd aws4@1.9.1 -1111 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json not in flight; writing -1112 http 304 https://registry.npmjs.org/json-stringify-safe -1113 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1113 verbose headers connection: 'keep-alive', -1113 verbose headers 'set-cookie': -1113 verbose headers [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1113 verbose headers 'cf-ray': '59764fa4fe54d6e1-FRA', -1113 verbose headers age: '5657', -1113 verbose headers 'cache-control': 'public, max-age=300', -1113 verbose headers etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"', -1113 verbose headers 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT', -1113 verbose headers vary: 'Accept-Encoding', -1113 verbose headers 'cf-cache-status': 'HIT', -1113 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1113 verbose headers server: 'cloudflare', -1113 verbose headers 'cf-request-id': '02ddd01b1e0000d6e132367200000001' } -1114 silly get cb [ 304, -1114 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1114 silly get connection: 'keep-alive', -1114 silly get 'set-cookie': -1114 silly get [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1114 silly get 'cf-ray': '59764fa4fe54d6e1-FRA', -1114 silly get age: '5657', -1114 silly get 'cache-control': 'public, max-age=300', -1114 silly get etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"', -1114 silly get 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT', -1114 silly get vary: 'Accept-Encoding', -1114 silly get 'cf-cache-status': 'HIT', -1114 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1114 silly get server: 'cloudflare', -1114 silly get 'cf-request-id': '02ddd01b1e0000d6e132367200000001' } ] -1115 verbose etag https://registry.npmjs.org/json-stringify-safe from cache -1116 verbose get saving json-stringify-safe to /home/christine/.npm/registry.npmjs.org/json-stringify-safe/.cache.json -1117 silly cache afterAdd http-signature@1.2.0 -1118 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json not in flight; writing -1119 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json written -1120 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json written -1121 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json written -1122 silly resolveWithNewModule isstream@0.1.2 checking installable status -1123 silly cache add args [ 'isstream@~0.1.2', null ] -1124 verbose cache add spec isstream@~0.1.2 -1125 silly cache add parsed spec Result { -1125 silly cache add raw: 'isstream@~0.1.2', -1125 silly cache add scope: null, -1125 silly cache add name: 'isstream', -1125 silly cache add rawSpec: '~0.1.2', -1125 silly cache add spec: '>=0.1.2 <0.2.0', -1125 silly cache add type: 'range' } -1126 silly addNamed isstream@>=0.1.2 <0.2.0 -1127 verbose addNamed ">=0.1.2 <0.2.0" is a valid semver range for isstream -1128 silly addNameRange { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: false } -1129 silly mapToRegistry name isstream -1130 silly mapToRegistry using default registry -1131 silly mapToRegistry registry https://registry.npmjs.org/ -1132 silly mapToRegistry uri https://registry.npmjs.org/isstream -1133 verbose addNameRange registry:https://registry.npmjs.org/isstream not in flight; fetching -1134 http 304 https://registry.npmjs.org/tunnel-agent -1135 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1135 verbose headers connection: 'keep-alive', -1135 verbose headers 'set-cookie': -1135 verbose headers [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1135 verbose headers 'cf-ray': '59764fa51970c2f9-FRA', -1135 verbose headers age: '5655', -1135 verbose headers 'cache-control': 'public, max-age=300', -1135 verbose headers etag: '"03911fc1f433b33bccf8a4a2a5de2375"', -1135 verbose headers 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT', -1135 verbose headers vary: 'Accept-Encoding', -1135 verbose headers 'cf-cache-status': 'HIT', -1135 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1135 verbose headers server: 'cloudflare', -1135 verbose headers 'cf-request-id': '02ddd01b2a0000c2f926071200000001' } -1136 silly get cb [ 304, -1136 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1136 silly get connection: 'keep-alive', -1136 silly get 'set-cookie': -1136 silly get [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1136 silly get 'cf-ray': '59764fa51970c2f9-FRA', -1136 silly get age: '5655', -1136 silly get 'cache-control': 'public, max-age=300', -1136 silly get etag: '"03911fc1f433b33bccf8a4a2a5de2375"', -1136 silly get 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT', -1136 silly get vary: 'Accept-Encoding', -1136 silly get 'cf-cache-status': 'HIT', -1136 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1136 silly get server: 'cloudflare', -1136 silly get 'cf-request-id': '02ddd01b2a0000c2f926071200000001' } ] -1137 verbose etag https://registry.npmjs.org/tunnel-agent from cache -1138 verbose get saving tunnel-agent to /home/christine/.npm/registry.npmjs.org/tunnel-agent/.cache.json -1139 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json written -1140 http 304 https://registry.npmjs.org/performance-now -1141 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1141 verbose headers connection: 'keep-alive', -1141 verbose headers 'set-cookie': -1141 verbose headers [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1141 verbose headers 'cf-ray': '59764fa51f721772-FRA', -1141 verbose headers age: '5657', -1141 verbose headers 'cache-control': 'public, max-age=300', -1141 verbose headers etag: '"5f12ad497b3e39323dcdde75c34f5767"', -1141 verbose headers 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT', -1141 verbose headers vary: 'Accept-Encoding', -1141 verbose headers 'cf-cache-status': 'HIT', -1141 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1141 verbose headers server: 'cloudflare', -1141 verbose headers 'cf-request-id': '02ddd01b2a0000177264160200000001' } -1142 silly get cb [ 304, -1142 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1142 silly get connection: 'keep-alive', -1142 silly get 'set-cookie': -1142 silly get [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1142 silly get 'cf-ray': '59764fa51f721772-FRA', -1142 silly get age: '5657', -1142 silly get 'cache-control': 'public, max-age=300', -1142 silly get etag: '"5f12ad497b3e39323dcdde75c34f5767"', -1142 silly get 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT', -1142 silly get vary: 'Accept-Encoding', -1142 silly get 'cf-cache-status': 'HIT', -1142 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1142 silly get server: 'cloudflare', -1142 silly get 'cf-request-id': '02ddd01b2a0000177264160200000001' } ] -1143 verbose etag https://registry.npmjs.org/performance-now from cache -1144 verbose get saving performance-now to /home/christine/.npm/registry.npmjs.org/performance-now/.cache.json -1145 silly resolveWithNewModule json-stringify-safe@5.0.1 checking installable status -1146 silly cache add args [ 'json-stringify-safe@~5.0.1', null ] -1147 verbose cache add spec json-stringify-safe@~5.0.1 -1148 silly cache add parsed spec Result { -1148 silly cache add raw: 'json-stringify-safe@~5.0.1', -1148 silly cache add scope: null, -1148 silly cache add name: 'json-stringify-safe', -1148 silly cache add rawSpec: '~5.0.1', -1148 silly cache add spec: '>=5.0.1 <5.1.0', -1148 silly cache add type: 'range' } -1149 silly addNamed json-stringify-safe@>=5.0.1 <5.1.0 -1150 verbose addNamed ">=5.0.1 <5.1.0" is a valid semver range for json-stringify-safe -1151 silly addNameRange { name: 'json-stringify-safe', -1151 silly addNameRange range: '>=5.0.1 <5.1.0', -1151 silly addNameRange hasData: false } -1152 silly mapToRegistry name json-stringify-safe -1153 silly mapToRegistry using default registry -1154 silly mapToRegistry registry https://registry.npmjs.org/ -1155 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe -1156 verbose addNameRange registry:https://registry.npmjs.org/json-stringify-safe not in flight; fetching -1157 verbose get https://registry.npmjs.org/isstream not expired, no request -1158 silly addNameRange number 2 { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: true } -1159 silly addNameRange versions [ 'isstream', [ '0.0.0', '0.1.0', '0.1.1', '0.1.2' ] ] -1160 silly addNamed isstream@0.1.2 -1161 verbose addNamed "0.1.2" is a plain semver version for isstream -1162 http 200 https://registry.npmjs.org/safe-buffer -1163 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1163 verbose headers 'content-type': 'application/json', -1163 verbose headers 'transfer-encoding': 'chunked', -1163 verbose headers connection: 'keep-alive', -1163 verbose headers 'set-cookie': -1163 verbose headers [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1163 verbose headers 'cf-ray': '59764fa51a7b0eab-FRA', -1163 verbose headers age: '5658', -1163 verbose headers 'cache-control': 'public, max-age=300', -1163 verbose headers etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"', -1163 verbose headers 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT', -1163 verbose headers vary: 'accept-encoding, accept', -1163 verbose headers 'cf-cache-status': 'HIT', -1163 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1163 verbose headers server: 'cloudflare', -1163 verbose headers 'content-encoding': 'gzip', -1163 verbose headers 'cf-request-id': '02ddd01b2a00000eabe9143200000001' } -1164 silly get cb [ 200, -1164 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1164 silly get 'content-type': 'application/json', -1164 silly get 'transfer-encoding': 'chunked', -1164 silly get connection: 'keep-alive', -1164 silly get 'set-cookie': -1164 silly get [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1164 silly get 'cf-ray': '59764fa51a7b0eab-FRA', -1164 silly get age: '5658', -1164 silly get 'cache-control': 'public, max-age=300', -1164 silly get etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"', -1164 silly get 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT', -1164 silly get vary: 'accept-encoding, accept', -1164 silly get 'cf-cache-status': 'HIT', -1164 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1164 silly get server: 'cloudflare', -1164 silly get 'content-encoding': 'gzip', -1164 silly get 'cf-request-id': '02ddd01b2a00000eabe9143200000001' } ] -1165 verbose get saving safe-buffer to /home/christine/.npm/registry.npmjs.org/safe-buffer/.cache.json -1166 http 304 https://registry.npmjs.org/oauth-sign -1167 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1167 verbose headers connection: 'keep-alive', -1167 verbose headers 'set-cookie': -1167 verbose headers [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1167 verbose headers 'cf-ray': '59764fa51ff7dfbb-FRA', -1167 verbose headers age: '5355', -1167 verbose headers 'cache-control': 'public, max-age=300', -1167 verbose headers etag: '"3032c1efe9ec61d748d027a1da2bab61"', -1167 verbose headers 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT', -1167 verbose headers vary: 'Accept-Encoding', -1167 verbose headers 'cf-cache-status': 'HIT', -1167 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1167 verbose headers server: 'cloudflare', -1167 verbose headers 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' } -1168 silly get cb [ 304, -1168 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1168 silly get connection: 'keep-alive', -1168 silly get 'set-cookie': -1168 silly get [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1168 silly get 'cf-ray': '59764fa51ff7dfbb-FRA', -1168 silly get age: '5355', -1168 silly get 'cache-control': 'public, max-age=300', -1168 silly get etag: '"3032c1efe9ec61d748d027a1da2bab61"', -1168 silly get 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT', -1168 silly get vary: 'Accept-Encoding', -1168 silly get 'cf-cache-status': 'HIT', -1168 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1168 silly get server: 'cloudflare', -1168 silly get 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' } ] -1169 verbose etag https://registry.npmjs.org/oauth-sign from cache -1170 verbose get saving oauth-sign to /home/christine/.npm/registry.npmjs.org/oauth-sign/.cache.json -1171 verbose get https://registry.npmjs.org/json-stringify-safe not expired, no request -1172 silly addNameRange number 2 { name: 'json-stringify-safe', -1172 silly addNameRange range: '>=5.0.1 <5.1.0', -1172 silly addNameRange hasData: true } -1173 silly addNameRange versions [ 'json-stringify-safe', -1173 silly addNameRange [ '2.0.0', '3.0.0', '4.0.0', '5.0.0', '5.0.1' ] ] -1174 silly addNamed json-stringify-safe@5.0.1 -1175 verbose addNamed "5.0.1" is a plain semver version for json-stringify-safe -1176 silly resolveWithNewModule tunnel-agent@0.6.0 checking installable status -1177 silly cache add args [ 'tunnel-agent@^0.6.0', null ] -1178 verbose cache add spec tunnel-agent@^0.6.0 -1179 silly cache add parsed spec Result { -1179 silly cache add raw: 'tunnel-agent@^0.6.0', -1179 silly cache add scope: null, -1179 silly cache add name: 'tunnel-agent', -1179 silly cache add rawSpec: '^0.6.0', -1179 silly cache add spec: '>=0.6.0 <0.7.0', -1179 silly cache add type: 'range' } -1180 silly addNamed tunnel-agent@>=0.6.0 <0.7.0 -1181 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for tunnel-agent -1182 silly addNameRange { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: false } -1183 silly mapToRegistry name tunnel-agent -1184 silly mapToRegistry using default registry -1185 silly mapToRegistry registry https://registry.npmjs.org/ -1186 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent -1187 verbose addNameRange registry:https://registry.npmjs.org/tunnel-agent not in flight; fetching -1188 silly resolveWithNewModule performance-now@2.1.0 checking installable status -1189 silly cache add args [ 'performance-now@^2.1.0', null ] -1190 verbose cache add spec performance-now@^2.1.0 -1191 silly cache add parsed spec Result { -1191 silly cache add raw: 'performance-now@^2.1.0', -1191 silly cache add scope: null, -1191 silly cache add name: 'performance-now', -1191 silly cache add rawSpec: '^2.1.0', -1191 silly cache add spec: '>=2.1.0 <3.0.0', -1191 silly cache add type: 'range' } -1192 silly addNamed performance-now@>=2.1.0 <3.0.0 -1193 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for performance-now -1194 silly addNameRange { name: 'performance-now', -1194 silly addNameRange range: '>=2.1.0 <3.0.0', -1194 silly addNameRange hasData: false } -1195 silly mapToRegistry name performance-now -1196 silly mapToRegistry using default registry -1197 silly mapToRegistry registry https://registry.npmjs.org/ -1198 silly mapToRegistry uri https://registry.npmjs.org/performance-now -1199 verbose addNameRange registry:https://registry.npmjs.org/performance-now not in flight; fetching -1200 silly cache afterAdd isstream@0.1.2 -1201 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json not in flight; writing -1202 http 200 https://registry.npmjs.org/tough-cookie -1203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1203 verbose headers 'content-type': 'application/json', -1203 verbose headers 'transfer-encoding': 'chunked', -1203 verbose headers connection: 'keep-alive', -1203 verbose headers 'set-cookie': -1203 verbose headers [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1203 verbose headers 'cf-ray': '59764fa518cb05e9-FRA', -1203 verbose headers age: '5655', -1203 verbose headers 'cache-control': 'public, max-age=300', -1203 verbose headers etag: 'W/"818fa172eb6f27e219e81140db530363"', -1203 verbose headers 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT', -1203 verbose headers vary: 'accept-encoding, accept', -1203 verbose headers 'cf-cache-status': 'HIT', -1203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1203 verbose headers server: 'cloudflare', -1203 verbose headers 'content-encoding': 'gzip', -1203 verbose headers 'cf-request-id': '02ddd01b2a000005e903b1d200000001' } -1204 silly get cb [ 200, -1204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1204 silly get 'content-type': 'application/json', -1204 silly get 'transfer-encoding': 'chunked', -1204 silly get connection: 'keep-alive', -1204 silly get 'set-cookie': -1204 silly get [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1204 silly get 'cf-ray': '59764fa518cb05e9-FRA', -1204 silly get age: '5655', -1204 silly get 'cache-control': 'public, max-age=300', -1204 silly get etag: 'W/"818fa172eb6f27e219e81140db530363"', -1204 silly get 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT', -1204 silly get vary: 'accept-encoding, accept', -1204 silly get 'cf-cache-status': 'HIT', -1204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1204 silly get server: 'cloudflare', -1204 silly get 'content-encoding': 'gzip', -1204 silly get 'cf-request-id': '02ddd01b2a000005e903b1d200000001' } ] -1205 verbose get saving tough-cookie to /home/christine/.npm/registry.npmjs.org/tough-cookie/.cache.json -1206 silly cache afterAdd json-stringify-safe@5.0.1 -1207 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json not in flight; writing -1208 silly resolveWithNewModule safe-buffer@5.2.1 checking installable status -1209 silly cache add args [ 'safe-buffer@^5.1.2', null ] -1210 verbose cache add spec safe-buffer@^5.1.2 -1211 silly cache add parsed spec Result { -1211 silly cache add raw: 'safe-buffer@^5.1.2', -1211 silly cache add scope: null, -1211 silly cache add name: 'safe-buffer', -1211 silly cache add rawSpec: '^5.1.2', -1211 silly cache add spec: '>=5.1.2 <6.0.0', -1211 silly cache add type: 'range' } -1212 silly addNamed safe-buffer@>=5.1.2 <6.0.0 -1213 verbose addNamed ">=5.1.2 <6.0.0" is a valid semver range for safe-buffer -1214 silly addNameRange { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: false } -1215 silly mapToRegistry name safe-buffer -1216 silly mapToRegistry using default registry -1217 silly mapToRegistry registry https://registry.npmjs.org/ -1218 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -1219 verbose addNameRange registry:https://registry.npmjs.org/safe-buffer not in flight; fetching -1220 http 200 https://registry.npmjs.org/mime-types -1221 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1221 verbose headers 'content-type': 'application/json', -1221 verbose headers 'transfer-encoding': 'chunked', -1221 verbose headers connection: 'keep-alive', -1221 verbose headers 'set-cookie': -1221 verbose headers [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1221 verbose headers 'cf-ray': '59764fa51e27c2ae-FRA', -1221 verbose headers age: '5656', -1221 verbose headers 'cache-control': 'public, max-age=300', -1221 verbose headers etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"', -1221 verbose headers 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT', -1221 verbose headers vary: 'accept-encoding, accept', -1221 verbose headers 'cf-cache-status': 'HIT', -1221 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1221 verbose headers server: 'cloudflare', -1221 verbose headers 'content-encoding': 'gzip', -1221 verbose headers 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' } -1222 silly get cb [ 200, -1222 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1222 silly get 'content-type': 'application/json', -1222 silly get 'transfer-encoding': 'chunked', -1222 silly get connection: 'keep-alive', -1222 silly get 'set-cookie': -1222 silly get [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1222 silly get 'cf-ray': '59764fa51e27c2ae-FRA', -1222 silly get age: '5656', -1222 silly get 'cache-control': 'public, max-age=300', -1222 silly get etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"', -1222 silly get 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT', -1222 silly get vary: 'accept-encoding, accept', -1222 silly get 'cf-cache-status': 'HIT', -1222 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1222 silly get server: 'cloudflare', -1222 silly get 'content-encoding': 'gzip', -1222 silly get 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' } ] -1223 verbose get saving mime-types to /home/christine/.npm/registry.npmjs.org/mime-types/.cache.json -1224 verbose get https://registry.npmjs.org/tunnel-agent not expired, no request -1225 silly addNameRange number 2 { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: true } -1226 silly addNameRange versions [ 'tunnel-agent', -1226 silly addNameRange [ '0.2.0', -1226 silly addNameRange '0.3.0', -1226 silly addNameRange '0.4.0', -1226 silly addNameRange '0.4.1', -1226 silly addNameRange '0.4.2', -1226 silly addNameRange '0.4.3', -1226 silly addNameRange '0.5.0', -1226 silly addNameRange '0.6.0' ] ] -1227 silly addNamed tunnel-agent@0.6.0 -1228 verbose addNamed "0.6.0" is a plain semver version for tunnel-agent -1229 silly resolveWithNewModule oauth-sign@0.9.0 checking installable status -1230 silly cache add args [ 'oauth-sign@~0.9.0', null ] -1231 verbose cache add spec oauth-sign@~0.9.0 -1232 silly cache add parsed spec Result { -1232 silly cache add raw: 'oauth-sign@~0.9.0', -1232 silly cache add scope: null, -1232 silly cache add name: 'oauth-sign', -1232 silly cache add rawSpec: '~0.9.0', -1232 silly cache add spec: '>=0.9.0 <0.10.0', -1232 silly cache add type: 'range' } -1233 silly addNamed oauth-sign@>=0.9.0 <0.10.0 -1234 verbose addNamed ">=0.9.0 <0.10.0" is a valid semver range for oauth-sign -1235 silly addNameRange { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: false } -1236 silly mapToRegistry name oauth-sign -1237 silly mapToRegistry using default registry -1238 silly mapToRegistry registry https://registry.npmjs.org/ -1239 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign -1240 verbose addNameRange registry:https://registry.npmjs.org/oauth-sign not in flight; fetching -1241 verbose get https://registry.npmjs.org/performance-now not expired, no request -1242 silly addNameRange number 2 { name: 'performance-now', -1242 silly addNameRange range: '>=2.1.0 <3.0.0', -1242 silly addNameRange hasData: true } -1243 silly addNameRange versions [ 'performance-now', -1243 silly addNameRange [ '0.1.0', -1243 silly addNameRange '0.1.1', -1243 silly addNameRange '0.1.2', -1243 silly addNameRange '0.1.3', -1243 silly addNameRange '0.1.4', -1243 silly addNameRange '0.2.0', -1243 silly addNameRange '1.0.0', -1243 silly addNameRange '1.0.1', -1243 silly addNameRange '1.0.2', -1243 silly addNameRange '2.0.0', -1243 silly addNameRange '2.1.0' ] ] -1244 silly addNamed performance-now@2.1.0 -1245 verbose addNamed "2.1.0" is a plain semver version for performance-now -1246 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json written -1247 http 200 https://registry.npmjs.org/uuid -1248 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1248 verbose headers 'content-type': 'application/json', -1248 verbose headers 'transfer-encoding': 'chunked', -1248 verbose headers connection: 'keep-alive', -1248 verbose headers 'set-cookie': -1248 verbose headers [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1248 verbose headers 'cf-ray': '59764fa5195d1f2d-FRA', -1248 verbose headers age: '5355', -1248 verbose headers 'cache-control': 'public, max-age=300', -1248 verbose headers etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"', -1248 verbose headers 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT', -1248 verbose headers vary: 'accept-encoding, accept', -1248 verbose headers 'cf-cache-status': 'HIT', -1248 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1248 verbose headers server: 'cloudflare', -1248 verbose headers 'content-encoding': 'gzip', -1248 verbose headers 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' } -1249 silly get cb [ 200, -1249 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1249 silly get 'content-type': 'application/json', -1249 silly get 'transfer-encoding': 'chunked', -1249 silly get connection: 'keep-alive', -1249 silly get 'set-cookie': -1249 silly get [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1249 silly get 'cf-ray': '59764fa5195d1f2d-FRA', -1249 silly get age: '5355', -1249 silly get 'cache-control': 'public, max-age=300', -1249 silly get etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"', -1249 silly get 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT', -1249 silly get vary: 'accept-encoding, accept', -1249 silly get 'cf-cache-status': 'HIT', -1249 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1249 silly get server: 'cloudflare', -1249 silly get 'content-encoding': 'gzip', -1249 silly get 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' } ] -1250 verbose get saving uuid to /home/christine/.npm/registry.npmjs.org/uuid/.cache.json -1251 verbose get https://registry.npmjs.org/safe-buffer not expired, no request -1252 silly addNameRange number 2 { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: true } -1253 silly addNameRange versions [ 'safe-buffer', -1253 silly addNameRange [ '1.0.0', -1253 silly addNameRange '2.0.0', -1253 silly addNameRange '3.0.0', -1253 silly addNameRange '4.0.0', -1253 silly addNameRange '5.0.0', -1253 silly addNameRange '5.0.1', -1253 silly addNameRange '5.1.0', -1253 silly addNameRange '5.1.1', -1253 silly addNameRange '5.1.2', -1253 silly addNameRange '5.2.0', -1253 silly addNameRange '5.2.1' ] ] -1254 silly addNamed safe-buffer@5.2.1 -1255 verbose addNamed "5.2.1" is a plain semver version for safe-buffer -1256 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json written -1257 verbose get https://registry.npmjs.org/oauth-sign not expired, no request -1258 silly addNameRange number 2 { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: true } -1259 silly addNameRange versions [ 'oauth-sign', -1259 silly addNameRange [ '0.2.0', -1259 silly addNameRange '0.3.0', -1259 silly addNameRange '0.4.0', -1259 silly addNameRange '0.5.0', -1259 silly addNameRange '0.6.0', -1259 silly addNameRange '0.7.0', -1259 silly addNameRange '0.8.0', -1259 silly addNameRange '0.8.1', -1259 silly addNameRange '0.8.2', -1259 silly addNameRange '0.9.0' ] ] -1260 silly addNamed oauth-sign@0.9.0 -1261 verbose addNamed "0.9.0" is a plain semver version for oauth-sign -1262 silly mapToRegistry name safe-buffer -1263 silly mapToRegistry using default registry -1264 silly mapToRegistry registry https://registry.npmjs.org/ -1265 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -1266 verbose addRemoteTarball https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding -1267 verbose addRemoteTarball [ 'https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz', -1267 verbose addRemoteTarball '1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6' ] -1268 silly resolveWithNewModule tough-cookie@2.5.0 checking installable status -1269 silly cache add args [ 'tough-cookie@~2.5.0', null ] -1270 verbose cache add spec tough-cookie@~2.5.0 -1271 silly cache add parsed spec Result { -1271 silly cache add raw: 'tough-cookie@~2.5.0', -1271 silly cache add scope: null, -1271 silly cache add name: 'tough-cookie', -1271 silly cache add rawSpec: '~2.5.0', -1271 silly cache add spec: '>=2.5.0 <2.6.0', -1271 silly cache add type: 'range' } -1272 silly addNamed tough-cookie@>=2.5.0 <2.6.0 -1273 verbose addNamed ">=2.5.0 <2.6.0" is a valid semver range for tough-cookie -1274 silly addNameRange { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: false } -1275 silly mapToRegistry name tough-cookie -1276 silly mapToRegistry using default registry -1277 silly mapToRegistry registry https://registry.npmjs.org/ -1278 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -1279 verbose addNameRange registry:https://registry.npmjs.org/tough-cookie not in flight; fetching -1280 silly cache afterAdd tunnel-agent@0.6.0 -1281 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json not in flight; writing -1282 silly cache afterAdd performance-now@2.1.0 -1283 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json not in flight; writing -1284 silly resolveWithNewModule mime-types@2.1.27 checking installable status -1285 silly cache add args [ 'mime-types@~2.1.19', null ] -1286 verbose cache add spec mime-types@~2.1.19 -1287 silly cache add parsed spec Result { -1287 silly cache add raw: 'mime-types@~2.1.19', -1287 silly cache add scope: null, -1287 silly cache add name: 'mime-types', -1287 silly cache add rawSpec: '~2.1.19', -1287 silly cache add spec: '>=2.1.19 <2.2.0', -1287 silly cache add type: 'range' } -1288 silly addNamed mime-types@>=2.1.19 <2.2.0 -1289 verbose addNamed ">=2.1.19 <2.2.0" is a valid semver range for mime-types -1290 silly addNameRange { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: false } -1291 silly mapToRegistry name mime-types -1292 silly mapToRegistry using default registry -1293 silly mapToRegistry registry https://registry.npmjs.org/ -1294 silly mapToRegistry uri https://registry.npmjs.org/mime-types -1295 verbose addNameRange registry:https://registry.npmjs.org/mime-types not in flight; fetching -1296 http 200 https://registry.npmjs.org/qs -1297 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1297 verbose headers 'content-type': 'application/json', -1297 verbose headers 'transfer-encoding': 'chunked', -1297 verbose headers connection: 'keep-alive', -1297 verbose headers 'set-cookie': -1297 verbose headers [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1297 verbose headers 'cf-ray': '59764fa5183d176a-FRA', -1297 verbose headers age: '5657', -1297 verbose headers 'cache-control': 'public, max-age=300', -1297 verbose headers etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"', -1297 verbose headers 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT', -1297 verbose headers vary: 'accept-encoding, accept', -1297 verbose headers 'cf-cache-status': 'HIT', -1297 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1297 verbose headers server: 'cloudflare', -1297 verbose headers 'content-encoding': 'gzip', -1297 verbose headers 'cf-request-id': '02ddd01b2a0000176a65b45200000001' } -1298 silly get cb [ 200, -1298 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1298 silly get 'content-type': 'application/json', -1298 silly get 'transfer-encoding': 'chunked', -1298 silly get connection: 'keep-alive', -1298 silly get 'set-cookie': -1298 silly get [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1298 silly get 'cf-ray': '59764fa5183d176a-FRA', -1298 silly get age: '5657', -1298 silly get 'cache-control': 'public, max-age=300', -1298 silly get etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"', -1298 silly get 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT', -1298 silly get vary: 'accept-encoding, accept', -1298 silly get 'cf-cache-status': 'HIT', -1298 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1298 silly get server: 'cloudflare', -1298 silly get 'content-encoding': 'gzip', -1298 silly get 'cf-request-id': '02ddd01b2a0000176a65b45200000001' } ] -1299 verbose get saving qs to /home/christine/.npm/registry.npmjs.org/qs/.cache.json -1300 info retry fetch attempt 1 at 13:48:57 -1301 info attempt registry request try #1 at 13:48:57 -1302 http fetch GET https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz -1303 verbose get https://registry.npmjs.org/tough-cookie not expired, no request -1304 silly addNameRange number 2 { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: true } -1305 silly addNameRange versions [ 'tough-cookie', -1305 silly addNameRange [ '0.9.0', -1305 silly addNameRange '0.9.1', -1305 silly addNameRange '0.9.3', -1305 silly addNameRange '0.9.4', -1305 silly addNameRange '0.9.5', -1305 silly addNameRange '0.9.6', -1305 silly addNameRange '0.9.7', -1305 silly addNameRange '0.9.8', -1305 silly addNameRange '0.9.9', -1305 silly addNameRange '0.9.11', -1305 silly addNameRange '0.9.12', -1305 silly addNameRange '0.9.13', -1305 silly addNameRange '0.9.14', -1305 silly addNameRange '0.9.15', -1305 silly addNameRange '0.10.0', -1305 silly addNameRange '0.11.0', -1305 silly addNameRange '0.12.0', -1305 silly addNameRange '0.12.1', -1305 silly addNameRange '0.13.0', -1305 silly addNameRange '1.0.0', -1305 silly addNameRange '1.1.0', -1305 silly addNameRange '1.2.0', -1305 silly addNameRange '2.0.0', -1305 silly addNameRange '2.1.0', -1305 silly addNameRange '2.2.0', -1305 silly addNameRange '2.2.1', -1305 silly addNameRange '2.2.2', -1305 silly addNameRange '2.3.0', -1305 silly addNameRange '2.3.1', -1305 silly addNameRange '2.3.2', -1305 silly addNameRange '2.3.3', -1305 silly addNameRange '2.3.4', -1305 silly addNameRange '2.4.2', -1305 silly addNameRange '2.4.3', -1305 silly addNameRange '2.5.0', -1305 silly addNameRange '3.0.0', -1305 silly addNameRange '3.0.1', -1305 silly addNameRange '4.0.0' ] ] -1306 silly addNamed tough-cookie@2.5.0 -1307 verbose addNamed "2.5.0" is a plain semver version for tough-cookie -1308 silly cache afterAdd oauth-sign@0.9.0 -1309 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json not in flight; writing -1310 silly resolveWithNewModule uuid@3.4.0 checking installable status -1311 silly cache add args [ 'uuid@^3.3.2', null ] -1312 verbose cache add spec uuid@^3.3.2 -1313 silly cache add parsed spec Result { -1313 silly cache add raw: 'uuid@^3.3.2', -1313 silly cache add scope: null, -1313 silly cache add name: 'uuid', -1313 silly cache add rawSpec: '^3.3.2', -1313 silly cache add spec: '>=3.3.2 <4.0.0', -1313 silly cache add type: 'range' } -1314 silly addNamed uuid@>=3.3.2 <4.0.0 -1315 verbose addNamed ">=3.3.2 <4.0.0" is a valid semver range for uuid -1316 silly addNameRange { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: false } -1317 silly mapToRegistry name uuid -1318 silly mapToRegistry using default registry -1319 silly mapToRegistry registry https://registry.npmjs.org/ -1320 silly mapToRegistry uri https://registry.npmjs.org/uuid -1321 verbose addNameRange registry:https://registry.npmjs.org/uuid not in flight; fetching -1322 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json written -1323 silly mapToRegistry name tough-cookie -1324 silly mapToRegistry using default registry -1325 silly mapToRegistry registry https://registry.npmjs.org/ -1326 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -1327 verbose addRemoteTarball https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding -1328 verbose addRemoteTarball [ 'https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz', -1328 verbose addRemoteTarball 'cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2' ] -1329 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json written -1330 verbose get https://registry.npmjs.org/mime-types not expired, no request -1331 silly addNameRange number 2 { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: true } -1332 silly addNameRange versions [ 'mime-types', -1332 silly addNameRange [ '0.1.0', -1332 silly addNameRange '1.0.0', -1332 silly addNameRange '1.0.1', -1332 silly addNameRange '1.0.2', -1332 silly addNameRange '2.0.0', -1332 silly addNameRange '2.0.1', -1332 silly addNameRange '2.0.2', -1332 silly addNameRange '2.0.3', -1332 silly addNameRange '2.0.4', -1332 silly addNameRange '2.0.5', -1332 silly addNameRange '2.0.6', -1332 silly addNameRange '2.0.7', -1332 silly addNameRange '2.0.8', -1332 silly addNameRange '2.0.9', -1332 silly addNameRange '2.0.10', -1332 silly addNameRange '2.0.11', -1332 silly addNameRange '2.0.12', -1332 silly addNameRange '2.0.13', -1332 silly addNameRange '2.0.14', -1332 silly addNameRange '2.1.0', -1332 silly addNameRange '2.1.1', -1332 silly addNameRange '2.1.2', -1332 silly addNameRange '2.1.3', -1332 silly addNameRange '2.1.4', -1332 silly addNameRange '2.1.5', -1332 silly addNameRange '2.1.6', -1332 silly addNameRange '2.1.7', -1332 silly addNameRange '2.1.8', -1332 silly addNameRange '2.1.9', -1332 silly addNameRange '2.1.10', -1332 silly addNameRange '2.1.11', -1332 silly addNameRange '2.1.12', -1332 silly addNameRange '2.1.13', -1332 silly addNameRange '2.1.14', -1332 silly addNameRange '2.1.15', -1332 silly addNameRange '2.1.16', -1332 silly addNameRange '2.1.17', -1332 silly addNameRange '2.1.18', -1332 silly addNameRange '2.1.19', -1332 silly addNameRange '2.1.20', -1332 silly addNameRange '2.1.21', -1332 silly addNameRange '2.1.22', -1332 silly addNameRange '2.1.23', -1332 silly addNameRange '2.1.24', -1332 silly addNameRange '2.1.25', -1332 silly addNameRange '2.1.26', -1332 silly addNameRange '2.1.27' ] ] -1333 silly addNamed mime-types@2.1.27 -1334 verbose addNamed "2.1.27" is a plain semver version for mime-types -1335 silly mapToRegistry name mime-types -1336 silly mapToRegistry using default registry -1337 silly mapToRegistry registry https://registry.npmjs.org/ -1338 silly mapToRegistry uri https://registry.npmjs.org/mime-types -1339 verbose addRemoteTarball https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding -1340 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz', -1340 verbose addRemoteTarball '47949f98e279ea53119f5722e0f34e529bec009f' ] -1341 info retry fetch attempt 1 at 13:48:57 -1342 info attempt registry request try #1 at 13:48:57 -1343 http fetch GET https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz -1344 verbose get https://registry.npmjs.org/uuid not expired, no request -1345 silly addNameRange number 2 { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: true } -1346 silly addNameRange versions [ 'uuid', -1346 silly addNameRange [ '0.0.1', -1346 silly addNameRange '0.0.2', -1346 silly addNameRange '1.4.0', -1346 silly addNameRange '1.4.1', -1346 silly addNameRange '1.4.2', -1346 silly addNameRange '2.0.0', -1346 silly addNameRange '2.0.1', -1346 silly addNameRange '2.0.2', -1346 silly addNameRange '2.0.3', -1346 silly addNameRange '3.0.0', -1346 silly addNameRange '3.0.1', -1346 silly addNameRange '3.1.0', -1346 silly addNameRange '3.2.0', -1346 silly addNameRange '3.2.1', -1346 silly addNameRange '3.3.0', -1346 silly addNameRange '3.3.2', -1346 silly addNameRange '3.3.3', -1346 silly addNameRange '3.4.0', -1346 silly addNameRange '7.0.0-beta.0', -1346 silly addNameRange '7.0.0', -1346 silly addNameRange '7.0.1', -1346 silly addNameRange '7.0.2-beta.0', -1346 silly addNameRange '7.0.2', -1346 silly addNameRange '7.0.3', -1346 silly addNameRange '8.0.0-beta.0', -1346 silly addNameRange '8.0.0', -1346 silly addNameRange '8.1.0' ] ] -1347 silly addNamed uuid@3.4.0 -1348 verbose addNamed "3.4.0" is a plain semver version for uuid -1349 silly resolveWithNewModule qs@6.5.2 checking installable status -1350 silly cache add args [ 'qs@~6.5.2', null ] -1351 verbose cache add spec qs@~6.5.2 -1352 silly cache add parsed spec Result { -1352 silly cache add raw: 'qs@~6.5.2', -1352 silly cache add scope: null, -1352 silly cache add name: 'qs', -1352 silly cache add rawSpec: '~6.5.2', -1352 silly cache add spec: '>=6.5.2 <6.6.0', -1352 silly cache add type: 'range' } -1353 silly addNamed qs@>=6.5.2 <6.6.0 -1354 verbose addNamed ">=6.5.2 <6.6.0" is a valid semver range for qs -1355 silly addNameRange { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: false } -1356 silly mapToRegistry name qs -1357 silly mapToRegistry using default registry -1358 silly mapToRegistry registry https://registry.npmjs.org/ -1359 silly mapToRegistry uri https://registry.npmjs.org/qs -1360 verbose addNameRange registry:https://registry.npmjs.org/qs not in flight; fetching -1361 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json written -1362 http fetch 200 https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz -1363 info retry fetch attempt 1 at 13:48:57 -1364 info attempt registry request try #1 at 13:48:57 -1365 http fetch GET https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz -1366 verbose get https://registry.npmjs.org/qs not expired, no request -1367 silly addNameRange number 2 { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: true } -1368 silly addNameRange versions [ 'qs', -1368 silly addNameRange [ '0.0.1', -1368 silly addNameRange '0.0.2', -1368 silly addNameRange '0.0.3', -1368 silly addNameRange '0.0.4', -1368 silly addNameRange '0.0.5', -1368 silly addNameRange '0.0.6', -1368 silly addNameRange '0.0.7', -1368 silly addNameRange '0.1.0', -1368 silly addNameRange '0.2.0', -1368 silly addNameRange '0.3.0', -1368 silly addNameRange '0.3.1', -1368 silly addNameRange '0.3.2', -1368 silly addNameRange '0.4.0', -1368 silly addNameRange '0.4.1', -1368 silly addNameRange '0.4.2', -1368 silly addNameRange '0.5.0', -1368 silly addNameRange '0.5.1', -1368 silly addNameRange '0.5.2', -1368 silly addNameRange '0.5.3', -1368 silly addNameRange '0.5.4', -1368 silly addNameRange '0.5.5', -1368 silly addNameRange '0.5.6', -1368 silly addNameRange '0.6.0', -1368 silly addNameRange '0.6.1', -1368 silly addNameRange '0.6.2', -1368 silly addNameRange '0.6.3', -1368 silly addNameRange '0.6.4', -1368 silly addNameRange '0.6.5', -1368 silly addNameRange '0.6.6', -1368 silly addNameRange '1.0.0', -1368 silly addNameRange '1.0.1', -1368 silly addNameRange '1.0.2', -1368 silly addNameRange '1.1.0', -1368 silly addNameRange '1.2.0', -1368 silly addNameRange '1.2.1', -1368 silly addNameRange '1.2.2', -1368 silly addNameRange '2.0.0', -1368 silly addNameRange '2.1.0', -1368 silly addNameRange '2.2.0', -1368 silly addNameRange '2.2.1', -1368 silly addNameRange '2.2.2', -1368 silly addNameRange '2.2.3', -1368 silly addNameRange '2.2.4', -1368 silly addNameRange '2.2.5', -1368 silly addNameRange '2.3.0', -1368 silly addNameRange '2.3.1', -1368 silly addNameRange '2.3.2', -1368 silly addNameRange '2.3.3', -1368 silly addNameRange '2.4.0', -1368 silly addNameRange '2.4.1', -1368 silly addNameRange '2.4.2', -1368 silly addNameRange '3.0.0', -1368 silly addNameRange '3.1.0', -1368 silly addNameRange '4.0.0', -1368 silly addNameRange '5.0.0', -1368 silly addNameRange '5.1.0', -1368 silly addNameRange '5.2.0', -1368 silly addNameRange '6.0.0', -1368 silly addNameRange '6.0.1', -1368 silly addNameRange '6.0.2', -1368 silly addNameRange '6.1.0', -1368 silly addNameRange '6.2.0', -1368 silly addNameRange '5.2.1', -1368 silly addNameRange '6.2.1', -1368 silly addNameRange '6.3.0', -1368 silly addNameRange '6.3.1', -1368 silly addNameRange '6.1.1', -1368 silly addNameRange '6.0.3', -1368 silly addNameRange '6.2.2', -1368 silly addNameRange '6.4.0', -1368 silly addNameRange '6.3.2', -1368 silly addNameRange '6.2.3', -1368 silly addNameRange '6.1.2', -1368 silly addNameRange '6.0.4', -1368 silly addNameRange '6.5.0', -1368 silly addNameRange '6.5.1', -1368 silly addNameRange '6.5.2', -1368 silly addNameRange '6.6.0', -1368 silly addNameRange '6.7.0', -1368 silly addNameRange '6.8.0', -1368 silly addNameRange '6.9.0', -1368 silly addNameRange '6.9.1', -1368 silly addNameRange '6.9.2', -1368 silly addNameRange '6.8.1', -1368 silly addNameRange '6.7.1', -1368 silly addNameRange '6.7.2', -1368 silly addNameRange '6.8.2', -1368 silly addNameRange '6.9.3', -1368 silly addNameRange '6.9.4' ] ] -1369 silly addNamed qs@6.5.2 -1370 verbose addNamed "6.5.2" is a plain semver version for qs -1371 silly fetchAndShaCheck shasum 1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6 -1372 http fetch 200 https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz -1373 silly cache afterAdd uuid@3.4.0 -1374 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json not in flight; writing -1375 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding -1376 verbose addTmpTarball already have metadata; skipping unpack for safe-buffer@5.2.1 -1377 silly cache afterAdd qs@6.5.2 -1378 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json not in flight; writing -1379 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json written -1380 silly fetchAndShaCheck shasum cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2 -1381 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json written -1382 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding -1383 verbose addTmpTarball already have metadata; skipping unpack for tough-cookie@2.5.0 -1384 silly cache afterAdd safe-buffer@5.2.1 -1385 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json not in flight; writing -1386 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json written -1387 silly cache afterAdd tough-cookie@2.5.0 -1388 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json not in flight; writing -1389 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json written -1390 http fetch 200 https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz -1391 silly fetchAndShaCheck shasum 47949f98e279ea53119f5722e0f34e529bec009f -1392 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding -1393 verbose addTmpTarball already have metadata; skipping unpack for mime-types@2.1.27 -1394 silly cache afterAdd mime-types@2.1.27 -1395 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json not in flight; writing -1396 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json written -1397 silly fetchNamedPackageData delayed-stream -1398 silly mapToRegistry name delayed-stream -1399 silly mapToRegistry using default registry -1400 silly mapToRegistry registry https://registry.npmjs.org/ -1401 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream -1402 verbose request uri https://registry.npmjs.org/delayed-stream -1403 verbose request no auth needed -1404 info attempt registry request try #1 at 13:48:57 -1405 verbose etag W/"d93fb1e0b12584f566e6f17a70c49721" -1406 verbose lastModified Sat, 26 May 2018 21:57:10 GMT -1407 http request GET https://registry.npmjs.org/delayed-stream -1408 http 304 https://registry.npmjs.org/delayed-stream -1409 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1409 verbose headers connection: 'keep-alive', -1409 verbose headers 'set-cookie': -1409 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1409 verbose headers 'cf-ray': '59764fa5ecd6325c-FRA', -1409 verbose headers age: '5355', -1409 verbose headers 'cache-control': 'public, max-age=300', -1409 verbose headers etag: '"d93fb1e0b12584f566e6f17a70c49721"', -1409 verbose headers 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT', -1409 verbose headers vary: 'Accept-Encoding', -1409 verbose headers 'cf-cache-status': 'HIT', -1409 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1409 verbose headers server: 'cloudflare', -1409 verbose headers 'cf-request-id': '02ddd01baf0000325c4c82b200000001' } -1410 silly get cb [ 304, -1410 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1410 silly get connection: 'keep-alive', -1410 silly get 'set-cookie': -1410 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1410 silly get 'cf-ray': '59764fa5ecd6325c-FRA', -1410 silly get age: '5355', -1410 silly get 'cache-control': 'public, max-age=300', -1410 silly get etag: '"d93fb1e0b12584f566e6f17a70c49721"', -1410 silly get 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT', -1410 silly get vary: 'Accept-Encoding', -1410 silly get 'cf-cache-status': 'HIT', -1410 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1410 silly get server: 'cloudflare', -1410 silly get 'cf-request-id': '02ddd01baf0000325c4c82b200000001' } ] -1411 verbose etag https://registry.npmjs.org/delayed-stream from cache -1412 verbose get saving delayed-stream to /home/christine/.npm/registry.npmjs.org/delayed-stream/.cache.json -1413 silly resolveWithNewModule delayed-stream@1.0.0 checking installable status -1414 silly cache add args [ 'delayed-stream@~1.0.0', null ] -1415 verbose cache add spec delayed-stream@~1.0.0 -1416 silly cache add parsed spec Result { -1416 silly cache add raw: 'delayed-stream@~1.0.0', -1416 silly cache add scope: null, -1416 silly cache add name: 'delayed-stream', -1416 silly cache add rawSpec: '~1.0.0', -1416 silly cache add spec: '>=1.0.0 <1.1.0', -1416 silly cache add type: 'range' } -1417 silly addNamed delayed-stream@>=1.0.0 <1.1.0 -1418 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for delayed-stream -1419 silly addNameRange { name: 'delayed-stream', -1419 silly addNameRange range: '>=1.0.0 <1.1.0', -1419 silly addNameRange hasData: false } -1420 silly mapToRegistry name delayed-stream -1421 silly mapToRegistry using default registry -1422 silly mapToRegistry registry https://registry.npmjs.org/ -1423 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream -1424 verbose addNameRange registry:https://registry.npmjs.org/delayed-stream not in flight; fetching -1425 verbose get https://registry.npmjs.org/delayed-stream not expired, no request -1426 silly addNameRange number 2 { name: 'delayed-stream', -1426 silly addNameRange range: '>=1.0.0 <1.1.0', -1426 silly addNameRange hasData: true } -1427 silly addNameRange versions [ 'delayed-stream', -1427 silly addNameRange [ '0.0.0', -1427 silly addNameRange '0.0.1', -1427 silly addNameRange '0.0.2', -1427 silly addNameRange '0.0.3', -1427 silly addNameRange '0.0.4', -1427 silly addNameRange '0.0.5', -1427 silly addNameRange '0.0.6', -1427 silly addNameRange '0.0.7', -1427 silly addNameRange '1.0.0' ] ] -1428 silly addNamed delayed-stream@1.0.0 -1429 verbose addNamed "1.0.0" is a plain semver version for delayed-stream -1430 silly cache afterAdd delayed-stream@1.0.0 -1431 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json not in flight; writing -1432 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json written -1433 silly fetchNamedPackageData asynckit -1434 silly mapToRegistry name asynckit -1435 silly mapToRegistry using default registry -1436 silly mapToRegistry registry https://registry.npmjs.org/ -1437 silly mapToRegistry uri https://registry.npmjs.org/asynckit -1438 verbose request uri https://registry.npmjs.org/asynckit -1439 verbose request no auth needed -1440 info attempt registry request try #1 at 13:48:57 -1441 verbose etag W/"34349b180d8fff99867769eadfb4b93e" -1442 verbose lastModified Sat, 26 May 2018 17:31:47 GMT -1443 http request GET https://registry.npmjs.org/asynckit -1444 http 304 https://registry.npmjs.org/asynckit -1445 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1445 verbose headers connection: 'keep-alive', -1445 verbose headers 'set-cookie': -1445 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1445 verbose headers 'cf-ray': '59764fa64d096347-FRA', -1445 verbose headers age: '5354', -1445 verbose headers 'cache-control': 'public, max-age=300', -1445 verbose headers etag: '"34349b180d8fff99867769eadfb4b93e"', -1445 verbose headers 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT', -1445 verbose headers vary: 'Accept-Encoding', -1445 verbose headers 'cf-cache-status': 'HIT', -1445 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1445 verbose headers server: 'cloudflare', -1445 verbose headers 'cf-request-id': '02ddd01be900006347e88c6200000001' } -1446 silly get cb [ 304, -1446 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1446 silly get connection: 'keep-alive', -1446 silly get 'set-cookie': -1446 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1446 silly get 'cf-ray': '59764fa64d096347-FRA', -1446 silly get age: '5354', -1446 silly get 'cache-control': 'public, max-age=300', -1446 silly get etag: '"34349b180d8fff99867769eadfb4b93e"', -1446 silly get 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT', -1446 silly get vary: 'Accept-Encoding', -1446 silly get 'cf-cache-status': 'HIT', -1446 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1446 silly get server: 'cloudflare', -1446 silly get 'cf-request-id': '02ddd01be900006347e88c6200000001' } ] -1447 verbose etag https://registry.npmjs.org/asynckit from cache -1448 verbose get saving asynckit to /home/christine/.npm/registry.npmjs.org/asynckit/.cache.json -1449 silly resolveWithNewModule asynckit@0.4.0 checking installable status -1450 silly cache add args [ 'asynckit@^0.4.0', null ] -1451 verbose cache add spec asynckit@^0.4.0 -1452 silly cache add parsed spec Result { -1452 silly cache add raw: 'asynckit@^0.4.0', -1452 silly cache add scope: null, -1452 silly cache add name: 'asynckit', -1452 silly cache add rawSpec: '^0.4.0', -1452 silly cache add spec: '>=0.4.0 <0.5.0', -1452 silly cache add type: 'range' } -1453 silly addNamed asynckit@>=0.4.0 <0.5.0 -1454 verbose addNamed ">=0.4.0 <0.5.0" is a valid semver range for asynckit -1455 silly addNameRange { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: false } -1456 silly mapToRegistry name asynckit -1457 silly mapToRegistry using default registry -1458 silly mapToRegistry registry https://registry.npmjs.org/ -1459 silly mapToRegistry uri https://registry.npmjs.org/asynckit -1460 verbose addNameRange registry:https://registry.npmjs.org/asynckit not in flight; fetching -1461 verbose get https://registry.npmjs.org/asynckit not expired, no request -1462 silly addNameRange number 2 { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: true } -1463 silly addNameRange versions [ 'asynckit', [ '0.1.0', '0.2.0', '0.3.0', '0.4.0' ] ] -1464 silly addNamed asynckit@0.4.0 -1465 verbose addNamed "0.4.0" is a plain semver version for asynckit -1466 silly cache afterAdd asynckit@0.4.0 -1467 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json not in flight; writing -1468 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json written -1469 silly fetchNamedPackageData mime-db -1470 silly mapToRegistry name mime-db -1471 silly mapToRegistry using default registry -1472 silly mapToRegistry registry https://registry.npmjs.org/ -1473 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1474 verbose request uri https://registry.npmjs.org/mime-db -1475 verbose request no auth needed -1476 info attempt registry request try #1 at 13:48:57 -1477 verbose etag W/"2b27fd56fd1f376697dd3c190a16cbca" -1478 verbose lastModified Mon, 06 Jan 2020 03:24:41 GMT -1479 http request GET https://registry.npmjs.org/mime-db -1480 http 200 https://registry.npmjs.org/mime-db -1481 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1481 verbose headers 'content-type': 'application/json', -1481 verbose headers 'transfer-encoding': 'chunked', -1481 verbose headers connection: 'keep-alive', -1481 verbose headers 'set-cookie': -1481 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1481 verbose headers 'cf-ray': '59764fa68978648b-FRA', -1481 verbose headers age: '5355', -1481 verbose headers 'cache-control': 'public, max-age=300', -1481 verbose headers etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"', -1481 verbose headers 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT', -1481 verbose headers vary: 'accept-encoding, accept', -1481 verbose headers 'cf-cache-status': 'HIT', -1481 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1481 verbose headers server: 'cloudflare', -1481 verbose headers 'content-encoding': 'gzip', -1481 verbose headers 'cf-request-id': '02ddd01c160000648bda012200000001' } -1482 silly get cb [ 200, -1482 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1482 silly get 'content-type': 'application/json', -1482 silly get 'transfer-encoding': 'chunked', -1482 silly get connection: 'keep-alive', -1482 silly get 'set-cookie': -1482 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1482 silly get 'cf-ray': '59764fa68978648b-FRA', -1482 silly get age: '5355', -1482 silly get 'cache-control': 'public, max-age=300', -1482 silly get etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"', -1482 silly get 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT', -1482 silly get vary: 'accept-encoding, accept', -1482 silly get 'cf-cache-status': 'HIT', -1482 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1482 silly get server: 'cloudflare', -1482 silly get 'content-encoding': 'gzip', -1482 silly get 'cf-request-id': '02ddd01c160000648bda012200000001' } ] -1483 verbose get saving mime-db to /home/christine/.npm/registry.npmjs.org/mime-db/.cache.json -1484 silly resolveWithNewModule mime-db@1.44.0 checking installable status -1485 silly cache add args [ 'mime-db@1.44.0', null ] -1486 verbose cache add spec mime-db@1.44.0 -1487 silly cache add parsed spec Result { -1487 silly cache add raw: 'mime-db@1.44.0', -1487 silly cache add scope: null, -1487 silly cache add name: 'mime-db', -1487 silly cache add rawSpec: '1.44.0', -1487 silly cache add spec: '1.44.0', -1487 silly cache add type: 'version' } -1488 silly addNamed mime-db@1.44.0 -1489 verbose addNamed "1.44.0" is a plain semver version for mime-db -1490 silly mapToRegistry name mime-db -1491 silly mapToRegistry using default registry -1492 silly mapToRegistry registry https://registry.npmjs.org/ -1493 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1494 verbose addNameVersion registry:https://registry.npmjs.org/mime-db not in flight; fetching -1495 verbose get https://registry.npmjs.org/mime-db not expired, no request -1496 silly mapToRegistry name mime-db -1497 silly mapToRegistry using default registry -1498 silly mapToRegistry registry https://registry.npmjs.org/ -1499 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1500 verbose addRemoteTarball https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding -1501 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz', -1501 verbose addRemoteTarball 'fa11c5eb0aca1334b4233cb4d52f10c5a6272f92' ] -1502 info retry fetch attempt 1 at 13:48:58 -1503 info attempt registry request try #1 at 13:48:58 -1504 http fetch GET https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz -1505 http fetch 200 https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz -1506 silly fetchAndShaCheck shasum fa11c5eb0aca1334b4233cb4d52f10c5a6272f92 -1507 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding -1508 verbose addTmpTarball already have metadata; skipping unpack for mime-db@1.44.0 -1509 silly cache afterAdd mime-db@1.44.0 -1510 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json not in flight; writing -1511 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json written -1512 silly fetchNamedPackageData ajv -1513 silly mapToRegistry name ajv -1514 silly mapToRegistry using default registry -1515 silly mapToRegistry registry https://registry.npmjs.org/ -1516 silly mapToRegistry uri https://registry.npmjs.org/ajv -1517 silly fetchNamedPackageData har-schema -1518 silly mapToRegistry name har-schema -1519 silly mapToRegistry using default registry -1520 silly mapToRegistry registry https://registry.npmjs.org/ -1521 silly mapToRegistry uri https://registry.npmjs.org/har-schema -1522 verbose request uri https://registry.npmjs.org/har-schema -1523 verbose request no auth needed -1524 info attempt registry request try #1 at 13:48:58 -1525 verbose etag W/"63c48c25d01ab9ec3e3fb5fe89f0600c" -1526 verbose lastModified Tue, 08 Jan 2019 06:13:01 GMT -1527 http request GET https://registry.npmjs.org/har-schema -1528 verbose request uri https://registry.npmjs.org/ajv -1529 verbose request no auth needed -1530 info attempt registry request try #1 at 13:48:58 -1531 verbose etag W/"da116ce9064cf3ae300f7c5410f85976" -1532 verbose lastModified Sat, 22 Feb 2020 13:51:53 GMT -1533 http request GET https://registry.npmjs.org/ajv -1534 http 304 https://registry.npmjs.org/har-schema -1535 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1535 verbose headers connection: 'keep-alive', -1535 verbose headers 'set-cookie': -1535 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1535 verbose headers 'cf-ray': '59764fa77b11175a-FRA', -1535 verbose headers age: '5352', -1535 verbose headers 'cache-control': 'public, max-age=300', -1535 verbose headers etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"', -1535 verbose headers 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT', -1535 verbose headers vary: 'Accept-Encoding', -1535 verbose headers 'cf-cache-status': 'HIT', -1535 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1535 verbose headers server: 'cloudflare', -1535 verbose headers 'cf-request-id': '02ddd01caf0000175a1e21a200000001' } -1536 silly get cb [ 304, -1536 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1536 silly get connection: 'keep-alive', -1536 silly get 'set-cookie': -1536 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1536 silly get 'cf-ray': '59764fa77b11175a-FRA', -1536 silly get age: '5352', -1536 silly get 'cache-control': 'public, max-age=300', -1536 silly get etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"', -1536 silly get 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT', -1536 silly get vary: 'Accept-Encoding', -1536 silly get 'cf-cache-status': 'HIT', -1536 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1536 silly get server: 'cloudflare', -1536 silly get 'cf-request-id': '02ddd01caf0000175a1e21a200000001' } ] -1537 verbose etag https://registry.npmjs.org/har-schema from cache -1538 verbose get saving har-schema to /home/christine/.npm/registry.npmjs.org/har-schema/.cache.json -1539 silly resolveWithNewModule har-schema@2.0.0 checking installable status -1540 silly cache add args [ 'har-schema@^2.0.0', null ] -1541 verbose cache add spec har-schema@^2.0.0 -1542 silly cache add parsed spec Result { -1542 silly cache add raw: 'har-schema@^2.0.0', -1542 silly cache add scope: null, -1542 silly cache add name: 'har-schema', -1542 silly cache add rawSpec: '^2.0.0', -1542 silly cache add spec: '>=2.0.0 <3.0.0', -1542 silly cache add type: 'range' } -1543 silly addNamed har-schema@>=2.0.0 <3.0.0 -1544 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for har-schema -1545 silly addNameRange { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: false } -1546 silly mapToRegistry name har-schema -1547 silly mapToRegistry using default registry -1548 silly mapToRegistry registry https://registry.npmjs.org/ -1549 silly mapToRegistry uri https://registry.npmjs.org/har-schema -1550 verbose addNameRange registry:https://registry.npmjs.org/har-schema not in flight; fetching -1551 verbose get https://registry.npmjs.org/har-schema not expired, no request -1552 silly addNameRange number 2 { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: true } -1553 silly addNameRange versions [ 'har-schema', -1553 silly addNameRange [ '0.0.1', -1553 silly addNameRange '0.1.0', -1553 silly addNameRange '0.2.0', -1553 silly addNameRange '1.0.0', -1553 silly addNameRange '1.0.1', -1553 silly addNameRange '1.0.2', -1553 silly addNameRange '1.0.3', -1553 silly addNameRange '1.0.4', -1553 silly addNameRange '1.0.5', -1553 silly addNameRange '2.0.0' ] ] -1554 silly addNamed har-schema@2.0.0 -1555 verbose addNamed "2.0.0" is a plain semver version for har-schema -1556 silly cache afterAdd har-schema@2.0.0 -1557 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json not in flight; writing -1558 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json written -1559 http 200 https://registry.npmjs.org/ajv -1560 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1560 verbose headers 'content-type': 'application/json', -1560 verbose headers 'transfer-encoding': 'chunked', -1560 verbose headers connection: 'keep-alive', -1560 verbose headers 'set-cookie': -1560 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1560 verbose headers 'cf-ray': '59764fa798ddd715-FRA', -1560 verbose headers age: '5352', -1560 verbose headers 'cache-control': 'public, max-age=300', -1560 verbose headers etag: 'W/"ba29f88f088d4acc36748d3083785459"', -1560 verbose headers 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT', -1560 verbose headers vary: 'accept-encoding, accept', -1560 verbose headers 'cf-cache-status': 'HIT', -1560 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1560 verbose headers server: 'cloudflare', -1560 verbose headers 'content-encoding': 'gzip', -1560 verbose headers 'cf-request-id': '02ddd01cc30000d715c1209200000001' } -1561 silly get cb [ 200, -1561 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1561 silly get 'content-type': 'application/json', -1561 silly get 'transfer-encoding': 'chunked', -1561 silly get connection: 'keep-alive', -1561 silly get 'set-cookie': -1561 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1561 silly get 'cf-ray': '59764fa798ddd715-FRA', -1561 silly get age: '5352', -1561 silly get 'cache-control': 'public, max-age=300', -1561 silly get etag: 'W/"ba29f88f088d4acc36748d3083785459"', -1561 silly get 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT', -1561 silly get vary: 'accept-encoding, accept', -1561 silly get 'cf-cache-status': 'HIT', -1561 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1561 silly get server: 'cloudflare', -1561 silly get 'content-encoding': 'gzip', -1561 silly get 'cf-request-id': '02ddd01cc30000d715c1209200000001' } ] -1562 verbose get saving ajv to /home/christine/.npm/registry.npmjs.org/ajv/.cache.json -1563 silly resolveWithNewModule ajv@6.12.2 checking installable status -1564 silly cache add args [ 'ajv@^6.5.5', null ] -1565 verbose cache add spec ajv@^6.5.5 -1566 silly cache add parsed spec Result { -1566 silly cache add raw: 'ajv@^6.5.5', -1566 silly cache add scope: null, -1566 silly cache add name: 'ajv', -1566 silly cache add rawSpec: '^6.5.5', -1566 silly cache add spec: '>=6.5.5 <7.0.0', -1566 silly cache add type: 'range' } -1567 silly addNamed ajv@>=6.5.5 <7.0.0 -1568 verbose addNamed ">=6.5.5 <7.0.0" is a valid semver range for ajv -1569 silly addNameRange { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: false } -1570 silly mapToRegistry name ajv -1571 silly mapToRegistry using default registry -1572 silly mapToRegistry registry https://registry.npmjs.org/ -1573 silly mapToRegistry uri https://registry.npmjs.org/ajv -1574 verbose addNameRange registry:https://registry.npmjs.org/ajv not in flight; fetching -1575 verbose get https://registry.npmjs.org/ajv not expired, no request -1576 silly addNameRange number 2 { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: true } -1577 silly addNameRange versions [ 'ajv', -1577 silly addNameRange [ '0.0.4', -1577 silly addNameRange '0.0.5', -1577 silly addNameRange '0.0.6', -1577 silly addNameRange '0.0.7', -1577 silly addNameRange '0.0.8', -1577 silly addNameRange '0.0.9', -1577 silly addNameRange '0.0.10', -1577 silly addNameRange '0.0.11', -1577 silly addNameRange '0.0.12', -1577 silly addNameRange '0.1.0', -1577 silly addNameRange '0.1.1', -1577 silly addNameRange '0.1.2', -1577 silly addNameRange '0.1.3', -1577 silly addNameRange '0.1.4', -1577 silly addNameRange '0.1.5', -1577 silly addNameRange '0.1.6', -1577 silly addNameRange '0.1.7', -1577 silly addNameRange '0.1.8', -1577 silly addNameRange '0.1.9', -1577 silly addNameRange '0.1.10', -1577 silly addNameRange '0.1.11', -1577 silly addNameRange '0.1.12', -1577 silly addNameRange '0.1.13', -1577 silly addNameRange '0.1.14', -1577 silly addNameRange '0.1.15', -1577 silly addNameRange '0.1.16', -1577 silly addNameRange '0.2.0', -1577 silly addNameRange '0.2.1', -1577 silly addNameRange '0.2.2', -1577 silly addNameRange '0.2.3', -1577 silly addNameRange '0.2.4', -1577 silly addNameRange '0.2.5', -1577 silly addNameRange '0.2.6', -1577 silly addNameRange '0.2.7', -1577 silly addNameRange '0.2.8', -1577 silly addNameRange '0.2.9', -1577 silly addNameRange '0.3.0', -1577 silly addNameRange '0.3.1', -1577 silly addNameRange '0.3.2', -1577 silly addNameRange '0.3.3', -1577 silly addNameRange '0.3.4', -1577 silly addNameRange '0.3.5', -1577 silly addNameRange '0.3.6', -1577 silly addNameRange '0.3.7', -1577 silly addNameRange '0.3.8', -1577 silly addNameRange '0.3.11', -1577 silly addNameRange '0.3.12', -1577 silly addNameRange '0.4.0', -1577 silly addNameRange '0.4.1', -1577 silly addNameRange '0.4.2', -1577 silly addNameRange '0.4.3', -1577 silly addNameRange '0.4.4', -1577 silly addNameRange '0.4.5', -1577 silly addNameRange '0.4.6', -1577 silly addNameRange '0.4.7', -1577 silly addNameRange '0.4.8', -1577 silly addNameRange '0.4.9', -1577 silly addNameRange '0.4.10', -1577 silly addNameRange '0.4.12', -1577 silly addNameRange '0.4.14', -1577 silly addNameRange '0.4.15', -1577 silly addNameRange '0.5.0', -1577 silly addNameRange '0.5.2', -1577 silly addNameRange '0.5.3', -1577 silly addNameRange '0.5.4', -1577 silly addNameRange '0.5.5', -1577 silly addNameRange '0.5.6', -1577 silly addNameRange '0.5.7', -1577 silly addNameRange '0.5.8', -1577 silly addNameRange '0.5.9', -1577 silly addNameRange '0.5.10', -1577 silly addNameRange '0.5.11', -1577 silly addNameRange '0.5.12', -1577 silly addNameRange '0.6.0', -1577 silly addNameRange '0.6.1', -1577 silly addNameRange '0.6.2', -1577 silly addNameRange '0.6.3', -1577 silly addNameRange '0.6.4', -1577 silly addNameRange '0.6.5', -1577 silly addNameRange '0.6.6', -1577 silly addNameRange '0.6.7', -1577 silly addNameRange '0.6.8', -1577 silly addNameRange '0.6.9', -1577 silly addNameRange '0.6.10', -1577 silly addNameRange '0.6.11', -1577 silly addNameRange '0.6.12', -1577 silly addNameRange '0.6.13', -1577 silly addNameRange '0.6.14', -1577 silly addNameRange '0.6.15', -1577 silly addNameRange '0.7.0', -1577 silly addNameRange '0.7.1', -1577 silly addNameRange '0.7.2', -1577 silly addNameRange '1.0.0', -1577 silly addNameRange '1.0.1', -1577 silly addNameRange '1.1.1', -1577 silly addNameRange '1.2.0', -1577 silly addNameRange '1.2.1', -1577 silly addNameRange '1.3.0', -1577 silly addNameRange '1.3.1', -1577 silly addNameRange '1.3.2', -1577 silly addNameRange ... 185 more items ] ] -1578 silly addNamed ajv@6.12.2 -1579 verbose addNamed "6.12.2" is a plain semver version for ajv -1580 silly mapToRegistry name ajv -1581 silly mapToRegistry using default registry -1582 silly mapToRegistry registry https://registry.npmjs.org/ -1583 silly mapToRegistry uri https://registry.npmjs.org/ajv -1584 verbose addRemoteTarball https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding -1585 verbose addRemoteTarball [ 'https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz', -1585 verbose addRemoteTarball 'c629c5eced17baf314437918d2da88c99d5958cd' ] -1586 info retry fetch attempt 1 at 13:48:58 -1587 info attempt registry request try #1 at 13:48:58 -1588 http fetch GET https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz -1589 http fetch 200 https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz -1590 silly fetchAndShaCheck shasum c629c5eced17baf314437918d2da88c99d5958cd -1591 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding -1592 verbose addTmpTarball already have metadata; skipping unpack for ajv@6.12.2 -1593 silly cache afterAdd ajv@6.12.2 -1594 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json not in flight; writing -1595 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json written -1596 silly fetchNamedPackageData fast-deep-equal -1597 silly mapToRegistry name fast-deep-equal -1598 silly mapToRegistry using default registry -1599 silly mapToRegistry registry https://registry.npmjs.org/ -1600 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal -1601 silly fetchNamedPackageData fast-json-stable-stringify -1602 silly mapToRegistry name fast-json-stable-stringify -1603 silly mapToRegistry using default registry -1604 silly mapToRegistry registry https://registry.npmjs.org/ -1605 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify -1606 silly fetchNamedPackageData json-schema-traverse -1607 silly mapToRegistry name json-schema-traverse -1608 silly mapToRegistry using default registry -1609 silly mapToRegistry registry https://registry.npmjs.org/ -1610 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse -1611 silly fetchNamedPackageData uri-js -1612 silly mapToRegistry name uri-js -1613 silly mapToRegistry using default registry -1614 silly mapToRegistry registry https://registry.npmjs.org/ -1615 silly mapToRegistry uri https://registry.npmjs.org/uri-js -1616 verbose request uri https://registry.npmjs.org/fast-deep-equal -1617 verbose request no auth needed -1618 info attempt registry request try #1 at 13:48:58 -1619 verbose etag W/"db2dac15e1de3baf39963d09ad4d32a5" -1620 verbose lastModified Wed, 22 Jan 2020 05:22:55 GMT -1621 http request GET https://registry.npmjs.org/fast-deep-equal -1622 verbose request uri https://registry.npmjs.org/json-schema-traverse -1623 verbose request no auth needed -1624 info attempt registry request try #1 at 13:48:58 -1625 verbose etag W/"ff9cf4d0fe6dae90110c679f03d42f51" -1626 verbose lastModified Sun, 10 Jun 2018 08:42:10 GMT -1627 http request GET https://registry.npmjs.org/json-schema-traverse -1628 verbose request uri https://registry.npmjs.org/fast-json-stable-stringify -1629 verbose request no auth needed -1630 info attempt registry request try #1 at 13:48:58 -1631 verbose etag W/"ae0fff93e18698c6aa2dc573fe85ad0a" -1632 verbose lastModified Sat, 14 Dec 2019 16:18:01 GMT -1633 http request GET https://registry.npmjs.org/fast-json-stable-stringify -1634 verbose request uri https://registry.npmjs.org/uri-js -1635 verbose request no auth needed -1636 info attempt registry request try #1 at 13:48:58 -1637 verbose etag W/"98dc8f4198063595fc640811868341b2" -1638 verbose lastModified Wed, 09 Jan 2019 05:32:41 GMT -1639 http request GET https://registry.npmjs.org/uri-js -1640 http 304 https://registry.npmjs.org/fast-deep-equal -1641 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1641 verbose headers connection: 'keep-alive', -1641 verbose headers 'set-cookie': -1641 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1641 verbose headers 'cf-ray': '59764fa919db05bb-FRA', -1641 verbose headers age: '5351', -1641 verbose headers 'cache-control': 'public, max-age=300', -1641 verbose headers etag: '"db2dac15e1de3baf39963d09ad4d32a5"', -1641 verbose headers 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT', -1641 verbose headers vary: 'Accept-Encoding', -1641 verbose headers 'cf-cache-status': 'HIT', -1641 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1641 verbose headers server: 'cloudflare', -1641 verbose headers 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' } -1642 silly get cb [ 304, -1642 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1642 silly get connection: 'keep-alive', -1642 silly get 'set-cookie': -1642 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1642 silly get 'cf-ray': '59764fa919db05bb-FRA', -1642 silly get age: '5351', -1642 silly get 'cache-control': 'public, max-age=300', -1642 silly get etag: '"db2dac15e1de3baf39963d09ad4d32a5"', -1642 silly get 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT', -1642 silly get vary: 'Accept-Encoding', -1642 silly get 'cf-cache-status': 'HIT', -1642 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1642 silly get server: 'cloudflare', -1642 silly get 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' } ] -1643 verbose etag https://registry.npmjs.org/fast-deep-equal from cache -1644 verbose get saving fast-deep-equal to /home/christine/.npm/registry.npmjs.org/fast-deep-equal/.cache.json -1645 silly resolveWithNewModule fast-deep-equal@3.1.1 checking installable status -1646 silly cache add args [ 'fast-deep-equal@^3.1.1', null ] -1647 verbose cache add spec fast-deep-equal@^3.1.1 -1648 silly cache add parsed spec Result { -1648 silly cache add raw: 'fast-deep-equal@^3.1.1', -1648 silly cache add scope: null, -1648 silly cache add name: 'fast-deep-equal', -1648 silly cache add rawSpec: '^3.1.1', -1648 silly cache add spec: '>=3.1.1 <4.0.0', -1648 silly cache add type: 'range' } -1649 silly addNamed fast-deep-equal@>=3.1.1 <4.0.0 -1650 verbose addNamed ">=3.1.1 <4.0.0" is a valid semver range for fast-deep-equal -1651 silly addNameRange { name: 'fast-deep-equal', -1651 silly addNameRange range: '>=3.1.1 <4.0.0', -1651 silly addNameRange hasData: false } -1652 silly mapToRegistry name fast-deep-equal -1653 silly mapToRegistry using default registry -1654 silly mapToRegistry registry https://registry.npmjs.org/ -1655 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal -1656 verbose addNameRange registry:https://registry.npmjs.org/fast-deep-equal not in flight; fetching -1657 verbose get https://registry.npmjs.org/fast-deep-equal not expired, no request -1658 silly addNameRange number 2 { name: 'fast-deep-equal', -1658 silly addNameRange range: '>=3.1.1 <4.0.0', -1658 silly addNameRange hasData: true } -1659 silly addNameRange versions [ 'fast-deep-equal', -1659 silly addNameRange [ '0.0.1', -1659 silly addNameRange '0.1.0', -1659 silly addNameRange '1.0.0', -1659 silly addNameRange '1.1.0', -1659 silly addNameRange '2.0.0', -1659 silly addNameRange '2.0.1', -1659 silly addNameRange '3.0.0-beta.0', -1659 silly addNameRange '3.0.0-beta.1', -1659 silly addNameRange '3.0.0-beta.2', -1659 silly addNameRange '3.0.0', -1659 silly addNameRange '3.0.1', -1659 silly addNameRange '3.1.0', -1659 silly addNameRange '3.1.1' ] ] -1660 silly addNamed fast-deep-equal@3.1.1 -1661 verbose addNamed "3.1.1" is a plain semver version for fast-deep-equal -1662 silly cache afterAdd fast-deep-equal@3.1.1 -1663 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json not in flight; writing -1664 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json written -1665 http 304 https://registry.npmjs.org/fast-json-stable-stringify -1666 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1666 verbose headers connection: 'keep-alive', -1666 verbose headers 'set-cookie': -1666 verbose headers [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1666 verbose headers 'cf-ray': '59764fa92ba70eab-FRA', -1666 verbose headers age: '5351', -1666 verbose headers 'cache-control': 'public, max-age=300', -1666 verbose headers etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"', -1666 verbose headers 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT', -1666 verbose headers vary: 'Accept-Encoding', -1666 verbose headers 'cf-cache-status': 'HIT', -1666 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1666 verbose headers server: 'cloudflare', -1666 verbose headers 'cf-request-id': '02ddd01db900000eabe9180200000001' } -1667 silly get cb [ 304, -1667 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1667 silly get connection: 'keep-alive', -1667 silly get 'set-cookie': -1667 silly get [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1667 silly get 'cf-ray': '59764fa92ba70eab-FRA', -1667 silly get age: '5351', -1667 silly get 'cache-control': 'public, max-age=300', -1667 silly get etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"', -1667 silly get 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT', -1667 silly get vary: 'Accept-Encoding', -1667 silly get 'cf-cache-status': 'HIT', -1667 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1667 silly get server: 'cloudflare', -1667 silly get 'cf-request-id': '02ddd01db900000eabe9180200000001' } ] -1668 verbose etag https://registry.npmjs.org/fast-json-stable-stringify from cache -1669 verbose get saving fast-json-stable-stringify to /home/christine/.npm/registry.npmjs.org/fast-json-stable-stringify/.cache.json -1670 silly resolveWithNewModule fast-json-stable-stringify@2.1.0 checking installable status -1671 silly cache add args [ 'fast-json-stable-stringify@^2.0.0', null ] -1672 verbose cache add spec fast-json-stable-stringify@^2.0.0 -1673 silly cache add parsed spec Result { -1673 silly cache add raw: 'fast-json-stable-stringify@^2.0.0', -1673 silly cache add scope: null, -1673 silly cache add name: 'fast-json-stable-stringify', -1673 silly cache add rawSpec: '^2.0.0', -1673 silly cache add spec: '>=2.0.0 <3.0.0', -1673 silly cache add type: 'range' } -1674 silly addNamed fast-json-stable-stringify@>=2.0.0 <3.0.0 -1675 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for fast-json-stable-stringify -1676 silly addNameRange { name: 'fast-json-stable-stringify', -1676 silly addNameRange range: '>=2.0.0 <3.0.0', -1676 silly addNameRange hasData: false } -1677 silly mapToRegistry name fast-json-stable-stringify -1678 silly mapToRegistry using default registry -1679 silly mapToRegistry registry https://registry.npmjs.org/ -1680 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify -1681 verbose addNameRange registry:https://registry.npmjs.org/fast-json-stable-stringify not in flight; fetching -1682 http 304 https://registry.npmjs.org/json-schema-traverse -1683 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1683 verbose headers connection: 'keep-alive', -1683 verbose headers 'set-cookie': -1683 verbose headers [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1683 verbose headers 'cf-ray': '59764fa928dbd6e1-FRA', -1683 verbose headers age: '5351', -1683 verbose headers 'cache-control': 'public, max-age=300', -1683 verbose headers etag: '"ff9cf4d0fe6dae90110c679f03d42f51"', -1683 verbose headers 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT', -1683 verbose headers vary: 'Accept-Encoding', -1683 verbose headers 'cf-cache-status': 'HIT', -1683 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1683 verbose headers server: 'cloudflare', -1683 verbose headers 'cf-request-id': '02ddd01db80000d6e132393200000001' } -1684 silly get cb [ 304, -1684 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1684 silly get connection: 'keep-alive', -1684 silly get 'set-cookie': -1684 silly get [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1684 silly get 'cf-ray': '59764fa928dbd6e1-FRA', -1684 silly get age: '5351', -1684 silly get 'cache-control': 'public, max-age=300', -1684 silly get etag: '"ff9cf4d0fe6dae90110c679f03d42f51"', -1684 silly get 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT', -1684 silly get vary: 'Accept-Encoding', -1684 silly get 'cf-cache-status': 'HIT', -1684 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1684 silly get server: 'cloudflare', -1684 silly get 'cf-request-id': '02ddd01db80000d6e132393200000001' } ] -1685 verbose etag https://registry.npmjs.org/json-schema-traverse from cache -1686 verbose get saving json-schema-traverse to /home/christine/.npm/registry.npmjs.org/json-schema-traverse/.cache.json -1687 http 304 https://registry.npmjs.org/uri-js -1688 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1688 verbose headers connection: 'keep-alive', -1688 verbose headers 'set-cookie': -1688 verbose headers [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1688 verbose headers 'cf-ray': '59764fa92aaec2f9-FRA', -1688 verbose headers age: '5351', -1688 verbose headers 'cache-control': 'public, max-age=300', -1688 verbose headers etag: '"98dc8f4198063595fc640811868341b2"', -1688 verbose headers 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT', -1688 verbose headers vary: 'Accept-Encoding', -1688 verbose headers 'cf-cache-status': 'HIT', -1688 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1688 verbose headers server: 'cloudflare', -1688 verbose headers 'cf-request-id': '02ddd01db90000c2f92609d200000001' } -1689 silly get cb [ 304, -1689 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1689 silly get connection: 'keep-alive', -1689 silly get 'set-cookie': -1689 silly get [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1689 silly get 'cf-ray': '59764fa92aaec2f9-FRA', -1689 silly get age: '5351', -1689 silly get 'cache-control': 'public, max-age=300', -1689 silly get etag: '"98dc8f4198063595fc640811868341b2"', -1689 silly get 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT', -1689 silly get vary: 'Accept-Encoding', -1689 silly get 'cf-cache-status': 'HIT', -1689 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1689 silly get server: 'cloudflare', -1689 silly get 'cf-request-id': '02ddd01db90000c2f92609d200000001' } ] -1690 verbose etag https://registry.npmjs.org/uri-js from cache -1691 verbose get saving uri-js to /home/christine/.npm/registry.npmjs.org/uri-js/.cache.json -1692 verbose get https://registry.npmjs.org/fast-json-stable-stringify not expired, no request -1693 silly addNameRange number 2 { name: 'fast-json-stable-stringify', -1693 silly addNameRange range: '>=2.0.0 <3.0.0', -1693 silly addNameRange hasData: true } -1694 silly addNameRange versions [ 'fast-json-stable-stringify', [ '1.0.2', '2.0.0', '2.1.0' ] ] -1695 silly addNamed fast-json-stable-stringify@2.1.0 -1696 verbose addNamed "2.1.0" is a plain semver version for fast-json-stable-stringify -1697 silly resolveWithNewModule json-schema-traverse@0.4.1 checking installable status -1698 silly cache add args [ 'json-schema-traverse@^0.4.1', null ] -1699 verbose cache add spec json-schema-traverse@^0.4.1 -1700 silly cache add parsed spec Result { -1700 silly cache add raw: 'json-schema-traverse@^0.4.1', -1700 silly cache add scope: null, -1700 silly cache add name: 'json-schema-traverse', -1700 silly cache add rawSpec: '^0.4.1', -1700 silly cache add spec: '>=0.4.1 <0.5.0', -1700 silly cache add type: 'range' } -1701 silly addNamed json-schema-traverse@>=0.4.1 <0.5.0 -1702 verbose addNamed ">=0.4.1 <0.5.0" is a valid semver range for json-schema-traverse -1703 silly addNameRange { name: 'json-schema-traverse', -1703 silly addNameRange range: '>=0.4.1 <0.5.0', -1703 silly addNameRange hasData: false } -1704 silly mapToRegistry name json-schema-traverse -1705 silly mapToRegistry using default registry -1706 silly mapToRegistry registry https://registry.npmjs.org/ -1707 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse -1708 verbose addNameRange registry:https://registry.npmjs.org/json-schema-traverse not in flight; fetching -1709 silly resolveWithNewModule uri-js@4.2.2 checking installable status -1710 silly cache add args [ 'uri-js@^4.2.2', null ] -1711 verbose cache add spec uri-js@^4.2.2 -1712 silly cache add parsed spec Result { -1712 silly cache add raw: 'uri-js@^4.2.2', -1712 silly cache add scope: null, -1712 silly cache add name: 'uri-js', -1712 silly cache add rawSpec: '^4.2.2', -1712 silly cache add spec: '>=4.2.2 <5.0.0', -1712 silly cache add type: 'range' } -1713 silly addNamed uri-js@>=4.2.2 <5.0.0 -1714 verbose addNamed ">=4.2.2 <5.0.0" is a valid semver range for uri-js -1715 silly addNameRange { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: false } -1716 silly mapToRegistry name uri-js -1717 silly mapToRegistry using default registry -1718 silly mapToRegistry registry https://registry.npmjs.org/ -1719 silly mapToRegistry uri https://registry.npmjs.org/uri-js -1720 verbose addNameRange registry:https://registry.npmjs.org/uri-js not in flight; fetching -1721 verbose get https://registry.npmjs.org/json-schema-traverse not expired, no request -1722 silly addNameRange number 2 { name: 'json-schema-traverse', -1722 silly addNameRange range: '>=0.4.1 <0.5.0', -1722 silly addNameRange hasData: true } -1723 silly addNameRange versions [ 'json-schema-traverse', -1723 silly addNameRange [ '0.0.1', '0.1.0', '0.2.0', '0.3.0', '0.3.1', '0.4.0', '0.4.1' ] ] -1724 silly addNamed json-schema-traverse@0.4.1 -1725 verbose addNamed "0.4.1" is a plain semver version for json-schema-traverse -1726 verbose get https://registry.npmjs.org/uri-js not expired, no request -1727 silly addNameRange number 2 { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: true } -1728 silly addNameRange versions [ 'uri-js', -1728 silly addNameRange [ '1.4.0', -1728 silly addNameRange '1.4.2', -1728 silly addNameRange '2.0.0', -1728 silly addNameRange '2.1.0', -1728 silly addNameRange '2.1.1', -1728 silly addNameRange '3.0.0', -1728 silly addNameRange '3.0.1', -1728 silly addNameRange '3.0.2', -1728 silly addNameRange '4.2.0', -1728 silly addNameRange '4.2.1', -1728 silly addNameRange '4.2.2' ] ] -1729 silly addNamed uri-js@4.2.2 -1730 verbose addNamed "4.2.2" is a plain semver version for uri-js -1731 silly cache afterAdd fast-json-stable-stringify@2.1.0 -1732 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json not in flight; writing -1733 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json written -1734 silly cache afterAdd json-schema-traverse@0.4.1 -1735 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json not in flight; writing -1736 silly cache afterAdd uri-js@4.2.2 -1737 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json not in flight; writing -1738 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json written -1739 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json written -1740 silly fetchNamedPackageData punycode -1741 silly mapToRegistry name punycode -1742 silly mapToRegistry using default registry -1743 silly mapToRegistry registry https://registry.npmjs.org/ -1744 silly mapToRegistry uri https://registry.npmjs.org/punycode -1745 verbose request uri https://registry.npmjs.org/punycode -1746 verbose request no auth needed -1747 info attempt registry request try #1 at 13:48:58 -1748 verbose etag W/"27ef686d9a29403de9242fe625c85934" -1749 verbose lastModified Sun, 27 May 2018 13:11:15 GMT -1750 http request GET https://registry.npmjs.org/punycode -1751 http 304 https://registry.npmjs.org/punycode -1752 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1752 verbose headers connection: 'keep-alive', -1752 verbose headers 'set-cookie': -1752 verbose headers [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1752 verbose headers 'cf-ray': '59764fa969ce1772-FRA', -1752 verbose headers age: '5655', -1752 verbose headers 'cache-control': 'public, max-age=300', -1752 verbose headers etag: '"27ef686d9a29403de9242fe625c85934"', -1752 verbose headers 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT', -1752 verbose headers vary: 'Accept-Encoding', -1752 verbose headers 'cf-cache-status': 'HIT', -1752 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1752 verbose headers server: 'cloudflare', -1752 verbose headers 'cf-request-id': '02ddd01de4000017726419b200000001' } -1753 silly get cb [ 304, -1753 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1753 silly get connection: 'keep-alive', -1753 silly get 'set-cookie': -1753 silly get [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1753 silly get 'cf-ray': '59764fa969ce1772-FRA', -1753 silly get age: '5655', -1753 silly get 'cache-control': 'public, max-age=300', -1753 silly get etag: '"27ef686d9a29403de9242fe625c85934"', -1753 silly get 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT', -1753 silly get vary: 'Accept-Encoding', -1753 silly get 'cf-cache-status': 'HIT', -1753 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1753 silly get server: 'cloudflare', -1753 silly get 'cf-request-id': '02ddd01de4000017726419b200000001' } ] -1754 verbose etag https://registry.npmjs.org/punycode from cache -1755 verbose get saving punycode to /home/christine/.npm/registry.npmjs.org/punycode/.cache.json -1756 silly resolveWithNewModule punycode@2.1.1 checking installable status -1757 silly cache add args [ 'punycode@^2.1.0', null ] -1758 verbose cache add spec punycode@^2.1.0 -1759 silly cache add parsed spec Result { -1759 silly cache add raw: 'punycode@^2.1.0', -1759 silly cache add scope: null, -1759 silly cache add name: 'punycode', -1759 silly cache add rawSpec: '^2.1.0', -1759 silly cache add spec: '>=2.1.0 <3.0.0', -1759 silly cache add type: 'range' } -1760 silly addNamed punycode@>=2.1.0 <3.0.0 -1761 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for punycode -1762 silly addNameRange { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: false } -1763 silly mapToRegistry name punycode -1764 silly mapToRegistry using default registry -1765 silly mapToRegistry registry https://registry.npmjs.org/ -1766 silly mapToRegistry uri https://registry.npmjs.org/punycode -1767 verbose addNameRange registry:https://registry.npmjs.org/punycode not in flight; fetching -1768 verbose get https://registry.npmjs.org/punycode not expired, no request -1769 silly addNameRange number 2 { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: true } -1770 silly addNameRange versions [ 'punycode', -1770 silly addNameRange [ '0.0.1', -1770 silly addNameRange '0.0.2', -1770 silly addNameRange '0.0.1337', -1770 silly addNameRange '0.1.0', -1770 silly addNameRange '0.1.1', -1770 silly addNameRange '0.1.2', -1770 silly addNameRange '0.2.0', -1770 silly addNameRange '0.2.1', -1770 silly addNameRange '0.2.2', -1770 silly addNameRange '0.3.0', -1770 silly addNameRange '1.0.0', -1770 silly addNameRange '1.1.0', -1770 silly addNameRange '1.1.1', -1770 silly addNameRange '1.2.0', -1770 silly addNameRange '1.2.1', -1770 silly addNameRange '1.2.2', -1770 silly addNameRange '1.2.3', -1770 silly addNameRange '1.2.4', -1770 silly addNameRange '1.3.0', -1770 silly addNameRange '1.3.1', -1770 silly addNameRange '1.3.2', -1770 silly addNameRange '1.4.0', -1770 silly addNameRange '1.4.1', -1770 silly addNameRange '2.0.0', -1770 silly addNameRange '2.0.1', -1770 silly addNameRange '2.1.0', -1770 silly addNameRange '2.1.1' ] ] -1771 silly addNamed punycode@2.1.1 -1772 verbose addNamed "2.1.1" is a plain semver version for punycode -1773 silly cache afterAdd punycode@2.1.1 -1774 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json not in flight; writing -1775 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json written -1776 silly fetchNamedPackageData assert-plus -1777 silly mapToRegistry name assert-plus -1778 silly mapToRegistry using default registry -1779 silly mapToRegistry registry https://registry.npmjs.org/ -1780 silly mapToRegistry uri https://registry.npmjs.org/assert-plus -1781 silly fetchNamedPackageData jsprim -1782 silly mapToRegistry name jsprim -1783 silly mapToRegistry using default registry -1784 silly mapToRegistry registry https://registry.npmjs.org/ -1785 silly mapToRegistry uri https://registry.npmjs.org/jsprim -1786 silly fetchNamedPackageData sshpk -1787 silly mapToRegistry name sshpk -1788 silly mapToRegistry using default registry -1789 silly mapToRegistry registry https://registry.npmjs.org/ -1790 silly mapToRegistry uri https://registry.npmjs.org/sshpk -1791 verbose request uri https://registry.npmjs.org/assert-plus -1792 verbose request no auth needed -1793 info attempt registry request try #1 at 13:48:58 -1794 verbose etag W/"5f1c38f02647d4e0324c53fe90ea160c" -1795 verbose lastModified Fri, 13 Dec 2019 16:32:10 GMT -1796 http request GET https://registry.npmjs.org/assert-plus -1797 verbose request uri https://registry.npmjs.org/jsprim -1798 verbose request no auth needed -1799 info attempt registry request try #1 at 13:48:58 -1800 verbose etag W/"ec307a0d291a7abbcabe4ca63c75468e" -1801 verbose lastModified Fri, 13 Dec 2019 16:32:36 GMT -1802 http request GET https://registry.npmjs.org/jsprim -1803 verbose request uri https://registry.npmjs.org/sshpk -1804 verbose request no auth needed -1805 info attempt registry request try #1 at 13:48:58 -1806 verbose etag W/"e8e015112a9fbc16cc4a367405b14614" -1807 verbose lastModified Fri, 13 Dec 2019 16:33:04 GMT -1808 http request GET https://registry.npmjs.org/sshpk -1809 http 200 https://registry.npmjs.org/assert-plus -1810 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1810 verbose headers 'content-type': 'application/json', -1810 verbose headers 'transfer-encoding': 'chunked', -1810 verbose headers connection: 'keep-alive', -1810 verbose headers 'set-cookie': -1810 verbose headers [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1810 verbose headers 'cf-ray': '59764fa9af0505e9-FRA', -1810 verbose headers age: '5654', -1810 verbose headers 'cache-control': 'public, max-age=300', -1810 verbose headers etag: 'W/"a6e598834cba689561f3d676e817bde6"', -1810 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -1810 verbose headers vary: 'accept-encoding, accept', -1810 verbose headers 'cf-cache-status': 'HIT', -1810 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1810 verbose headers server: 'cloudflare', -1810 verbose headers 'content-encoding': 'gzip', -1810 verbose headers 'cf-request-id': '02ddd01e0b000005e903b57200000001' } -1811 silly get cb [ 200, -1811 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1811 silly get 'content-type': 'application/json', -1811 silly get 'transfer-encoding': 'chunked', -1811 silly get connection: 'keep-alive', -1811 silly get 'set-cookie': -1811 silly get [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1811 silly get 'cf-ray': '59764fa9af0505e9-FRA', -1811 silly get age: '5654', -1811 silly get 'cache-control': 'public, max-age=300', -1811 silly get etag: 'W/"a6e598834cba689561f3d676e817bde6"', -1811 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -1811 silly get vary: 'accept-encoding, accept', -1811 silly get 'cf-cache-status': 'HIT', -1811 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1811 silly get server: 'cloudflare', -1811 silly get 'content-encoding': 'gzip', -1811 silly get 'cf-request-id': '02ddd01e0b000005e903b57200000001' } ] -1812 verbose get saving assert-plus to /home/christine/.npm/registry.npmjs.org/assert-plus/.cache.json -1813 silly resolveWithNewModule assert-plus@1.0.0 checking installable status -1814 silly cache add args [ 'assert-plus@^1.0.0', null ] -1815 verbose cache add spec assert-plus@^1.0.0 -1816 silly cache add parsed spec Result { -1816 silly cache add raw: 'assert-plus@^1.0.0', -1816 silly cache add scope: null, -1816 silly cache add name: 'assert-plus', -1816 silly cache add rawSpec: '^1.0.0', -1816 silly cache add spec: '>=1.0.0 <2.0.0', -1816 silly cache add type: 'range' } -1817 silly addNamed assert-plus@>=1.0.0 <2.0.0 -1818 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for assert-plus -1819 silly addNameRange { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: false } -1820 silly mapToRegistry name assert-plus -1821 silly mapToRegistry using default registry -1822 silly mapToRegistry registry https://registry.npmjs.org/ -1823 silly mapToRegistry uri https://registry.npmjs.org/assert-plus -1824 verbose addNameRange registry:https://registry.npmjs.org/assert-plus not in flight; fetching -1825 verbose get https://registry.npmjs.org/assert-plus not expired, no request -1826 silly addNameRange number 2 { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: true } -1827 silly addNameRange versions [ 'assert-plus', -1827 silly addNameRange [ '0.1.0', -1827 silly addNameRange '0.1.1', -1827 silly addNameRange '0.1.2', -1827 silly addNameRange '0.1.3', -1827 silly addNameRange '0.1.4', -1827 silly addNameRange '0.1.5', -1827 silly addNameRange '0.2.0', -1827 silly addNameRange '1.0.0' ] ] -1828 silly addNamed assert-plus@1.0.0 -1829 verbose addNamed "1.0.0" is a plain semver version for assert-plus -1830 silly cache afterAdd assert-plus@1.0.0 -1831 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json not in flight; writing -1832 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json written -1833 http 200 https://registry.npmjs.org/jsprim -1834 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1834 verbose headers 'content-type': 'application/json', -1834 verbose headers 'transfer-encoding': 'chunked', -1834 verbose headers connection: 'keep-alive', -1834 verbose headers 'set-cookie': -1834 verbose headers [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1834 verbose headers 'cf-ray': '59764fa9bc0d176a-FRA', -1834 verbose headers age: '5654', -1834 verbose headers 'cache-control': 'public, max-age=300', -1834 verbose headers etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"', -1834 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT', -1834 verbose headers vary: 'accept-encoding, accept', -1834 verbose headers 'cf-cache-status': 'HIT', -1834 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1834 verbose headers server: 'cloudflare', -1834 verbose headers 'content-encoding': 'gzip', -1834 verbose headers 'cf-request-id': '02ddd01e100000176a65ba5200000001' } -1835 silly get cb [ 200, -1835 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1835 silly get 'content-type': 'application/json', -1835 silly get 'transfer-encoding': 'chunked', -1835 silly get connection: 'keep-alive', -1835 silly get 'set-cookie': -1835 silly get [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1835 silly get 'cf-ray': '59764fa9bc0d176a-FRA', -1835 silly get age: '5654', -1835 silly get 'cache-control': 'public, max-age=300', -1835 silly get etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"', -1835 silly get 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT', -1835 silly get vary: 'accept-encoding, accept', -1835 silly get 'cf-cache-status': 'HIT', -1835 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1835 silly get server: 'cloudflare', -1835 silly get 'content-encoding': 'gzip', -1835 silly get 'cf-request-id': '02ddd01e100000176a65ba5200000001' } ] -1836 verbose get saving jsprim to /home/christine/.npm/registry.npmjs.org/jsprim/.cache.json -1837 silly resolveWithNewModule jsprim@1.4.1 checking installable status -1838 silly cache add args [ 'jsprim@^1.2.2', null ] -1839 verbose cache add spec jsprim@^1.2.2 -1840 silly cache add parsed spec Result { -1840 silly cache add raw: 'jsprim@^1.2.2', -1840 silly cache add scope: null, -1840 silly cache add name: 'jsprim', -1840 silly cache add rawSpec: '^1.2.2', -1840 silly cache add spec: '>=1.2.2 <2.0.0', -1840 silly cache add type: 'range' } -1841 silly addNamed jsprim@>=1.2.2 <2.0.0 -1842 verbose addNamed ">=1.2.2 <2.0.0" is a valid semver range for jsprim -1843 silly addNameRange { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: false } -1844 silly mapToRegistry name jsprim -1845 silly mapToRegistry using default registry -1846 silly mapToRegistry registry https://registry.npmjs.org/ -1847 silly mapToRegistry uri https://registry.npmjs.org/jsprim -1848 verbose addNameRange registry:https://registry.npmjs.org/jsprim not in flight; fetching -1849 verbose get https://registry.npmjs.org/jsprim not expired, no request -1850 silly addNameRange number 2 { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: true } -1851 silly addNameRange versions [ 'jsprim', -1851 silly addNameRange [ '0.0.1', -1851 silly addNameRange '0.0.2', -1851 silly addNameRange '0.0.3', -1851 silly addNameRange '0.0.4', -1851 silly addNameRange '0.0.5', -1851 silly addNameRange '0.1.0', -1851 silly addNameRange '0.2.0', -1851 silly addNameRange '0.3.0', -1851 silly addNameRange '0.3.1', -1851 silly addNameRange '0.4.0', -1851 silly addNameRange '0.5.0', -1851 silly addNameRange '0.5.1', -1851 silly addNameRange '0.6.0', -1851 silly addNameRange '0.6.1', -1851 silly addNameRange '0.7.0', -1851 silly addNameRange '0.8.0', -1851 silly addNameRange '1.0.0', -1851 silly addNameRange '1.1.0', -1851 silly addNameRange '1.2.0', -1851 silly addNameRange '1.2.1', -1851 silly addNameRange '1.2.2', -1851 silly addNameRange '1.3.0', -1851 silly addNameRange '1.3.1', -1851 silly addNameRange '1.4.0', -1851 silly addNameRange '1.4.1', -1851 silly addNameRange '2.0.0' ] ] -1852 silly addNamed jsprim@1.4.1 -1853 verbose addNamed "1.4.1" is a plain semver version for jsprim -1854 http 200 https://registry.npmjs.org/sshpk -1855 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1855 verbose headers 'content-type': 'application/json', -1855 verbose headers 'transfer-encoding': 'chunked', -1855 verbose headers connection: 'keep-alive', -1855 verbose headers 'set-cookie': -1855 verbose headers [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1855 verbose headers 'cf-ray': '59764fa9bc65dfbb-FRA', -1855 verbose headers age: '5654', -1855 verbose headers 'cache-control': 'public, max-age=300', -1855 verbose headers etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"', -1855 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT', -1855 verbose headers vary: 'accept-encoding, accept', -1855 verbose headers 'cf-cache-status': 'HIT', -1855 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1855 verbose headers server: 'cloudflare', -1855 verbose headers 'content-encoding': 'gzip', -1855 verbose headers 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' } -1856 silly get cb [ 200, -1856 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1856 silly get 'content-type': 'application/json', -1856 silly get 'transfer-encoding': 'chunked', -1856 silly get connection: 'keep-alive', -1856 silly get 'set-cookie': -1856 silly get [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1856 silly get 'cf-ray': '59764fa9bc65dfbb-FRA', -1856 silly get age: '5654', -1856 silly get 'cache-control': 'public, max-age=300', -1856 silly get etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"', -1856 silly get 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT', -1856 silly get vary: 'accept-encoding, accept', -1856 silly get 'cf-cache-status': 'HIT', -1856 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1856 silly get server: 'cloudflare', -1856 silly get 'content-encoding': 'gzip', -1856 silly get 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' } ] -1857 verbose get saving sshpk to /home/christine/.npm/registry.npmjs.org/sshpk/.cache.json -1858 silly cache afterAdd jsprim@1.4.1 -1859 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json not in flight; writing -1860 silly resolveWithNewModule sshpk@1.16.1 checking installable status -1861 silly cache add args [ 'sshpk@^1.7.0', null ] -1862 verbose cache add spec sshpk@^1.7.0 -1863 silly cache add parsed spec Result { -1863 silly cache add raw: 'sshpk@^1.7.0', -1863 silly cache add scope: null, -1863 silly cache add name: 'sshpk', -1863 silly cache add rawSpec: '^1.7.0', -1863 silly cache add spec: '>=1.7.0 <2.0.0', -1863 silly cache add type: 'range' } -1864 silly addNamed sshpk@>=1.7.0 <2.0.0 -1865 verbose addNamed ">=1.7.0 <2.0.0" is a valid semver range for sshpk -1866 silly addNameRange { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: false } -1867 silly mapToRegistry name sshpk -1868 silly mapToRegistry using default registry -1869 silly mapToRegistry registry https://registry.npmjs.org/ -1870 silly mapToRegistry uri https://registry.npmjs.org/sshpk -1871 verbose addNameRange registry:https://registry.npmjs.org/sshpk not in flight; fetching -1872 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json written -1873 verbose get https://registry.npmjs.org/sshpk not expired, no request -1874 silly addNameRange number 2 { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: true } -1875 silly addNameRange versions [ 'sshpk', -1875 silly addNameRange [ '1.0.0', -1875 silly addNameRange '1.0.1', -1875 silly addNameRange '1.0.2', -1875 silly addNameRange '1.0.3', -1875 silly addNameRange '1.0.4', -1875 silly addNameRange '1.1.0', -1875 silly addNameRange '1.2.0', -1875 silly addNameRange '1.2.1', -1875 silly addNameRange '1.3.0', -1875 silly addNameRange '1.4.0', -1875 silly addNameRange '1.4.1', -1875 silly addNameRange '1.4.2', -1875 silly addNameRange '1.4.3', -1875 silly addNameRange '1.4.4', -1875 silly addNameRange '1.4.5', -1875 silly addNameRange '1.4.6', -1875 silly addNameRange '1.4.7', -1875 silly addNameRange '1.5.0', -1875 silly addNameRange '1.5.1', -1875 silly addNameRange '1.6.0', -1875 silly addNameRange '1.6.1', -1875 silly addNameRange '1.6.2', -1875 silly addNameRange '1.7.0', -1875 silly addNameRange '1.7.1', -1875 silly addNameRange '1.7.2', -1875 silly addNameRange '1.7.3', -1875 silly addNameRange '1.7.4', -1875 silly addNameRange '1.8.0', -1875 silly addNameRange '1.8.1', -1875 silly addNameRange '1.8.2', -1875 silly addNameRange '1.8.3', -1875 silly addNameRange '1.9.0', -1875 silly addNameRange '1.9.1', -1875 silly addNameRange '1.9.2', -1875 silly addNameRange '1.10.0', -1875 silly addNameRange '1.10.1', -1875 silly addNameRange '1.10.2', -1875 silly addNameRange '1.11.0', -1875 silly addNameRange '1.13.0', -1875 silly addNameRange '1.13.1', -1875 silly addNameRange '1.13.2', -1875 silly addNameRange '1.14.1', -1875 silly addNameRange '1.14.2', -1875 silly addNameRange '1.15.0', -1875 silly addNameRange '1.15.1', -1875 silly addNameRange '1.15.2', -1875 silly addNameRange '1.16.0', -1875 silly addNameRange '1.16.1' ] ] -1876 silly addNamed sshpk@1.16.1 -1877 verbose addNamed "1.16.1" is a plain semver version for sshpk -1878 silly cache afterAdd sshpk@1.16.1 -1879 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json not in flight; writing -1880 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json written -1881 silly fetchNamedPackageData extsprintf -1882 silly mapToRegistry name extsprintf -1883 silly mapToRegistry using default registry -1884 silly mapToRegistry registry https://registry.npmjs.org/ -1885 silly mapToRegistry uri https://registry.npmjs.org/extsprintf -1886 silly fetchNamedPackageData json-schema -1887 silly mapToRegistry name json-schema -1888 silly mapToRegistry using default registry -1889 silly mapToRegistry registry https://registry.npmjs.org/ -1890 silly mapToRegistry uri https://registry.npmjs.org/json-schema -1891 silly fetchNamedPackageData verror -1892 silly mapToRegistry name verror -1893 silly mapToRegistry using default registry -1894 silly mapToRegistry registry https://registry.npmjs.org/ -1895 silly mapToRegistry uri https://registry.npmjs.org/verror -1896 verbose request uri https://registry.npmjs.org/json-schema -1897 verbose request no auth needed -1898 info attempt registry request try #1 at 13:48:58 -1899 verbose etag W/"5274dd0ff41b090868548552fd39da3b" -1900 verbose lastModified Fri, 06 Sep 2019 03:31:48 GMT -1901 http request GET https://registry.npmjs.org/json-schema -1902 verbose request uri https://registry.npmjs.org/extsprintf -1903 verbose request no auth needed -1904 info attempt registry request try #1 at 13:48:58 -1905 verbose etag W/"181f798a7717cf280fb342d9306fa973" -1906 verbose lastModified Fri, 13 Dec 2019 16:32:18 GMT -1907 http request GET https://registry.npmjs.org/extsprintf -1908 verbose request uri https://registry.npmjs.org/verror -1909 verbose request no auth needed -1910 info attempt registry request try #1 at 13:48:58 -1911 verbose etag W/"cee3cbe58715caedf23b4d5aa0f1317b" -1912 verbose lastModified Fri, 13 Dec 2019 16:33:19 GMT -1913 http request GET https://registry.npmjs.org/verror -1914 http 200 https://registry.npmjs.org/extsprintf -1915 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1915 verbose headers 'content-type': 'application/json', -1915 verbose headers 'transfer-encoding': 'chunked', -1915 verbose headers connection: 'keep-alive', -1915 verbose headers 'set-cookie': -1915 verbose headers [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1915 verbose headers 'cf-ray': '59764faa2855c2ae-FRA', -1915 verbose headers age: '5351', -1915 verbose headers 'cache-control': 'public, max-age=300', -1915 verbose headers etag: 'W/"c1458bfec410835c4eaea2e0b344814b"', -1915 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT', -1915 verbose headers vary: 'accept-encoding, accept', -1915 verbose headers 'cf-cache-status': 'HIT', -1915 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1915 verbose headers server: 'cloudflare', -1915 verbose headers 'content-encoding': 'gzip', -1915 verbose headers 'cf-request-id': '02ddd01e550000c2aea018c200000001' } -1916 silly get cb [ 200, -1916 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1916 silly get 'content-type': 'application/json', -1916 silly get 'transfer-encoding': 'chunked', -1916 silly get connection: 'keep-alive', -1916 silly get 'set-cookie': -1916 silly get [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1916 silly get 'cf-ray': '59764faa2855c2ae-FRA', -1916 silly get age: '5351', -1916 silly get 'cache-control': 'public, max-age=300', -1916 silly get etag: 'W/"c1458bfec410835c4eaea2e0b344814b"', -1916 silly get 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT', -1916 silly get vary: 'accept-encoding, accept', -1916 silly get 'cf-cache-status': 'HIT', -1916 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1916 silly get server: 'cloudflare', -1916 silly get 'content-encoding': 'gzip', -1916 silly get 'cf-request-id': '02ddd01e550000c2aea018c200000001' } ] -1917 verbose get saving extsprintf to /home/christine/.npm/registry.npmjs.org/extsprintf/.cache.json -1918 silly resolveWithNewModule extsprintf@1.3.0 checking installable status -1919 silly cache add args [ 'extsprintf@1.3.0', null ] -1920 verbose cache add spec extsprintf@1.3.0 -1921 silly cache add parsed spec Result { -1921 silly cache add raw: 'extsprintf@1.3.0', -1921 silly cache add scope: null, -1921 silly cache add name: 'extsprintf', -1921 silly cache add rawSpec: '1.3.0', -1921 silly cache add spec: '1.3.0', -1921 silly cache add type: 'version' } -1922 silly addNamed extsprintf@1.3.0 -1923 verbose addNamed "1.3.0" is a plain semver version for extsprintf -1924 silly mapToRegistry name extsprintf -1925 silly mapToRegistry using default registry -1926 silly mapToRegistry registry https://registry.npmjs.org/ -1927 silly mapToRegistry uri https://registry.npmjs.org/extsprintf -1928 verbose addNameVersion registry:https://registry.npmjs.org/extsprintf not in flight; fetching -1929 verbose get https://registry.npmjs.org/extsprintf not expired, no request -1930 silly cache afterAdd extsprintf@1.3.0 -1931 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json not in flight; writing -1932 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json written -1933 http 200 https://registry.npmjs.org/verror -1934 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1934 verbose headers 'content-type': 'application/json', -1934 verbose headers 'transfer-encoding': 'chunked', -1934 verbose headers connection: 'keep-alive', -1934 verbose headers 'set-cookie': -1934 verbose headers [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1934 verbose headers 'cf-ray': '59764faa2b02d6e9-FRA', -1934 verbose headers age: '5351', -1934 verbose headers 'cache-control': 'public, max-age=300', -1934 verbose headers etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"', -1934 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT', -1934 verbose headers vary: 'accept-encoding, accept', -1934 verbose headers 'cf-cache-status': 'HIT', -1934 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1934 verbose headers server: 'cloudflare', -1934 verbose headers 'content-encoding': 'gzip', -1934 verbose headers 'cf-request-id': '02ddd01e550000d6e975b63200000001' } -1935 silly get cb [ 200, -1935 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1935 silly get 'content-type': 'application/json', -1935 silly get 'transfer-encoding': 'chunked', -1935 silly get connection: 'keep-alive', -1935 silly get 'set-cookie': -1935 silly get [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1935 silly get 'cf-ray': '59764faa2b02d6e9-FRA', -1935 silly get age: '5351', -1935 silly get 'cache-control': 'public, max-age=300', -1935 silly get etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"', -1935 silly get 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT', -1935 silly get vary: 'accept-encoding, accept', -1935 silly get 'cf-cache-status': 'HIT', -1935 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1935 silly get server: 'cloudflare', -1935 silly get 'content-encoding': 'gzip', -1935 silly get 'cf-request-id': '02ddd01e550000d6e975b63200000001' } ] -1936 verbose get saving verror to /home/christine/.npm/registry.npmjs.org/verror/.cache.json -1937 silly resolveWithNewModule verror@1.10.0 checking installable status -1938 silly cache add args [ 'verror@1.10.0', null ] -1939 verbose cache add spec verror@1.10.0 -1940 silly cache add parsed spec Result { -1940 silly cache add raw: 'verror@1.10.0', -1940 silly cache add scope: null, -1940 silly cache add name: 'verror', -1940 silly cache add rawSpec: '1.10.0', -1940 silly cache add spec: '1.10.0', -1940 silly cache add type: 'version' } -1941 silly addNamed verror@1.10.0 -1942 verbose addNamed "1.10.0" is a plain semver version for verror -1943 silly mapToRegistry name verror -1944 silly mapToRegistry using default registry -1945 silly mapToRegistry registry https://registry.npmjs.org/ -1946 silly mapToRegistry uri https://registry.npmjs.org/verror -1947 verbose addNameVersion registry:https://registry.npmjs.org/verror not in flight; fetching -1948 verbose get https://registry.npmjs.org/verror not expired, no request -1949 http 304 https://registry.npmjs.org/json-schema -1950 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1950 verbose headers connection: 'keep-alive', -1950 verbose headers 'set-cookie': -1950 verbose headers [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1950 verbose headers 'cf-ray': '59764faa2c451f2d-FRA', -1950 verbose headers age: '5351', -1950 verbose headers 'cache-control': 'public, max-age=300', -1950 verbose headers etag: '"5274dd0ff41b090868548552fd39da3b"', -1950 verbose headers 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT', -1950 verbose headers vary: 'Accept-Encoding', -1950 verbose headers 'cf-cache-status': 'HIT', -1950 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1950 verbose headers server: 'cloudflare', -1950 verbose headers 'cf-request-id': '02ddd01e5500001f2df5221200000001' } -1951 silly get cb [ 304, -1951 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1951 silly get connection: 'keep-alive', -1951 silly get 'set-cookie': -1951 silly get [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1951 silly get 'cf-ray': '59764faa2c451f2d-FRA', -1951 silly get age: '5351', -1951 silly get 'cache-control': 'public, max-age=300', -1951 silly get etag: '"5274dd0ff41b090868548552fd39da3b"', -1951 silly get 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT', -1951 silly get vary: 'Accept-Encoding', -1951 silly get 'cf-cache-status': 'HIT', -1951 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1951 silly get server: 'cloudflare', -1951 silly get 'cf-request-id': '02ddd01e5500001f2df5221200000001' } ] -1952 verbose etag https://registry.npmjs.org/json-schema from cache -1953 verbose get saving json-schema to /home/christine/.npm/registry.npmjs.org/json-schema/.cache.json -1954 silly cache afterAdd verror@1.10.0 -1955 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json not in flight; writing -1956 silly resolveWithNewModule json-schema@0.2.3 checking installable status -1957 silly cache add args [ 'json-schema@0.2.3', null ] -1958 verbose cache add spec json-schema@0.2.3 -1959 silly cache add parsed spec Result { -1959 silly cache add raw: 'json-schema@0.2.3', -1959 silly cache add scope: null, -1959 silly cache add name: 'json-schema', -1959 silly cache add rawSpec: '0.2.3', -1959 silly cache add spec: '0.2.3', -1959 silly cache add type: 'version' } -1960 silly addNamed json-schema@0.2.3 -1961 verbose addNamed "0.2.3" is a plain semver version for json-schema -1962 silly mapToRegistry name json-schema -1963 silly mapToRegistry using default registry -1964 silly mapToRegistry registry https://registry.npmjs.org/ -1965 silly mapToRegistry uri https://registry.npmjs.org/json-schema -1966 verbose addNameVersion registry:https://registry.npmjs.org/json-schema not in flight; fetching -1967 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json written -1968 verbose get https://registry.npmjs.org/json-schema not expired, no request -1969 silly cache afterAdd json-schema@0.2.3 -1970 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json not in flight; writing -1971 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json written -1972 silly fetchNamedPackageData core-util-is -1973 silly mapToRegistry name core-util-is -1974 silly mapToRegistry using default registry -1975 silly mapToRegistry registry https://registry.npmjs.org/ -1976 silly mapToRegistry uri https://registry.npmjs.org/core-util-is -1977 verbose request uri https://registry.npmjs.org/core-util-is -1978 verbose request no auth needed -1979 info attempt registry request try #1 at 13:48:58 -1980 verbose etag W/"8076d16a76bac5764f6fda9911b2b501" -1981 verbose lastModified Sat, 26 May 2018 21:08:01 GMT -1982 http request GET https://registry.npmjs.org/core-util-is -1983 http 304 https://registry.npmjs.org/core-util-is -1984 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1984 verbose headers connection: 'keep-alive', -1984 verbose headers 'set-cookie': -1984 verbose headers [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1984 verbose headers 'cf-ray': '59764faa6c9405fd-FRA', -1984 verbose headers age: '5358', -1984 verbose headers 'cache-control': 'public, max-age=300', -1984 verbose headers etag: '"8076d16a76bac5764f6fda9911b2b501"', -1984 verbose headers 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT', -1984 verbose headers vary: 'Accept-Encoding', -1984 verbose headers 'cf-cache-status': 'HIT', -1984 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1984 verbose headers server: 'cloudflare', -1984 verbose headers 'cf-request-id': '02ddd01e80000005fd8daad200000001' } -1985 silly get cb [ 304, -1985 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1985 silly get connection: 'keep-alive', -1985 silly get 'set-cookie': -1985 silly get [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1985 silly get 'cf-ray': '59764faa6c9405fd-FRA', -1985 silly get age: '5358', -1985 silly get 'cache-control': 'public, max-age=300', -1985 silly get etag: '"8076d16a76bac5764f6fda9911b2b501"', -1985 silly get 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT', -1985 silly get vary: 'Accept-Encoding', -1985 silly get 'cf-cache-status': 'HIT', -1985 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1985 silly get server: 'cloudflare', -1985 silly get 'cf-request-id': '02ddd01e80000005fd8daad200000001' } ] -1986 verbose etag https://registry.npmjs.org/core-util-is from cache -1987 verbose get saving core-util-is to /home/christine/.npm/registry.npmjs.org/core-util-is/.cache.json -1988 silly resolveWithNewModule core-util-is@1.0.2 checking installable status -1989 silly cache add args [ 'core-util-is@1.0.2', null ] -1990 verbose cache add spec core-util-is@1.0.2 -1991 silly cache add parsed spec Result { -1991 silly cache add raw: 'core-util-is@1.0.2', -1991 silly cache add scope: null, -1991 silly cache add name: 'core-util-is', -1991 silly cache add rawSpec: '1.0.2', -1991 silly cache add spec: '1.0.2', -1991 silly cache add type: 'version' } -1992 silly addNamed core-util-is@1.0.2 -1993 verbose addNamed "1.0.2" is a plain semver version for core-util-is -1994 silly mapToRegistry name core-util-is -1995 silly mapToRegistry using default registry -1996 silly mapToRegistry registry https://registry.npmjs.org/ -1997 silly mapToRegistry uri https://registry.npmjs.org/core-util-is -1998 verbose addNameVersion registry:https://registry.npmjs.org/core-util-is not in flight; fetching -1999 verbose get https://registry.npmjs.org/core-util-is not expired, no request -2000 silly cache afterAdd core-util-is@1.0.2 -2001 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json not in flight; writing -2002 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json written -2003 silly fetchNamedPackageData asn1 -2004 silly mapToRegistry name asn1 -2005 silly mapToRegistry using default registry -2006 silly mapToRegistry registry https://registry.npmjs.org/ -2007 silly mapToRegistry uri https://registry.npmjs.org/asn1 -2008 silly fetchNamedPackageData dashdash -2009 silly mapToRegistry name dashdash -2010 silly mapToRegistry using default registry -2011 silly mapToRegistry registry https://registry.npmjs.org/ -2012 silly mapToRegistry uri https://registry.npmjs.org/dashdash -2013 silly fetchNamedPackageData getpass -2014 silly mapToRegistry name getpass -2015 silly mapToRegistry using default registry -2016 silly mapToRegistry registry https://registry.npmjs.org/ -2017 silly mapToRegistry uri https://registry.npmjs.org/getpass -2018 silly fetchNamedPackageData safer-buffer -2019 silly mapToRegistry name safer-buffer -2020 silly mapToRegistry using default registry -2021 silly mapToRegistry registry https://registry.npmjs.org/ -2022 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer -2023 silly fetchNamedPackageData jsbn -2024 silly mapToRegistry name jsbn -2025 silly mapToRegistry using default registry -2026 silly mapToRegistry registry https://registry.npmjs.org/ -2027 silly mapToRegistry uri https://registry.npmjs.org/jsbn -2028 silly fetchNamedPackageData tweetnacl -2029 silly mapToRegistry name tweetnacl -2030 silly mapToRegistry using default registry -2031 silly mapToRegistry registry https://registry.npmjs.org/ -2032 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl -2033 silly fetchNamedPackageData ecc-jsbn -2034 silly mapToRegistry name ecc-jsbn -2035 silly mapToRegistry using default registry -2036 silly mapToRegistry registry https://registry.npmjs.org/ -2037 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn -2038 silly fetchNamedPackageData bcrypt-pbkdf -2039 silly mapToRegistry name bcrypt-pbkdf -2040 silly mapToRegistry using default registry -2041 silly mapToRegistry registry https://registry.npmjs.org/ -2042 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf -2043 verbose request uri https://registry.npmjs.org/asn1 -2044 verbose request no auth needed -2045 info attempt registry request try #1 at 13:48:58 -2046 verbose etag W/"de813efa4f95d8b4547fcf05d55dc504" -2047 verbose lastModified Fri, 13 Dec 2019 16:32:09 GMT -2048 http request GET https://registry.npmjs.org/asn1 -2049 verbose request uri https://registry.npmjs.org/jsbn -2050 verbose request no auth needed -2051 info attempt registry request try #1 at 13:48:58 -2052 verbose etag W/"0611ae2a6c0b557511e766ff564197a0" -2053 verbose lastModified Sun, 27 May 2018 05:34:52 GMT -2054 http request GET https://registry.npmjs.org/jsbn -2055 verbose request uri https://registry.npmjs.org/getpass -2056 verbose request no auth needed -2057 info attempt registry request try #1 at 13:48:58 -2058 verbose etag W/"cbefe53bd31f73e662e9120b48930d2f" -2059 verbose lastModified Fri, 13 Dec 2019 16:32:27 GMT -2060 http request GET https://registry.npmjs.org/getpass -2061 verbose request uri https://registry.npmjs.org/safer-buffer -2062 verbose request no auth needed -2063 info attempt registry request try #1 at 13:48:58 -2064 verbose etag W/"af6bd5bd8c6f8fc6f2baa03c0e1637e9" -2065 verbose lastModified Sun, 27 May 2018 16:29:44 GMT -2066 http request GET https://registry.npmjs.org/safer-buffer -2067 verbose request uri https://registry.npmjs.org/ecc-jsbn -2068 verbose request no auth needed -2069 info attempt registry request try #1 at 13:48:58 -2070 verbose etag W/"972b128f4c15e931ec8836237cce37e0" -2071 verbose lastModified Sun, 29 Jul 2018 17:44:41 GMT -2072 http request GET https://registry.npmjs.org/ecc-jsbn -2073 verbose request uri https://registry.npmjs.org/dashdash -2074 verbose request no auth needed -2075 info attempt registry request try #1 at 13:48:58 -2076 verbose etag W/"4ed0f11669a0fcb66513077f2f321ea9" -2077 verbose lastModified Sat, 26 May 2018 21:43:37 GMT -2078 http request GET https://registry.npmjs.org/dashdash -2079 verbose request uri https://registry.npmjs.org/tweetnacl -2080 verbose request no auth needed -2081 info attempt registry request try #1 at 13:48:58 -2082 verbose etag W/"fbf94e62e5226cbf0f67805b6d51d6fe" -2083 verbose lastModified Thu, 16 Jan 2020 19:29:00 GMT -2084 http request GET https://registry.npmjs.org/tweetnacl -2085 verbose request uri https://registry.npmjs.org/bcrypt-pbkdf -2086 verbose request no auth needed -2087 info attempt registry request try #1 at 13:48:58 -2088 verbose etag W/"46ae03958b9d75cded3b6f53d3277a12" -2089 verbose lastModified Fri, 13 Dec 2019 16:32:11 GMT -2090 http request GET https://registry.npmjs.org/bcrypt-pbkdf -2091 http 304 https://registry.npmjs.org/jsbn -2092 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2092 verbose headers connection: 'keep-alive', -2092 verbose headers 'set-cookie': -2092 verbose headers [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2092 verbose headers 'cf-ray': '59764faad8fd325c-FRA', -2092 verbose headers age: '5657', -2092 verbose headers 'cache-control': 'public, max-age=300', -2092 verbose headers etag: '"0611ae2a6c0b557511e766ff564197a0"', -2092 verbose headers 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT', -2092 verbose headers vary: 'Accept-Encoding', -2092 verbose headers 'cf-cache-status': 'HIT', -2092 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2092 verbose headers server: 'cloudflare', -2092 verbose headers 'cf-request-id': '02ddd01ec40000325c4c86d200000001' } -2093 silly get cb [ 304, -2093 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2093 silly get connection: 'keep-alive', -2093 silly get 'set-cookie': -2093 silly get [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2093 silly get 'cf-ray': '59764faad8fd325c-FRA', -2093 silly get age: '5657', -2093 silly get 'cache-control': 'public, max-age=300', -2093 silly get etag: '"0611ae2a6c0b557511e766ff564197a0"', -2093 silly get 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT', -2093 silly get vary: 'Accept-Encoding', -2093 silly get 'cf-cache-status': 'HIT', -2093 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2093 silly get server: 'cloudflare', -2093 silly get 'cf-request-id': '02ddd01ec40000325c4c86d200000001' } ] -2094 verbose etag https://registry.npmjs.org/jsbn from cache -2095 verbose get saving jsbn to /home/christine/.npm/registry.npmjs.org/jsbn/.cache.json -2096 silly resolveWithNewModule jsbn@0.1.1 checking installable status -2097 silly cache add args [ 'jsbn@~0.1.0', null ] -2098 verbose cache add spec jsbn@~0.1.0 -2099 silly cache add parsed spec Result { -2099 silly cache add raw: 'jsbn@~0.1.0', -2099 silly cache add scope: null, -2099 silly cache add name: 'jsbn', -2099 silly cache add rawSpec: '~0.1.0', -2099 silly cache add spec: '>=0.1.0 <0.2.0', -2099 silly cache add type: 'range' } -2100 silly addNamed jsbn@>=0.1.0 <0.2.0 -2101 verbose addNamed ">=0.1.0 <0.2.0" is a valid semver range for jsbn -2102 silly addNameRange { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: false } -2103 silly mapToRegistry name jsbn -2104 silly mapToRegistry using default registry -2105 silly mapToRegistry registry https://registry.npmjs.org/ -2106 silly mapToRegistry uri https://registry.npmjs.org/jsbn -2107 verbose addNameRange registry:https://registry.npmjs.org/jsbn not in flight; fetching -2108 http 304 https://registry.npmjs.org/safer-buffer -2109 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2109 verbose headers connection: 'keep-alive', -2109 verbose headers 'set-cookie': -2109 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2109 verbose headers 'cf-ray': '59764faadb96648b-FRA', -2109 verbose headers age: '5660', -2109 verbose headers 'cache-control': 'public, max-age=300', -2109 verbose headers etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"', -2109 verbose headers 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT', -2109 verbose headers vary: 'Accept-Encoding', -2109 verbose headers 'cf-cache-status': 'HIT', -2109 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2109 verbose headers server: 'cloudflare', -2109 verbose headers 'cf-request-id': '02ddd01ec80000648bda035200000001' } -2110 silly get cb [ 304, -2110 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2110 silly get connection: 'keep-alive', -2110 silly get 'set-cookie': -2110 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2110 silly get 'cf-ray': '59764faadb96648b-FRA', -2110 silly get age: '5660', -2110 silly get 'cache-control': 'public, max-age=300', -2110 silly get etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"', -2110 silly get 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT', -2110 silly get vary: 'Accept-Encoding', -2110 silly get 'cf-cache-status': 'HIT', -2110 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2110 silly get server: 'cloudflare', -2110 silly get 'cf-request-id': '02ddd01ec80000648bda035200000001' } ] -2111 verbose etag https://registry.npmjs.org/safer-buffer from cache -2112 verbose get saving safer-buffer to /home/christine/.npm/registry.npmjs.org/safer-buffer/.cache.json -2113 http 200 https://registry.npmjs.org/getpass -2114 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2114 verbose headers 'content-type': 'application/json', -2114 verbose headers 'transfer-encoding': 'chunked', -2114 verbose headers connection: 'keep-alive', -2114 verbose headers 'set-cookie': -2114 verbose headers [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2114 verbose headers 'cf-ray': '59764faadf226347-FRA', -2114 verbose headers age: '5656', -2114 verbose headers 'cache-control': 'public, max-age=300', -2114 verbose headers etag: 'W/"869ca13d164a27967315d623e8ce7ed7"', -2114 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT', -2114 verbose headers vary: 'accept-encoding, accept', -2114 verbose headers 'cf-cache-status': 'HIT', -2114 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2114 verbose headers server: 'cloudflare', -2114 verbose headers 'content-encoding': 'gzip', -2114 verbose headers 'cf-request-id': '02ddd01ec800006347e88e6200000001' } -2115 silly get cb [ 200, -2115 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2115 silly get 'content-type': 'application/json', -2115 silly get 'transfer-encoding': 'chunked', -2115 silly get connection: 'keep-alive', -2115 silly get 'set-cookie': -2115 silly get [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2115 silly get 'cf-ray': '59764faadf226347-FRA', -2115 silly get age: '5656', -2115 silly get 'cache-control': 'public, max-age=300', -2115 silly get etag: 'W/"869ca13d164a27967315d623e8ce7ed7"', -2115 silly get 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT', -2115 silly get vary: 'accept-encoding, accept', -2115 silly get 'cf-cache-status': 'HIT', -2115 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2115 silly get server: 'cloudflare', -2115 silly get 'content-encoding': 'gzip', -2115 silly get 'cf-request-id': '02ddd01ec800006347e88e6200000001' } ] -2116 verbose get saving getpass to /home/christine/.npm/registry.npmjs.org/getpass/.cache.json -2117 http 200 https://registry.npmjs.org/bcrypt-pbkdf -2118 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2118 verbose headers 'content-type': 'application/json', -2118 verbose headers 'transfer-encoding': 'chunked', -2118 verbose headers connection: 'keep-alive', -2118 verbose headers 'set-cookie': -2118 verbose headers [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2118 verbose headers 'cf-ray': '59764faaef896413-FRA', -2118 verbose headers age: '5653', -2118 verbose headers 'cache-control': 'public, max-age=300', -2118 verbose headers etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"', -2118 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -2118 verbose headers vary: 'accept-encoding, accept', -2118 verbose headers 'cf-cache-status': 'HIT', -2118 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2118 verbose headers server: 'cloudflare', -2118 verbose headers 'content-encoding': 'gzip', -2118 verbose headers 'cf-request-id': '02ddd01ece000064135f93f200000001' } -2119 silly get cb [ 200, -2119 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2119 silly get 'content-type': 'application/json', -2119 silly get 'transfer-encoding': 'chunked', -2119 silly get connection: 'keep-alive', -2119 silly get 'set-cookie': -2119 silly get [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2119 silly get 'cf-ray': '59764faaef896413-FRA', -2119 silly get age: '5653', -2119 silly get 'cache-control': 'public, max-age=300', -2119 silly get etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"', -2119 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -2119 silly get vary: 'accept-encoding, accept', -2119 silly get 'cf-cache-status': 'HIT', -2119 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2119 silly get server: 'cloudflare', -2119 silly get 'content-encoding': 'gzip', -2119 silly get 'cf-request-id': '02ddd01ece000064135f93f200000001' } ] -2120 verbose get saving bcrypt-pbkdf to /home/christine/.npm/registry.npmjs.org/bcrypt-pbkdf/.cache.json -2121 http 200 https://registry.npmjs.org/asn1 -2122 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2122 verbose headers 'content-type': 'application/json', -2122 verbose headers 'transfer-encoding': 'chunked', -2122 verbose headers connection: 'keep-alive', -2122 verbose headers 'set-cookie': -2122 verbose headers [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2122 verbose headers 'cf-ray': '59764faadddcc272-FRA', -2122 verbose headers age: '5652', -2122 verbose headers 'cache-control': 'public, max-age=300', -2122 verbose headers etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"', -2122 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT', -2122 verbose headers vary: 'accept-encoding, accept', -2122 verbose headers 'cf-cache-status': 'HIT', -2122 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2122 verbose headers server: 'cloudflare', -2122 verbose headers 'content-encoding': 'gzip', -2122 verbose headers 'cf-request-id': '02ddd01ec40000c272388f9200000001' } -2123 silly get cb [ 200, -2123 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2123 silly get 'content-type': 'application/json', -2123 silly get 'transfer-encoding': 'chunked', -2123 silly get connection: 'keep-alive', -2123 silly get 'set-cookie': -2123 silly get [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2123 silly get 'cf-ray': '59764faadddcc272-FRA', -2123 silly get age: '5652', -2123 silly get 'cache-control': 'public, max-age=300', -2123 silly get etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"', -2123 silly get 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT', -2123 silly get vary: 'accept-encoding, accept', -2123 silly get 'cf-cache-status': 'HIT', -2123 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2123 silly get server: 'cloudflare', -2123 silly get 'content-encoding': 'gzip', -2123 silly get 'cf-request-id': '02ddd01ec40000c272388f9200000001' } ] -2124 verbose get saving asn1 to /home/christine/.npm/registry.npmjs.org/asn1/.cache.json -2125 verbose get https://registry.npmjs.org/jsbn not expired, no request -2126 silly addNameRange number 2 { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: true } -2127 silly addNameRange versions [ 'jsbn', [ '0.0.0', '0.1.0', '0.1.1', '1.1.0' ] ] -2128 silly addNamed jsbn@0.1.1 -2129 verbose addNamed "0.1.1" is a plain semver version for jsbn -2130 http 304 https://registry.npmjs.org/dashdash -2131 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2131 verbose headers connection: 'keep-alive', -2131 verbose headers 'set-cookie': -2131 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2131 verbose headers 'cf-ray': '59764faaeb21175a-FRA', -2131 verbose headers age: '5350', -2131 verbose headers 'cache-control': 'public, max-age=300', -2131 verbose headers etag: '"4ed0f11669a0fcb66513077f2f321ea9"', -2131 verbose headers 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT', -2131 verbose headers vary: 'Accept-Encoding', -2131 verbose headers 'cf-cache-status': 'HIT', -2131 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2131 verbose headers server: 'cloudflare', -2131 verbose headers 'cf-request-id': '02ddd01ece0000175a1e236200000001' } -2132 silly get cb [ 304, -2132 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2132 silly get connection: 'keep-alive', -2132 silly get 'set-cookie': -2132 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2132 silly get 'cf-ray': '59764faaeb21175a-FRA', -2132 silly get age: '5350', -2132 silly get 'cache-control': 'public, max-age=300', -2132 silly get etag: '"4ed0f11669a0fcb66513077f2f321ea9"', -2132 silly get 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT', -2132 silly get vary: 'Accept-Encoding', -2132 silly get 'cf-cache-status': 'HIT', -2132 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2132 silly get server: 'cloudflare', -2132 silly get 'cf-request-id': '02ddd01ece0000175a1e236200000001' } ] -2133 verbose etag https://registry.npmjs.org/dashdash from cache -2134 verbose get saving dashdash to /home/christine/.npm/registry.npmjs.org/dashdash/.cache.json -2135 silly resolveWithNewModule safer-buffer@2.1.2 checking installable status -2136 silly cache add args [ 'safer-buffer@^2.0.2', null ] -2137 verbose cache add spec safer-buffer@^2.0.2 -2138 silly cache add parsed spec Result { -2138 silly cache add raw: 'safer-buffer@^2.0.2', -2138 silly cache add scope: null, -2138 silly cache add name: 'safer-buffer', -2138 silly cache add rawSpec: '^2.0.2', -2138 silly cache add spec: '>=2.0.2 <3.0.0', -2138 silly cache add type: 'range' } -2139 silly addNamed safer-buffer@>=2.0.2 <3.0.0 -2140 verbose addNamed ">=2.0.2 <3.0.0" is a valid semver range for safer-buffer -2141 silly addNameRange { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: false } -2142 silly mapToRegistry name safer-buffer -2143 silly mapToRegistry using default registry -2144 silly mapToRegistry registry https://registry.npmjs.org/ -2145 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer -2146 verbose addNameRange registry:https://registry.npmjs.org/safer-buffer not in flight; fetching -2147 silly resolveWithNewModule getpass@0.1.7 checking installable status -2148 silly cache add args [ 'getpass@^0.1.1', null ] -2149 verbose cache add spec getpass@^0.1.1 -2150 silly cache add parsed spec Result { -2150 silly cache add raw: 'getpass@^0.1.1', -2150 silly cache add scope: null, -2150 silly cache add name: 'getpass', -2150 silly cache add rawSpec: '^0.1.1', -2150 silly cache add spec: '>=0.1.1 <0.2.0', -2150 silly cache add type: 'range' } -2151 silly addNamed getpass@>=0.1.1 <0.2.0 -2152 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for getpass -2153 silly addNameRange { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: false } -2154 silly mapToRegistry name getpass -2155 silly mapToRegistry using default registry -2156 silly mapToRegistry registry https://registry.npmjs.org/ -2157 silly mapToRegistry uri https://registry.npmjs.org/getpass -2158 verbose addNameRange registry:https://registry.npmjs.org/getpass not in flight; fetching -2159 silly resolveWithNewModule bcrypt-pbkdf@1.0.2 checking installable status -2160 silly cache add args [ 'bcrypt-pbkdf@^1.0.0', null ] -2161 verbose cache add spec bcrypt-pbkdf@^1.0.0 -2162 silly cache add parsed spec Result { -2162 silly cache add raw: 'bcrypt-pbkdf@^1.0.0', -2162 silly cache add scope: null, -2162 silly cache add name: 'bcrypt-pbkdf', -2162 silly cache add rawSpec: '^1.0.0', -2162 silly cache add spec: '>=1.0.0 <2.0.0', -2162 silly cache add type: 'range' } -2163 silly addNamed bcrypt-pbkdf@>=1.0.0 <2.0.0 -2164 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for bcrypt-pbkdf -2165 silly addNameRange { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: false } -2166 silly mapToRegistry name bcrypt-pbkdf -2167 silly mapToRegistry using default registry -2168 silly mapToRegistry registry https://registry.npmjs.org/ -2169 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf -2170 verbose addNameRange registry:https://registry.npmjs.org/bcrypt-pbkdf not in flight; fetching -2171 silly cache afterAdd jsbn@0.1.1 -2172 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json not in flight; writing -2173 silly resolveWithNewModule asn1@0.2.4 checking installable status -2174 silly cache add args [ 'asn1@~0.2.3', null ] -2175 verbose cache add spec asn1@~0.2.3 -2176 silly cache add parsed spec Result { -2176 silly cache add raw: 'asn1@~0.2.3', -2176 silly cache add scope: null, -2176 silly cache add name: 'asn1', -2176 silly cache add rawSpec: '~0.2.3', -2176 silly cache add spec: '>=0.2.3 <0.3.0', -2176 silly cache add type: 'range' } -2177 silly addNamed asn1@>=0.2.3 <0.3.0 -2178 verbose addNamed ">=0.2.3 <0.3.0" is a valid semver range for asn1 -2179 silly addNameRange { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: false } -2180 silly mapToRegistry name asn1 -2181 silly mapToRegistry using default registry -2182 silly mapToRegistry registry https://registry.npmjs.org/ -2183 silly mapToRegistry uri https://registry.npmjs.org/asn1 -2184 verbose addNameRange registry:https://registry.npmjs.org/asn1 not in flight; fetching -2185 silly resolveWithNewModule dashdash@1.14.1 checking installable status -2186 silly cache add args [ 'dashdash@^1.12.0', null ] -2187 verbose cache add spec dashdash@^1.12.0 -2188 silly cache add parsed spec Result { -2188 silly cache add raw: 'dashdash@^1.12.0', -2188 silly cache add scope: null, -2188 silly cache add name: 'dashdash', -2188 silly cache add rawSpec: '^1.12.0', -2188 silly cache add spec: '>=1.12.0 <2.0.0', -2188 silly cache add type: 'range' } -2189 silly addNamed dashdash@>=1.12.0 <2.0.0 -2190 verbose addNamed ">=1.12.0 <2.0.0" is a valid semver range for dashdash -2191 silly addNameRange { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: false } -2192 silly mapToRegistry name dashdash -2193 silly mapToRegistry using default registry -2194 silly mapToRegistry registry https://registry.npmjs.org/ -2195 silly mapToRegistry uri https://registry.npmjs.org/dashdash -2196 verbose addNameRange registry:https://registry.npmjs.org/dashdash not in flight; fetching -2197 http 200 https://registry.npmjs.org/tweetnacl -2198 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2198 verbose headers 'content-type': 'application/json', -2198 verbose headers 'transfer-encoding': 'chunked', -2198 verbose headers connection: 'keep-alive', -2198 verbose headers 'set-cookie': -2198 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2198 verbose headers 'cf-ray': '59764faae943d715-FRA', -2198 verbose headers age: '5653', -2198 verbose headers 'cache-control': 'public, max-age=300', -2198 verbose headers etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"', -2198 verbose headers 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT', -2198 verbose headers vary: 'accept-encoding, accept', -2198 verbose headers 'cf-cache-status': 'HIT', -2198 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2198 verbose headers server: 'cloudflare', -2198 verbose headers 'content-encoding': 'gzip', -2198 verbose headers 'cf-request-id': '02ddd01ecf0000d715c122c200000001' } -2199 silly get cb [ 200, -2199 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2199 silly get 'content-type': 'application/json', -2199 silly get 'transfer-encoding': 'chunked', -2199 silly get connection: 'keep-alive', -2199 silly get 'set-cookie': -2199 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2199 silly get 'cf-ray': '59764faae943d715-FRA', -2199 silly get age: '5653', -2199 silly get 'cache-control': 'public, max-age=300', -2199 silly get etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"', -2199 silly get 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT', -2199 silly get vary: 'accept-encoding, accept', -2199 silly get 'cf-cache-status': 'HIT', -2199 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2199 silly get server: 'cloudflare', -2199 silly get 'content-encoding': 'gzip', -2199 silly get 'cf-request-id': '02ddd01ecf0000d715c122c200000001' } ] -2200 verbose get saving tweetnacl to /home/christine/.npm/registry.npmjs.org/tweetnacl/.cache.json -2201 verbose get https://registry.npmjs.org/safer-buffer not expired, no request -2202 silly addNameRange number 2 { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: true } -2203 silly addNameRange versions [ 'safer-buffer', -2203 silly addNameRange [ '2.0.0', '2.0.1', '2.0.2', '2.1.0', '2.1.1', '2.1.2' ] ] -2204 silly addNamed safer-buffer@2.1.2 -2205 verbose addNamed "2.1.2" is a plain semver version for safer-buffer -2206 verbose get https://registry.npmjs.org/getpass not expired, no request -2207 silly addNameRange number 2 { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: true } -2208 silly addNameRange versions [ 'getpass', -2208 silly addNameRange [ '0.1.0', -2208 silly addNameRange '0.1.1', -2208 silly addNameRange '0.1.2', -2208 silly addNameRange '0.1.3', -2208 silly addNameRange '0.1.4', -2208 silly addNameRange '0.1.5', -2208 silly addNameRange '0.1.6', -2208 silly addNameRange '0.1.7' ] ] -2209 silly addNamed getpass@0.1.7 -2210 verbose addNamed "0.1.7" is a plain semver version for getpass -2211 verbose get https://registry.npmjs.org/bcrypt-pbkdf not expired, no request -2212 silly addNameRange number 2 { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: true } -2213 silly addNameRange versions [ 'bcrypt-pbkdf', [ '1.0.0', '1.0.1', '1.0.2' ] ] -2214 silly addNamed bcrypt-pbkdf@1.0.2 -2215 verbose addNamed "1.0.2" is a plain semver version for bcrypt-pbkdf -2216 verbose get https://registry.npmjs.org/asn1 not expired, no request -2217 silly addNameRange number 2 { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: true } -2218 silly addNameRange versions [ 'asn1', -2218 silly addNameRange [ '0.1.0', -2218 silly addNameRange '0.1.1', -2218 silly addNameRange '0.1.2', -2218 silly addNameRange '0.1.3', -2218 silly addNameRange '0.1.4', -2218 silly addNameRange '0.1.5', -2218 silly addNameRange '0.1.6', -2218 silly addNameRange '0.1.7', -2218 silly addNameRange '0.1.8', -2218 silly addNameRange '0.1.9', -2218 silly addNameRange '0.1.10', -2218 silly addNameRange '0.1.11', -2218 silly addNameRange '0.2.0', -2218 silly addNameRange '0.2.1', -2218 silly addNameRange '0.2.2', -2218 silly addNameRange '0.2.3', -2218 silly addNameRange '0.2.4' ] ] -2219 silly addNamed asn1@0.2.4 -2220 verbose addNamed "0.2.4" is a plain semver version for asn1 -2221 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json written -2222 http 304 https://registry.npmjs.org/ecc-jsbn -2223 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2223 verbose headers connection: 'keep-alive', -2223 verbose headers 'set-cookie': -2223 verbose headers [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2223 verbose headers 'cf-ray': '59764faaec18dfc7-FRA', -2223 verbose headers age: '5653', -2223 verbose headers 'cache-control': 'public, max-age=300', -2223 verbose headers etag: '"972b128f4c15e931ec8836237cce37e0"', -2223 verbose headers 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT', -2223 verbose headers vary: 'Accept-Encoding', -2223 verbose headers 'cf-cache-status': 'HIT', -2223 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2223 verbose headers server: 'cloudflare', -2223 verbose headers 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' } -2224 silly get cb [ 304, -2224 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2224 silly get connection: 'keep-alive', -2224 silly get 'set-cookie': -2224 silly get [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2224 silly get 'cf-ray': '59764faaec18dfc7-FRA', -2224 silly get age: '5653', -2224 silly get 'cache-control': 'public, max-age=300', -2224 silly get etag: '"972b128f4c15e931ec8836237cce37e0"', -2224 silly get 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT', -2224 silly get vary: 'Accept-Encoding', -2224 silly get 'cf-cache-status': 'HIT', -2224 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2224 silly get server: 'cloudflare', -2224 silly get 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' } ] -2225 verbose etag https://registry.npmjs.org/ecc-jsbn from cache -2226 verbose get saving ecc-jsbn to /home/christine/.npm/registry.npmjs.org/ecc-jsbn/.cache.json -2227 verbose get https://registry.npmjs.org/dashdash not expired, no request -2228 silly addNameRange number 2 { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: true } -2229 silly addNameRange versions [ 'dashdash', -2229 silly addNameRange [ '1.0.0', -2229 silly addNameRange '1.0.1', -2229 silly addNameRange '1.0.2', -2229 silly addNameRange '1.1.0', -2229 silly addNameRange '1.2.0', -2229 silly addNameRange '1.2.1', -2229 silly addNameRange '1.3.0', -2229 silly addNameRange '1.3.1', -2229 silly addNameRange '1.3.2', -2229 silly addNameRange '1.4.0', -2229 silly addNameRange '1.5.0', -2229 silly addNameRange '1.6.0', -2229 silly addNameRange '1.7.0', -2229 silly addNameRange '1.7.1', -2229 silly addNameRange '1.7.2', -2229 silly addNameRange '1.7.3', -2229 silly addNameRange '1.8.0', -2229 silly addNameRange '1.9.0', -2229 silly addNameRange '1.10.0', -2229 silly addNameRange '1.10.1', -2229 silly addNameRange '1.11.0', -2229 silly addNameRange '1.12.0', -2229 silly addNameRange '1.12.1', -2229 silly addNameRange '1.12.2', -2229 silly addNameRange '1.13.0', -2229 silly addNameRange '1.13.1', -2229 silly addNameRange '1.14.0', -2229 silly addNameRange '1.14.1' ] ] -2230 silly addNamed dashdash@1.14.1 -2231 verbose addNamed "1.14.1" is a plain semver version for dashdash -2232 silly cache afterAdd safer-buffer@2.1.2 -2233 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json not in flight; writing -2234 silly resolveWithNewModule tweetnacl@0.14.5 checking installable status -2235 silly cache add args [ 'tweetnacl@~0.14.0', null ] -2236 verbose cache add spec tweetnacl@~0.14.0 -2237 silly cache add parsed spec Result { -2237 silly cache add raw: 'tweetnacl@~0.14.0', -2237 silly cache add scope: null, -2237 silly cache add name: 'tweetnacl', -2237 silly cache add rawSpec: '~0.14.0', -2237 silly cache add spec: '>=0.14.0 <0.15.0', -2237 silly cache add type: 'range' } -2238 silly addNamed tweetnacl@>=0.14.0 <0.15.0 -2239 verbose addNamed ">=0.14.0 <0.15.0" is a valid semver range for tweetnacl -2240 silly addNameRange { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: false } -2241 silly mapToRegistry name tweetnacl -2242 silly mapToRegistry using default registry -2243 silly mapToRegistry registry https://registry.npmjs.org/ -2244 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl -2245 verbose addNameRange registry:https://registry.npmjs.org/tweetnacl not in flight; fetching -2246 silly cache afterAdd getpass@0.1.7 -2247 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json not in flight; writing -2248 silly cache afterAdd asn1@0.2.4 -2249 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json not in flight; writing -2250 silly cache afterAdd bcrypt-pbkdf@1.0.2 -2251 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json not in flight; writing -2252 silly resolveWithNewModule ecc-jsbn@0.1.2 checking installable status -2253 silly cache add args [ 'ecc-jsbn@~0.1.1', null ] -2254 verbose cache add spec ecc-jsbn@~0.1.1 -2255 silly cache add parsed spec Result { -2255 silly cache add raw: 'ecc-jsbn@~0.1.1', -2255 silly cache add scope: null, -2255 silly cache add name: 'ecc-jsbn', -2255 silly cache add rawSpec: '~0.1.1', -2255 silly cache add spec: '>=0.1.1 <0.2.0', -2255 silly cache add type: 'range' } -2256 silly addNamed ecc-jsbn@>=0.1.1 <0.2.0 -2257 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for ecc-jsbn -2258 silly addNameRange { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: false } -2259 silly mapToRegistry name ecc-jsbn -2260 silly mapToRegistry using default registry -2261 silly mapToRegistry registry https://registry.npmjs.org/ -2262 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn -2263 verbose addNameRange registry:https://registry.npmjs.org/ecc-jsbn not in flight; fetching -2264 silly cache afterAdd dashdash@1.14.1 -2265 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json not in flight; writing -2266 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json written -2267 verbose get https://registry.npmjs.org/tweetnacl not expired, no request -2268 silly addNameRange number 2 { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: true } -2269 silly addNameRange versions [ 'tweetnacl', -2269 silly addNameRange [ '0.9.1', -2269 silly addNameRange '0.9.2', -2269 silly addNameRange '0.10.0', -2269 silly addNameRange '0.10.1', -2269 silly addNameRange '0.11.0', -2269 silly addNameRange '0.11.1', -2269 silly addNameRange '0.11.2', -2269 silly addNameRange '0.12.0', -2269 silly addNameRange '0.12.1', -2269 silly addNameRange '0.12.2', -2269 silly addNameRange '0.13.0', -2269 silly addNameRange '0.13.1', -2269 silly addNameRange '0.13.2', -2269 silly addNameRange '0.13.3', -2269 silly addNameRange '0.14.0', -2269 silly addNameRange '0.14.1', -2269 silly addNameRange '0.14.2', -2269 silly addNameRange '0.14.3', -2269 silly addNameRange '0.14.4', -2269 silly addNameRange '0.14.5', -2269 silly addNameRange '1.0.0-rc.1', -2269 silly addNameRange '1.0.0', -2269 silly addNameRange '1.0.1', -2269 silly addNameRange '1.0.2', -2269 silly addNameRange '1.0.3' ] ] -2270 silly addNamed tweetnacl@0.14.5 -2271 verbose addNamed "0.14.5" is a plain semver version for tweetnacl -2272 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json written -2273 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json written -2274 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json written -2275 verbose get https://registry.npmjs.org/ecc-jsbn not expired, no request -2276 silly addNameRange number 2 { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: true } -2277 silly addNameRange versions [ 'ecc-jsbn', [ '0.0.1', '0.1.1', '0.1.2', '0.2.0' ] ] -2278 silly addNamed ecc-jsbn@0.1.2 -2279 verbose addNamed "0.1.2" is a plain semver version for ecc-jsbn -2280 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json written -2281 silly cache afterAdd tweetnacl@0.14.5 -2282 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json not in flight; writing -2283 silly cache afterAdd ecc-jsbn@0.1.2 -2284 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json not in flight; writing -2285 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json written -2286 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json written -2287 silly fetchNamedPackageData psl -2288 silly mapToRegistry name psl -2289 silly mapToRegistry using default registry -2290 silly mapToRegistry registry https://registry.npmjs.org/ -2291 silly mapToRegistry uri https://registry.npmjs.org/psl -2292 verbose request uri https://registry.npmjs.org/psl -2293 verbose request no auth needed -2294 info attempt registry request try #1 at 13:48:58 -2295 verbose etag W/"101ba2d632d4780d2de3d351ee1405be" -2296 verbose lastModified Sat, 28 Dec 2019 13:07:08 GMT -2297 http request GET https://registry.npmjs.org/psl -2298 http 200 https://registry.npmjs.org/psl -2299 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2299 verbose headers 'content-type': 'application/json', -2299 verbose headers 'transfer-encoding': 'chunked', -2299 verbose headers connection: 'keep-alive', -2299 verbose headers 'set-cookie': -2299 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2299 verbose headers 'cf-ray': '59764fab685905bb-FRA', -2299 verbose headers age: '5659', -2299 verbose headers 'cache-control': 'public, max-age=300', -2299 verbose headers etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"', -2299 verbose headers 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT', -2299 verbose headers vary: 'accept-encoding, accept', -2299 verbose headers 'cf-cache-status': 'HIT', -2299 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2299 verbose headers server: 'cloudflare', -2299 verbose headers 'content-encoding': 'gzip', -2299 verbose headers 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' } -2300 silly get cb [ 200, -2300 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2300 silly get 'content-type': 'application/json', -2300 silly get 'transfer-encoding': 'chunked', -2300 silly get connection: 'keep-alive', -2300 silly get 'set-cookie': -2300 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2300 silly get 'cf-ray': '59764fab685905bb-FRA', -2300 silly get age: '5659', -2300 silly get 'cache-control': 'public, max-age=300', -2300 silly get etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"', -2300 silly get 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT', -2300 silly get vary: 'accept-encoding, accept', -2300 silly get 'cf-cache-status': 'HIT', -2300 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2300 silly get server: 'cloudflare', -2300 silly get 'content-encoding': 'gzip', -2300 silly get 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' } ] -2301 verbose get saving psl to /home/christine/.npm/registry.npmjs.org/psl/.cache.json -2302 silly resolveWithNewModule psl@1.8.0 checking installable status -2303 silly cache add args [ 'psl@^1.1.28', null ] -2304 verbose cache add spec psl@^1.1.28 -2305 silly cache add parsed spec Result { -2305 silly cache add raw: 'psl@^1.1.28', -2305 silly cache add scope: null, -2305 silly cache add name: 'psl', -2305 silly cache add rawSpec: '^1.1.28', -2305 silly cache add spec: '>=1.1.28 <2.0.0', -2305 silly cache add type: 'range' } -2306 silly addNamed psl@>=1.1.28 <2.0.0 -2307 verbose addNamed ">=1.1.28 <2.0.0" is a valid semver range for psl -2308 silly addNameRange { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: false } -2309 silly mapToRegistry name psl -2310 silly mapToRegistry using default registry -2311 silly mapToRegistry registry https://registry.npmjs.org/ -2312 silly mapToRegistry uri https://registry.npmjs.org/psl -2313 verbose addNameRange registry:https://registry.npmjs.org/psl not in flight; fetching -2314 verbose get https://registry.npmjs.org/psl not expired, no request -2315 silly addNameRange number 2 { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: true } -2316 silly addNameRange versions [ 'psl', -2316 silly addNameRange [ '1.0.0', -2316 silly addNameRange '1.0.1', -2316 silly addNameRange '1.0.2', -2316 silly addNameRange '1.1.0', -2316 silly addNameRange '1.1.1', -2316 silly addNameRange '1.1.2', -2316 silly addNameRange '1.1.3', -2316 silly addNameRange '1.1.4', -2316 silly addNameRange '1.1.5', -2316 silly addNameRange '1.1.6', -2316 silly addNameRange '1.1.7', -2316 silly addNameRange '1.1.8', -2316 silly addNameRange '1.1.9', -2316 silly addNameRange '1.1.10', -2316 silly addNameRange '1.1.11', -2316 silly addNameRange '1.1.12', -2316 silly addNameRange '1.1.13', -2316 silly addNameRange '1.1.14', -2316 silly addNameRange '1.1.15', -2316 silly addNameRange '1.1.16', -2316 silly addNameRange '1.1.17', -2316 silly addNameRange '1.1.18', -2316 silly addNameRange '1.1.19', -2316 silly addNameRange '1.1.20', -2316 silly addNameRange '1.1.21', -2316 silly addNameRange '1.1.22', -2316 silly addNameRange '1.1.23', -2316 silly addNameRange '1.1.24', -2316 silly addNameRange '1.1.25', -2316 silly addNameRange '1.1.26', -2316 silly addNameRange '1.1.27', -2316 silly addNameRange '1.1.28', -2316 silly addNameRange '1.1.29', -2316 silly addNameRange '1.1.30', -2316 silly addNameRange '1.1.31', -2316 silly addNameRange '1.1.32', -2316 silly addNameRange '1.1.33', -2316 silly addNameRange '1.2.0', -2316 silly addNameRange '1.3.0', -2316 silly addNameRange '1.3.1', -2316 silly addNameRange '1.4.0', -2316 silly addNameRange '1.5.0', -2316 silly addNameRange '1.6.0', -2316 silly addNameRange '1.7.0', -2316 silly addNameRange '1.8.0' ] ] -2317 silly addNamed psl@1.8.0 -2318 verbose addNamed "1.8.0" is a plain semver version for psl -2319 silly mapToRegistry name psl -2320 silly mapToRegistry using default registry -2321 silly mapToRegistry registry https://registry.npmjs.org/ -2322 silly mapToRegistry uri https://registry.npmjs.org/psl -2323 verbose addRemoteTarball https://registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding -2324 verbose addRemoteTarball [ 'https://registry.npmjs.org/psl/-/psl-1.8.0.tgz', -2324 verbose addRemoteTarball '9326f8bcfb013adcc005fdff056acce020e51c24' ] -2325 info retry fetch attempt 1 at 13:48:58 -2326 info attempt registry request try #1 at 13:48:58 -2327 http fetch GET https://registry.npmjs.org/psl/-/psl-1.8.0.tgz -2328 http fetch 200 https://registry.npmjs.org/psl/-/psl-1.8.0.tgz -2329 silly fetchAndShaCheck shasum 9326f8bcfb013adcc005fdff056acce020e51c24 -2330 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding -2331 verbose addTmpTarball already have metadata; skipping unpack for psl@1.8.0 -2332 silly cache afterAdd psl@1.8.0 -2333 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json not in flight; writing -2334 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json written -2335 silly loadAllDepsIntoIdealTree Finishing -2336 silly idealTree:prePrune lib -2336 silly idealTree:prePrune └─┬ less@3.11.1 -2336 silly idealTree:prePrune ├── ajv@6.12.2 -2336 silly idealTree:prePrune ├── asap@2.0.6 -2336 silly idealTree:prePrune ├── asn1@0.2.4 -2336 silly idealTree:prePrune ├── assert-plus@1.0.0 -2336 silly idealTree:prePrune ├── asynckit@0.4.0 -2336 silly idealTree:prePrune ├── aws-sign2@0.7.0 -2336 silly idealTree:prePrune ├── aws4@1.9.1 -2336 silly idealTree:prePrune ├── bcrypt-pbkdf@1.0.2 -2336 silly idealTree:prePrune ├── caseless@0.12.0 -2336 silly idealTree:prePrune ├── clone@2.1.2 -2336 silly idealTree:prePrune ├── combined-stream@1.0.8 -2336 silly idealTree:prePrune ├── core-util-is@1.0.2 -2336 silly idealTree:prePrune ├── dashdash@1.14.1 -2336 silly idealTree:prePrune ├── delayed-stream@1.0.0 -2336 silly idealTree:prePrune ├── ecc-jsbn@0.1.2 -2336 silly idealTree:prePrune ├── errno@0.1.7 -2336 silly idealTree:prePrune ├── extend@3.0.2 -2336 silly idealTree:prePrune ├── extsprintf@1.3.0 -2336 silly idealTree:prePrune ├── fast-deep-equal@3.1.1 -2336 silly idealTree:prePrune ├── fast-json-stable-stringify@2.1.0 -2336 silly idealTree:prePrune ├── forever-agent@0.6.1 -2336 silly idealTree:prePrune ├── form-data@2.3.3 -2336 silly idealTree:prePrune ├── getpass@0.1.7 -2336 silly idealTree:prePrune ├── graceful-fs@4.2.4 -2336 silly idealTree:prePrune ├── har-schema@2.0.0 -2336 silly idealTree:prePrune ├── har-validator@5.1.3 -2336 silly idealTree:prePrune ├── http-signature@1.2.0 -2336 silly idealTree:prePrune ├── image-size@0.5.5 -2336 silly idealTree:prePrune ├── is-typedarray@1.0.0 -2336 silly idealTree:prePrune ├── isstream@0.1.2 -2336 silly idealTree:prePrune ├── jsbn@0.1.1 -2336 silly idealTree:prePrune ├── json-schema-traverse@0.4.1 -2336 silly idealTree:prePrune ├── json-schema@0.2.3 -2336 silly idealTree:prePrune ├── json-stringify-safe@5.0.1 -2336 silly idealTree:prePrune ├── jsprim@1.4.1 -2336 silly idealTree:prePrune ├── mime-db@1.44.0 -2336 silly idealTree:prePrune ├── mime-types@2.1.27 -2336 silly idealTree:prePrune ├── mime@1.6.0 -2336 silly idealTree:prePrune ├── minimist@1.2.5 -2336 silly idealTree:prePrune ├── mkdirp@0.5.5 -2336 silly idealTree:prePrune ├── oauth-sign@0.9.0 -2336 silly idealTree:prePrune ├── performance-now@2.1.0 -2336 silly idealTree:prePrune ├── promise@7.3.1 -2336 silly idealTree:prePrune ├── prr@1.0.1 -2336 silly idealTree:prePrune ├── psl@1.8.0 -2336 silly idealTree:prePrune ├── punycode@2.1.1 -2336 silly idealTree:prePrune ├── qs@6.5.2 -2336 silly idealTree:prePrune ├── request@2.88.2 -2336 silly idealTree:prePrune ├── safe-buffer@5.2.1 -2336 silly idealTree:prePrune ├── safer-buffer@2.1.2 -2336 silly idealTree:prePrune ├── source-map@0.6.1 -2336 silly idealTree:prePrune ├── sshpk@1.16.1 -2336 silly idealTree:prePrune ├── tough-cookie@2.5.0 -2336 silly idealTree:prePrune ├── tslib@1.13.0 -2336 silly idealTree:prePrune ├── tunnel-agent@0.6.0 -2336 silly idealTree:prePrune ├── tweetnacl@0.14.5 -2336 silly idealTree:prePrune ├── uri-js@4.2.2 -2336 silly idealTree:prePrune ├── uuid@3.4.0 -2336 silly idealTree:prePrune └── verror@1.10.0 -2337 silly loadIdealTree Finishing -2338 silly currentTree lib -2339 silly idealTree lib -2339 silly idealTree └─┬ less@3.11.1 -2339 silly idealTree ├── ajv@6.12.2 -2339 silly idealTree ├── asap@2.0.6 -2339 silly idealTree ├── asn1@0.2.4 -2339 silly idealTree ├── assert-plus@1.0.0 -2339 silly idealTree ├── asynckit@0.4.0 -2339 silly idealTree ├── aws-sign2@0.7.0 -2339 silly idealTree ├── aws4@1.9.1 -2339 silly idealTree ├── bcrypt-pbkdf@1.0.2 -2339 silly idealTree ├── caseless@0.12.0 -2339 silly idealTree ├── clone@2.1.2 -2339 silly idealTree ├── combined-stream@1.0.8 -2339 silly idealTree ├── core-util-is@1.0.2 -2339 silly idealTree ├── dashdash@1.14.1 -2339 silly idealTree ├── delayed-stream@1.0.0 -2339 silly idealTree ├── ecc-jsbn@0.1.2 -2339 silly idealTree ├── errno@0.1.7 -2339 silly idealTree ├── extend@3.0.2 -2339 silly idealTree ├── extsprintf@1.3.0 -2339 silly idealTree ├── fast-deep-equal@3.1.1 -2339 silly idealTree ├── fast-json-stable-stringify@2.1.0 -2339 silly idealTree ├── forever-agent@0.6.1 -2339 silly idealTree ├── form-data@2.3.3 -2339 silly idealTree ├── getpass@0.1.7 -2339 silly idealTree ├── graceful-fs@4.2.4 -2339 silly idealTree ├── har-schema@2.0.0 -2339 silly idealTree ├── har-validator@5.1.3 -2339 silly idealTree ├── http-signature@1.2.0 -2339 silly idealTree ├── image-size@0.5.5 -2339 silly idealTree ├── is-typedarray@1.0.0 -2339 silly idealTree ├── isstream@0.1.2 -2339 silly idealTree ├── jsbn@0.1.1 -2339 silly idealTree ├── json-schema-traverse@0.4.1 -2339 silly idealTree ├── json-schema@0.2.3 -2339 silly idealTree ├── json-stringify-safe@5.0.1 -2339 silly idealTree ├── jsprim@1.4.1 -2339 silly idealTree ├── mime-db@1.44.0 -2339 silly idealTree ├── mime-types@2.1.27 -2339 silly idealTree ├── mime@1.6.0 -2339 silly idealTree ├── minimist@1.2.5 -2339 silly idealTree ├── mkdirp@0.5.5 -2339 silly idealTree ├── oauth-sign@0.9.0 -2339 silly idealTree ├── performance-now@2.1.0 -2339 silly idealTree ├── promise@7.3.1 -2339 silly idealTree ├── prr@1.0.1 -2339 silly idealTree ├── psl@1.8.0 -2339 silly idealTree ├── punycode@2.1.1 -2339 silly idealTree ├── qs@6.5.2 -2339 silly idealTree ├── request@2.88.2 -2339 silly idealTree ├── safe-buffer@5.2.1 -2339 silly idealTree ├── safer-buffer@2.1.2 -2339 silly idealTree ├── source-map@0.6.1 -2339 silly idealTree ├── sshpk@1.16.1 -2339 silly idealTree ├── tough-cookie@2.5.0 -2339 silly idealTree ├── tslib@1.13.0 -2339 silly idealTree ├── tunnel-agent@0.6.0 -2339 silly idealTree ├── tweetnacl@0.14.5 -2339 silly idealTree ├── uri-js@4.2.2 -2339 silly idealTree ├── uuid@3.4.0 -2339 silly idealTree └── verror@1.10.0 -2340 silly generateActionsToTake Starting -2341 silly install generateActionsToTake -2342 warn checkPermissions Missing write access to /usr/local/lib/node_modules -2343 silly rollbackFailedOptional Starting -2344 silly rollbackFailedOptional Finishing -2345 silly runTopLevelLifecycles Starting -2346 silly runTopLevelLifecycles Finishing -2347 silly install printInstalled -2348 verbose stack Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2349 verbose cwd /home/christine/0_WORK/gradcomm -2350 error Linux 4.15.0-99-generic -2351 error argv "/usr/bin/node" "/usr/bin/npm" "install" "-g" "less" -2352 error node v8.10.0 -2353 error npm v3.5.2 -2354 error path /usr/local/lib/node_modules -2355 error code EACCES -2356 error errno -13 -2357 error syscall access -2358 error Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2358 error { Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2358 error errno: -13, -2358 error code: 'EACCES', -2358 error syscall: 'access', -2358 error path: '/usr/local/lib/node_modules' } -2359 error Please try running this command again as root/Administrator. -2360 verbose exit [ -13, true ] diff --git a/community_server/parse_proto.sh b/community_server/parse_proto.sh deleted file mode 100755 index e6ccb451f..000000000 --- a/community_server/parse_proto.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# Copyright 2015 gRPC authors. -# -# 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. -# need grpc only for hedera hashgraph -#PHP_PLUGIN="$(which grpc_php_plugin)" -#protoc --proto_path=./src/protobuf/gradido --php_out=./src/ --grpc_out=./src/ --plugin=protoc-gen-grpc=$PHP_PLUGIN ./src/protobuf/gradido/*.proto - -protoc --proto_path=./src/protobuf --php_out=./src/Model/Messages ./src/protobuf/gradido/*.proto - diff --git a/community_server/phpunit.xml.dist b/community_server/phpunit.xml.dist deleted file mode 100644 index ba971b637..000000000 --- a/community_server/phpunit.xml.dist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - tests/TestCase/ - - - - - - - - - - - - - - - - - src/ - plugins/*/src/ - - src/Console/Installer.php - - - - diff --git a/community_server/plugins/empty b/community_server/plugins/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/Application.php b/community_server/src/Application.php deleted file mode 100644 index 66e00f733..000000000 --- a/community_server/src/Application.php +++ /dev/null @@ -1,117 +0,0 @@ -bootstrapCli(); - } - - /* - * Only try to load DebugKit in development mode - * Debug Kit should not be installed on a production system - */ - if (Configure::read('debug')) { - $this->addPlugin(\DebugKit\Plugin::class); - } - - // Load more plugins here - } - - - - /** - * Setup the middleware queue your application will use. - * - * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup. - * @return \Cake\Http\MiddlewareQueue The updated middleware queue. - */ - public function middleware($middlewareQueue) - { - //$csrf = new CsrfProtectionMiddleware(); - - // Token check will be skipped when callback returns `true`. - /*$csrf->whitelistCallback(function ($request) { - // Skip token check for API URLs. - //if ($request->getParam('prefix') === 'api') { - if($request->getAttribute('base') === 'TransactionJsonRequestHandler') { - return true; - } - }); -*/ - // Ensure routing middleware is added to the queue before CSRF protection middleware. - //$middlewareQueue->; - - $middlewareQueue - // ->add($csrf) - // Catch any exceptions in the lower layers, - // and make an error page/response - ->add(new ErrorHandlerMiddleware(null, Configure::read('Error'))) - - // Handle plugin/theme assets like CakePHP normally does. - ->add(new AssetMiddleware([ - 'cacheTime' => Configure::read('Asset.cacheTime') - ])) - - // Add routing middleware. - // If you have a large number of routes connected, turning on routes - // caching in production could improve performance. For that when - // creating the middleware instance specify the cache config name by - // using it's second constructor argument: - // `new RoutingMiddleware($this, '_cake_routes_')` - ->add(new RoutingMiddleware($this)); - - return $middlewareQueue; - } - - /** - * @return void - */ - protected function bootstrapCli() - { - try { - $this->addPlugin('Bake'); - } catch (MissingPluginException $e) { - // Do not halt if the plugin is missing - } - - // Load more plugins here - } -} diff --git a/community_server/src/Console/Installer.php b/community_server/src/Console/Installer.php deleted file mode 100644 index 3bcef473b..000000000 --- a/community_server/src/Console/Installer.php +++ /dev/null @@ -1,246 +0,0 @@ -getIO(); - - $rootDir = dirname(dirname(__DIR__)); - - static::createAppConfig($rootDir, $io); - static::createWritableDirectories($rootDir, $io); - - // ask if the permissions should be changed - if ($io->isInteractive()) { - $validator = function ($arg) { - if (in_array($arg, ['Y', 'y', 'N', 'n'])) { - return $arg; - } - throw new Exception('This is not a valid answer. Please choose Y or n.'); - }; - $setFolderPermissions = $io->askAndValidate( - 'Set Folder Permissions ? (Default to Y) [Y,n]? ', - $validator, - 10, - 'Y' - ); - - if (in_array($setFolderPermissions, ['Y', 'y'])) { - static::setFolderPermissions($rootDir, $io); - } - } else { - static::setFolderPermissions($rootDir, $io); - } - - static::setSecuritySalt($rootDir, $io); - - $class = 'Cake\Codeception\Console\Installer'; - if (class_exists($class)) { - $class::customizeCodeceptionBinary($event); - } - } - - /** - * Create the config/app.php file if it does not exist. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createAppConfig($dir, $io) - { - $appConfig = $dir . '/config/app.php'; - $defaultConfig = $dir . '/config/app.default.php'; - if (!file_exists($appConfig)) { - copy($defaultConfig, $appConfig); - $io->write('Created `config/app.php` file'); - } - } - - /** - * Create the `logs` and `tmp` directories. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createWritableDirectories($dir, $io) - { - foreach (static::WRITABLE_DIRS as $path) { - $path = $dir . '/' . $path; - if (!file_exists($path)) { - mkdir($path); - $io->write('Created `' . $path . '` directory'); - } - } - } - - /** - * Set globally writable permissions on the "tmp" and "logs" directory. - * - * This is not the most secure default, but it gets people up and running quickly. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setFolderPermissions($dir, $io) - { - // Change the permissions on a path and output the results. - $changePerms = function ($path) use ($io) { - $currentPerms = fileperms($path) & 0777; - $worldWritable = $currentPerms | 0007; - if ($worldWritable == $currentPerms) { - return; - } - - $res = chmod($path, $worldWritable); - if ($res) { - $io->write('Permissions set on ' . $path); - } else { - $io->write('Failed to set permissions on ' . $path); - } - }; - - $walker = function ($dir) use (&$walker, $changePerms) { - $files = array_diff(scandir($dir), ['.', '..']); - foreach ($files as $file) { - $path = $dir . '/' . $file; - - if (!is_dir($path)) { - continue; - } - - $changePerms($path); - $walker($path); - } - }; - - $walker($dir . '/tmp'); - $changePerms($dir . '/tmp'); - $changePerms($dir . '/logs'); - } - - /** - * Set the security.salt value in the application's config file. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setSecuritySalt($dir, $io) - { - $newKey = hash('sha256', Security::randomBytes(64)); - static::setSecuritySaltInFile($dir, $io, $newKey, 'app.php'); - } - - /** - * Set the security.salt value in a given file - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @param string $newKey key to set in the file - * @param string $file A path to a file relative to the application's root - * @return void - */ - public static function setSecuritySaltInFile($dir, $io, $newKey, $file) - { - $config = $dir . '/config/' . $file; - $content = file_get_contents($config); - - $content = str_replace('__SALT__', $newKey, $content, $count); - - if ($count == 0) { - $io->write('No Security.salt placeholder to replace.'); - - return; - } - - $result = file_put_contents($config, $content); - if ($result) { - $io->write('Updated Security.salt value in config/' . $file); - - return; - } - $io->write('Unable to update Security.salt value.'); - } - - /** - * Set the APP_NAME value in a given file - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @param string $appName app name to set in the file - * @param string $file A path to a file relative to the application's root - * @return void - */ - public static function setAppNameInFile($dir, $io, $appName, $file) - { - $config = $dir . '/config/' . $file; - $content = file_get_contents($config); - $content = str_replace('__APP_NAME__', $appName, $content, $count); - - if ($count == 0) { - $io->write('No __APP_NAME__ placeholder to replace.'); - - return; - } - - $result = file_put_contents($config, $content); - if ($result) { - $io->write('Updated __APP_NAME__ value in config/' . $file); - - return; - } - $io->write('Unable to update __APP_NAME__ value.'); - } -} diff --git a/community_server/src/Controller/AddressTypesController.php b/community_server/src/Controller/AddressTypesController.php deleted file mode 100644 index 9b13a7720..000000000 --- a/community_server/src/Controller/AddressTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->AddressTypes); - - $this->set(compact('addressTypes')); - } - - /** - * View method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $addressType = $this->AddressTypes->get($id, [ - 'contain' => ['StateGroupAddresses', 'TransactionGroupAddaddress'], - ]); - - $this->set('addressType', $addressType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $addressType = $this->AddressTypes->newEntity(); - if ($this->request->is('post')) { - $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData()); - if ($this->AddressTypes->save($addressType)) { - $this->Flash->success(__('The address type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The address type could not be saved. Please, try again.')); - } - $this->set(compact('addressType')); - } - - /** - * Edit method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $addressType = $this->AddressTypes->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData()); - if ($this->AddressTypes->save($addressType)) { - $this->Flash->success(__('The address type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The address type could not be saved. Please, try again.')); - } - $this->set(compact('addressType')); - } - - /** - * Delete method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $addressType = $this->AddressTypes->get($id); - if ($this->AddressTypes->delete($addressType)) { - $this->Flash->success(__('The address type has been deleted.')); - } else { - $this->Flash->error(__('The address type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/AdminErrorsController.php b/community_server/src/Controller/AdminErrorsController.php deleted file mode 100644 index a9688008e..000000000 --- a/community_server/src/Controller/AdminErrorsController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['StateUsers'] - ]; - $adminErrors = $this->paginate($this->AdminErrors); - - $this->set(compact('adminErrors')); - } - - /** - * View method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $adminError = $this->AdminErrors->get($id, [ - 'contain' => ['StateUsers'] - ]); - - $this->set('adminError', $adminError); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $adminError = $this->AdminErrors->newEntity(); - if ($this->request->is('post')) { - $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData()); - if ($this->AdminErrors->save($adminError)) { - $this->Flash->success(__('The admin error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The admin error could not be saved. Please, try again.')); - } - $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('adminError', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $adminError = $this->AdminErrors->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData()); - if ($this->AdminErrors->save($adminError)) { - $this->Flash->success(__('The admin error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The admin error could not be saved. Please, try again.')); - } - $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('adminError', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $adminError = $this->AdminErrors->get($id); - if ($this->AdminErrors->delete($adminError)) { - $this->Flash->success(__('The admin error has been deleted.')); - } else { - $this->Flash->error(__('The admin error could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/AppController.php b/community_server/src/Controller/AppController.php deleted file mode 100644 index e70b8e7bd..000000000 --- a/community_server/src/Controller/AppController.php +++ /dev/null @@ -1,386 +0,0 @@ -loadComponent('Security');` - * - * @return void - */ - public function initialize() - { - parent::initialize(); - - $this->loadComponent('RequestHandler', [ - 'enableBeforeRedirect' => false, - ]); - $this->loadComponent('Flash'); - - $this->loadComponent('Auth', [ - 'loginAction' => [ - 'controller' => 'ServerUsers', - 'action' => 'login' - ], - 'loginRedirect' => [ - 'controller' => 'Transactions', - 'action' => 'index' - ], - 'logoutRedirect' => [ - 'controller' => 'Pages', - 'action' => 'display', - 'gradido' - ], - 'authenticate' => [ - 'all' => ['userModel' => 'ServerUsers'], - 'Form' => [ - 'userModel' => 'ServerUsers', - ] - ] - ]); - - $this->Auth->deny(['index']); - - /* - * Enable the following component for recommended CakePHP security settings. - * see https://book.cakephp.org/3.0/en/controllers/components/security.html - */ - //$this->loadComponent('Security'); - - - // load current balance - $session = $this->getRequest()->getSession(); - $state_user_id = $session->read('StateUser.id'); - - - // load error count - if ($state_user_id) { - $stateErrorsTable = TableRegistry::getTableLocator()->get('stateErrors'); - $stateErrorQuery = $stateErrorsTable - ->find('all') - ->select('id') - ->contain(false) - ->where(['state_user_id' => $state_user_id]); - $session->write('StateUser.errorCount', $stateErrorQuery->count()); - } - - // put current page into global for navi - $GLOBALS["passed"] = null; - $side = $this->request->getParam('controller'); - $GLOBALS["side"] = $side; - $subside = $this->request->getParam('action'); - $passedArguments = $this->request->getParam('pass'); - if ($passedArguments) { - $GLOBALS["passed"] = $passedArguments[0]; - } - $GLOBALS["subside"] = $subside; - - // server login - if ($this->Auth->user('id')) { - $GLOBALS['ServerUser'] = $this->Auth->user(); - } - - // login server url - $loginServer = Configure::read('LoginServer'); - if ($loginServer && isset($loginServer['url'])) { - $this->loginServerUrl = $loginServer['url'] . '/'; - } else { - $this->loginServerUrl = Router::url('/', true); - } - /* - * - * 'GradidoBlockchain' => [ - * // type: - * // - mysql: centralized blockchain in mysql db, no cross group transactions - * // - hedera: send transaction over hedera - * 'type' => 'hedera', - * // gradido nodes with blockchain (if type != mysql) - * 'nodes' => [ - * ['host' => 'http://192.168.178.225', 'port' => 13702] - * ] - * ], - */ - $blockchain = Configure::read('GradidoBlockchain'); - if($blockchain && isset($blockchain['type'])) { - $this->blockchainType = $blockchain['type']; - } - } - - protected function requestLogin($sessionId = 0, $redirect = true) - { - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $session = $this->getRequest()->getSession(); - // check login - // disable encryption for cookies - $session_id = 0; - $php_session_id = 0; - if($session->check('session_id')) { - $php_session_id = intval($session->read('session_id')); - } - $cookie_session_id = intval($this->request->getCookie('GRADIDO_LOGIN', '')); - // decide in which order session_ids are tried - if($sessionId != 0) { - $session_id = $sessionId; - } else if($php_session_id != 0) { - $session_id = $php_session_id; - } else if($cookie_session_id != 0) { - $session_id = $cookie_session_id; - } - - $ip = $this->request->clientIp(); - if (!$session->check('client_ip')) { - $session->write('client_ip', $ip); - } - // login server cannot detect host ip - // TODO: update login server, recognize nginx real ip header - $loginServer = Configure::read('LoginServer'); - - if ($session_id != 0) { - $userStored = $session->read('StateUser'); - - $transactionPendings = $session->read('Transactions.pending'); - $transactionExecutings = $session->read('Transactions.executing'); - $transaction_can_signed = $session->read('Transactions.can_signed'); - - - - if ($session->read('session_id') != $session_id || - ( $userStored && (!isset($userStored['id']) || !$userStored['email_checked'])) || - intval($transactionPendings) > 0 || - intval($transactionExecutings) > 0 || - intval($transaction_can_signed > 0)) - { - $http = new Client(); - - try { - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - //echo "email checked: " . $json['user']['email_checked'] . ";
    "; - if ($session->read('session_id') != $session_id || - ( $userStored && !isset($userStored['id']))) { - $session->destroy(); - } - foreach ($json['user'] as $key => $value) { - // we don't need the id of user in login server db - if($key == 'id') continue; - $session->write('StateUser.' . $key, $value); - } - //var_dump($json); - $transactionPendings = $json['Transactions.pending']; - $transactionExecuting = $json['Transactions.executing']; - $transaction_can_signed = $json['Transactions.can_signed']; - //echo "read transaction pending: $transactionPendings
    "; - $session->write('Transactions.pending', $transactionPendings); - $session->write('Transactions.executing', $transactionExecuting); - $session->write('Transactions.can_signed', $transaction_can_signed); - $session->write('session_id', $session_id); - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - - - if (isset($json['user']['public_hex']) && $json['user']['public_hex'] != '') { - $public_key_bin = hex2bin($json['user']['public_hex']); - $stateUserQuery = $stateUserTable - ->find('all') - ->where(['public_key' => $public_key_bin]) - ->contain('StateBalances', function ($q) { - return $q->order(['record_date' => 'DESC']) - ->limit(1); - }); - if ($stateUserQuery->count() == 1) { - $stateUser = $stateUserQuery->first(); - if ($stateUser->first_name != $json['user']['first_name'] || - $stateUser->last_name != $json['user']['last_name'] || - $stateUser->disabled != $json['user']['disabled'] || - //$stateUser->username != $json['user']['username'] || - // -> throws error - $stateUser->email != $json['user']['email'] - ) { - $stateUser->first_name = $json['user']['first_name']; - $stateUser->last_name = $json['user']['last_name']; - $stateUser->disabled = intval($json['user']['disabled']); - //$stateUser->username = $json['user']['username']; - $stateUser->email = $json['user']['email']; - if (!$stateUserTable->save($stateUser)) { - $this->Flash->error(__('error updating state user ' . json_encode($stateUser->errors()))); - } - } - $session->write('StateUser.id', $stateUser->id); - //echo $stateUser['id']; - } else { - $newStateUser = $stateUserTable->newEntity(); - $newStateUser->public_key = $public_key_bin; - $newStateUser->first_name = $json['user']['first_name']; - $newStateUser->last_name = $json['user']['last_name']; - $newStateUser->disabled = intval($json['user']['disabled']); - //$newStateUser->username = $json['user']['username']; - $newStateUser->email = $json['user']['email']; - if (!$stateUserTable->save($newStateUser)) { - $this->Flash->error(__('error saving state user ' . json_encode($newStateUser->errors()))); - } - $session->write('StateUser.id', $newStateUser->id); - //echo $newStateUser->id; - } - } else { - if(!$redirect) { - return ['state' => 'error', 'msg' => 'no pubkey']; - } - // we haven't get a pubkey? something seems to gone wrong on the login-server - $this->Flash->error(__('no pubkey')); - //var_dump($json); - return $this->redirect($this->loginServerUrl . 'account/error500/noPubkey', 303); - } - } else { - if(!$redirect) { - return ['state' => 'not found', 'msg' => 'invalid session', 'details' => $json]; - } - if ($json['state'] === 'not found') { - $this->Flash->error(__('invalid session')); - } else { - $this->Flash->error(__('Konto ist nicht aktiviert!')); - } - //die(json_encode($json)); - if(preg_match('/client ip/', $json['msg'])) { - return $this->redirect($this->loginServerUrl . 'account/error500/ipError', 303); - } - return $this->redirect($this->loginServerUrl . 'account/', 303); - } - } - } catch (\Exception $e) { - $msg = $e->getMessage(); - if(!$redirect) { - return ['state' => 'error', 'msg' => 'login-server http request error', 'details' => $msg]; - } - $this->Flash->error(__('error http request: ') . $msg); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']); - //continue; - } - } - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $session->read('StateUser.id')])->first(); - if ($state_balance) { - $now = new FrozenTime; - $session->write('StateUser.balance', $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now)); - } - } else { - // no login - //die("no login"); - if(!$redirect) { - return ['state' => 'error', 'msg' => 'not logged in']; - } - if (isset($loginServer['path'])) { - return $this->redirect($loginServer['path'], 303); - } else { - return $this->redirect($this->loginServerUrl . 'account/', 303); - } - } - return true; - } - - /* - public function beforeFilter(Event $event) - { - //$this->Auth->allow(['display']); - } - */ - - public function addAdminError($controller, $action, array $returnTable, $state_user_id) - { - if (!is_array($returnTable)) { - $this->addAdminError('AppController', 'addAdminError', ['state' => 'error', 'msg' => 'returnTable isn\'t array', 'details' => gettype($returnTable)], $state_user_id); - return false; - } - $adminErrorTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorEntity = $adminErrorTable->newEntity(); - $adminErrorEntity->state_user_id = $state_user_id; - $adminErrorEntity->controller = $controller; - $adminErrorEntity->action = $action; - $adminErrorEntity->state = $returnTable['state']; - if (isset($returnTable['msg'])) { - $adminErrorEntity->msg = $returnTable['msg']; - } else { - $adminErrorEntity->msg = __('(Leere Message)'); - } - if (isset($returnTable['details'])) { - $adminErrorEntity->details = $returnTable['details']; - } else { - $adminErrorEntity->details = __('(Leere Details)'); - } - if (!$adminErrorTable->save($adminErrorEntity)) { - $this->Flash->error( - __('Serious error, couldn\'t save to db, please write the admin: ' . $this->getAdminEmailLink()), - ['escape' => false] - ); - } - return true; - } - - public function getAdminEmailLink($text = '') - { - $serverAdminEmail = Configure::read('ServerAdminEmail'); - return ''. $serverAdminEmail . ''; - } - - public function returnJsonEncoded($json) - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - return $response->withStringBody($json); - } - - public function returnJson($array) - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - return $response->withStringBody(json_encode($array)); - } - - public function getStartEndForMonth($month, $year) - { - $timeString = $year . '-' . $month . '-01 00:00'; - $firstDay = new Time($timeString); - $lastDay = new Time($timeString); - $lastDay = $lastDay->addMonth(1); - return [$firstDay, $lastDay]; - } -} diff --git a/community_server/src/Controller/AppRequestsController.php b/community_server/src/Controller/AppRequestsController.php deleted file mode 100644 index 20b182f75..000000000 --- a/community_server/src/Controller/AppRequestsController.php +++ /dev/null @@ -1,465 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->loadComponent('GradidoNumber'); - //$this->loadComponent('JsonRpcRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow([ - 'index', 'sendCoins', 'createCoins', 'getBalance', - 'listTransactions','listGDTTransactions', 'getDecayStartBlock' - ]); - } - - - public function index() - { - if($this->request->is('get')) { - $method = $this->request->getQuery('method'); - switch($method) { - - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]); - } - else if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode'); - //var_dump($jsonData); - if($jsonData == NULL || !isset($jsonData->method)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } - $method = $jsonData->method; - - switch($method) { - - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']); - } - - private function checkAndCopyRequiredFields($fields, &$param, $data = null) { - if($data == null) { - $data = $this->request->input('json_decode'); - } - foreach($fields as $field) { - if(is_array($field)) { - $one_exist = false; - foreach($field as $oneField) { - if(isset($data->$oneField)) { - $param[$oneField] = $data->$oneField; - $one_exist = true; - break; - } - } - if(!$one_exist) { - return ['state' => 'error', 'msg' => 'missing field of set', 'details' => $field]; - } - } else { - if(!isset($data->$field)) { - return ['state' => 'error', 'msg' => 'missing field', 'details' => $field . ' not found']; - } else { - $param[$field] = $data->$field; - } - } - } - return true; - } - - private function rewriteKeys(&$data, $replaceKeys) - { - foreach(array_keys($replaceKeys) as $key) { - $newKey = $replaceKeys[$key]; - if(isset($data->$key)) { - $data->$newKey = $data->$key; - unset($data->$key); - } - } - } - - private function parseParameterForCreateTransaction(&$param, $data = null) - { - if($data == null) { - $data = $this->request->input('json_decode'); - } - $session_id = 0; - if(isset($data->session_id)) { - $session_id = $data->session_id; - } - $login_request_result = $this->requestLogin($session_id, false); - if($login_request_result !== true) { - return $login_request_result; - } - $session = $this->getRequest()->getSession(); - $param['session_id'] = $session->read('session_id'); - $param['blockchain_type'] = $this->blockchainType; - - $this->rewriteKeys($data, ['email' => 'target_email', 'username' => 'target_username', 'pubkey' => 'target_pubkey']); - $required_fields = $this->checkAndCopyRequiredFields(['amount', ['target_email', 'target_username', 'target_pubkey']], $param, $data); - if($required_fields !== true) { - return $required_fields; - } - - if(floatval($param['amount']) <= 0.0) { - return ['state' => 'error', 'msg' => 'amount is invalid', 'details' => $param['amount']]; - } - $param['amount'] = $this->GradidoNumber->parseInputNumberToCentNumber($param['amount']); - - if(isset($data->memo)) { - $param['memo'] = $data->memo; - } - - if(isset($data->auto_sign)) { - $param['auto_sign'] = boolval($data->auto_sign); - } - - return true; - } - - public function sendCoins() - { - /* - * { - "session_id" : -127182, - "amount": 2000000, - "email": "max.musterman@gmail.de", - "memo":"Thank you :)", - "group": "gdd1", - "auto_sign": true - */ - if(!$this->request->is('post')) { - return $this->returnJson(['state' => 'error', 'msg' => 'no post']); - } - $data = $this->request->input('json_decode'); - $params = []; - $result = $this->parseParameterForCreateTransaction($params, $data); - if($result !== true) { - return $this->returnJson($result); - } - - if(!isset($params['memo']) || strlen($params['memo']) < 5 || strlen($params['memo']) > 150) { - return $this->returnJson(['state' => 'error', 'msg' => 'memo is not set or not in expected range [5;150]']); - } - $params['transaction_type'] = 'transfer'; - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction'); - - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $session = $this->getRequest()->getSession(); - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - return $this->returnJson(['state' => 'success']); - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - return $this->returnJson($answear_data); - - } - - } - - public function createCoins() - { - /* - * "session_id" : -127182, - * "email": "max.musterman@gmail.de", - * "amount": 10000000, - * "target_date":"2021-02-19T13:25:36+00:00", - * "memo":"AGE", - * "auto_sign": true - */ - if(!$this->request->is('post')) { - return $this->returnJson(['state' => 'error', 'msg' => 'no post']); - } - $data = $this->request->input('json_decode'); - $params = []; - $result = $this->parseParameterForCreateTransaction($params, $data); - if($result !== true) { - return $this->returnJson($result); - } - $required_fields = $this->checkAndCopyRequiredFields(['target_date'], $params, $data); - if($required_fields !== true) { - return $this->returnJson($required_fields); - } - $params['transaction_type'] = 'creation'; - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction'); - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $session = $this->getRequest()->getSession(); - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - return $this->returnJson(['state' => 'success']); - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - return $this->returnJson($answear_data); - - } - - } - - public function getBalance($session_id = 0) - { - $this->viewBuilder()->setLayout('ajax'); - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - $this->set('body', $login_result); - return; - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - $state_balances_table = TableRegistry::getTableLocator()->get('StateBalances'); - $state_balances_table->updateBalances($user['id']); - - $state_balance = $state_balances_table->find()->where(['state_user_id' => $user['id']])->first(); - - - $now = new FrozenTime(); - if(!$state_balance) { - $body = [ - 'state' => 'success', - 'balance' => 0, - 'decay' => 0 - ]; - } else { - - $body = [ - 'state' => 'success', - 'balance' => $state_balance->amount, - 'decay' => $state_balance->partDecay($now), - ]; - } - - $body['decay_date'] = $now; - $this->set('body', $body); - } - - public function listTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0) - { - $this->viewBuilder()->setLayout('ajax'); - $startTime = microtime(true); - - $login_result = $this->requestLogin($session_id, false); - - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $stateBalancesTable->updateBalances($user['id']); - - $gdtSum = 0; - - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - } else { - $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0); - } - - //echo "count: $count, page: $page
    "; - $limit = $count; - $offset = 0; - $skip_first_transaction = false; - if($page > 1) { - $offset = (( $page - 1 ) * $count) - 1; - $limit++; - } - - if($offset && $orderDirection == 'ASC') { - $offset--; - } - - //echo "limit: $limit, offset: $offset, skip first transaction: $skip_first_transaction
    "; - $stateUserTransactionsQuery = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $user['id']]) - ->order(['balance_date' => $orderDirection]) - ->contain([]) - ->limit($limit) - //->page($page) - ->offset($offset) - ; - $state_user_transactions_count = $stateUserTransactionsQuery->count(); - if($state_user_transactions_count > $offset + $limit) { - $skip_first_transaction = true; - } - - $decay = true; - if($page > 1) { - $decay = false; - } - $transactions = []; - $transactions_from_db = $stateUserTransactionsQuery->toArray(); - - if(count($transactions_from_db)) { - if($orderDirection == 'DESC') { - $transactions_from_db = array_reverse($transactions_from_db); - } - - $transactions = $transactionsTable->listTransactionsHumanReadable($transactions_from_db, $user, $decay, $skip_first_transaction); - //echo "transactions count: " . count($transactions) . "
    "; - if($orderDirection == 'DESC') { - $transactions = array_reverse($transactions); - } - } - - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first(); - - $body = [ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => $state_user_transactions_count, - 'gdtSum' => $gdtSum, - 'timeUsed' => microtime(true) - $startTime - ]; - $now = new FrozenTime(); - $body['decay_date'] = $now; - - if(!$state_balance) { - $body['balance'] = 0.0; - $body['decay'] = 0.0; - } else { - $body['balance'] = $state_balance->amount; - $body['decay'] = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now); - } - - $this->set('body', $body); - } - - public function listGDTTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0) - { - $timeBegin = microtime(true); - $this->viewBuilder()->setLayout('ajax'); - - $login_result = $this->requestLogin($session_id, false); - - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $gdtEntries = $this->JsonRequestClient->sendRequestGDT([ - 'email' => $user['email'], - 'page' => $page, - 'count' => $count, - 'orderDirection' => $orderDirection - ], 'GdtEntries' . DS . 'listPerEmailApi'); - - if('success' == $gdtEntries['state']) { - $timeEnd = microtime(true); - $gdtEntries['data']['timeUsed'] = $timeEnd - $timeBegin; - return $this->returnJson($gdtEntries['data']); - - } else { - if($user) { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']); - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'error by requesting gdt server', 'details' => $gdtEntries]); - } - - public function getDecayStartBlock() - { - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $decayStartBlock = $transactionsTable->find()->where(['transaction_type_id' => 9]); - if(!$decayStartBlock->count()) { - return $this->returnJson(['state' => 'error', 'msg' => 'not found']); - } - return $this->returnJson(['state' => 'success', 'decay_start' => $decayStartBlock->first()->received]); - } - - private function acquireAccessToken($session_id) - { - - } - -} - diff --git a/community_server/src/Controller/BlockchainTypesController.php b/community_server/src/Controller/BlockchainTypesController.php deleted file mode 100644 index 2a94037df..000000000 --- a/community_server/src/Controller/BlockchainTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->BlockchainTypes); - - $this->set(compact('blockchainTypes')); - } - - /** - * View method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $blockchainType = $this->BlockchainTypes->get($id, [ - 'contain' => [], - ]); - - $this->set('blockchainType', $blockchainType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $blockchainType = $this->BlockchainTypes->newEntity(); - if ($this->request->is('post')) { - $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData()); - if ($this->BlockchainTypes->save($blockchainType)) { - $this->Flash->success(__('The blockchain type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The blockchain type could not be saved. Please, try again.')); - } - $this->set(compact('blockchainType')); - } - - /** - * Edit method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $blockchainType = $this->BlockchainTypes->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData()); - if ($this->BlockchainTypes->save($blockchainType)) { - $this->Flash->success(__('The blockchain type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The blockchain type could not be saved. Please, try again.')); - } - $this->set(compact('blockchainType')); - } - - /** - * Delete method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $blockchainType = $this->BlockchainTypes->get($id); - if ($this->BlockchainTypes->delete($blockchainType)) { - $this->Flash->success(__('The blockchain type has been deleted.')); - } else { - $this->Flash->error(__('The blockchain type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/CommunityProfilesController.php b/community_server/src/Controller/CommunityProfilesController.php deleted file mode 100644 index c807da72c..000000000 --- a/community_server/src/Controller/CommunityProfilesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->CommunityProfiles); - - $this->set(compact('communityProfiles')); - } - - /** - * View method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $communityProfile = $this->CommunityProfiles->get($id, [ - 'contain' => [], - ]); - - $this->set('communityProfile', $communityProfile); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $communityProfile = $this->CommunityProfiles->newEntity(); - if ($this->request->is('post')) { - $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData()); - if ($this->CommunityProfiles->save($communityProfile)) { - $this->Flash->success(__('The community profile has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The community profile could not be saved. Please, try again.')); - } - $this->set(compact('communityProfile')); - } - - /** - * Edit method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $communityProfile = $this->CommunityProfiles->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData()); - if ($this->CommunityProfiles->save($communityProfile)) { - $this->Flash->success(__('The community profile has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The community profile could not be saved. Please, try again.')); - } - $this->set(compact('communityProfile')); - } - - /** - * Delete method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $communityProfile = $this->CommunityProfiles->get($id); - if ($this->CommunityProfiles->delete($communityProfile)) { - $this->Flash->success(__('The community profile has been deleted.')); - } else { - $this->Flash->error(__('The community profile could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/Component/GradidoNumberComponent.php b/community_server/src/Controller/Component/GradidoNumberComponent.php deleted file mode 100644 index 5db208c3a..000000000 --- a/community_server/src/Controller/Component/GradidoNumberComponent.php +++ /dev/null @@ -1,33 +0,0 @@ - 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric']; - } - if(!is_numeric($user_balance) || intval($user_balance) < 0) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'user_balance invalid']; - } - if(is_array($base64Message)) { - foreach($base64Message as $singleMessage) { - if(!$this->is_base64($singleMessage)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'at least one base64Message contain invalid base64 characters']; - } - } - } else if(!$this->is_base64($base64Message)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'base64Message contain invalid base64 characters']; - } - - return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => $base64Message, - 'balance' => $user_balance, - 'auto_sign' => $auto_sign, - 'blockchain_type' => $this->blockchainType - ]), '/checkTransaction'); - - } - - public function findePublicKeyForEmailHash($emailHash) { - //'ask' = ['account_publickey' => ''] - $results = $this->sendRequestLoginServerNeighbors(json_encode(['ask' => ['account_publickey' => $emailHash]]), 'search'); - } - - public function getRunningUserTasks($email) - { - if($email == "") { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is empty']; - } - if(!GenericValidation::email($email, [])) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is invalid']; - } - - return $this->sendRequest(json_encode([ - 'email' => $email - ]), '/getRunningUserTasks'); - } - - public function getUsers($session_id, $searchString, $accountState) - { - if($searchString == "") { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'search string is empty']; - } - if(!is_numeric($session_id)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric']; - } - - return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'search' => $searchString, - 'account_state' => $accountState, - ]), '/getUsers'); - } - - public function sendRequest($transactionBody, $url_last_part) { - $http = new Client(); - - $response = $http->post($this->getLoginServerUrl() . $url_last_part, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return ['state' => 'success', 'data' => $json]; - } - - public function sendRequestGDT($transactionBody, $url) { - - $http = new Client(); - $gdtServerHost = $this->getGDTServerUrl(); - if(!$gdtServerHost) { - return ['state' => 'warning', 'msg' => 'gdt server not configured']; - } - $fullUrl = $gdtServerHost . DS . $url; - $response = $http->post($this->getGDTServerUrl() . DS . $url, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return [ - 'state' => 'error', - 'type' => 'request error', - 'msg' => 'server response status code isn\'t 200', - 'details' => $responseStatus, - 'fullUrl' => $fullUrl - ]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return ['state' => 'success', 'data' => $json]; - } - - public function sendRequestLoginServerNeighbors($transactionBody, $url) { - - $http = new Client(); - if(!Configure::check('NeighborLoginServers')) { - return ['state' => 'warning', 'msg' => 'no neighbor server configured']; - } - $nServers = Configure::read('NeighborLoginServers'); - $results = ['errors' => [], 'data' => []]; - foreach($nServers as $nServer) { - $full_url = $nServer['host'] . ':' . $nServer['port'] . '/' . $url; - $response = $http->post($full_url, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - $results['errors'][] = [ - 'state' => 'error', - 'type' => 'request error', - 'msg' => 'server response status code isn\'t 200', - 'details' => $responseStatus, - 'fullUrl' => $full_url - ]; - continue; - } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - $results['errors'][] = ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - continue; - } - $results['data'][] = $json; - } - return $results; - } - - static public function getLoginServerUrl() - { - $loginServer = Configure::read('LoginServer'); - return $loginServer['host'] . ':' . $loginServer['port']; - } - - static public function getGDTServerUrl() - { - $gdtServer = Configure::read('GDTServer'); - if(isset($gdtServer['host'])) { - return $gdtServer['host']; - } - return false; - } - - static public function is_base64($s) - { - return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s); - } - -} diff --git a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php b/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php deleted file mode 100644 index 504fc8fdd..000000000 --- a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php +++ /dev/null @@ -1,83 +0,0 @@ -rpcClient = new JsonRpcClient(); - } - - // @param id: if id = 0 call rand for it - public function request($method, $params = [], $id = 0) - { - - if(0 == $id) { - $id = random_int(1, 12000); - } - $this->rpcClient->query($id, $method, $params); - - $message = $this->rpcClient->encode(); - return $this->sendRequest($message); - // message: {"jsonrpc":"2.0","method":"add","params":[1,2],"id":1} - } - - public function sendRequest($message) { - $http = new Client(); - - try { - $url = $this->pickGradidoNodeUrl(); - if(is_array($url)) { - return $url; - } - $response = $http->post($url, $message, ['type' => 'json']); - } catch(Exception $e) { - return ['state' => 'error', 'type' => 'http exception', 'details' => $e->getMessage()]; - } - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return $json['result']; - //return ['state' => 'success', 'data' => $json]; - } - - static public function pickGradidoNodeUrl() - { - $gradidoNodes = Configure::read('GradidoBlockchain.nodes'); - if(count($gradidoNodes) == 0) { - return ['state' => 'error', 'msg' => 'no gradido nodes in config']; - } - $i = rand(0, count($gradidoNodes)-1); - return $gradidoNodes[$i]['host'] . ':' . $gradidoNodes[$i]['port']; - } - - -} - - diff --git a/community_server/src/Controller/DashboardController.php b/community_server/src/Controller/DashboardController.php deleted file mode 100644 index e25374821..000000000 --- a/community_server/src/Controller/DashboardController.php +++ /dev/null @@ -1,78 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['index', 'errorHttpRequest']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', true)) - ); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $serverUser = $this->Auth->user('id'); - if($serverUser) { - $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorCount = $adminErrorsTable->find('all')->count(); - $this->set('adminErrorCount', $adminErrorCount); - } - - $this->set('user', $user); - $this->set('serverUser', $serverUser); - $this->set('timeUsed', microtime(true) - $startTime); - - } - - public function serverIndex() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorCount = $adminErrorsTable->find('all')->count(); - - $this->set('adminErrorCount', $adminErrorCount); - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function errorHttpRequest() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $this->set('timeUsed', microtime(true) - $startTime); - } - -} diff --git a/community_server/src/Controller/ElopageBuysController.php b/community_server/src/Controller/ElopageBuysController.php deleted file mode 100644 index e097eddbb..000000000 --- a/community_server/src/Controller/ElopageBuysController.php +++ /dev/null @@ -1,165 +0,0 @@ -paginate = [ - 'contain' => false, - ]; - $elopageBuys = $this->paginate($this->ElopageBuys); - - $this->set(compact('elopageBuys')); - } - - public function statistics() - { - $this->viewBuilder()->setLayout('frontend'); - $connection = ConnectionManager::get('loginServer'); - $dates = $connection->execute('SELECT success_date FROM elopage_buys group by CAST(success_date as DATE)')->fetchAll('assoc'); - - $datesTree = []; - foreach($dates as $i => $date) { - - $date = new Time($date['success_date']); - if(!isset($datesTree[$date->year])) { - $datesTree[$date->year] = []; - } - if(!isset($datesTree[$date->year][$date->month])) { - $datesTree[$date->year][$date->month] = true; - } - } - //var_dump($datesTree); - - $now = Time::now(); - $lastDay = Time::now(); - $lastDay->day = 1; - $now->day = 1; - $lastDay->setTime(0,0,0,0); - $now->setTime(0,0,0,0); - // only for test - $now->month = 11; - $lastDay->month = 11; - $now->year = 2019; - $lastDay->year = 2019; -// var_dump($now); - - $lastDay = $lastDay->addMonth(1); - $sortDate = $this->getStartEndForMonth(11, 2019); - $elopageBuys = $this->ElopageBuys - ->find('all') - ->where(['success_date >=' => $sortDate[0], 'success_date <' => $sortDate[1]]); - $users = []; - foreach($elopageBuys as $elopageEntry) { - array_push($users, $elopageEntry->payer_email); - } - $unique_users = array_unique($users); - - $userTable = TableRegistry::getTableLocator()->get('Users'); - $users = $userTable->find('all') - ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]); - - $this->set(compact('elopageBuys', 'users')); - } - - /** - * View method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $elopageBuy = $this->ElopageBuys->get($id, [ - 'contain' => false, - ]); - - $this->set('elopageBuy', $elopageBuy); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $elopageBuy = $this->ElopageBuys->newEntity(); - if ($this->request->is('post')) { - $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData()); - if ($this->ElopageBuys->save($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The elopage buy could not be saved. Please, try again.')); - } - - $this->set(compact('elopageBuy')); - } - - /** - * Edit method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $elopageBuy = $this->ElopageBuys->get($id, [ - 'contain' => false, - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData()); - if ($this->ElopageBuys->save($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The elopage buy could not be saved. Please, try again.')); - } - $this->set(compact('elopageBuy')); - } - - /** - * Delete method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $elopageBuy = $this->ElopageBuys->get($id); - if ($this->ElopageBuys->delete($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been deleted.')); - } else { - $this->Flash->error(__('The elopage buy could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/ElopageWebhookController.php b/community_server/src/Controller/ElopageWebhookController.php deleted file mode 100644 index 4e806fa69..000000000 --- a/community_server/src/Controller/ElopageWebhookController.php +++ /dev/null @@ -1,51 +0,0 @@ -Auth->allow(['put']); - - } - - public function put() - { - $this->autoRender = false; - $data = $this->request->getData(); - $response = $this->response->withType('text/plain'); - - $dataString = http_build_query($data); - //$this->recursiveArrayToString($data, $dataString); - // %5B => [ - // %5D => ] - $dataString = preg_replace(['/\%5B/', '/\%5D/'], ['[', ']'], $dataString); - //var_dump($dataString); - - //2020-02-27T13:52:32+01:00 - $dateString = date('c'); - $fh = fopen('/etc/grd_login/php_elopage_requests.txt', 'a'); - if($fh === FALSE) { - return $response->withStringBody('400 ERROR'); - } - fwrite($fh, $dateString); - fwrite($fh, "\n"); - fwrite($fh, $dataString); - fwrite($fh, "\n"); - fclose($fh); - - - return $response->withStringBody('200 OK'); - - } -} diff --git a/community_server/src/Controller/ErrorController.php b/community_server/src/Controller/ErrorController.php deleted file mode 100644 index c5421a24d..000000000 --- a/community_server/src/Controller/ErrorController.php +++ /dev/null @@ -1,70 +0,0 @@ -loadComponent('RequestHandler', [ - 'enableBeforeRedirect' => false, - ]); - } - - /** - * beforeFilter callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function beforeFilter(Event $event) - { - } - - /** - * beforeRender callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function beforeRender(Event $event) - { - parent::beforeRender($event); - $this->RequestHandler->renderAs($this, 'json'); - $this->viewBuilder()->setTemplatePath('Error'); - } - - /** - * afterFilter callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function afterFilter(Event $event) - { - } -} diff --git a/community_server/src/Controller/JsonRequestHandlerController.php b/community_server/src/Controller/JsonRequestHandlerController.php deleted file mode 100644 index 611984118..000000000 --- a/community_server/src/Controller/JsonRequestHandlerController.php +++ /dev/null @@ -1,559 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->loadComponent('JsonRpcRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow('index'); - } - - - public function index() - { - if($this->request->is('get')) { - $method = $this->request->getQuery('method'); - switch($method) { - case 'getRunningUserTasks': return $this->getRunningUserTasks(); - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]); - } - else if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode'); - //var_dump($jsonData); - if($jsonData == NULL || !isset($jsonData->method)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } - $method = $jsonData->method; - - switch($method) { - case 'putTransaction': - if(!isset($jsonData->transaction)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } else { - return $this->putTransaction($jsonData->transaction); - } - case 'userDelete': return $this->userDelete($jsonData->user); - case 'moveTransaction': return $this->moveTransaction($jsonData->pubkeys, $jsonData->memo, $jsonData->session_id); - case 'checkUser': return $this->checkUser($jsonData->email, $jsonData->last_name); - case 'getUsers' : return $this->getUsers($jsonData->page, $jsonData->limit); - case 'getUserBalance': return $this->getUserBalance($jsonData->email, $jsonData->last_name); - case 'errorInTransaction': return $this->errorInTransaction($jsonData); - case 'updateReadNode': return $this->updateReadNode(); - case 'addUser' : return $this->addUser($jsonData->user); - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']); - } - - private function addUser($newUser) - { - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $entity = $stateUsersTable->newEntity(); - $required_fields = ['first_name', 'last_name', 'email', 'public_key', 'disabled']; - foreach($required_fields as $required_field) { - if(!isset($newUser->$required_field)) { - return $this->returnJson(['state' => 'error', 'msg' => 'missing required field in addUser', 'details' => $required_field]); - } - if('public_key' == $required_field) { - $entity->$required_field = hex2bin($newUser->public_hex); - } else { - $entity->$required_field = $newUser->$required_field; - } - } - if($stateUsersTable->save($entity)) { - return $this->returnJson(['state' => 'success']); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error saving state_user', 'details' => $entity->getErrors()]); - } - } - - // Called from login server like a cron job every 10 minutes or after sending transaction to hedera - private function updateReadNode() - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $last_transaction_query = $transactionsTable->find('all')->order(['id' => 'DESC']); - $last_transaction_id = 0; - if(!$last_transaction_query->isEmpty()) { - $last_transaction_id = $last_transaction_query->first()->id; - } - $last_known_sequence_number = $last_transaction_id; - - if($last_transaction_query->count() < $last_transaction_id) { - $last_transaction_id = $last_transaction_query->count(); - } - //$last_transaction_id = 0; - - - $group_alias = Configure::read('GroupAlias'); - $result = (array)$this->JsonRpcRequestClient->request('getTransactions', ['groupAlias' => $group_alias, 'lastKnownSequenceNumber' => $last_transaction_id]); - if(isset($result['state']) && $result['state'] == 'error') { - return $this->returnJson(['state' => 'error', 'msg' => 'jsonrpc error', 'details' => ['return' => $result, 'groupAlias' => $group_alias]]); - } - /* example - $result = json_decode("[ - { - \"record_type\":\"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"aed6725baacabf903e51f92503d49fa7e6b93c6402d56d9e3784be9a3366a77459213d858af46b579287aba8b1b63d206febce18bc80cec6fa63da6289e56403\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392811, - \"nanos\":172812 - }, - \"runningHash\":\"f9ccf04137be418c3117a28bb5add6dced9745bcab74b7a2f46c182c8c98eeabf0127c131d15ebea7d0ac376f5d2de45\", - \"sequenceNumber\":94, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"ADD_USER\", - \"add_user\":{ - \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\" - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - }, - { - \"record_type\":\"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"signature\":\"3134adcd6cbccee17c2db398f91b6b6bdd098b6306fb2fa213eb9eb5a322af9078acca4d8b0383d4e906f3139eb3369e7c1ef0f3ac5fec724be0d085ba44af0b\" - }, - \"signature_count\":2, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392886, - \"nanos\":1528 - }, - \"runningHash\":\"e1df5526331e3def11d6b652b8f248d20c250739b6eb98f1fe7b338901753d9d573a14601ba84f61318a48940b3c237a\", - \"sequenceNumber\":95, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"ADD_USER\", - \"add_user\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\" - }, - \"result\":\"result\", - \"parts\":2, - \"memo\":\"\" - } - }, - { - \"record_type\":\"SIGNATURES\", - \"signature\":[ - { - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"401717e768617c0f3311931c34a61e66ab362599a0e2a48ae7c4955645aec6573773985dafb84a11bfaf2bc12140c30b2f8c8ee094bc35d609bc56d15b4e9f04\" - } - ] - }, - { - \"record_type\": \"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"99665dee9f2b475e426a2f449d0dae61924f6cf025903666ff72f2c7ef1af27523ebcd5fb684d17813fe7906b2f8cfe5ef4bdbb264ebf3ef80363491d9b86807\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392904, - \"nanos\":798541 - }, - \"runningHash\":\"f1fd03610a9788e9bac01e1efb8b99bafae450f9088cb940db954842e0799235c57d842be83d998e6c21786f77f967a7\", - \"sequenceNumber\":96, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"GRADIDO_CREATION\", - \"gradido_creation\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"new_balance\":10000000, - \"prev_transfer_rec_num\":0, - \"amount\":10000000 - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - }, - { - \"record_type\": \"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"signature\":\"90125e0cfce61397d50ed9ba6c5df4cd4e0cf6fee8b10c70fee2898765982570d9a1208c222981429ae3c229e3fd36c2bf2333518cd0a4f0515937822e499d0b\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392929, - \"nanos\":52539 - }, - \"runningHash\":\"a4be8f54be4f806b61d31f6bd770d7742822f14f03ffe09c07f08bac3031a06d12de5e38fec5c307149c7faf6e9879b8\", - \"sequenceNumber\":97, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"LOCAL_TRANSFER\", - \"local_transfer\":{ - \"sender\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"new_balance\":9825500, - \"prev_transfer_rec_num\":0 - }, - \"receiver\":{ - \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"new_balance\":174500, - \"prev_transfer_rec_num\":0 - }, - \"amount\":174500 - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - } -]", true);*/ - $part_count = -1; - $temp_record = new Record; - $errors = []; - foreach($result['blocks'] as $_record) { - if(is_string($_record)) continue; - $parse_result = $temp_record->parseRecord($_record); - - if($parse_result == true) { - $sequenceNumber = $temp_record->getSequenceNumber(); - if($part_count == -1) { - $part_count = $temp_record->getPartCount(); - } - $part_count--; - - if($part_count == 0) { - if($sequenceNumber > $last_known_sequence_number) { - $finalize_result = $temp_record->finalize(); - if($finalize_result !== true) { - $errors[] = ['msg' => 'error in finalize', 'record' => $_record, 'details' => $finalize_result, 'sequenceNumber' => $sequenceNumber]; - } - } - - $temp_record = new Record; - $part_count = -1; - } - } else { - $temp_record = new Record; - $part_count = -1; - $errors[] = ['msg' => 'error in parse record', 'record' => $_record, 'details' => $parse_result]; - } - } - if(count($errors)) { - return $this->returnJson(['state' => 'error', 'msg' => 'error in parsing records', 'details' => $errors]); - } - return $this->returnJson(['state' => 'success']); - } - - /* - * payload.set("created", created); - * payload.set("id", task_model->getID()); - * payload.set("type", task_model->getTaskTypeString()); - * payload.set("public_key", user_model->getPublicKeyHex()); - * payload.set("error", error); - * payload.set("errorMessage", errorDetails); - */ - //! \param $transactionCreated creation of transaction in timestamp in seconds - //! -1 if transaction couldn't decode - //! \param $transactionBodyBase64Sha256 generic hash from transaction body serialized and converted to base64 - //! using sodium_crypto_generichash to calculate - // hash also in base64 format - //! \param $error short error name in user language - //! \param $errorDetails more detailed error message in user language - private function errorInTransaction($jsonData) { - $stateErrorTable = TableRegistry::getTableLocator()->get('StateErrors'); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes'); - $stateError = $stateErrorTable->newEntity(); - // - $pubkey = hex2bin($jsonData->public_key); - $user_query = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $pubkey]); - if($user_query->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'user pubkey hex:' . $jsonData->public_key]); - } - $stateError->state_user_id = $user_query->first()->id; - //$stateError->transaction_type_id - // TODO: - // - show state errors in navi_notify.ctp - $transaction_type_query = $transactionTypesTable->find('all')->select(['id'])->where(['name' => $jsonData->type]); - if($transaction_type_query->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'transaction type not found', 'details' => 'transaction type name: ' . $jsonData->type]); - } - $stateError->transaction_type_id = $transaction_type_query->first()->id; - $stateError->created = $jsonData->created; - $stateError->message_json = json_encode(['task_id' => $jsonData->id, 'error' => $jsonData->error, 'errorMessage' => $jsonData->errorMessage]); - if(!$stateErrorTable->save($stateError)) { - $this->returnJsonSaveError($stateError, [ - 'state' => 'error', - 'msg' => 'error saving state_error in db', - 'details' => json_encode($stateError->getErrors()) - ]); - } - return $this->returnJson(['state' => 'success']); - } - - private function sendEMailTransactionFailed($transaction, $reason_type) - { - $disable_email = Configure::read('disableEmail', false); - if($disable_email) { - return; - } - $transaction_body = $transaction->getTransactionBody(); - $senderUser = $transaction->getFirstSigningUser(); - if($transaction_body != null) { - $transaction_type_name = $transaction_body->getTransactionTypeName(); - - if($transaction_type_name === 'transfer') { - $senderUser = $transaction_body->getSpecificTransaction()->getSenderUser(); - } - } - // send notification email - $noReplyEmail = Configure::read('noReplyEmail'); - if($senderUser) { - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationTransactionFailed') - ->setVars(['user' => $senderUser, 'transaction' => $transaction, 'reason' => $reason_type]); - $receiverNames = $senderUser->getNames(); - if($receiverNames == '' || $senderUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $senderUser->id); - return false; - } - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$senderUser->email => $senderUser->getNames()]) - ->setSubject(__('Gradido Transaktion fehlgeschlagen!')) - ->send(); - } catch(Exception $e) { - $this->addAdminError('JsonRequestController', 'sendEMailTransactionFailed', [$e->getMessage(), $reason_type], $senderUser->id); - - } - } - } - - private function putTransaction($transactionBase64) { - $transaction = new Transaction($transactionBase64); - - if($transaction->hasErrors()) { - $this->sendEMailTransactionFailed($transaction, 'parse'); - return $this->returnJson(['state' => 'error', 'msg' => 'error parsing transaction', 'details' => $transaction->getErrors()]); - } - - if(!$transaction->validate()) { - //$transaction_details - $this->sendEMailTransactionFailed($transaction, 'validate'); - return $this->returnJsonSaveError($transaction, [ - 'state' => 'error', - 'msg' => 'error validate transaction', - 'details' => $transaction->getErrors() - ]); - } - - if ($transaction->save()) { - $result = ['state' => 'success']; - if($transaction->hasWarnings()) { - $result['warnings'] = $transaction->getWarnings(); - } - // success - return $this->returnJson($result); - } else { - - $this->sendEMailTransactionFailed($transaction, 'save'); - return $this->returnJsonSaveError($transaction, [ - 'state' => 'error', - 'msg' => 'error saving transaction in db', - 'details' => json_encode($transaction->getErrors()) - ]); - } - } - - private function moveTransaction($pubkeys, $memo, $session_id) { - //$pubkeys->sender - //$pubkeys->receiver - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($pubkeys->sender)])->contain(['StateBalances']); - if(!$user->count()) { - return $this->returnJson(['state' => 'not found', 'msg' => 'user not found or empty balance']); - } - $amountCent = $user->first()->state_balances[0]->amount; - //var_dump($user->first()); - $builderResult = TransactionTransfer::build( - $amountCent, - $memo, - $pubkeys->receiver, - $pubkeys->sender - ); - if($builderResult['state'] === 'success') { - - $http = new Client(); - try { - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->post($url . '/checkTransaction', json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), - 'balance' => $amountCent - ]), ['type' => 'json']); - $json = $response->getJson(); - if($json['state'] != 'success') { - if($json['msg'] == 'session not found') { - return $this->returnJson(['state' => 'error', 'msg' => 'session not found']); - } else { - //$this->Flash->error(__('login server return error: ' . json_encode($json))); - return $this->returnJson(['state' => 'error', 'msg' => 'login server return error', 'details' => $json]); - } - } else { - return $this->returnJson(['state' => 'success']); - } - - } catch(\Exception $e) { - $msg = $e->getMessage(); - //$this->Flash->error(__('error http request: ') . $msg); - return $this->returnJson(['state' => 'error', 'msg' => 'error http request', 'details' => $msg]); - } - - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error building transaction']); - } - } - - private function userDelete($userPubkeyHex) { - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($userPubkeyHex)]); - if(!$user || $user->count == 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found']); - } - - } - - private function checkUser($email, $last_name) { - $userTable = TableRegistry::getTableLocator()->get('Users'); - $user = $userTable->find('all') - ->where(['email' => $email]) - ->contain([]) - ->select(['first_name', 'last_name', 'email']); - if(!$user->count()) { - return $this->returnJson(['state' => 'not found', 'msg' => 'user not found']); - } - if($user->count() == 1 && $user->first()->last_name == $last_name) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'not identical', 'user' => $user->toArray()]); - } - - private function getUserBalance($email, $last_name) { - - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUsers = $stateUserTable->find('all')->where(['OR' => ['email' => $email, 'last_name' => $last_name]])->contain(['StateBalances']); - $gdds = []; - foreach($stateUsers as $stateUser) { - foreach($stateUser->state_balances as $stateBalance) { - if(!isset($gdds[$stateUser->email])) { - $gdds[$stateUser->email] = []; - } - if(!isset($gdds[$stateUser->email][$stateUser->last_name])) { - $gdds[$stateUser->email][$stateUser->last_name] = 0; - } - $gdds[$stateUser->email][$stateUser->last_name] += $stateBalance->amount; - } - } - return $this->returnJson(['state' => 'success', 'gdds' => $gdds]); - } - - private function getUsers($page, $count) { - - $userTable = TableRegistry::getTableLocator()->get('Users'); - $this->paginate = [ - 'limit' => $count, - 'page' => $page - ]; - $usersQuery = $userTable->find('all') - ->select(['first_name', 'last_name', 'email']) - ->order(['id']); - try { - return $this->returnJson(['state' => 'success', 'users' => $this->paginate($usersQuery)]); - } catch (Exception $ex) { - return $this->returnJson(['state' => 'exception', 'msg' => 'error paginate users', 'details' => $ex->getMessage()]); - } - - - //return $this->returnJson(['state' => 'success', 'users' => $users->toArray()]); - - } - - private function getRunningUserTasks() { - $session = $this->getRequest()->getSession(); - $state_user_email = $session->read('StateUser.email'); - $requestResult = $this->JsonRequestClient->getRunningUserTasks($state_user_email);; - return $this->returnJson($requestResult); - } - - - private function returnJsonSaveError($transaction, $errorArray) { - $json = json_encode($errorArray); - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $pub = $transaction->getFirstPublic(); - $stateUserQuery = $stateUserTable - ->find('all') - ->where(['public_key' => $pub]) - ->contain(false); - if($stateUserQuery->count() == 1) { - $stateErrorsTable = TableRegistry::getTableLocator()->get('StateErrors'); - $stateErrorEntity = $stateErrorsTable->newEntity(); - $stateErrorEntity->state_user_id = $stateUserQuery->first()->id; - $stateErrorEntity->transaction_type_id = $transaction->getTransactionBody()->getTransactionTypeId(); - $stateErrorEntity->message_json = $json; - $stateErrorsTable->save($stateErrorEntity); - } else { - $errorArray['user_error'] = "user with $pub not found"; - $json = json_encode($errorArray); - } - - return $this->returnJsonEncoded($json); - } - - - -} diff --git a/community_server/src/Controller/OperatorTypesController.php b/community_server/src/Controller/OperatorTypesController.php deleted file mode 100644 index 41db53f53..000000000 --- a/community_server/src/Controller/OperatorTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->OperatorTypes); - - $this->set(compact('operatorTypes')); - } - - /** - * View method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $operatorType = $this->OperatorTypes->get($id, [ - 'contain' => ['Operators'] - ]); - - $this->set('operatorType', $operatorType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $operatorType = $this->OperatorTypes->newEntity(); - if ($this->request->is('post')) { - $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData()); - if ($this->OperatorTypes->save($operatorType)) { - $this->Flash->success(__('The operator type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator type could not be saved. Please, try again.')); - } - $this->set(compact('operatorType')); - } - - /** - * Edit method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $operatorType = $this->OperatorTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData()); - if ($this->OperatorTypes->save($operatorType)) { - $this->Flash->success(__('The operator type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator type could not be saved. Please, try again.')); - } - $this->set(compact('operatorType')); - } - - /** - * Delete method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $operatorType = $this->OperatorTypes->get($id); - if ($this->OperatorTypes->delete($operatorType)) { - $this->Flash->success(__('The operator type has been deleted.')); - } else { - $this->Flash->error(__('The operator type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/OperatorsController.php b/community_server/src/Controller/OperatorsController.php deleted file mode 100644 index 974151a7b..000000000 --- a/community_server/src/Controller/OperatorsController.php +++ /dev/null @@ -1,236 +0,0 @@ -Auth->allow(['ajaxSave', 'ajaxLoad', 'ajaxDelete']); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['OperatorTypes'] - ]; - $operators = $this->paginate($this->Operators); - - $this->set(compact('operators')); - } - - public function ajaxSave() - { - if ($this->request->is('post')) { - - $operatorTypeName = $this->request->getData('operator_type_name'); - $username = $this->request->getData('username'); - $pubkey_bin = base64_decode($this->request->getData('user_pubkey')); - $data = base64_decode($this->request->getData('data_base64')); - $sign = base64_decode($this->request->getData('sign')); - - //$publicKey_hex = bin2hex($pubkey_bin); - //$signature_hex = bin2hex($sign); - - if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) { - return $this->returnJson([ - 'state' => 'wrong signature', - /* 'details' => [ - 'pubkey' => $publicKey_hex, - 'sign' => $signature_hex, - 'data' => bin2hex($data) - ] -*/ - ]); - } - - $operatorTypeId = $this->Operators->OperatorTypes-> - find() - ->where(['name' => $operatorTypeName]) - ->select(['id']) - ->first(); - - // load operator from db if already exist - $operator = $this->Operators - ->find() - ->where([ - 'operator_type_id' => $operatorTypeId->id, - 'username' => $username, - 'user_pubkey' => $pubkey_bin]) - ->first(); - if(!$operator) { - // create new entity - $operator = $this->Operators->newEntity(); - } else { - // check if request has valid signature - - } - - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - $operator->user_pubkey = $pubkey_bin; - $operator->operator_type_id = $operatorTypeId->id; - if ($this->Operators->save($operator)) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxLoad() - { - if ($this->request->is('get')) { - $username = $this->request->getQuery('username'); - $operators = $this->Operators - ->find() - ->where(['username' => $username]) - ->contain(['OperatorTypes']) - ->select(['data_base64', 'OperatorTypes.name']) - ->toArray(); - ; - if($operators) { - return $this->returnJson(['state' => 'success', 'operators' => $operators]); - } else { - return $this->returnJson(['state' => 'not found']); - } - - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - function ajaxDelete() { - if ($this->request->is('delete')) { - $operatorTypeName = $this->request->getData('operator_type_name'); - $username = $this->request->getData('username'); - $pubkey_bin = base64_decode($this->request->getData('user_pubkey')); - $sign = base64_decode($this->request->getData('sign')); - - $operatorTypeId = $this->Operators->OperatorTypes-> - find() - ->where(['name' => $operatorTypeName]) - ->select(['id']) - ->first(); - - // load operator from db if already exist - $operator = $this->Operators - ->find() - ->where([ - 'operator_type_id' => $operatorTypeId->id, - 'username' => $username, - 'user_pubkey' => $pubkey_bin]) - ->first(); - if(!$operator) { - return $this->returnJson(['state' => 'error', 'msg' => 'not found']); - } else { - $data = base64_decode($operator->data_base64); - // check if request has valid signature - if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) { - return $this->returnJson(['state' => 'error', 'msg' => 'wrong signature']); - } - } - if ($this->Operators->delete($operator)) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - /** - * View method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $operator = $this->Operators->get($id, [ - 'contain' => ['OperatorTypes'] - ]); - - $this->set('operator', $operator); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $operator = $this->Operators->newEntity(); - if ($this->request->is('post')) { - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - if ($this->Operators->save($operator)) { - $this->Flash->success(__('The operator has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator could not be saved. Please, try again.')); - } - $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]); - $this->set(compact('operator', 'operatorTypes')); - } - - /** - * Edit method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $operator = $this->Operators->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - if ($this->Operators->save($operator)) { - $this->Flash->success(__('The operator has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator could not be saved. Please, try again.')); - } - $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]); - $this->set(compact('operator', 'operatorTypes')); - } - - /** - * Delete method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $operator = $this->Operators->get($id); - if ($this->Operators->delete($operator)) { - $this->Flash->success(__('The operator has been deleted.')); - } else { - $this->Flash->error(__('The operator could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/PagesController.php b/community_server/src/Controller/PagesController.php deleted file mode 100644 index 69f57356b..000000000 --- a/community_server/src/Controller/PagesController.php +++ /dev/null @@ -1,86 +0,0 @@ -Auth->allow(['display']); - } - - /** - * Displays a view - * - * @param array ...$path Path segments. - * @return \Cake\Http\Response|null - * @throws \Cake\Http\Exception\ForbiddenException When a directory traversal attempt. - * @throws \Cake\Http\Exception\NotFoundException When the view file could not - * be found or \Cake\View\Exception\MissingTemplateException in debug mode. - */ - public function display(...$path) - { - - $count = count($path); - if (!$count) { - return $this->redirect('/'); - } - if (in_array('..', $path, true) || in_array('.', $path, true)) { - throw new ForbiddenException(); - } - $page = $subpage = null; - - if (!empty($path[0])) { - $page = $path[0]; - } - if (!empty($path[1])) { - $subpage = $path[1]; - } - /*$session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $login_server_session = $this->request->getCookie('GRADIDO_LOGIN', '');*/ - if($page == "vue" || $page == "vue-dev") { - $this->viewBuilder()->setLayout(false); - } - $this->set(compact('page', 'subpage')); - - try { - $this->render(implode('/', $path)); - } catch (MissingTemplateException $exception) { - if (Configure::read('debug')) { - throw $exception; - } - throw new NotFoundException(); - } - } -} diff --git a/community_server/src/Controller/ProfileController.php b/community_server/src/Controller/ProfileController.php deleted file mode 100644 index 2a378e076..000000000 --- a/community_server/src/Controller/ProfileController.php +++ /dev/null @@ -1,206 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->Auth->allow(['index', 'edit']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Mein Profil'), 'Profile', 'index', true)) - ); - } - /** - * Get binary file data from request data - * - * @return binary data - */ - protected function getFileData($requestData) - { - $binaryFileData = null; - // Get a list of UploadedFile objects - $file = $requestData['profile_img']; - // Read the file data. - $type = $file['type']; - $error = $file['error']; - if ($error === 0 && strpos($type, 'image/') === 0) { - $path = new File($file['tmp_name']); - $binaryFileData = $path->read(true, 'r'); - $this->log("binaryFileData: ".$binaryFileData, 'debug'); - } - return $binaryFileData; - } - /** - * Update Profile Data - * - * ...which is spread over two tables, plus needs to be promoted to the Login Server. - * - * @throws Exception - */ - protected function updateProfileData($requestData, $userId, $communityProfile) - { - // Update Profile with Form Data! - $usersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUserQuery = $usersTable - ->find('all') - ->select(['id', 'first_name', 'last_name']) - ->where(['id' => $userId]); - - if ($stateUserQuery->count() == 1) { - $stateUser = $stateUserQuery->first(); - $stateUser = $usersTable->patchEntity($stateUser, $requestData); - - $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles'); - // Save old binary data, because the file input is always empty, in HTML! - $oldBinaryData = $communityProfile['profile_img']; - - $communityProfile = $profilesTable->patchEntity($communityProfile, $requestData); - $communityProfile['state_user_id'] = $userId; - - $binaryFileData = $this->getFileData($requestData); - if ($binaryFileData !== null) { - $this->log("CommunityProfile: Writing binary img data.", 'debug'); - $communityProfile['profile_img'] = $binaryFileData; - } else { - $this->log("CommunityProfile: Nothing uploaded!", 'debug'); - $communityProfile['profile_img'] = $oldBinaryData; - } - if ($profilesTable->save($communityProfile) && - $usersTable->save($stateUser) - ) { - $session = $this->getRequest()->getSession(); - $session_id = $session->read('session_id'); - $email = $session->read('StateUser.email'); - $this->returnJson( - $this->JsonRequestClient->sendRequest( - json_encode( - [ - 'session_id' => $session_id, - 'email' => $email, - 'update' => [ - 'User.first_name' => $requestData['first_name'], - 'User.last_name' => $requestData['last_name'] - ] - ] - ), - '/updateUserInfos' - ) - ); - $this->Flash->success(__('Dein Profil wurde aktualisiert!')); - } - } else { - $this->Flash->error(__("Non-recoverable database problem - state_user doesn't exist or not unique!")); - } - return [$stateUser, $communityProfile]; - } - /** - * Get or create CommunityProfile - * - * @return \Cake\ORM\CommunityProfile - */ - protected function getCommunityProfile($userId) - { - $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles'); - $communityProfileQuery = $profilesTable - ->find('all') - ->select(['id', 'profile_img', 'profile_desc']) - ->where(['state_user_id' => $userId]); - if ($communityProfileQuery->count() != 1) { - $communityProfile = $profilesTable->newEntity(); - if ($profilesTable->save($communityProfile)) { - $this->log("CommunityProfile created.", 'debug'); - } - } else { - $communityProfile = $communityProfileQuery->first(); - } - return $communityProfile; - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $communityProfile = $session->read('CommunityProfile'); - if (!$communityProfile) { - $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug'); - $session->write('CommunityProfile', $this->getCommunityProfile($user['id'])); - } - $this->set('user', $user); - $this->set('communityProfile', $communityProfile); - $this->set('timeUsed', microtime(true) - $startTime); - } - /** - * Edit method - * - * @return \Cake\Http\Response|null - */ - public function edit() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - - $user = $session->read('StateUser'); - $communityProfile = $session->read('CommunityProfile'); - if (!$user) { - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - if (!$communityProfile) { - $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug'); - $session->write('CommunityProfile', $this->getCommunityProfile($user['id'])); - } - - $profileForm = new ProfileForm(); - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - if ($profileForm->validate($requestData)) { - [$stateUser, $communityProfile] = $this->updateProfileData($requestData, $user['id'], $communityProfile); - $user['first_name'] = $stateUser['first_name']; - $user['last_name'] = $stateUser['last_name']; - $session->write('StateUser.first_name', $stateUser['first_name']); - $session->write('StateUser.last_name', $stateUser['last_name']); - $session->write('CommunityProfile', $communityProfile); - return $this->redirect(['action' => 'index']); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - } - $this->set('user', $user); - $this->set('communityProfile', $communityProfile); - $this->set('profileForm', $profileForm); - $this->set('timeUsed', microtime(true) - $startTime); - } -} diff --git a/community_server/src/Controller/RolesController.php b/community_server/src/Controller/RolesController.php deleted file mode 100644 index 80aa493d3..000000000 --- a/community_server/src/Controller/RolesController.php +++ /dev/null @@ -1,108 +0,0 @@ -paginate($this->Roles); - - $this->set(compact('roles')); - } - - /** - * View method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $role = $this->Roles->get($id, [ - 'contain' => [], - ]); - - $this->set('role', $role); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $role = $this->Roles->newEntity(); - if ($this->request->is('post')) { - $role = $this->Roles->patchEntity($role, $this->request->getData()); - if ($this->Roles->save($role)) { - $this->Flash->success(__('The role has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The role could not be saved. Please, try again.')); - } - $this->set(compact('role')); - } - - /** - * Edit method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $role = $this->Roles->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $role = $this->Roles->patchEntity($role, $this->request->getData()); - if ($this->Roles->save($role)) { - $this->Flash->success(__('The role has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The role could not be saved. Please, try again.')); - } - $this->set(compact('role')); - } - - /** - * Delete method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $role = $this->Roles->get($id); - if ($this->Roles->delete($role)) { - $this->Flash->success(__('The role has been deleted.')); - } else { - $this->Flash->error(__('The role could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/ServerUsersController.php b/community_server/src/Controller/ServerUsersController.php deleted file mode 100644 index 7255eee0f..000000000 --- a/community_server/src/Controller/ServerUsersController.php +++ /dev/null @@ -1,132 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->deny('index'); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $serverUsers = $this->paginate($this->ServerUsers); - $this->set(compact('serverUsers')); - } - - public function login() - { - $startTime = microtime(true); - if ($this->request->is('post')) { - $user = $this->Auth->identify(); - if ($user) { - $this->Auth->setUser($user); - return $this->redirect($this->Auth->redirectUrl()); - } - $this->Flash->error(__('Invalid username or password, try again')); - } - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function logout() - { - return $this->redirect($this->Auth->logout()); - } - - /** - * View method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $serverUser = $this->ServerUsers->get($id, [ - 'contain' => [] - ]); - - $this->set('serverUser', $serverUser); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $serverUser = $this->ServerUsers->newEntity(); - if ($this->request->is('post')) { - $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData()); - if ($this->ServerUsers->save($serverUser)) { - $this->Flash->success(__('The server user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The server user could not be saved. Please, try again.')); - } - $this->set(compact('serverUser')); - } - - /** - * Edit method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $serverUser = $this->ServerUsers->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData()); - if ($this->ServerUsers->save($serverUser)) { - $this->Flash->success(__('The server user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The server user could not be saved. Please, try again.')); - } - $this->set(compact('serverUser')); - } - - /** - * Delete method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $serverUser = $this->ServerUsers->get($id); - if ($this->ServerUsers->delete($serverUser)) { - $this->Flash->success(__('The server user has been deleted.')); - } else { - $this->Flash->error(__('The server user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateBalancesController.php b/community_server/src/Controller/StateBalancesController.php deleted file mode 100644 index 249b6cb06..000000000 --- a/community_server/src/Controller/StateBalancesController.php +++ /dev/null @@ -1,399 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['overview', 'overviewGdt', 'ajaxListTransactions', 'ajaxGdtOverview', 'ajaxGetBalance', 'ajaxGdtTransactions']); - $this->loadComponent('JsonRequestClient'); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers'] - ]; - $stateBalances = $this->paginate($this->StateBalances); - - $this->set(compact('stateBalances')); - } - - - - public function overview() - { - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Kontoübersicht'), 'StateBalances', 'overview', true)) - ); - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - - $user = $session->read('StateUser'); - $update_balance_result = $this->StateBalances->updateBalances($user['id']); - if($update_balance_result['success'] !== true) { - $this->addAdminError('StateBalances', 'overview', $update_balance_result, $user['id']); - } - - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $stateBalancesTable->updateBalances($user['id']); - $gdtSum = 0; - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - } else { - $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0); - } - - - $stateUserTransactionsQuery = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $user['id']]) - ->order(['balance_date' => 'ASC']) - ->contain([]) - ; - $decay = true; - $transactions = []; - if($stateUserTransactionsQuery->count() > 0) { - $transactions_with_decay = $transactionsTable->listTransactionsHumanReadable($stateUserTransactionsQuery->toArray(), $user, $decay); - foreach($transactions_with_decay as $tr) { - if(isset($tr['decay'])) { - $tr['decay']['type'] = 'decay'; - $tr['decay']['memo'] = ''; - $transactions[] = $tr['decay']; - } - $transactions[] = $tr; - } - } - - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first(); - - $body = [ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => count($transactions), - 'gdtSum' => $gdtSum, - 'timeUsed' => microtime(true) - $startTime - ]; - $now = new FrozenTime(); - $body['decay_date'] = $now; - - if(!$state_balance) { - $balance = 0.0; - } else { - $balance = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now); - //$balance = $state_balance->partDecay($now); - } - $calculated_balance = 0; - foreach($transactions as $transaction) { - if($transaction['type'] == 'decay' || $transaction['type'] == 'send') { - $calculated_balance -= $transaction['balance']; - } else { - $calculated_balance += $transaction['balance']; - } - } - - $this->set('calculated_balance', $calculated_balance); - - $this->set('transactions', array_reverse($transactions)); - $this->set('transactionExecutingCount', $session->read('Transactions.executing')); - $this->set('balance', $balance); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('gdtSum', $gdtSum); - } - - - public function ajaxGdtOverview() - { - $gdtSum = 0; - $gdtCount = -1; - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - if(isset($gdtEntries['data']['count'])) { - $gdtCount = intval($gdtEntries['data']['count']); - } - } else { - if($user) { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']); - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0); - } - } - - return $this->returnJson([ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transaction.executing'), - 'count' => $all_user_transactions_count - ]); - } - - - public function overviewGdt() - { - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('GDT Kontoübersicht'), 'StateBalances', 'overviewGdt', true)) - ); - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $requestResult = $this->JsonRequestClient->sendRequestGDT([ - 'email' => $user['email'], - 'page' => 1, - 'count' => 100, - 'orderDirection' => 'DESC' - ], 'GdtEntries' . DS . 'listPerEmailApi'); - - //var_dump($requestResult); - if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state']) - { - $moreEntrysAsShown = false; - if(isset($requestResult['data']['count'])) { - if($requestResult['data']['count'] > 100) { - $moreEntrysAsShown = true; - } - } else { - $moreEntrysAsShown = $requestResult['data']['moreEntrysAsShown']; - } - //var_dump(array_keys($requestResult['data'])); - if(isset($requestResult['data']['gdtEntries'])) { - $ownEntries = $requestResult['data']['gdtEntries']; - } else { - $ownEntries = $requestResult['data']['ownEntries']; - } - //$gdtEntries = $requestResult['data']['entries']; - - $gdtSum = 0; - foreach ($ownEntries as $i => $gdtEntry) { - $gdtSum += $gdtEntry['gdt']; - //echo "index: $i
    "; - //var_dump($gdtEntry); - } - if (isset($requestResult['data']['connectEntrys'])) { - $connectEntries = $requestResult['data']['connectEntrys']; - - foreach ($connectEntries as $entry) { - //if(!$count) var_dump($entry); - //$count++; - $gdtSum += $entry['connect']['gdt_entry']['gdt']; - } - $this->set('connectEntries', $connectEntries); - } - - //echo "gdtSum: $gdtSum
    "; - $this->set('gdtSum', $gdtSum); - $this->set('ownEntries', $ownEntries); - $this->set('moreEntrysAsShown', $moreEntrysAsShown); - $this->set('user', $user); - - if (isset($requestResult['data']['publishers'])) { - $publishers = $requestResult['data']['publishers']; - $this->set('publishers', $publishers); - } - } else { - $this->addAdminError('StateBalancesController', 'overviewGdt', $requestResult, $user['id']); - $this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!')); - } - } - - public function ajaxGdtTransactions() - { - $startTime = microtime(true); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $requestResult = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'listPerEmailApi'); - $connectEntries = []; - $publishers = []; - - //var_dump($requestResult); - if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state']) { - - //var_dump(array_keys($requestResult['data'])); - $ownEntries = $requestResult['data']['ownEntries']; - //$gdtEntries = $requestResult['data']['entries']; - - $gdtSum = 0; - foreach ($ownEntries as $i => $gdtEntry) { - $gdtSum += $gdtEntry['gdt']; - //echo "index: $i
    "; - //var_dump($gdtEntry); - } - if (isset($requestResult['data']['connectEntrys'])) { - $connectEntries = $requestResult['data']['connectEntrys']; - - foreach ($connectEntries as $entry) { - //if(!$count) var_dump($entry); - //$count++; - $gdtSum += $entry['connect']['gdt_entry']['gdt']; - } - } - - //echo "gdtSum: $gdtSum
    "; - - if (isset($requestResult['data']['publishers'])) { - $publishers = $requestResult['data']['publishers']; - } - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtTransactions', $requestResult, $user['id']); - //$this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!')); - return $this->returnJson(['state' => 'error', 'msg' => 'error from gdt server', 'details' => $requestResult]); - } - - - return $this->returnJson([ - 'state' => 'success', - 'gdtSum' => $gdtSum, - 'ownEntries' => $ownEntries, - 'connectEntries' => $connectEntries, - 'publishers' => $publishers, - 'gdtSumPerEmail' => $requestResult['data']['gdtSumPerEmail'], - 'moreEntrysAsShown' => $requestResult['data']['moreEntrysAsShown'], - 'timeUsed' => microtime(true) - $startTime - ]); - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - /** - * View method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateBalance = $this->StateBalances->get($id, [ - 'contain' => ['StateUsers'] - ]); - - $this->set('stateBalance', $stateBalance); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateBalance = $this->StateBalances->newEntity(); - if ($this->request->is('post')) { - $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData()); - if ($this->StateBalances->save($stateBalance)) { - $this->Flash->success(__('The state balance has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state balance could not be saved. Please, try again.')); - } - $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateBalance', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateBalance = $this->StateBalances->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData()); - if ($this->StateBalances->save($stateBalance)) { - $this->Flash->success(__('The state balance has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state balance could not be saved. Please, try again.')); - } - $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateBalance', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateBalance = $this->StateBalances->get($id); - if ($this->StateBalances->delete($stateBalance)) { - $this->Flash->success(__('The state balance has been deleted.')); - } else { - $this->Flash->error(__('The state balance could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateCreatedController.php b/community_server/src/Controller/StateCreatedController.php deleted file mode 100644 index b66f1b7c1..000000000 --- a/community_server/src/Controller/StateCreatedController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'StateUsers'] - ]; - $stateCreated = $this->paginate($this->StateCreated); - - $this->set(compact('stateCreated')); - } - - /** - * View method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateCreated = $this->StateCreated->get($id, [ - 'contain' => ['Transactions', 'StateUsers'] - ]); - - $this->set('stateCreated', $stateCreated); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateCreated = $this->StateCreated->newEntity(); - if ($this->request->is('post')) { - $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData()); - if ($this->StateCreated->save($stateCreated)) { - $this->Flash->success(__('The state created has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state created could not be saved. Please, try again.')); - } - $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateCreated', 'transactions', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateCreated = $this->StateCreated->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData()); - if ($this->StateCreated->save($stateCreated)) { - $this->Flash->success(__('The state created has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state created could not be saved. Please, try again.')); - } - $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateCreated', 'transactions', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateCreated = $this->StateCreated->get($id); - if ($this->StateCreated->delete($stateCreated)) { - $this->Flash->success(__('The state created has been deleted.')); - } else { - $this->Flash->error(__('The state created could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateErrorsController.php b/community_server/src/Controller/StateErrorsController.php deleted file mode 100644 index 0c91d93e3..000000000 --- a/community_server/src/Controller/StateErrorsController.php +++ /dev/null @@ -1,173 +0,0 @@ -Auth->allow(['showForUser', 'deleteForUser']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Fehler'), 'StateErrors', 'ShowForUser', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers', 'TransactionTypes'] - ]; - $stateErrors = $this->paginate($this->StateErrors); - - $this->set(compact('stateErrors')); - } - - public function showForUser() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - - $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false); - $transactionTypes = $this->StateErrors->TransactionTypes->find('all')->select(['id', 'name', 'text'])->order(['id']); - - $this->set('errors', $errors); - $this->set('transactionTypes', $transactionTypes->toList()); - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function deleteForUser($id = null) - { - $this->request->allowMethod(['post', 'delete', 'get']); - $stateError = $this->StateErrors->get($id); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if($user['id'] != $stateError->state_user_id) { - $this->Flash->error(__('Error belongs to another User, cannot delete')); - } - else if ($this->StateErrors->delete($stateError)) { - $this->Flash->success(__('The state error has been deleted.')); - } else { - $this->Flash->error(__('The state error could not be deleted. Please, try again.')); - } - $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false); - if($errors->count() == 0) { - return $this->redirect(['controller' => 'Dashboard']); - } - return $this->redirect(['action' => 'showForUser']); - } - - - /** - * View method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateError = $this->StateErrors->get($id, [ - 'contain' => ['StateUsers', 'TransactionTypes'] - ]); - - $this->set('stateError', $stateError); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateError = $this->StateErrors->newEntity(); - if ($this->request->is('post')) { - $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData()); - if ($this->StateErrors->save($stateError)) { - $this->Flash->success(__('The state error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state error could not be saved. Please, try again.')); - } - $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]); - $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateError', 'stateUsers', 'transactionTypes')); - } - - /** - * Edit method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateError = $this->StateErrors->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData()); - if ($this->StateErrors->save($stateError)) { - $this->Flash->success(__('The state error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state error could not be saved. Please, try again.')); - } - $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]); - $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateError', 'stateUsers', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateError = $this->StateErrors->get($id); - if ($this->StateErrors->delete($stateError)) { - $this->Flash->success(__('The state error has been deleted.')); - } else { - $this->Flash->error(__('The state error could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupAddressesController.php b/community_server/src/Controller/StateGroupAddressesController.php deleted file mode 100644 index 25afc82c7..000000000 --- a/community_server/src/Controller/StateGroupAddressesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['AddressTypes'], - ]; - $stateGroupAddresses = $this->paginate($this->StateGroupAddresses); - - $this->set(compact('stateGroupAddresses')); - } - - /** - * View method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroupAddress = $this->StateGroupAddresses->get($id, [ - 'contain' => ['StateGroups', 'AddressTypes'], - ]); - - $this->set('stateGroupAddress', $stateGroupAddress); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroupAddress = $this->StateGroupAddresses->newEntity(); - if ($this->request->is('post')) { - $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData()); - if ($this->StateGroupAddresses->save($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group address could not be saved. Please, try again.')); - } - $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]); - $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes')); - } - - /** - * Edit method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroupAddress = $this->StateGroupAddresses->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData()); - if ($this->StateGroupAddresses->save($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group address could not be saved. Please, try again.')); - } - $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]); - $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes')); - } - - /** - * Delete method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroupAddress = $this->StateGroupAddresses->get($id); - if ($this->StateGroupAddresses->delete($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been deleted.')); - } else { - $this->Flash->error(__('The state group address could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupRelationshipsController.php b/community_server/src/Controller/StateGroupRelationshipsController.php deleted file mode 100644 index 631ca13d1..000000000 --- a/community_server/src/Controller/StateGroupRelationshipsController.php +++ /dev/null @@ -1,115 +0,0 @@ -paginate = [ - 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships'] - ]; - $stateGroupRelationships = $this->paginate($this->StateGroupRelationships); - - $this->set(compact('stateGroupRelationships')); - } - - /** - * View method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroupRelationship = $this->StateGroupRelationships->get($id, [ - 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships'] - ]); - - $this->set('stateGroupRelationship', $stateGroupRelationship); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroupRelationship = $this->StateGroupRelationships->newEntity(); - if ($this->request->is('post')) { - $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData()); - if ($this->StateGroupRelationships->save($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group relationship could not be saved. Please, try again.')); - } - $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]); - $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]); - $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]); - $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships')); - } - - /** - * Edit method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroupRelationship = $this->StateGroupRelationships->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData()); - if ($this->StateGroupRelationships->save($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group relationship could not be saved. Please, try again.')); - } - $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]); - $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]); - $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]); - $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships')); - } - - /** - * Delete method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroupRelationship = $this->StateGroupRelationships->get($id); - if ($this->StateGroupRelationships->delete($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been deleted.')); - } else { - $this->Flash->error(__('The state group relationship could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupsController.php b/community_server/src/Controller/StateGroupsController.php deleted file mode 100644 index 36969671d..000000000 --- a/community_server/src/Controller/StateGroupsController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['Indices'] - ]; - $stateGroups = $this->paginate($this->StateGroups); - - $this->set(compact('stateGroups')); - } - - /** - * View method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroup = $this->StateGroups->get($id, [ - 'contain' => ['Indices', 'StateGroupAddresses', 'StateUsers', 'TransactionGroupCreates', 'Transactions'] - ]); - - $this->set('stateGroup', $stateGroup); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroup = $this->StateGroups->newEntity(); - if ($this->request->is('post')) { - $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData()); - if ($this->StateGroups->save($stateGroup)) { - $this->Flash->success(__('The state group has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group could not be saved. Please, try again.')); - } - $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]); - $this->set(compact('stateGroup', 'indices')); - } - - /** - * Edit method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroup = $this->StateGroups->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData()); - if ($this->StateGroups->save($stateGroup)) { - $this->Flash->success(__('The state group has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group could not be saved. Please, try again.')); - } - $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]); - $this->set(compact('stateGroup', 'indices')); - } - - /** - * Delete method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroup = $this->StateGroups->get($id); - if ($this->StateGroups->delete($stateGroup)) { - $this->Flash->success(__('The state group has been deleted.')); - } else { - $this->Flash->error(__('The state group could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateRelationshipTypesController.php b/community_server/src/Controller/StateRelationshipTypesController.php deleted file mode 100644 index 954b594e2..000000000 --- a/community_server/src/Controller/StateRelationshipTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->StateRelationshipTypes); - - $this->set(compact('stateRelationshipTypes')); - } - - /** - * View method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateRelationshipType = $this->StateRelationshipTypes->get($id, [ - 'contain' => [] - ]); - - $this->set('stateRelationshipType', $stateRelationshipType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateRelationshipType = $this->StateRelationshipTypes->newEntity(); - if ($this->request->is('post')) { - $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData()); - if ($this->StateRelationshipTypes->save($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state relationship type could not be saved. Please, try again.')); - } - $this->set(compact('stateRelationshipType')); - } - - /** - * Edit method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateRelationshipType = $this->StateRelationshipTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData()); - if ($this->StateRelationshipTypes->save($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state relationship type could not be saved. Please, try again.')); - } - $this->set(compact('stateRelationshipType')); - } - - /** - * Delete method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateRelationshipType = $this->StateRelationshipTypes->get($id); - if ($this->StateRelationshipTypes->delete($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been deleted.')); - } else { - $this->Flash->error(__('The state relationship type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateUserRolesController.php b/community_server/src/Controller/StateUserRolesController.php deleted file mode 100644 index 9238c7ad6..000000000 --- a/community_server/src/Controller/StateUserRolesController.php +++ /dev/null @@ -1,185 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->Auth->allow([ -// 'search' - ]); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true)) - ); - } - - public function search() - { - $this->loadModel('StateUsers'); - $startTime = microtime(true); - I18n::setLocale('de_DE'); - $this->viewBuilder()->setLayout('frontend'); - - $searchForm = new UserSearchForm(); - - $timeUsed = microtime(true) - $startTime; - //$this->set('timeUsed', $timeUsed); - $this->set(compact('timeUsed', 'searchForm')); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - - if ($searchForm->validate($requestData)) { - //var_dump($requestData); - $searchString = $requestData['search']; - - // find user on community server db - $globalSearch = '%' . $searchString . '%'; - $communityUsers = $this->StateUsers - ->find('all') - ->contain([]); - - $communityUsers->where(['OR' => [ - 'first_name LIKE' => $globalSearch, - 'last_name LIKE' => $globalSearch, - //'username LIKE' => $globalSearch, - 'email LIKE' => $globalSearch - ]]); - - //var_dump($communityUsers->toArray()); - $finalUserEntrys = []; - // detect states - $this->loadModel('Roles'); -// foreach ($pubkeySorted as $pubhex => $user) { - foreach($communityUsers as $communityUser) { - $finalUser = $communityUser; - $finalUser['pubkeyhex'] = bin2hex(stream_get_contents($communityUser->public_key)); - - $state_user_id = $communityUser->id; - $stateUserRole = $this->StateUserRoles->find('all')->where(['state_user_id' => $state_user_id])->all(); - - $role_ids = ""; - foreach ($stateUserRole as $userRole) { - if($role_ids != "") - $role_ids .= ",".$userRole->role_id; - else - $role_ids = $userRole->role_id; - } - - $roles = $this->Roles->find('all')->where(['id IN' => explode(",",$role_ids)])->all(); - - $role_names = ""; - foreach($roles as $role) - { - if($role_names != "") - $role_names .= "
    ".$role->title; - else - $role_names = $role->title; - } - - $finalUser['role_name'] = $role_names; - - array_push($finalUserEntrys, $finalUser); - } - - //var_dump($pubkeySorted); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - $this->set('finalUserEntrys', $finalUserEntrys); - } - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - public function assignRole() - { - $this->loadModel('Roles'); - $this->loadModel('StateUsers'); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - - $public_hex = hex2bin($requestData['public_hex']); - - $stateUser = $this->StateUsers->find('all')->where(['public_key' => $public_hex])->first(); - - foreach($requestData['role_id'] as $role_id) - { - $newStateUserRole = $this->StateUserRoles->newEntity(); - - $post_data = []; - $post_data['state_user_id'] = $stateUser->id; - $post_data['role_id'] = $role_id; - $this->StateUserRoles->patchEntity($newStateUserRole, $post_data); - $this->StateUserRoles->save($newStateUserRole); - - } - - $this->Flash->success(__('Role has been assigned to User.')); - - return $this->redirect(['controller' => 'state-user-roles', 'action' => 'search']); - - } - - $assignRoleForm = new AssignRoleForm(); - - $public_hex = $this->request->getParam('pass')[0]; - - $publichex = hex2bin($public_hex); - - $stateUser = $this->StateUsers->find('all')->where(['public_key' => $publichex])->first(); - - $stateUserRoles = $this->StateUserRoles->find('all')->where(['state_user_id' => $stateUser->id])->all(); - - $role_ids = ""; - foreach ($stateUserRoles as $userRole) { - if($role_ids != "") - $role_ids .= ",".$userRole->role_id; - else - $role_ids = $userRole->role_id; - } - - $role_ids = explode(",", $role_ids); - - $roles = $this->Roles->find('list', array('fields' => array('id', 'title'))); - - - $this->set('roles', $roles); - $this->set('stateUser', $stateUser); - $this->set('role_ids', $role_ids); - $this->set('assignRoleForm', $assignRoleForm); - $this->set('public_hex', $public_hex); - } - -} diff --git a/community_server/src/Controller/StateUserTransactionsController.php b/community_server/src/Controller/StateUserTransactionsController.php deleted file mode 100644 index f816192f3..000000000 --- a/community_server/src/Controller/StateUserTransactionsController.php +++ /dev/null @@ -1,291 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['ajaxListTransactions']); - //$this->loadComponent('JsonRequestClient'); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'], - ]; - $stateUserTransactions = $this->paginate($this->StateUserTransactions); - - $this->set(compact('stateUserTransactions')); - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - - public function ajaxListTransactions($page = 1, $count = 20) - { - $startTime = microtime(true); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $paged_state_user_transactions = $this->StateUserTransactions - ->find('all') - ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]]) - ->limit($count) - ->page($page) - ->order(['transaction_id']) - ; - $all_user_transactions_count = $this->StateUserTransactions - ->find('all') - ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]]) - ->count() - ; - $creationTransaction_ids = []; - $transferTransaction_ids = []; - $allTransaction_ids = []; - foreach($paged_state_user_transactions as $state_user_transaction) { - $allTransaction_ids[] = $state_user_transaction->transaction_id; - switch($state_user_transaction->transaction_type_id) { - case 1: $creationTransaction_ids[] = $state_user_transaction->transaction_id; break; - case 2: $transferTransaction_ids[] = $state_user_transaction->transaction_id; break; - } - } - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $transactionCreationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $transactionSendCoinsTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - if(count($allTransaction_ids) > 0) { - $transactionEntries = $transactionsTable->find('all')->where(['id IN' => $allTransaction_ids])->order(['id'])->toArray(); - } - if(count($creationTransaction_ids) > 0) { - $transactionCreations = $transactionCreationsTable->find('all')->where(['transaction_id IN' => $creationTransaction_ids]); - } - if(count($transferTransaction_ids)) { - $transactionTransfers = $transactionSendCoinsTable->find('all')->where(['transaction_id IN' => $transferTransaction_ids]); - } - //var_dump($transactions->all()); - - $transactions = []; - // creations - if(isset($transactionCreations)) { - foreach ($transactionCreations as $creation) { - //var_dump($creation); - $transaction_entries_index = array_search($creation->transaction_id, $allTransaction_ids); - if(FALSE === $transaction_entries_index) { - return $this->returnJson(['state' => 'error', 'msg' => 'code error', 'details' => 'creation, transaction_entries_index is FALSE, shouldn\'t occure']); - } - $transaction = $transactionEntries[$transaction_entries_index]; - array_push($transactions, [ - 'name' => 'Gradido Akademie', - 'type' => 'creation', - 'transaction_id' => $creation->transaction_id, - 'date' => $transaction->received, - 'balance' => $creation->amount, - 'memo' => $transaction->memo - ]); - } - } - - // involved users - if(isset($transactionTransfers)) { - $involvedUserIds = []; - - foreach ($transactionTransfers as $transfer) { - //var_dump($sendCoins); - if ($transfer->state_user_id != $user['id']) { - array_push($involvedUserIds, intval($transfer->state_user_id)); - } elseif ($transfer->receiver_user_id != $user['id']) { - array_push($involvedUserIds, intval($transfer->receiver_user_id)); - } - } - - // exchange key with values and drop duplicates - $involvedUser_temp = array_flip($involvedUserIds); - // exchange back - $involvedUserIds = array_flip($involvedUser_temp); - - $involvedUser = $stateUsersTable->find('all', [ - 'contain' => false, - 'where' => ['id IN' => $involvedUserIds], - 'fields' => ['id', 'first_name', 'last_name', 'email'] - ]); - //var_dump($involvedUser->toArray()); - $involvedUserIndices = []; - foreach ($involvedUser as $involvedUser) { - $involvedUserIndices[$involvedUser->id] = $involvedUser; - } - - // transfers - send coins - foreach($transactionTransfers as $transfer) - { - $transaction_entries_index = array_search($transfer->transaction_id, $allTransaction_ids); - if(FALSE === $transaction_entries_index) { - - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'code error', - 'details' => 'transfer, transaction_entries_index is FALSE, shouldn\'t occure', - 'data' => ['haystack' => $allTransaction_ids, 'needle' => $transfer->transaction_id] - ]); - } - $transaction = $transactionEntries[$transaction_entries_index]; - $type = ''; - $otherUser = null; - $other_user_public = ''; - - if ($transfer->state_user_id == $user['id']) { - $type = 'send'; - - if(isset($involvedUserIndices[$transfer->receiver_user_id])) { - $otherUser = $involvedUserIndices[$transfer->receiver_user_id]; - } - $other_user_public = bin2hex(stream_get_contents($transfer->receiver_public_key)); - } else if ($transfer->receiver_user_id == $user['id']) { - $type = 'receive'; - if(isset($involvedUserIndices[$transfer->state_user_id])) { - $otherUser = $involvedUserIndices[$transfer->state_user_id]; - } - if($transfer->sender_public_key) { - $other_user_public = bin2hex(stream_get_contents($transfer->sender_public_key)); - } - } - if(null == $otherUser) { - $otherUser = $stateUsersTable->newEntity(); - } - array_push($transactions, [ - 'name' => $otherUser->first_name . ' ' . $otherUser->last_name, - 'email' => $otherUser->email, - 'type' => $type, - 'transaction_id' => $transfer->transaction_id, - 'date' => $transaction->received, - 'balance' => $transfer->amount, - 'memo' => $transaction->memo, - 'pubkey' => $other_user_public - ]); - //*/ - - } - } - uasort($transactions, array($this, 'sortTransactions')); - - return $this->returnJson([ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => $all_user_transactions_count, - 'timeUsed' => microtime(true) - $startTime - ]); - } - - /** - * View method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateUserTransaction = $this->StateUserTransactions->get($id, [ - 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'], - ]); - - $this->set('stateUserTransaction', $stateUserTransaction); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateUserTransaction = $this->StateUserTransactions->newEntity(); - if ($this->request->is('post')) { - $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData()); - if ($this->StateUserTransactions->save($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user transaction could not be saved. Please, try again.')); - } - $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]); - $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]); - $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes')); - } - - /** - * Edit method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateUserTransaction = $this->StateUserTransactions->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData()); - if ($this->StateUserTransactions->save($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user transaction could not be saved. Please, try again.')); - } - $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]); - $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]); - $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateUserTransaction = $this->StateUserTransactions->get($id); - if ($this->StateUserTransactions->delete($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been deleted.')); - } else { - $this->Flash->error(__('The state user transaction could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateUsersController.php b/community_server/src/Controller/StateUsersController.php deleted file mode 100644 index fc6ec8614..000000000 --- a/community_server/src/Controller/StateUsersController.php +++ /dev/null @@ -1,616 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - $this->loadComponent('Cookie'); - $this->Auth->allow([ - 'search', 'ajaxCopyLoginToCommunity', 'ajaxCopyCommunityToLogin', - 'ajaxDelete', 'ajaxCountTransactions', 'ajaxVerificationEmailResend', - 'ajaxGetUserEmailVerificationCode', 'ajaxGetCSFRToken', 'login' - ]); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => [] - ]; - $stateUsers = $this->paginate($this->StateUsers); - - $this->set(compact('stateUsers')); - } - - /*public function listIdentHashes() - { - $stateUsers = $this->StateUsers->find('all')->toArray(); - foreach($stateUsers as $i => $user) { - $stateUsers[$i]->identHash = TransactionCreation::DRMakeStringHash($user->email); - } - $this->set('stateUsers', $stateUsers); - }*/ - - public function login($session_id) - { - if(isset($session_id) && intval($session_id) !== 0) { - $loginServer = Configure::read('LoginServer'); - $http = new Client(); - - try { - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - $this->Cookie->configKey('GRADIDO_LOGIN', 'encryption', false); - $this->Cookie->write('GRADIDO_LOGIN', $session_id); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']); - } - } - } catch (\Exception $e) { - $msg = $e->getMessage(); - $this->Flash->error(__('error http request: ') . $msg); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']); - } - } - throw new NotFoundException(); - } - - public function search() - { - $startTime = microtime(true); - I18n::setLocale('de_DE'); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->redirect(['controller' => 'dashboard', 'action' => 'index']); - } - - $searchForm = new UserSearchForm(); - - $timeUsed = microtime(true) - $startTime; - //$this->set('timeUsed', $timeUsed); - $csfr_token = $this->request->getParam('_csrfToken'); - $this->set(compact('timeUsed', 'searchForm', 'csfr_token')); - $empty_string = '... empty ...'; - if ($this->request->is('post')) { - $finalUserEntrys = []; - $requestData = $this->request->getData(); - $account_state = $requestData['account_state']; - if($requestData['search'] == '' && $account_state != 'all') { - $requestData['search'] = $empty_string; - } - - if($searchForm->validate($requestData)) { - //var_dump($requestData); - $searchString = $requestData['search']; - $searchType = 'unknown'; - if(GenericValidation::email($searchString, [])) { - $searchType = 'email'; - } - // find users on login server - $resultJson = $this->JsonRequestClient->getUsers($session->read('session_id'), $searchString, $account_state); - $loginServerUser = []; - if($resultJson['state'] == 'success') { - $dataJson = $resultJson['data']; - if($dataJson['state'] != 'success') { - if($dataJson['msg'] == 'session not found') { - $session->destroy(); - return $this->redirect(Router::url('/', true) . 'account', 303); - } - } - //var_dump($dataJson); - if(isset($dataJson['users'])) { - $loginServerUser = $dataJson['users']; - } - } - $pubkeySorted = []; - $emptyPubkeys = []; - foreach($loginServerUser as $u) { - if(!isset($u['public_hex']) || $u['public_hex'] == '') { - array_push($emptyPubkeys, $u); - } else { - if(!isset($pubkeySorted[$u['public_hex']])) { - $pubkeySorted[$u['public_hex']] = ['login' => [], 'community' => []]; - } - array_push($pubkeySorted[$u['public_hex']]['login'], $u); - } - } - // find user on community server db - - - - $communityUsers = $this->StateUsers - ->find('all') - ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]]); - - if($account_state == 'email not activated') { - if(count($pubkeySorted) > 0) { - $communityUsers->where(['hex(public_key) IN' => array_keys($pubkeySorted)]); - } else { - $communityUsers = null; - } - } else { - $globalSearch = '%' . $searchString . '%'; - $communityUsers->where(['OR' => [ - 'first_name LIKE' => $globalSearch, - 'last_name LIKE' => $globalSearch, - 'email LIKE' => $globalSearch - ]]); - } - - - //var_dump($communityUsers->toArray()); - if($communityUsers) { - foreach($communityUsers as $u) { - $pubkey_hex = bin2hex(stream_get_contents($u->public_key)); - $u->public_hex = $pubkey_hex; - if(!isset($pubkeySorted[$pubkey_hex])) { - $pubkeySorted[$pubkey_hex] = ['login' => [], 'community' => []]; - } - array_push($pubkeySorted[$pubkey_hex]['community'], $u); - } - } - - // detect states - foreach($pubkeySorted as $pubhex => $user) { - $finalUser = []; - $state = 'account created'; - $color = 'secondary'; - $finalUser['balance'] = 0; - $finalUser['pubkeyhex'] = $pubhex; - $finalUser['created'] = null; - - if(count($user['community']) == 1) { - if(isset($user['community'][0]->state_balances) && - isset($user['community'][0]->state_balances[0]['amount'])) { - $finalUser['balance'] = $user['community'][0]->state_balances[0]->amount; - } - } - - if(count($user['login']) == 0) { - $state = 'account not on login-server'; - $color = 'danger'; - if(count($user['community']) == 1) { - $c_user = $user['community'][0]; - $finalUser['name'] = $c_user->first_name . ' ' . $c_user->last_name; - $finalUser['first_name'] = $c_user->first_name; - $finalUser['last_name'] = $c_user->last_name; - $finalUser['email'] = $c_user->email; - } - } else if(count($user['login']) == 1) { - if($user['login'][0]['email_checked'] == true) { - $state = 'email activated'; - $color = 'primary'; - - if(count($user['community']) == 1) { - $state = 'account copied to community'; - $color = 'success'; - //var_dump($user['community'][0]->state_balances[0]['amount']); - } - - } else { - $state = 'email not activated'; - $color = 'warning'; - } - - $l_user = $user['login'][0]; - $finalUser['name'] = $l_user['first_name'] . ' ' . $l_user['last_name']; - $finalUser['first_name'] = $l_user['first_name']; - $finalUser['last_name'] = $l_user['last_name']; - $finalUser['email'] = $l_user['email']; - $finalUser['created'] = new FrozenTime($l_user['created']); - - } else { - $state = 'account multiple times on login-server'; - $color = 'danger'; - } - $finalUser['indicator'] = ['name' => $state, 'color' => $color]; - array_push($finalUserEntrys, $finalUser); - } - - foreach($emptyPubkeys as $user) { - $finalUser = []; - $state = 'account not on community server'; - $color = 'secondary'; - if($user['email_checked'] == false) { - $state = 'email not activated'; - $color = 'warning'; - } else { - $state = 'no keys'; - $color = 'warning'; - } - $finalUser['balance'] = 0; - $finalUser['pubkeyhex'] = ''; - $finalUser['name'] = $user['first_name'] . ' ' . $user['last_name']; - $finalUser['first_name'] = $user['first_name']; - $finalUser['last_name'] = $user['last_name']; - $finalUser['email'] = $user['email']; - $finalUser['created'] = new FrozenTime($user['created']); - $finalUser['indicator'] = ['name' => $state, 'color' => $color]; - array_push($finalUserEntrys, $finalUser); - } - //var_dump($pubkeySorted); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - - $this->set('finalUserEntrys', $finalUserEntrys); - } - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - public function ajaxCopyCommunityToLogin() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxCopyLoginToCommunity() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - - $newStateUser = $this->StateUsers->newEntity(); - $this->StateUsers->patchEntity($newStateUser, $jsonData); - $newStateUser->public_key = hex2bin($jsonData['pubkeyhex']); - - if(!$this->StateUsers->save($newStateUser)) { - return $this->returnJson(['state' => 'error', 'msg' => 'error by saving', 'details' => json_encode($newStateUser->errors())]); - } - - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxVerificationEmailResend() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - $email = $jsonData['email']; - $session_id = $session->read('session_id'); - - return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $email - ]), '/adminEmailVerificationResend')); - /*return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'search' => $searchString - ]), '/getUsers');*/ - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxGetUserEmailVerificationCode() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - $email = $jsonData['email']; - $session_id = $session->read('session_id'); - - return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $email, - 'ask' => ['EmailVerificationCode.Register', 'loginServer.path'] - ]), '/getUserInfos')); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - - public function ajaxDelete() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - $pubkey = hex2bin($jsonData['pubkeyhex']); - $stateUsers = $this->StateUsers->find('all')->where(['public_key' => $pubkey]); - if($stateUsers->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']); - } - - if ($this->StateUsers->delete($stateUsers->first())) { - return $this->returnJson(['state' => 'success']); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error by deleting', 'details' => json_encode($stateUser->errors())]); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxCountTransactions() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - $pubkey = hex2bin($jsonData['pubkeyhex']); - $stateUsers = $this->StateUsers - ->find('all') - ->where(['public_key' => $pubkey]) - ->select(['id']); - if($stateUsers->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']); - } - $stateUser = $stateUsers->first(); - //var_dump($stateUser); - //var_dump($stateUser->toArray()); - $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $creationTransactions = $creationsTable - ->find('all') - ->select(['id']) - ->where(['state_user_id' => $stateUser->id]); - - $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $transferTransactions = $transferTable - ->find('all') - ->where(['OR' => ['state_user_id' => $stateUser->id, 'receiver_user_id' => $stateUser->id]]) - ->select(['state_user_id', 'receiver_user_id']); - $counts = ['creation' => $creationTransactions->count(), 'receive' => 0, 'sended' => 0]; - foreach($transferTransactions as $transfer) { - //var_dump($transfer); - if($transfer->state_user_id == $stateUser->id) { - $counts['sended']++; - } - if($transfer->receiver_user_id == $stateUser->id) { - $counts['receive']++; - } - } - return $this->returnJson(['state' => 'success', 'counts' => $counts]); - - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - - } - - public function ajaxGetCSFRToken($session_id) - { - if(!isset($session_id) || $session_id == 0) { - $this->returnJson(['state' => 'error', 'msg' => 'no session id']); - } - - $client_ip = $this->request->clientIp(); - - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $http = new Client(); - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - if($json['clientIP'] == $client_ip) { - return $this->returnJson(['state' => 'success', 'csfr' => $this->request->getParam('_csrfToken')]); - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'client ip mismatch', - 'details' => ['login_server' => $json['clientIP'], 'caller' => $client_ip]]); - } - } else { - return $this->returnJson($json); - } - } else { - return $this->returnJson(['state' => 'error', 'invalid response form logins server']); - } - - } - /* - - getField(vnode, 'receive'), - - getField(vnode, 'sended'), - - getField(vnode, 'creation'), - */ - - /** - * View method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateUser = $this->StateUsers->get($id, [ - 'contain' => [ - 'StateBalances', - 'TransactionCreations' => ['Transactions'], - 'TransactionSendCoins' => ['Transactions', 'ReceiverUsers'], - 'TransactionReceivedCoins' => ['Transactions', 'StateUsers']] - ]); - - $this->set('stateUser', $stateUser); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateUser = $this->StateUsers->newEntity(); - if ($this->request->is('post')) { - $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData()); - if ($this->StateUsers->save($stateUser)) { - $this->Flash->success(__('The state user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user could not be saved. Please, try again.')); - } - $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]); - $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('stateUser', 'indices', 'stateGroups')); - } - - /** - * Edit method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateUser = $this->StateUsers->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData()); - if ($this->StateUsers->save($stateUser)) { - $this->Flash->success(__('The state user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user could not be saved. Please, try again.')); - } - $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]); - $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('stateUser', 'indices', 'stateGroups')); - } - - /** - * Delete method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateUser = $this->StateUsers->get($id); - if ($this->StateUsers->delete($stateUser)) { - $this->Flash->success(__('The state user has been deleted.')); - } else { - $this->Flash->error(__('The state user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionCreationsController.php b/community_server/src/Controller/TransactionCreationsController.php deleted file mode 100644 index d02320d25..000000000 --- a/community_server/src/Controller/TransactionCreationsController.php +++ /dev/null @@ -1,681 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - //$this->Auth->allow(['add', 'edit']); - //$this->Auth->allow('create'); - $this->Auth->allow('ajaxCreate'); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Gradido schöpfen'), 'TransactionCreations', 'create-multi', true)) - ); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['Transactions', 'StateUsers'] - ]; - $transactionCreations = $this->paginate($this->TransactionCreations); - $identHashes = []; - /*foreach ($transactionCreations as $creation) { - $identHash = TransactionCreation::DRMakeStringHash($creation->state_user->email); - $identHashes[$creation->state_user->id] = $identHash; - }*/ - - //$this->set(compact('transactionCreations', 'identHashes')); - } - - /** - * View method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionCreation = $this->TransactionCreations->get($id, [ - 'contain' => ['Transactions', 'StateUsers'] - ]); - - $this->set('transactionCreation', $transactionCreation); - } - - public function create() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if (!$user) { - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - $creationForm = new CreationForm(); - $transactionCreation = $this->TransactionCreations->newEntity(); - $transactionCreation->state_user_id = $user['id']; - - // adding possible addresses + input field for copy - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUsers = $stateUserTable->find('all')->contain(false); - $receiverProposal = []; - foreach ($stateUsers as $stateUser) { - $name = $stateUser->email; - $keyHex = bin2hex(stream_get_contents($stateUser->public_key)); - if ($name === null) { - $name = $stateUser->first_name . ' ' . $stateUser->last_name; - } - array_push($receiverProposal, ['name' => $name, 'key' => $keyHex, 'email' => $stateUser->email]); - //$stateUser->public_key - } - $timeUsed = microtime(true) - $startTime; - $this->set(compact('transactionCreation', 'timeUsed', 'receiverProposal', 'creationForm')); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - $mode = 'next'; - if (isset($requestData['add'])) { - $mode = 'add'; - } - if ($creationForm->validate($requestData)) { - $pubKeyHex = ''; - $identHash = ''; - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - $receiverIndex = intval($requestData['receiver'])-1; - - if (count($receiverProposal) > $receiverIndex) { - $pubKeyHex = $receiverProposal[$receiverIndex]['key']; - //$identHash = TransactionCreation::DRMakeStringHash($receiverProposal[$receiverIndex]['email']); - } - $builderResult = TransactionCreation::build( - $amountCent, - $requestData['memo'], - $pubKeyHex - ); - if ($builderResult['state'] == 'success') { - $user_balance = 0; - if (isset($user['balance'])) { - $user_balance = $user['balance']; - } - // $session_id, $base64Message, $user_balance = 0 - $requestResult = $this->JsonRequestClient->sendTransaction( - $session->read('session_id'), - base64_encode($builderResult['transactionBody']->serializeToString()), - $user_balance - ); - if ($requestResult['state'] != 'success') { - $this->addAdminError('TransactionCreations', 'create', $requestResult, $user['id']); - if ($requestResult['type'] == 'request error') { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } else { - $this->Flash->error(__('Error, please wait for the admin to fix it')); - } - } else { - $json = $requestResult['data']; - if ($json['state'] != 'success') { - if ($json['msg'] == 'session not found') { - $session->destroy(); - return $this->redirect($this->loginServerUrl . 'account', 303); - } else { - $this->addAdminError('TransactionCreations', 'create', $json, $user['id']); - $this->Flash->error(__('Login Server Error, please wait for the admin to fix it')); - } - } else { - $pendingTransactionCount = $session->read('Transactions.pending'); - if ($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - if ($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } - } - } else { - $this->Flash->error(__('Building transaction failed')); - } - // */ - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - } - } - - public function createMulti($page = 0) - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - $limit = 200; - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - - $connection = ConnectionManager::get('default'); - $transactionActiveMonth = $connection->execute( - 'SELECT id, received FROM transactions ' - . 'where received >= date_sub(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) ' - . 'AND ' - . 'received < date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) ' - . 'AND ' - . 'transaction_type_id = 1' - )->fetchAll('assoc'); - $transactionActiveMonthSortedById = []; - foreach ($transactionActiveMonth as $t) { - $transactionActiveMonthSortedById[$t['id']] = $t['received']; - } - $firstDayLastMonth = new FrozenDate(); - $firstDayLastMonth = $firstDayLastMonth->day(1)->subMonth(1); - $transactionsLastMonthTargeDate = $this->TransactionCreations - ->find('all') - //->select(['state_user_id', 'target_date', 'amount']) - ->where(['EXTRACT(YEAR_MONTH FROM target_date) LIKE' => $firstDayLastMonth->format('Ym')]) - ->group(['state_user_id']) - ->contain([]); - $transactionsLastMonthTargeDate->select([ - 'state_user_id', - 'sum_amount' => $transactionsLastMonthTargeDate->func()->sum('amount') - ]); - - $transactionsLastMonthTargetDateSortedByStateUserId = []; - foreach ($transactionsLastMonthTargeDate as $transactionCreation) { - $transactionsLastMonthTargetDateSortedByStateUserId[$transactionCreation->state_user_id] = $transactionCreation->sum_amount; - } - - $requestData = $this->request->getData(); - if ($this->request->is('post') && - isset($requestData['searchButton']) && - isset($requestData['searchText']) && - !empty($requestData['searchText']) - ) { - $mode = 'search'; - $page = 0; - $this->log("search for text: ".$requestData['searchText'], 'debug'); - $stateUsers = $stateUserTable - ->find('all') - ->select(['id', 'first_name', 'last_name', 'email']) - ->order(['first_name', 'last_name']) - ->where( - ['AND' => [ - 'disabled' => 0, - 'OR' => [ - 'LOWER(first_name) LIKE' => '%'.strtolower($requestData['searchText']).'%', - 'LOWER(last_name) LIKE' => '%'.strtolower($requestData['searchText']).'%', - 'LOWER(email) LIKE' => '%'.strtolower($requestData['searchText']).'%' - ] - ] - ] - ) - ->contain(['TransactionCreations' => [ - 'fields' => [ - 'TransactionCreations.amount', - 'TransactionCreations.transaction_id', - 'TransactionCreations.state_user_id' - ] - ]]); - $this->log("search query: ".$stateUsers, 'debug'); - } else { - $stateUsers = $stateUserTable - ->find('all') - ->select(['id', 'first_name', 'last_name', 'email']) - //->order(['id']) - ->where(['disabled' => 0]) - ->order(['first_name', 'last_name']) - ->contain(['TransactionCreations' => [ - 'fields' => [ - 'TransactionCreations.amount', - 'TransactionCreations.transaction_id', - 'TransactionCreations.state_user_id' - ] - ]]); - } - - //var_dump($stateUsers->toArray()); - $possibleReceivers = []; - $countUsers = 0; - foreach ($stateUsers as $i => $stateUser) { - $countUsers++; - if ($i < $page * $limit || $i >= ($page + 1) * $limit) { - continue; - } - $sumAmount = 0; - $sumAmount2 = 0; - if (isset($transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id])) { - $sumAmount2 = $transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id]; - } - foreach ($stateUser->transaction_creations as $transactionCreation) { - //var_dump($transactionCreation); - if (isset($transactionActiveMonthSortedById[$transactionCreation->transaction_id])) { - $sumAmount += $transactionCreation->amount; - } - } - - //if($sumAmount < 20000000) { - array_push($possibleReceivers, [ - 'name' => $stateUser->first_name . ' ' . $stateUser->last_name, - 'id' => $stateUser->id, - 'email' => $stateUser->email, - 'amount' => $sumAmount, - 'amount2' => $sumAmount2 - ]); - /*} else { - $this->Flash->error(__('Creation above 2.000 GDD for 2 last two month')); - }*/ - } - // usort($possibleReceivers, function ($a, $b) { - // return (strtolower($a['name']) <=> strtolower($b['name'])); - // }); - // -> replaced by SQL "order by" above - $creationForm = new CreationForm(); - - $timeUsed = microtime(true) - $startTime; - $this->set(compact('timeUsed', 'stateUsers', 'creationForm', 'possibleReceivers')); - - $this->set('firstDayLastMonth', $firstDayLastMonth); - $this->set('activeUser', $user); - $this->set('creationForm', $creationForm); - $this->set('transactionExecutingCount', $session->read('Transactions.executing')); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('countUsers', $countUsers); - $this->set('limit', $limit); - $this->set('page', $page); - - if ($this->request->is('post') && (!isset($mode) || !($mode === 'search'))) { - $this->log("real POST", 'debug'); - $mode = 'next'; - if (isset($requestData['add'])) { - $mode = 'add'; - } - //echo "mode: $mode
    "; - $memo = $requestData['memo']; - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - //$targetDate = $requestData['target_date']; - if (!isset($requestData['user']) || count($requestData['user']) == 0) { - $this->Flash->error(__('No user selected')); - } else { - $users = $requestData['user']; - $pendingTransactionCount = $session->read('Transactions.pending'); - if ($pendingTransactionCount == null) { - $pendingTransactionCount = 0; - } - if (isset($requestData['user_pending'])) { - $pendings = $requestData['user_pending']; - } else { - $pendings = []; - } - $receiverUsers = $stateUserTable->find('all') - ->where(['id IN' => array_keys($users)]) - ->select(['public_key', 'email', 'id']) - ->contain(false); - - foreach ($receiverUsers as $receiverUser) { - $localAmountCent = $amountCent; - //$localTargetDate = $targetDate; - $id = $receiverUser->id; - if ($requestData['user_amount'][$id] != '') { - $localAmountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['user_amount'][$id]); - } - if (isset($requestData['user_target_date']) && isset($requestData['user_target_date'][$id])) { - $localTargetDate = $requestData['user_target_date'][$id]; - } - if (isset($pendings[$id])) { - $pendings[$id] += $localAmountCent; - } else { - $pendings[$id] = $localAmountCent; - } - $pubKeyHex = bin2hex(stream_get_contents($receiverUser->public_key)); - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'email' => $receiverUser->email, - 'ask' => ['user.identHash'] - ]), '/getUserInfos'); - - $identHash = 0; - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $identHash = $requestAnswear['data']['userData']['identHash']; - } else { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } - - //$identHash = TransactionCreation::DRMakeStringHash($receiverUser->email); - $localTargetDateFrozen = FrozenDate::now(); - $localTargetDateFrozen = $localTargetDateFrozen - ->year($localTargetDate['year']) - ->month($localTargetDate['month']) - ->day($localTargetDate['day']); - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'transaction_type' => 'creation', - 'memo' => $memo, - 'amount' => $localAmountCent, - 'target_pubkey' => $pubKeyHex, - 'target_date' => $localTargetDateFrozen, - 'blockchain_type' => $this->blockchainType - ]), '/createTransaction'); - - if('success' != $requestAnswear['state']) { - $this->addAdminError('TransactionCreations', 'createMulti', $requestAnswear, $user['id']); - if ($requestResult['type'] == 'request error') { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } else { - $this->Flash->error(__('Error, please wait for the admin to fix it')); - } - } - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $pendingTransactionCount++; - //echo "pending transaction count: $pendingTransactionCount
    "; - } else { - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if amount is invalid in creation - * {"state": "invalid parameter", "msg":"invalid amount", "details":"GDD amount in GDD cent ]0,10000000]"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - if($answear_data['state'] === 'error') { - if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') { - $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'user not in group') { - $this->Flash->error(__('Fehler, Benutzer gehört zu einer anderen Gruppe!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') { - $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['state'] === 'disabled') { - $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['msg'] === 'invalid amount') { - $this->Flash->error(__('Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else { - $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data)); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } - - } - /*echo "pendings: "; - var_dump($pendings); - echo "
    ";*/ - foreach ($possibleReceivers as $i => $possibleReceiver) { - $id = $possibleReceiver['id']; - if (isset($pendings[$id])) { - $possibleReceivers[$i]['pending'] = $pendings[$id]; - } - } - $this->set('possibleReceivers', $possibleReceivers); - if ($pendingTransactionCount > 0) { - $user_balance = 0; - if (isset($user['balance'])) { - $user_balance = $user['balance']; - } - $session->write('Transactions.pending', $pendingTransactionCount); - - if ($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } - } - } - } - - public function ajaxCreate() - { - if ($this->request->is('post')) { - $startTime = microtime(true); - $jsonData = $this->request->input('json_decode', true); - $session_id = $jsonData['session_id']; - if(!isset($jsonData['session_id']) || intval($jsonData['session_id']) == 0) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'invalid session id']); - } - - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $memo = ''; - if(isset($jsonData['memo'])) { - $memo = $jsonData['memo']; - } - $auto_sign = true; - if(isset($jsonData['auto_sign'])) { - $auto_sign = $jsonData['auto_sign']; - } - if(!isset($jsonData['amount']) || intval($jsonData['amount']) <= 0) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount not set or <= 0']); - } - if(!isset($jsonData['email'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'no receiver email set']); - } - $amount = intval($jsonData['amount']); - if($amount > 10000000) { - return $this->returnJson(['state' => 'error', 'msg' => 'amount is to big']); - } - if($amount <= 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'amount must be > 0']); - } - if(!isset($jsonData['target_date'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'target_date not found']); - } - //$targetDate = $requestData['target_date']; - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $jsonData['email'], - 'ask' => ['user.pubkeyhex', 'user.disabled', 'user.identHash'] - ]), '/getUserInfos'); - $receiverPubKeyHex = ''; - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - // will be allways 64 byte long, even if it is empty - $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex']; - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver email not found on login-server', - 'details' => $requestAnswear, - 'timeUsed' => microtime(true) - $startTime - ]); - } - if($requestAnswear['data']['userData']['disabled']) { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver is currently disabled, he cannot receive creations', - 'timeUsed' => microtime(true) - $startTime - ]); - } - - $builderResult = TransactionCreation::build( - $amount, - $memo, - $receiverPubKeyHex, - new FrozenDate($jsonData['target_date']) - ); - $transaction_base64 = ''; - if ($builderResult['state'] == 'success') { - // todo: maybe use sodium base 64 encoder to make sure it can be readed from login-server - $transaction_base64 = base64_encode($builderResult['transactionBody']->serializeToString()); - } - - $requestResult = $this->JsonRequestClient->sendTransaction( - $session_id, - $transaction_base64, - $user['balance'], - $auto_sign, - $this->blockchainType - ); - if ($requestResult['state'] != 'success') { - $msg = 'error returned from login server'; - if ($requestResult['type'] === 'request error') { - $msg = 'login server couldn\'t reached'; - } - //$this->Flash->error(__('Error, please wait for the admin to fix it')); - return $this->returnJson([ - 'state' => 'request error', - 'msg' => $msg, - 'details' => $requestResult, - 'timeUsed' => microtime(true) - $startTime - ]); - } else { - $json = $requestResult['data']; - if ($json['state'] != 'success') { - if ($json['msg'] == 'session not found') { - $session->destroy(); - return $this->returnJson(['state' => 'error', 'msg' => 'session not found', 'timeUsed' => microtime(true) - $startTime]); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'login server error', 'details' => $json, 'timeUsed' => microtime(true) - $startTime]); - } - } else { - return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]); - } - } - } - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - - $transactionCreation = $this->TransactionCreations->newEntity(); - if ($this->request->is('post')) { - $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData()); - if ($this->TransactionCreations->save($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction creation could not be saved. Please, try again.')); - } - $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionCreation', 'transactions', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionCreation = $this->TransactionCreations->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData()); - if ($this->TransactionCreations->save($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction creation could not be saved. Please, try again.')); - } - $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionCreation', 'transactions', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionCreation = $this->TransactionCreations->get($id); - if ($this->TransactionCreations->delete($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been deleted.')); - } else { - $this->Flash->error(__('The transaction creation could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupAddaddressController.php b/community_server/src/Controller/TransactionGroupAddaddressController.php deleted file mode 100644 index fc23c111b..000000000 --- a/community_server/src/Controller/TransactionGroupAddaddressController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'AddressTypes'] - ]; - $transactionGroupAddaddress = $this->paginate($this->TransactionGroupAddaddress); - - $this->set(compact('transactionGroupAddaddress')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [ - 'contain' => ['Transactions', 'AddressTypes'] - ]); - - $this->set('transactionGroupAddaddres', $transactionGroupAddaddres); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->newEntity(); - if ($this->request->is('post')) { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData()); - if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]); - $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData()); - if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]); - $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id); - if ($this->TransactionGroupAddaddress->delete($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been deleted.')); - } else { - $this->Flash->error(__('The transaction group addaddres could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupAllowtradesController.php b/community_server/src/Controller/TransactionGroupAllowtradesController.php deleted file mode 100644 index 0b83332c6..000000000 --- a/community_server/src/Controller/TransactionGroupAllowtradesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'Groups'] - ]; - $transactionGroupAllowtrades = $this->paginate($this->TransactionGroupAllowtrades); - - $this->set(compact('transactionGroupAllowtrades')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [ - 'contain' => ['Transactions', 'Groups'] - ]); - - $this->set('transactionGroupAllowtrade', $transactionGroupAllowtrade); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->newEntity(); - if ($this->request->is('post')) { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData()); - if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]); - $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData()); - if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]); - $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id); - if ($this->TransactionGroupAllowtrades->delete($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been deleted.')); - } else { - $this->Flash->error(__('The transaction group allowtrade could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupCreatesController.php b/community_server/src/Controller/TransactionGroupCreatesController.php deleted file mode 100644 index 57e5c7d8f..000000000 --- a/community_server/src/Controller/TransactionGroupCreatesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'StateGroups'] - ]; - $transactionGroupCreates = $this->paginate($this->TransactionGroupCreates); - - $this->set(compact('transactionGroupCreates')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [ - 'contain' => ['Transactions', 'StateGroups'] - ]); - - $this->set('transactionGroupCreate', $transactionGroupCreate); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupCreate = $this->TransactionGroupCreates->newEntity(); - if ($this->request->is('post')) { - $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData()); - if ($this->TransactionGroupCreates->save($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group create could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]); - $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData()); - if ($this->TransactionGroupCreates->save($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group create could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]); - $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupCreate = $this->TransactionGroupCreates->get($id); - if ($this->TransactionGroupCreates->delete($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been deleted.')); - } else { - $this->Flash->error(__('The transaction group create could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionSendCoinsController.php b/community_server/src/Controller/TransactionSendCoinsController.php deleted file mode 100644 index bffc88290..000000000 --- a/community_server/src/Controller/TransactionSendCoinsController.php +++ /dev/null @@ -1,469 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow('create'); - $this->Auth->allow('createRaw'); - $this->Auth->allow('ajaxCreate'); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Überweisung'), 'TransactionSendCoins', 'create', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers'] - ]; - $transactionSendCoins = $this->paginate($this->TransactionSendCoins); - $simple = $this->TransactionSendCoins->find('all'); - - $this->set(compact('transactionSendCoins', 'simple')); - } - - /** - * View method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionSendCoin = $this->TransactionSendCoins->get($id, [ - 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers'] - ]); - - $this->set('transactionSendCoin', $transactionSendCoin); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionSendCoin = $this->TransactionSendCoins->newEntity(); - if ($this->request->is('post')) { - $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData()); - if ($this->TransactionSendCoins->save($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]); - $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionSendCoin = $this->TransactionSendCoins->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData()); - if ($this->TransactionSendCoins->save($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]); - $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers')); - } - - public function create() - { - /*$locale = I18n::getLocale(); - $defaultLocale = I18n::getDefaultLocale(); - echo "locale: $locale, default locale: $defaultLocale
    "; - * */ - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); -// var_dump($user); - if(!$user) { - //return $this->redirect(Router::url('/', true) . 'account/', 303); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - - $known_groups = $this->JsonRequestClient->sendRequest(json_encode([ - 'ask' => ['groups'] - ]), '/networkInfos'); - - - $transferForm = new TransferForm(); - $this->set('transferForm', $transferForm); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('groups', $known_groups['data']['data']['groups']); - $this->set('user', $user); - - if ($this->request->is('post')) { - //$this->Flash->error(__('Wird zurzeit noch entwickelt!')); - - $requestData = $this->request->getData(); - $mode = 'next'; - if(isset($requestData['add'])) {$mode = 'add'; } - if($transferForm->validate($requestData)) { - - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - - if(!isset($user['balance']) || $amountCent > $user['balance']) { - $this->Flash->error(__('Du hast nicht genug Gradidos!')); - return; - } - - $receiverEmail = $requestData['email']; - if($receiverEmail === $user['email']) { - $this->Flash->error(__('Du kannst dir selbst keine Gradidos senden!')); - return; - } - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'transaction_type' => 'transfer', - 'memo' => $requestData['memo'], - 'amount' => $amountCent, - 'target_group' => $known_groups['data']['data']['groups'][$requestData['group']], - 'target_email' => $receiverEmail, - 'blockchain_type' => $this->blockchainType - ]), '/createTransaction'); - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - if($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - if($answear_data['state'] === 'error') { - if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') { - $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'user not in group') { - $this->Flash->error(__('Empfänger befindet sich nicht in Zielgruppe!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'memo is not set or not in expected range [5;150]') { - $this->Flash->error(__('Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') { - $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['state'] === 'disabled') { - $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else { - $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data)); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - - } - } - } - - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function ajaxCreate() - { - if ($this->request->is('post')) { - $startTime = microtime(true); - $jsonData = $this->request->input('json_decode', true); - $session_id = $jsonData['session_id']; - if(!$session_id) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session id']); - } - - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $receiverPubKeyHex = ''; - $senderPubKeyHex = $user['public_hex']; - - if(!isset($jsonData['amount']) || !isset($jsonData['email'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount and/or email not set']); - } - $amount = intval($jsonData['amount']); - if($amount < 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'amout must be > 0 and int']); - } - - if(!isset($user['balance']) || $jsonData['amount'] > $user['balance']) { - return $this->returnJson(['state' => 'error', 'msg' => 'not enough GDD']); - } - $memo = ''; - if(isset($jsonData['memo'])) { - $memo = $jsonData['memo']; - } - - $receiverEmail = $jsonData['email']; - if($receiverEmail === $user['email']) { - return $this->returnJson(['state' => 'error', 'msg' => 'sender and receiver email are the same']); - } - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $receiverEmail, - 'ask' => ['user.pubkeyhex', 'user.disabled'] - ]), '/getUserInfos'); - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - // will be allways 64 byte long, even if it is empty - $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex']; - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver email not found on login-server', - 'details' => $requestAnswear, - 'timeUsed' => microtime(true) - $startTime - ]); - } - if($requestAnswear['data']['userData']['disabled']) { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver is currently disabled, he cannot receive payments', - 'timeUsed' => microtime(true) - $startTime - ]); - } - - - //var_dump($sessionStateUser); - - $builderResult = TransactionTransfer::build( - $amount, - $memo, - $receiverPubKeyHex, - $senderPubKeyHex - ); - $auto_sign = true; - if(isset($jsonData['auto_sign'])) { - $auto_sign = $jsonData['auto_sign']; - } - if($builderResult['state'] === 'success') { - - $http = new Client(); - try { - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->post($url . '/checkTransaction', json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), - 'auto_sign' => $auto_sign, - 'balance' => $user['balance'] - ]), ['type' => 'json']); - $json = $response->getJson(); - if($json['state'] != 'success') { - if($json['msg'] == 'session not found') { - $session->destroy(); - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'session not found', - 'details' => $session_id, - 'timeUsed' => microtime(true) - $startTime - ]); - //$this->Flash->error(__('session not found, please login again')); - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'login server return error', - 'details' => $json, - 'timeUsed' => microtime(true) - $startTime - ]); - } - } else { - return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]); - } - - } catch(\Exception $e) { - $msg = $e->getMessage(); - //$this->Flash->error(__('error http request: ') . $msg); - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'error http request', - 'details' => $msg, - 'timeUsed' => microtime(true) - $startTime - ]); - } - - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'no valid receiver public key given', - 'details' => $receiverPubKeyHex, - 'timeUsed' => microtime(true) - $startTime - ]); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function createRaw() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - - $transferRawForm = new TransferRawForm(); - $this->set('transferRawForm', $transferRawForm); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - if($transferRawForm->validate($requestData)) { - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - $sender = ['priv' => $requestData['sender_privkey_hex'], 'pub' => $requestData['sender_pubkey_hex']]; - $reciver = ['pub' => $requestData['receiver_pubkey_hex']]; - - $builderResult = TransactionTransfer::build( - $amountCent, - $requestData['memo'], - $reciver['pub'], - $sender['pub'] - ); - if($builderResult['state'] === 'success') { - $protoTransaction = Transaction::build($builderResult['transactionBody'], $sender); - $transaction = new Transaction($protoTransaction); - if(!$transaction->validate()) { - $this->Flash->error(__('Error validating transaction')); - } else { - if(!$transaction->save()) { - $this->Flash->error(__('Error saving transaction')); - } else { - $this->Flash->success(__('Gradidos erfolgreich überwiesen!')); - } - } - } else { - $this->Flash->error(__('Error building transaction')); - } - - } - //var_dump($requestData); - // - //var_dump($data); - - } - - $this->set('timeUsed', microtime(true) - $startTime); - } - - /** - * Delete method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionSendCoin = $this->TransactionSendCoins->get($id); - if ($this->TransactionSendCoins->delete($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been deleted.')); - } else { - $this->Flash->error(__('The transaction send coin could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionSignaturesController.php b/community_server/src/Controller/TransactionSignaturesController.php deleted file mode 100644 index 91aea9558..000000000 --- a/community_server/src/Controller/TransactionSignaturesController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['Transactions'] - ]; - $transactionSignatures = $this->paginate($this->TransactionSignatures); - - $this->set(compact('transactionSignatures')); - } - - /** - * View method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionSignature = $this->TransactionSignatures->get($id, [ - 'contain' => ['Transactions'] - ]); - - $this->set('transactionSignature', $transactionSignature); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionSignature = $this->TransactionSignatures->newEntity(); - if ($this->request->is('post')) { - $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData()); - if ($this->TransactionSignatures->save($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction signature could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]); - $this->set(compact('transactionSignature', 'transactions')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionSignature = $this->TransactionSignatures->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData()); - if ($this->TransactionSignatures->save($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction signature could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]); - $this->set(compact('transactionSignature', 'transactions')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionSignature = $this->TransactionSignatures->get($id); - if ($this->TransactionSignatures->delete($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been deleted.')); - } else { - $this->Flash->error(__('The transaction signature could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionTypesController.php b/community_server/src/Controller/TransactionTypesController.php deleted file mode 100644 index 8256b22eb..000000000 --- a/community_server/src/Controller/TransactionTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->TransactionTypes); - - $this->set(compact('transactionTypes')); - } - - /** - * View method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionType = $this->TransactionTypes->get($id, [ - 'contain' => ['Transactions'] - ]); - - $this->set('transactionType', $transactionType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionType = $this->TransactionTypes->newEntity(); - if ($this->request->is('post')) { - $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData()); - if ($this->TransactionTypes->save($transactionType)) { - $this->Flash->success(__('The transaction type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction type could not be saved. Please, try again.')); - } - $this->set(compact('transactionType')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionType = $this->TransactionTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData()); - if ($this->TransactionTypes->save($transactionType)) { - $this->Flash->success(__('The transaction type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction type could not be saved. Please, try again.')); - } - $this->set(compact('transactionType')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionType = $this->TransactionTypes->get($id); - if ($this->TransactionTypes->delete($transactionType)) { - $this->Flash->success(__('The transaction type has been deleted.')); - } else { - $this->Flash->error(__('The transaction type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionsController.php b/community_server/src/Controller/TransactionsController.php deleted file mode 100644 index 67526dfcc..000000000 --- a/community_server/src/Controller/TransactionsController.php +++ /dev/null @@ -1,450 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRpcRequestClient'); - $this->Auth->allow(['decode', 'manualTransaction']); - - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['TransactionTypes'] - ]; - $transactions = $this->paginate($this->Transactions); - - $this->set(compact('transactions')); - } - - public function synchronizeWithStateUserTransactions() - { - $startTime = microtime(true); - $missing_transaction_ids = []; - $transaction_ids = $this->Transactions - ->find('all') - ->select(['id', 'transaction_type_id']) - ->order(['id']) - ->all() - ; - $state_user_transaction_ids = $this->Transactions->StateUserTransactions - ->find('all') - ->select(['transaction_id']) - ->group(['transaction_id']) - ->order(['transaction_id']) - ->toArray() - ; - $i2 = 0; - $count1 = count($transaction_ids); - $count2 = count($state_user_transaction_ids); - foreach($transaction_ids as $i1 => $tr_id) { - //echo "$i1: "; - if($i2 >= $count2) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id, continue
    "; - continue; - } - $stu_id = $state_user_transaction_ids[$i2]; - if($tr_id->id == $stu_id->transaction_id) { - $i2++; - //echo "after i2++: $i2
    "; - } else if($tr_id->id < $stu_id->transaction_id) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id
    "; - } - } - - if($this->request->is('POST')) { - $tablesForType = [ - 1 => $this->Transactions->TransactionCreations, - 2 => $this->Transactions->TransactionSendCoins, - 3 => $this->Transactions->TransactionGroupCreates, - 4 => $this->Transactions->TransactionGroupAddaddress, - 5 => $this->Transactions->TransactionGroupAddaddress - ]; - $idsForType = []; - foreach($missing_transaction_ids as $i => $transaction) { - if(!isset($idsForType[$transaction->transaction_type_id])) { - $idsForType[$transaction->transaction_type_id] = []; - } - $idsForType[$transaction->transaction_type_id][] = $transaction->id; - if($i > 200) break; - } - $entities = []; - $state_user_ids = []; - foreach($idsForType as $type_id => $transaction_ids) { - $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray(); - $keys = $tablesForType[$type_id]->getSchema()->columns(); - //var_dump($keys); - foreach($specific_transactions as $specific) { - - foreach($keys as $key) { - if(preg_match('/_user_id/', $key)) { - $entity = $this->Transactions->StateUserTransactions->newEntity(); - $entity->transaction_id = $specific['transaction_id']; - $entity->transaction_type_id = $type_id; - $entity->state_user_id = $specific[$key]; - if(!in_array($entity->state_user_id, $state_user_ids)) { - array_push($state_user_ids, $entity->state_user_id); - } - $entities[] = $entity; - } - } - } - } - //var_dump($entities); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all(); - $existing_state_user_ids = []; - $finalEntities = []; - foreach($existingStateUsers as $stateUser) { - $existing_state_user_ids[] = $stateUser->id; - } - foreach($entities as $entity) { - if(in_array($entity->state_user_id, $existing_state_user_ids)) { - array_push($finalEntities, $entity); - } - } - - - $results = $this->Transactions->StateUserTransactions->saveMany($finalEntities); - foreach($entities as $i => $entity) { - $errors = $entity->getErrors(); - /* if(count($errors)) { - echo "$i: "; - echo json_encode($errors); - echo "
    "; - echo "state_user_id: " . $entity->state_user_id; - echo "
    "; - }*/ - } - $this->set('results', $results); - $this->set('entities', $entities); - } - - $this->set('missing_transactions', $missing_transaction_ids); - $this->set('count1', $count1); - $this->set('count2', $count2); - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - /** - * View method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transaction = $this->Transactions->get($id, [ - 'contain' => ['TransactionTypes', 'TransactionCreations', 'TransactionGroupAddaddress', 'TransactionGroupAllowtrades', 'TransactionGroupCreates', 'TransactionSendCoins', 'TransactionSignatures'] - ]); - - $this->set('transaction', $transaction); - } - - public function manualTransaction() - { - if ($this->request->is('post')) { - $data = $this->request->getData(); - $type = $data['type']; - - $transaction = new \Proto\Gradido\GradidoTransaction(); - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($data['memo']); - $created = new \Proto\Gradido\TimestampSeconds(); - $now = new Time(); - $created->setSeconds($now->getTimestamp()); - $transactionBody->setCreated($created); - if($type == "creation") { - $creation = new \Proto\Gradido\GradidoCreation(); - $target_date = new \Proto\Gradido\TimestampSeconds(); - $target_time = new Time($data['target_date']); - $target_date->setSeconds($target_time->getTimestamp()); - $creation->setTargetDate($target_date); - $receiver = new \Proto\Gradido\TransferAmount(); - $receiver->setAmount(intval($data['amount'])); - $receiver->setPubkey(hex2bin($data['target_public_key'])); - $creation->setReceiver($receiver); - $transactionBody->setCreation($creation); - } else if($type == "transfer") { - $transfer = new \Proto\Gradido\GradidoTransfer(); - $local_transfer = new \Proto\Gradido\LocalTransfer(); - $sender = new \Proto\Gradido\TransferAmount(); - $sender->setAmount(intval($data['amount'])); - $sender->setPubkey(hex2bin($data['sender_public_key'])); - $local_transfer->setSender($sender); - $local_transfer->setReceiver(hex2bin($data['receiver_public_key'])); - $transfer->setLocal($local_transfer); - $transactionBody->setTransfer($transfer); - } - $body_bytes = $transactionBody->serializeToString(); - $transaction->setBodyBytes($body_bytes); - - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - - // sign with keys - //foreach($keys as $key) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(hex2bin($data['signer_public_key'])); - - $signature = sodium_crypto_sign_detached($body_bytes, hex2bin($data['signer_private_key'])); - echo "signature: " . bin2hex($signature). "
    "; - $sigPair->setEd25519($signature); - - $sigPairs[] = $sigPair; - // SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING - // SODIUM_BASE64_VARIANT_ORIGINAL - $transaction->setSigMap($protoSigMap); - //var_dump($protoSigMap); - $transaction_bin = $transaction->serializeToString(); -// $url_safe = sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL); - $base64 = [ - //'original' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL), - //'original_nopadding' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL_NO_PADDING), - //'urlsafe' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_URLSAFE), - 'urlsafe_nopadding' => sodium_bin2base64($transaction_bin, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING), - 'php' => base64_encode($transaction_bin) - - ]; - - $this->set('base64', $base64); - } - } - - public function decode() - { - $this->viewBuilder()->setLayout('frontend'); - if ($this->request->is('post')) { - $base64 = $this->request->getData('base64'); - if(!$base64 || $base64 == '') { - $this->Flash->error(__('No valid data given, please try again.')); - } else { - try { - $transactionBin = sodium_base642bin($base64, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING); - } catch(Exception $ex) { - var_dump($ex); - } - $transaction = new TransactionBody($transactionBin); - if($transaction->hasErrors()) { - $this->set('errors', $transaction->getErrors()); - } else { - //$transaction->validate(); - if($transaction->hasErrors()) { - $this->set('errors', $transaction->getErrors()); - } - //var_dump($transaction); - echo "
    bin:
    "; - var_dump($transactionBin); - echo "
    "; - $this->set('transaction', $transaction); - } - - } - } - - } - - public function sendToNode() { - $this->viewBuilder()->setLayout('frontend'); - $startTime = microtime(true); - - //$loginServer = Configure::read('LoginServer'); - - $jsonRpcResult = $this->JsonRpcRequestClient->request('getlasttransaction', []); - $result = $jsonRpcResult['result']; - //var_dump($result); - if($result['state'] != 'success') { - $this->Flash->error(__('error retriving last saved transaction from gradido node.')); - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - return; - } - - $firstId = 1; - if($result['transaction'] != '') { - $lastKnowTransaction = new Transaction($result['transaction']); - $firstId = $lastKnowTransaction->getId()+1; - } - - $transactionIDEntities = $this->Transactions - ->find('all') - ->select(['id']) - ->where(['id >=' => $firstId]) - ; - $transactionIDs = []; - foreach($transactionIDEntities as $entity) { - array_push($transactionIDs, $entity->id); - } - - $csfr_token = $this->request->getParam('_csrfToken'); - $this->set('csfr_token', $csfr_token); - $this->set('transactionIds', $transactionIDs); - - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - - if ($this->request->is('post')) { - $host = $this->request->getData('host'); - $port = $this->request->getData('port'); - //$gradidod = new JsonRpcClient($host . ':' . $port); - - - //var_dump($transactionIDs); - - //$result = $this->JsonRpcRequestClient->request('puttransaction', ['group' => 'Hallo', 'transaction' => 'Hallo2' ]); - - //$result = $gradidod->putTransaction(['group' => 'Hallo', 'transaction' => 'Hallo2' ]); - //var_dump($result); - - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - } - - public function ajaxPutTransactionToGradidoNode() - { - $startTime = microtime(true); - if($this->request->is('post')) { - //$jsonData = $this->request->input('json_decode', true); - $data = $this->request->getData(); - //$user = $jsonData['user']; - //var_dump($data); - $transactionId = $data['transaction_id']; - if($transactionId == null || $transactionId < 1) { - $timeUsed = microtime(true) - $startTime; - return $this->returnJson(['state' => 'error', 'msg' => 'invalid transaction id', 'timeUsed' => $timeUsed]); - } - try { - $transaction = Transaction::fromTable($transactionId); - } catch(Exception $e) { - echo "exception: "; - var_dump($e); - } - if(is_array($transaction)) { - $timeUsed = microtime(true) - $startTime; - $transaction['timeUsed'] = $timeUsed; - return $this->returnJson($transaction); - } else { - $transactionBase64 = base64_encode($transaction->serializeToString()); - //echo "base64:
    $transactionBase64
    "; - - $result = $this->JsonRpcRequestClient->request('puttransaction', [ - 'group' => 'd502c4254defe1842d71c484dc35f56983ce938e3c22058795c7520b62ab9123', - 'transaction' => $transactionBase64 - ]); - - $timeUsed = microtime(true) - $startTime; - $result['timeUsed'] = $timeUsed; - return $this->returnJson($result); - } - //return $this->returnJson(['state' => 'success', 'timeUsed' => $timeUsed]); - } - $timeUsed = microtime(true) - $startTime; - return $this->returnJson(['state' => 'error', 'msg' => 'no post request', 'timeUsed' => $timeUsed]); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transaction = $this->Transactions->newEntity(); - if ($this->request->is('post')) { - $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData()); - if ($this->Transactions->save($transaction)) { - $result = $this->Transactions->updateTxHash($transaction, 'start decay'); - if($result === true) { - $this->Flash->success(__('The transaction has been saved.')); - return $this->redirect(['action' => 'index']); - } else { - $this->Flash->error(__('Error by saving: ' . json_encode($result))); - } - } - $this->Flash->error(__('The transaction could not be saved. Please, try again.')); - } - $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]); - $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]); - $blockchainTypes = $this->Transactions->BlockchainTypes->find('list'); - $this->set(compact('transaction', 'stateGroups', 'transactionTypes', 'blockchainTypes')); - } - - /** - * Edit method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transaction = $this->Transactions->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData()); - if ($this->Transactions->save($transaction)) { - $this->Flash->success(__('The transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction could not be saved. Please, try again.')); - } - $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]); - $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('transaction', 'stateGroups', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transaction = $this->Transactions->get($id); - if ($this->Transactions->delete($transaction)) { - $this->Flash->success(__('The transaction has been deleted.')); - } else { - $this->Flash->error(__('The transaction could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/UsersController.php b/community_server/src/Controller/UsersController.php deleted file mode 100644 index f6b0472d3..000000000 --- a/community_server/src/Controller/UsersController.php +++ /dev/null @@ -1,167 +0,0 @@ -set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzerstatistiken'), 'Users', 'statistics', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $users = $this->paginate($this->Users); - - $this->set(compact('users')); - } - - public function statistics() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $users = $this->Users->find('all')->select(['id']); - - //$newUsersThisMonth - $now = new Time(); - $sortDate = $this->getStartEndForMonth($now->month, $now->year); - $newUsersThisMonth = $this->Users->find('all') - ->select(['id']) - ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]); - $lastMonth = new Time(); - $lastMonth = $lastMonth->subMonth(1); - $prevSortDate = $this->getStartEndForMonth($lastMonth->month, $lastMonth->year); - $newUsersLastMonth = $this->Users->find('all') - ->select(['id']) - ->where(['created >=' => $prevSortDate[0], 'created <' => $prevSortDate[1]]); - - // new user sorted after date - $connection = ConnectionManager::get('loginServer'); - $newAccountsPerDay = $connection->execute('SELECT count(id) as count, created FROM users GROUP BY CAST(created as DATE) ORDER BY created DESC ')->fetchAll('assoc'); - - $newAccountsTree = []; - foreach($newAccountsPerDay as $entry) { - $created = new Time($entry['created']); - if(!isset($newAccountsTree[$created->year])) { - $newAccountsTree[$created->year] = []; - } - if(!isset($newAccountsTree[$created->year][$created->month])) { - $newAccountsTree[$created->year][$created->month] = ['count' => 0, 'days' => []]; - } - array_push($newAccountsTree[$created->year][$created->month]['days'], $entry); - $newAccountsTree[$created->year][$created->month]['count'] += intval($entry['count']); - } - - // last 5 new users - $lastUsers = $this->Users->find('all')->order(['created DESC'])->limit(5); - - $timeUsed = microtime(true) - $startTime; - - $this->set(compact( - 'users', 'newUsersThisMonth', 'newUsersLastMonth', - 'timeUsed', 'newAccountsTree', 'lastUsers')); - } - - /** - * View method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $user = $this->Users->get($id, [ - 'contain' => ['EmailOptIn', 'UserBackups', 'UserRoles'], - ]); - - $this->set('user', $user); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $user = $this->Users->newEntity(); - if ($this->request->is('post')) { - $user = $this->Users->patchEntity($user, $this->request->getData()); - if ($this->Users->save($user)) { - $this->Flash->success(__('The user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The user could not be saved. Please, try again.')); - } - $this->set(compact('user')); - } - - /** - * Edit method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $user = $this->Users->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $user = $this->Users->patchEntity($user, $this->request->getData()); - if ($this->Users->save($user)) { - $this->Flash->success(__('The user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The user could not be saved. Please, try again.')); - } - $this->set(compact('user')); - } - - /** - * Delete method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $user = $this->Users->get($id); - if ($this->Users->delete($user)) { - $this->Flash->success(__('The user has been deleted.')); - } else { - $this->Flash->error(__('The user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Form/AssignRoleForm.php b/community_server/src/Form/AssignRoleForm.php deleted file mode 100644 index 158fa2296..000000000 --- a/community_server/src/Form/AssignRoleForm.php +++ /dev/null @@ -1,30 +0,0 @@ -addField('role_id', ['type' => 'string']); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\GenericValidation'); - - return $validator; - } - - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/CreationForm.php b/community_server/src/Form/CreationForm.php deleted file mode 100644 index 70b4fce40..000000000 --- a/community_server/src/Form/CreationForm.php +++ /dev/null @@ -1,73 +0,0 @@ -addField('receiver_pubkey_hex', ['type' => 'string']) - ->addField('receiver', ['type' => 'select']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('target_date', ['type' => 'date']) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => 'max 150 character' - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - /*->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/ - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/DecodeTransaction.php b/community_server/src/Form/DecodeTransaction.php deleted file mode 100644 index 3ac00faa6..000000000 --- a/community_server/src/Form/DecodeTransaction.php +++ /dev/null @@ -1,8 +0,0 @@ -addField('first_name', ['type' => 'string']) - ->addField('last_name', ['type' => 'string']) - ->addField('profile_img', ['type' => 'string']) - ->addField('profile_desc', ['type' =>'text', 'default' => '', 'rows' => 10, 'maxlength' => 2000]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('generic', 'App\Model\Validation\GenericValidation'); - $validator->add('first_name', 'length', [ - 'rule' => ['maxLength', 255], - 'message' => __('The first name should contain max 255 characters') - ]) - ->add('last_name', 'length', [ - 'rule' => ['maxLength', 255], - 'message' => __('The last name should contain max 255 characters') - ]) - ->add('profile_desc', 'length', [ - 'rule' => ['maxLength', 2000], - 'message' => __('The description should contain max 2000 characters') - ]) - ->add('profile_desc', 'generic', [ - 'rule' => 'alphaNumeric', - 'provider' => 'generic', - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('profile_img', null, 'create') - ->allowEmptyString('profile_desc', null, 'create') - ; - return $validator; - } - - protected function _execute(array $data) - { - // Send an email. (??? xxx) - return true; - } -} diff --git a/community_server/src/Form/TransferForm.php b/community_server/src/Form/TransferForm.php deleted file mode 100644 index cb135ab9e..000000000 --- a/community_server/src/Form/TransferForm.php +++ /dev/null @@ -1,82 +0,0 @@ -addField('email', ['type' => 'string']) - ->addField('group', ['type' => 'string']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('email', 'format', [ - 'rule' => 'email', - 'message' => __('A valid email address is required') - ]) - ->add('group', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => __('The memo should contain max 150 character') - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - /*->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/ - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid positive number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/TransferRawForm.php b/community_server/src/Form/TransferRawForm.php deleted file mode 100644 index 50c548ec5..000000000 --- a/community_server/src/Form/TransferRawForm.php +++ /dev/null @@ -1,73 +0,0 @@ -addField('sender_privkey_hex', ['type' => 'string']) - ->addField('sender_pubkey_hex', ['type' => 'string']) - ->addField('receiver_pubkey_hex', ['type' => 'string']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - - $validator - ->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => __('The memo should contain max 150 character') - ]) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - ->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->add('sender_privkey_hex', 'custom', [ - 'rule' => 'hexKey128', - 'provider' => 'custom', - 'message' => 'a valid privkey in hex format is required (128 character)' - ]) - ->add('sender_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid positive number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/UserSearchForm.php b/community_server/src/Form/UserSearchForm.php deleted file mode 100644 index c68269920..000000000 --- a/community_server/src/Form/UserSearchForm.php +++ /dev/null @@ -1,58 +0,0 @@ -addField('search', ['type' => 'string']) - ->addField('account_state', ['type' => 'select']); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\GenericValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('search', 'length', [ - 'rule' => ['maxLength', 50], - 'message' => __('The search text should contain max 50 character') - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('search', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like < or > please.') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Locale/cake.pot b/community_server/src/Locale/cake.pot deleted file mode 100644 index 7d317194e..000000000 --- a/community_server/src/Locale/cake.pot +++ /dev/null @@ -1,29 +0,0 @@ -# LANGUAGE translation of CakePHP Application -# Copyright YEAR NAME -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2019-11-12 14:40+0000\n" -"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" -"Last-Translator: NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: Template/Error/error400.ctp:36 -#: Template/Error/error500.ctp:41 -msgid "Error" -msgstr "" - -#: Template/Error/error400.ctp:37 -msgid "The requested address {0} was not found on this server." -msgstr "" - -#: Template/Error/error500.ctp:39 -msgid "An Internal Error Has Occurred" -msgstr "" - diff --git a/community_server/src/Locale/de_DE/default.mo b/community_server/src/Locale/de_DE/default.mo deleted file mode 100644 index c739334c8a502ea34a4788a856e998492fd3a9eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmZ{i-D(p-6vtOvzXDZI1kr*=1W{yaKD?+~BZg*MqG=nFv=nb-+&xXE-JJ=ulVI=q z5PIh$_z2$l0zQH0J9sPjpQLUm=)j-foH=LCIkRWKUtjzfU|oThp#)ljK0|)}fbKv) zp=;1@=mE5JE(q>|PeJeRgWf*^Z-6J@CGZ1SgFZp`VShUx1Xsad;4N@rAqWUu27UcH z=<~b*Z-R&5ZSVv{ifNx0K$yi^#Lm~c3?XfB5h|99V>8x{Vlz^lkTck2*;p%g927pw z(s5GQ**JA-lrlM$aZW~4Y6eP+ob7~d5vGmvz9Jv}+kfURXHumkW2Yw5k~7<9nxAPy zM|_+I9cvCbcA}MtJ+`?rI;2i_=T)@cr@g4#Ywc{8Iy<7v6Xl(viHspt%hie~uZl{A zDz&io>~XnTE|=OeccO2l&Qs}(4GAZDFqQ)reU@2B?Z)=zZeuf|=h0T9)qdG%HoH-; z_o9dkDdD%xsI=AEist=PR?4MyqaACcKOUjJ -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2021-08-11 11:38+0000\n" -"PO-Revision-Date: 2021-08-11 13:39+0200\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: de_DE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" - -#: Controller/AddressTypesController.php:54 -#: Controller/AddressTypesController.php:78 -msgid "The address type has been saved." -msgstr "" - -#: Controller/AddressTypesController.php:58 -#: Controller/AddressTypesController.php:82 -msgid "The address type could not be saved. Please, try again." -msgstr "" - -#: Controller/AddressTypesController.php:99 -msgid "The address type has been deleted." -msgstr "" - -#: Controller/AddressTypesController.php:101 -msgid "The address type could not be deleted. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:57 -#: Controller/AdminErrorsController.php:82 -msgid "The admin error has been saved." -msgstr "" - -#: Controller/AdminErrorsController.php:61 -#: Controller/AdminErrorsController.php:86 -msgid "The admin error could not be saved. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:104 -msgid "The admin error has been deleted." -msgstr "" - -#: Controller/AdminErrorsController.php:106 -msgid "The admin error could not be deleted. Please, try again." -msgstr "" - -#: Controller/AppController.php:262 -msgid "error updating state user " -msgstr "" - -#: Controller/AppController.php:276 -msgid "error saving state user " -msgstr "" - -#: Controller/AppController.php:286 -msgid "no pubkey" -msgstr "" - -#: Controller/AppController.php:295 -msgid "invalid session" -msgstr "" - -#: Controller/AppController.php:297 -msgid "Konto ist nicht aktiviert!" -msgstr "" - -#: Controller/AppController.php:311 Controller/StateUsersController.php:103 -msgid "error http request: " -msgstr "" - -#: Controller/AppController.php:358 -msgid "(Leere Message)" -msgstr "" - -#: Controller/AppController.php:363 -msgid "(Leere Details)" -msgstr "" - -#: Controller/AppController.php:367 -msgid "Serious error, couldn't save to db, please write the admin: " -msgstr "" - -#: Controller/BlockchainTypesController.php:54 -#: Controller/BlockchainTypesController.php:78 -msgid "The blockchain type has been saved." -msgstr "" - -#: Controller/BlockchainTypesController.php:58 -#: Controller/BlockchainTypesController.php:82 -msgid "The blockchain type could not be saved. Please, try again." -msgstr "" - -#: Controller/BlockchainTypesController.php:99 -msgid "The blockchain type has been deleted." -msgstr "" - -#: Controller/BlockchainTypesController.php:101 -msgid "The blockchain type could not be deleted. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:54 -#: Controller/CommunityProfilesController.php:78 -msgid "The community profile has been saved." -msgstr "" - -#: Controller/CommunityProfilesController.php:58 -#: Controller/CommunityProfilesController.php:82 -msgid "The community profile could not be saved. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:99 -msgid "The community profile has been deleted." -msgstr "" - -#: Controller/CommunityProfilesController.php:101 -msgid "The community profile could not be deleted. Please, try again." -msgstr "" - -#: Controller/DashboardController.php:29 Controller/ProfileController.php:28 -#: Controller/StateBalancesController.php:52 -#: Controller/StateBalancesController.php:202 -#: Controller/StateErrorsController.php:26 -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Controller/TransactionCreationsController.php:42 -#: Controller/TransactionSendCoinsController.php:44 -#: Controller/UsersController.php:26 Template/Element/navi.ctp:33 -msgid "Startseite" -msgstr "" - -#: Controller/ElopageBuysController.php:112 -#: Controller/ElopageBuysController.php:137 -msgid "The elopage buy has been saved." -msgstr "" - -#: Controller/ElopageBuysController.php:116 -#: Controller/ElopageBuysController.php:141 -msgid "The elopage buy could not be saved. Please, try again." -msgstr "" - -#: Controller/ElopageBuysController.php:158 -msgid "The elopage buy has been deleted." -msgstr "" - -#: Controller/ElopageBuysController.php:160 -msgid "The elopage buy could not be deleted. Please, try again." -msgstr "" - -#: Controller/JsonRequestHandlerController.php:366 -msgid "Gradido Transaktion fehlgeschlagen!" -msgstr "" - -#: Controller/OperatorTypesController.php:54 -#: Controller/OperatorTypesController.php:78 -msgid "The operator type has been saved." -msgstr "" - -#: Controller/OperatorTypesController.php:58 -#: Controller/OperatorTypesController.php:82 -msgid "The operator type could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorTypesController.php:99 -msgid "The operator type has been deleted." -msgstr "" - -#: Controller/OperatorTypesController.php:101 -msgid "The operator type could not be deleted. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:182 -#: Controller/OperatorsController.php:207 -msgid "The operator has been saved." -msgstr "" - -#: Controller/OperatorsController.php:186 -#: Controller/OperatorsController.php:211 -msgid "The operator could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:229 -msgid "The operator has been deleted." -msgstr "" - -#: Controller/OperatorsController.php:231 -msgid "The operator could not be deleted. Please, try again." -msgstr "" - -#: Controller/ProfileController.php:29 Template/Element/user_menu.ctp:15 -#: Template/Profile/index.ctp:19 -msgid "Mein Profil" -msgstr "" - -#: Controller/ProfileController.php:108 -msgid "Dein Profil wurde aktualisiert!" -msgstr "" - -#: Controller/ProfileController.php:111 -msgid "" -"Non-recoverable database problem - state_user doesn't exist or not unique!" -msgstr "" - -#: Controller/ProfileController.php:198 -#: Controller/StateUserRolesController.php:117 -#: Controller/StateUsersController.php:291 -#: Controller/TransactionCreationsController.php:183 -msgid "Something was invalid, please try again!" -msgstr "" - -#: Controller/RolesController.php:56 Controller/RolesController.php:80 -msgid "The role has been saved." -msgstr "" - -#: Controller/RolesController.php:60 Controller/RolesController.php:84 -msgid "The role could not be saved. Please, try again." -msgstr "" - -#: Controller/RolesController.php:101 -msgid "The role has been deleted." -msgstr "" - -#: Controller/RolesController.php:103 -msgid "The role could not be deleted. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:42 -msgid "Invalid username or password, try again" -msgstr "" - -#: Controller/ServerUsersController.php:79 -#: Controller/ServerUsersController.php:103 -msgid "The server user has been saved." -msgstr "" - -#: Controller/ServerUsersController.php:83 -#: Controller/ServerUsersController.php:107 -msgid "The server user could not be saved. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:124 -msgid "The server user has been deleted." -msgstr "" - -#: Controller/ServerUsersController.php:126 -msgid "The server user could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:53 Template/Dashboard/index.ctp:30 -#: Template/Element/navi.ctp:22 Template/StateBalances/overview.ctp:8 -msgid "Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:203 -#: Template/StateBalances/overview_gdt.ctp:20 -msgid "GDT Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:252 -msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!" -msgstr "" - -#: Controller/StateBalancesController.php:351 -#: Controller/StateBalancesController.php:376 -msgid "The state balance has been saved." -msgstr "" - -#: Controller/StateBalancesController.php:355 -#: Controller/StateBalancesController.php:380 -msgid "The state balance could not be saved. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:398 -msgid "The state balance has been deleted." -msgstr "" - -#: Controller/StateBalancesController.php:400 -msgid "The state balance could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:57 -#: Controller/StateCreatedController.php:83 -msgid "The state created has been saved." -msgstr "" - -#: Controller/StateCreatedController.php:61 -#: Controller/StateCreatedController.php:87 -msgid "The state created could not be saved. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:106 -msgid "The state created has been deleted." -msgstr "" - -#: Controller/StateCreatedController.php:108 -msgid "The state created could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:27 Template/Dashboard/index.ctp:79 -#: Template/Dashboard/server_index.ctp:31 Template/Element/navi_header.ctp:33 -#: Template/Element/navi_notify.ctp:32 -msgid "Fehler" -msgstr "" - -#: Controller/StateErrorsController.php:75 -msgid "Error belongs to another User, cannot delete" -msgstr "" - -#: Controller/StateErrorsController.php:78 -#: Controller/StateErrorsController.php:166 -msgid "The state error has been deleted." -msgstr "" - -#: Controller/StateErrorsController.php:80 -#: Controller/StateErrorsController.php:168 -msgid "The state error could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:117 -#: Controller/StateErrorsController.php:143 -msgid "The state error has been saved." -msgstr "" - -#: Controller/StateErrorsController.php:121 -#: Controller/StateErrorsController.php:147 -msgid "The state error could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:57 -#: Controller/StateGroupAddressesController.php:83 -msgid "The state group address has been saved." -msgstr "" - -#: Controller/StateGroupAddressesController.php:61 -#: Controller/StateGroupAddressesController.php:87 -msgid "The state group address could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:106 -msgid "The state group address has been deleted." -msgstr "" - -#: Controller/StateGroupAddressesController.php:108 -msgid "The state group address could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:57 -#: Controller/StateGroupRelationshipsController.php:84 -msgid "The state group relationship has been saved." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:61 -#: Controller/StateGroupRelationshipsController.php:88 -msgid "The state group relationship could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:108 -msgid "The state group relationship has been deleted." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:110 -msgid "The state group relationship could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:57 -#: Controller/StateGroupsController.php:82 -msgid "The state group has been saved." -msgstr "" - -#: Controller/StateGroupsController.php:61 -#: Controller/StateGroupsController.php:86 -msgid "The state group could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:104 -msgid "The state group has been deleted." -msgstr "" - -#: Controller/StateGroupsController.php:106 -msgid "The state group could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:54 -#: Controller/StateRelationshipTypesController.php:78 -msgid "The state relationship type has been saved." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:58 -#: Controller/StateRelationshipTypesController.php:82 -msgid "The state relationship type could not be saved. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:99 -msgid "The state relationship type has been deleted." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:101 -msgid "The state relationship type could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 Template/StateUserRoles/search.ctp:9 -#: Template/StateUsers/search.ctp:9 -msgid "Benutzer suchen" -msgstr "" - -#: Controller/StateUserRolesController.php:149 -msgid "Role has been assigned to User." -msgstr "" - -#: Controller/StateUserTransactionsController.php:233 -#: Controller/StateUserTransactionsController.php:260 -msgid "The state user transaction has been saved." -msgstr "" - -#: Controller/StateUserTransactionsController.php:237 -#: Controller/StateUserTransactionsController.php:264 -msgid "The state user transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUserTransactionsController.php:284 -msgid "The state user transaction has been deleted." -msgstr "" - -#: Controller/StateUserTransactionsController.php:286 -msgid "The state user transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:21 -msgid "account created" -msgstr "Konto angelegt" - -#: Controller/StateUsersController.php:22 -msgid "account not on login-server" -msgstr "Konto nicht auf Login-Server" - -#: Controller/StateUsersController.php:23 -msgid "email activated" -msgstr "Konto aktiviert" - -#: Controller/StateUsersController.php:24 -msgid "account copied to community" -msgstr "Konto kopiert nach Community-Server" - -#: Controller/StateUsersController.php:25 -msgid "email not activated" -msgstr "Konto nicht aktiviert" - -#: Controller/StateUsersController.php:26 -msgid "account multiple times on login-server" -msgstr "Konto mehrfach vorhanden" - -#: Controller/StateUsersController.php:27 -msgid "account not on community server" -msgstr "Konto nicht auf Community-Server" - -#: Controller/StateUsersController.php:28 -msgid "no keys" -msgstr "Keine Schlüssel generiert" - -#: Controller/StateUsersController.php:560 -#: Controller/StateUsersController.php:586 -msgid "The state user has been saved." -msgstr "" - -#: Controller/StateUsersController.php:564 -#: Controller/StateUsersController.php:590 -msgid "The state user could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:609 -msgid "The state user has been deleted." -msgstr "" - -#: Controller/StateUsersController.php:611 -msgid "The state user could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:42 -msgid "Gradido schöpfen" -msgstr "" - -#: Controller/TransactionCreationsController.php:149 -#: Controller/TransactionCreationsController.php:385 -#: Controller/TransactionCreationsController.php:408 -msgid "Error by requesting LoginServer, please try again" -msgstr "" - -#: Controller/TransactionCreationsController.php:151 -#: Controller/TransactionCreationsController.php:410 -msgid "Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:161 -msgid "Login Server Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:174 -#: Controller/TransactionCreationsController.php:491 -#: Controller/TransactionSendCoinsController.php:204 -msgid "Transaction submitted for review." -msgstr "" - -#: Controller/TransactionCreationsController.php:179 -msgid "Building transaction failed" -msgstr "" - -#: Controller/TransactionCreationsController.php:342 -msgid "No user selected" -msgstr "" - -#: Controller/TransactionCreationsController.php:442 -#: Controller/TransactionSendCoinsController.php:231 -msgid "Fehler mit der Session, bitte logge dich erneut ein!" -msgstr "" - -#: Controller/TransactionCreationsController.php:447 -msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!" -msgstr "" - -#: Controller/TransactionCreationsController.php:452 -#: Controller/TransactionSendCoinsController.php:246 -msgid "" -"Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto " -"schon angelegt?" -msgstr "" - -#: Controller/TransactionCreationsController.php:456 -#: Controller/TransactionSendCoinsController.php:250 -msgid "" -"Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos " -"gesendet werden." -msgstr "" - -#: Controller/TransactionCreationsController.php:460 -msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein." -msgstr "" - -#: Controller/TransactionCreationsController.php:464 -#: Controller/TransactionSendCoinsController.php:254 -msgid "Unbehandelter Fehler: " -msgstr "" - -#: Controller/TransactionCreationsController.php:625 -#: Controller/TransactionCreationsController.php:651 -msgid "The transaction creation has been saved." -msgstr "" - -#: Controller/TransactionCreationsController.php:629 -#: Controller/TransactionCreationsController.php:655 -msgid "The transaction creation could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:674 -msgid "The transaction creation has been deleted." -msgstr "" - -#: Controller/TransactionCreationsController.php:676 -msgid "The transaction creation could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:57 -#: Controller/TransactionGroupAddaddressController.php:83 -msgid "The transaction group addaddres has been saved." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:61 -#: Controller/TransactionGroupAddaddressController.php:87 -msgid "The transaction group addaddres could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:106 -msgid "The transaction group addaddres has been deleted." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:108 -msgid "" -"The transaction group addaddres could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:57 -#: Controller/TransactionGroupAllowtradesController.php:83 -msgid "The transaction group allowtrade has been saved." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:61 -#: Controller/TransactionGroupAllowtradesController.php:87 -msgid "The transaction group allowtrade could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:106 -msgid "The transaction group allowtrade has been deleted." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:108 -msgid "" -"The transaction group allowtrade could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:57 -#: Controller/TransactionGroupCreatesController.php:83 -msgid "The transaction group create has been saved." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:61 -#: Controller/TransactionGroupCreatesController.php:87 -msgid "The transaction group create could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:106 -msgid "The transaction group create has been deleted." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:108 -msgid "The transaction group create could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:45 -#: Template/Dashboard/index.ctp:38 Template/Element/navi.ctp:34 -#: Template/StateUsers/view.ctp:83 Template/StateUsers/view.ctp:117 -#: Template/TransactionSendCoins/create.ctp:9 -#: Template/TransactionSendCoins/create_raw.ctp:9 -msgid "Überweisung" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:92 -#: Controller/TransactionSendCoinsController.php:119 -msgid "The transaction send coin has been saved." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:96 -#: Controller/TransactionSendCoinsController.php:123 -msgid "The transaction send coin could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:173 -msgid "Du hast nicht genug Gradidos!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:179 -msgid "Du kannst dir selbst keine Gradidos senden!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:236 -msgid "Empfänger befindet sich nicht in Zielgruppe!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:241 -msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:428 -msgid "Error validating transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:431 -msgid "Error saving transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:433 -msgid "Gradidos erfolgreich überwiesen!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:437 -msgid "Error building transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:462 -msgid "The transaction send coin has been deleted." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:464 -msgid "The transaction send coin could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:57 -#: Controller/TransactionSignaturesController.php:82 -msgid "The transaction signature has been saved." -msgstr "" - -#: Controller/TransactionSignaturesController.php:61 -#: Controller/TransactionSignaturesController.php:86 -msgid "The transaction signature could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:104 -msgid "The transaction signature has been deleted." -msgstr "" - -#: Controller/TransactionSignaturesController.php:106 -msgid "The transaction signature could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:54 -#: Controller/TransactionTypesController.php:78 -msgid "The transaction type has been saved." -msgstr "" - -#: Controller/TransactionTypesController.php:58 -#: Controller/TransactionTypesController.php:82 -msgid "The transaction type could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:99 -msgid "The transaction type has been deleted." -msgstr "" - -#: Controller/TransactionTypesController.php:101 -msgid "The transaction type could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:252 -msgid "No valid data given, please try again." -msgstr "" - -#: Controller/TransactionsController.php:289 -msgid "error retriving last saved transaction from gradido node." -msgstr "" - -#: Controller/TransactionsController.php:391 -#: Controller/TransactionsController.php:420 -msgid "The transaction has been saved." -msgstr "" - -#: Controller/TransactionsController.php:394 -msgid "Error by saving: " -msgstr "" - -#: Controller/TransactionsController.php:397 -#: Controller/TransactionsController.php:424 -msgid "The transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:443 -msgid "The transaction has been deleted." -msgstr "" - -#: Controller/TransactionsController.php:445 -msgid "The transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/UsersController.php:26 -msgid "Benutzerstatistiken" -msgstr "" - -#: Controller/UsersController.php:115 Controller/UsersController.php:139 -msgid "The user has been saved." -msgstr "" - -#: Controller/UsersController.php:119 Controller/UsersController.php:143 -msgid "The user could not be saved. Please, try again." -msgstr "" - -#: Controller/UsersController.php:160 -msgid "The user has been deleted." -msgstr "" - -#: Controller/UsersController.php:162 -msgid "The user could not be deleted. Please, try again." -msgstr "" - -#: Form/CreationForm.php:44 Form/ProfileForm.php:39 Form/TransferForm.php:42 -#: Form/TransferForm.php:53 Form/TransferRawForm.php:35 -msgid "No HTML Tags like > or < please." -msgstr "" - -#: Form/CreationForm.php:56 -msgid "Please give a valid number with maximal 2 decimal places" -msgstr "" - -#: Form/ProfileForm.php:26 -msgid "The first name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:30 -msgid "The last name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:34 -msgid "The description should contain max 2000 characters" -msgstr "" - -#: Form/TransferForm.php:36 -msgid "A valid email address is required" -msgstr "" - -#: Form/TransferForm.php:46 Form/TransferRawForm.php:29 -msgid "The memo should contain max 150 character" -msgstr "" - -#: Form/TransferForm.php:65 Form/TransferRawForm.php:56 -msgid "Please give a valid positive number with maximal 2 decimal places" -msgstr "" - -#: Form/UserSearchForm.php:34 -msgid "The search text should contain max 50 character" -msgstr "" - -#: Form/UserSearchForm.php:41 -msgid "No HTML Tags like < or > please." -msgstr "" - -#: Model/Table/ServerUsersTable.php:58 -msgid "Please give a username" -msgstr "" - -#: Model/Table/ServerUsersTable.php:64 -msgid "Please give a password" -msgstr "" - -#: Model/Table/ServerUsersTable.php:69 -msgid "Please give a email" -msgstr "" - -#: Model/Transactions/TransactionCreation.php:209 -msgid "Gradido Schöpfung erhalten" -msgstr "" - -#: Model/Transactions/TransactionTransfer.php:210 -msgid "Gradidos erhalten" -msgstr "" - -#: Template/AddressTypes/add.ctp:9 Template/AddressTypes/edit.ctp:9 -#: Template/AddressTypes/index.ctp:9 Template/AddressTypes/index.ctp:25 -#: Template/AddressTypes/view.ctp:9 Template/AddressTypes/view.ctp:45 -#: Template/AddressTypes/view.ctp:73 Template/AdminErrors/add.ctp:9 -#: Template/AdminErrors/edit.ctp:9 Template/AdminErrors/index.ctp:9 -#: Template/AdminErrors/index.ctp:26 Template/AdminErrors/view.ctp:9 -#: Template/BlockchainTypes/add.ctp:9 Template/BlockchainTypes/edit.ctp:9 -#: Template/BlockchainTypes/index.ctp:9 Template/BlockchainTypes/index.ctp:22 -#: Template/BlockchainTypes/view.ctp:9 Template/CommunityProfiles/add.ctp:9 -#: Template/CommunityProfiles/edit.ctp:9 Template/CommunityProfiles/index.ctp:9 -#: Template/CommunityProfiles/index.ctp:21 -#: Template/CommunityProfiles/view.ctp:9 Template/ElopageBuys/add.ctp:9 -#: Template/ElopageBuys/edit.ctp:9 Template/ElopageBuys/index.ctp:9 -#: Template/ElopageBuys/index.ctp:30 Template/ElopageBuys/view.ctp:9 -#: Template/OperatorTypes/edit.ctp:9 Template/OperatorTypes/index.ctp:9 -#: Template/OperatorTypes/index.ctp:23 Template/OperatorTypes/view.ctp:9 -#: Template/OperatorTypes/view.ctp:43 Template/Operators/add.ctp:9 -#: Template/Operators/edit.ctp:9 Template/Operators/index.ctp:9 -#: Template/Operators/index.ctp:24 Template/Operators/view.ctp:9 -#: Template/Roles/add.ctp:9 Template/Roles/edit.ctp:9 -#: Template/Roles/index.ctp:9 Template/Roles/index.ctp:20 -#: Template/Roles/view.ctp:9 Template/ServerUsers/add.ctp:9 -#: Template/ServerUsers/edit.ctp:9 Template/ServerUsers/index.ctp:9 -#: Template/ServerUsers/index.ctp:26 Template/ServerUsers/view.ctp:9 -#: Template/StateBalances/add.ctp:9 Template/StateBalances/edit.ctp:9 -#: Template/StateBalances/index.ctp:9 Template/StateBalances/index.ctp:25 -#: Template/StateBalances/view.ctp:9 Template/StateCreated/add.ctp:9 -#: Template/StateCreated/edit.ctp:9 Template/StateCreated/index.ctp:9 -#: Template/StateCreated/index.ctp:29 Template/StateCreated/view.ctp:9 -#: Template/StateErrors/add.ctp:9 Template/StateErrors/edit.ctp:9 -#: Template/StateErrors/index.ctp:9 Template/StateErrors/index.ctp:26 -#: Template/StateErrors/view.ctp:9 Template/StateGroupAddresses/add.ctp:9 -#: Template/StateGroupAddresses/edit.ctp:9 -#: Template/StateGroupAddresses/index.ctp:9 -#: Template/StateGroupAddresses/index.ctp:26 -#: Template/StateGroupAddresses/view.ctp:9 -#: Template/StateGroupRelationships/add.ctp:9 -#: Template/StateGroupRelationships/edit.ctp:9 -#: Template/StateGroupRelationships/index.ctp:9 -#: Template/StateGroupRelationships/index.ctp:22 -#: Template/StateGroupRelationships/view.ctp:9 Template/StateGroups/add.ctp:9 -#: Template/StateGroups/edit.ctp:9 Template/StateGroups/index.ctp:9 -#: Template/StateGroups/index.ctp:29 Template/StateGroups/view.ctp:9 -#: Template/StateGroups/view.ctp:49 Template/StateGroups/view.ctp:76 -#: Template/StateGroups/view.ctp:104 Template/StateGroups/view.ctp:133 -#: Template/StateRelationshipTypes/add.ctp:9 -#: Template/StateRelationshipTypes/edit.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:21 -#: Template/StateRelationshipTypes/view.ctp:9 -#: Template/StateUserRoles/index.ctp:9 Template/StateUserRoles/index.ctp:36 -#: Template/StateUserRoles/search.ctp:33 -#: Template/StateUserTransactions/add.ctp:9 -#: Template/StateUserTransactions/edit.ctp:9 -#: Template/StateUserTransactions/index.ctp:9 -#: Template/StateUserTransactions/index.ctp:28 -#: Template/StateUserTransactions/view.ctp:9 Template/StateUsers/add.ctp:9 -#: Template/StateUsers/edit.ctp:9 Template/StateUsers/index.ctp:9 -#: Template/StateUsers/index.ctp:36 Template/StateUsers/view.ctp:9 -#: Template/StateUsers/view.ctp:34 Template/StateUsers/view.ctp:58 -#: Template/StateUsers/view.ctp:89 Template/StateUsers/view.ctp:122 -#: Template/TransactionCreations/add.ctp:9 -#: Template/TransactionCreations/edit.ctp:9 -#: Template/TransactionCreations/index.ctp:9 -#: Template/TransactionCreations/index.ctp:28 -#: Template/TransactionCreations/view.ctp:9 -#: Template/TransactionGroupAddaddress/add.ctp:9 -#: Template/TransactionGroupAddaddress/edit.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:9 -#: Template/TransactionGroupAllowtrades/add.ctp:9 -#: Template/TransactionGroupAllowtrades/edit.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:9 -#: Template/TransactionGroupCreates/add.ctp:9 -#: Template/TransactionGroupCreates/edit.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:9 -#: Template/TransactionSendCoins/add.ctp:9 -#: Template/TransactionSendCoins/edit.ctp:9 -#: Template/TransactionSendCoins/index.ctp:9 -#: Template/TransactionSendCoins/index.ctp:28 -#: Template/TransactionSendCoins/view.ctp:9 -#: Template/TransactionSignatures/add.ctp:9 -#: Template/TransactionSignatures/edit.ctp:9 -#: Template/TransactionSignatures/index.ctp:9 -#: Template/TransactionSignatures/index.ctp:22 -#: Template/TransactionSignatures/view.ctp:9 -#: Template/TransactionTypes/add.ctp:9 Template/TransactionTypes/edit.ctp:9 -#: Template/TransactionTypes/index.ctp:9 Template/TransactionTypes/index.ctp:23 -#: Template/TransactionTypes/view.ctp:9 Template/TransactionTypes/view.ctp:44 -#: Template/Transactions/add.ctp:9 Template/Transactions/edit.ctp:9 -#: Template/Transactions/index.ctp:9 Template/Transactions/view.ctp:9 -#: Template/Transactions/view.ctp:66 Template/Transactions/view.ctp:97 -#: Template/Transactions/view.ctp:125 Template/Transactions/view.ctp:152 -#: Template/Transactions/view.ctp:180 Template/Transactions/view.ctp:211 -#: Template/Transactions/view.ctp:241 Template/Users/add.ctp:9 -#: Template/Users/edit.ctp:9 Template/Users/index.ctp:9 -#: Template/Users/index.ctp:26 Template/Users/view.ctp:9 -msgid "Actions" -msgstr "" - -#: Template/AddressTypes/add.ctp:10 Template/AddressTypes/edit.ctp:16 -#: Template/AddressTypes/view.ctp:12 Template/StateGroupAddresses/add.ctp:13 -#: Template/StateGroupAddresses/edit.ctp:19 -#: Template/StateGroupAddresses/index.ctp:13 -#: Template/StateGroupAddresses/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:13 -#: Template/TransactionGroupAddaddress/edit.ctp:19 -#: Template/TransactionGroupAddaddress/index.ctp:13 -#: Template/TransactionGroupAddaddress/view.ctp:16 -msgid "List Address Types" -msgstr "" - -#: Template/AddressTypes/add.ctp:11 Template/AddressTypes/edit.ctp:17 -#: Template/AddressTypes/index.ctp:11 Template/AddressTypes/view.ctp:14 -#: Template/StateGroupAddresses/add.ctp:10 -#: Template/StateGroupAddresses/edit.ctp:16 -#: Template/StateGroupAddresses/view.ctp:12 Template/StateGroups/add.ctp:11 -#: Template/StateGroups/edit.ctp:17 Template/StateGroups/index.ctp:11 -#: Template/StateGroups/view.ctp:14 -msgid "List State Group Addresses" -msgstr "" - -#: Template/AddressTypes/add.ctp:12 Template/AddressTypes/edit.ctp:18 -#: Template/AddressTypes/index.ctp:12 Template/AddressTypes/view.ctp:15 -#: Template/StateGroupAddresses/index.ctp:10 -#: Template/StateGroupAddresses/view.ctp:13 Template/StateGroups/add.ctp:12 -#: Template/StateGroups/edit.ctp:18 Template/StateGroups/index.ctp:12 -#: Template/StateGroups/view.ctp:15 -msgid "New State Group Address" -msgstr "" - -#: Template/AddressTypes/add.ctp:13 Template/AddressTypes/edit.ctp:19 -#: Template/AddressTypes/index.ctp:13 Template/AddressTypes/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:10 -#: Template/TransactionGroupAddaddress/edit.ctp:16 -#: Template/TransactionGroupAddaddress/view.ctp:12 -#: Template/Transactions/add.ctp:19 Template/Transactions/edit.ctp:25 -#: Template/Transactions/index.ctp:19 Template/Transactions/view.ctp:22 -msgid "List Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/add.ctp:14 Template/AddressTypes/edit.ctp:20 -#: Template/AddressTypes/index.ctp:14 Template/AddressTypes/view.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:10 -#: Template/TransactionGroupAddaddress/view.ctp:13 -#: Template/Transactions/add.ctp:20 Template/Transactions/edit.ctp:26 -#: Template/Transactions/index.ctp:20 Template/Transactions/view.ctp:23 -msgid "New Transaction Group Addaddres" -msgstr "" - -#: Template/AddressTypes/add.ctp:20 -msgid "Add Address Type" -msgstr "" - -#: Template/AddressTypes/add.ctp:26 Template/AddressTypes/edit.ctp:32 -#: Template/AdminErrors/add.ctp:28 Template/AdminErrors/edit.ctp:34 -#: Template/BlockchainTypes/add.ctp:23 Template/BlockchainTypes/edit.ctp:29 -#: Template/CommunityProfiles/add.ctp:22 Template/CommunityProfiles/edit.ctp:28 -#: Template/ElopageBuys/add.ctp:31 Template/ElopageBuys/edit.ctp:37 -#: Template/OperatorTypes/add.ctp:24 Template/OperatorTypes/edit.ctp:30 -#: Template/Operators/add.ctp:24 Template/Operators/edit.ctp:30 -#: Template/Roles/add.ctp:21 Template/Roles/edit.ctp:27 -#: Template/ServerUsers/add.ctp:24 Template/ServerUsers/edit.ctp:32 -#: Template/StateBalances/add.ctp:25 Template/StateBalances/edit.ctp:31 -#: Template/StateCreated/add.ctp:29 Template/StateCreated/edit.ctp:35 -#: Template/StateErrors/add.ctp:27 Template/StateErrors/edit.ctp:33 -#: Template/StateGroupAddresses/add.ctp:26 -#: Template/StateGroupAddresses/edit.ctp:32 -#: Template/StateGroupRelationships/add.ctp:23 -#: Template/StateGroupRelationships/edit.ctp:29 Template/StateGroups/add.ctp:30 -#: Template/StateGroups/edit.ctp:36 Template/StateRelationshipTypes/add.ctp:22 -#: Template/StateRelationshipTypes/edit.ctp:28 -#: Template/StateUserTransactions/add.ctp:29 -#: Template/StateUserTransactions/edit.ctp:35 Template/StateUsers/add.ctp:32 -#: Template/StateUsers/edit.ctp:37 Template/TransactionCreations/add.ctp:27 -#: Template/TransactionCreations/edit.ctp:33 -#: Template/TransactionGroupAddaddress/add.ctp:26 -#: Template/TransactionGroupAddaddress/edit.ctp:32 -#: Template/TransactionGroupAllowtrades/add.ctp:25 -#: Template/TransactionGroupAllowtrades/edit.ctp:31 -#: Template/TransactionGroupCreates/add.ctp:27 -#: Template/TransactionGroupCreates/edit.ctp:33 -#: Template/TransactionSendCoins/add.ctp:28 -#: Template/TransactionSendCoins/edit.ctp:34 -#: Template/TransactionSignatures/add.ctp:23 -#: Template/TransactionSignatures/edit.ctp:29 -#: Template/TransactionTypes/add.ctp:24 Template/TransactionTypes/edit.ctp:30 -#: Template/Transactions/add.ctp:42 Template/Transactions/edit.ctp:47 -#: Template/Users/add.ctp:26 Template/Users/edit.ctp:32 -msgid "Submit" -msgstr "" - -#: Template/AddressTypes/edit.ctp:11 Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:56 Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:11 Template/AdminErrors/index.ctp:43 -#: Template/BlockchainTypes/edit.ctp:11 Template/BlockchainTypes/index.ctp:35 -#: Template/CommunityProfiles/edit.ctp:11 -#: Template/CommunityProfiles/index.ctp:33 Template/ElopageBuys/edit.ctp:11 -#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:11 Template/Operators/index.ctp:40 -#: Template/Roles/edit.ctp:11 Template/Roles/index.ctp:31 -#: Template/ServerUsers/edit.ctp:11 Template/ServerUsers/index.ctp:43 -#: Template/StateBalances/edit.ctp:11 Template/StateBalances/index.ctp:38 -#: Template/StateCreated/edit.ctp:11 Template/StateCreated/index.ctp:45 -#: Template/StateErrors/edit.ctp:11 Template/StateErrors/index.ctp:39 -#: Template/StateErrors/show_for_user.ctp:44 -#: Template/StateGroupAddresses/edit.ctp:11 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupRelationships/edit.ctp:11 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroups/edit.ctp:11 Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:60 Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:11 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:11 -#: Template/StateUserTransactions/index.ctp:41 Template/StateUsers/edit.ctp:11 -#: Template/StateUsers/index.ctp:53 Template/TransactionCreations/edit.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:11 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAllowtrades/edit.ctp:11 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupCreates/edit.ctp:11 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionSendCoins/edit.ctp:11 -#: Template/TransactionSignatures/edit.ctp:11 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionTypes/edit.ctp:11 Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:56 Template/Transactions/edit.ctp:11 -#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:11 -#: Template/Users/index.ctp:43 -msgid "Delete" -msgstr "" - -#: Template/AddressTypes/edit.ctp:13 Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:11 Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 Template/AdminErrors/edit.ctp:13 -#: Template/AdminErrors/index.ctp:43 Template/AdminErrors/view.ctp:11 -#: Template/BlockchainTypes/edit.ctp:13 Template/BlockchainTypes/index.ctp:35 -#: Template/BlockchainTypes/view.ctp:11 Template/CommunityProfiles/edit.ctp:13 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/CommunityProfiles/view.ctp:11 Template/ElopageBuys/edit.ctp:13 -#: Template/ElopageBuys/index.ctp:51 Template/ElopageBuys/view.ctp:11 -#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:11 -#: Template/OperatorTypes/view.ctp:54 Template/Operators/edit.ctp:13 -#: Template/Operators/index.ctp:40 Template/Operators/view.ctp:11 -#: Template/Roles/edit.ctp:13 Template/Roles/index.ctp:31 -#: Template/Roles/view.ctp:11 Template/ServerUsers/edit.ctp:13 -#: Template/ServerUsers/index.ctp:43 Template/ServerUsers/view.ctp:11 -#: Template/StateBalances/edit.ctp:13 Template/StateBalances/index.ctp:38 -#: Template/StateBalances/view.ctp:11 Template/StateCreated/edit.ctp:13 -#: Template/StateCreated/index.ctp:45 Template/StateCreated/view.ctp:11 -#: Template/StateErrors/edit.ctp:13 Template/StateErrors/index.ctp:39 -#: Template/StateErrors/view.ctp:11 Template/StateGroupAddresses/edit.ctp:13 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupAddresses/view.ctp:11 -#: Template/StateGroupRelationships/edit.ctp:13 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroupRelationships/view.ctp:11 -#: Template/StateGroups/edit.ctp:13 Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:11 Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:13 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateRelationshipTypes/view.ctp:11 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:13 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUserTransactions/view.ctp:11 Template/StateUsers/edit.ctp:13 -#: Template/StateUsers/index.ctp:53 Template/StateUsers/view.ctp:11 -#: Template/TransactionCreations/edit.ctp:13 -#: Template/TransactionCreations/view.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:13 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAddaddress/view.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:13 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupAllowtrades/view.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:13 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionGroupCreates/view.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:13 -#: Template/TransactionSendCoins/view.ctp:11 -#: Template/TransactionSignatures/edit.ctp:13 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionSignatures/view.ctp:11 -#: Template/TransactionTypes/edit.ctp:13 Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:11 Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:13 Template/Transactions/view.ctp:11 -#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:13 -#: Template/Users/index.ctp:43 Template/Users/view.ctp:11 -msgid "Are you sure you want to delete # {0}?" -msgstr "" - -#: Template/AddressTypes/edit.ctp:26 Template/AddressTypes/view.ctp:10 -msgid "Edit Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:10 Template/AddressTypes/view.ctp:13 -#: Template/StateGroupAddresses/add.ctp:14 -#: Template/StateGroupAddresses/edit.ctp:20 -#: Template/StateGroupAddresses/index.ctp:14 -#: Template/StateGroupAddresses/view.ctp:17 -#: Template/TransactionGroupAddaddress/add.ctp:14 -#: Template/TransactionGroupAddaddress/edit.ctp:20 -#: Template/TransactionGroupAddaddress/index.ctp:14 -#: Template/TransactionGroupAddaddress/view.ctp:17 -msgid "New Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:18 -msgid "Address Types" -msgstr "" - -#: Template/AddressTypes/index.ctp:35 Template/AddressTypes/view.ctp:54 -#: Template/AddressTypes/view.ctp:83 Template/AdminErrors/index.ctp:39 -#: Template/BlockchainTypes/index.ctp:33 -#: Template/CommunityProfiles/index.ctp:31 Template/ElopageBuys/index.ctp:49 -#: Template/OperatorTypes/view.ctp:52 Template/Operators/index.ctp:38 -#: Template/Roles/index.ctp:29 Template/ServerUsers/index.ctp:41 -#: Template/StateBalances/index.ctp:36 Template/StateCreated/index.ctp:43 -#: Template/StateErrors/index.ctp:37 Template/StateGroupAddresses/index.ctp:37 -#: Template/StateGroupRelationships/index.ctp:33 -#: Template/StateGroups/index.ctp:39 Template/StateGroups/view.ctp:58 -#: Template/StateGroups/view.ctp:85 Template/StateGroups/view.ctp:114 -#: Template/StateGroups/view.ctp:143 -#: Template/StateRelationshipTypes/index.ctp:31 -#: Template/StateUserRoles/index.ctp:51 -#: Template/StateUserTransactions/index.ctp:39 Template/StateUsers/index.ctp:51 -#: Template/StateUsers/view.ctp:41 Template/StateUsers/view.ctp:71 -#: Template/StateUsers/view.ctp:104 Template/StateUsers/view.ctp:136 -#: Template/TransactionCreations/index.ctp:42 -#: Template/TransactionGroupAddaddress/index.ctp:37 -#: Template/TransactionGroupAllowtrades/index.ctp:35 -#: Template/TransactionGroupCreates/index.ctp:37 -#: Template/TransactionSendCoins/index.ctp:41 -#: Template/TransactionSignatures/index.ctp:31 -#: Template/TransactionTypes/index.ctp:33 Template/TransactionTypes/view.ctp:54 -#: Template/Transactions/view.ctp:78 Template/Transactions/view.ctp:107 -#: Template/Transactions/view.ctp:134 Template/Transactions/view.ctp:161 -#: Template/Transactions/view.ctp:190 Template/Transactions/view.ctp:223 -#: Template/Transactions/view.ctp:250 Template/Users/index.ctp:41 -msgid "View" -msgstr "" - -#: Template/AddressTypes/index.ctp:36 Template/AddressTypes/view.ctp:55 -#: Template/AddressTypes/view.ctp:84 Template/AdminErrors/index.ctp:41 -#: Template/BlockchainTypes/index.ctp:34 -#: Template/CommunityProfiles/index.ctp:32 Template/ElopageBuys/index.ctp:50 -#: Template/OperatorTypes/view.ctp:53 Template/Operators/index.ctp:39 -#: Template/Roles/index.ctp:30 Template/ServerUsers/index.ctp:42 -#: Template/StateBalances/index.ctp:37 Template/StateCreated/index.ctp:44 -#: Template/StateErrors/index.ctp:38 Template/StateGroupAddresses/index.ctp:38 -#: Template/StateGroupRelationships/index.ctp:34 -#: Template/StateGroups/index.ctp:40 Template/StateGroups/view.ctp:59 -#: Template/StateGroups/view.ctp:86 Template/StateGroups/view.ctp:115 -#: Template/StateGroups/view.ctp:144 -#: Template/StateRelationshipTypes/index.ctp:32 -#: Template/StateUserRoles/index.ctp:52 -#: Template/StateUserTransactions/index.ctp:40 Template/StateUsers/index.ctp:52 -#: Template/TransactionGroupAddaddress/index.ctp:38 -#: Template/TransactionGroupAllowtrades/index.ctp:36 -#: Template/TransactionGroupCreates/index.ctp:38 -#: Template/TransactionSignatures/index.ctp:32 -#: Template/TransactionTypes/index.ctp:34 Template/TransactionTypes/view.ctp:55 -#: Template/Transactions/view.ctp:79 Template/Transactions/view.ctp:108 -#: Template/Transactions/view.ctp:135 Template/Transactions/view.ctp:162 -#: Template/Transactions/view.ctp:191 Template/Transactions/view.ctp:224 -#: Template/Transactions/view.ctp:251 Template/Users/index.ctp:42 -msgid "Edit" -msgstr "" - -#: Template/AddressTypes/index.ctp:45 Template/AdminErrors/index.ctp:50 -#: Template/BlockchainTypes/index.ctp:43 -#: Template/CommunityProfiles/index.ctp:41 Template/ElopageBuys/index.ctp:59 -#: Template/Operators/index.ctp:48 Template/Roles/index.ctp:39 -#: Template/ServerUsers/index.ctp:51 Template/StateBalances/index.ctp:46 -#: Template/StateCreated/index.ctp:53 Template/StateErrors/index.ctp:47 -#: Template/StateGroupAddresses/index.ctp:47 -#: Template/StateGroupRelationships/index.ctp:43 -#: Template/StateGroups/index.ctp:49 -#: Template/StateRelationshipTypes/index.ctp:41 -#: Template/StateUserRoles/index.ctp:61 -#: Template/StateUserTransactions/index.ctp:49 Template/StateUsers/index.ctp:61 -#: Template/TransactionCreations/index.ctp:50 -#: Template/TransactionGroupAddaddress/index.ctp:47 -#: Template/TransactionGroupAllowtrades/index.ctp:45 -#: Template/TransactionGroupCreates/index.ctp:47 -#: Template/TransactionSendCoins/index.ctp:49 -#: Template/TransactionSignatures/index.ctp:41 -#: Template/TransactionTypes/index.ctp:43 Template/Transactions/index.ctp:50 -#: Template/Users/index.ctp:51 -msgid "first" -msgstr "" - -#: Template/AddressTypes/index.ctp:46 Template/AdminErrors/index.ctp:51 -#: Template/BlockchainTypes/index.ctp:44 -#: Template/CommunityProfiles/index.ctp:42 Template/ElopageBuys/index.ctp:60 -#: Template/Operators/index.ctp:49 Template/Roles/index.ctp:40 -#: Template/ServerUsers/index.ctp:52 Template/StateBalances/index.ctp:47 -#: Template/StateCreated/index.ctp:54 Template/StateErrors/index.ctp:48 -#: Template/StateGroupAddresses/index.ctp:48 -#: Template/StateGroupRelationships/index.ctp:44 -#: Template/StateGroups/index.ctp:50 -#: Template/StateRelationshipTypes/index.ctp:42 -#: Template/StateUserRoles/index.ctp:62 -#: Template/StateUserTransactions/index.ctp:50 Template/StateUsers/index.ctp:62 -#: Template/TransactionCreations/index.ctp:51 -#: Template/TransactionGroupAddaddress/index.ctp:48 -#: Template/TransactionGroupAllowtrades/index.ctp:46 -#: Template/TransactionGroupCreates/index.ctp:48 -#: Template/TransactionSendCoins/index.ctp:50 -#: Template/TransactionSignatures/index.ctp:42 -#: Template/TransactionTypes/index.ctp:44 Template/Transactions/index.ctp:51 -#: Template/Users/index.ctp:52 -msgid "previous" -msgstr "" - -#: Template/AddressTypes/index.ctp:48 Template/AdminErrors/index.ctp:53 -#: Template/BlockchainTypes/index.ctp:46 -#: Template/CommunityProfiles/index.ctp:44 Template/ElopageBuys/index.ctp:62 -#: Template/Operators/index.ctp:51 Template/Roles/index.ctp:42 -#: Template/ServerUsers/index.ctp:54 Template/StateBalances/index.ctp:49 -#: Template/StateCreated/index.ctp:56 Template/StateErrors/index.ctp:50 -#: Template/StateGroupAddresses/index.ctp:50 -#: Template/StateGroupRelationships/index.ctp:46 -#: Template/StateGroups/index.ctp:52 -#: Template/StateRelationshipTypes/index.ctp:44 -#: Template/StateUserRoles/index.ctp:64 -#: Template/StateUserTransactions/index.ctp:52 Template/StateUsers/index.ctp:64 -#: Template/TransactionCreations/index.ctp:53 -#: Template/TransactionGroupAddaddress/index.ctp:50 -#: Template/TransactionGroupAllowtrades/index.ctp:48 -#: Template/TransactionGroupCreates/index.ctp:50 -#: Template/TransactionSendCoins/index.ctp:52 -#: Template/TransactionSignatures/index.ctp:44 -#: Template/TransactionTypes/index.ctp:46 Template/Transactions/index.ctp:53 -#: Template/Users/index.ctp:54 -msgid "next" -msgstr "" - -#: Template/AddressTypes/index.ctp:49 Template/AdminErrors/index.ctp:54 -#: Template/BlockchainTypes/index.ctp:47 -#: Template/CommunityProfiles/index.ctp:45 Template/ElopageBuys/index.ctp:63 -#: Template/Operators/index.ctp:52 Template/Roles/index.ctp:43 -#: Template/ServerUsers/index.ctp:55 Template/StateBalances/index.ctp:50 -#: Template/StateCreated/index.ctp:57 Template/StateErrors/index.ctp:51 -#: Template/StateGroupAddresses/index.ctp:51 -#: Template/StateGroupRelationships/index.ctp:47 -#: Template/StateGroups/index.ctp:53 -#: Template/StateRelationshipTypes/index.ctp:45 -#: Template/StateUserRoles/index.ctp:65 -#: Template/StateUserTransactions/index.ctp:53 Template/StateUsers/index.ctp:65 -#: Template/TransactionCreations/index.ctp:54 -#: Template/TransactionGroupAddaddress/index.ctp:51 -#: Template/TransactionGroupAllowtrades/index.ctp:49 -#: Template/TransactionGroupCreates/index.ctp:51 -#: Template/TransactionSendCoins/index.ctp:53 -#: Template/TransactionSignatures/index.ctp:45 -#: Template/TransactionTypes/index.ctp:47 Template/Transactions/index.ctp:54 -#: Template/Users/index.ctp:55 -msgid "last" -msgstr "" - -#: Template/AddressTypes/index.ctp:51 Template/AdminErrors/index.ctp:56 -#: Template/BlockchainTypes/index.ctp:49 -#: Template/CommunityProfiles/index.ctp:47 Template/ElopageBuys/index.ctp:65 -#: Template/Operators/index.ctp:54 Template/Roles/index.ctp:45 -#: Template/ServerUsers/index.ctp:57 Template/StateBalances/index.ctp:52 -#: Template/StateCreated/index.ctp:59 Template/StateErrors/index.ctp:53 -#: Template/StateGroupAddresses/index.ctp:53 -#: Template/StateGroupRelationships/index.ctp:49 -#: Template/StateGroups/index.ctp:55 -#: Template/StateRelationshipTypes/index.ctp:47 -#: Template/StateUserRoles/index.ctp:67 -#: Template/StateUserTransactions/index.ctp:55 Template/StateUsers/index.ctp:67 -#: Template/TransactionCreations/index.ctp:56 -#: Template/TransactionGroupAddaddress/index.ctp:53 -#: Template/TransactionGroupAllowtrades/index.ctp:51 -#: Template/TransactionGroupCreates/index.ctp:53 -#: Template/TransactionSendCoins/index.ctp:55 -#: Template/TransactionSignatures/index.ctp:47 -#: Template/TransactionTypes/index.ctp:49 Template/Transactions/index.ctp:56 -#: Template/Users/index.ctp:57 -msgid "" -"Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} " -"total" -msgstr "" - -#: Template/AddressTypes/view.ctp:11 -msgid "Delete Address Type" -msgstr "" - -#: Template/AddressTypes/view.ctp:24 Template/BlockchainTypes/view.ctp:20 -#: Template/OperatorTypes/view.ctp:22 Template/StateGroups/view.ctp:28 -#: Template/StateGroups/view.ctp:103 -#: Template/StateRelationshipTypes/view.ctp:20 -#: Template/TransactionGroupCreates/view.ctp:32 -#: Template/TransactionTypes/view.ctp:22 Template/Transactions/view.ctp:179 -#: Template/Users/statistics.ctp:64 -msgid "Name" -msgstr "" - -#: Template/AddressTypes/view.ctp:28 Template/BlockchainTypes/view.ctp:24 -#: Template/OperatorTypes/view.ctp:26 -#: Template/StateRelationshipTypes/view.ctp:24 -#: Template/TransactionTypes/view.ctp:26 -msgid "Text" -msgstr "" - -#: Template/AddressTypes/view.ctp:32 Template/AddressTypes/view.ctp:41 -#: Template/AddressTypes/view.ctp:68 Template/AdminErrors/view.ctp:46 -#: Template/BlockchainTypes/view.ctp:32 Template/CommunityProfiles/view.ctp:24 -#: Template/OperatorTypes/view.ctp:30 Template/OperatorTypes/view.ctp:39 -#: Template/Operators/view.ctp:32 Template/Roles/view.ctp:24 -#: Template/ServerUsers/view.ctp:36 Template/StateBalances/view.ctp:27 -#: Template/StateCreated/view.ctp:32 Template/StateErrors/view.ctp:32 -#: Template/StateGroupAddresses/view.ctp:28 -#: Template/StateGroupRelationships/view.ctp:20 -#: Template/StateGroups/view.ctp:32 Template/StateGroups/view.ctp:45 -#: Template/StateGroups/view.ctp:72 Template/StateGroups/view.ctp:99 -#: Template/StateGroups/view.ctp:128 -#: Template/StateRelationshipTypes/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:38 -#: Template/TransactionCreations/view.ctp:32 -#: Template/TransactionGroupAddaddress/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:32 -#: Template/TransactionSignatures/view.ctp:26 -#: Template/TransactionTypes/view.ctp:30 Template/TransactionTypes/view.ctp:39 -#: Template/Transactions/view.ctp:46 Template/Transactions/view.ctp:59 -#: Template/Transactions/view.ctp:92 Template/Transactions/view.ctp:121 -#: Template/Transactions/view.ctp:148 Template/Transactions/view.ctp:175 -#: Template/Transactions/view.ctp:204 Template/Transactions/view.ctp:237 -#: Template/Users/view.ctp:36 -msgid "Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:37 Template/StateGroups/view.ctp:41 -msgid "Related State Group Addresses" -msgstr "" - -#: Template/AddressTypes/view.ctp:42 Template/StateGroupAddresses/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:30 -#: Template/Transactions/view.ctp:150 -msgid "Group Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:43 Template/AddressTypes/view.ctp:72 -#: Template/StateGroups/view.ctp:47 Template/StateGroups/view.ctp:75 -#: Template/Transactions/view.ctp:124 -msgid "Public Key" -msgstr "" - -#: Template/AddressTypes/view.ctp:44 Template/AddressTypes/view.ctp:70 -#: Template/StateGroups/view.ctp:48 Template/Transactions/view.ctp:123 -msgid "Address Type Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:64 Template/Transactions/view.ctp:117 -msgid "Related Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/view.ctp:69 Template/StateGroups/view.ctp:100 -#: Template/Transactions/view.ctp:60 Template/Transactions/view.ctp:93 -#: Template/Transactions/view.ctp:122 Template/Transactions/view.ctp:149 -#: Template/Transactions/view.ctp:176 Template/Transactions/view.ctp:205 -#: Template/Transactions/view.ctp:238 -msgid "Transaction Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:71 -msgid "Remove From Group" -msgstr "" - -#: Template/AdminErrors/add.ctp:10 Template/AdminErrors/edit.ctp:16 -#: Template/AdminErrors/view.ctp:12 -msgid "List Admin Errors" -msgstr "" - -#: Template/AdminErrors/add.ctp:11 Template/AdminErrors/edit.ctp:17 -#: Template/AdminErrors/index.ctp:11 Template/AdminErrors/view.ctp:14 -#: Template/StateBalances/add.ctp:11 Template/StateBalances/edit.ctp:17 -#: Template/StateBalances/index.ctp:11 Template/StateBalances/view.ctp:14 -#: Template/StateCreated/add.ctp:13 Template/StateCreated/edit.ctp:19 -#: Template/StateCreated/index.ctp:13 Template/StateCreated/view.ctp:16 -#: Template/StateErrors/add.ctp:11 Template/StateErrors/edit.ctp:17 -#: Template/StateErrors/index.ctp:11 Template/StateErrors/view.ctp:14 -#: Template/StateGroups/add.ctp:13 Template/StateGroups/edit.ctp:19 -#: Template/StateGroups/index.ctp:13 Template/StateGroups/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:11 -#: Template/StateUserTransactions/edit.ctp:17 -#: Template/StateUserTransactions/index.ctp:11 -#: Template/StateUserTransactions/view.ctp:14 Template/StateUsers/add.ctp:10 -#: Template/StateUsers/edit.ctp:16 Template/StateUsers/view.ctp:12 -#: Template/TransactionCreations/add.ctp:13 -#: Template/TransactionCreations/edit.ctp:19 -#: Template/TransactionCreations/index.ctp:13 -#: Template/TransactionCreations/view.ctp:16 -#: Template/TransactionSendCoins/add.ctp:13 -#: Template/TransactionSendCoins/edit.ctp:19 -#: Template/TransactionSendCoins/index.ctp:13 -#: Template/TransactionSendCoins/view.ctp:16 -msgid "List State Users" -msgstr "" - -#: Template/AdminErrors/add.ctp:12 Template/AdminErrors/edit.ctp:18 -#: Template/AdminErrors/index.ctp:12 Template/AdminErrors/view.ctp:15 -#: Template/StateBalances/add.ctp:12 Template/StateBalances/edit.ctp:18 -#: Template/StateBalances/index.ctp:12 Template/StateBalances/view.ctp:15 -#: Template/StateCreated/add.ctp:14 Template/StateCreated/edit.ctp:20 -#: Template/StateCreated/index.ctp:14 Template/StateCreated/view.ctp:17 -#: Template/StateErrors/add.ctp:12 Template/StateErrors/edit.ctp:18 -#: Template/StateErrors/index.ctp:12 Template/StateErrors/view.ctp:15 -#: Template/StateGroups/add.ctp:14 Template/StateGroups/edit.ctp:20 -#: Template/StateGroups/index.ctp:14 Template/StateGroups/view.ctp:17 -#: Template/StateUserRoles/index.ctp:10 -#: Template/StateUserTransactions/add.ctp:12 -#: Template/StateUserTransactions/edit.ctp:18 -#: Template/StateUserTransactions/index.ctp:12 -#: Template/StateUserTransactions/view.ctp:15 Template/StateUsers/index.ctp:10 -#: Template/StateUsers/view.ctp:13 Template/TransactionCreations/add.ctp:14 -#: Template/TransactionCreations/edit.ctp:20 -#: Template/TransactionCreations/index.ctp:14 -#: Template/TransactionCreations/view.ctp:17 -#: Template/TransactionSendCoins/add.ctp:14 -#: Template/TransactionSendCoins/edit.ctp:20 -#: Template/TransactionSendCoins/index.ctp:14 -#: Template/TransactionSendCoins/view.ctp:17 -msgid "New State User" -msgstr "" - -#: Template/AdminErrors/add.ctp:18 -msgid "Add Admin Error" -msgstr "" - -#: Template/AdminErrors/edit.ctp:24 Template/AdminErrors/view.ctp:10 -msgid "Edit Admin Error" -msgstr "" - -#: Template/AdminErrors/index.ctp:10 Template/AdminErrors/view.ctp:13 -msgid "New Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:11 -msgid "Delete Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:22 Template/StateBalances/view.ctp:23 -#: Template/StateCreated/view.ctp:28 Template/StateErrors/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:26 -#: Template/TransactionCreations/view.ctp:28 -#: Template/TransactionSendCoins/view.ctp:28 -msgid "State User" -msgstr "" - -#: Template/AdminErrors/view.ctp:26 -msgid "Controller" -msgstr "" - -#: Template/AdminErrors/view.ctp:30 -msgid "Action" -msgstr "" - -#: Template/AdminErrors/view.ctp:34 -msgid "State" -msgstr "" - -#: Template/AdminErrors/view.ctp:38 -msgid "Msg" -msgstr "" - -#: Template/AdminErrors/view.ctp:42 -msgid "Details" -msgstr "" - -#: Template/AdminErrors/view.ctp:50 Template/ServerUsers/view.ctp:44 -#: Template/StateCreated/view.ctp:48 Template/StateErrors/view.ctp:36 -#: Template/Transactions/view.ctp:64 Template/Users/view.ctp:44 -msgid "Created" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:10 Template/BlockchainTypes/edit.ctp:16 -#: Template/BlockchainTypes/view.ctp:12 -msgid "List Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:16 -msgid "Add Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/edit.ctp:22 Template/BlockchainTypes/view.ctp:10 -msgid "Edit Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:10 Template/BlockchainTypes/view.ctp:13 -msgid "New Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:14 -msgid "Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:11 -msgid "Delete Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:28 -msgid "Symbol" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:10 Template/CommunityProfiles/edit.ctp:16 -#: Template/CommunityProfiles/view.ctp:12 -msgid "List Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:16 -msgid "Add Community Profile" -msgstr "" - -#: Template/CommunityProfiles/edit.ctp:22 -#: Template/CommunityProfiles/view.ctp:10 -msgid "Edit Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:10 -#: Template/CommunityProfiles/view.ctp:13 -msgid "New Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:14 -msgid "Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:11 -msgid "Delete Community Profile" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:20 -msgid "Profile Desc" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:28 Template/Transactions/view.ctp:63 -#: Template/Transactions/view.ctp:94 Template/Transactions/view.ctp:206 -msgid "State User Id" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:9 -msgid "Error, Please try again" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:13 Template/Layout/error.ctp:43 -msgid "Back" -msgstr "" - -#: Template/Dashboard/index.ctp:14 Template/Dashboard/index.ctp:18 -#: Template/Dashboard/server_index.ctp:9 -msgid "Willkommen" -msgstr "" - -#: Template/Dashboard/index.ctp:47 -msgid "löschen" -msgstr "" - -#: Template/Dashboard/index.ctp:51 -msgid "Adminbereich" -msgstr "" - -#: Template/Dashboard/index.ctp:57 Template/Dashboard/server_index.ctp:21 -msgid "viele schöpfen" -msgstr "" - -#: Template/Dashboard/index.ctp:70 -msgid "Anmeldungen" -msgstr "" - -#: Template/Dashboard/index.ctp:94 -msgid "suchen" -msgstr "" - -#: Template/Dashboard/index.ctp:102 -msgid "hinzufügen" -msgstr "" - -#: Template/Dashboard/index.ctp:108 -msgid "hat sein Passwort und Passphrase vergessen" -msgstr "" - -#: Template/Dashboard/index.ctp:119 -msgid "Gruppen" -msgstr "" - -#: Template/Dashboard/index.ctp:125 -msgid "Server" -msgstr "" - -#: Template/Dashboard/index.ctp:131 -msgid "Topics" -msgstr "" - -#: Template/Dashboard/index.ctp:139 -msgid "Hedera Accounts" -msgstr "" - -#: Template/Element/navi.ctp:35 -msgid "Mitgliederbereich" -msgstr "" - -#: Template/Element/navi_header.ctp:38 Template/Element/navi_notify.ctp:35 -msgid "Transaktionen sind noch zu unterzeichnen" -msgstr "" - -#: Template/Element/user_menu.ctp:22 -msgid "Abmelden" -msgstr "" - -#: Template/Element/Flash/success.ctp:9 -msgid "Info:" -msgstr "" - -#: Template/ElopageBuys/add.ctp:10 Template/ElopageBuys/edit.ctp:16 -#: Template/ElopageBuys/view.ctp:12 -msgid "List Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/add.ctp:16 -msgid "Add Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/edit.ctp:22 Template/ElopageBuys/view.ctp:10 -msgid "Edit Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:10 Template/ElopageBuys/view.ctp:13 -msgid "New Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:14 -msgid "Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/statistics.ctp:28 Template/Users/statistics.ctp:49 -msgid "Anmeldungen diesen Monat" -msgstr "" - -#: Template/ElopageBuys/view.ctp:11 -msgid "Delete Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/view.ctp:20 -msgid "Payer Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:24 -msgid "Publisher Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:28 -msgid "Event" -msgstr "" - -#: Template/ElopageBuys/view.ctp:36 -msgid "Elopage User Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:40 -msgid "Affiliate Program Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:44 -msgid "Publisher Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:48 -msgid "Order Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:52 -msgid "Product Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:56 -msgid "Product Price" -msgstr "" - -#: Template/ElopageBuys/view.ctp:60 -msgid "Success Date" -msgstr "" - -#: Template/ElopageBuys/view.ctp:64 -msgid "Payed" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49 -msgid "Yes" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49 -msgid "No" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:8 -msgid "Gradido Schöpfung" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:9 -#: Template/Email/text/notification_transaction_failed.ctp:14 -#: Template/Email/text/notification_transfer.ctp:12 -msgid "Hallo" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:11 -msgid "für dich wurden soeben {0} geschöpft." -msgstr "" - -#: Template/Email/text/notification_creation.ctp:16 -#: Template/Email/text/notification_transaction_failed.ctp:46 -#: Template/Email/text/notification_transfer.ctp:19 -msgid "Bitte antworte nicht auf diese E-Mail!" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:18 -#: Template/Email/text/notification_transaction_failed.ctp:49 -#: Template/Email/text/notification_transfer.ctp:25 -msgid "Mit freundlichen Grüßen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:8 -msgid "Gradido Transaktion fehlgeschlagen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:16 -msgid "Deine letzte Transaktion ist leider fehlgeschlagen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:20 -msgid "Du wolltest {0} für {1} schöpfen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:24 -msgid "Das Zieldatum war: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:26 -msgid "Du wolltest {0} an {1} senden." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:32 -msgid "Das ist schief gelaufen: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:35 -msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:36 -msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:8 -msgid "Gradido Überweisung" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:14 -msgid "Du hast soeben {0} von {1} erhalten." -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:15 -msgid "{0} schreibt:" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid "Wenn Du " -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: " -msgstr "" - -#: Template/Layout/default.ctp:38 -msgid "Logout" -msgstr "" - -#: Template/Layout/error.ctp:35 -msgid "Error" -msgstr "" - -#: Template/Layout/frontend.ctp:95 -msgid "Datenschutzerklärung" -msgstr "" - -#: Template/Layout/frontend.ctp:96 -msgid "Impressum" -msgstr "" - -#: Template/Layout/frontend.ctp:108 -msgid "Community Server in Entwicklung" -msgstr "" - -#: Template/OperatorTypes/add.ctp:10 Template/OperatorTypes/edit.ctp:16 -#: Template/OperatorTypes/view.ctp:12 -msgid "List Operator Types" -msgstr "" - -#: Template/OperatorTypes/add.ctp:11 Template/OperatorTypes/edit.ctp:17 -#: Template/OperatorTypes/index.ctp:11 Template/OperatorTypes/view.ctp:14 -#: Template/Operators/add.ctp:10 Template/Operators/edit.ctp:16 -#: Template/Operators/view.ctp:12 -msgid "List Operators" -msgstr "" - -#: Template/OperatorTypes/add.ctp:12 Template/OperatorTypes/edit.ctp:18 -#: Template/OperatorTypes/index.ctp:12 Template/OperatorTypes/view.ctp:15 -#: Template/Operators/index.ctp:10 Template/Operators/view.ctp:13 -msgid "New Operator" -msgstr "" - -#: Template/OperatorTypes/add.ctp:18 -msgid "Add Operator Type" -msgstr "" - -#: Template/OperatorTypes/edit.ctp:24 Template/OperatorTypes/view.ctp:10 -msgid "Edit Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:10 Template/OperatorTypes/view.ctp:13 -msgid "New Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:16 -msgid "Operator Types" -msgstr "" - -#: Template/OperatorTypes/view.ctp:11 -msgid "Delete Operator Type" -msgstr "" - -#: Template/OperatorTypes/view.ctp:35 -msgid "Related Operators" -msgstr "" - -#: Template/OperatorTypes/view.ctp:40 Template/Operators/view.ctp:20 -#: Template/ServerUsers/view.ctp:20 -msgid "Username" -msgstr "" - -#: Template/OperatorTypes/view.ctp:41 Template/Operators/view.ctp:36 -msgid "Operator Type Id" -msgstr "" - -#: Template/OperatorTypes/view.ctp:42 Template/Operators/view.ctp:28 -msgid "Data Base64" -msgstr "" - -#: Template/Operators/add.ctp:16 -msgid "Add Operator" -msgstr "" - -#: Template/Operators/edit.ctp:22 Template/Operators/view.ctp:10 -msgid "Edit Operator" -msgstr "" - -#: Template/Operators/index.ctp:14 -msgid "Operators" -msgstr "" - -#: Template/Operators/view.ctp:11 -msgid "Delete Operator" -msgstr "" - -#: Template/Operators/view.ctp:24 -msgid "User Pubkey" -msgstr "" - -#: Template/Profile/edit.ctp:9 -msgid "Profil ändern" -msgstr "" - -#: Template/Profile/edit.ctp:18 -msgid "Vorname" -msgstr "" - -#: Template/Profile/edit.ctp:19 -msgid "Nachname" -msgstr "" - -#: Template/Profile/edit.ctp:20 -msgid "Profilbild" -msgstr "" - -#: Template/Profile/edit.ctp:25 -msgid "Beschreibung" -msgstr "" - -#: Template/Profile/edit.ctp:26 -msgid "Daten speichern" -msgstr "" - -#: Template/Roles/add.ctp:10 Template/Roles/edit.ctp:16 -#: Template/Roles/view.ctp:12 -msgid "List Roles" -msgstr "" - -#: Template/Roles/add.ctp:16 -msgid "Add Role" -msgstr "" - -#: Template/Roles/edit.ctp:22 Template/Roles/view.ctp:10 -msgid "Edit Role" -msgstr "" - -#: Template/Roles/index.ctp:10 Template/Roles/view.ctp:13 -msgid "New Role" -msgstr "" - -#: Template/Roles/index.ctp:14 -msgid "Roles" -msgstr "" - -#: Template/Roles/view.ctp:11 -msgid "Delete Role" -msgstr "" - -#: Template/Roles/view.ctp:20 -msgid "Title" -msgstr "" - -#: Template/ServerUsers/add.ctp:10 Template/ServerUsers/edit.ctp:16 -#: Template/ServerUsers/view.ctp:12 -msgid "List Server Users" -msgstr "" - -#: Template/ServerUsers/add.ctp:16 -msgid "Add Server User" -msgstr "" - -#: Template/ServerUsers/edit.ctp:22 Template/ServerUsers/view.ctp:10 -msgid "Edit Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:10 Template/ServerUsers/view.ctp:13 -msgid "New Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:14 -msgid "Server Users" -msgstr "" - -#: Template/ServerUsers/login.ctp:16 -msgid "Please enter your username and password" -msgstr "" - -#: Template/ServerUsers/login.ctp:20 -msgid "Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:11 -msgid "Delete Server User" -msgstr "" - -#: Template/ServerUsers/view.ctp:24 Template/Users/view.ctp:40 -msgid "Password" -msgstr "" - -#: Template/ServerUsers/view.ctp:28 Template/Users/view.ctp:20 -msgid "Email" -msgstr "" - -#: Template/ServerUsers/view.ctp:32 Template/StateUserRoles/assign_role.ctp:45 -#: Template/StateUserRoles/search.ctp:32 -msgid "Role" -msgstr "" - -#: Template/ServerUsers/view.ctp:40 -msgid "Last Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:48 Template/StateBalances/view.ctp:35 -msgid "Modified" -msgstr "" - -#: Template/ServerUsers/view.ctp:52 -msgid "Activated" -msgstr "" - -#: Template/StateBalances/add.ctp:10 Template/StateBalances/edit.ctp:16 -#: Template/StateBalances/view.ctp:12 Template/StateUserRoles/index.ctp:13 -#: Template/StateUsers/add.ctp:13 Template/StateUsers/edit.ctp:19 -#: Template/StateUsers/index.ctp:13 Template/StateUsers/view.ctp:16 -msgid "List State Balances" -msgstr "" - -#: Template/StateBalances/add.ctp:19 -msgid "Add State Balance" -msgstr "" - -#: Template/StateBalances/edit.ctp:25 Template/StateBalances/view.ctp:10 -msgid "Edit State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:10 Template/StateBalances/view.ctp:13 -#: Template/StateUserRoles/index.ctp:14 Template/StateUsers/add.ctp:14 -#: Template/StateUsers/edit.ctp:20 Template/StateUsers/index.ctp:14 -#: Template/StateUsers/view.ctp:17 -msgid "New State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:16 -msgid "State Balances" -msgstr "" - -#: Template/StateBalances/overview.ctp:10 -msgid "Aktueller Kontostand: " -msgstr "" - -#: Template/StateBalances/overview.ctp:34 -msgid "Absender" -msgstr "" - -#: Template/StateBalances/overview.ctp:35 Template/StateUsers/view.ctp:57 -#: Template/StateUsers/view.ctp:87 Template/StateUsers/view.ctp:121 -#: Template/TransactionSendCoins/create.ctp:21 -#: Template/TransactionSendCoins/create_raw.ctp:32 -msgid "Verwendungszweck" -msgstr "" - -#: Template/StateBalances/overview.ctp:36 -#: Template/StateBalances/overview_gdt.ctp:42 -#: Template/StateBalances/overview_gdt.ctp:75 -msgid "Datum" -msgstr "" - -#: Template/StateBalances/overview.ctp:37 Template/StateUsers/view.ctp:56 -#: Template/StateUsers/view.ctp:86 Template/StateUsers/view.ctp:120 -msgid "Betrag" -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Transaktions Nr." -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Nr" -msgstr "" - -#: Template/StateBalances/overview.ctp:75 -msgid "Geschöpft" -msgstr "" - -#: Template/StateBalances/overview.ctp:78 -msgid "Gesendet" -msgstr "" - -#: Template/StateBalances/overview.ctp:81 -msgid "Empfangen" -msgstr "" - -#: Template/StateBalances/overview.ctp:84 -msgid "Vergänglichkeit" -msgstr "" - -#: Template/StateBalances/overview.ctp:124 -#: Template/TransactionCreations/create_multi.ctp:184 -msgid "Laufende Transaktion" -msgstr "" - -#: Template/StateBalances/overview.ctp:126 -#: Template/TransactionCreations/create_multi.ctp:186 -msgid "Laufende Transaktionen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:21 -msgid "Zur Verfügung: " -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:31 -msgid "Nur die letzten 100 Einträge werden angezeigt!" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:38 -msgid "Eigene Einzahlungen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:41 Template/Users/statistics.ctp:65 -msgid "E-Mail" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:43 -msgid "Kommentar" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:44 -#: Template/StateBalances/overview_gdt.ctp:76 -msgid "Euro" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:45 -#: Template/StateBalances/overview_gdt.ctp:77 -msgid "Factor" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:46 -#: Template/StateBalances/overview_gdt.ctp:78 -msgid "GDT" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:71 -msgid "Einzahlungen anderer (Publisherprogramm)" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:74 -msgid "Einzahlender" -msgstr "" - -#: Template/StateBalances/view.ctp:11 -msgid "Delete State Balance" -msgstr "" - -#: Template/StateBalances/view.ctp:31 Template/StateUsers/view.ctp:33 -#: Template/TransactionCreations/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:36 Template/Transactions/view.ctp:95 -#: Template/Transactions/view.ctp:209 -msgid "Amount" -msgstr "" - -#: Template/StateCreated/add.ctp:10 Template/StateCreated/edit.ctp:16 -#: Template/StateCreated/view.ctp:12 Template/StateUserRoles/index.ctp:15 -#: Template/StateUsers/add.ctp:15 Template/StateUsers/edit.ctp:21 -#: Template/StateUsers/index.ctp:15 Template/Transactions/add.ctp:15 -#: Template/Transactions/edit.ctp:21 Template/Transactions/index.ctp:15 -#: Template/Transactions/view.ctp:18 -msgid "List State Created" -msgstr "" - -#: Template/StateCreated/add.ctp:11 Template/StateCreated/edit.ctp:17 -#: Template/StateCreated/index.ctp:11 Template/StateCreated/view.ctp:14 -#: Template/StateGroups/add.ctp:17 Template/StateGroups/edit.ctp:23 -#: Template/StateGroups/index.ctp:17 Template/StateGroups/view.ctp:20 -#: Template/StateUserTransactions/add.ctp:13 -#: Template/StateUserTransactions/edit.ctp:19 -#: Template/StateUserTransactions/index.ctp:13 -#: Template/StateUserTransactions/view.ctp:16 -#: Template/TransactionCreations/add.ctp:11 -#: Template/TransactionCreations/edit.ctp:17 -#: Template/TransactionCreations/index.ctp:11 -#: Template/TransactionCreations/view.ctp:14 -#: Template/TransactionGroupAddaddress/add.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:11 -#: Template/TransactionGroupAddaddress/view.ctp:14 -#: Template/TransactionGroupAllowtrades/add.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:17 -#: Template/TransactionGroupAllowtrades/index.ctp:11 -#: Template/TransactionGroupAllowtrades/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:17 -#: Template/TransactionGroupCreates/index.ctp:11 -#: Template/TransactionGroupCreates/view.ctp:14 -#: Template/TransactionSendCoins/add.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:17 -#: Template/TransactionSendCoins/index.ctp:11 -#: Template/TransactionSendCoins/view.ctp:14 -#: Template/TransactionSignatures/add.ctp:11 -#: Template/TransactionSignatures/edit.ctp:17 -#: Template/TransactionSignatures/index.ctp:11 -#: Template/TransactionSignatures/view.ctp:14 -#: Template/TransactionTypes/add.ctp:11 Template/TransactionTypes/edit.ctp:17 -#: Template/TransactionTypes/index.ctp:11 Template/TransactionTypes/view.ctp:14 -#: Template/Transactions/add.ctp:10 Template/Transactions/edit.ctp:16 -#: Template/Transactions/view.ctp:12 -msgid "List Transactions" -msgstr "" - -#: Template/StateCreated/add.ctp:12 Template/StateCreated/edit.ctp:18 -#: Template/StateCreated/index.ctp:12 Template/StateCreated/view.ctp:15 -#: Template/StateGroups/add.ctp:18 Template/StateGroups/edit.ctp:24 -#: Template/StateGroups/index.ctp:18 Template/StateGroups/view.ctp:21 -#: Template/StateUserTransactions/add.ctp:14 -#: Template/StateUserTransactions/edit.ctp:20 -#: Template/StateUserTransactions/index.ctp:14 -#: Template/StateUserTransactions/view.ctp:17 -#: Template/TransactionCreations/add.ctp:12 -#: Template/TransactionCreations/edit.ctp:18 -#: Template/TransactionCreations/index.ctp:12 -#: Template/TransactionCreations/view.ctp:15 -#: Template/TransactionGroupAddaddress/add.ctp:12 -#: Template/TransactionGroupAddaddress/edit.ctp:18 -#: Template/TransactionGroupAddaddress/index.ctp:12 -#: Template/TransactionGroupAddaddress/view.ctp:15 -#: Template/TransactionGroupAllowtrades/add.ctp:12 -#: Template/TransactionGroupAllowtrades/edit.ctp:18 -#: Template/TransactionGroupAllowtrades/index.ctp:12 -#: Template/TransactionGroupAllowtrades/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:12 -#: Template/TransactionGroupCreates/edit.ctp:18 -#: Template/TransactionGroupCreates/index.ctp:12 -#: Template/TransactionGroupCreates/view.ctp:15 -#: Template/TransactionSendCoins/add.ctp:12 -#: Template/TransactionSendCoins/edit.ctp:18 -#: Template/TransactionSendCoins/index.ctp:12 -#: Template/TransactionSendCoins/view.ctp:15 -#: Template/TransactionSignatures/add.ctp:12 -#: Template/TransactionSignatures/edit.ctp:18 -#: Template/TransactionSignatures/index.ctp:12 -#: Template/TransactionSignatures/view.ctp:15 -#: Template/TransactionTypes/add.ctp:12 Template/TransactionTypes/edit.ctp:18 -#: Template/TransactionTypes/index.ctp:12 Template/TransactionTypes/view.ctp:15 -#: Template/Transactions/index.ctp:10 Template/Transactions/view.ctp:13 -msgid "New Transaction" -msgstr "" - -#: Template/StateCreated/add.ctp:20 -msgid "Add State Created" -msgstr "" - -#: Template/StateCreated/edit.ctp:26 Template/StateCreated/view.ctp:10 -msgid "Edit State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:10 Template/StateCreated/view.ctp:13 -#: Template/StateUserRoles/index.ctp:16 Template/StateUsers/add.ctp:16 -#: Template/StateUsers/edit.ctp:22 Template/StateUsers/index.ctp:16 -#: Template/Transactions/add.ctp:16 Template/Transactions/edit.ctp:22 -#: Template/Transactions/index.ctp:16 Template/Transactions/view.ctp:19 -msgid "New State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:18 -msgid "State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:11 -msgid "Delete State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:24 Template/StateUserTransactions/view.ctp:30 -#: Template/StateUsers/view.ctp:53 Template/TransactionCreations/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:22 -#: Template/TransactionGroupCreates/view.ctp:24 -#: Template/TransactionSendCoins/view.ctp:24 -#: Template/TransactionSignatures/view.ctp:22 -msgid "Transaction" -msgstr "" - -#: Template/StateCreated/view.ctp:36 Template/Transactions/view.ctp:61 -msgid "Month" -msgstr "" - -#: Template/StateCreated/view.ctp:40 Template/Transactions/view.ctp:62 -msgid "Year" -msgstr "" - -#: Template/StateCreated/view.ctp:44 Template/Transactions/view.ctp:65 -msgid "Short Ident Hash" -msgstr "" - -#: Template/StateErrors/add.ctp:10 Template/StateErrors/edit.ctp:16 -#: Template/StateErrors/view.ctp:12 -msgid "List State Errors" -msgstr "" - -#: Template/StateErrors/add.ctp:13 Template/StateErrors/edit.ctp:19 -#: Template/StateErrors/index.ctp:13 Template/StateErrors/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:15 -#: Template/StateUserTransactions/edit.ctp:21 -#: Template/StateUserTransactions/index.ctp:15 -#: Template/StateUserTransactions/view.ctp:18 -#: Template/TransactionTypes/add.ctp:10 Template/TransactionTypes/edit.ctp:16 -#: Template/TransactionTypes/view.ctp:12 Template/Transactions/add.ctp:13 -#: Template/Transactions/edit.ctp:19 Template/Transactions/index.ctp:13 -#: Template/Transactions/view.ctp:16 -msgid "List Transaction Types" -msgstr "" - -#: Template/StateErrors/add.ctp:14 Template/StateErrors/edit.ctp:20 -#: Template/StateErrors/index.ctp:14 Template/StateErrors/view.ctp:17 -#: Template/StateUserTransactions/add.ctp:16 -#: Template/StateUserTransactions/edit.ctp:22 -#: Template/StateUserTransactions/index.ctp:16 -#: Template/StateUserTransactions/view.ctp:19 -#: Template/TransactionTypes/index.ctp:10 Template/TransactionTypes/view.ctp:13 -#: Template/Transactions/add.ctp:14 Template/Transactions/edit.ctp:20 -#: Template/Transactions/index.ctp:14 Template/Transactions/view.ctp:17 -msgid "New Transaction Type" -msgstr "" - -#: Template/StateErrors/add.ctp:20 -msgid "Add State Error" -msgstr "" - -#: Template/StateErrors/edit.ctp:26 Template/StateErrors/view.ctp:10 -msgid "Edit State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:10 Template/StateErrors/view.ctp:13 -msgid "New State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:18 -msgid "State Errors" -msgstr "" - -#: Template/StateErrors/show_for_user.ctp:9 -msgid "Fehlermeldungen" -msgstr "" - -#: Template/StateErrors/view.ctp:11 -msgid "Delete State Error" -msgstr "" - -#: Template/StateErrors/view.ctp:28 Template/StateUserTransactions/view.ctp:34 -#: Template/Transactions/view.ctp:42 -msgid "Transaction Type" -msgstr "" - -#: Template/StateErrors/view.ctp:41 -msgid "Message Json" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:17 -#: Template/StateGroupAddresses/index.ctp:11 -#: Template/StateGroupAddresses/view.ctp:14 Template/StateGroups/add.ctp:10 -#: Template/StateGroups/edit.ctp:16 Template/StateGroups/view.ctp:12 -#: Template/StateUserRoles/index.ctp:11 Template/StateUsers/add.ctp:11 -#: Template/StateUsers/edit.ctp:17 Template/StateUsers/index.ctp:11 -#: Template/StateUsers/view.ctp:14 Template/TransactionGroupCreates/add.ctp:13 -#: Template/TransactionGroupCreates/edit.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:13 -#: Template/TransactionGroupCreates/view.ctp:16 -#: Template/Transactions/add.ctp:11 Template/Transactions/edit.ctp:17 -#: Template/Transactions/index.ctp:11 Template/Transactions/view.ctp:14 -msgid "List State Groups" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:12 -#: Template/StateGroupAddresses/edit.ctp:18 -#: Template/StateGroupAddresses/index.ctp:12 -#: Template/StateGroupAddresses/view.ctp:15 Template/StateGroups/index.ctp:10 -#: Template/StateGroups/view.ctp:13 Template/StateUserRoles/index.ctp:12 -#: Template/StateUsers/add.ctp:12 Template/StateUsers/edit.ctp:18 -#: Template/StateUsers/index.ctp:12 Template/StateUsers/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:14 -#: Template/TransactionGroupCreates/edit.ctp:20 -#: Template/TransactionGroupCreates/index.ctp:14 -#: Template/TransactionGroupCreates/view.ctp:17 -#: Template/Transactions/add.ctp:12 Template/Transactions/edit.ctp:18 -#: Template/Transactions/index.ctp:12 Template/Transactions/view.ctp:15 -msgid "New State Group" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:20 -msgid "Add State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/edit.ctp:26 -#: Template/StateGroupAddresses/view.ctp:10 -msgid "Edit State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:18 -msgid "State Group Addresses" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:25 -#: Template/TransactionGroupAddaddress/index.ctp:25 -msgid "user public key" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:11 -msgid "Delete State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:28 -msgid "Address Type" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:10 -#: Template/StateGroupRelationships/edit.ctp:16 -#: Template/StateGroupRelationships/view.ctp:12 -msgid "List State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:16 -msgid "Add State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/edit.ctp:22 -#: Template/StateGroupRelationships/view.ctp:10 -msgid "Edit State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:10 -#: Template/StateGroupRelationships/view.ctp:13 -msgid "New State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:14 -msgid "State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:11 -msgid "Delete State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:24 -msgid "State Group1 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:28 -msgid "State Group2 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:32 -msgid "State Relationship Id" -msgstr "" - -#: Template/StateGroups/add.ctp:15 Template/StateGroups/edit.ctp:21 -#: Template/StateGroups/index.ctp:15 Template/StateGroups/view.ctp:18 -#: Template/TransactionGroupCreates/add.ctp:10 -#: Template/TransactionGroupCreates/edit.ctp:16 -#: Template/TransactionGroupCreates/view.ctp:12 -#: Template/Transactions/add.ctp:23 Template/Transactions/edit.ctp:29 -#: Template/Transactions/index.ctp:23 Template/Transactions/view.ctp:26 -msgid "List Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/add.ctp:16 Template/StateGroups/edit.ctp:22 -#: Template/StateGroups/index.ctp:16 Template/StateGroups/view.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:10 -#: Template/TransactionGroupCreates/view.ctp:13 -#: Template/Transactions/add.ctp:24 Template/Transactions/edit.ctp:30 -#: Template/Transactions/index.ctp:24 Template/Transactions/view.ctp:27 -msgid "New Transaction Group Create" -msgstr "" - -#: Template/StateGroups/add.ctp:24 -msgid "Add State Group" -msgstr "" - -#: Template/StateGroups/edit.ctp:30 Template/StateGroups/view.ctp:10 -msgid "Edit State Group" -msgstr "" - -#: Template/StateGroups/index.ctp:22 -msgid "State Groups" -msgstr "" - -#: Template/StateGroups/view.ctp:11 -msgid "Delete State Group" -msgstr "" - -#: Template/StateGroups/view.ctp:36 -msgid "User Count" -msgstr "" - -#: Template/StateGroups/view.ctp:46 Template/StateGroups/view.ctp:74 -#: Template/StateGroups/view.ctp:102 Template/StateGroups/view.ctp:129 -#: Template/TransactionTypes/view.ctp:40 Template/Transactions/view.ctp:178 -msgid "State Group Id" -msgstr "" - -#: Template/StateGroups/view.ctp:68 -msgid "Related State Users" -msgstr "" - -#: Template/StateGroups/view.ctp:73 -msgid "Index Id" -msgstr "" - -#: Template/StateGroups/view.ctp:95 Template/Transactions/view.ctp:171 -msgid "Related Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/view.ctp:101 Template/Transactions/view.ctp:177 -msgid "Group Public Key" -msgstr "" - -#: Template/StateGroups/view.ctp:124 Template/TransactionTypes/view.ctp:35 -msgid "Related Transactions" -msgstr "" - -#: Template/StateGroups/view.ctp:130 Template/TransactionTypes/view.ctp:41 -msgid "Transaction Type Id" -msgstr "" - -#: Template/StateGroups/view.ctp:131 Template/TransactionTypes/view.ctp:42 -msgid "Tx Hash" -msgstr "" - -#: Template/StateGroups/view.ctp:132 Template/TransactionTypes/view.ctp:43 -#: Template/Transactions/view.ctp:50 -msgid "Received" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:10 -#: Template/StateRelationshipTypes/edit.ctp:16 -#: Template/StateRelationshipTypes/view.ctp:12 -msgid "List State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:16 -msgid "Add State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/edit.ctp:22 -#: Template/StateRelationshipTypes/view.ctp:10 -msgid "Edit State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:10 -#: Template/StateRelationshipTypes/view.ctp:13 -msgid "New State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:14 -msgid "State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/view.ctp:11 -msgid "Delete State Relationship Type" -msgstr "" - -#: Template/StateUserRoles/assign_role.ctp:9 -#: Template/StateUserRoles/assign_role.ctp:46 -#: Template/StateUserRoles/search.ctp:47 -msgid "Assign Role" -msgstr "" - -#: Template/StateUserRoles/index.ctp:17 Template/StateUsers/add.ctp:17 -#: Template/StateUsers/edit.ctp:23 Template/StateUsers/index.ctp:17 -#: Template/StateUsers/view.ctp:18 Template/TransactionCreations/add.ctp:10 -#: Template/TransactionCreations/edit.ctp:16 -#: Template/TransactionCreations/view.ctp:12 Template/Transactions/add.ctp:17 -#: Template/Transactions/edit.ctp:23 Template/Transactions/index.ctp:17 -#: Template/Transactions/view.ctp:20 -msgid "List Transaction Creations" -msgstr "" - -#: Template/StateUserRoles/index.ctp:18 Template/StateUsers/add.ctp:18 -#: Template/StateUsers/edit.ctp:24 Template/StateUsers/index.ctp:18 -#: Template/StateUsers/view.ctp:19 Template/TransactionCreations/index.ctp:10 -#: Template/TransactionCreations/view.ctp:13 Template/Transactions/add.ctp:18 -#: Template/Transactions/edit.ctp:24 Template/Transactions/index.ctp:18 -#: Template/Transactions/view.ctp:21 -msgid "New Transaction Creation" -msgstr "" - -#: Template/StateUserRoles/index.ctp:19 Template/StateUsers/add.ctp:19 -#: Template/StateUsers/edit.ctp:25 Template/StateUsers/index.ctp:19 -#: Template/StateUsers/view.ctp:20 Template/TransactionSendCoins/add.ctp:10 -#: Template/TransactionSendCoins/edit.ctp:16 -#: Template/TransactionSendCoins/view.ctp:12 Template/Transactions/add.ctp:25 -#: Template/Transactions/edit.ctp:31 Template/Transactions/index.ctp:25 -#: Template/Transactions/view.ctp:28 -msgid "List Transaction Send Coins" -msgstr "" - -#: Template/StateUserRoles/index.ctp:20 Template/StateUsers/add.ctp:20 -#: Template/StateUsers/edit.ctp:26 Template/StateUsers/index.ctp:20 -#: Template/StateUsers/view.ctp:21 Template/TransactionSendCoins/index.ctp:10 -#: Template/TransactionSendCoins/view.ctp:13 Template/Transactions/add.ctp:26 -#: Template/Transactions/edit.ctp:32 Template/Transactions/index.ctp:26 -#: Template/Transactions/view.ctp:29 -msgid "New Transaction Send Coin" -msgstr "" - -#: Template/StateUserRoles/index.ctp:24 Template/StateUserRoles/search.ctp:25 -#: Template/StateUsers/index.ctp:24 -msgid "State Users" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57 -msgid "Suchbegriff" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57 -msgid "Vorname/Nachname/E-Mail" -msgstr "" - -#: Template/StateUserRoles/search.ctp:20 Template/StateUsers/search.ctp:59 -#: Template/TransactionCreations/create_multi.ctp:35 -msgid "Suchen" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:10 -#: Template/StateUserTransactions/edit.ctp:16 -#: Template/StateUserTransactions/view.ctp:12 -msgid "List State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:22 -msgid "Add State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/edit.ctp:28 -#: Template/StateUserTransactions/view.ctp:10 -msgid "Edit State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:10 -#: Template/StateUserTransactions/view.ctp:13 -msgid "New State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:20 -msgid "State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/view.ctp:11 -msgid "Delete State User Transaction" -msgstr "" - -#: Template/StateUsers/add.ctp:26 -msgid "Add State User" -msgstr "" - -#: Template/StateUsers/edit.ctp:32 Template/StateUsers/view.ctp:10 -msgid "Edit State User" -msgstr "" - -#: Template/StateUsers/search.ctp:16 -msgid "Alle" -msgstr "" - -#: Template/StateUsers/search.ctp:21 -msgid "Konto nicht aktiviert" -msgstr "" - -#: Template/StateUsers/search.ctp:58 -msgid "Konto Status" -msgstr "" - -#: Template/StateUsers/view.ctp:11 -msgid "Delete State User" -msgstr "" - -#: Template/StateUsers/view.ctp:28 -msgid "State Balance" -msgstr "" - -#: Template/StateUsers/view.ctp:32 -msgid "Letztes Update" -msgstr "" - -#: Template/StateUsers/view.ctp:49 -msgid "Schöpfungen" -msgstr "" - -#: Template/StateUsers/view.ctp:54 Template/StateUsers/view.ctp:84 -#: Template/StateUsers/view.ctp:118 -msgid "Erhalten" -msgstr "" - -#: Template/StateUsers/view.ctp:55 -msgid "Verrechnungs-Datum" -msgstr "" - -#: Template/StateUsers/view.ctp:79 -msgid "Versendete Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:85 -msgid "Empfänger " -msgstr "" - -#: Template/StateUsers/view.ctp:88 -msgid "Betrag nach Senden" -msgstr "" - -#: Template/StateUsers/view.ctp:113 -msgid "Empfangende Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:119 -msgid "Sender" -msgstr "" - -#: Template/TransactionCreations/add.ctp:20 -msgid "Add Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/create.ctp:17 -#: Template/TransactionCreations/create_multi.ctp:17 -msgid "Schöpfungstransaktion" -msgstr "" - -#: Template/TransactionCreations/create.ctp:28 -#: Template/TransactionCreations/create_multi.ctp:125 -msgid "Transaktion(en) abschließen" -msgstr "" - -#: Template/TransactionCreations/create.ctp:29 -#: Template/TransactionCreations/create_multi.ctp:126 -#: Template/TransactionSendCoins/create.ctp:24 -msgid "Weitere Transaktion erstellen" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:34 -msgid "Suche" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:38 -msgid "Memo" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:39 -#: Template/TransactionSendCoins/create.ctp:22 -#: Template/TransactionSendCoins/create_raw.ctp:33 -msgid "Betrag in GDD" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:46 -msgid "Zieldatum" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:81 -msgid "Für benutzerdefinierten Betrag" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:189 -msgid "Alle Transaktionen abgeschlossen!" -msgstr "" - -#: Template/TransactionCreations/edit.ctp:26 -#: Template/TransactionCreations/view.ctp:10 -msgid "Edit Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/index.ctp:18 -msgid "Transaction Creations" -msgstr "" - -#: Template/TransactionCreations/view.ctp:11 -msgid "Delete Transaction Creation" -msgstr "" - -#: Template/TransactionGroupAddaddress/add.ctp:20 -msgid "Add Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/edit.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:10 -msgid "Edit Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/index.ctp:18 -msgid "Transaction Group Addaddress" -msgstr "" - -#: Template/TransactionGroupAddaddress/view.ctp:11 -msgid "Delete Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:10 -#: Template/TransactionGroupAllowtrades/edit.ctp:16 -#: Template/TransactionGroupAllowtrades/view.ctp:12 -#: Template/Transactions/add.ctp:21 Template/Transactions/edit.ctp:27 -#: Template/Transactions/index.ctp:21 Template/Transactions/view.ctp:24 -msgid "List Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:18 -msgid "Add Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/edit.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:10 -msgid "Edit Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:10 -#: Template/TransactionGroupAllowtrades/view.ctp:13 -#: Template/Transactions/add.ctp:22 Template/Transactions/edit.ctp:28 -#: Template/Transactions/index.ctp:22 Template/Transactions/view.ctp:25 -msgid "New Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:16 -msgid "Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:11 -msgid "Delete Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:34 -#: Template/Transactions/view.ctp:151 -msgid "Allow" -msgstr "" - -#: Template/TransactionGroupCreates/add.ctp:20 -msgid "Add Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/edit.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:10 -msgid "Edit Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/index.ctp:18 -msgid "Transaction Group Creates" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:11 -msgid "Delete Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:28 -#: Template/Transactions/view.ctp:38 -msgid "State Group" -msgstr "" - -#: Template/TransactionSendCoins/add.ctp:20 -msgid "Add Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:19 -msgid "Empfänger" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:20 -msgid "Community Alias" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:23 -#: Template/TransactionSendCoins/create_raw.ctp:34 -msgid "Transaktion abschließen" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:29 -msgid "Sender Private Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:30 -msgid "Sender Public Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:31 -msgid "Empfänger Public Key" -msgstr "" - -#: Template/TransactionSendCoins/edit.ctp:26 -#: Template/TransactionSendCoins/view.ctp:10 -msgid "Edit Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/index.ctp:18 -msgid "Transaction Send Coins" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:11 -msgid "Delete Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:40 Template/Transactions/view.ctp:210 -msgid "Sender Final Balance" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:10 -#: Template/TransactionSignatures/edit.ctp:16 -#: Template/TransactionSignatures/view.ctp:12 Template/Transactions/add.ctp:27 -#: Template/Transactions/edit.ctp:33 Template/Transactions/index.ctp:27 -#: Template/Transactions/view.ctp:30 -msgid "List Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:18 -msgid "Add Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/edit.ctp:24 -#: Template/TransactionSignatures/view.ctp:10 -msgid "Edit Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:10 -#: Template/TransactionSignatures/view.ctp:13 Template/Transactions/add.ctp:28 -#: Template/Transactions/edit.ctp:34 Template/Transactions/index.ctp:28 -#: Template/Transactions/view.ctp:31 -msgid "New Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:16 -msgid "Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/view.ctp:11 -msgid "Delete Transaction Signature" -msgstr "" - -#: Template/TransactionTypes/add.ctp:18 -msgid "Add Transaction Type" -msgstr "" - -#: Template/TransactionTypes/edit.ctp:24 Template/TransactionTypes/view.ctp:10 -msgid "Edit Transaction Type" -msgstr "" - -#: Template/TransactionTypes/index.ctp:16 -msgid "Transaction Types" -msgstr "" - -#: Template/TransactionTypes/view.ctp:11 -msgid "Delete Transaction Type" -msgstr "" - -#: Template/Transactions/add.ctp:34 -msgid "Add Transaction" -msgstr "" - -#: Template/Transactions/edit.ctp:40 Template/Transactions/view.ctp:10 -msgid "Edit Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:26 -msgid "Creation Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:41 -msgid "Transfer Transaction" -msgstr "" - -#: Template/Transactions/send_to_node.ctp:8 -msgid "Transaktionen an Gradido-Node senden" -msgstr "" - -#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44 -msgid "Synchronize" -msgstr "" - -#: Template/Transactions/view.ctp:11 -msgid "Delete Transaction" -msgstr "" - -#: Template/Transactions/view.ctp:55 -msgid "Related State Created" -msgstr "" - -#: Template/Transactions/view.ctp:88 -msgid "Related Transaction Creations" -msgstr "" - -#: Template/Transactions/view.ctp:96 -msgid "Ident Hash" -msgstr "" - -#: Template/Transactions/view.ctp:144 -msgid "Related Transaction Group Allowtrades" -msgstr "" - -#: Template/Transactions/view.ctp:200 -msgid "Related Transaction Send Coins" -msgstr "" - -#: Template/Transactions/view.ctp:207 -msgid "Receiver Public Key" -msgstr "" - -#: Template/Transactions/view.ctp:208 -msgid "Receiver User Id" -msgstr "" - -#: Template/Transactions/view.ctp:233 -msgid "Related Transaction Signatures" -msgstr "" - -#: Template/Transactions/view.ctp:239 -msgid "Signature" -msgstr "" - -#: Template/Transactions/view.ctp:240 -msgid "Pubkey" -msgstr "" - -#: Template/Users/add.ctp:10 Template/Users/edit.ctp:16 -#: Template/Users/view.ctp:12 -msgid "List Users" -msgstr "" - -#: Template/Users/add.ctp:16 -msgid "Add User" -msgstr "" - -#: Template/Users/edit.ctp:22 Template/Users/view.ctp:10 -msgid "Edit User" -msgstr "" - -#: Template/Users/index.ctp:10 Template/Users/view.ctp:13 -msgid "New User" -msgstr "" - -#: Template/Users/index.ctp:14 -msgid "Users" -msgstr "" - -#: Template/Users/statistics.ctp:9 -msgid "Benutzer Statistiken" -msgstr "" - -#: Template/Users/statistics.ctp:39 -msgid "Alle Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:56 -msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl" -msgstr "" - -#: Template/Users/statistics.ctp:61 -msgid "Letzte Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:66 -msgid "Erstellt" -msgstr "" - -#: Template/Users/statistics.ctp:79 -msgid "Anmeldungen detailliert" -msgstr "" - -#: Template/Users/statistics.ctp:82 -msgid "Jahr" -msgstr "" - -#: Template/Users/statistics.ctp:83 -msgid "Monat" -msgstr "" - -#: Template/Users/statistics.ctp:84 -msgid "Anzahl Anmeldungen" -msgstr "" - -#: Template/Users/view.ctp:11 -msgid "Delete User" -msgstr "" - -#: Template/Users/view.ctp:24 -msgid "First Name" -msgstr "" - -#: Template/Users/view.ctp:28 -msgid "Last Name" -msgstr "" - -#: Template/Users/view.ctp:32 -msgid "Language" -msgstr "" - -#: Template/Users/view.ctp:48 -msgid "Email Checked" -msgstr "" diff --git a/community_server/src/Locale/default.pot b/community_server/src/Locale/default.pot deleted file mode 100644 index 0c9ada315..000000000 --- a/community_server/src/Locale/default.pot +++ /dev/null @@ -1,3566 +0,0 @@ -# LANGUAGE translation of CakePHP Application -# Copyright YEAR NAME -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2021-08-11 11:38+0000\n" -"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" -"Last-Translator: NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: Controller/AddressTypesController.php:54 -#: Controller/AddressTypesController.php:78 -msgid "The address type has been saved." -msgstr "" - -#: Controller/AddressTypesController.php:58 -#: Controller/AddressTypesController.php:82 -msgid "The address type could not be saved. Please, try again." -msgstr "" - -#: Controller/AddressTypesController.php:99 -msgid "The address type has been deleted." -msgstr "" - -#: Controller/AddressTypesController.php:101 -msgid "The address type could not be deleted. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:57 -#: Controller/AdminErrorsController.php:82 -msgid "The admin error has been saved." -msgstr "" - -#: Controller/AdminErrorsController.php:61 -#: Controller/AdminErrorsController.php:86 -msgid "The admin error could not be saved. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:104 -msgid "The admin error has been deleted." -msgstr "" - -#: Controller/AdminErrorsController.php:106 -msgid "The admin error could not be deleted. Please, try again." -msgstr "" - -#: Controller/AppController.php:262 -msgid "error updating state user " -msgstr "" - -#: Controller/AppController.php:276 -msgid "error saving state user " -msgstr "" - -#: Controller/AppController.php:286 -msgid "no pubkey" -msgstr "" - -#: Controller/AppController.php:295 -msgid "invalid session" -msgstr "" - -#: Controller/AppController.php:297 -msgid "Konto ist nicht aktiviert!" -msgstr "" - -#: Controller/AppController.php:311 -#: Controller/StateUsersController.php:103 -msgid "error http request: " -msgstr "" - -#: Controller/AppController.php:358 -msgid "(Leere Message)" -msgstr "" - -#: Controller/AppController.php:363 -msgid "(Leere Details)" -msgstr "" - -#: Controller/AppController.php:367 -msgid "Serious error, couldn't save to db, please write the admin: " -msgstr "" - -#: Controller/BlockchainTypesController.php:54 -#: Controller/BlockchainTypesController.php:78 -msgid "The blockchain type has been saved." -msgstr "" - -#: Controller/BlockchainTypesController.php:58 -#: Controller/BlockchainTypesController.php:82 -msgid "The blockchain type could not be saved. Please, try again." -msgstr "" - -#: Controller/BlockchainTypesController.php:99 -msgid "The blockchain type has been deleted." -msgstr "" - -#: Controller/BlockchainTypesController.php:101 -msgid "The blockchain type could not be deleted. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:54 -#: Controller/CommunityProfilesController.php:78 -msgid "The community profile has been saved." -msgstr "" - -#: Controller/CommunityProfilesController.php:58 -#: Controller/CommunityProfilesController.php:82 -msgid "The community profile could not be saved. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:99 -msgid "The community profile has been deleted." -msgstr "" - -#: Controller/CommunityProfilesController.php:101 -msgid "The community profile could not be deleted. Please, try again." -msgstr "" - -#: Controller/DashboardController.php:29 -#: Controller/ProfileController.php:28 -#: Controller/StateBalancesController.php:52 -#: Controller/StateBalancesController.php:202 -#: Controller/StateErrorsController.php:26 -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Controller/TransactionCreationsController.php:42 -#: Controller/TransactionSendCoinsController.php:44 -#: Controller/UsersController.php:26 -#: Template/Element/navi.ctp:33 -msgid "Startseite" -msgstr "" - -#: Controller/ElopageBuysController.php:112 -#: Controller/ElopageBuysController.php:137 -msgid "The elopage buy has been saved." -msgstr "" - -#: Controller/ElopageBuysController.php:116 -#: Controller/ElopageBuysController.php:141 -msgid "The elopage buy could not be saved. Please, try again." -msgstr "" - -#: Controller/ElopageBuysController.php:158 -msgid "The elopage buy has been deleted." -msgstr "" - -#: Controller/ElopageBuysController.php:160 -msgid "The elopage buy could not be deleted. Please, try again." -msgstr "" - -#: Controller/JsonRequestHandlerController.php:366 -msgid "Gradido Transaktion fehlgeschlagen!" -msgstr "" - -#: Controller/OperatorTypesController.php:54 -#: Controller/OperatorTypesController.php:78 -msgid "The operator type has been saved." -msgstr "" - -#: Controller/OperatorTypesController.php:58 -#: Controller/OperatorTypesController.php:82 -msgid "The operator type could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorTypesController.php:99 -msgid "The operator type has been deleted." -msgstr "" - -#: Controller/OperatorTypesController.php:101 -msgid "The operator type could not be deleted. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:182 -#: Controller/OperatorsController.php:207 -msgid "The operator has been saved." -msgstr "" - -#: Controller/OperatorsController.php:186 -#: Controller/OperatorsController.php:211 -msgid "The operator could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:229 -msgid "The operator has been deleted." -msgstr "" - -#: Controller/OperatorsController.php:231 -msgid "The operator could not be deleted. Please, try again." -msgstr "" - -#: Controller/ProfileController.php:29 -#: Template/Element/user_menu.ctp:15 -#: Template/Profile/index.ctp:19 -msgid "Mein Profil" -msgstr "" - -#: Controller/ProfileController.php:108 -msgid "Dein Profil wurde aktualisiert!" -msgstr "" - -#: Controller/ProfileController.php:111 -msgid "Non-recoverable database problem - state_user doesn't exist or not unique!" -msgstr "" - -#: Controller/ProfileController.php:198 -#: Controller/StateUserRolesController.php:117 -#: Controller/StateUsersController.php:291 -#: Controller/TransactionCreationsController.php:183 -msgid "Something was invalid, please try again!" -msgstr "" - -#: Controller/RolesController.php:56 -#: Controller/RolesController.php:80 -msgid "The role has been saved." -msgstr "" - -#: Controller/RolesController.php:60 -#: Controller/RolesController.php:84 -msgid "The role could not be saved. Please, try again." -msgstr "" - -#: Controller/RolesController.php:101 -msgid "The role has been deleted." -msgstr "" - -#: Controller/RolesController.php:103 -msgid "The role could not be deleted. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:42 -msgid "Invalid username or password, try again" -msgstr "" - -#: Controller/ServerUsersController.php:79 -#: Controller/ServerUsersController.php:103 -msgid "The server user has been saved." -msgstr "" - -#: Controller/ServerUsersController.php:83 -#: Controller/ServerUsersController.php:107 -msgid "The server user could not be saved. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:124 -msgid "The server user has been deleted." -msgstr "" - -#: Controller/ServerUsersController.php:126 -msgid "The server user could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:53 -#: Template/Dashboard/index.ctp:30 -#: Template/Element/navi.ctp:22 -#: Template/StateBalances/overview.ctp:8 -msgid "Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:203 -#: Template/StateBalances/overview_gdt.ctp:20 -msgid "GDT Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:252 -msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!" -msgstr "" - -#: Controller/StateBalancesController.php:351 -#: Controller/StateBalancesController.php:376 -msgid "The state balance has been saved." -msgstr "" - -#: Controller/StateBalancesController.php:355 -#: Controller/StateBalancesController.php:380 -msgid "The state balance could not be saved. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:398 -msgid "The state balance has been deleted." -msgstr "" - -#: Controller/StateBalancesController.php:400 -msgid "The state balance could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:57 -#: Controller/StateCreatedController.php:83 -msgid "The state created has been saved." -msgstr "" - -#: Controller/StateCreatedController.php:61 -#: Controller/StateCreatedController.php:87 -msgid "The state created could not be saved. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:106 -msgid "The state created has been deleted." -msgstr "" - -#: Controller/StateCreatedController.php:108 -msgid "The state created could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:27 -#: Template/Dashboard/index.ctp:79 -#: Template/Dashboard/server_index.ctp:31 -#: Template/Element/navi_header.ctp:33 -#: Template/Element/navi_notify.ctp:32 -msgid "Fehler" -msgstr "" - -#: Controller/StateErrorsController.php:75 -msgid "Error belongs to another User, cannot delete" -msgstr "" - -#: Controller/StateErrorsController.php:78 -#: Controller/StateErrorsController.php:166 -msgid "The state error has been deleted." -msgstr "" - -#: Controller/StateErrorsController.php:80 -#: Controller/StateErrorsController.php:168 -msgid "The state error could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:117 -#: Controller/StateErrorsController.php:143 -msgid "The state error has been saved." -msgstr "" - -#: Controller/StateErrorsController.php:121 -#: Controller/StateErrorsController.php:147 -msgid "The state error could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:57 -#: Controller/StateGroupAddressesController.php:83 -msgid "The state group address has been saved." -msgstr "" - -#: Controller/StateGroupAddressesController.php:61 -#: Controller/StateGroupAddressesController.php:87 -msgid "The state group address could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:106 -msgid "The state group address has been deleted." -msgstr "" - -#: Controller/StateGroupAddressesController.php:108 -msgid "The state group address could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:57 -#: Controller/StateGroupRelationshipsController.php:84 -msgid "The state group relationship has been saved." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:61 -#: Controller/StateGroupRelationshipsController.php:88 -msgid "The state group relationship could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:108 -msgid "The state group relationship has been deleted." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:110 -msgid "The state group relationship could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:57 -#: Controller/StateGroupsController.php:82 -msgid "The state group has been saved." -msgstr "" - -#: Controller/StateGroupsController.php:61 -#: Controller/StateGroupsController.php:86 -msgid "The state group could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:104 -msgid "The state group has been deleted." -msgstr "" - -#: Controller/StateGroupsController.php:106 -msgid "The state group could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:54 -#: Controller/StateRelationshipTypesController.php:78 -msgid "The state relationship type has been saved." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:58 -#: Controller/StateRelationshipTypesController.php:82 -msgid "The state relationship type could not be saved. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:99 -msgid "The state relationship type has been deleted." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:101 -msgid "The state relationship type could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Template/StateUserRoles/search.ctp:9 -#: Template/StateUsers/search.ctp:9 -msgid "Benutzer suchen" -msgstr "" - -#: Controller/StateUserRolesController.php:149 -msgid "Role has been assigned to User." -msgstr "" - -#: Controller/StateUserTransactionsController.php:233 -#: Controller/StateUserTransactionsController.php:260 -msgid "The state user transaction has been saved." -msgstr "" - -#: Controller/StateUserTransactionsController.php:237 -#: Controller/StateUserTransactionsController.php:264 -msgid "The state user transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUserTransactionsController.php:284 -msgid "The state user transaction has been deleted." -msgstr "" - -#: Controller/StateUserTransactionsController.php:286 -msgid "The state user transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:21 -msgid "account created" -msgstr "" - -#: Controller/StateUsersController.php:22 -msgid "account not on login-server" -msgstr "" - -#: Controller/StateUsersController.php:23 -msgid "email activated" -msgstr "" - -#: Controller/StateUsersController.php:24 -msgid "account copied to community" -msgstr "" - -#: Controller/StateUsersController.php:25 -msgid "email not activated" -msgstr "" - -#: Controller/StateUsersController.php:26 -msgid "account multiple times on login-server" -msgstr "" - -#: Controller/StateUsersController.php:27 -msgid "account not on community server" -msgstr "" - -#: Controller/StateUsersController.php:28 -msgid "no keys" -msgstr "" - -#: Controller/StateUsersController.php:560 -#: Controller/StateUsersController.php:586 -msgid "The state user has been saved." -msgstr "" - -#: Controller/StateUsersController.php:564 -#: Controller/StateUsersController.php:590 -msgid "The state user could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:609 -msgid "The state user has been deleted." -msgstr "" - -#: Controller/StateUsersController.php:611 -msgid "The state user could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:42 -msgid "Gradido schöpfen" -msgstr "" - -#: Controller/TransactionCreationsController.php:149 -#: Controller/TransactionCreationsController.php:385 -#: Controller/TransactionCreationsController.php:408 -msgid "Error by requesting LoginServer, please try again" -msgstr "" - -#: Controller/TransactionCreationsController.php:151 -#: Controller/TransactionCreationsController.php:410 -msgid "Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:161 -msgid "Login Server Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:174 -#: Controller/TransactionCreationsController.php:491 -#: Controller/TransactionSendCoinsController.php:204 -msgid "Transaction submitted for review." -msgstr "" - -#: Controller/TransactionCreationsController.php:179 -msgid "Building transaction failed" -msgstr "" - -#: Controller/TransactionCreationsController.php:342 -msgid "No user selected" -msgstr "" - -#: Controller/TransactionCreationsController.php:442 -#: Controller/TransactionSendCoinsController.php:231 -msgid "Fehler mit der Session, bitte logge dich erneut ein!" -msgstr "" - -#: Controller/TransactionCreationsController.php:447 -msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!" -msgstr "" - -#: Controller/TransactionCreationsController.php:452 -#: Controller/TransactionSendCoinsController.php:246 -msgid "Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?" -msgstr "" - -#: Controller/TransactionCreationsController.php:456 -#: Controller/TransactionSendCoinsController.php:250 -msgid "Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden." -msgstr "" - -#: Controller/TransactionCreationsController.php:460 -msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein." -msgstr "" - -#: Controller/TransactionCreationsController.php:464 -#: Controller/TransactionSendCoinsController.php:254 -msgid "Unbehandelter Fehler: " -msgstr "" - -#: Controller/TransactionCreationsController.php:625 -#: Controller/TransactionCreationsController.php:651 -msgid "The transaction creation has been saved." -msgstr "" - -#: Controller/TransactionCreationsController.php:629 -#: Controller/TransactionCreationsController.php:655 -msgid "The transaction creation could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:674 -msgid "The transaction creation has been deleted." -msgstr "" - -#: Controller/TransactionCreationsController.php:676 -msgid "The transaction creation could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:57 -#: Controller/TransactionGroupAddaddressController.php:83 -msgid "The transaction group addaddres has been saved." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:61 -#: Controller/TransactionGroupAddaddressController.php:87 -msgid "The transaction group addaddres could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:106 -msgid "The transaction group addaddres has been deleted." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:108 -msgid "The transaction group addaddres could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:57 -#: Controller/TransactionGroupAllowtradesController.php:83 -msgid "The transaction group allowtrade has been saved." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:61 -#: Controller/TransactionGroupAllowtradesController.php:87 -msgid "The transaction group allowtrade could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:106 -msgid "The transaction group allowtrade has been deleted." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:108 -msgid "The transaction group allowtrade could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:57 -#: Controller/TransactionGroupCreatesController.php:83 -msgid "The transaction group create has been saved." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:61 -#: Controller/TransactionGroupCreatesController.php:87 -msgid "The transaction group create could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:106 -msgid "The transaction group create has been deleted." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:108 -msgid "The transaction group create could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:45 -#: Template/Dashboard/index.ctp:38 -#: Template/Element/navi.ctp:34 -#: Template/StateUsers/view.ctp:83 -#: Template/StateUsers/view.ctp:117 -#: Template/TransactionSendCoins/create.ctp:9 -#: Template/TransactionSendCoins/create_raw.ctp:9 -msgid "Überweisung" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:92 -#: Controller/TransactionSendCoinsController.php:119 -msgid "The transaction send coin has been saved." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:96 -#: Controller/TransactionSendCoinsController.php:123 -msgid "The transaction send coin could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:173 -msgid "Du hast nicht genug Gradidos!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:179 -msgid "Du kannst dir selbst keine Gradidos senden!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:236 -msgid "Empfänger befindet sich nicht in Zielgruppe!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:241 -msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:428 -msgid "Error validating transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:431 -msgid "Error saving transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:433 -msgid "Gradidos erfolgreich überwiesen!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:437 -msgid "Error building transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:462 -msgid "The transaction send coin has been deleted." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:464 -msgid "The transaction send coin could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:57 -#: Controller/TransactionSignaturesController.php:82 -msgid "The transaction signature has been saved." -msgstr "" - -#: Controller/TransactionSignaturesController.php:61 -#: Controller/TransactionSignaturesController.php:86 -msgid "The transaction signature could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:104 -msgid "The transaction signature has been deleted." -msgstr "" - -#: Controller/TransactionSignaturesController.php:106 -msgid "The transaction signature could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:54 -#: Controller/TransactionTypesController.php:78 -msgid "The transaction type has been saved." -msgstr "" - -#: Controller/TransactionTypesController.php:58 -#: Controller/TransactionTypesController.php:82 -msgid "The transaction type could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:99 -msgid "The transaction type has been deleted." -msgstr "" - -#: Controller/TransactionTypesController.php:101 -msgid "The transaction type could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:252 -msgid "No valid data given, please try again." -msgstr "" - -#: Controller/TransactionsController.php:289 -msgid "error retriving last saved transaction from gradido node." -msgstr "" - -#: Controller/TransactionsController.php:391 -#: Controller/TransactionsController.php:420 -msgid "The transaction has been saved." -msgstr "" - -#: Controller/TransactionsController.php:394 -msgid "Error by saving: " -msgstr "" - -#: Controller/TransactionsController.php:397 -#: Controller/TransactionsController.php:424 -msgid "The transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:443 -msgid "The transaction has been deleted." -msgstr "" - -#: Controller/TransactionsController.php:445 -msgid "The transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/UsersController.php:26 -msgid "Benutzerstatistiken" -msgstr "" - -#: Controller/UsersController.php:115 -#: Controller/UsersController.php:139 -msgid "The user has been saved." -msgstr "" - -#: Controller/UsersController.php:119 -#: Controller/UsersController.php:143 -msgid "The user could not be saved. Please, try again." -msgstr "" - -#: Controller/UsersController.php:160 -msgid "The user has been deleted." -msgstr "" - -#: Controller/UsersController.php:162 -msgid "The user could not be deleted. Please, try again." -msgstr "" - -#: Form/CreationForm.php:44 -#: Form/ProfileForm.php:39 -#: Form/TransferForm.php:42 -#: Form/TransferForm.php:53 -#: Form/TransferRawForm.php:35 -msgid "No HTML Tags like > or < please." -msgstr "" - -#: Form/CreationForm.php:56 -msgid "Please give a valid number with maximal 2 decimal places" -msgstr "" - -#: Form/ProfileForm.php:26 -msgid "The first name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:30 -msgid "The last name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:34 -msgid "The description should contain max 2000 characters" -msgstr "" - -#: Form/TransferForm.php:36 -msgid "A valid email address is required" -msgstr "" - -#: Form/TransferForm.php:46 -#: Form/TransferRawForm.php:29 -msgid "The memo should contain max 150 character" -msgstr "" - -#: Form/TransferForm.php:65 -#: Form/TransferRawForm.php:56 -msgid "Please give a valid positive number with maximal 2 decimal places" -msgstr "" - -#: Form/UserSearchForm.php:34 -msgid "The search text should contain max 50 character" -msgstr "" - -#: Form/UserSearchForm.php:41 -msgid "No HTML Tags like < or > please." -msgstr "" - -#: Model/Table/ServerUsersTable.php:58 -msgid "Please give a username" -msgstr "" - -#: Model/Table/ServerUsersTable.php:64 -msgid "Please give a password" -msgstr "" - -#: Model/Table/ServerUsersTable.php:69 -msgid "Please give a email" -msgstr "" - -#: Model/Transactions/TransactionCreation.php:209 -msgid "Gradido Schöpfung erhalten" -msgstr "" - -#: Model/Transactions/TransactionTransfer.php:210 -msgid "Gradidos erhalten" -msgstr "" - -#: Template/AddressTypes/add.ctp:9 -#: Template/AddressTypes/edit.ctp:9 -#: Template/AddressTypes/index.ctp:9 -#: Template/AddressTypes/index.ctp:25 -#: Template/AddressTypes/view.ctp:9 -#: Template/AddressTypes/view.ctp:45 -#: Template/AddressTypes/view.ctp:73 -#: Template/AdminErrors/add.ctp:9 -#: Template/AdminErrors/edit.ctp:9 -#: Template/AdminErrors/index.ctp:9 -#: Template/AdminErrors/index.ctp:26 -#: Template/AdminErrors/view.ctp:9 -#: Template/BlockchainTypes/add.ctp:9 -#: Template/BlockchainTypes/edit.ctp:9 -#: Template/BlockchainTypes/index.ctp:9 -#: Template/BlockchainTypes/index.ctp:22 -#: Template/BlockchainTypes/view.ctp:9 -#: Template/CommunityProfiles/add.ctp:9 -#: Template/CommunityProfiles/edit.ctp:9 -#: Template/CommunityProfiles/index.ctp:9 -#: Template/CommunityProfiles/index.ctp:21 -#: Template/CommunityProfiles/view.ctp:9 -#: Template/ElopageBuys/add.ctp:9 -#: Template/ElopageBuys/edit.ctp:9 -#: Template/ElopageBuys/index.ctp:9 -#: Template/ElopageBuys/index.ctp:30 -#: Template/ElopageBuys/view.ctp:9 -#: Template/OperatorTypes/add.ctp:9 -#: Template/OperatorTypes/edit.ctp:9 -#: Template/OperatorTypes/index.ctp:9 -#: Template/OperatorTypes/index.ctp:23 -#: Template/OperatorTypes/view.ctp:9 -#: Template/OperatorTypes/view.ctp:43 -#: Template/Operators/add.ctp:9 -#: Template/Operators/edit.ctp:9 -#: Template/Operators/index.ctp:9 -#: Template/Operators/index.ctp:24 -#: Template/Operators/view.ctp:9 -#: Template/Roles/add.ctp:9 -#: Template/Roles/edit.ctp:9 -#: Template/Roles/index.ctp:9 -#: Template/Roles/index.ctp:20 -#: Template/Roles/view.ctp:9 -#: Template/ServerUsers/add.ctp:9 -#: Template/ServerUsers/edit.ctp:9 -#: Template/ServerUsers/index.ctp:9 -#: Template/ServerUsers/index.ctp:26 -#: Template/ServerUsers/view.ctp:9 -#: Template/StateBalances/add.ctp:9 -#: Template/StateBalances/edit.ctp:9 -#: Template/StateBalances/index.ctp:9 -#: Template/StateBalances/index.ctp:25 -#: Template/StateBalances/view.ctp:9 -#: Template/StateCreated/add.ctp:9 -#: Template/StateCreated/edit.ctp:9 -#: Template/StateCreated/index.ctp:9 -#: Template/StateCreated/index.ctp:29 -#: Template/StateCreated/view.ctp:9 -#: Template/StateErrors/add.ctp:9 -#: Template/StateErrors/edit.ctp:9 -#: Template/StateErrors/index.ctp:9 -#: Template/StateErrors/index.ctp:26 -#: Template/StateErrors/view.ctp:9 -#: Template/StateGroupAddresses/add.ctp:9 -#: Template/StateGroupAddresses/edit.ctp:9 -#: Template/StateGroupAddresses/index.ctp:9 -#: Template/StateGroupAddresses/index.ctp:26 -#: Template/StateGroupAddresses/view.ctp:9 -#: Template/StateGroupRelationships/add.ctp:9 -#: Template/StateGroupRelationships/edit.ctp:9 -#: Template/StateGroupRelationships/index.ctp:9 -#: Template/StateGroupRelationships/index.ctp:22 -#: Template/StateGroupRelationships/view.ctp:9 -#: Template/StateGroups/add.ctp:9 -#: Template/StateGroups/edit.ctp:9 -#: Template/StateGroups/index.ctp:9 -#: Template/StateGroups/index.ctp:29 -#: Template/StateGroups/view.ctp:9 -#: Template/StateGroups/view.ctp:49 -#: Template/StateGroups/view.ctp:76 -#: Template/StateGroups/view.ctp:104 -#: Template/StateGroups/view.ctp:133 -#: Template/StateRelationshipTypes/add.ctp:9 -#: Template/StateRelationshipTypes/edit.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:21 -#: Template/StateRelationshipTypes/view.ctp:9 -#: Template/StateUserRoles/index.ctp:9 -#: Template/StateUserRoles/index.ctp:36 -#: Template/StateUserRoles/search.ctp:33 -#: Template/StateUserTransactions/add.ctp:9 -#: Template/StateUserTransactions/edit.ctp:9 -#: Template/StateUserTransactions/index.ctp:9 -#: Template/StateUserTransactions/index.ctp:28 -#: Template/StateUserTransactions/view.ctp:9 -#: Template/StateUsers/add.ctp:9 -#: Template/StateUsers/edit.ctp:9 -#: Template/StateUsers/index.ctp:9 -#: Template/StateUsers/index.ctp:36 -#: Template/StateUsers/view.ctp:9 -#: Template/StateUsers/view.ctp:34 -#: Template/StateUsers/view.ctp:58 -#: Template/StateUsers/view.ctp:89 -#: Template/StateUsers/view.ctp:122 -#: Template/TransactionCreations/add.ctp:9 -#: Template/TransactionCreations/edit.ctp:9 -#: Template/TransactionCreations/index.ctp:9 -#: Template/TransactionCreations/index.ctp:28 -#: Template/TransactionCreations/view.ctp:9 -#: Template/TransactionGroupAddaddress/add.ctp:9 -#: Template/TransactionGroupAddaddress/edit.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:9 -#: Template/TransactionGroupAllowtrades/add.ctp:9 -#: Template/TransactionGroupAllowtrades/edit.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:9 -#: Template/TransactionGroupCreates/add.ctp:9 -#: Template/TransactionGroupCreates/edit.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:9 -#: Template/TransactionSendCoins/add.ctp:9 -#: Template/TransactionSendCoins/edit.ctp:9 -#: Template/TransactionSendCoins/index.ctp:9 -#: Template/TransactionSendCoins/index.ctp:28 -#: Template/TransactionSendCoins/view.ctp:9 -#: Template/TransactionSignatures/add.ctp:9 -#: Template/TransactionSignatures/edit.ctp:9 -#: Template/TransactionSignatures/index.ctp:9 -#: Template/TransactionSignatures/index.ctp:22 -#: Template/TransactionSignatures/view.ctp:9 -#: Template/TransactionTypes/add.ctp:9 -#: Template/TransactionTypes/edit.ctp:9 -#: Template/TransactionTypes/index.ctp:9 -#: Template/TransactionTypes/index.ctp:23 -#: Template/TransactionTypes/view.ctp:9 -#: Template/TransactionTypes/view.ctp:44 -#: Template/Transactions/add.ctp:9 -#: Template/Transactions/edit.ctp:9 -#: Template/Transactions/index.ctp:9 -#: Template/Transactions/view.ctp:9 -#: Template/Transactions/view.ctp:66 -#: Template/Transactions/view.ctp:97 -#: Template/Transactions/view.ctp:125 -#: Template/Transactions/view.ctp:152 -#: Template/Transactions/view.ctp:180 -#: Template/Transactions/view.ctp:211 -#: Template/Transactions/view.ctp:241 -#: Template/Users/add.ctp:9 -#: Template/Users/edit.ctp:9 -#: Template/Users/index.ctp:9 -#: Template/Users/index.ctp:26 -#: Template/Users/view.ctp:9 -msgid "Actions" -msgstr "" - -#: Template/AddressTypes/add.ctp:10 -#: Template/AddressTypes/edit.ctp:16 -#: Template/AddressTypes/view.ctp:12 -#: Template/StateGroupAddresses/add.ctp:13 -#: Template/StateGroupAddresses/edit.ctp:19 -#: Template/StateGroupAddresses/index.ctp:13 -#: Template/StateGroupAddresses/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:13 -#: Template/TransactionGroupAddaddress/edit.ctp:19 -#: Template/TransactionGroupAddaddress/index.ctp:13 -#: Template/TransactionGroupAddaddress/view.ctp:16 -msgid "List Address Types" -msgstr "" - -#: Template/AddressTypes/add.ctp:11 -#: Template/AddressTypes/edit.ctp:17 -#: Template/AddressTypes/index.ctp:11 -#: Template/AddressTypes/view.ctp:14 -#: Template/StateGroupAddresses/add.ctp:10 -#: Template/StateGroupAddresses/edit.ctp:16 -#: Template/StateGroupAddresses/view.ctp:12 -#: Template/StateGroups/add.ctp:11 -#: Template/StateGroups/edit.ctp:17 -#: Template/StateGroups/index.ctp:11 -#: Template/StateGroups/view.ctp:14 -msgid "List State Group Addresses" -msgstr "" - -#: Template/AddressTypes/add.ctp:12 -#: Template/AddressTypes/edit.ctp:18 -#: Template/AddressTypes/index.ctp:12 -#: Template/AddressTypes/view.ctp:15 -#: Template/StateGroupAddresses/index.ctp:10 -#: Template/StateGroupAddresses/view.ctp:13 -#: Template/StateGroups/add.ctp:12 -#: Template/StateGroups/edit.ctp:18 -#: Template/StateGroups/index.ctp:12 -#: Template/StateGroups/view.ctp:15 -msgid "New State Group Address" -msgstr "" - -#: Template/AddressTypes/add.ctp:13 -#: Template/AddressTypes/edit.ctp:19 -#: Template/AddressTypes/index.ctp:13 -#: Template/AddressTypes/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:10 -#: Template/TransactionGroupAddaddress/edit.ctp:16 -#: Template/TransactionGroupAddaddress/view.ctp:12 -#: Template/Transactions/add.ctp:19 -#: Template/Transactions/edit.ctp:25 -#: Template/Transactions/index.ctp:19 -#: Template/Transactions/view.ctp:22 -msgid "List Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/add.ctp:14 -#: Template/AddressTypes/edit.ctp:20 -#: Template/AddressTypes/index.ctp:14 -#: Template/AddressTypes/view.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:10 -#: Template/TransactionGroupAddaddress/view.ctp:13 -#: Template/Transactions/add.ctp:20 -#: Template/Transactions/edit.ctp:26 -#: Template/Transactions/index.ctp:20 -#: Template/Transactions/view.ctp:23 -msgid "New Transaction Group Addaddres" -msgstr "" - -#: Template/AddressTypes/add.ctp:20 -msgid "Add Address Type" -msgstr "" - -#: Template/AddressTypes/add.ctp:26 -#: Template/AddressTypes/edit.ctp:32 -#: Template/AdminErrors/add.ctp:28 -#: Template/AdminErrors/edit.ctp:34 -#: Template/BlockchainTypes/add.ctp:23 -#: Template/BlockchainTypes/edit.ctp:29 -#: Template/CommunityProfiles/add.ctp:22 -#: Template/CommunityProfiles/edit.ctp:28 -#: Template/ElopageBuys/add.ctp:31 -#: Template/ElopageBuys/edit.ctp:37 -#: Template/OperatorTypes/add.ctp:24 -#: Template/OperatorTypes/edit.ctp:30 -#: Template/Operators/add.ctp:24 -#: Template/Operators/edit.ctp:30 -#: Template/Roles/add.ctp:21 -#: Template/Roles/edit.ctp:27 -#: Template/ServerUsers/add.ctp:24 -#: Template/ServerUsers/edit.ctp:32 -#: Template/StateBalances/add.ctp:25 -#: Template/StateBalances/edit.ctp:31 -#: Template/StateCreated/add.ctp:29 -#: Template/StateCreated/edit.ctp:35 -#: Template/StateErrors/add.ctp:27 -#: Template/StateErrors/edit.ctp:33 -#: Template/StateGroupAddresses/add.ctp:26 -#: Template/StateGroupAddresses/edit.ctp:32 -#: Template/StateGroupRelationships/add.ctp:23 -#: Template/StateGroupRelationships/edit.ctp:29 -#: Template/StateGroups/add.ctp:30 -#: Template/StateGroups/edit.ctp:36 -#: Template/StateRelationshipTypes/add.ctp:22 -#: Template/StateRelationshipTypes/edit.ctp:28 -#: Template/StateUserTransactions/add.ctp:29 -#: Template/StateUserTransactions/edit.ctp:35 -#: Template/StateUsers/add.ctp:32 -#: Template/StateUsers/edit.ctp:37 -#: Template/TransactionCreations/add.ctp:27 -#: Template/TransactionCreations/edit.ctp:33 -#: Template/TransactionGroupAddaddress/add.ctp:26 -#: Template/TransactionGroupAddaddress/edit.ctp:32 -#: Template/TransactionGroupAllowtrades/add.ctp:25 -#: Template/TransactionGroupAllowtrades/edit.ctp:31 -#: Template/TransactionGroupCreates/add.ctp:27 -#: Template/TransactionGroupCreates/edit.ctp:33 -#: Template/TransactionSendCoins/add.ctp:28 -#: Template/TransactionSendCoins/edit.ctp:34 -#: Template/TransactionSignatures/add.ctp:23 -#: Template/TransactionSignatures/edit.ctp:29 -#: Template/TransactionTypes/add.ctp:24 -#: Template/TransactionTypes/edit.ctp:30 -#: Template/Transactions/add.ctp:42 -#: Template/Transactions/edit.ctp:47 -#: Template/Users/add.ctp:26 -#: Template/Users/edit.ctp:32 -msgid "Submit" -msgstr "" - -#: Template/AddressTypes/edit.ctp:11 -#: Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:11 -#: Template/AdminErrors/index.ctp:43 -#: Template/BlockchainTypes/edit.ctp:11 -#: Template/BlockchainTypes/index.ctp:35 -#: Template/CommunityProfiles/edit.ctp:11 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/ElopageBuys/edit.ctp:11 -#: Template/ElopageBuys/index.ctp:51 -#: Template/OperatorTypes/edit.ctp:11 -#: Template/OperatorTypes/index.ctp:35 -#: Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:11 -#: Template/Operators/index.ctp:40 -#: Template/Roles/edit.ctp:11 -#: Template/Roles/index.ctp:31 -#: Template/ServerUsers/edit.ctp:11 -#: Template/ServerUsers/index.ctp:43 -#: Template/StateBalances/edit.ctp:11 -#: Template/StateBalances/index.ctp:38 -#: Template/StateCreated/edit.ctp:11 -#: Template/StateCreated/index.ctp:45 -#: Template/StateErrors/edit.ctp:11 -#: Template/StateErrors/index.ctp:39 -#: Template/StateErrors/show_for_user.ctp:44 -#: Template/StateGroupAddresses/edit.ctp:11 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupRelationships/edit.ctp:11 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroups/edit.ctp:11 -#: Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:11 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:11 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUsers/edit.ctp:11 -#: Template/StateUsers/index.ctp:53 -#: Template/TransactionCreations/edit.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:11 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAllowtrades/edit.ctp:11 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupCreates/edit.ctp:11 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionSendCoins/edit.ctp:11 -#: Template/TransactionSignatures/edit.ctp:11 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionTypes/edit.ctp:11 -#: Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:11 -#: Template/Transactions/view.ctp:80 -#: Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 -#: Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 -#: Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 -#: Template/Users/edit.ctp:11 -#: Template/Users/index.ctp:43 -msgid "Delete" -msgstr "" - -#: Template/AddressTypes/edit.ctp:13 -#: Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:11 -#: Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:13 -#: Template/AdminErrors/index.ctp:43 -#: Template/AdminErrors/view.ctp:11 -#: Template/BlockchainTypes/edit.ctp:13 -#: Template/BlockchainTypes/index.ctp:35 -#: Template/BlockchainTypes/view.ctp:11 -#: Template/CommunityProfiles/edit.ctp:13 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/CommunityProfiles/view.ctp:11 -#: Template/ElopageBuys/edit.ctp:13 -#: Template/ElopageBuys/index.ctp:51 -#: Template/ElopageBuys/view.ctp:11 -#: Template/OperatorTypes/edit.ctp:13 -#: Template/OperatorTypes/index.ctp:35 -#: Template/OperatorTypes/view.ctp:11 -#: Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:13 -#: Template/Operators/index.ctp:40 -#: Template/Operators/view.ctp:11 -#: Template/Roles/edit.ctp:13 -#: Template/Roles/index.ctp:31 -#: Template/Roles/view.ctp:11 -#: Template/ServerUsers/edit.ctp:13 -#: Template/ServerUsers/index.ctp:43 -#: Template/ServerUsers/view.ctp:11 -#: Template/StateBalances/edit.ctp:13 -#: Template/StateBalances/index.ctp:38 -#: Template/StateBalances/view.ctp:11 -#: Template/StateCreated/edit.ctp:13 -#: Template/StateCreated/index.ctp:45 -#: Template/StateCreated/view.ctp:11 -#: Template/StateErrors/edit.ctp:13 -#: Template/StateErrors/index.ctp:39 -#: Template/StateErrors/view.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:13 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupAddresses/view.ctp:11 -#: Template/StateGroupRelationships/edit.ctp:13 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroupRelationships/view.ctp:11 -#: Template/StateGroups/edit.ctp:13 -#: Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:11 -#: Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:13 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateRelationshipTypes/view.ctp:11 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:13 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUserTransactions/view.ctp:11 -#: Template/StateUsers/edit.ctp:13 -#: Template/StateUsers/index.ctp:53 -#: Template/StateUsers/view.ctp:11 -#: Template/TransactionCreations/edit.ctp:13 -#: Template/TransactionCreations/view.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:13 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAddaddress/view.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:13 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupAllowtrades/view.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:13 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionGroupCreates/view.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:13 -#: Template/TransactionSendCoins/view.ctp:11 -#: Template/TransactionSignatures/edit.ctp:13 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionSignatures/view.ctp:11 -#: Template/TransactionTypes/edit.ctp:13 -#: Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:11 -#: Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:13 -#: Template/Transactions/view.ctp:11 -#: Template/Transactions/view.ctp:80 -#: Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 -#: Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 -#: Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 -#: Template/Users/edit.ctp:13 -#: Template/Users/index.ctp:43 -#: Template/Users/view.ctp:11 -msgid "Are you sure you want to delete # {0}?" -msgstr "" - -#: Template/AddressTypes/edit.ctp:26 -#: Template/AddressTypes/view.ctp:10 -msgid "Edit Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:10 -#: Template/AddressTypes/view.ctp:13 -#: Template/StateGroupAddresses/add.ctp:14 -#: Template/StateGroupAddresses/edit.ctp:20 -#: Template/StateGroupAddresses/index.ctp:14 -#: Template/StateGroupAddresses/view.ctp:17 -#: Template/TransactionGroupAddaddress/add.ctp:14 -#: Template/TransactionGroupAddaddress/edit.ctp:20 -#: Template/TransactionGroupAddaddress/index.ctp:14 -#: Template/TransactionGroupAddaddress/view.ctp:17 -msgid "New Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:18 -msgid "Address Types" -msgstr "" - -#: Template/AddressTypes/index.ctp:35 -#: Template/AddressTypes/view.ctp:54 -#: Template/AddressTypes/view.ctp:83 -#: Template/AdminErrors/index.ctp:39 -#: Template/BlockchainTypes/index.ctp:33 -#: Template/CommunityProfiles/index.ctp:31 -#: Template/ElopageBuys/index.ctp:49 -#: Template/OperatorTypes/index.ctp:33 -#: Template/OperatorTypes/view.ctp:52 -#: Template/Operators/index.ctp:38 -#: Template/Roles/index.ctp:29 -#: Template/ServerUsers/index.ctp:41 -#: Template/StateBalances/index.ctp:36 -#: Template/StateCreated/index.ctp:43 -#: Template/StateErrors/index.ctp:37 -#: Template/StateGroupAddresses/index.ctp:37 -#: Template/StateGroupRelationships/index.ctp:33 -#: Template/StateGroups/index.ctp:39 -#: Template/StateGroups/view.ctp:58 -#: Template/StateGroups/view.ctp:85 -#: Template/StateGroups/view.ctp:114 -#: Template/StateGroups/view.ctp:143 -#: Template/StateRelationshipTypes/index.ctp:31 -#: Template/StateUserRoles/index.ctp:51 -#: Template/StateUserTransactions/index.ctp:39 -#: Template/StateUsers/index.ctp:51 -#: Template/StateUsers/view.ctp:41 -#: Template/StateUsers/view.ctp:71 -#: Template/StateUsers/view.ctp:104 -#: Template/StateUsers/view.ctp:136 -#: Template/TransactionCreations/index.ctp:42 -#: Template/TransactionGroupAddaddress/index.ctp:37 -#: Template/TransactionGroupAllowtrades/index.ctp:35 -#: Template/TransactionGroupCreates/index.ctp:37 -#: Template/TransactionSendCoins/index.ctp:41 -#: Template/TransactionSignatures/index.ctp:31 -#: Template/TransactionTypes/index.ctp:33 -#: Template/TransactionTypes/view.ctp:54 -#: Template/Transactions/view.ctp:78 -#: Template/Transactions/view.ctp:107 -#: Template/Transactions/view.ctp:134 -#: Template/Transactions/view.ctp:161 -#: Template/Transactions/view.ctp:190 -#: Template/Transactions/view.ctp:223 -#: Template/Transactions/view.ctp:250 -#: Template/Users/index.ctp:41 -msgid "View" -msgstr "" - -#: Template/AddressTypes/index.ctp:36 -#: Template/AddressTypes/view.ctp:55 -#: Template/AddressTypes/view.ctp:84 -#: Template/AdminErrors/index.ctp:41 -#: Template/BlockchainTypes/index.ctp:34 -#: Template/CommunityProfiles/index.ctp:32 -#: Template/ElopageBuys/index.ctp:50 -#: Template/OperatorTypes/index.ctp:34 -#: Template/OperatorTypes/view.ctp:53 -#: Template/Operators/index.ctp:39 -#: Template/Roles/index.ctp:30 -#: Template/ServerUsers/index.ctp:42 -#: Template/StateBalances/index.ctp:37 -#: Template/StateCreated/index.ctp:44 -#: Template/StateErrors/index.ctp:38 -#: Template/StateGroupAddresses/index.ctp:38 -#: Template/StateGroupRelationships/index.ctp:34 -#: Template/StateGroups/index.ctp:40 -#: Template/StateGroups/view.ctp:59 -#: Template/StateGroups/view.ctp:86 -#: Template/StateGroups/view.ctp:115 -#: Template/StateGroups/view.ctp:144 -#: Template/StateRelationshipTypes/index.ctp:32 -#: Template/StateUserRoles/index.ctp:52 -#: Template/StateUserTransactions/index.ctp:40 -#: Template/StateUsers/index.ctp:52 -#: Template/TransactionGroupAddaddress/index.ctp:38 -#: Template/TransactionGroupAllowtrades/index.ctp:36 -#: Template/TransactionGroupCreates/index.ctp:38 -#: Template/TransactionSignatures/index.ctp:32 -#: Template/TransactionTypes/index.ctp:34 -#: Template/TransactionTypes/view.ctp:55 -#: Template/Transactions/view.ctp:79 -#: Template/Transactions/view.ctp:108 -#: Template/Transactions/view.ctp:135 -#: Template/Transactions/view.ctp:162 -#: Template/Transactions/view.ctp:191 -#: Template/Transactions/view.ctp:224 -#: Template/Transactions/view.ctp:251 -#: Template/Users/index.ctp:42 -msgid "Edit" -msgstr "" - -#: Template/AddressTypes/index.ctp:45 -#: Template/AdminErrors/index.ctp:50 -#: Template/BlockchainTypes/index.ctp:43 -#: Template/CommunityProfiles/index.ctp:41 -#: Template/ElopageBuys/index.ctp:59 -#: Template/OperatorTypes/index.ctp:43 -#: Template/Operators/index.ctp:48 -#: Template/Roles/index.ctp:39 -#: Template/ServerUsers/index.ctp:51 -#: Template/StateBalances/index.ctp:46 -#: Template/StateCreated/index.ctp:53 -#: Template/StateErrors/index.ctp:47 -#: Template/StateGroupAddresses/index.ctp:47 -#: Template/StateGroupRelationships/index.ctp:43 -#: Template/StateGroups/index.ctp:49 -#: Template/StateRelationshipTypes/index.ctp:41 -#: Template/StateUserRoles/index.ctp:61 -#: Template/StateUserTransactions/index.ctp:49 -#: Template/StateUsers/index.ctp:61 -#: Template/TransactionCreations/index.ctp:50 -#: Template/TransactionGroupAddaddress/index.ctp:47 -#: Template/TransactionGroupAllowtrades/index.ctp:45 -#: Template/TransactionGroupCreates/index.ctp:47 -#: Template/TransactionSendCoins/index.ctp:49 -#: Template/TransactionSignatures/index.ctp:41 -#: Template/TransactionTypes/index.ctp:43 -#: Template/Transactions/index.ctp:50 -#: Template/Users/index.ctp:51 -msgid "first" -msgstr "" - -#: Template/AddressTypes/index.ctp:46 -#: Template/AdminErrors/index.ctp:51 -#: Template/BlockchainTypes/index.ctp:44 -#: Template/CommunityProfiles/index.ctp:42 -#: Template/ElopageBuys/index.ctp:60 -#: Template/OperatorTypes/index.ctp:44 -#: Template/Operators/index.ctp:49 -#: Template/Roles/index.ctp:40 -#: Template/ServerUsers/index.ctp:52 -#: Template/StateBalances/index.ctp:47 -#: Template/StateCreated/index.ctp:54 -#: Template/StateErrors/index.ctp:48 -#: Template/StateGroupAddresses/index.ctp:48 -#: Template/StateGroupRelationships/index.ctp:44 -#: Template/StateGroups/index.ctp:50 -#: Template/StateRelationshipTypes/index.ctp:42 -#: Template/StateUserRoles/index.ctp:62 -#: Template/StateUserTransactions/index.ctp:50 -#: Template/StateUsers/index.ctp:62 -#: Template/TransactionCreations/index.ctp:51 -#: Template/TransactionGroupAddaddress/index.ctp:48 -#: Template/TransactionGroupAllowtrades/index.ctp:46 -#: Template/TransactionGroupCreates/index.ctp:48 -#: Template/TransactionSendCoins/index.ctp:50 -#: Template/TransactionSignatures/index.ctp:42 -#: Template/TransactionTypes/index.ctp:44 -#: Template/Transactions/index.ctp:51 -#: Template/Users/index.ctp:52 -msgid "previous" -msgstr "" - -#: Template/AddressTypes/index.ctp:48 -#: Template/AdminErrors/index.ctp:53 -#: Template/BlockchainTypes/index.ctp:46 -#: Template/CommunityProfiles/index.ctp:44 -#: Template/ElopageBuys/index.ctp:62 -#: Template/OperatorTypes/index.ctp:46 -#: Template/Operators/index.ctp:51 -#: Template/Roles/index.ctp:42 -#: Template/ServerUsers/index.ctp:54 -#: Template/StateBalances/index.ctp:49 -#: Template/StateCreated/index.ctp:56 -#: Template/StateErrors/index.ctp:50 -#: Template/StateGroupAddresses/index.ctp:50 -#: Template/StateGroupRelationships/index.ctp:46 -#: Template/StateGroups/index.ctp:52 -#: Template/StateRelationshipTypes/index.ctp:44 -#: Template/StateUserRoles/index.ctp:64 -#: Template/StateUserTransactions/index.ctp:52 -#: Template/StateUsers/index.ctp:64 -#: Template/TransactionCreations/index.ctp:53 -#: Template/TransactionGroupAddaddress/index.ctp:50 -#: Template/TransactionGroupAllowtrades/index.ctp:48 -#: Template/TransactionGroupCreates/index.ctp:50 -#: Template/TransactionSendCoins/index.ctp:52 -#: Template/TransactionSignatures/index.ctp:44 -#: Template/TransactionTypes/index.ctp:46 -#: Template/Transactions/index.ctp:53 -#: Template/Users/index.ctp:54 -msgid "next" -msgstr "" - -#: Template/AddressTypes/index.ctp:49 -#: Template/AdminErrors/index.ctp:54 -#: Template/BlockchainTypes/index.ctp:47 -#: Template/CommunityProfiles/index.ctp:45 -#: Template/ElopageBuys/index.ctp:63 -#: Template/OperatorTypes/index.ctp:47 -#: Template/Operators/index.ctp:52 -#: Template/Roles/index.ctp:43 -#: Template/ServerUsers/index.ctp:55 -#: Template/StateBalances/index.ctp:50 -#: Template/StateCreated/index.ctp:57 -#: Template/StateErrors/index.ctp:51 -#: Template/StateGroupAddresses/index.ctp:51 -#: Template/StateGroupRelationships/index.ctp:47 -#: Template/StateGroups/index.ctp:53 -#: Template/StateRelationshipTypes/index.ctp:45 -#: Template/StateUserRoles/index.ctp:65 -#: Template/StateUserTransactions/index.ctp:53 -#: Template/StateUsers/index.ctp:65 -#: Template/TransactionCreations/index.ctp:54 -#: Template/TransactionGroupAddaddress/index.ctp:51 -#: Template/TransactionGroupAllowtrades/index.ctp:49 -#: Template/TransactionGroupCreates/index.ctp:51 -#: Template/TransactionSendCoins/index.ctp:53 -#: Template/TransactionSignatures/index.ctp:45 -#: Template/TransactionTypes/index.ctp:47 -#: Template/Transactions/index.ctp:54 -#: Template/Users/index.ctp:55 -msgid "last" -msgstr "" - -#: Template/AddressTypes/index.ctp:51 -#: Template/AdminErrors/index.ctp:56 -#: Template/BlockchainTypes/index.ctp:49 -#: Template/CommunityProfiles/index.ctp:47 -#: Template/ElopageBuys/index.ctp:65 -#: Template/OperatorTypes/index.ctp:49 -#: Template/Operators/index.ctp:54 -#: Template/Roles/index.ctp:45 -#: Template/ServerUsers/index.ctp:57 -#: Template/StateBalances/index.ctp:52 -#: Template/StateCreated/index.ctp:59 -#: Template/StateErrors/index.ctp:53 -#: Template/StateGroupAddresses/index.ctp:53 -#: Template/StateGroupRelationships/index.ctp:49 -#: Template/StateGroups/index.ctp:55 -#: Template/StateRelationshipTypes/index.ctp:47 -#: Template/StateUserRoles/index.ctp:67 -#: Template/StateUserTransactions/index.ctp:55 -#: Template/StateUsers/index.ctp:67 -#: Template/TransactionCreations/index.ctp:56 -#: Template/TransactionGroupAddaddress/index.ctp:53 -#: Template/TransactionGroupAllowtrades/index.ctp:51 -#: Template/TransactionGroupCreates/index.ctp:53 -#: Template/TransactionSendCoins/index.ctp:55 -#: Template/TransactionSignatures/index.ctp:47 -#: Template/TransactionTypes/index.ctp:49 -#: Template/Transactions/index.ctp:56 -#: Template/Users/index.ctp:57 -msgid "Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total" -msgstr "" - -#: Template/AddressTypes/view.ctp:11 -msgid "Delete Address Type" -msgstr "" - -#: Template/AddressTypes/view.ctp:24 -#: Template/BlockchainTypes/view.ctp:20 -#: Template/OperatorTypes/view.ctp:22 -#: Template/StateGroups/view.ctp:28 -#: Template/StateGroups/view.ctp:103 -#: Template/StateRelationshipTypes/view.ctp:20 -#: Template/TransactionGroupCreates/view.ctp:32 -#: Template/TransactionTypes/view.ctp:22 -#: Template/Transactions/view.ctp:179 -#: Template/Users/statistics.ctp:64 -msgid "Name" -msgstr "" - -#: Template/AddressTypes/view.ctp:28 -#: Template/BlockchainTypes/view.ctp:24 -#: Template/OperatorTypes/view.ctp:26 -#: Template/StateRelationshipTypes/view.ctp:24 -#: Template/TransactionTypes/view.ctp:26 -msgid "Text" -msgstr "" - -#: Template/AddressTypes/view.ctp:32 -#: Template/AddressTypes/view.ctp:41 -#: Template/AddressTypes/view.ctp:68 -#: Template/AdminErrors/view.ctp:46 -#: Template/BlockchainTypes/view.ctp:32 -#: Template/CommunityProfiles/view.ctp:24 -#: Template/ElopageBuys/view.ctp:32 -#: Template/OperatorTypes/view.ctp:30 -#: Template/OperatorTypes/view.ctp:39 -#: Template/Operators/view.ctp:32 -#: Template/Roles/view.ctp:24 -#: Template/ServerUsers/view.ctp:36 -#: Template/StateBalances/view.ctp:27 -#: Template/StateCreated/view.ctp:32 -#: Template/StateErrors/view.ctp:32 -#: Template/StateGroupAddresses/view.ctp:28 -#: Template/StateGroupRelationships/view.ctp:20 -#: Template/StateGroups/view.ctp:32 -#: Template/StateGroups/view.ctp:45 -#: Template/StateGroups/view.ctp:72 -#: Template/StateGroups/view.ctp:99 -#: Template/StateGroups/view.ctp:128 -#: Template/StateRelationshipTypes/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:38 -#: Template/TransactionCreations/view.ctp:32 -#: Template/TransactionGroupAddaddress/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:32 -#: Template/TransactionSignatures/view.ctp:26 -#: Template/TransactionTypes/view.ctp:30 -#: Template/TransactionTypes/view.ctp:39 -#: Template/Transactions/view.ctp:46 -#: Template/Transactions/view.ctp:59 -#: Template/Transactions/view.ctp:92 -#: Template/Transactions/view.ctp:121 -#: Template/Transactions/view.ctp:148 -#: Template/Transactions/view.ctp:175 -#: Template/Transactions/view.ctp:204 -#: Template/Transactions/view.ctp:237 -#: Template/Users/view.ctp:36 -msgid "Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:37 -#: Template/StateGroups/view.ctp:41 -msgid "Related State Group Addresses" -msgstr "" - -#: Template/AddressTypes/view.ctp:42 -#: Template/StateGroupAddresses/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:30 -#: Template/Transactions/view.ctp:150 -msgid "Group Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:43 -#: Template/AddressTypes/view.ctp:72 -#: Template/StateGroups/view.ctp:47 -#: Template/StateGroups/view.ctp:75 -#: Template/Transactions/view.ctp:124 -msgid "Public Key" -msgstr "" - -#: Template/AddressTypes/view.ctp:44 -#: Template/AddressTypes/view.ctp:70 -#: Template/StateGroups/view.ctp:48 -#: Template/Transactions/view.ctp:123 -msgid "Address Type Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:64 -#: Template/Transactions/view.ctp:117 -msgid "Related Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/view.ctp:69 -#: Template/StateGroups/view.ctp:100 -#: Template/Transactions/view.ctp:60 -#: Template/Transactions/view.ctp:93 -#: Template/Transactions/view.ctp:122 -#: Template/Transactions/view.ctp:149 -#: Template/Transactions/view.ctp:176 -#: Template/Transactions/view.ctp:205 -#: Template/Transactions/view.ctp:238 -msgid "Transaction Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:71 -msgid "Remove From Group" -msgstr "" - -#: Template/AdminErrors/add.ctp:10 -#: Template/AdminErrors/edit.ctp:16 -#: Template/AdminErrors/view.ctp:12 -msgid "List Admin Errors" -msgstr "" - -#: Template/AdminErrors/add.ctp:11 -#: Template/AdminErrors/edit.ctp:17 -#: Template/AdminErrors/index.ctp:11 -#: Template/AdminErrors/view.ctp:14 -#: Template/StateBalances/add.ctp:11 -#: Template/StateBalances/edit.ctp:17 -#: Template/StateBalances/index.ctp:11 -#: Template/StateBalances/view.ctp:14 -#: Template/StateCreated/add.ctp:13 -#: Template/StateCreated/edit.ctp:19 -#: Template/StateCreated/index.ctp:13 -#: Template/StateCreated/view.ctp:16 -#: Template/StateErrors/add.ctp:11 -#: Template/StateErrors/edit.ctp:17 -#: Template/StateErrors/index.ctp:11 -#: Template/StateErrors/view.ctp:14 -#: Template/StateGroups/add.ctp:13 -#: Template/StateGroups/edit.ctp:19 -#: Template/StateGroups/index.ctp:13 -#: Template/StateGroups/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:11 -#: Template/StateUserTransactions/edit.ctp:17 -#: Template/StateUserTransactions/index.ctp:11 -#: Template/StateUserTransactions/view.ctp:14 -#: Template/StateUsers/add.ctp:10 -#: Template/StateUsers/edit.ctp:16 -#: Template/StateUsers/view.ctp:12 -#: Template/TransactionCreations/add.ctp:13 -#: Template/TransactionCreations/edit.ctp:19 -#: Template/TransactionCreations/index.ctp:13 -#: Template/TransactionCreations/view.ctp:16 -#: Template/TransactionSendCoins/add.ctp:13 -#: Template/TransactionSendCoins/edit.ctp:19 -#: Template/TransactionSendCoins/index.ctp:13 -#: Template/TransactionSendCoins/view.ctp:16 -msgid "List State Users" -msgstr "" - -#: Template/AdminErrors/add.ctp:12 -#: Template/AdminErrors/edit.ctp:18 -#: Template/AdminErrors/index.ctp:12 -#: Template/AdminErrors/view.ctp:15 -#: Template/StateBalances/add.ctp:12 -#: Template/StateBalances/edit.ctp:18 -#: Template/StateBalances/index.ctp:12 -#: Template/StateBalances/view.ctp:15 -#: Template/StateCreated/add.ctp:14 -#: Template/StateCreated/edit.ctp:20 -#: Template/StateCreated/index.ctp:14 -#: Template/StateCreated/view.ctp:17 -#: Template/StateErrors/add.ctp:12 -#: Template/StateErrors/edit.ctp:18 -#: Template/StateErrors/index.ctp:12 -#: Template/StateErrors/view.ctp:15 -#: Template/StateGroups/add.ctp:14 -#: Template/StateGroups/edit.ctp:20 -#: Template/StateGroups/index.ctp:14 -#: Template/StateGroups/view.ctp:17 -#: Template/StateUserRoles/index.ctp:10 -#: Template/StateUserTransactions/add.ctp:12 -#: Template/StateUserTransactions/edit.ctp:18 -#: Template/StateUserTransactions/index.ctp:12 -#: Template/StateUserTransactions/view.ctp:15 -#: Template/StateUsers/index.ctp:10 -#: Template/StateUsers/view.ctp:13 -#: Template/TransactionCreations/add.ctp:14 -#: Template/TransactionCreations/edit.ctp:20 -#: Template/TransactionCreations/index.ctp:14 -#: Template/TransactionCreations/view.ctp:17 -#: Template/TransactionSendCoins/add.ctp:14 -#: Template/TransactionSendCoins/edit.ctp:20 -#: Template/TransactionSendCoins/index.ctp:14 -#: Template/TransactionSendCoins/view.ctp:17 -msgid "New State User" -msgstr "" - -#: Template/AdminErrors/add.ctp:18 -msgid "Add Admin Error" -msgstr "" - -#: Template/AdminErrors/edit.ctp:24 -#: Template/AdminErrors/view.ctp:10 -msgid "Edit Admin Error" -msgstr "" - -#: Template/AdminErrors/index.ctp:10 -#: Template/AdminErrors/view.ctp:13 -msgid "New Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:11 -msgid "Delete Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:22 -#: Template/StateBalances/view.ctp:23 -#: Template/StateCreated/view.ctp:28 -#: Template/StateErrors/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:26 -#: Template/TransactionCreations/view.ctp:28 -#: Template/TransactionSendCoins/view.ctp:28 -msgid "State User" -msgstr "" - -#: Template/AdminErrors/view.ctp:26 -msgid "Controller" -msgstr "" - -#: Template/AdminErrors/view.ctp:30 -msgid "Action" -msgstr "" - -#: Template/AdminErrors/view.ctp:34 -msgid "State" -msgstr "" - -#: Template/AdminErrors/view.ctp:38 -msgid "Msg" -msgstr "" - -#: Template/AdminErrors/view.ctp:42 -msgid "Details" -msgstr "" - -#: Template/AdminErrors/view.ctp:50 -#: Template/ServerUsers/view.ctp:44 -#: Template/StateCreated/view.ctp:48 -#: Template/StateErrors/view.ctp:36 -#: Template/Transactions/view.ctp:64 -#: Template/Users/view.ctp:44 -msgid "Created" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:10 -#: Template/BlockchainTypes/edit.ctp:16 -#: Template/BlockchainTypes/view.ctp:12 -msgid "List Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:16 -msgid "Add Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/edit.ctp:22 -#: Template/BlockchainTypes/view.ctp:10 -msgid "Edit Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:10 -#: Template/BlockchainTypes/view.ctp:13 -msgid "New Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:14 -msgid "Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:11 -msgid "Delete Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:28 -msgid "Symbol" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:10 -#: Template/CommunityProfiles/edit.ctp:16 -#: Template/CommunityProfiles/view.ctp:12 -msgid "List Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:16 -msgid "Add Community Profile" -msgstr "" - -#: Template/CommunityProfiles/edit.ctp:22 -#: Template/CommunityProfiles/view.ctp:10 -msgid "Edit Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:10 -#: Template/CommunityProfiles/view.ctp:13 -msgid "New Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:14 -msgid "Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:11 -msgid "Delete Community Profile" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:20 -msgid "Profile Desc" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:28 -#: Template/Transactions/view.ctp:63 -#: Template/Transactions/view.ctp:94 -#: Template/Transactions/view.ctp:206 -msgid "State User Id" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:9 -msgid "Error, Please try again" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:13 -#: Template/Layout/error.ctp:43 -msgid "Back" -msgstr "" - -#: Template/Dashboard/index.ctp:14 -#: Template/Dashboard/index.ctp:18 -#: Template/Dashboard/server_index.ctp:9 -msgid "Willkommen" -msgstr "" - -#: Template/Dashboard/index.ctp:47 -msgid "löschen" -msgstr "" - -#: Template/Dashboard/index.ctp:51 -msgid "Adminbereich" -msgstr "" - -#: Template/Dashboard/index.ctp:57 -#: Template/Dashboard/server_index.ctp:21 -msgid "viele schöpfen" -msgstr "" - -#: Template/Dashboard/index.ctp:70 -msgid "Anmeldungen" -msgstr "" - -#: Template/Dashboard/index.ctp:94 -msgid "suchen" -msgstr "" - -#: Template/Dashboard/index.ctp:102 -msgid "hinzufügen" -msgstr "" - -#: Template/Dashboard/index.ctp:108 -msgid "hat sein Passwort und Passphrase vergessen" -msgstr "" - -#: Template/Dashboard/index.ctp:119 -msgid "Gruppen" -msgstr "" - -#: Template/Dashboard/index.ctp:125 -msgid "Server" -msgstr "" - -#: Template/Dashboard/index.ctp:131 -msgid "Topics" -msgstr "" - -#: Template/Dashboard/index.ctp:139 -msgid "Hedera Accounts" -msgstr "" - -#: Template/Element/navi.ctp:35 -msgid "Mitgliederbereich" -msgstr "" - -#: Template/Element/navi_header.ctp:38 -#: Template/Element/navi_notify.ctp:35 -msgid "Transaktionen sind noch zu unterzeichnen" -msgstr "" - -#: Template/Element/user_menu.ctp:22 -msgid "Abmelden" -msgstr "" - -#: Template/Element/Flash/success.ctp:9 -msgid "Info:" -msgstr "" - -#: Template/ElopageBuys/add.ctp:10 -#: Template/ElopageBuys/edit.ctp:16 -#: Template/ElopageBuys/view.ctp:12 -msgid "List Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/add.ctp:16 -msgid "Add Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/edit.ctp:22 -#: Template/ElopageBuys/view.ctp:10 -msgid "Edit Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:10 -#: Template/ElopageBuys/view.ctp:13 -msgid "New Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:14 -msgid "Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/statistics.ctp:28 -#: Template/Users/statistics.ctp:49 -msgid "Anmeldungen diesen Monat" -msgstr "" - -#: Template/ElopageBuys/view.ctp:11 -msgid "Delete Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/view.ctp:20 -msgid "Payer Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:24 -msgid "Publisher Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:28 -msgid "Event" -msgstr "" - -#: Template/ElopageBuys/view.ctp:36 -msgid "Elopage User Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:40 -msgid "Affiliate Program Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:44 -msgid "Publisher Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:48 -msgid "Order Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:52 -msgid "Product Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:56 -msgid "Product Price" -msgstr "" - -#: Template/ElopageBuys/view.ctp:60 -msgid "Success Date" -msgstr "" - -#: Template/ElopageBuys/view.ctp:64 -msgid "Payed" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 -#: Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 -#: Template/Users/view.ctp:49 -msgid "Yes" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 -#: Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 -#: Template/Users/view.ctp:49 -msgid "No" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:8 -msgid "Gradido Schöpfung" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:9 -#: Template/Email/text/notification_transaction_failed.ctp:14 -#: Template/Email/text/notification_transfer.ctp:12 -msgid "Hallo" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:11 -msgid "für dich wurden soeben {0} geschöpft." -msgstr "" - -#: Template/Email/text/notification_creation.ctp:16 -#: Template/Email/text/notification_transaction_failed.ctp:46 -#: Template/Email/text/notification_transfer.ctp:19 -msgid "Bitte antworte nicht auf diese E-Mail!" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:18 -#: Template/Email/text/notification_transaction_failed.ctp:49 -#: Template/Email/text/notification_transfer.ctp:25 -msgid "Mit freundlichen Grüßen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:8 -msgid "Gradido Transaktion fehlgeschlagen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:16 -msgid "Deine letzte Transaktion ist leider fehlgeschlagen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:20 -msgid "Du wolltest {0} für {1} schöpfen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:24 -msgid "Das Zieldatum war: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:26 -msgid "Du wolltest {0} an {1} senden." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:32 -msgid "Das ist schief gelaufen: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:35 -msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:36 -msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:8 -msgid "Gradido Überweisung" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:14 -msgid "Du hast soeben {0} von {1} erhalten." -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:15 -msgid "{0} schreibt:" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid "Wenn Du " -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: " -msgstr "" - -#: Template/Layout/default.ctp:38 -msgid "Logout" -msgstr "" - -#: Template/Layout/error.ctp:35 -msgid "Error" -msgstr "" - -#: Template/Layout/frontend.ctp:95 -msgid "Datenschutzerklärung" -msgstr "" - -#: Template/Layout/frontend.ctp:96 -msgid "Impressum" -msgstr "" - -#: Template/Layout/frontend.ctp:108 -msgid "Community Server in Entwicklung" -msgstr "" - -#: Template/OperatorTypes/add.ctp:10 -#: Template/OperatorTypes/edit.ctp:16 -#: Template/OperatorTypes/view.ctp:12 -msgid "List Operator Types" -msgstr "" - -#: Template/OperatorTypes/add.ctp:11 -#: Template/OperatorTypes/edit.ctp:17 -#: Template/OperatorTypes/index.ctp:11 -#: Template/OperatorTypes/view.ctp:14 -#: Template/Operators/add.ctp:10 -#: Template/Operators/edit.ctp:16 -#: Template/Operators/view.ctp:12 -msgid "List Operators" -msgstr "" - -#: Template/OperatorTypes/add.ctp:12 -#: Template/OperatorTypes/edit.ctp:18 -#: Template/OperatorTypes/index.ctp:12 -#: Template/OperatorTypes/view.ctp:15 -#: Template/Operators/index.ctp:10 -#: Template/Operators/view.ctp:13 -msgid "New Operator" -msgstr "" - -#: Template/OperatorTypes/add.ctp:18 -msgid "Add Operator Type" -msgstr "" - -#: Template/OperatorTypes/edit.ctp:24 -#: Template/OperatorTypes/view.ctp:10 -msgid "Edit Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:10 -#: Template/OperatorTypes/view.ctp:13 -msgid "New Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:16 -msgid "Operator Types" -msgstr "" - -#: Template/OperatorTypes/view.ctp:11 -msgid "Delete Operator Type" -msgstr "" - -#: Template/OperatorTypes/view.ctp:35 -msgid "Related Operators" -msgstr "" - -#: Template/OperatorTypes/view.ctp:40 -#: Template/Operators/view.ctp:20 -#: Template/ServerUsers/view.ctp:20 -msgid "Username" -msgstr "" - -#: Template/OperatorTypes/view.ctp:41 -#: Template/Operators/view.ctp:36 -msgid "Operator Type Id" -msgstr "" - -#: Template/OperatorTypes/view.ctp:42 -#: Template/Operators/view.ctp:28 -msgid "Data Base64" -msgstr "" - -#: Template/Operators/add.ctp:16 -msgid "Add Operator" -msgstr "" - -#: Template/Operators/edit.ctp:22 -#: Template/Operators/view.ctp:10 -msgid "Edit Operator" -msgstr "" - -#: Template/Operators/index.ctp:14 -msgid "Operators" -msgstr "" - -#: Template/Operators/view.ctp:11 -msgid "Delete Operator" -msgstr "" - -#: Template/Operators/view.ctp:24 -msgid "User Pubkey" -msgstr "" - -#: Template/Profile/edit.ctp:9 -msgid "Profil ändern" -msgstr "" - -#: Template/Profile/edit.ctp:18 -msgid "Vorname" -msgstr "" - -#: Template/Profile/edit.ctp:19 -msgid "Nachname" -msgstr "" - -#: Template/Profile/edit.ctp:20 -msgid "Profilbild" -msgstr "" - -#: Template/Profile/edit.ctp:25 -msgid "Beschreibung" -msgstr "" - -#: Template/Profile/edit.ctp:26 -msgid "Daten speichern" -msgstr "" - -#: Template/Roles/add.ctp:10 -#: Template/Roles/edit.ctp:16 -#: Template/Roles/view.ctp:12 -msgid "List Roles" -msgstr "" - -#: Template/Roles/add.ctp:16 -msgid "Add Role" -msgstr "" - -#: Template/Roles/edit.ctp:22 -#: Template/Roles/view.ctp:10 -msgid "Edit Role" -msgstr "" - -#: Template/Roles/index.ctp:10 -#: Template/Roles/view.ctp:13 -msgid "New Role" -msgstr "" - -#: Template/Roles/index.ctp:14 -msgid "Roles" -msgstr "" - -#: Template/Roles/view.ctp:11 -msgid "Delete Role" -msgstr "" - -#: Template/Roles/view.ctp:20 -msgid "Title" -msgstr "" - -#: Template/ServerUsers/add.ctp:10 -#: Template/ServerUsers/edit.ctp:16 -#: Template/ServerUsers/view.ctp:12 -msgid "List Server Users" -msgstr "" - -#: Template/ServerUsers/add.ctp:16 -msgid "Add Server User" -msgstr "" - -#: Template/ServerUsers/edit.ctp:22 -#: Template/ServerUsers/view.ctp:10 -msgid "Edit Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:10 -#: Template/ServerUsers/view.ctp:13 -msgid "New Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:14 -msgid "Server Users" -msgstr "" - -#: Template/ServerUsers/login.ctp:16 -msgid "Please enter your username and password" -msgstr "" - -#: Template/ServerUsers/login.ctp:20 -msgid "Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:11 -msgid "Delete Server User" -msgstr "" - -#: Template/ServerUsers/view.ctp:24 -#: Template/Users/view.ctp:40 -msgid "Password" -msgstr "" - -#: Template/ServerUsers/view.ctp:28 -#: Template/Users/view.ctp:20 -msgid "Email" -msgstr "" - -#: Template/ServerUsers/view.ctp:32 -#: Template/StateUserRoles/assign_role.ctp:45 -#: Template/StateUserRoles/search.ctp:32 -msgid "Role" -msgstr "" - -#: Template/ServerUsers/view.ctp:40 -msgid "Last Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:48 -#: Template/StateBalances/view.ctp:35 -msgid "Modified" -msgstr "" - -#: Template/ServerUsers/view.ctp:52 -msgid "Activated" -msgstr "" - -#: Template/StateBalances/add.ctp:10 -#: Template/StateBalances/edit.ctp:16 -#: Template/StateBalances/view.ctp:12 -#: Template/StateUserRoles/index.ctp:13 -#: Template/StateUsers/add.ctp:13 -#: Template/StateUsers/edit.ctp:19 -#: Template/StateUsers/index.ctp:13 -#: Template/StateUsers/view.ctp:16 -msgid "List State Balances" -msgstr "" - -#: Template/StateBalances/add.ctp:19 -msgid "Add State Balance" -msgstr "" - -#: Template/StateBalances/edit.ctp:25 -#: Template/StateBalances/view.ctp:10 -msgid "Edit State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:10 -#: Template/StateBalances/view.ctp:13 -#: Template/StateUserRoles/index.ctp:14 -#: Template/StateUsers/add.ctp:14 -#: Template/StateUsers/edit.ctp:20 -#: Template/StateUsers/index.ctp:14 -#: Template/StateUsers/view.ctp:17 -msgid "New State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:16 -msgid "State Balances" -msgstr "" - -#: Template/StateBalances/overview.ctp:10 -msgid "Aktueller Kontostand: " -msgstr "" - -#: Template/StateBalances/overview.ctp:34 -msgid "Absender" -msgstr "" - -#: Template/StateBalances/overview.ctp:35 -#: Template/StateUsers/view.ctp:57 -#: Template/StateUsers/view.ctp:87 -#: Template/StateUsers/view.ctp:121 -#: Template/TransactionSendCoins/create.ctp:21 -#: Template/TransactionSendCoins/create_raw.ctp:32 -msgid "Verwendungszweck" -msgstr "" - -#: Template/StateBalances/overview.ctp:36 -#: Template/StateBalances/overview_gdt.ctp:42 -#: Template/StateBalances/overview_gdt.ctp:75 -msgid "Datum" -msgstr "" - -#: Template/StateBalances/overview.ctp:37 -#: Template/StateUsers/view.ctp:56 -#: Template/StateUsers/view.ctp:86 -#: Template/StateUsers/view.ctp:120 -msgid "Betrag" -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Transaktions Nr." -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Nr" -msgstr "" - -#: Template/StateBalances/overview.ctp:75 -msgid "Geschöpft" -msgstr "" - -#: Template/StateBalances/overview.ctp:78 -msgid "Gesendet" -msgstr "" - -#: Template/StateBalances/overview.ctp:81 -msgid "Empfangen" -msgstr "" - -#: Template/StateBalances/overview.ctp:84 -msgid "Vergänglichkeit" -msgstr "" - -#: Template/StateBalances/overview.ctp:124 -#: Template/TransactionCreations/create_multi.ctp:184 -msgid "Laufende Transaktion" -msgstr "" - -#: Template/StateBalances/overview.ctp:126 -#: Template/TransactionCreations/create_multi.ctp:186 -msgid "Laufende Transaktionen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:21 -msgid "Zur Verfügung: " -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:31 -msgid "Nur die letzten 100 Einträge werden angezeigt!" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:38 -msgid "Eigene Einzahlungen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:41 -#: Template/Users/statistics.ctp:65 -msgid "E-Mail" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:43 -msgid "Kommentar" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:44 -#: Template/StateBalances/overview_gdt.ctp:76 -msgid "Euro" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:45 -#: Template/StateBalances/overview_gdt.ctp:77 -msgid "Factor" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:46 -#: Template/StateBalances/overview_gdt.ctp:78 -msgid "GDT" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:71 -msgid "Einzahlungen anderer (Publisherprogramm)" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:74 -msgid "Einzahlender" -msgstr "" - -#: Template/StateBalances/view.ctp:11 -msgid "Delete State Balance" -msgstr "" - -#: Template/StateBalances/view.ctp:31 -#: Template/StateUsers/view.ctp:33 -#: Template/TransactionCreations/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:36 -#: Template/Transactions/view.ctp:95 -#: Template/Transactions/view.ctp:209 -msgid "Amount" -msgstr "" - -#: Template/StateCreated/add.ctp:10 -#: Template/StateCreated/edit.ctp:16 -#: Template/StateCreated/view.ctp:12 -#: Template/StateUserRoles/index.ctp:15 -#: Template/StateUsers/add.ctp:15 -#: Template/StateUsers/edit.ctp:21 -#: Template/StateUsers/index.ctp:15 -#: Template/Transactions/add.ctp:15 -#: Template/Transactions/edit.ctp:21 -#: Template/Transactions/index.ctp:15 -#: Template/Transactions/view.ctp:18 -msgid "List State Created" -msgstr "" - -#: Template/StateCreated/add.ctp:11 -#: Template/StateCreated/edit.ctp:17 -#: Template/StateCreated/index.ctp:11 -#: Template/StateCreated/view.ctp:14 -#: Template/StateGroups/add.ctp:17 -#: Template/StateGroups/edit.ctp:23 -#: Template/StateGroups/index.ctp:17 -#: Template/StateGroups/view.ctp:20 -#: Template/StateUserTransactions/add.ctp:13 -#: Template/StateUserTransactions/edit.ctp:19 -#: Template/StateUserTransactions/index.ctp:13 -#: Template/StateUserTransactions/view.ctp:16 -#: Template/TransactionCreations/add.ctp:11 -#: Template/TransactionCreations/edit.ctp:17 -#: Template/TransactionCreations/index.ctp:11 -#: Template/TransactionCreations/view.ctp:14 -#: Template/TransactionGroupAddaddress/add.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:11 -#: Template/TransactionGroupAddaddress/view.ctp:14 -#: Template/TransactionGroupAllowtrades/add.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:17 -#: Template/TransactionGroupAllowtrades/index.ctp:11 -#: Template/TransactionGroupAllowtrades/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:17 -#: Template/TransactionGroupCreates/index.ctp:11 -#: Template/TransactionGroupCreates/view.ctp:14 -#: Template/TransactionSendCoins/add.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:17 -#: Template/TransactionSendCoins/index.ctp:11 -#: Template/TransactionSendCoins/view.ctp:14 -#: Template/TransactionSignatures/add.ctp:11 -#: Template/TransactionSignatures/edit.ctp:17 -#: Template/TransactionSignatures/index.ctp:11 -#: Template/TransactionSignatures/view.ctp:14 -#: Template/TransactionTypes/add.ctp:11 -#: Template/TransactionTypes/edit.ctp:17 -#: Template/TransactionTypes/index.ctp:11 -#: Template/TransactionTypes/view.ctp:14 -#: Template/Transactions/add.ctp:10 -#: Template/Transactions/edit.ctp:16 -#: Template/Transactions/view.ctp:12 -msgid "List Transactions" -msgstr "" - -#: Template/StateCreated/add.ctp:12 -#: Template/StateCreated/edit.ctp:18 -#: Template/StateCreated/index.ctp:12 -#: Template/StateCreated/view.ctp:15 -#: Template/StateGroups/add.ctp:18 -#: Template/StateGroups/edit.ctp:24 -#: Template/StateGroups/index.ctp:18 -#: Template/StateGroups/view.ctp:21 -#: Template/StateUserTransactions/add.ctp:14 -#: Template/StateUserTransactions/edit.ctp:20 -#: Template/StateUserTransactions/index.ctp:14 -#: Template/StateUserTransactions/view.ctp:17 -#: Template/TransactionCreations/add.ctp:12 -#: Template/TransactionCreations/edit.ctp:18 -#: Template/TransactionCreations/index.ctp:12 -#: Template/TransactionCreations/view.ctp:15 -#: Template/TransactionGroupAddaddress/add.ctp:12 -#: Template/TransactionGroupAddaddress/edit.ctp:18 -#: Template/TransactionGroupAddaddress/index.ctp:12 -#: Template/TransactionGroupAddaddress/view.ctp:15 -#: Template/TransactionGroupAllowtrades/add.ctp:12 -#: Template/TransactionGroupAllowtrades/edit.ctp:18 -#: Template/TransactionGroupAllowtrades/index.ctp:12 -#: Template/TransactionGroupAllowtrades/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:12 -#: Template/TransactionGroupCreates/edit.ctp:18 -#: Template/TransactionGroupCreates/index.ctp:12 -#: Template/TransactionGroupCreates/view.ctp:15 -#: Template/TransactionSendCoins/add.ctp:12 -#: Template/TransactionSendCoins/edit.ctp:18 -#: Template/TransactionSendCoins/index.ctp:12 -#: Template/TransactionSendCoins/view.ctp:15 -#: Template/TransactionSignatures/add.ctp:12 -#: Template/TransactionSignatures/edit.ctp:18 -#: Template/TransactionSignatures/index.ctp:12 -#: Template/TransactionSignatures/view.ctp:15 -#: Template/TransactionTypes/add.ctp:12 -#: Template/TransactionTypes/edit.ctp:18 -#: Template/TransactionTypes/index.ctp:12 -#: Template/TransactionTypes/view.ctp:15 -#: Template/Transactions/index.ctp:10 -#: Template/Transactions/view.ctp:13 -msgid "New Transaction" -msgstr "" - -#: Template/StateCreated/add.ctp:20 -msgid "Add State Created" -msgstr "" - -#: Template/StateCreated/edit.ctp:26 -#: Template/StateCreated/view.ctp:10 -msgid "Edit State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:10 -#: Template/StateCreated/view.ctp:13 -#: Template/StateUserRoles/index.ctp:16 -#: Template/StateUsers/add.ctp:16 -#: Template/StateUsers/edit.ctp:22 -#: Template/StateUsers/index.ctp:16 -#: Template/Transactions/add.ctp:16 -#: Template/Transactions/edit.ctp:22 -#: Template/Transactions/index.ctp:16 -#: Template/Transactions/view.ctp:19 -msgid "New State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:18 -msgid "State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:11 -msgid "Delete State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:30 -#: Template/StateUsers/view.ctp:53 -#: Template/TransactionCreations/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:22 -#: Template/TransactionGroupCreates/view.ctp:24 -#: Template/TransactionSendCoins/view.ctp:24 -#: Template/TransactionSignatures/view.ctp:22 -msgid "Transaction" -msgstr "" - -#: Template/StateCreated/view.ctp:36 -#: Template/Transactions/view.ctp:61 -msgid "Month" -msgstr "" - -#: Template/StateCreated/view.ctp:40 -#: Template/Transactions/view.ctp:62 -msgid "Year" -msgstr "" - -#: Template/StateCreated/view.ctp:44 -#: Template/Transactions/view.ctp:65 -msgid "Short Ident Hash" -msgstr "" - -#: Template/StateErrors/add.ctp:10 -#: Template/StateErrors/edit.ctp:16 -#: Template/StateErrors/view.ctp:12 -msgid "List State Errors" -msgstr "" - -#: Template/StateErrors/add.ctp:13 -#: Template/StateErrors/edit.ctp:19 -#: Template/StateErrors/index.ctp:13 -#: Template/StateErrors/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:15 -#: Template/StateUserTransactions/edit.ctp:21 -#: Template/StateUserTransactions/index.ctp:15 -#: Template/StateUserTransactions/view.ctp:18 -#: Template/TransactionTypes/add.ctp:10 -#: Template/TransactionTypes/edit.ctp:16 -#: Template/TransactionTypes/view.ctp:12 -#: Template/Transactions/add.ctp:13 -#: Template/Transactions/edit.ctp:19 -#: Template/Transactions/index.ctp:13 -#: Template/Transactions/view.ctp:16 -msgid "List Transaction Types" -msgstr "" - -#: Template/StateErrors/add.ctp:14 -#: Template/StateErrors/edit.ctp:20 -#: Template/StateErrors/index.ctp:14 -#: Template/StateErrors/view.ctp:17 -#: Template/StateUserTransactions/add.ctp:16 -#: Template/StateUserTransactions/edit.ctp:22 -#: Template/StateUserTransactions/index.ctp:16 -#: Template/StateUserTransactions/view.ctp:19 -#: Template/TransactionTypes/index.ctp:10 -#: Template/TransactionTypes/view.ctp:13 -#: Template/Transactions/add.ctp:14 -#: Template/Transactions/edit.ctp:20 -#: Template/Transactions/index.ctp:14 -#: Template/Transactions/view.ctp:17 -msgid "New Transaction Type" -msgstr "" - -#: Template/StateErrors/add.ctp:20 -msgid "Add State Error" -msgstr "" - -#: Template/StateErrors/edit.ctp:26 -#: Template/StateErrors/view.ctp:10 -msgid "Edit State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:10 -#: Template/StateErrors/view.ctp:13 -msgid "New State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:18 -msgid "State Errors" -msgstr "" - -#: Template/StateErrors/show_for_user.ctp:9 -msgid "Fehlermeldungen" -msgstr "" - -#: Template/StateErrors/view.ctp:11 -msgid "Delete State Error" -msgstr "" - -#: Template/StateErrors/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:34 -#: Template/Transactions/view.ctp:42 -msgid "Transaction Type" -msgstr "" - -#: Template/StateErrors/view.ctp:41 -msgid "Message Json" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:17 -#: Template/StateGroupAddresses/index.ctp:11 -#: Template/StateGroupAddresses/view.ctp:14 -#: Template/StateGroups/add.ctp:10 -#: Template/StateGroups/edit.ctp:16 -#: Template/StateGroups/view.ctp:12 -#: Template/StateUserRoles/index.ctp:11 -#: Template/StateUsers/add.ctp:11 -#: Template/StateUsers/edit.ctp:17 -#: Template/StateUsers/index.ctp:11 -#: Template/StateUsers/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:13 -#: Template/TransactionGroupCreates/edit.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:13 -#: Template/TransactionGroupCreates/view.ctp:16 -#: Template/Transactions/add.ctp:11 -#: Template/Transactions/edit.ctp:17 -#: Template/Transactions/index.ctp:11 -#: Template/Transactions/view.ctp:14 -msgid "List State Groups" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:12 -#: Template/StateGroupAddresses/edit.ctp:18 -#: Template/StateGroupAddresses/index.ctp:12 -#: Template/StateGroupAddresses/view.ctp:15 -#: Template/StateGroups/index.ctp:10 -#: Template/StateGroups/view.ctp:13 -#: Template/StateUserRoles/index.ctp:12 -#: Template/StateUsers/add.ctp:12 -#: Template/StateUsers/edit.ctp:18 -#: Template/StateUsers/index.ctp:12 -#: Template/StateUsers/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:14 -#: Template/TransactionGroupCreates/edit.ctp:20 -#: Template/TransactionGroupCreates/index.ctp:14 -#: Template/TransactionGroupCreates/view.ctp:17 -#: Template/Transactions/add.ctp:12 -#: Template/Transactions/edit.ctp:18 -#: Template/Transactions/index.ctp:12 -#: Template/Transactions/view.ctp:15 -msgid "New State Group" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:20 -msgid "Add State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/edit.ctp:26 -#: Template/StateGroupAddresses/view.ctp:10 -msgid "Edit State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:18 -msgid "State Group Addresses" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:25 -#: Template/TransactionGroupAddaddress/index.ctp:25 -msgid "user public key" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:11 -msgid "Delete State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:28 -msgid "Address Type" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:10 -#: Template/StateGroupRelationships/edit.ctp:16 -#: Template/StateGroupRelationships/view.ctp:12 -msgid "List State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:16 -msgid "Add State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/edit.ctp:22 -#: Template/StateGroupRelationships/view.ctp:10 -msgid "Edit State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:10 -#: Template/StateGroupRelationships/view.ctp:13 -msgid "New State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:14 -msgid "State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:11 -msgid "Delete State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:24 -msgid "State Group1 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:28 -msgid "State Group2 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:32 -msgid "State Relationship Id" -msgstr "" - -#: Template/StateGroups/add.ctp:15 -#: Template/StateGroups/edit.ctp:21 -#: Template/StateGroups/index.ctp:15 -#: Template/StateGroups/view.ctp:18 -#: Template/TransactionGroupCreates/add.ctp:10 -#: Template/TransactionGroupCreates/edit.ctp:16 -#: Template/TransactionGroupCreates/view.ctp:12 -#: Template/Transactions/add.ctp:23 -#: Template/Transactions/edit.ctp:29 -#: Template/Transactions/index.ctp:23 -#: Template/Transactions/view.ctp:26 -msgid "List Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/add.ctp:16 -#: Template/StateGroups/edit.ctp:22 -#: Template/StateGroups/index.ctp:16 -#: Template/StateGroups/view.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:10 -#: Template/TransactionGroupCreates/view.ctp:13 -#: Template/Transactions/add.ctp:24 -#: Template/Transactions/edit.ctp:30 -#: Template/Transactions/index.ctp:24 -#: Template/Transactions/view.ctp:27 -msgid "New Transaction Group Create" -msgstr "" - -#: Template/StateGroups/add.ctp:24 -msgid "Add State Group" -msgstr "" - -#: Template/StateGroups/edit.ctp:30 -#: Template/StateGroups/view.ctp:10 -msgid "Edit State Group" -msgstr "" - -#: Template/StateGroups/index.ctp:22 -msgid "State Groups" -msgstr "" - -#: Template/StateGroups/view.ctp:11 -msgid "Delete State Group" -msgstr "" - -#: Template/StateGroups/view.ctp:36 -msgid "User Count" -msgstr "" - -#: Template/StateGroups/view.ctp:46 -#: Template/StateGroups/view.ctp:74 -#: Template/StateGroups/view.ctp:102 -#: Template/StateGroups/view.ctp:129 -#: Template/TransactionTypes/view.ctp:40 -#: Template/Transactions/view.ctp:178 -msgid "State Group Id" -msgstr "" - -#: Template/StateGroups/view.ctp:68 -msgid "Related State Users" -msgstr "" - -#: Template/StateGroups/view.ctp:73 -msgid "Index Id" -msgstr "" - -#: Template/StateGroups/view.ctp:95 -#: Template/Transactions/view.ctp:171 -msgid "Related Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/view.ctp:101 -#: Template/Transactions/view.ctp:177 -msgid "Group Public Key" -msgstr "" - -#: Template/StateGroups/view.ctp:124 -#: Template/TransactionTypes/view.ctp:35 -msgid "Related Transactions" -msgstr "" - -#: Template/StateGroups/view.ctp:130 -#: Template/TransactionTypes/view.ctp:41 -msgid "Transaction Type Id" -msgstr "" - -#: Template/StateGroups/view.ctp:131 -#: Template/TransactionTypes/view.ctp:42 -msgid "Tx Hash" -msgstr "" - -#: Template/StateGroups/view.ctp:132 -#: Template/TransactionTypes/view.ctp:43 -#: Template/Transactions/view.ctp:50 -msgid "Received" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:10 -#: Template/StateRelationshipTypes/edit.ctp:16 -#: Template/StateRelationshipTypes/view.ctp:12 -msgid "List State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:16 -msgid "Add State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/edit.ctp:22 -#: Template/StateRelationshipTypes/view.ctp:10 -msgid "Edit State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:10 -#: Template/StateRelationshipTypes/view.ctp:13 -msgid "New State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:14 -msgid "State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/view.ctp:11 -msgid "Delete State Relationship Type" -msgstr "" - -#: Template/StateUserRoles/assign_role.ctp:9 -#: Template/StateUserRoles/assign_role.ctp:46 -#: Template/StateUserRoles/search.ctp:47 -msgid "Assign Role" -msgstr "" - -#: Template/StateUserRoles/index.ctp:17 -#: Template/StateUsers/add.ctp:17 -#: Template/StateUsers/edit.ctp:23 -#: Template/StateUsers/index.ctp:17 -#: Template/StateUsers/view.ctp:18 -#: Template/TransactionCreations/add.ctp:10 -#: Template/TransactionCreations/edit.ctp:16 -#: Template/TransactionCreations/view.ctp:12 -#: Template/Transactions/add.ctp:17 -#: Template/Transactions/edit.ctp:23 -#: Template/Transactions/index.ctp:17 -#: Template/Transactions/view.ctp:20 -msgid "List Transaction Creations" -msgstr "" - -#: Template/StateUserRoles/index.ctp:18 -#: Template/StateUsers/add.ctp:18 -#: Template/StateUsers/edit.ctp:24 -#: Template/StateUsers/index.ctp:18 -#: Template/StateUsers/view.ctp:19 -#: Template/TransactionCreations/index.ctp:10 -#: Template/TransactionCreations/view.ctp:13 -#: Template/Transactions/add.ctp:18 -#: Template/Transactions/edit.ctp:24 -#: Template/Transactions/index.ctp:18 -#: Template/Transactions/view.ctp:21 -msgid "New Transaction Creation" -msgstr "" - -#: Template/StateUserRoles/index.ctp:19 -#: Template/StateUsers/add.ctp:19 -#: Template/StateUsers/edit.ctp:25 -#: Template/StateUsers/index.ctp:19 -#: Template/StateUsers/view.ctp:20 -#: Template/TransactionSendCoins/add.ctp:10 -#: Template/TransactionSendCoins/edit.ctp:16 -#: Template/TransactionSendCoins/view.ctp:12 -#: Template/Transactions/add.ctp:25 -#: Template/Transactions/edit.ctp:31 -#: Template/Transactions/index.ctp:25 -#: Template/Transactions/view.ctp:28 -msgid "List Transaction Send Coins" -msgstr "" - -#: Template/StateUserRoles/index.ctp:20 -#: Template/StateUsers/add.ctp:20 -#: Template/StateUsers/edit.ctp:26 -#: Template/StateUsers/index.ctp:20 -#: Template/StateUsers/view.ctp:21 -#: Template/TransactionSendCoins/index.ctp:10 -#: Template/TransactionSendCoins/view.ctp:13 -#: Template/Transactions/add.ctp:26 -#: Template/Transactions/edit.ctp:32 -#: Template/Transactions/index.ctp:26 -#: Template/Transactions/view.ctp:29 -msgid "New Transaction Send Coin" -msgstr "" - -#: Template/StateUserRoles/index.ctp:24 -#: Template/StateUserRoles/search.ctp:25 -#: Template/StateUsers/index.ctp:24 -msgid "State Users" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 -#: Template/StateUsers/search.ctp:57 -msgid "Suchbegriff" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 -#: Template/StateUsers/search.ctp:57 -msgid "Vorname/Nachname/E-Mail" -msgstr "" - -#: Template/StateUserRoles/search.ctp:20 -#: Template/StateUsers/search.ctp:59 -#: Template/TransactionCreations/create_multi.ctp:35 -msgid "Suchen" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:10 -#: Template/StateUserTransactions/edit.ctp:16 -#: Template/StateUserTransactions/view.ctp:12 -msgid "List State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:22 -msgid "Add State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/edit.ctp:28 -#: Template/StateUserTransactions/view.ctp:10 -msgid "Edit State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:10 -#: Template/StateUserTransactions/view.ctp:13 -msgid "New State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:20 -msgid "State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/view.ctp:11 -msgid "Delete State User Transaction" -msgstr "" - -#: Template/StateUsers/add.ctp:26 -msgid "Add State User" -msgstr "" - -#: Template/StateUsers/edit.ctp:32 -#: Template/StateUsers/view.ctp:10 -msgid "Edit State User" -msgstr "" - -#: Template/StateUsers/search.ctp:16 -msgid "Alle" -msgstr "" - -#: Template/StateUsers/search.ctp:21 -msgid "Konto nicht aktiviert" -msgstr "" - -#: Template/StateUsers/search.ctp:58 -msgid "Konto Status" -msgstr "" - -#: Template/StateUsers/view.ctp:11 -msgid "Delete State User" -msgstr "" - -#: Template/StateUsers/view.ctp:28 -msgid "State Balance" -msgstr "" - -#: Template/StateUsers/view.ctp:32 -msgid "Letztes Update" -msgstr "" - -#: Template/StateUsers/view.ctp:49 -msgid "Schöpfungen" -msgstr "" - -#: Template/StateUsers/view.ctp:54 -#: Template/StateUsers/view.ctp:84 -#: Template/StateUsers/view.ctp:118 -msgid "Erhalten" -msgstr "" - -#: Template/StateUsers/view.ctp:55 -msgid "Verrechnungs-Datum" -msgstr "" - -#: Template/StateUsers/view.ctp:79 -msgid "Versendete Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:85 -msgid "Empfänger " -msgstr "" - -#: Template/StateUsers/view.ctp:88 -msgid "Betrag nach Senden" -msgstr "" - -#: Template/StateUsers/view.ctp:113 -msgid "Empfangende Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:119 -msgid "Sender" -msgstr "" - -#: Template/TransactionCreations/add.ctp:20 -msgid "Add Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/create.ctp:17 -#: Template/TransactionCreations/create_multi.ctp:17 -msgid "Schöpfungstransaktion" -msgstr "" - -#: Template/TransactionCreations/create.ctp:28 -#: Template/TransactionCreations/create_multi.ctp:125 -msgid "Transaktion(en) abschließen" -msgstr "" - -#: Template/TransactionCreations/create.ctp:29 -#: Template/TransactionCreations/create_multi.ctp:126 -#: Template/TransactionSendCoins/create.ctp:24 -msgid "Weitere Transaktion erstellen" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:34 -msgid "Suche" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:38 -msgid "Memo" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:39 -#: Template/TransactionSendCoins/create.ctp:22 -#: Template/TransactionSendCoins/create_raw.ctp:33 -msgid "Betrag in GDD" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:46 -msgid "Zieldatum" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:81 -msgid "Für benutzerdefinierten Betrag" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:189 -msgid "Alle Transaktionen abgeschlossen!" -msgstr "" - -#: Template/TransactionCreations/edit.ctp:26 -#: Template/TransactionCreations/view.ctp:10 -msgid "Edit Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/index.ctp:18 -msgid "Transaction Creations" -msgstr "" - -#: Template/TransactionCreations/view.ctp:11 -msgid "Delete Transaction Creation" -msgstr "" - -#: Template/TransactionGroupAddaddress/add.ctp:20 -msgid "Add Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/edit.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:10 -msgid "Edit Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/index.ctp:18 -msgid "Transaction Group Addaddress" -msgstr "" - -#: Template/TransactionGroupAddaddress/view.ctp:11 -msgid "Delete Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:10 -#: Template/TransactionGroupAllowtrades/edit.ctp:16 -#: Template/TransactionGroupAllowtrades/view.ctp:12 -#: Template/Transactions/add.ctp:21 -#: Template/Transactions/edit.ctp:27 -#: Template/Transactions/index.ctp:21 -#: Template/Transactions/view.ctp:24 -msgid "List Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:18 -msgid "Add Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/edit.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:10 -msgid "Edit Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:10 -#: Template/TransactionGroupAllowtrades/view.ctp:13 -#: Template/Transactions/add.ctp:22 -#: Template/Transactions/edit.ctp:28 -#: Template/Transactions/index.ctp:22 -#: Template/Transactions/view.ctp:25 -msgid "New Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:16 -msgid "Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:11 -msgid "Delete Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:34 -#: Template/Transactions/view.ctp:151 -msgid "Allow" -msgstr "" - -#: Template/TransactionGroupCreates/add.ctp:20 -msgid "Add Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/edit.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:10 -msgid "Edit Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/index.ctp:18 -msgid "Transaction Group Creates" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:11 -msgid "Delete Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:28 -#: Template/Transactions/view.ctp:38 -msgid "State Group" -msgstr "" - -#: Template/TransactionSendCoins/add.ctp:20 -msgid "Add Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:19 -msgid "Empfänger" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:20 -msgid "Community Alias" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:23 -#: Template/TransactionSendCoins/create_raw.ctp:34 -msgid "Transaktion abschließen" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:29 -msgid "Sender Private Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:30 -msgid "Sender Public Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:31 -msgid "Empfänger Public Key" -msgstr "" - -#: Template/TransactionSendCoins/edit.ctp:26 -#: Template/TransactionSendCoins/view.ctp:10 -msgid "Edit Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/index.ctp:18 -msgid "Transaction Send Coins" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:11 -msgid "Delete Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:40 -#: Template/Transactions/view.ctp:210 -msgid "Sender Final Balance" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:10 -#: Template/TransactionSignatures/edit.ctp:16 -#: Template/TransactionSignatures/view.ctp:12 -#: Template/Transactions/add.ctp:27 -#: Template/Transactions/edit.ctp:33 -#: Template/Transactions/index.ctp:27 -#: Template/Transactions/view.ctp:30 -msgid "List Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:18 -msgid "Add Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/edit.ctp:24 -#: Template/TransactionSignatures/view.ctp:10 -msgid "Edit Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:10 -#: Template/TransactionSignatures/view.ctp:13 -#: Template/Transactions/add.ctp:28 -#: Template/Transactions/edit.ctp:34 -#: Template/Transactions/index.ctp:28 -#: Template/Transactions/view.ctp:31 -msgid "New Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:16 -msgid "Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/view.ctp:11 -msgid "Delete Transaction Signature" -msgstr "" - -#: Template/TransactionTypes/add.ctp:18 -msgid "Add Transaction Type" -msgstr "" - -#: Template/TransactionTypes/edit.ctp:24 -#: Template/TransactionTypes/view.ctp:10 -msgid "Edit Transaction Type" -msgstr "" - -#: Template/TransactionTypes/index.ctp:16 -msgid "Transaction Types" -msgstr "" - -#: Template/TransactionTypes/view.ctp:11 -msgid "Delete Transaction Type" -msgstr "" - -#: Template/Transactions/add.ctp:34 -msgid "Add Transaction" -msgstr "" - -#: Template/Transactions/edit.ctp:40 -#: Template/Transactions/view.ctp:10 -msgid "Edit Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:26 -msgid "Creation Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:41 -msgid "Transfer Transaction" -msgstr "" - -#: Template/Transactions/send_to_node.ctp:8 -msgid "Transaktionen an Gradido-Node senden" -msgstr "" - -#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44 -msgid "Synchronize" -msgstr "" - -#: Template/Transactions/view.ctp:11 -msgid "Delete Transaction" -msgstr "" - -#: Template/Transactions/view.ctp:55 -msgid "Related State Created" -msgstr "" - -#: Template/Transactions/view.ctp:88 -msgid "Related Transaction Creations" -msgstr "" - -#: Template/Transactions/view.ctp:96 -msgid "Ident Hash" -msgstr "" - -#: Template/Transactions/view.ctp:144 -msgid "Related Transaction Group Allowtrades" -msgstr "" - -#: Template/Transactions/view.ctp:200 -msgid "Related Transaction Send Coins" -msgstr "" - -#: Template/Transactions/view.ctp:207 -msgid "Receiver Public Key" -msgstr "" - -#: Template/Transactions/view.ctp:208 -msgid "Receiver User Id" -msgstr "" - -#: Template/Transactions/view.ctp:233 -msgid "Related Transaction Signatures" -msgstr "" - -#: Template/Transactions/view.ctp:239 -msgid "Signature" -msgstr "" - -#: Template/Transactions/view.ctp:240 -msgid "Pubkey" -msgstr "" - -#: Template/Users/add.ctp:10 -#: Template/Users/edit.ctp:16 -#: Template/Users/view.ctp:12 -msgid "List Users" -msgstr "" - -#: Template/Users/add.ctp:16 -msgid "Add User" -msgstr "" - -#: Template/Users/edit.ctp:22 -#: Template/Users/view.ctp:10 -msgid "Edit User" -msgstr "" - -#: Template/Users/index.ctp:10 -#: Template/Users/view.ctp:13 -msgid "New User" -msgstr "" - -#: Template/Users/index.ctp:14 -msgid "Users" -msgstr "" - -#: Template/Users/statistics.ctp:9 -msgid "Benutzer Statistiken" -msgstr "" - -#: Template/Users/statistics.ctp:39 -msgid "Alle Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:56 -msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl" -msgstr "" - -#: Template/Users/statistics.ctp:61 -msgid "Letzte Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:66 -msgid "Erstellt" -msgstr "" - -#: Template/Users/statistics.ctp:79 -msgid "Anmeldungen detailliert" -msgstr "" - -#: Template/Users/statistics.ctp:82 -msgid "Jahr" -msgstr "" - -#: Template/Users/statistics.ctp:83 -msgid "Monat" -msgstr "" - -#: Template/Users/statistics.ctp:84 -msgid "Anzahl Anmeldungen" -msgstr "" - -#: Template/Users/view.ctp:11 -msgid "Delete User" -msgstr "" - -#: Template/Users/view.ctp:24 -msgid "First Name" -msgstr "" - -#: Template/Users/view.ctp:28 -msgid "Last Name" -msgstr "" - -#: Template/Users/view.ctp:32 -msgid "Language" -msgstr "" - -#: Template/Users/view.ctp:48 -msgid "Email Checked" -msgstr "" - diff --git a/community_server/src/Model/Behavior/empty b/community_server/src/Model/Behavior/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/Model/Entity/AddressType.php b/community_server/src/Model/Entity/AddressType.php deleted file mode 100644 index 87d64d61a..000000000 --- a/community_server/src/Model/Entity/AddressType.php +++ /dev/null @@ -1,33 +0,0 @@ - true, - 'text' => true, - 'state_group_addresses' => true, - 'transaction_group_addaddress' => true, - ]; -} diff --git a/community_server/src/Model/Entity/AdminError.php b/community_server/src/Model/Entity/AdminError.php deleted file mode 100644 index 23c60fd4a..000000000 --- a/community_server/src/Model/Entity/AdminError.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - 'controller' => true, - 'action' => true, - 'state' => true, - 'msg' => true, - 'details' => true, - 'created' => true, - 'state_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/BlockchainType.php b/community_server/src/Model/Entity/BlockchainType.php deleted file mode 100644 index c2e21402c..000000000 --- a/community_server/src/Model/Entity/BlockchainType.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'text' => true, - 'symbol' => true, - ]; -} diff --git a/community_server/src/Model/Entity/CommunityProfile.php b/community_server/src/Model/Entity/CommunityProfile.php deleted file mode 100644 index 367fe713c..000000000 --- a/community_server/src/Model/Entity/CommunityProfile.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'profile_img' => true, - 'profile_desc' => true, - ]; -} diff --git a/community_server/src/Model/Entity/ElopageBuy.php b/community_server/src/Model/Entity/ElopageBuy.php deleted file mode 100644 index eca2f760b..000000000 --- a/community_server/src/Model/Entity/ElopageBuy.php +++ /dev/null @@ -1,57 +0,0 @@ - true, - 'affiliate_program_id' => true, - 'publisher_id' => true, - 'order_id' => true, - 'product_id' => true, - 'product_price' => true, - 'payer_email' => true, - 'publisher_email' => true, - 'payed' => true, - 'success_date' => true, - 'event' => true, - 'elopage_user' => true, - 'affiliate_program' => true, - 'publisher' => true, - 'order' => true, - 'product' => true, - ]; -} diff --git a/community_server/src/Model/Entity/Operator.php b/community_server/src/Model/Entity/Operator.php deleted file mode 100644 index 9d5ddd3ca..000000000 --- a/community_server/src/Model/Entity/Operator.php +++ /dev/null @@ -1,32 +0,0 @@ - true, - 'user_pubkey' => true, - 'operator_type_id' => true, - 'data_base64' => true, - 'modified' => true - ]; -} diff --git a/community_server/src/Model/Entity/OperatorType.php b/community_server/src/Model/Entity/OperatorType.php deleted file mode 100644 index 0ca968f47..000000000 --- a/community_server/src/Model/Entity/OperatorType.php +++ /dev/null @@ -1,31 +0,0 @@ - true, - 'text' => true, - 'operators' => true - ]; -} diff --git a/community_server/src/Model/Entity/Role.php b/community_server/src/Model/Entity/Role.php deleted file mode 100644 index ae0ddd0ba..000000000 --- a/community_server/src/Model/Entity/Role.php +++ /dev/null @@ -1,26 +0,0 @@ - true, - ]; -} diff --git a/community_server/src/Model/Entity/ServerUser.php b/community_server/src/Model/Entity/ServerUser.php deleted file mode 100644 index f1d47fd34..000000000 --- a/community_server/src/Model/Entity/ServerUser.php +++ /dev/null @@ -1,57 +0,0 @@ - true, - 'password' => true, - 'email' => true, - 'role' => true, - 'activated' => true, - 'last_login' => true, - 'created' => true, - 'modified' => true - ]; - - /** - * Fields that are excluded from JSON versions of the entity. - * - * @var array - */ - protected $_hidden = [ - 'password' - ]; - - protected function _setPassword($password) - { - if (strlen($password) > 0) { - return (new DefaultPasswordHasher)->hash($password); - } - } -} diff --git a/community_server/src/Model/Entity/StateBalance.php b/community_server/src/Model/Entity/StateBalance.php deleted file mode 100644 index 334db222f..000000000 --- a/community_server/src/Model/Entity/StateBalance.php +++ /dev/null @@ -1,89 +0,0 @@ - true, - 'modified' => true, - 'record_date' => true, - 'amount' => true, - 'record_date' => true, - 'state_user' => true - ]; - - protected $_virtual = ['decay','amount_float']; - - private function convertToTimestamp($dateOrTime) - { - if(method_exists($dateOrTime, 'getTimestamp')) { - return $dateOrTime->getTimestamp(); - } else if(method_exists($dateOrTime, 'i18nFormat')) { - return $dateOrTime->i18nFormat(Time::UNIX_TIMESTAMP_FORMAT); - } else { - return 0; - } - } - - protected function _getDecay() - { - // decay factor in seconds per year - // q = e^((lg Kn - lg K0) / n) - // 0.999999978 - // - // SELECT TIMESTAMPDIFF(SECOND, modified, CURDATE()) AS age_in_seconds from state_balances - // decay_for_duration = decay_factor^seconds - // decay = gradido_cent * decay_for_duration - $startDate = $this->convertToTimestamp($this->record_date); - if($startDate == 0) { - return $this->amount; - } - - $decay_duration = intval(Time::now()->getTimestamp() - $startDate); - if($decay_duration === 0) { - return $this->amount; - } - //return $this->amount; - return intval($this->amount * pow(0.99999997802044727, $decay_duration)); - - } - - public function partDecay($target_date) - { - $decay_duration = intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); - if($decay_duration <= 0) { - return $this->amount; - } - //return 0; - return intval($this->amount * pow(0.99999997802044727, $decay_duration)); - } - - public function decayDuration($target_date) - { - return intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); - } -} - diff --git a/community_server/src/Model/Entity/StateCreated.php b/community_server/src/Model/Entity/StateCreated.php deleted file mode 100644 index 99c783e6c..000000000 --- a/community_server/src/Model/Entity/StateCreated.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - 'month' => true, - 'year' => true, - 'state_user_id' => true, - 'created' => true, - 'short_ident_hash' => true, - 'transaction' => true, - 'state_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateError.php b/community_server/src/Model/Entity/StateError.php deleted file mode 100644 index 448e9ccb3..000000000 --- a/community_server/src/Model/Entity/StateError.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'transaction_type_id' => true, - 'created' => true, - 'message_json' => true, - 'state_user' => true, - 'transaction_type' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateGroup.php b/community_server/src/Model/Entity/StateGroup.php deleted file mode 100644 index c2bdc75fc..000000000 --- a/community_server/src/Model/Entity/StateGroup.php +++ /dev/null @@ -1,43 +0,0 @@ - true, - 'name' => true, - 'root_public_key' => true, - 'user_count' => true, - 'index' => true, - 'state_group_addresses' => true, - 'state_users' => true, - 'transaction_group_creates' => true, - 'transactions' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateGroupAddress.php b/community_server/src/Model/Entity/StateGroupAddress.php deleted file mode 100644 index e2d669d09..000000000 --- a/community_server/src/Model/Entity/StateGroupAddress.php +++ /dev/null @@ -1,35 +0,0 @@ - true, - 'public_key' => true, - 'address_type_id' => true, - 'state_group' => true, - 'address_type' => true, - ]; -} diff --git a/community_server/src/Model/Entity/StateGroupRelationship.php b/community_server/src/Model/Entity/StateGroupRelationship.php deleted file mode 100644 index 974b1375d..000000000 --- a/community_server/src/Model/Entity/StateGroupRelationship.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'state_group2_id' => true, - 'state_relationship_id' => true, - 'state_group1' => true, - 'state_group2' => true, - 'state_relationship' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateRelationshipType.php b/community_server/src/Model/Entity/StateRelationshipType.php deleted file mode 100644 index f3c70d31e..000000000 --- a/community_server/src/Model/Entity/StateRelationshipType.php +++ /dev/null @@ -1,28 +0,0 @@ - true, - 'text' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateUser.php b/community_server/src/Model/Entity/StateUser.php deleted file mode 100644 index 5fac7cda7..000000000 --- a/community_server/src/Model/Entity/StateUser.php +++ /dev/null @@ -1,58 +0,0 @@ - true, - 'state_group_id' => true, - 'public_key' => true, - 'email' => true, - 'first_name' => true, - 'last_name' => true, - 'disabled' => true, - 'username' => true, - 'index' => true, - 'state_group' => true, - 'state_balances' => true, - 'state_created' => true, - 'transaction_creations' => true, - 'transaction_send_coins' => true - ]; - - public function getEmailWithName() - { - return $this->first_name . ' ' . $this->last_name . ' <' . $this->email . '>'; - } - - public function getNames() - { - return $this->first_name . ' ' . $this->last_name; - } -} diff --git a/community_server/src/Model/Entity/StateUserRole.php b/community_server/src/Model/Entity/StateUserRole.php deleted file mode 100644 index d510bb025..000000000 --- a/community_server/src/Model/Entity/StateUserRole.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'role_id' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateUserTransaction.php b/community_server/src/Model/Entity/StateUserTransaction.php deleted file mode 100644 index 9fed345a5..000000000 --- a/community_server/src/Model/Entity/StateUserTransaction.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'transaction_id' => true, - 'transaction_type_id' => true, - 'state_user' => true, - 'transaction' => true, - 'transaction_type' => true, - ]; -} diff --git a/community_server/src/Model/Entity/Transaction.php b/community_server/src/Model/Entity/Transaction.php deleted file mode 100644 index 209b8997e..000000000 --- a/community_server/src/Model/Entity/Transaction.php +++ /dev/null @@ -1,53 +0,0 @@ - true, - 'transaction_type_id' => true, - 'tx_hash' => true, - 'memo' => true, - 'received' => true, - 'blockchain_type_id' => true, - 'state_group' => true, - 'transaction_type' => true, - 'state_created' => true, - 'transaction_creations' => true, - 'transaction_group_addaddress' => true, - 'transaction_group_allowtrades' => true, - 'transaction_group_creates' => true, - 'transaction_send_coins' => true, - 'transaction_signatures' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionCreation.php b/community_server/src/Model/Entity/TransactionCreation.php deleted file mode 100644 index 36aa7ac2d..000000000 --- a/community_server/src/Model/Entity/TransactionCreation.php +++ /dev/null @@ -1,39 +0,0 @@ - true, - 'state_user_id' => true, - 'amount' => true, - 'ident_hash' => true, - 'transaction' => true, - 'state_user' => true, - 'target_date' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupAddaddres.php b/community_server/src/Model/Entity/TransactionGroupAddaddres.php deleted file mode 100644 index 30819209f..000000000 --- a/community_server/src/Model/Entity/TransactionGroupAddaddres.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'address_type_id' => true, - 'remove_from_group' => true, - 'public_key' => true, - 'transaction' => true, - 'address_type' => true, - 'state_user_id' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php b/community_server/src/Model/Entity/TransactionGroupAllowtrade.php deleted file mode 100644 index d097c643f..000000000 --- a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php +++ /dev/null @@ -1,35 +0,0 @@ - true, - 'group_id' => true, - 'allow' => true, - 'transaction' => true, - 'group' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupCreate.php b/community_server/src/Model/Entity/TransactionGroupCreate.php deleted file mode 100644 index 26fab510b..000000000 --- a/community_server/src/Model/Entity/TransactionGroupCreate.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'group_public_key' => true, - 'state_group_id' => true, - 'name' => true, - 'transaction' => true, - 'state_group' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionSendCoin.php b/community_server/src/Model/Entity/TransactionSendCoin.php deleted file mode 100644 index 4d774501e..000000000 --- a/community_server/src/Model/Entity/TransactionSendCoin.php +++ /dev/null @@ -1,43 +0,0 @@ - true, - 'state_user_id' => true, - 'receiver_public_key' => true, - 'receiver_user_id' => true, - 'amount' => true, - 'sender_final_balance' => true, - 'transaction' => true, - 'state_user' => true, - 'receiver_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionSignature.php b/community_server/src/Model/Entity/TransactionSignature.php deleted file mode 100644 index 16bce8b00..000000000 --- a/community_server/src/Model/Entity/TransactionSignature.php +++ /dev/null @@ -1,33 +0,0 @@ - true, - 'signature' => true, - 'pubkey' => true, - 'transaction' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionType.php b/community_server/src/Model/Entity/TransactionType.php deleted file mode 100644 index b8f13e474..000000000 --- a/community_server/src/Model/Entity/TransactionType.php +++ /dev/null @@ -1,31 +0,0 @@ - true, - 'text' => true, - 'transactions' => true - ]; -} diff --git a/community_server/src/Model/Entity/User.php b/community_server/src/Model/Entity/User.php deleted file mode 100644 index 352371471..000000000 --- a/community_server/src/Model/Entity/User.php +++ /dev/null @@ -1,58 +0,0 @@ - true, - 'first_name' => true, - 'last_name' => true, - 'password' => true, - 'pubkey' => true, - 'privkey' => true, - 'created' => true, - 'email_checked' => true, - 'language' => true, - 'email_opt_in' => true, - 'user_backups' => true, - 'user_roles' => true, - ]; - - /** - * Fields that are excluded from JSON versions of the entity. - * - * @var array - */ - protected $_hidden = [ - 'password', - ]; -} diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php deleted file mode 100644 index 60fa5f22b..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php +++ /dev/null @@ -1,39 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0aca030a186772616469646f2f426173696354797065732e70726f746f12" . - "0d70726f746f2e6772616469646f22380a034b657912110a076564323535" . - "313918022001280c480012170a0d656432353531395f7265663130180320" . - "01280c480042050a036b657922580a0d5369676e61747572655061697212" . - "0e0a067075624b657918012001280c12110a076564323535313918022001" . - "280c480012170a0d656432353531395f726566313018032001280c480042" . - "0b0a097369676e6174757265223d0a0c5369676e61747572654d6170122d" . - "0a077369675061697218012003280b321c2e70726f746f2e677261646964" . - "6f2e5369676e617475726550616972222b0a0954696d657374616d70120f" . - "0a077365636f6e6473180120012803120d0a056e616e6f73180220012805" . - "22230a1054696d657374616d705365636f6e6473120f0a077365636f6e64" . - "7318012001280322300a0e5472616e73666572416d6f756e74120e0a0670" . - "75626b657918012001280c120e0a06616d6f756e7418022001281222400a" . - "08486564657261494412100a0873686172644e756d18012001280312100a" . - "087265616c6d4e756d18022001280312100a08746f7069634e756d180320" . - "012803620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php deleted file mode 100644 index ebe7409db..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ab0010a1d6772616469646f2f4772616469646f4372656174696f6e2e70" . - "726f746f120d70726f746f2e6772616469646f22780a0f4772616469646f" . - "4372656174696f6e122f0a08726563656976657218012001280b321d2e70" . - "726f746f2e6772616469646f2e5472616e73666572416d6f756e7412340a" . - "0b7461726765745f6461746518032001280b321f2e70726f746f2e677261" . - "6469646f2e54696d657374616d705365636f6e6473620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php deleted file mode 100644 index 78460bd9f..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php +++ /dev/null @@ -1,29 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0a91010a206772616469646f2f4772616469646f5472616e73616374696f" . - "6e2e70726f746f120d70726f746f2e6772616469646f22560a1247726164" . - "69646f5472616e73616374696f6e122c0a077369675f6d61701801200128" . - "0b321b2e70726f746f2e6772616469646f2e5369676e61747572654d6170" . - "12120a0a626f64795f627974657318022001280c620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php deleted file mode 100644 index 6d7e6e375..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php +++ /dev/null @@ -1,41 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ae6030a1d6772616469646f2f4772616469646f5472616e736665722e70" . - "726f746f120d70726f746f2e6772616469646f22500a0d4c6f63616c5472" . - "616e73666572122d0a0673656e64657218012001280b321d2e70726f746f" . - "2e6772616469646f2e5472616e73666572416d6f756e7412100a08726563" . - "656976657218022001280c22a3010a1243726f737347726f75705472616e" . - "73666572122d0a0673656e64657218012001280b321d2e70726f746f2e67" . - "72616469646f2e5472616e73666572416d6f756e7412100a087265636569" . - "76657218022001280c12130a0b6f746865725f67726f7570180320012809" . - "12370a157061697265645f7472616e73616374696f6e5f69641804200128" . - "0b32182e70726f746f2e6772616469646f2e54696d657374616d7022b501" . - "0a0f4772616469646f5472616e73666572122d0a056c6f63616c18012001" . - "280b321c2e70726f746f2e6772616469646f2e4c6f63616c5472616e7366" . - "6572480012340a07696e626f756e6418022001280b32212e70726f746f2e" . - "6772616469646f2e43726f737347726f75705472616e7366657248001235" . - "0a086f7574626f756e6418032001280b32212e70726f746f2e6772616469" . - "646f2e43726f737347726f75705472616e73666572480042060a04646174" . - "61620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php deleted file mode 100644 index 929e33b9d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ac6010a206772616469646f2f47726f7570467269656e64735570646174" . - "652e70726f746f120d70726f746f2e6772616469646f228a010a1247726f" . - "7570467269656e6473557064617465120d0a0567726f7570180120012809" . - "12380a06616374696f6e18022001280e32282e70726f746f2e6772616469" . - "646f2e47726f7570467269656e64735570646174652e416374696f6e222b" . - "0a06416374696f6e120e0a0a4144445f465249454e44100012110a0d5245" . - "4d4f56455f465249454e441001620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php deleted file mode 100644 index c2a308292..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php +++ /dev/null @@ -1,36 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ad2020a1f6772616469646f2f47726f75704d656d626572557064617465" . - "2e70726f746f120d70726f746f2e6772616469646f2297020a1147726f75" . - "704d656d62657255706461746512130a0b757365725f7075626b65791801" . - "2001280c124d0a126d656d6265725f7570646174655f7479706518022001" . - "280e32312e70726f746f2e6772616469646f2e47726f75704d656d626572" . - "5570646174652e4d656d6265725570646174655479706512370a15706169" . - "7265645f7472616e73616374696f6e5f696418032001280b32182e70726f" . - "746f2e6772616469646f2e54696d657374616d7012140a0c746172676574" . - "5f67726f7570180420012809224f0a104d656d6265725570646174655479" . - "7065120c0a084144445f55534552100012150a114d4f56455f555345525f" . - "494e424f554e44100112160a124d4f56455f555345525f4f5554424f554e" . - "441002620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php deleted file mode 100644 index aec11c28b..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php +++ /dev/null @@ -1,32 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ab9010a1c6772616469646f2f4d616e6167654e6f6465426f64792e7072" . - "6f746f120d70726f746f2e6772616469646f1a186772616469646f2f4261" . - "73696354797065732e70726f746f22680a0e4d616e6167654e6f6465426f" . - "647912160a0e76657273696f6e5f6e756d62657218012001280412360a09" . - "67726f75705f61646418032001280b32212e70726f746f2e677261646964" . - "6f2e4d616e6167654e6f646547726f7570416464480042060a0464617461" . - "620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php deleted file mode 100644 index ffb25984d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0aaa010a206772616469646f2f4d616e6167654e6f646547726f75704164" . - "642e70726f746f120d70726f746f2e6772616469646f226f0a124d616e61" . - "67654e6f646547726f757041646412120a0a67726f75705f6e616d651801" . - "2001280912130a0b67726f75705f616c69617318022001280912300a0f68" . - "65646572615f746f7069635f696418032001280b32172e70726f746f2e67" . - "72616469646f2e4865646572614944620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php deleted file mode 100644 index ef7dca297..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php +++ /dev/null @@ -1,36 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ade020a1f6772616469646f2f4d616e6167654e6f646552657175657374" . - "2e70726f746f120d70726f746f2e6772616469646f22550a114d616e6167" . - "654e6f646552657175657374122c0a077369675f6d617018012001280b32" . - "1b2e70726f746f2e6772616469646f2e5369676e61747572654d61701212" . - "0a0a626f64795f627974657318022001280c22cc010a124d616e6167654e" . - "6f6465526573706f6e7365120f0a0773756363657373180120012808123a" . - "0a056572726f7218022001280e322b2e70726f746f2e6772616469646f2e" . - "4d616e6167654e6f6465526573706f6e73652e4572726f72436f64652269" . - "0a094572726f72436f646512100a0c494e56414c49445f424f4459100012" . - "150a11494e56414c49445f5349474e4154555245100112140a105349474e" . - "45525f4e4f545f4b4e4f574e1002121d0a1947524f55505f414c4941535f" . - "414c52454144595f45584953541003620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php deleted file mode 100644 index f55b61f4d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php +++ /dev/null @@ -1,46 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0a92040a1d6772616469646f2f5472616e73616374696f6e426f64792e70" . - "726f746f120d70726f746f2e6772616469646f1a1d6772616469646f2f47" . - "72616469646f4372656174696f6e2e70726f746f1a206772616469646f2f" . - "47726f7570467269656e64735570646174652e70726f746f1a1f67726164" . - "69646f2f47726f75704d656d6265725570646174652e70726f746f1a1867" . - "72616469646f2f426173696354797065732e70726f746f22dd020a0f5472" . - "616e73616374696f6e426f6479120c0a046d656d6f18012001280912300a" . - "076372656174656418022001280b321f2e70726f746f2e6772616469646f" . - "2e54696d657374616d705365636f6e647312160a0e76657273696f6e5f6e" . - "756d62657218032001280412320a087472616e7366657218062001280b32" . - "1e2e70726f746f2e6772616469646f2e4772616469646f5472616e736665" . - "72480012320a086372656174696f6e18072001280b321e2e70726f746f2e" . - "6772616469646f2e4772616469646f4372656174696f6e480012410a1467" . - "726f75705f667269656e64735f75706461746518082001280b32212e7072" . - "6f746f2e6772616469646f2e47726f7570467269656e6473557064617465" . - "4800123f0a1367726f75705f6d656d6265725f7570646174651809200128" . - "0b32202e70726f746f2e6772616469646f2e47726f75704d656d62657255" . - "7064617465480042060a0464617461620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php deleted file mode 100644 index 781ac8f25..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php +++ /dev/null @@ -1,146 +0,0 @@ -proto.gradido.CrossGroupTransfer - */ -class CrossGroupTransfer extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - */ - private $sender = null; - /** - * Generated from protobuf field bytes receiver = 2; - */ - private $receiver = ''; - /** - * Generated from protobuf field string other_group = 3; - */ - private $other_group = ''; - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - */ - private $paired_transaction_id = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $sender - * @type string $receiver - * @type string $other_group - * @type \Proto\Gradido\Timestamp $paired_transaction_id - * this matches related OutboundTransfer.paired_transaction_id - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getSender() - { - return $this->sender; - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setSender($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->sender = $var; - - return $this; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @return string - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @param string $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkString($var, False); - $this->receiver = $var; - - return $this; - } - - /** - * Generated from protobuf field string other_group = 3; - * @return string - */ - public function getOtherGroup() - { - return $this->other_group; - } - - /** - * Generated from protobuf field string other_group = 3; - * @param string $var - * @return $this - */ - public function setOtherGroup($var) - { - GPBUtil::checkString($var, True); - $this->other_group = $var; - - return $this; - } - - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - * @return \Proto\Gradido\Timestamp - */ - public function getPairedTransactionId() - { - return $this->paired_transaction_id; - } - - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - * @param \Proto\Gradido\Timestamp $var - * @return $this - */ - public function setPairedTransactionId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class); - $this->paired_transaction_id = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php deleted file mode 100644 index 9b4c3208d..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php +++ /dev/null @@ -1,102 +0,0 @@ -proto.gradido.GradidoCreation - */ -class GradidoCreation extends \Google\Protobuf\Internal\Message -{ - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - */ - private $receiver = null; - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - */ - private $target_date = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $receiver - * 40 Byte - * @type \Proto\Gradido\TimestampSeconds $target_date - * 8 Byte - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoCreation::initOnce(); - parent::__construct($data); - } - - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->receiver = $var; - - return $this; - } - - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - * @return \Proto\Gradido\TimestampSeconds - */ - public function getTargetDate() - { - return $this->target_date; - } - - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - * @param \Proto\Gradido\TimestampSeconds $var - * @return $this - */ - public function setTargetDate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class); - $this->target_date = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php deleted file mode 100644 index b4b34c77e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php +++ /dev/null @@ -1,116 +0,0 @@ -proto.gradido.GradidoTransaction - */ -class GradidoTransaction extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - */ - private $sig_map = null; - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - */ - private $body_bytes = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignatureMap $sig_map - * @type string $body_bytes - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransaction::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @return \Proto\Gradido\SignatureMap - */ - public function getSigMap() - { - return $this->sig_map; - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @param \Proto\Gradido\SignatureMap $var - * @return $this - */ - public function setSigMap($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class); - $this->sig_map = $var; - - return $this; - } - - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - * @return string - */ - public function getBodyBytes() - { - return $this->body_bytes; - } - - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - * @param string $var - * @return $this - */ - public function setBodyBytes($var) - { - GPBUtil::checkString($var, False); - $this->body_bytes = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php deleted file mode 100644 index a76954c2e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php +++ /dev/null @@ -1,109 +0,0 @@ -proto.gradido.GradidoTransfer - */ -class GradidoTransfer extends \Google\Protobuf\Internal\Message -{ - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\LocalTransfer $local - * @type \Proto\Gradido\CrossGroupTransfer $inbound - * @type \Proto\Gradido\CrossGroupTransfer $outbound - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.LocalTransfer local = 1; - * @return \Proto\Gradido\LocalTransfer - */ - public function getLocal() - { - return $this->readOneof(1); - } - - /** - * Generated from protobuf field .proto.gradido.LocalTransfer local = 1; - * @param \Proto\Gradido\LocalTransfer $var - * @return $this - */ - public function setLocal($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\LocalTransfer::class); - $this->writeOneof(1, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2; - * @return \Proto\Gradido\CrossGroupTransfer - */ - public function getInbound() - { - return $this->readOneof(2); - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2; - * @param \Proto\Gradido\CrossGroupTransfer $var - * @return $this - */ - public function setInbound($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3; - * @return \Proto\Gradido\CrossGroupTransfer - */ - public function getOutbound() - { - return $this->readOneof(3); - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3; - * @param \Proto\Gradido\CrossGroupTransfer $var - * @return $this - */ - public function setOutbound($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php deleted file mode 100644 index 22e86d3e1..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php +++ /dev/null @@ -1,92 +0,0 @@ -proto.gradido.GroupFriendsUpdate - */ -class GroupFriendsUpdate extends \Google\Protobuf\Internal\Message -{ - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - */ - private $group = ''; - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - */ - private $action = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $group - * char[16], alias - * @type int $action - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GroupFriendsUpdate::initOnce(); - parent::__construct($data); - } - - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - * @return string - */ - public function getGroup() - { - return $this->group; - } - - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - * @param string $var - * @return $this - */ - public function setGroup($var) - { - GPBUtil::checkString($var, True); - $this->group = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - * @return int - */ - public function getAction() - { - return $this->action; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - * @param int $var - * @return $this - */ - public function setAction($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\GroupFriendsUpdate_Action::class); - $this->action = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php deleted file mode 100644 index 2a3396c55..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php +++ /dev/null @@ -1,51 +0,0 @@ -proto.gradido.GroupFriendsUpdate.Action - */ -class Action -{ - /** - * Generated from protobuf enum ADD_FRIEND = 0; - */ - const ADD_FRIEND = 0; - /** - * Generated from protobuf enum REMOVE_FRIEND = 1; - */ - const REMOVE_FRIEND = 1; - - private static $valueToName = [ - self::ADD_FRIEND => 'ADD_FRIEND', - self::REMOVE_FRIEND => 'REMOVE_FRIEND', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Action::class, \Proto\Gradido\GroupFriendsUpdate_Action::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php deleted file mode 100644 index 24f8cef70..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.GroupMemberUpdate - */ -class GroupMemberUpdate extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes user_pubkey = 1; - */ - private $user_pubkey = ''; - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - */ - private $member_update_type = 0; - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - */ - private $paired_transaction_id = null; - /** - * Generated from protobuf field string target_group = 4; - */ - private $target_group = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $user_pubkey - * @type int $member_update_type - * @type \Proto\Gradido\Timestamp $paired_transaction_id - * this only makes sense for user move, TODO: probably restructure - * @type string $target_group - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GroupMemberUpdate::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes user_pubkey = 1; - * @return string - */ - public function getUserPubkey() - { - return $this->user_pubkey; - } - - /** - * Generated from protobuf field bytes user_pubkey = 1; - * @param string $var - * @return $this - */ - public function setUserPubkey($var) - { - GPBUtil::checkString($var, False); - $this->user_pubkey = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - * @return int - */ - public function getMemberUpdateType() - { - return $this->member_update_type; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - * @param int $var - * @return $this - */ - public function setMemberUpdateType($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class); - $this->member_update_type = $var; - - return $this; - } - - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - * @return \Proto\Gradido\Timestamp - */ - public function getPairedTransactionId() - { - return $this->paired_transaction_id; - } - - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - * @param \Proto\Gradido\Timestamp $var - * @return $this - */ - public function setPairedTransactionId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class); - $this->paired_transaction_id = $var; - - return $this; - } - - /** - * Generated from protobuf field string target_group = 4; - * @return string - */ - public function getTargetGroup() - { - return $this->target_group; - } - - /** - * Generated from protobuf field string target_group = 4; - * @param string $var - * @return $this - */ - public function setTargetGroup($var) - { - GPBUtil::checkString($var, True); - $this->target_group = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php deleted file mode 100644 index 57580cd75..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php +++ /dev/null @@ -1,56 +0,0 @@ -proto.gradido.GroupMemberUpdate.MemberUpdateType - */ -class MemberUpdateType -{ - /** - * Generated from protobuf enum ADD_USER = 0; - */ - const ADD_USER = 0; - /** - * Generated from protobuf enum MOVE_USER_INBOUND = 1; - */ - const MOVE_USER_INBOUND = 1; - /** - * Generated from protobuf enum MOVE_USER_OUTBOUND = 2; - */ - const MOVE_USER_OUTBOUND = 2; - - private static $valueToName = [ - self::ADD_USER => 'ADD_USER', - self::MOVE_USER_INBOUND => 'MOVE_USER_INBOUND', - self::MOVE_USER_OUTBOUND => 'MOVE_USER_OUTBOUND', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(MemberUpdateType::class, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php deleted file mode 100644 index b7080cf75..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.HederaID - */ -class HederaID extends \Google\Protobuf\Internal\Message -{ - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - */ - private $shardNum = 0; - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - */ - private $realmNum = 0; - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - */ - private $topicNum = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $shardNum - * The shard number (nonnegative) - * @type int|string $realmNum - * The realm number (nonnegative) - * @type int|string $topicNum - * Unique topic identifier within a realm (nonnegative). - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - * @return int|string - */ - public function getShardNum() - { - return $this->shardNum; - } - - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - * @param int|string $var - * @return $this - */ - public function setShardNum($var) - { - GPBUtil::checkInt64($var); - $this->shardNum = $var; - - return $this; - } - - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - * @return int|string - */ - public function getRealmNum() - { - return $this->realmNum; - } - - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - * @param int|string $var - * @return $this - */ - public function setRealmNum($var) - { - GPBUtil::checkInt64($var); - $this->realmNum = $var; - - return $this; - } - - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - * @return int|string - */ - public function getTopicNum() - { - return $this->topicNum; - } - - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - * @param int|string $var - * @return $this - */ - public function setTopicNum($var) - { - GPBUtil::checkInt64($var); - $this->topicNum = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/Key.php b/community_server/src/Model/Messages/Proto/Gradido/Key.php deleted file mode 100644 index 4c32e0083..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/Key.php +++ /dev/null @@ -1,96 +0,0 @@ -proto.gradido.Key - */ -class Key extends \Google\Protobuf\Internal\Message -{ - protected $key; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $ed25519 - * ed25519 signature (libsodium default) - * @type string $ed25519_ref10 - * ed25519 ref10 signature - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @return string - */ - public function getEd25519() - { - return $this->readOneof(2); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @param string $var - * @return $this - */ - public function setEd25519($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @return string - */ - public function getEd25519Ref10() - { - return $this->readOneof(3); - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @param string $var - * @return $this - */ - public function setEd25519Ref10($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getKey() - { - return $this->whichOneof("key"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php deleted file mode 100644 index 58f5e23ae..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.LocalTransfer - */ -class LocalTransfer extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - */ - private $sender = null; - /** - * Generated from protobuf field bytes receiver = 2; - */ - private $receiver = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $sender - * @type string $receiver - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getSender() - { - return $this->sender; - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setSender($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->sender = $var; - - return $this; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @return string - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @param string $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkString($var, False); - $this->receiver = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php deleted file mode 100644 index eed599868..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php +++ /dev/null @@ -1,90 +0,0 @@ -proto.gradido.ManageNodeBody - */ -class ManageNodeBody extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field uint64 version_number = 1; - */ - private $version_number = 0; - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $version_number - * @type \Proto\Gradido\ManageNodeGroupAdd $group_add - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeBody::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field uint64 version_number = 1; - * @return int|string - */ - public function getVersionNumber() - { - return $this->version_number; - } - - /** - * Generated from protobuf field uint64 version_number = 1; - * @param int|string $var - * @return $this - */ - public function setVersionNumber($var) - { - GPBUtil::checkUint64($var); - $this->version_number = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3; - * @return \Proto\Gradido\ManageNodeGroupAdd - */ - public function getGroupAdd() - { - return $this->readOneof(3); - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3; - * @param \Proto\Gradido\ManageNodeGroupAdd $var - * @return $this - */ - public function setGroupAdd($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\ManageNodeGroupAdd::class); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php deleted file mode 100644 index 777075066..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php +++ /dev/null @@ -1,119 +0,0 @@ -proto.gradido.ManageNodeGroupAdd - */ -class ManageNodeGroupAdd extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string group_name = 1; - */ - private $group_name = ''; - /** - * Generated from protobuf field string group_alias = 2; - */ - private $group_alias = ''; - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - */ - private $hedera_topic_id = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $group_name - * @type string $group_alias - * @type \Proto\Gradido\HederaID $hedera_topic_id - * string parent_group_alias = 4; - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeGroupAdd::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string group_name = 1; - * @return string - */ - public function getGroupName() - { - return $this->group_name; - } - - /** - * Generated from protobuf field string group_name = 1; - * @param string $var - * @return $this - */ - public function setGroupName($var) - { - GPBUtil::checkString($var, True); - $this->group_name = $var; - - return $this; - } - - /** - * Generated from protobuf field string group_alias = 2; - * @return string - */ - public function getGroupAlias() - { - return $this->group_alias; - } - - /** - * Generated from protobuf field string group_alias = 2; - * @param string $var - * @return $this - */ - public function setGroupAlias($var) - { - GPBUtil::checkString($var, True); - $this->group_alias = $var; - - return $this; - } - - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - * @return \Proto\Gradido\HederaID - */ - public function getHederaTopicId() - { - return $this->hedera_topic_id; - } - - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - * @param \Proto\Gradido\HederaID $var - * @return $this - */ - public function setHederaTopicId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\HederaID::class); - $this->hedera_topic_id = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php deleted file mode 100644 index 6699b98c5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php +++ /dev/null @@ -1,92 +0,0 @@ -proto.gradido.ManageNodeRequest - */ -class ManageNodeRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - */ - private $sig_map = null; - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - */ - private $body_bytes = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignatureMap $sig_map - * @type string $body_bytes - * ManageNodeBody - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeRequest::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @return \Proto\Gradido\SignatureMap - */ - public function getSigMap() - { - return $this->sig_map; - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @param \Proto\Gradido\SignatureMap $var - * @return $this - */ - public function setSigMap($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class); - $this->sig_map = $var; - - return $this; - } - - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - * @return string - */ - public function getBodyBytes() - { - return $this->body_bytes; - } - - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - * @param string $var - * @return $this - */ - public function setBodyBytes($var) - { - GPBUtil::checkString($var, False); - $this->body_bytes = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php deleted file mode 100644 index c7a4f80a5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.ManageNodeResponse - */ -class ManageNodeResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bool success = 1; - */ - private $success = false; - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - */ - private $error = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $success - * @type int $error - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeRequest::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bool success = 1; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 1; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - * @return int - */ - public function getError() - { - return $this->error; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - * @param int $var - * @return $this - */ - public function setError($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\ManageNodeResponse_ErrorCode::class); - $this->error = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php deleted file mode 100644 index ab352829e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php +++ /dev/null @@ -1,61 +0,0 @@ -proto.gradido.ManageNodeResponse.ErrorCode - */ -class ErrorCode -{ - /** - * Generated from protobuf enum INVALID_BODY = 0; - */ - const INVALID_BODY = 0; - /** - * Generated from protobuf enum INVALID_SIGNATURE = 1; - */ - const INVALID_SIGNATURE = 1; - /** - * Generated from protobuf enum SIGNER_NOT_KNOWN = 2; - */ - const SIGNER_NOT_KNOWN = 2; - /** - * Generated from protobuf enum GROUP_ALIAS_ALREADY_EXIST = 3; - */ - const GROUP_ALIAS_ALREADY_EXIST = 3; - - private static $valueToName = [ - self::INVALID_BODY => 'INVALID_BODY', - self::INVALID_SIGNATURE => 'INVALID_SIGNATURE', - self::SIGNER_NOT_KNOWN => 'SIGNER_NOT_KNOWN', - self::GROUP_ALIAS_ALREADY_EXIST => 'GROUP_ALIAS_ALREADY_EXIST', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(ErrorCode::class, \Proto\Gradido\ManageNodeResponse_ErrorCode::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php deleted file mode 100644 index 8a7db7515..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.SignatureMap - */ -class SignatureMap extends \Google\Protobuf\Internal\Message -{ - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - */ - private $sigPair; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $sigPair - * Each signature pair corresponds to a unique Key required to sign the transaction. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getSigPair() - { - return $this->sigPair; - } - - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - * @param \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setSigPair($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Proto\Gradido\SignaturePair::class); - $this->sigPair = $arr; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php b/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php deleted file mode 100644 index 2ef0e81c5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php +++ /dev/null @@ -1,123 +0,0 @@ -proto.gradido.SignaturePair - */ -class SignaturePair extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes pubKey = 1; - */ - private $pubKey = ''; - protected $signature; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $pubKey - * @type string $ed25519 - * ed25519 signature (libsodium default) - * @type string $ed25519_ref10 - * ed25519 ref10 signature - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes pubKey = 1; - * @return string - */ - public function getPubKey() - { - return $this->pubKey; - } - - /** - * Generated from protobuf field bytes pubKey = 1; - * @param string $var - * @return $this - */ - public function setPubKey($var) - { - GPBUtil::checkString($var, False); - $this->pubKey = $var; - - return $this; - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @return string - */ - public function getEd25519() - { - return $this->readOneof(2); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @param string $var - * @return $this - */ - public function setEd25519($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @return string - */ - public function getEd25519Ref10() - { - return $this->readOneof(3); - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @param string $var - * @return $this - */ - public function setEd25519Ref10($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getSignature() - { - return $this->whichOneof("signature"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php b/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php deleted file mode 100644 index ae3ecea0e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php +++ /dev/null @@ -1,101 +0,0 @@ -proto.gradido.Timestamp - */ -class Timestamp extends \Google\Protobuf\Internal\Message -{ - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - */ - private $seconds = 0; - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - */ - private $nanos = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Number of complete seconds since the start of the epoch - * @type int $nanos - * Number of nanoseconds since the start of the last second - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - * @return int - */ - public function getNanos() - { - return $this->nanos; - } - - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - * @param int $var - * @return $this - */ - public function setNanos($var) - { - GPBUtil::checkInt32($var); - $this->nanos = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php b/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php deleted file mode 100644 index d31aa40d2..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php +++ /dev/null @@ -1,67 +0,0 @@ -proto.gradido.TimestampSeconds - */ -class TimestampSeconds extends \Google\Protobuf\Internal\Message -{ - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - */ - private $seconds = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Number of complete seconds since the start of the epoch - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php b/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php deleted file mode 100644 index b1ad01ea4..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php +++ /dev/null @@ -1,220 +0,0 @@ -proto.gradido.TransactionBody - */ -class TransactionBody extends \Google\Protobuf\Internal\Message -{ - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - */ - private $memo = ''; - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - */ - private $created = null; - /** - * Generated from protobuf field uint64 version_number = 3; - */ - private $version_number = 0; - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $memo - * max 150 chars - * @type \Proto\Gradido\TimestampSeconds $created - * @type int|string $version_number - * @type \Proto\Gradido\GradidoTransfer $transfer - * @type \Proto\Gradido\GradidoCreation $creation - * @type \Proto\Gradido\GroupFriendsUpdate $group_friends_update - * @type \Proto\Gradido\GroupMemberUpdate $group_member_update - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\TransactionBody::initOnce(); - parent::__construct($data); - } - - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - * @return string - */ - public function getMemo() - { - return $this->memo; - } - - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - * @param string $var - * @return $this - */ - public function setMemo($var) - { - GPBUtil::checkString($var, True); - $this->memo = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - * @return \Proto\Gradido\TimestampSeconds - */ - public function getCreated() - { - return $this->created; - } - - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - * @param \Proto\Gradido\TimestampSeconds $var - * @return $this - */ - public function setCreated($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class); - $this->created = $var; - - return $this; - } - - /** - * Generated from protobuf field uint64 version_number = 3; - * @return int|string - */ - public function getVersionNumber() - { - return $this->version_number; - } - - /** - * Generated from protobuf field uint64 version_number = 3; - * @param int|string $var - * @return $this - */ - public function setVersionNumber($var) - { - GPBUtil::checkUint64($var); - $this->version_number = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6; - * @return \Proto\Gradido\GradidoTransfer - */ - public function getTransfer() - { - return $this->readOneof(6); - } - - /** - * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6; - * @param \Proto\Gradido\GradidoTransfer $var - * @return $this - */ - public function setTransfer($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GradidoTransfer::class); - $this->writeOneof(6, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7; - * @return \Proto\Gradido\GradidoCreation - */ - public function getCreation() - { - return $this->readOneof(7); - } - - /** - * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7; - * @param \Proto\Gradido\GradidoCreation $var - * @return $this - */ - public function setCreation($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GradidoCreation::class); - $this->writeOneof(7, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8; - * @return \Proto\Gradido\GroupFriendsUpdate - */ - public function getGroupFriendsUpdate() - { - return $this->readOneof(8); - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8; - * @param \Proto\Gradido\GroupFriendsUpdate $var - * @return $this - */ - public function setGroupFriendsUpdate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GroupFriendsUpdate::class); - $this->writeOneof(8, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9; - * @return \Proto\Gradido\GroupMemberUpdate - */ - public function getGroupMemberUpdate() - { - return $this->readOneof(9); - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9; - * @param \Proto\Gradido\GroupMemberUpdate $var - * @return $this - */ - public function setGroupMemberUpdate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GroupMemberUpdate::class); - $this->writeOneof(9, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php b/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php deleted file mode 100644 index 7673582fa..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.TransferAmount - */ -class TransferAmount extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes pubkey = 1; - */ - private $pubkey = ''; - /** - * Generated from protobuf field sint64 amount = 2; - */ - private $amount = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $pubkey - * @type int|string $amount - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes pubkey = 1; - * @return string - */ - public function getPubkey() - { - return $this->pubkey; - } - - /** - * Generated from protobuf field bytes pubkey = 1; - * @param string $var - * @return $this - */ - public function setPubkey($var) - { - GPBUtil::checkString($var, False); - $this->pubkey = $var; - - return $this; - } - - /** - * Generated from protobuf field sint64 amount = 2; - * @return int|string - */ - public function getAmount() - { - return $this->amount; - } - - /** - * Generated from protobuf field sint64 amount = 2; - * @param int|string $var - * @return $this - */ - public function setAmount($var) - { - GPBUtil::checkInt64($var); - $this->amount = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Navigation/NaviBreakLine.php b/community_server/src/Model/Navigation/NaviBreakLine.php deleted file mode 100644 index 79917db8c..000000000 --- a/community_server/src/Model/Navigation/NaviBreakLine.php +++ /dev/null @@ -1,16 +0,0 @@ -
    "; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Navigation/NaviEntry.php b/community_server/src/Model/Navigation/NaviEntry.php deleted file mode 100644 index 2b02db9a8..000000000 --- a/community_server/src/Model/Navigation/NaviEntry.php +++ /dev/null @@ -1,89 +0,0 @@ -controller = $controller; - $this->action = $action; - $this->param = $param; - $this->iconClass = $iconClass; - if($active != null) { - $this->active = $active; - } else { - $this->active = ($GLOBALS["side"] == $controller && - $GLOBALS["subside"] == $action && - $GLOBALS["passed"] == $param); - } - $this->title = $title; - return $this; - } - - public function setIconColor($iconColorClass) { - $this->iconColor = $iconColorClass; - return $this; - } - public function setBGColor($bgColorClass) { - $this->bgColorClass = $bgColorClass; - return $this; - } - private function isActive() { - return $this->active; - } - - - - private function link() { - $self = $GLOBALS["self"]; - if($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return $self->Html->Link( - ''. $this->iconClass .'' - .'' . $this->title . '', - ['controller' => $this->controller, 'action' => $this->action, $this->param], - ['class' => $this->bgColorClass, 'escape' => false]); - } - } - - public function __toString() { - $str = ""; - $str .= "hasChilds()) { $class .= "dropdown";} - if($this->isActive()) { $class .= " selected"; } - if(strlen($class) > 0 ) $str .= " class='$class'"; - $str .= ">"; - - $str .= $this->link(); - if($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php b/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php deleted file mode 100644 index 7d467ed69..000000000 --- a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php +++ /dev/null @@ -1,92 +0,0 @@ -link = $link; - $this->iconClass = $iconClass; - if ($active != null) { - $this->active = $active; - } - $this->title = $title; - return $this; - } - - public function setIconColor($iconColorClass) - { - $this->iconColor = $iconColorClass; - return $this; - } - - public function setBGColor($bgColorClass) - { - $this->bgColorClass = $bgColorClass; - return $this; - } - - private function isActive() - { - return $this->active; - } - - protected function link() - { - $self = $GLOBALS["self"]; - if ($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return '' - .''. $this->iconClass .'' - . '' . $this->title . '' - . ''; - } - } - - public function __toString() - { - $str = ""; - $str .= "hasChilds()) { - $class .= "dropdown"; - } - if ($this->isActive()) { - $class .= " selected"; - } - if (strlen($class) > 0) { - $str .= " class='$class'"; - } - $str .= ">"; - - $str .= $this->link(); - if ($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/NaviEntryBase.php b/community_server/src/Model/Navigation/NaviEntryBase.php deleted file mode 100644 index ebb4e122f..000000000 --- a/community_server/src/Model/Navigation/NaviEntryBase.php +++ /dev/null @@ -1,31 +0,0 @@ -title = $title; - return $this; - } - - public function add($child) { - $child->isChild = true; - array_push($this->childs, $child); - return $this; - } - - protected function hasChilds() { - return count($this->childs) > 0; - } - -} diff --git a/community_server/src/Model/Navigation/NaviEntryExternLink.php b/community_server/src/Model/Navigation/NaviEntryExternLink.php deleted file mode 100644 index 8ace7fb4c..000000000 --- a/community_server/src/Model/Navigation/NaviEntryExternLink.php +++ /dev/null @@ -1,26 +0,0 @@ -link.'" class="' .$this->bgColorClass .'" target="_blank">' - .''. $this->iconClass .'' - . '' . $this->title . '' - . ''; - } -} diff --git a/community_server/src/Model/Navigation/NaviEntrySub.php b/community_server/src/Model/Navigation/NaviEntrySub.php deleted file mode 100644 index ae79aa433..000000000 --- a/community_server/src/Model/Navigation/NaviEntrySub.php +++ /dev/null @@ -1,105 +0,0 @@ -controller = $controller; - $this->action = $action; - $this->param = $param; - $this->iconClass = $iconClass; - if ($active != null) { - $this->active = $active; - } else { - $this->active = ($GLOBALS["side"] == $controller && - $GLOBALS["subside"] == $action && - $GLOBALS["passed"] == $param); - } - $this->title = $title; - $this->subtitle = $subtitle; - return $this; - } - - public function setIconColor($iconColorClass) - { - $this->iconColor = $iconColorClass; - return $this; - } - public function setBGColor($bgColorClass) - { - $this->bgColorClass = $bgColorClass; - return $this; - } - private function isActive() - { - return $this->active; - } - - private function link() - { - $self = $GLOBALS["self"]; - if ($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return $self->Html->Link( - '' - .'' . $this->title . '' - .''. $this->iconClass .'', - ['controller' => $this->controller, 'action' => $this->action, $this->param], - ['class' => $this->bgColorClass, 'escape' => false] - ); - } - } - - public function __toString() - { - $str = ""; - $str .= "hasChilds()) { - $class .= "dropdown"; - } - if ($this->isActive()) { - $class .= " selected"; - } - if (strlen($class) > 0) { - $str .= " class='$class'"; - } - $str .= ">"; - - $str .= ''. $this->subtitle .''; - $str .= $this->link(); - - if ($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/NaviHierarchy.php b/community_server/src/Model/Navigation/NaviHierarchy.php deleted file mode 100644 index 5017f8678..000000000 --- a/community_server/src/Model/Navigation/NaviHierarchy.php +++ /dev/null @@ -1,49 +0,0 @@ - -*/ -class NaviHierarchy implements \Countable -{ - private $hierarchy = []; - - public function add($entry) - { - array_push($this->hierarchy, $entry); - return $this; - } - public function getHierarchy() - { - return $this->hierarchy; - } - public function count() - { - return count($this->hierarchy); - } - public function __toString() - { - $html = ""; - return $html; - } -} diff --git a/community_server/src/Model/Navigation/NaviHierarchyEntry.php b/community_server/src/Model/Navigation/NaviHierarchyEntry.php deleted file mode 100644 index 5256518df..000000000 --- a/community_server/src/Model/Navigation/NaviHierarchyEntry.php +++ /dev/null @@ -1,53 +0,0 @@ - -*/ -class NaviHierarchyEntry -{ - private $name; - private $controller; - private $action; - public function __construct($name, $controller, $action, $isLast) - { - $this->name = $name; - $this->controller = $controller; - $this->action = $action; - $this->isLast = $isLast; - return $this; - } - private function link() - { - $self = $GLOBALS["self"]; - return $self->Html->Link( - '' . $this->name . '', - ['controller' => $this->controller, 'action' => $this->action], - ['class' => "", 'escape' => false] - ); - } - - public function __toString() - { - $str = "isLast){ - $str .= " class='selected'"; - } - $str .= ">"; - $str .= $this->link(); - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/TitleOnly.php b/community_server/src/Model/Navigation/TitleOnly.php deleted file mode 100644 index 39d7ac616..000000000 --- a/community_server/src/Model/Navigation/TitleOnly.php +++ /dev/null @@ -1,37 +0,0 @@ -title = $title; - } - - public function __toString() { - $str = ""; - $str .= "hasChilds()) { $class .= " dropdown";} - if(strlen($class) > 0 ) $str .= " class='$class'"; - $str .= ">"; - $hNumber = 1; - if($this->isChild) $hNumber = 3; - $str .= "" . $this->title . ""; - if($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Table/AddressTypesTable.php b/community_server/src/Model/Table/AddressTypesTable.php deleted file mode 100644 index ba94c99c7..000000000 --- a/community_server/src/Model/Table/AddressTypesTable.php +++ /dev/null @@ -1,74 +0,0 @@ -setTable('address_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('StateGroupAddresses', [ - 'foreignKey' => 'address_type_id', - ]); - $this->hasMany('TransactionGroupAddaddress', [ - 'foreignKey' => 'address_type_id', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->requirePresence('text', 'create') - ->notEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/AdminErrorsTable.php b/community_server/src/Model/Table/AdminErrorsTable.php deleted file mode 100644 index e6263d8ff..000000000 --- a/community_server/src/Model/Table/AdminErrorsTable.php +++ /dev/null @@ -1,107 +0,0 @@ -setTable('admin_errors'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('controller') - ->maxLength('controller', 255) - ->requirePresence('controller', 'create') - ->notEmptyString('controller'); - - $validator - ->scalar('action') - ->maxLength('action', 255) - ->requirePresence('action', 'create') - ->notEmptyString('action'); - - $validator - ->scalar('state') - ->maxLength('state', 255) - ->requirePresence('state', 'create') - ->notEmptyString('state'); - - $validator - ->scalar('msg') - ->maxLength('msg', 255) - ->requirePresence('msg', 'create') - ->notEmptyString('msg'); - - $validator - ->scalar('details') - ->maxLength('details', 255) - ->requirePresence('details', 'create') - ->notEmptyString('details'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/AppTable.php b/community_server/src/Model/Table/AppTable.php deleted file mode 100644 index a0758c97a..000000000 --- a/community_server/src/Model/Table/AppTable.php +++ /dev/null @@ -1,41 +0,0 @@ -getSchema()->truncateSql($this->getConnection()); - foreach ($truncateCommands as $truncateCommand) { - $this->getConnection()->query($truncateCommand); - } - $this->getConnection()->query('ALTER TABLE ' . $this->getSchema()->name() . ' AUTO_INCREMENT=1'); - return ['success' => true]; - } - public function saveManyWithErrors($entities) - { - $save_results = $this->saveMany($entities); - // save all at once failed, no try one by one to get error message - if($save_results === false) { - foreach($entities as $entity) { - if(!$this->save($entity)) { - return ['success' => false, 'errors' => $entity->getErrors()]; - } - } - } else { - return ['success' => true]; - } - } -} diff --git a/community_server/src/Model/Table/BlockchainTypesTable.php b/community_server/src/Model/Table/BlockchainTypesTable.php deleted file mode 100644 index 3aa67a83d..000000000 --- a/community_server/src/Model/Table/BlockchainTypesTable.php +++ /dev/null @@ -1,94 +0,0 @@ -setTable('blockchain_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - $validator - ->scalar('symbol') - ->maxLength('symbol', 10) - ->allowEmptyString('symbol'); - - return $validator; - } - - public function fillWithDefault() - { - $entry_contents = [ - [ - 'id' => 1, - 'name' => 'mysql', - 'text' => 'use mysql db as blockchain, work only with single community-server', - 'symbol' => NULL - ], - [ - 'id' => 2, - 'name' => 'hedera', - 'text' => 'use hedera for transactions', - 'symbol' => 'HBAR' - ] - ]; - $entities = $this->newEntities($entry_contents); - $this->truncate(); - $save_results = $this->saveManyWithErrors($entities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving default transaction types'; - } - return $save_results; - - } -} diff --git a/community_server/src/Model/Table/CommunityProfilesTable.php b/community_server/src/Model/Table/CommunityProfilesTable.php deleted file mode 100644 index bbe862092..000000000 --- a/community_server/src/Model/Table/CommunityProfilesTable.php +++ /dev/null @@ -1,81 +0,0 @@ -setTable('community_profiles'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->allowEmptyFile('profile_img'); - - $validator - ->scalar('profile_desc') - ->maxLength('profile_desc', 2000) - ->allowEmptyFile('profile_desc'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/ElopageBuysTable.php b/community_server/src/Model/Table/ElopageBuysTable.php deleted file mode 100644 index a5279d920..000000000 --- a/community_server/src/Model/Table/ElopageBuysTable.php +++ /dev/null @@ -1,116 +0,0 @@ -setTable('elopage_buys'); - $this->setDisplayField('payer_email'); - $this->setPrimaryKey('id'); - - } - - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->integer('product_price') - ->requirePresence('product_price', 'create') - ->notEmptyString('product_price'); - - $validator - ->scalar('payer_email') - ->maxLength('payer_email', 255) - ->requirePresence('payer_email', 'create') - ->notEmptyString('payer_email'); - - $validator - ->scalar('publisher_email') - ->maxLength('publisher_email', 255) - ->requirePresence('publisher_email', 'create') - ->notEmptyString('publisher_email'); - - $validator - ->boolean('payed') - ->requirePresence('payed', 'create') - ->notEmptyString('payed'); - - $validator - ->dateTime('success_date') - ->requirePresence('success_date', 'create') - ->notEmptyDateTime('success_date'); - - $validator - ->scalar('event') - ->maxLength('event', 255) - ->requirePresence('event', 'create') - ->notEmptyString('event'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - - return $rules; - } - - /** - * Returns the database connection name to use by default. - * - * @return string - */ - public static function defaultConnectionName() - { - return 'loginServer'; - } -} diff --git a/community_server/src/Model/Table/OperatorTypesTable.php b/community_server/src/Model/Table/OperatorTypesTable.php deleted file mode 100644 index 8a3ce608c..000000000 --- a/community_server/src/Model/Table/OperatorTypesTable.php +++ /dev/null @@ -1,70 +0,0 @@ -setTable('operator_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('Operators', [ - 'foreignKey' => 'operator_type_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 25) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->requirePresence('text', 'create') - ->notEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/OperatorsTable.php b/community_server/src/Model/Table/OperatorsTable.php deleted file mode 100644 index 7ae272767..000000000 --- a/community_server/src/Model/Table/OperatorsTable.php +++ /dev/null @@ -1,93 +0,0 @@ -setTable('operators'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('OperatorTypes', [ - 'foreignKey' => 'operator_type_id', - 'joinType' => 'INNER' - ]); - - $this->addBehavior('Timestamp'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('username') - ->maxLength('username', 50) - ->requirePresence('username', 'create') - ->notEmptyString('username'); - //->add('usernamePasswordHash', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->requirePresence('user_pubkey', 'create') - ->notEmptyString('user_pubkey'); - - $validator - ->scalar('data_base64') - ->maxLength('data_base64', 255) - ->requirePresence('data_base64', 'create') - ->notEmptyString('data_base64'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - //$rules->add($rules->isUnique(['usernamePasswordHash'])); - $rules->add($rules->existsIn(['operator_type_id'], 'OperatorTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/RolesTable.php b/community_server/src/Model/Table/RolesTable.php deleted file mode 100644 index 940b7f246..000000000 --- a/community_server/src/Model/Table/RolesTable.php +++ /dev/null @@ -1,72 +0,0 @@ -setTable('roles'); - $this->setDisplayField('title'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create') - ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->scalar('title') - ->maxLength('title', 255) - ->allowEmptyString('title'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['id'])); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/ServerUsersTable.php b/community_server/src/Model/Table/ServerUsersTable.php deleted file mode 100644 index 0ad1fbacb..000000000 --- a/community_server/src/Model/Table/ServerUsersTable.php +++ /dev/null @@ -1,101 +0,0 @@ -setTable('server_users'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('username') - ->maxLength('username', 50) - ->requirePresence('username', 'create') - ->notEmptyString('username', __('Please give a username')); - - $validator - ->scalar('password') - ->maxLength('password', 255) - ->requirePresence('password', 'create') - ->notEmptyString('password', __('Please give a password')); - - $validator - ->email('email') - ->requirePresence('email', 'create') - ->notEmptyString('email', __('Please give a email')); - - $validator - ->scalar('role') - ->maxLength('role', 20) - ->notEmptyString('role'); - - $validator - ->boolean('activated') - ->notEmptyString('activated'); - - $validator - ->dateTime('last_login') - ->allowEmptyDateTime('last_login'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['username'])); - $rules->add($rules->isUnique(['email'])); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateBalancesTable.php b/community_server/src/Model/Table/StateBalancesTable.php deleted file mode 100644 index ff7a0aca2..000000000 --- a/community_server/src/Model/Table/StateBalancesTable.php +++ /dev/null @@ -1,325 +0,0 @@ -setTable('state_balances'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - public static function getDecayStartDateCached() - { - if(self::$startDecayDate == null) { - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - self::$startDecayDate = $transactionsTable->getDecayStartDate(); - } - return self::$startDecayDate; - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } - - public function calculateDecay($startBalance, FrozenTime $startDate, FrozenTime $endDate, $withInterval = false) - { - $decayStartDate = self::getDecayStartDateCached(); - // if no start decay block exist, we just return input - // if start date for decay is after enddate, we also just return input - if($decayStartDate === null || $decayStartDate >= $endDate) { - if($withInterval) { - return [ - 'balance' => $startBalance, - 'interval' => new \DateInterval('PT0S'), - 'start_date' => $startDate->getTimestamp(), - 'end_date' => $startDate->getTimestamp() - ]; - } else { - return $startBalance; - } - } - $state_balance = $this->newEntity(); - $state_balance->amount = $startBalance; - $interval = null; - // if decay start date is before start date we calculate decay for full duration - if($decayStartDate < $startDate) { - $state_balance->record_date = $startDate; - $interval = $endDate->diff($startDate); - } - // if decay start in between start date and end date we caculcate decay from decay start time to end date - else { - $state_balance->record_date = $decayStartDate; - $interval = $endDate->diff($decayStartDate); - } - $decay = $state_balance->partDecay($endDate); - if($withInterval) { - return [ - 'balance' => $decay, - 'interval' => $interval, - 'start_date' => $state_balance->record_date->getTimestamp(), - 'end_date' => $endDate->getTimestamp() - ]; - } else { - return $decay; - } - - - } - - public function updateAllBalances() - { - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $state_users = $stateUserTable->find()->select(['id'])->contain([]); - foreach($state_users as $state_user) { - $result = $this->updateBalances($state_user->id); - if($result['success'] === false) { - $result['state_user_id'] = $state_user->id; - return $result; - } - } - return ['success' => true]; - } - - public function updateBalances($stateUserId) - { - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $now = new FrozenTime; - // info: cakephp use lazy loading, query will be executed later only if needed - $state_balances = $this->find('all')->where(['state_user_id' => $stateUserId]); - $state_user_transactions = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $stateUserId]) - ->order(['balance_date ASC']) - //->contain(false); - ; - - if(!$state_user_transactions || !$state_user_transactions->count()) { - return ['success' => true]; - } - - // first: decide what todo - $create_state_balance = false; - $recalculate_state_user_transactions_balance = false; - $clear_state_balance = false; - $update_state_balance = false; - if($state_balances->count() == 0) { - $create_state_balance = true; - $recalculate_state_user_transactions_balance = true; - } - if($state_balances->count() > 1) { - $clear_state_balance = true; - $create_state_balance = true; - $recalculate_state_user_transactions_balance = true; - } - if($state_balances->count() == 1) { - if($state_user_transactions->count() == 0){ - $clear_state_balance = true; - } else { - - $first_state_balance = $state_balances->first(); - $first_state_balance_decayed = self::calculateDecay( - $first_state_balance->amount, - $first_state_balance->record_date, - $now); - - $last_state_user_transaction = $state_user_transactions->last(); - $last_state_user_transaction_decayed = self::calculateDecay( - $last_state_user_transaction->balance, - $last_state_user_transaction->balance_date, - $now); - // if entrys are nearly the same, we don't need doing anything - if(floor($last_state_user_transaction_decayed/100) !== floor($first_state_balance_decayed/100)) { - $recalculate_state_user_transactions_balance = true; - $update_state_balance = true; - } - } - } - - if(!$recalculate_state_user_transactions_balance) { - $last_state_user_transaction = $state_user_transactions->last(); - if($last_state_user_transaction && $last_state_user_transaction->balance <= 0) { - $recalculate_state_user_transactions_balance = true; - if(!$create_state_balance) { - $update_state_balance = true; - } - } else if(!$last_state_user_transaction) { - - $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $creationTransactions = $creationsTable - ->find('all') - ->where(['state_user_id' => $stateUserId]) - ->contain(false); - - $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $transferTransactions = $transferTable - ->find('all') - ->where(['OR' => ['state_user_id' => $stateUserId, 'receiver_user_id' => $stateUserId]]) - ->contain(false); - if($creationTransactions->count() > 0 || $transferTransactions->count() > 0) { - return ['success' => false, 'error' => 'state_user_transactions is empty but it exist transactions for user']; - } - } - } - // second: do what is needed - if($clear_state_balance) { - $this->deleteAll(['state_user_id' => $stateUserId]); - } - - $transaction_ids = []; - if($recalculate_state_user_transactions_balance) { - - $state_user_transactions_array = $state_user_transactions->toArray(); - foreach($state_user_transactions_array as $i => $state_user_transaction) { - $transaction_ids[$state_user_transaction->transaction_id] = $i; - } - - $transactions = $transactionsTable - ->find('all') - ->where(['Transactions.id IN' => array_keys($transaction_ids)]) - ->contain(['TransactionCreations', 'TransactionSendCoins']); - - $transactions_indiced = []; - foreach($transactions as $transaction) { - $transactions_indiced[$transaction->id] = $transaction; - } - $balance_cursor = $this->newEntity(); - $i = 0; - foreach($state_user_transactions_array as $state_user_transaction) { - $transaction = $transactions_indiced[$state_user_transaction->transaction_id]; - if($transaction->transaction_type_id > 2) { - continue; - } - $amount = 0; - - if($transaction->transaction_type_id == 1) { // creation - $amount = intval($transaction->transaction_creation->amount); - } else if($transaction->transaction_type_id == 2) { // transfer - $temp = $transaction->transaction_send_coin; - $amount = intval($temp->amount); - // reverse if sender - if($stateUserId == $temp->state_user_id) { - $amount *= -1.0; - } - } - $amount_date = $transaction->received; - if($i == 0) { - $balance_cursor->amount = $amount; - } else { - - //$balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount; - $balance_cursor->amount = - $this->calculateDecay($balance_cursor->amount, $balance_cursor->record_date, $amount_date) - + $amount; - } - //echo "new balance: " . $balance_cursor->amount . "
    "; - - $balance_cursor->record_date = $amount_date; - $state_user_transaction_index = $transaction_ids[$transaction->id]; - $state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount; - $state_user_transactions_array[$state_user_transaction_index]->balance_date = $balance_cursor->record_date; - $i++; - - } - - $results = $stateUserTransactionsTable->saveMany($state_user_transactions_array); - $errors = []; - foreach($results as $i => $result) { - if(!$result) { - $errors[$i] = $state_user_transactions_array[$i]->getErrors(); - } - } - if(count($errors)) { - return ['success' => false, 'error' => 'error saving one ore more state user transactions', 'details' => $errors]; - } - } - $state_balance = null; - if($update_state_balance) { - $state_balance = $state_balances->first(); - } - else if($create_state_balance) { - $state_balance = $this->newEntity(); - $state_balance->state_user_id = $stateUserId; - } - if($state_balance) { - $state_balance->amount = $state_user_transactions->last()->balance; - $state_balance->record_date = $state_user_transactions->last()->balance_date; - if(!$this->save($state_balance)) { - return ['success' => false, 'error' => 'error saving state balance', 'details' => $state_balance->getErrors()]; - } - } - return ['success' => true]; - - } - -} diff --git a/community_server/src/Model/Table/StateCreatedTable.php b/community_server/src/Model/Table/StateCreatedTable.php deleted file mode 100644 index c97851f28..000000000 --- a/community_server/src/Model/Table/StateCreatedTable.php +++ /dev/null @@ -1,96 +0,0 @@ -setTable('state_created'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('month', 'create') - ->notEmptyString('month'); - - $validator - ->requirePresence('year', 'create') - ->notEmptyString('year'); - - $validator - ->integer('short_ident_hash') - ->requirePresence('short_ident_hash', 'create') - ->notEmptyString('short_ident_hash'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateErrorsTable.php b/community_server/src/Model/Table/StateErrorsTable.php deleted file mode 100644 index 62893b7bf..000000000 --- a/community_server/src/Model/Table/StateErrorsTable.php +++ /dev/null @@ -1,88 +0,0 @@ -setTable('state_errors'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('message_json') - ->requirePresence('message_json', 'create') - ->notEmptyString('message_json'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupAddressesTable.php b/community_server/src/Model/Table/StateGroupAddressesTable.php deleted file mode 100644 index a63e2ae1c..000000000 --- a/community_server/src/Model/Table/StateGroupAddressesTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_group_addresses'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - /*$this->belongsTo('Groups', [ - 'foreignKey' => 'group_id', - 'joinType' => 'INNER', - ]);*/ - $this->belongsTo('AddressTypes', [ - 'foreignKey' => 'address_type_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key') - ->add('public_key', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['public_key'])); - //$rules->add($rules->existsIn(['group_id'], 'Groups')); - $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupRelationshipsTable.php b/community_server/src/Model/Table/StateGroupRelationshipsTable.php deleted file mode 100644 index 449561583..000000000 --- a/community_server/src/Model/Table/StateGroupRelationshipsTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_group_relationships'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateGroup1s', [ - 'foreignKey' => 'state_group1_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateGroup2s', [ - 'foreignKey' => 'state_group2_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateRelationships', [ - 'foreignKey' => 'state_relationship_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_group1_id'], 'StateGroup1s')); - $rules->add($rules->existsIn(['state_group2_id'], 'StateGroup2s')); - $rules->add($rules->existsIn(['state_relationship_id'], 'StateRelationships')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupsTable.php b/community_server/src/Model/Table/StateGroupsTable.php deleted file mode 100644 index 49911d495..000000000 --- a/community_server/src/Model/Table/StateGroupsTable.php +++ /dev/null @@ -1,102 +0,0 @@ -setTable('state_groups'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Indices', [ - 'foreignKey' => 'index_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateGroupAddresses', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('StateUsers', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('TransactionGroupCreates', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('Transactions', [ - 'foreignKey' => 'state_group_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 50) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->requirePresence('root_public_key', 'create') - ->notEmptyString('root_public_key'); - - $validator - ->notEmptyString('user_count'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['index_id'], 'Indices')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateRelationshipTypesTable.php b/community_server/src/Model/Table/StateRelationshipTypesTable.php deleted file mode 100644 index a18e7ce51..000000000 --- a/community_server/src/Model/Table/StateRelationshipTypesTable.php +++ /dev/null @@ -1,63 +0,0 @@ -setTable('state_relationship_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 25) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/StateUserRolesTable.php b/community_server/src/Model/Table/StateUserRolesTable.php deleted file mode 100644 index 895e788b2..000000000 --- a/community_server/src/Model/Table/StateUserRolesTable.php +++ /dev/null @@ -1,86 +0,0 @@ -setTable('state_user_roles'); - $this->setPrimaryKey('id'); - - - $this->belongsTo('StateUser', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - - $this->belongsTo('Role', [ - 'foreignKey' => 'role_id', - 'joinType' => 'INNER' - ]); - - - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - // $rules->add($rules->existsIn(['index_id'], 'Indices')); - //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } - - -} diff --git a/community_server/src/Model/Table/StateUserTransactionsTable.php b/community_server/src/Model/Table/StateUserTransactionsTable.php deleted file mode 100644 index 2c984d964..000000000 --- a/community_server/src/Model/Table/StateUserTransactionsTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_user_transactions'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER', - ]); - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER', - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateUsersTable.php b/community_server/src/Model/Table/StateUsersTable.php deleted file mode 100644 index 5b01609f3..000000000 --- a/community_server/src/Model/Table/StateUsersTable.php +++ /dev/null @@ -1,136 +0,0 @@ -setTable('state_users'); - $this->setDisplayField('email'); - $this->setPrimaryKey('id'); - - /*$this->belongsTo('Indices', [ - 'foreignKey' => 'index_id', - 'joinType' => 'INNER' - ]);*/ - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateBalances', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('StateCreated', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionCreations', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionSendCoins', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionReceivedCoins', [ - 'className' => 'TransactionSendCoins', - 'foreignKey' => 'receiver_user_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - // $rules->add($rules->existsIn(['index_id'], 'Indices')); - //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } - - public function getReceiverProposal() { - $stateUsers = $this->find('all'); - $receiverProposal = []; - foreach($stateUsers as $stateUser) { - $name = $stateUser->email; - $keyHex = bin2hex(stream_get_contents($stateUser->public_key)); - if($name === NULL) { - $name = $stateUser->first_name . ' ' . $stateUser->last_name; - } - array_push($receiverProposal, ['name' => $name, 'key' => $keyHex]); - //$stateUser->public_key - } - return $receiverProposal; - } - - public function getUsersIndiced($user_ids) - { - $involvedUser_temp = array_flip($user_ids); - // exchange back - $involvedUserIds = array_flip($involvedUser_temp); - $involvedUser = $this->find('all', [ - 'contain' => [], - 'where' => ['id IN' => $involvedUserIds], - 'fields' => ['id', 'first_name', 'last_name', 'email'], - ]); - //var_dump($involvedUser->toArray()); - $involvedUserIndices = []; - foreach ($involvedUser as $involvedUser) { - $involvedUserIndices[$involvedUser->id] = $involvedUser; - } - return $involvedUserIndices; - } -} diff --git a/community_server/src/Model/Table/TransactionCreationsTable.php b/community_server/src/Model/Table/TransactionCreationsTable.php deleted file mode 100644 index bc9592ccf..000000000 --- a/community_server/src/Model/Table/TransactionCreationsTable.php +++ /dev/null @@ -1,89 +0,0 @@ -setTable('transaction_creations'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - $validator - //->requirePresence('ident_hash', 'create') - //->notEmptyString('ident_hash'); - ->allowEmptyString('ident_hash', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['receiver_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php b/community_server/src/Model/Table/TransactionGroupAddaddressTable.php deleted file mode 100644 index cb9912083..000000000 --- a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php +++ /dev/null @@ -1,88 +0,0 @@ -setTable('transaction_group_addaddress'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('AddressTypes', [ - 'foreignKey' => 'address_type_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php b/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php deleted file mode 100644 index 463d1af8e..000000000 --- a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php +++ /dev/null @@ -1,83 +0,0 @@ -setTable('transaction_group_allowtrades'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('Groups', [ - 'foreignKey' => 'group_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->boolean('allow') - ->notEmptyString('allow'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['group_id'], 'Groups')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupCreatesTable.php b/community_server/src/Model/Table/TransactionGroupCreatesTable.php deleted file mode 100644 index 263182b8e..000000000 --- a/community_server/src/Model/Table/TransactionGroupCreatesTable.php +++ /dev/null @@ -1,89 +0,0 @@ -setTable('transaction_group_creates'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('group_public_key', 'create') - ->notEmptyString('group_public_key'); - - $validator - ->scalar('name') - ->maxLength('name', 64) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionSendCoinsTable.php b/community_server/src/Model/Table/TransactionSendCoinsTable.php deleted file mode 100644 index c1530e908..000000000 --- a/community_server/src/Model/Table/TransactionSendCoinsTable.php +++ /dev/null @@ -1,102 +0,0 @@ -setTable('transaction_send_coins'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('ReceiverUsers', [ - 'className' => 'StateUsers', - 'foreignKey' => 'receiver_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('sender_public_key', 'create') - ->notEmptyString('sender_public_key'); - - $validator - ->requirePresence('receiver_public_key', 'create') - ->notEmptyString('receiver_public_key'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - $validator - ->requirePresence('sender_final_balance', 'create') - ->notEmptyString('sender_final_balance'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['receiver_user_id'], 'ReceiverUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionSignaturesTable.php b/community_server/src/Model/Table/TransactionSignaturesTable.php deleted file mode 100644 index 60c1ae99f..000000000 --- a/community_server/src/Model/Table/TransactionSignaturesTable.php +++ /dev/null @@ -1,81 +0,0 @@ -setTable('transaction_signatures'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('signature', 'create') - ->notEmptyString('signature'); - - $validator - ->requirePresence('pubkey', 'create') - ->notEmptyString('pubkey'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionTypesTable.php b/community_server/src/Model/Table/TransactionTypesTable.php deleted file mode 100644 index 2ffd1e64c..000000000 --- a/community_server/src/Model/Table/TransactionTypesTable.php +++ /dev/null @@ -1,120 +0,0 @@ -setTable('transaction_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('Transactions', [ - 'foreignKey' => 'transaction_type_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - return $validator; - } - - public function fillWithDefault() - { - - $entry_contents = [ - [ - 'id' => 1, - 'name' => 'creation', - 'text' => 'create new gradidos for member and also for group (in development)', - ], [ - 'id' => 2, - 'name' => 'transfer', - 'text' => 'send gradidos from one member to another, also cross group transfer', - ], [ - 'id' => 3, - 'name' => 'group create', - 'text' => 'create a new group, trigger creation of new hedera topic and new blockchain on node server' - ], [ - 'id' => 4, - 'name' => 'group add member', - 'text' => 'add user to a group or move if he was already in a group' - ], [ - 'id' => 5, - 'name' => 'group remove member', - 'text' => 'remove user from group, maybe he was moved elsewhere' - ],[ - 'id' => 6, - 'name' => 'hedera topic create', - 'text' => 'create new topic on hedera' - ],[ - 'id' => 7, - 'name' => 'hedera topic send message', - 'text' => 'send consensus message over hedera topic' - ],[ - 'id' => 8, - 'name' => 'hedera account create', - 'text' => 'create new account on hedera for holding some founds with unencrypted keys' - ],[ - 'id' => 9, - 'name' => 'decay start', - 'text' => 'signalize the starting point for decay calculation, allowed only once per chain' - ] - ]; - $entities = $this->newEntities($entry_contents); - $this->truncate(); - $save_results = $this->saveManyWithErrors($entities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving default transaction types'; - } - return $save_results; - } -} diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php deleted file mode 100644 index 1f8606a82..000000000 --- a/community_server/src/Model/Table/TransactionsTable.php +++ /dev/null @@ -1,469 +0,0 @@ -setTable('transactions'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('BlockchainTypes', [ - 'foreignKey' => 'blockchain_type_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateCreated', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionCreations', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupAddaddress', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupAllowtrades', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupCreates', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionSendCoins', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasMany('TransactionSignatures', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasMany('StateUserTransactions', [ - 'foreignKey' => 'transaction_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->allowEmptyString('id', null, 'create'); - - $validator - //->requirePresence('tx_hash', 'create') - ->allowEmptyString('tx_hash', null, 'create'); - - $validator - ->allowEmptyString('memo', null, 'create'); - - $validator - ->dateTime('received') - ->notEmptyDateTime('received'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - $rules->add($rules->existsIn(['blockchain_type_id'], 'BlockchainTypes')); - - return $rules; - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - - public function listTransactionsHumanReadable($stateUserTransactions, array $user, $decay = true, $skip_first_transaction = false) - { - - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $transaction_ids = []; - $involved_user_ids = []; - $stateUserTransactionsCount = 0; - foreach($stateUserTransactions as $su_transaction) { - $transaction_ids[] = $su_transaction->transaction_id; - $involved_user_ids[] = $su_transaction->state_user_id; - $stateUserTransactionsCount++; - } - - $involved_users = $stateUsersTable->getUsersIndiced($involved_user_ids); - - $transactions = $this - ->find() - ->where(['Transactions.id IN' => $transaction_ids]) - ->contain(['TransactionSendCoins', 'TransactionCreations']) - ; - $transaction_indiced = []; - foreach($transactions as $tr) { - $transaction_indiced[$tr->id] = $tr; - } - - $state_balance = $stateBalancesTable->newEntity(); - $final_transactions = []; - $decay_start_transaction = $transactionsTable->find()->where(['transaction_type_id' => 9]); - $decay_start_transaction_id = 0; - if($decay_start_transaction->count()) { - $decay_start_transaction_id = $decay_start_transaction->first()->id; - } - $decay_start_date = $stateBalancesTable->getDecayStartDateCached(); - $decay_start_time = 0; - if($decay_start_date) { - $decay_start_time = $decay_start_date->getTimestamp(); - } - - foreach($stateUserTransactions as $i => $su_transaction) - { - // sender or receiver when user has sended money - // group name if creation - // type: gesendet / empfangen / geschöpft - // transaktion nr / id - // date - // balance - $transaction = $transaction_indiced[$su_transaction->transaction_id]; - - $final_transaction = [ - 'transaction_id' => $transaction->id, - 'date' => $transaction->received, - 'memo' => $transaction->memo - ]; - - $prev = null; - if($i > 0 ) { - $prev = $stateUserTransactions[$i-1]; - } - if($prev) - { - if($prev->balance > 0) - { - $current = $su_transaction; - $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true); - $balance = floatval($prev->balance - $calculated_decay['balance']); - - if($balance) - { - $final_transaction['decay'] = [ - 'balance' => $balance, - 'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds'), - 'decay_start' => $calculated_decay['start_date'], - 'decay_end' => $calculated_decay['end_date'] - ]; - if($decay_start_time && $prev->transaction_id < $decay_start_transaction_id && - $current->transaction_id > $decay_start_transaction_id) { - $final_transaction['decay']['decay_start_block'] = $decay_start_time; - } - // hint: use transaction id - /*if($calculated_decay['start_date'] < $decay_start_time && $calculated_decay['end_date'] > $decay_start_time) { - $final_transaction['decay']['decay_start_block'] = $decay_start_time; - } else { - echo "start block: " . $decay_start_time . "
    "; - echo "start date: " . $calculated_decay['start_date'] . "
    "; - echo "end date: " . $calculated_decay['end_date']. "
    "; - }*/ - } - } - } - - // sender or receiver when user has sended money - // group name if creation - // type: gesendet / empfangen / geschöpft - // transaktion nr / id - // date - // balance - $transaction = $transaction_indiced[$su_transaction->transaction_id]; - - if($su_transaction->transaction_type_id == 1) { // creation - $creation = $transaction->transaction_creation; - - $final_transaction['name'] = 'Gradido Akademie'; - $final_transaction['type'] = 'creation'; - $final_transaction['target_date'] = $creation->target_date; - //$final_transaction['creation_amount'] = $creation->amount; - $final_transaction['balance'] = $creation->amount; - - } else if($su_transaction->transaction_type_id == 2) { // transfer or send coins - $sendCoins = $transaction->transaction_send_coin; - $otherUser = null; - $final_transaction['balance'] = $sendCoins->amount; - $other_user_public = ''; - if ($sendCoins->state_user_id == $user['id']) { - $final_transaction['type'] = 'send'; - - if(isset($involved_users[$sendCoins->receiver_user_id])) { - $otherUser = $involved_users[$sendCoins->receiver_user_id]; - } - $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->receiver_public_key)); - } else if ($sendCoins->receiver_user_id == $user['id']) { - $final_transaction['type'] = 'receive'; - if(isset($involved_users[$sendCoins->state_user_id])) { - $otherUser = $involved_users[$sendCoins->state_user_id]; - } - if($sendCoins->sender_public_key) { - $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->sender_public_key)); - } - } - if(null == $otherUser) { - $otherUser = $stateUsersTable->newEntity(); - } - $final_transaction['name'] = $otherUser->first_name . ' ' . $otherUser->last_name; - $final_transaction['email'] = $otherUser->email; - } - if($i > 0 || !$skip_first_transaction) { - $final_transactions[] = $final_transaction; - } - - if($i == $stateUserTransactionsCount-1 && $decay) { - $now = new FrozenTime(); - $calculated_decay = $stateBalancesTable->calculateDecay( - $su_transaction->balance, - $su_transaction->balance_date, $now, true); - $decay_start_date = $stateBalancesTable->getDecayStartDateCached(); - $duration = $su_transaction->balance_date->timeAgoInWords(); - if($decay_start_date > $su_transaction->balance_date) { - $duration = $decay_start_date->timeAgoInWords(); - } - $balance = floatval($su_transaction->balance - $calculated_decay['balance']); - if($balance) { - $final_transactions[] = [ - 'type' => 'decay', - 'balance' => $balance, - 'decay_duration' => $duration, - 'decay_start' => $calculated_decay['start_date'], - 'decay_end' => $calculated_decay['end_date'], - 'memo' => '' - ]; - } - } - } - - return $final_transactions; - - } - - public function updateTxHash($transaction, $signatureMapString) - { - $transaction_id = $transaction->id; - $previousTxHash = null; - if($transaction_id > 1) { - try { - $previousTransaction = $this - ->find('all', ['contain' => false]) - ->select(['tx_hash']) - ->where(['id' => $transaction_id - 1]) - ->first(); - /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [ - 'contain' => false, - 'fields' => ['tx_hash'] - ]);*/ - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - return ['state' => 'error', 'msg' => 'previous transaction not found', 'details' => $ex->getMessage()]; - } - if(!$previousTransaction) { - // shouldn't occur - return ['state' => 'error', 'msg' => 'previous transaction not found']; - } - $previousTxHash = $previousTransaction->tx_hash; - } - try { - //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received; - $transaction->received = $this - ->find('all', ['contain' => false]) - ->where(['id' => $transaction->id]) - ->select(['received'])->first()->received; - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - return ['state' => 'error', 'msg' => 'current transaction not found in db', 'details' => $ex->getMessage()]; - } - - // calculate tx hash - // previous tx hash + id + received + sigMap as string - // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future - $state = \Sodium\crypto_generichash_init(); - //echo "prev hash: $previousTxHash\n"; - if($previousTxHash != null) { - \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash)); - } - //echo "id: " . $transactionEntity->id . "\n"; - \Sodium\crypto_generichash_update($state, strval($transaction->id)); - //echo "received: " . $transactionEntity->received; - \Sodium\crypto_generichash_update($state, $transaction->received->i18nFormat('yyyy-MM-dd HH:mm:ss')); - \Sodium\crypto_generichash_update($state, $signatureMapString); - $transaction->tx_hash = \Sodium\crypto_generichash_final($state); - if ($this->save($transaction)) { - return true; - } - return ['state' => 'error', 'msg' => 'error by saving transaction', 'details' => $transaction->getErrors()]; - } - - /*! - * @return: false if no decay start block found - * @return: DateTime Object with start date if one start block found - * @return: ['state':'error'] if more than one found - */ - public function getDecayStartDate() - { - $transaction = $this->find()->where(['transaction_type_id' => 9])->select(['received'])->order(['received' => 'ASC']); - if($transaction->count() == 0) { - return null; - } - return $transaction->first()->received; - } - - public function fillStateUserTransactions() - { - $missing_transaction_ids = []; - $transaction_ids = $this - ->find('all') - ->select(['id', 'transaction_type_id']) - ->order(['id']) - ->where(['transaction_type_id <' => 6]) - ->all() - ; - $state_user_transaction_ids = $this->StateUserTransactions - ->find('all') - ->select(['transaction_id']) - ->group(['transaction_id']) - ->order(['transaction_id']) - ->toArray() - ; - $i2 = 0; - $count = count($state_user_transaction_ids); - foreach($transaction_ids as $tr_id) { - //echo "$i1: "; - if($i2 >= $count) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id, continue
    "; - continue; - } - $stu_id = $state_user_transaction_ids[$i2]; - if($tr_id->id == $stu_id->transaction_id) { - $i2++; - //echo "after i2++: $i2
    "; - } else if($tr_id->id < $stu_id->transaction_id) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id
    "; - } - } - - - $tablesForType = [ - 1 => $this->TransactionCreations, - 2 => $this->TransactionSendCoins, - 3 => $this->TransactionGroupCreates, - 4 => $this->TransactionGroupAddaddress, - 5 => $this->TransactionGroupAddaddress - ]; - $idsForType = []; - foreach($missing_transaction_ids as $i => $transaction) { - if(!isset($idsForType[$transaction->transaction_type_id])) { - $idsForType[$transaction->transaction_type_id] = []; - } - $idsForType[$transaction->transaction_type_id][] = $transaction->id; - } - $entities = []; - $state_user_ids = []; - foreach($idsForType as $type_id => $transaction_ids) { - $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray(); - $keys = $tablesForType[$type_id]->getSchema()->columns(); - //var_dump($keys); - foreach($specific_transactions as $specific) { - - foreach($keys as $key) { - if(preg_match('/_user_id/', $key)) { - $entity = $this->StateUserTransactions->newEntity(); - $entity->transaction_id = $specific['transaction_id']; - $entity->transaction_type_id = $type_id; - $entity->state_user_id = $specific[$key]; - if(!in_array($entity->state_user_id, $state_user_ids)) { - array_push($state_user_ids, $entity->state_user_id); - } - $entities[] = $entity; - } - } - } - } - if(count($state_user_ids) < 1) { - return ['success' => true]; - } - //var_dump($entities); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all(); - $existing_state_user_ids = []; - $finalEntities = []; - foreach($existingStateUsers as $stateUser) { - $existing_state_user_ids[] = $stateUser->id; - } - foreach($entities as $entity) { - if(in_array($entity->state_user_id, $existing_state_user_ids)) { - array_push($finalEntities, $entity); - } - } - - $save_results = $this->StateUserTransactions->saveManyWithErrors($finalEntities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving at least one state user transaction'; - } - return $save_results; - } -} diff --git a/community_server/src/Model/Table/UsersTable.php b/community_server/src/Model/Table/UsersTable.php deleted file mode 100644 index 0e99ba521..000000000 --- a/community_server/src/Model/Table/UsersTable.php +++ /dev/null @@ -1,130 +0,0 @@ -setTable('users'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->hasMany('EmailOptIn', [ - 'foreignKey' => 'user_id', - ]); - $this->hasMany('UserBackups', [ - 'foreignKey' => 'user_id', - ]); - $this->hasMany('UserRoles', [ - 'foreignKey' => 'user_id', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->email('email') - ->requirePresence('email', 'create') - ->notEmptyString('email') - ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->scalar('first_name') - ->maxLength('first_name', 150) - ->requirePresence('first_name', 'create') - ->notEmptyString('first_name'); - - $validator - ->scalar('last_name') - ->maxLength('last_name', 255) - ->allowEmptyString('last_name'); - - $validator - ->requirePresence('password', 'create') - ->notEmptyString('password'); - - $validator - ->allowEmptyString('pubkey'); - - $validator - ->allowEmptyString('privkey'); - - $validator - ->boolean('email_checked') - ->notEmptyString('email_checked'); - - $validator - ->scalar('language') - ->maxLength('language', 4) - ->notEmptyString('language'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['email'])); - - return $rules; - } - - /** - * Returns the database connection name to use by default. - * - * @return string - */ - public static function defaultConnectionName() - { - return 'loginServer'; - } -} diff --git a/community_server/src/Model/Transactions/Record.php b/community_server/src/Model/Transactions/Record.php deleted file mode 100644 index 5572730ef..000000000 --- a/community_server/src/Model/Transactions/Record.php +++ /dev/null @@ -1,575 +0,0 @@ -signature = $signature; - $this->publicKey = $pubkey; - } - - public function finalize($transactionId) - { - $signaturesTable = TableRegistry::getTableLocator()->get('TransactionSignatures'); - $entity = $signaturesTable->newEntity(); - $entity->transaction_id = $transactionId; - if(strlen($this->signature) != 128) { - return ['state' => 'error', 'msg' => 'invalid signature size', 'details' => strlen($this->signature)]; - } - if(strlen($this->publicKey) != 64) { - return ['state' => 'error', 'msg' => 'invalid pubkey size', 'details' => strlen($this->publicKey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->signature)) { - return ['state' => 'error', 'msg' => 'signature isn\'t in hex format']; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->publicKey)) { - return ['state' => 'error', 'msg' => 'publicKey isn\'t in hex format']; - } - $entity->signature = hex2bin($this->signature); - $entity->pubkey = hex2bin($this->publicKey); - - if(!$signaturesTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving signature', 'details' => $entity->getErrors()]; - } - return true; - } -} - - - -class GradidoModifieUserBalance -{ - private $state_users = []; - private $user_balances = []; - - public function getUserId($userPublicKey) - { - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - - $stateUser = $stateUsersTable->find('all')->where(['public_key' => hex2bin($userPublicKey)]); - if($stateUser->isEmpty()) { - return ['state' => 'error', 'msg' => '[GradidoModifieUserBalance::getUserId] couldn\'t find user via public key']; - } - $id = $stateUser->first()->id; - if($id && is_int($id) && (int)$id > 0 && !in_array((int)$id, $this->state_users)) { - array_push($this->state_users, (int)$id); - } - return $id; - } - - public function updateBalance($newBalance, $recordDate, $userId) - { - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $state_balance_query = $stateBalancesTable->find()->where(['state_user_id' => $userId])->order(['record_date ASC']); - $state_balance = null; - if($state_balance_query->count() > 0) { - $state_balance = $state_balance_query->last(); - } else { - $state_balance = $stateBalancesTable->newEntity(); - $state_balance->state_user_id = $userId; - } - $state_balance->amount = $newBalance; - $state_balance->record_date = $recordDate; - $this->user_balances[$userId] = $state_balance; - $stateBalancesTable->save($state_balance); - return true; - //$this->user_balances[$userId] = ['balance' => $newBalance, ''] - // - //return $stateBalancesTable->updateBalanceWithTransaction($newBalance, $recordDate, $userId); - - /*$first_of_month = new Time("$year-$month-01 00:00"); - $stateBalanceQuery = $stateBalancesTable - ->find('all') - ->where(['state_user_id' => $userId]) - ->order(['record_date' => 'DESC']) - ->limit(1); - $entity = null; - - if(!$stateBalanceQuery->isEmpty()) { - $entity = $stateBalanceQuery->first(); - if($entity->record_date != NULL && - ($entity->record_date > $recordDate || $entity->record_date->day == 1)) { - return false; - } - } else { - $entity = $stateBalancesTable->newEntity(); - $entity->state_user_id = $userId; - } - $entity->record_date = $recordDate; - $entity->amount = $newBalance; - /*if(!$stateBalancesTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving state balance', 'details' => $entity->getErrors()]; - }*/ - //return true; - } - - public function getAllStateUsers() - { - return $this->state_users; - } - public function getAllStateUserBalances() - { - return $this->user_balances; - } -} - -class ManageNodeGroupAdd extends GradidoModifieUserBalance -{ - /* - "add_user": { - "user\": " << user << ", - }, - OR - - "move_user_inbound|move_user_outbound": { - "user": " << user << ", - "other_group": " << other_group << ", - "paired_transaction_id": { - "seconds": << ts.seconds <<, - "nanos": << ts.nanos - } - }, - - */ - - private $user_pubkey; - private $other_group = ''; - private $remove_from_group = false; - - public function __construct($data) - { - $this->user_pubkey = $data['user']; - if(isset($data['other_group'])) { - $this->other_group = $data['other_group']; - } - } - - public function finalize($transactionId, $received) - { - $transactionGroupAddadressTable = TableRegistry::getTableLocator()->get('TransactionGroupAddaddress'); - $stateGroupAddresses = TableRegistry::getTableLocator()->get('StateGroupAddresses'); - $transactionGroupEntity = $transactionGroupAddadressTable->newEntity(); - if(!is_int($transactionId)) { - return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] transaction id is not int', 'details' => $transactionId]; - } - $transactionGroupEntity->transaction_id = $transactionId; - $transactionGroupEntity->address_type_id = 1; - if(strlen($this->user_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size user pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->user_pubkey)) { - return ['state' => 'error', 'msg' => 'user_pubkey isn\'t in hex format']; - } - - $userPubkeyBin = hex2bin($this->user_pubkey); - - $transactionGroupEntity->public_key = $userPubkeyBin; - $user_id = $this->getUserId($this->user_pubkey); - if(!is_int($user_id)) { - return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] user id is not int', 'details' => $user_id]; - } - $transactionGroupEntity->state_user_id = $user_id; - $transactionGroupEntity->remove_from_group = $this->remove_from_group; - if(!$transactionGroupAddadressTable->save($transactionGroupEntity)) { - return ['state' => 'error', 'msg' => 'error saving TransactionGroupAddaddress Entity', 'details' => $transactionGroupEntity->getErrors()]; - } - - - if($this->remove_from_group) { - $stateGroup_query = $stateGroupAddresses->find('all')->where(['public_key' => hex2bin($this->user_pubkey)]); - if(!$stateGroup_query->isEmpty()) { - $stateGroupAddresses->delete($stateGroup_query->first()); - } - } else { - $stateGroupAddressesEntity = $stateGroupAddresses->newEntity(); - $stateGroupAddressesEntity->group_id = 1; - $stateGroupAddressesEntity->public_key = $userPubkeyBin; - $stateGroupAddressesEntity->address_type_id = 1; - if(!$stateGroupAddresses->save($stateGroupAddressesEntity)) { - return ['state' => 'error', 'msg' => 'error saving state group addresses entity', 'details' => $stateGroupAddressesEntity->getErrors()]; - } - } - - return true; - } - - public function setRemoveFromGroup($removeFromGroup) { - $this->remove_from_group = $removeFromGroup; - } -} - - -class GradidoCreation extends GradidoModifieUserBalance -{ - /* - * "gradido_creation": { - "user": " << user << ", - "new_balance": << v.new_balance << , - "prev_transfer_rec_num": << v.prev_transfer_rec_num <<, - "amount": << v.amount << - } - */ - private $userPubkey; - private $amount; - private $targetDate; // seems currently not in node server implementet, use hedera date until it is implemented - private $new_balance; - - - public function __construct($data) - { - $this->userPubkey = $data['user']; - $this->amount = $data['amount']['amount']; - $this->new_balance = $data['new_balance']['amount']; - //$this->targetDate = $received; - } - - public function finalize($transactionId, $received) - { - // TODO: don't use, after node server transmit correct date - $this->targetDate = $received; - - $transactionCreationTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - - - $state_user_id = $this->getUserId($this->userPubkey); - if(!is_int($state_user_id)) { - return $state_user_id; - } - - $entity = $transactionCreationTable->newEntity(); - $entity->transaction_id = $transactionId; - $entity->amount = $this->amount; - $entity->target_date = $this->targetDate; - $entity->state_user_id = $state_user_id; - - if(!$transactionCreationTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving create transaction', 'details' => $entity->getErrors()]; - } - - $balance_result = $this->updateBalance($this->new_balance, $received, $state_user_id); - if(is_array($balance_result)) { - return $balance_result; - } - - return true; - } - - - -} - -class GradidoTransfer extends GradidoModifieUserBalance -{ - /* - "local_transfer|inbound_transfer|outbound_transfer": { - "sender": { - "user": " << sender << ", - "new_balance": << tt.sender.new_balance << , - "prev_transfer_rec_num": << tt.sender.prev_transfer_rec_num << - }, - "receiver": { - "user": " << receiver << ", - "new_balance": << tt.receiver.new_balance << , - "prev_transfer_rec_num": << tt.receiver.prev_transfer_rec_num << - }, - "amount": << tt.amount << - }, - * */ - private $amount; - private $sender_new_balance = null; - private $sender_pubkey; - - private $receiver_pubkey; - private $receiver_new_balance = null; - - - public function __construct($data) - { - $this->amount = $data['amount']['amount']; - - $sender = $data['sender']; - $this->sender_pubkey = $sender['user']; - if(isset($sender['new_balance'])) { - $this->sender_new_balance = $sender['new_balance']['amount']; - } - - $receiver = $data['receiver']; - $this->receiver_pubkey = $receiver['user']; - if(isset($receiver['new_balance'])) { - $this->receiver_new_balance = $receiver['new_balance']['amount']; - } - - } - - public function finalize($transactionId, $received) - { - $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - if(strlen($this->sender_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size sender pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->sender_pubkey)) { - return ['state' => 'error', 'msg' => 'sender_pubkey isn\'t in hex format']; - } - if(strlen($this->receiver_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size receiver pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->receiver_pubkey)) { - return ['state' => 'error', 'msg' => 'receiver_pubkey isn\'t in hex format']; - } - - $sender_id = $this->getUserId($this->sender_pubkey); - $receiver_id = $this->getUserId($this->receiver_pubkey); - if(is_array($sender_id) && is_array($receiver_id)) { - return ['state' => 'error', 'msg' => 'neither sender or receiver known']; - } - $transferEntity = $transactionTransferTable->newEntity(); - $transferEntity->transaction_id = $transactionId; - $transferEntity->sender_public_key = hex2bin($this->sender_pubkey); - $transferEntity->receiver_public_key = hex2bin($this->receiver_pubkey); - $transferEntity->amount = $this->amount; - if($this->sender_new_balance != null) { - $transferEntity->sender_final_balance = $this->sender_new_balance; - - if(is_int($sender_id) && $sender_id > 0) { - $transferEntity->state_user_id = $sender_id; - $balance_result = $this->updateBalance($this->sender_new_balance, $received, $sender_id); - if(is_array($balance_result)) { - return $balance_result; - } - } - } - if($this->receiver_new_balance != null && is_int($receiver_id) && $receiver_id > 0) { - $transferEntity->receiver_user_id = $receiver_id; - $balance_result = $this->updateBalance($this->receiver_new_balance, $received, $receiver_id); - if(is_array($balance_result)) { - return $balance_result; - } - } - - if(!$transactionTransferTable->save($transferEntity)) { - return ['state' => 'error', 'msg' => 'error saving transaction send coins entity', 'details' => $transferEntity->getErrors()]; - } - - return true; - } - -} - - - - -class Record -{ - private $sequenceNumber = 0; - private $runningHash = null; - private $transactionType = ''; - private $memo = ''; - private $signatures = []; - private $received; - private $transactionObj = null; - private $result; - private $partCount = 0; - - public function __construct() - { - - } - - - public function parseRecord($json) { - if(!isset($json['record_type'])) { - return false; - } - //var_dump($json); - switch($json['record_type']) { - case 'GRADIDO_TRANSACTION': - return $this->parseTransaction($json['transaction']); - case 'MEMO': - $this->memo .= $json['memo']; - return true; - case 'SIGNATURES': - return $this->parseSignatures($json['signature']); - case 'STRUCTURALLY_BAD_MESSAGE': - case 'RAW_MESSAGE': - case 'BLANK': - return false; - } - } - - /*! - * \brief save data parts in db - */ - public function finalize() - { - $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - - $transactionTypeName = $this->nodeTransactionTypeToDBTransactionType($this->transactionType); - $transactionTypeResults = $transactionTypesTable->find('all')->where(['name' => $transactionTypeName]); - if($transactionTypeResults->isEmpty()) { - return [ - 'state' => 'error', 'msg' => 'transaction type not found', - 'details' => ['nodeType' => $this->transactionType, 'dbType' => $transactionTypeName] - ]; - } - if(!$this->transactionObj) { - return ['state' => 'error', 'msg' => 'transaction obj is null']; - } - if($this->sequenceNumber <= 0) { - return ['state' => 'error', 'msg' => 'sequence number invalid', 'details' => $this->sequenceNumber]; - } - $transactionExistResult = $transactionsTable->find('all')->where(['id' => intval($this->sequenceNumber)]); - if(!$transactionExistResult->isEmpty()) { - return ['state' => 'warning', 'msg' => 'transaction already exist in db', 'details' => $this->sequenceNumber]; - } - $newTransaction = $transactionsTable->newEntity(); - $newTransaction->id = $this->sequenceNumber; - $newTransaction->transaction_type_id = $transactionTypeResults->first()->id; - $newTransaction->memo = $this->memo; - if($this->runningHash != '' && strlen($this->runningHash) % 2 == 0) { - $newTransaction->tx_hash = hex2bin($this->runningHash); - } - $newTransaction->received = $this->received; - - //! TODO change into transaction, if at least one fail, rollback - /* - // In a controller. - $articles->getConnection()->transactional(function () use ($articles, $entities) { - foreach ($entities as $entity) { - $articles->save($entity, ['atomic' => false]); - } - }); - */ - if(!$transactionsTable->save($newTransaction)) { - return ['state' => 'error', 'msg' => 'error saving transaction', 'details' => $newTransaction->getErrors()]; - } - - foreach($this->signatures as $sign) { - $sign_result = $sign->finalize($this->sequenceNumber); - if($sign_result !== true) { - return ['state' => 'error', 'msg', 'error finalizing signature', 'details' => $sign_result]; - } - } - $transaction_obj_result = $this->transactionObj->finalize($newTransaction->id, $this->received); - if($transaction_obj_result !== true) { - return ['state' => 'error', 'msg' => 'error finalizing transaction object', 'details' => $transaction_obj_result]; - } - $state_users = $this->transactionObj->getAllStateUsers(); - $sut_entities = []; - $state_user_balances = $this->transactionObj->getAllStateUserBalances(); - foreach($state_users as $state_user_id) { - $entity = $stateUserTransactionsTable->newEntity(); - $entity->state_user_id = $state_user_id; - $entity->transaction_id = $newTransaction->id; - $entity->transaction_type_id = $newTransaction->transaction_type_id; - $entity->balance = $state_user_balances[$state_user_id]->amount; - $entity->balance_date = $state_user_balances[$state_user_id]->record_date; - $sut_entities[] = $entity; - } - $sut_results = $stateUserTransactionsTable->saveMany($sut_entities); - foreach($sut_results as $i => $result) { - if(false == $result) { - return ['state' => 'error', 'msg' => 'error saving state_user_transaction', 'details' => $sut_entities[$i]->getErrors()]; - } - } - - return true; - - } - - private function nodeTransactionTypeToDBTransactionType($nodeTransactionType) - { - switch($nodeTransactionType) { - case 'GRADIDO_CREATION': - return 'creation'; - - case 'MOVE_USER_INBOUND': - case 'ADD_USER': - return 'group add member'; - - case 'MOVE_USER_OUTBOUND': - return 'group remove member'; - - case 'LOCAL_TRANSFER': - case 'INBOUND_TRANSFER': - case 'OUTBOUND_TRANSFER': - return 'transfer'; - } - return 'unknown'; - } - - private function parseSignatures($signaturesArray) - { - foreach($signaturesArray as $sign) { - $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']); - } - return true; - } - - private function parseTransaction($data) - { - $this->transactionType = $data['transaction_type']; - $sign = $data['signature']; - $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']); - - $hedera = $data['hedera_transaction']; - $this->sequenceNumber = $hedera['sequenceNumber']; - $this->runningHash = $hedera['runningHash']; - $this->received = Time::createFromTimestamp($hedera['consensusTimestamp']['seconds']); - - $field_index = ''; - $class_name = ''; - - $removeFromGroup = false; - switch($this->transactionType) - { - case 'GRADIDO_CREATION': $field_index = 'gradido_creation'; $class_name = 'GradidoCreation'; break; - case 'ADD_USER': $field_index = 'add_user'; $class_name = 'ManageNodeGroupAdd'; break; - case 'MOVE_USER_INBOUND': $field_index = 'move_user_inbound'; $class_name = 'ManageNodeGroupAdd'; break; - case 'MOVE_USER_OUTBOUND': $field_index = 'move_user_outbound'; $class_name = 'ManageNodeGroupAdd'; $removeFromGroup = true; break; - case 'LOCAL_TRANSFER': $field_index = 'local_transfer'; $class_name = 'GradidoTransfer'; break; - case 'INBOUND_TRANSFER': $field_index = 'inbound_transfer'; $class_name = 'GradidoTransfer'; break; - case 'OUTBOUND_TRANSFER': $field_index = 'outbound_transfer'; $class_name = 'GradidoTransfer'; break; - } - if($class_name == '' || $field_index == '') { - return ['state' => 'error', 'msg' => 'node transaction type unknown', 'details' => $this->transactionType]; - } - $class_name = 'Model\\Transactions\\' . $class_name; - $this->transactionObj = new $class_name($data[$field_index]); - if($class_name == 'ManageNodeGroupAdd') { - $this->transactionObj->setRemoveFromGroup($removeFromGroup); - } - - $this->result = $data['result']; - $this->partCount = intval($data['parts']); - $this->memo = $data['memo']; - return true; - } - - public function getSequenceNumber() { - return $this->sequenceNumber; - } - public function getPartCount() { - return $this->partCount; - } - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/SignatureMap.php b/community_server/src/Model/Transactions/SignatureMap.php deleted file mode 100644 index cbe48e636..000000000 --- a/community_server/src/Model/Transactions/SignatureMap.php +++ /dev/null @@ -1,68 +0,0 @@ -mProtoSigMap = $protoSigMap; - } - - public function getProto() { - return $this->mProtoSigMap; - } - - static public function fromEntity($transactionSignatures) - { - - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - foreach($transactionSignatures as $signature) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(stream_get_contents($signature->pubkey)); - $sigPair->setEd25519(stream_get_contents($signature->signature)); - - $sigPairs[] = $sigPair; - //array_push($sigPairs, $sigPair); - } - return new SignatureMap($protoSigMap); - } - - static public function build($bodyBytes, array $keys) - { - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - - // sign with keys - foreach($keys as $key) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(hex2bin($key['pub'])); - $sigPair->setEd25519(sodium_crypto_sign_detached($bodyBytes, hex2bin($key['priv']))); - - $sigPairs[] = $sigPair; - } - //array_push($sigPairs, $sigPair); - - return new SignatureMap($protoSigMap); - } - - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/Transaction.php b/community_server/src/Model/Transactions/Transaction.php deleted file mode 100644 index 810f20c9d..000000000 --- a/community_server/src/Model/Transactions/Transaction.php +++ /dev/null @@ -1,289 +0,0 @@ -mProtoTransaction = $base64Data; - $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes()); - return; - } - - try { - $transactionBin = sodium_base642bin($base64Data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING); - } catch(\SodiumException $e) { - //$this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data); - //return; - $transactionBin = base64_decode($base64Data, true); - if($transactionBin == false) { - $this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data); - $this->addError('base64', $base64Data); - return; - } - } - //*/} - - if($transactionBin == false) { - //$this->addError('base64 decode failed'); - $this->addError('Transaction', 'base64 decode error: ' . $base64Data); - } else { - //var_dump($transactionBin); - $this->mProtoTransaction = new \Proto\Gradido\GradidoTransaction(); - try { - $this->mProtoTransaction->mergeFromString($transactionBin); - //var_dump($this->mProtoTransaction); - // cannot catch Exception with cakePHP, I don't know why - } catch(\Google\Protobuf\Internal\GPBDecodeException $e) { - //var_dump($e); - $this->addError('Transaction', $e->getMessage()); - return; - }//*/ - - //echo 'serialize to json:
    '; - //echo $this->mProtoTransaction->serializeToJsonString(); - //echo "body bytes:
    "; - //var_dump($this->mProtoTransaction->getBodyBytes()); - //echo "
    end body bytes
    "; - $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes()); - } - } - - static public function build(\Proto\Gradido\TransactionBody $transactionBody, $senderKeyPair) - { - $protoTransaction = new \Proto\Gradido\GradidoTransaction(); - - $recevied = new \Proto\Gradido\TimestampSeconds(); - $recevied->setSeconds(time()); - $protoTransaction->setReceived($recevied); - - $bodyBytes = $transactionBody->serializeToString(); - - $sigMap = SignatureMap::build($bodyBytes, [$senderKeyPair]); - $protoTransaction->setSigMap($sigMap->getProto()); - - $protoTransaction->setBodyBytes($bodyBytes); - - return $protoTransaction; - - } - - public function getTransactionBody() { - return $this->mTransactionBody; - } - - public function getFirstPublic() - { - if(!$this->mProtoTransaction || !$this->mProtoTransaction->getSigMap()) { - return ''; - } - $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair(); - return $sigPairs[0]->getPubKey(); - } - - public function getFirstSigningUser() - { - return $this->getStateUserFromPublickey($this->getFirstPublic()); - } - - public function getId() { - return $this->mProtoTransaction->getId(); - } - - public function validate() { - $sigMap = $this->mProtoTransaction->getSigMap(); - if(!$sigMap) { - $this->addError('Transaction', 'signature map is zero'); - //var_dump($this->mProtoTransaction); - return false; - } - //var_dump($sigMap); - //die(); - $sigPairs = $sigMap->getSigPair(); - $bodyBytes = $this->mProtoTransaction->getBodyBytes(); - - - if(!$sigPairs || count($sigPairs) < 1) { - $this->addError('Transaction::validate', 'no signature found'); - return false; - } - - // check signature(s) - foreach($sigPairs as $sigPair) { - //echo 'sig Pair: '; var_dump($sigPair); echo "
    "; - $pubkey = $sigPair->getPubKey(); - $signature = $sigPair->getEd25519(); - //echo "verify bodybytes:
    " . bin2hex($bodyBytes) . '
    '; - if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - $this->addError('Transaction::validate', 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid ' ); - return false; - } - } - - if(!$this->mTransactionBody->validate($sigPairs)) { - $this->addErrors($this->mTransactionBody->getErrors()); - return false; - } - - return true; - } - - public function save() - { - $connection = ConnectionManager::get('default'); - $connection->begin(); - //id transaction_id signature pubkey - - if (!$this->mTransactionBody->save($this->getFirstPublic(), $this->mProtoTransaction->getSigMap())) { - $this->addErrors($this->mTransactionBody->getErrors()); - $connection->rollback(); - // correct auto-increment value to prevent gaps - $transactionsTable = $this->getTable('transactions'); - $transactions = $transactionsTable->find()->select(['id'])->contain(false); - $count = $transactions->count(); - $connection = ConnectionManager::get('default'); - $connection->execute("ALTER TABLE `transactions` auto_increment = $count;"); - - return false; - } - - // save transaction signatures - $transactionsSignaturesTable = TableRegistry::getTableLocator()->get('transaction_signatures'); - $transactionId = $this->mTransactionBody->getTransactionID(); - //signature pubkey - - $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); - $signatureEntitys = []; - foreach($sigPairs as $sigPair) { - $signatureEntity = $transactionsSignaturesTable->newEntity(); - $signatureEntity->transaction_id = $transactionId; - $signatureEntity->signature = $sigPair->getEd25519(); - $signatureEntity->pubkey = $sigPair->getPubKey(); - array_push($signatureEntitys, $signatureEntity); - } - //debug($signatureEntitys); - if(!$transactionsSignaturesTable->saveMany($signatureEntitys)) { - foreach($signatureEntitys as $entity) { - $errors = $entity->getErrors(); - if(!$errors && count($errors) > 0) { - $pubkeyHex = bin2hex($entity->pubkey); - $this->addError('Transaction::save', 'error saving signature for pubkey: ' . $pubkeyHex . ', with errors: ' . json_encode($errors) ); - } - } - $connection->rollback(); - return false; - } - - $connection->commit(); - - $specificTransaction = $this->mTransactionBody->getSpecificTransaction(); - - $specificTransaction->sendNotificationEmail($this->mTransactionBody->getMemo()); - $this->addWarnings($specificTransaction->getWarnings()); - return true; - } - - static public function fromTable($id) - { - $transactionsTable = TableRegistry::getTableLocator()->get('transactions'); - $transactionEntry = $transactionsTable - ->find('all') - ->where(['id' => $id]) - ->contain([ - 'TransactionCreations', - 'TransactionSendCoins', - 'TransactionSignatures']) - ->first(); - //var_dump($transactionEntry->toArray()); - $protoTransaction = new \Proto\Gradido\Transaction(); - - - - $protoTransaction->setId($transactionEntry->id); - - - $recevied = new \Proto\Gradido\TimestampSeconds(); - $recevied->setSeconds($transactionEntry->received->getTimestamp()); - $protoTransaction->setReceived($recevied); - - - $sigMap = SignatureMap::fromEntity($transactionEntry->transaction_signatures); - $protoTransaction->setSigMap($sigMap->getProto()); - - //echo "sig map: check
    "; - $protoTransaction->setTxHash(stream_get_contents($transactionEntry->tx_hash)); - - $body = TransactionBody::fromEntity($transactionEntry->memo, $transactionEntry); - if(is_array($body)) { - return ['state' => 'error', 'msg' => 'error creating body transaction', 'details' => $body]; - } - - // validate signatures - $sigPairs = $sigMap->getProto()->getSigPair(); - - if(!$sigPairs || count($sigPairs) < 1) { - return ['state' => 'error', 'msg' => 'error no signatures found']; - } - - //echo "verify bodybytes:
    " . bin2hex($bodyBytes) . '
    '; - $created = new \Proto\Gradido\TimestampSeconds(); - $created->setSeconds($recevied->getSeconds()); - $body->setCreated($created); - $bodyBytes = $body->serializeToString(); - $createTrys = 0; - $createRight = false; - // check signature(s) and - // try to get created field of TransactionBody right, because it wasn't saved - foreach($sigPairs as $sigPair) { - //echo 'sig Pair: '; var_dump($sigPair); echo "
    "; - $pubkey = $sigPair->getPubKey(); - $signature = $sigPair->getEd25519(); - if(!$createRight) { - while($createTrys < 500) { - if(\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - $createRight = true; - break; - } else { - $createTrys++; - $created->setSeconds($created->getSeconds() - 1); - //$body->setCreated($created); - $bodyBytes = $body->serializeToString(); - } - } - } - - if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - return ['state' => 'error', 'msg' => 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid ']; - } - } - - $protoTransaction->setBodyBytes($bodyBytes); - - - - return $protoTransaction; - } - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/TransactionBase.php b/community_server/src/Model/Transactions/TransactionBase.php deleted file mode 100644 index 6b3817201..000000000 --- a/community_server/src/Model/Transactions/TransactionBase.php +++ /dev/null @@ -1,166 +0,0 @@ -errors; - } - - public function getWarnings() { - return $this->warnings; - } - public function addError($functionName, $errorName) { - array_push($this->errors, [$functionName => $errorName]); - } - public function addWarning($functionName, $warningName) { - array_push($this->warnings, [$functionName => $warningName]); - } - - public function addErrors($errors) { - $this->errors = array_merge($this->errors, $errors); - } - - public function addWarnings($warnings) { - $this->warnings = array_merge($this->warnings, $warnings); - } - - public function hasErrors() { - return count($this->errors) > 0; - } - - public function hasWarnings() { - return count($this->warnings) > 0; - } - public static function getTable($tableName) { - if(!isset(self::$tables[$tableName])) { - self::$tables[$tableName] = TableRegistry::getTableLocator()->get($tableName); - } - return self::$tables[$tableName]; - } - - - protected function getStateUserId($publicKey) { - - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $publicKey])->first(); - if($stateUser) { - return $stateUser->id; - } - // create new entry - $stateUserEntity = $stateUsersTable->newEntity(); - $stateUserEntity->public_key = $publicKey; - if($stateUsersTable->save($stateUserEntity)) { - return $stateUserEntity->id; - } else { - $this->addError('TransactionBase::getStateUserId', 'error saving new state user with error: ' . json_encode($stateUserEntity->getErrors())); - } - - return NULL; - } - - protected function getStateUser($id) { - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->get($id); - if($stateUser) { - return $stateUser; - } - - return NULL; - } - - protected function getStateUserFromPublickey($publicKey) { - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->find('all')->where(['public_key' => $publicKey])->first(); - if($stateUser) { - return $stateUser; - } - - return NULL; - } - - - protected function updateStateBalance($stateUserId, $addAmountCent, $recordDate) { - $stateBalancesTable = self::getTable('stateBalances'); - $stateBalanceQuery = $stateBalancesTable - ->find('all') - ->select(['amount', 'id', 'record_date']) - ->contain(false) - ->where(['state_user_id' => $stateUserId]);//->first(); - //debug($stateBalanceQuery); - - if($stateBalanceQuery->count() > 0) { - - $stateBalanceEntry = $stateBalanceQuery->first(); - $stateBalanceEntry->amount = - $stateBalancesTable->calculateDecay($stateBalanceEntry->amount, $stateBalanceEntry->record_date, $recordDate) - + $addAmountCent; - } else { - $stateBalanceEntry = $stateBalancesTable->newEntity(); - $stateBalanceEntry->state_user_id = $stateUserId; - $stateBalanceEntry->amount = $addAmountCent; - } - $stateBalanceEntry->record_date = $recordDate; - $finalBalance = $stateBalanceEntry->amount; - //echo "\ntry to save: "; var_dump($stateBalanceEntry); echo "\n"; - if(!$stateBalancesTable->save($stateBalanceEntry)) { - $errors = $stateBalanceEntry->getErrors(); - $this->addError('TransactionBase::updateStateBalance', 'error saving state balance with: ' . json_encode($errors)); - return false; - } - return $finalBalance; - } - - protected function addStateUserTransaction($stateUserId, $transactionId, $transactionTypeId, $balance, $balance_date) { - $stateUserTransactionTable = self::getTable('state_user_transactions'); - - $stateUserTransactions = $stateUserTransactionTable - ->find('all') - ->where(['state_user_id' => $stateUserId]) - ->order(['transaction_id DESC']); - $new_balance = $balance; - if($stateUserTransactions->count() > 0) { - $stateBalanceTable = self::getTable('state_balances'); - $state_user_transaction = $stateUserTransactions->first(); - if(!$state_user_transaction) { - $this->addError('TransactionBase::addStateUserTransaction', 'state_user_transaction is zero, no first entry exist?'); - return false; - } - $new_balance += $stateBalanceTable->calculateDecay( - $state_user_transaction->balance, - $state_user_transaction->balance_date, - $balance_date - ); - } - $entity = $stateUserTransactionTable->newEntity(); - $entity->state_user_id = $stateUserId; - $entity->transaction_id = $transactionId; - $entity->transaction_type_id = $transactionTypeId; - $entity->balance = $new_balance; - $entity->balance_date = $balance_date; - - if(!$stateUserTransactionTable->save($entity)) { - $errors = $entity->getErrors(); - $this->addError('TransactionBase::addStateUserTransaction', 'error saving state user balance with: ' . json_encode($errors)); - return false; - } - // set balance from all state_user_transactions which came after (sorted by balance_date) to 0 - // because creation transaction can be added before other transaction which already happend - $state_user_transactions = $stateUserTransactionTable - ->find() - ->select(['id', 'balance']) - ->where(['state_user_id' => $stateUserId, 'balance_date >' => $balance_date]) - ; - foreach($state_user_transactions as $t) { - $t->balance = 0; - } - $stateUserTransactionTable->saveMany($state_user_transactions); - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/TransactionBody.php b/community_server/src/Model/Transactions/TransactionBody.php deleted file mode 100644 index 87a029b80..000000000 --- a/community_server/src/Model/Transactions/TransactionBody.php +++ /dev/null @@ -1,194 +0,0 @@ -mProtoTransactionBody = new \Proto\Gradido\TransactionBody(); - try { - $this->mProtoTransactionBody->mergeFromString($bodyBytes); - // cannot catch Exception with cakePHP, I don't know why - } catch(\Google\Protobuf\Internal\GPBDecodeException $e) { - //var_dump($e); - $this->addError('TransactionBody', $e->getMessage()); - return; - } - - switch($this->mProtoTransactionBody->getData()) { - case 'creation' : $this->mSpecificTransaction = new TransactionCreation($this->mProtoTransactionBody->getCreation()); break; - case 'transfer' : $this->mSpecificTransaction = new TransactionTransfer($this->mProtoTransactionBody->getTransfer()); break; - } - } - - public function validate($sigPairs) { - - // transaction type id - $transactionTypesTable = TableRegistry::getTableLocator()->get('transaction_types'); - - $typeName = $this->getTransactionTypeName(); - $transactionType = $transactionTypesTable->find('all')->where(['name' => $typeName])->select(['id'])->first(); - if($transactionType == NULL) { - $this->addError('TransactionBody::validate', 'zero type id for type: ' . $typeName); - return false; - } - $this->transactionTypeId = $transactionType->id; - - // check if creation time is in the past - if($this->mProtoTransactionBody->getCreated()->getSeconds() > time()) { - $this->addError('TransactionBody::validate', 'Transaction were created in the past!'); - return false; - } - if(!$this->mSpecificTransaction->validate($sigPairs)) { - $this->addErrors($this->mSpecificTransaction->getErrors()); - return false; - } - - - - return true; - } - - public function getSpecificTransaction() { - return $this->mSpecificTransaction; - } - - public function getMemo() { - return $this->mProtoTransactionBody->getMemo(); - } - - public function getTransactionTypeName() - { - return $this->mProtoTransactionBody->getData(); - } - - public function save($firstPublic, $sigMap) { - $transactionsTable = TableRegistry::getTableLocator()->get('transactions'); - $transactionEntity = $transactionsTable->newEntity(); - - - $transactionEntity->transaction_type_id = $this->transactionTypeId; - $transactionEntity->memo = $this->getMemo(); - - if ($transactionsTable->save($transactionEntity)) { - // reload entity to get received date filled from mysql - $transactionEntity = $transactionsTable->get($transactionEntity->id); - // success - $this->mTransactionID = $transactionEntity->id; - if(!$this->mSpecificTransaction->save($transactionEntity->id, $firstPublic, $transactionEntity->received)) { - $this->addErrors($this->mSpecificTransaction->getErrors()); - return false; - } - } else { - $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError())); - return false; - } - $previousTxHash = null; - if($this->mTransactionID > 1) { - try { - $previousTransaction = $transactionsTable - ->find('all', ['contain' => false]) - ->select(['tx_hash']) - ->where(['id' => $this->mTransactionID - 1]) - ->first(); - /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [ - 'contain' => false, - 'fields' => ['tx_hash'] - ]);*/ - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found'); - return false; - } - if(!$previousTransaction) { - // shouldn't occur - $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found'); - return false; - } - $previousTxHash = $previousTransaction->tx_hash; - } - try { - //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received; - $transactionEntity->received = $transactionsTable - ->find('all', ['contain' => false]) - ->where(['id' => $transactionEntity->id]) - ->select(['received'])->first()->received; - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - $this->addError('TransactionBody::save', 'current transaction (with id ' . ($transactionEntity->id) . ' not found'); - $this->addError('exception: ', $ex->getMessage()); - return false; - } - - // calculate tx hash - // previous tx hash + id + received + sigMap as string - // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future - $state = \Sodium\crypto_generichash_init(); - //echo "prev hash: $previousTxHash\n"; - if($previousTxHash != null) { - \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash)); - } - //echo "id: " . $transactionEntity->id . "\n"; - \Sodium\crypto_generichash_update($state, strval($transactionEntity->id)); - //echo "received: " . $transactionEntity->received; - \Sodium\crypto_generichash_update($state, $transactionEntity->received->i18nFormat('yyyy-MM-dd HH:mm:ss')); - \Sodium\crypto_generichash_update($state, $sigMap->serializeToString()); - $transactionEntity->tx_hash = \Sodium\crypto_generichash_final($state); - if ($transactionsTable->save($transactionEntity)) { - return true; - } - $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError())); - return false; - } - - public function getTransactionID() { - return $this->mTransactionID; - } - - public function getTransactionTypeId() { - return $this->transactionTypeId; - } - - static public function fromEntity($memo, $transaction) - { - $protoBody = new \Proto\Gradido\TransactionBody(); - $protoBody->setMemo($memo); - - //$created->setSeconds($var); - //$protoBody->setCreated($created); - if(count($transaction->transaction_creations) == 1) { - //echo "is creation
    "; - $protoBody->setCreation(TransactionCreation::fromEntity($transaction->transaction_creations[0])->getProto()); - } - else if(count($transaction->transaction_send_coins) == 1) { - //echo "is transfer"; - $protoBody->setTransfer(TransactionTransfer::fromEntity($transaction->transaction_send_coins)->getProto()); - } else { - return ['invalid transaction type or count']; - } - - return $protoBody; - } - - static public function build($memo, $specificTransaction) - { - $protoBody = new \Proto\Gradido\TransactionBody(); - $protoBody->setMemo($memo); - - if(is_a($specificTransaction, 'TransactionCreation')) { - $protoBody->setCreation($specificTransaction->getProto()); - } else if(is_a($specificTransaction, 'TransactionTransfer')) { - $protoBody->setTransfer($specificTransaction->getProto()); - } else { - return ['invalid tarnsaction type']; - } - return $protoBody; - - } - -} diff --git a/community_server/src/Model/Transactions/TransactionCreation.php b/community_server/src/Model/Transactions/TransactionCreation.php deleted file mode 100644 index 87f2d2104..000000000 --- a/community_server/src/Model/Transactions/TransactionCreation.php +++ /dev/null @@ -1,249 +0,0 @@ -protoTransactionCreation = $protoTransactionCreation; - $this->transactionCreationsTable = TableRegistry::getTableLocator()->get('transaction_creations'); - $this->receiver_pubkey_hex = bin2hex($this->getReceiverPublic()); - } - - public function getProto() { - return $this->protoTransactionCreation; - } - - static public function build($amount, $memo, $receiver_public_hex, $targetDate = null) - { - $receiver = new \Proto\Gradido\TransferAmount(); - $receiver->setAmount($amount); - //$this->receiver_pubkey_hex = $receiver_public_hex; - if(strlen($receiver_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid pubkey']; - } - $pubKeyBin = hex2bin($receiver_public_hex); - $receiver->setPubkey($pubKeyBin); - //var_dump($requestData); - - $creationDate = new \Proto\Gradido\TimestampSeconds(); - $creationDate->setSeconds(time()); - - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($memo); - $transactionBody->setCreated($creationDate); - - - $transaction = new \Proto\Gradido\GradidoTransaction(); - $transaction->setReceiver($receiver); - //echo "target date: "; - //var_dump($targetDate); - //die('die'); - if($targetDate) { - $targetDateTimestamp = new \Proto\Gradido\TimestampSeconds(); - $targetDateTimestamp->setSeconds($targetDate->getTimestamp()); - //var_dump($targetDateTimestamp); die('target'); - $transaction->setTargetDate($targetDateTimestamp); - } - - $transactionBody->setCreation($transaction); - return ['state' => 'success', 'transactionBody' => $transactionBody]; - } - - - public function getAmount() { - return $this->protoTransactionCreation->getReceiver()->getAmount(); - } - - public function getReceiverPublic() { - return $this->protoTransactionCreation->getReceiver()->getPubkey(); - } - - public function getReceiverUser() { - return $this->getStateUserFromPublickey($this->getReceiverPublic()); - } - public function getTargetDate() { - return new FrozenDate($this->protoTransactionCreation->getTargetDate()->getSeconds()); - } - - public function validate($sigPairs) { - // check if receiver public is not in signature list - $receiverPublic = $this->getReceiverPublic(); - foreach($sigPairs as $sigPair) { - $pubkey = $sigPair->getPubKey(); - if($pubkey == $receiverPublic) { - $this->addError('TransactionCreation::validate', 'receiver aren\'t allowed to sign creation Transaction'); - return false; - } - } - - - /////////////// new validation, not more than 1K GDD per month via target_date /////////////////////////// - $existingCreations2 = $this->transactionCreationsTable - ->find('all') - ->select(['amount', 'state_user_id', 'target_date']) - ->contain(['StateUsers' => ['fields' => ['StateUsers.public_key']]]); - $q = $existingCreations2; - $targetDate = $this->protoTransactionCreation->getTargetDate(); - - $targetDateFrozen = new FrozenDate($targetDate->getSeconds()); - $targetDateMonthYearConcat = $targetDateFrozen->format('Ym'); - - $existingCreations2->where([ - 'target_date IS NOT' => NULL, - 'EXTRACT(YEAR_MONTH FROM target_date) LIKE ' => $targetDateMonthYearConcat, - ]); - - $newSum2 = $this->getAmount(); - $receiverEmail = ''; - foreach($existingCreations2 as $creation) { - $keyHex = bin2hex(stream_get_contents($creation->state_user->public_key)); - //echo "\ncompare \n$keyHex\nwith: \n". $this->receiver_pubkey_hex."\n"; - if($keyHex == $this->receiver_pubkey_hex) { - $newSum2 += $creation->amount; - $receiverEmail = $creation->state_user->email; - } - //$newSum2 += $creation->amount; - } - - /*if(!$existingCreations2->count()) { - if($newSum > 30000000) { - $this->addError('TransactionCreation::validate', 'Creation more than 1.000 GDD per Month (3 Month) not allowed'); - return false; - } - } else {*/ - if($newSum2 <= 0) { - $this->addError( - 'TransactionCreation::validate', - 'Creation less than 0 GDD per Month for '. $receiverEmail .' in target_date not allowed' - ); - } - if($newSum2 > 10000000) { - $this->addError( - 'TransactionCreation::validate', - 'Creation more than 1.000 GDD per Month for '. $receiverEmail .' in target_date not allowed' - ); - return false; - //} - } - - return true; - } - - public function save($transaction_id, $firstPublic, $received) - { - $stateBalancesTable = self::getTable('stateBalances'); - - $transactionCreationEntity = $this->transactionCreationsTable->newEntity(); - $transactionCreationEntity->transaction_id = $transaction_id; - - // state user id - //$state_user_id = $this->getStateUserId($firstPublic); - $receiverUserId = $this->getStateUserId($this->getReceiverPublic()); - if(!$receiverUserId) { - $this->addError('TransactionCreation::save', 'couldn\'t get state user id'); - return false; - } - - $transactionCreationEntity->state_user_id = $receiverUserId; - $transactionCreationEntity->amount = $this->getAmount(); - $transactionCreationEntity->target_date = $this->protoTransactionCreation->getTargetDate()->getSeconds(); - $target_date = new FrozenTime($transactionCreationEntity->target_date); - - //$decayed_balance = $stateBalancesTable->calculateDecay($this->getAmount(), $target_date, $received); - $balance = $this->getAmount(); - - if(!$this->transactionCreationsTable->save($transactionCreationEntity)) { - $this->addError('TransactionCreation::save', 'error saving transactionCreation with errors: ' . json_encode($transactionCreationEntity->getErrors())); - return false; - } - - // update state balance - $final_balance = $this->updateStateBalance($receiverUserId, $balance, $received); - if(false === $final_balance) { - return false; - } - - // decay is a virtual field which is calculated from amount and now() - record_date - if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $balance, $received)) { - return false; - } - - return true; - } - - public function sendNotificationEmail($memo) - { - $disable_email = Configure::read('disableEmail', false); - if($disable_email) return true; - // send notification email - $receiverUserId = $this->getStateUserId($this->getReceiverPublic()); - $receiverUser = $this->getStateUser($receiverUserId); - $noReplyEmail = Configure::read('noReplyEmail'); - - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationCreation') - ->setVars(['user' => $receiverUser, 'gdd_cent' => $this->getAmount(), 'memo' => $memo]); - $receiverNames = $receiverUser->getNames(); - if($receiverNames == '' || $receiverUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id); - return false; - } - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$receiverUser->email => $receiverUser->getNames()]) - ->setSubject(__('Gradido Schöpfung erhalten')) - ->send(); - } catch(Exception $e) { -// $this->addError('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - $this->addWarning('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - return false; - } - return true; - } - - static public function fromEntity($transactionCreationEntity) - { - $protoCreation = new \Proto\Gradido\GradidoCreation(); - - //var_dump($transactionCreationEntity); - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - //return new TransactionCreation($protoCreation); - $userId = $transactionCreationEntity->state_user_id; - - - $stateUser = $stateUsersTable->get($userId); - - - $receiverAmount = new \Proto\Gradido\TransferAmount(); - $receiverAmount->setPubkey(stream_get_contents($stateUser->public_key)); - $receiverAmount->setAmount($transactionCreationEntity->amount); - - $protoCreation->setReceiver($receiverAmount); - - // TODO: add target_date - // function currently not used, maybe can even be deleted - - //echo "receiver amount: check
    "; - //$identHashBytes = stream_get_contents($transactionCreationEntity->ident_hash); - - // intval - //$protoCreation->setIdentHash(intval($identHashBytes)); - //$protoCreation->setIdentHash(self::DRMakeStringHash($stateUser->email)); - return new TransactionCreation($protoCreation); - } -} diff --git a/community_server/src/Model/Transactions/TransactionTransfer.php b/community_server/src/Model/Transactions/TransactionTransfer.php deleted file mode 100644 index dc1606f55..000000000 --- a/community_server/src/Model/Transactions/TransactionTransfer.php +++ /dev/null @@ -1,249 +0,0 @@ -protoTransactionTransfer = $protoTransactionTransfer; - } - - public function getProto() { - return $this->protoTransactionTransfer; - } - - static public function build($amount, $memo, $receiver_public_hex, $sender_public_hex) - { - // repeated SenderAmount senderAmounts = 1; - // repeated ReceiverAmount receiverAmounts = 2; - - $sender = new \Proto\Gradido\TransferAmount(); - $sender->setAmount($amount); - - if(strlen($receiver_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid receiver pubkey']; - } - if(strlen($sender_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid sender pubkey']; - } - $receiverPubKeyBin = hex2bin($receiver_public_hex); - - $senderPubKeyBin = hex2bin($sender_public_hex); - $sender->setPubkey($senderPubKeyBin); - //var_dump($requestData); - - $creationDate = new \Proto\Gradido\TimestampSeconds(); - $creationDate->setSeconds(time()); - - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($memo); - $transactionBody->setCreated($creationDate); - - $transfer = new \Proto\Gradido\GradidoTransfer(); - $local_transfer = new \Proto\Gradido\LocalTransfer(); - $local_transfer->setReceiver($receiverPubKeyBin); - $local_transfer->setSender($sender); - $transfer->setLocal($local_transfer); - $transactionBody->setTransfer($transfer); - return ['state' => 'success', 'transactionBody' => $transactionBody]; - } - - public function validate($sigPairs) { - //$this->addError('TransactionTransfer::validate', 'not implemented yet'); - //return false; - //$time = microtime(true); - static $functionName = 'TransactionTransfer::validate'; - - $sigPubHexs = []; - foreach($sigPairs as $sigPair) - { - $pubkey = $sigPair->getPubKey(); - $pubkey_hex = bin2hex($pubkey); - //$hash = TransactionCreation::DRMakeStringHash($pubkey); - $hash = $pubkey_hex; - if(!isset($sigPubHexs[$hash])) { - $sigPubHexs[$hash] = [$pubkey_hex]; - } else { - array_push($sigPubHexs[$hash], $pubkey_hex); - } - //array_push($sigPubHexs, $pubkey); - } - - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - $senderPublic = $sender->getPubkey(); - $senderPublicHex = bin2hex($senderPublic); - if(strlen($senderPublicHex) != 64) { - $this->addError($functionName, 'invalid sender public key'); - return false; - } - // check if signature exist for sender - //$hash = TransactionCreation::DRMakeStringHash($senderPublicHex); - $hash = $senderPublicHex; - if(!isset($sigPubHexs[$hash]) || in_array($senderPublicHex, $sigPubHexs[$hash]) === FALSE) { - $this->addError($functionName, 'missing signature for sender'); - return false; - } - // check if sender has enough Gradido - $amount = $sender->getAmount(); - $user = $stateUsersTable - ->find('all') - ->select(['id']) - ->where(['public_key' => $senderPublic]) - ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]])->first(); - if(!$user) { - $this->addError($functionName, 'couldn\'t find sender in db' ); - return false; - } - //var_dump($user); - if(intval($user->state_balances[0]->amount) < intval($amount)) { - $this->addError($functionName, 'sender hasn\t enough GDD'); - return false; - } - - $receiver_public_key = $local_transfer->getReceiver(); - if(strlen($receiver_public_key) != 32) { - $this->addError($functionName, 'invalid receiver public key'); - return false; - } - // check if receiver exist - $receiver_user = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $receiver_public_key])->first(); - if(!$receiver_user) { - $this->addError($functionName, 'couldn\'t find receiver in db' ); - return false; - } - if($amount < 0) { - $this->addError($functionName, 'negative amount not supported'); - return false; - } - return true; - } - - public function save($transaction_id, $firstPublic, $received) { - - static $functionName = 'TransactionCreation::save'; - $local_transfer = $this->protoTransactionTransfer->getLocal(); - - $senderAmount = $local_transfer->getSender(); - $receiver = $local_transfer->getReceiver(); - - $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - - $senderUserId = $this->getStateUserId($senderAmount->getPubkey()); - $receiverUserId = $this->getStateUserId($receiver); - - if($senderUserId === NULL || $receiverUserId === NULL) { - return false; - } - - $finalSenderBalance = $this->updateStateBalance($senderUserId, -$senderAmount->getAmount(), $received); - if(false === $finalSenderBalance) { - return false; - } - if(false === $this->updateStateBalance($receiverUserId, $senderAmount->getAmount(), $received)) { - return false; - } - - $transactionTransferEntity = $transactionTransferTable->newEntity(); - $transactionTransferEntity->transaction_id = $transaction_id; - $transactionTransferEntity->state_user_id = $senderUserId; - $transactionTransferEntity->sender_public_key = $senderAmount->getPubkey(); - $transactionTransferEntity->receiver_public_key = $receiver; - $transactionTransferEntity->receiver_user_id = $receiverUserId; - $transactionTransferEntity->amount = $senderAmount->getAmount(); - $transactionTransferEntity->sender_final_balance = $finalSenderBalance; - - if(!$transactionTransferTable->save($transactionTransferEntity)) { - $this->addError($functionName, 'error saving transactionSendCoins with errors: ' . json_encode($transactionTransferEntity->getErrors())); - return false; - } - - if(!$this->addStateUserTransaction($senderUserId, $transaction_id, 2, $senderAmount->getAmount(), $received)) { - return false; - } - if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 2, -$senderAmount->getAmount(), $received)) { - return false; - } - - //$this->addError('TransactionTransfer::save', 'not implemented yet'); - //return false; - return true; - } - - public function sendNotificationEmail($memo) - { - // send notification email - $disable_email = Configure::read('disableEmail', false); - if($disable_email) return true; - - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - $senderAmount = $sender->getAmount(); - $senderUser = $this->getStateUserFromPublickey($sender->getPubkey()); - $receiverUser = $this->getStateUserFromPublickey($local_transfer->getReceiver()); - - $serverAdminEmail = Configure::read('ServerAdminEmail'); - - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationTransfer') - ->setVars(['receiverUser' => $receiverUser, - 'senderUser' => $senderUser, - 'gdd_cent' => $senderAmount, - 'memo' => $memo]); - $receiverNames = $receiverUser->getNames(); - if($receiverNames == '' || $receiverUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id); - return false; - } - $noReplyEmail = Configure::read('noReplyEmail'); - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$receiverUser->email => $receiverUser->getNames()]) - ->setSubject(__('Gradidos erhalten')) - ->send(); - } catch(Exception $e) { - //$this->addError('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - $this->addWarning('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - return false; - } - return true; - } - - public function getSenderUser() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - return $this->getStateUserFromPublickey($local_transfer->getSender()->getPubkey()); - } - - public function getReceiverUser() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - return $this->getStateUserFromPublickey($local_transfer->getReceiver()); - } - - public function getAmount() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - return $sender->getAmount(); - } - - static public function fromEntity($transactionTransferEntity) - { - $protoTransfer = new \Proto\Gradido\GradidoTransfer(); - - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - - - return new TransactionTransfer($protoTransfer); - } -} - diff --git a/community_server/src/Model/Validation/GenericValidation.php b/community_server/src/Model/Validation/GenericValidation.php deleted file mode 100644 index 839441454..000000000 --- a/community_server/src/Model/Validation/GenericValidation.php +++ /dev/null @@ -1,35 +0,0 @@ -]|>|<|javascript:){1,}/', $value)) { - return false; - } - return true; - } - - public static function email($value, array $context) { - if(preg_match('/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/', $value)) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Validation/TransactionValidation.php b/community_server/src/Model/Validation/TransactionValidation.php deleted file mode 100644 index 9705ef40b..000000000 --- a/community_server/src/Model/Validation/TransactionValidation.php +++ /dev/null @@ -1,49 +0,0 @@ - 'en_GB']); - $numberparts = preg_split('/\./', $checkFloatVal); - //var_dump($numberparts); - if(isset($numberparts[1]) && strlen($numberparts[1]) > 2) return false; - - $floatVal = floatval(Number::format($value, ['places' => 4, 'locale' => 'en_GB'])); - //echo "floatVal: $floatVal
    "; - return $floatVal >= 0.0; - } - - public static function hexKey64($value, array $context) { - if(strlen($value) != 64) return false; - if(preg_match('/^[[:xdigit:]]*$/', $value)) { - return true; - } - return false; - } - - public static function hexKey128($value, array $context) { - if(strlen($value) != 128) return false; - if(preg_match('/^[[:xdigit:]]*$/', $value)) { - return true; - } - return false; - } - - public static function alphaNumeric($value, array $context) { - //if(preg_match('/^[a-zA-Z0-9äöüÄÖÜß _;:()-]\n\r*$/', $value)) { - if(preg_match('/([<>]|>|<|javascript:){1,}/', $value)) { - return false; - } - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Shell/ConsoleShell.php b/community_server/src/Shell/ConsoleShell.php deleted file mode 100644 index f7bfe8ed4..000000000 --- a/community_server/src/Shell/ConsoleShell.php +++ /dev/null @@ -1,81 +0,0 @@ -err('Unable to load Psy\Shell.'); - $this->err(''); - $this->err('Make sure you have installed psysh as a dependency,'); - $this->err('and that Psy\Shell is registered in your autoloader.'); - $this->err(''); - $this->err('If you are using composer run'); - $this->err(''); - $this->err('$ php composer.phar require --dev psy/psysh'); - $this->err(''); - - return self::CODE_ERROR; - } - - $this->out("You can exit with `CTRL-C` or `exit`"); - $this->out(''); - - Log::drop('debug'); - Log::drop('error'); - $this->_io->setLoggers(false); - restore_error_handler(); - restore_exception_handler(); - - $psy = new PsyShell(); - $psy->run(); - } - - /** - * Display help for this console. - * - * @return \Cake\Console\ConsoleOptionParser - */ - public function getOptionParser() - { - $parser = new ConsoleOptionParser('console'); - $parser->setDescription( - 'This shell provides a REPL that you can use to interact with ' . - 'your application in a command line designed to run PHP code. ' . - 'You can use it to run adhoc queries with your models, or ' . - 'explore the features of CakePHP and your application.' . - "\n\n" . - 'You will need to have psysh installed for this Shell to work.' - ); - - return $parser; - } -} diff --git a/community_server/src/Template/AddressTypes/add.ctp b/community_server/src/Template/AddressTypes/add.ctp deleted file mode 100644 index f62c5115e..000000000 --- a/community_server/src/Template/AddressTypes/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AddressTypes/edit.ctp b/community_server/src/Template/AddressTypes/edit.ctp deleted file mode 100644 index 3e363e331..000000000 --- a/community_server/src/Template/AddressTypes/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AddressTypes/index.ctp b/community_server/src/Template/AddressTypes/index.ctp deleted file mode 100644 index 905d406a1..000000000 --- a/community_server/src/Template/AddressTypes/index.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($addressType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $addressType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $addressType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $addressType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/AddressTypes/view.ctp b/community_server/src/Template/AddressTypes/view.ctp deleted file mode 100644 index 69817e264..000000000 --- a/community_server/src/Template/AddressTypes/view.ctp +++ /dev/null @@ -1,92 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($addressType->id) ?>
    - - -
    diff --git a/community_server/src/Template/AdminErrors/add.ctp b/community_server/src/Template/AdminErrors/add.ctp deleted file mode 100644 index b69f68213..000000000 --- a/community_server/src/Template/AdminErrors/add.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($adminError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('controller'); - echo $this->Form->control('action'); - echo $this->Form->control('state'); - echo $this->Form->control('msg'); - echo $this->Form->control('details'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AdminErrors/edit.ctp b/community_server/src/Template/AdminErrors/edit.ctp deleted file mode 100644 index dea74b94b..000000000 --- a/community_server/src/Template/AdminErrors/edit.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - Form->create($adminError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('controller'); - echo $this->Form->control('action'); - echo $this->Form->control('state'); - echo $this->Form->control('msg'); - echo $this->Form->control('details'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AdminErrors/index.ctp b/community_server/src/Template/AdminErrors/index.ctp deleted file mode 100644 index 96e077ce1..000000000 --- a/community_server/src/Template/AdminErrors/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('state_user_id') ?>
    -
    Paginator->sort('controller') ?>
    -
    Paginator->sort('action') ?>
    -
    Paginator->sort('state') ?>
    -
    Paginator->sort('msg') ?>
    -
    Paginator->sort('details') ?>
    -
    Paginator->sort('created') ?>
    -
    -
    - -
    -
    Number->format($adminError->id) ?>
    -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    -
    controller) ?>
    -
    action) ?>
    -
    state) ?>
    -
    msg) ?>
    -
    details) ?>
    -
    created) ?>
    -
    - Html->link(__('View'), ['action' => 'view', $adminError->id]) ?> -   - Html->link(__('Edit'), ['action' => 'edit', $adminError->id]) ?> -   - Form->postLink(__('Delete'), ['action' => 'delete', $adminError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $adminError->id)]) ?> -
    -
    - -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/AdminErrors/view.ctp b/community_server/src/Template/AdminErrors/view.ctp deleted file mode 100644 index 0b0bebb64..000000000 --- a/community_server/src/Template/AdminErrors/view.ctp +++ /dev/null @@ -1,54 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    controller) ?>
    action) ?>
    state) ?>
    msg) ?>
    details) ?>
    Number->format($adminError->id) ?>
    created) ?>
    -
    diff --git a/community_server/src/Template/AppRequests/get_balance.ctp b/community_server/src/Template/AppRequests/get_balance.ctp deleted file mode 100644 index 7dd4d6025..000000000 --- a/community_server/src/Template/AppRequests/get_balance.ctp +++ /dev/null @@ -1,15 +0,0 @@ -element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]); -} -if(isset($body['decay'])) { - $body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]); -} -?> \ No newline at end of file diff --git a/community_server/src/Template/AppRequests/list_transactions.ctp b/community_server/src/Template/AppRequests/list_transactions.ctp deleted file mode 100644 index 174092273..000000000 --- a/community_server/src/Template/AppRequests/list_transactions.ctp +++ /dev/null @@ -1,31 +0,0 @@ -element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]); -$body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]); -$body['gdtSum'] = $this->element('centToFloat', ['cent' => $body['gdtSum'], 'precision' => 2]); - -foreach($body['transactions'] as $i => $transaction) { - $useCeil = false; - if(!isset($transaction['type'])) { - $body = ['state' => 'error', 'msg' => 'transaction without type found', 'details' => $transaction]; - } else { - if($transaction['type'] == 'decay') { - $useCeil = true; - } - $body['transactions'][$i]['balance'] = $this->element('centToFloat', ['cent' => $transaction['balance'], 'precision' => 4, 'useCeil' => $useCeil]); - if(isset($transaction['creation_amount'])) { - $body['transactions'][$i]['creation_amount'] = $this->element('centToFloat', ['cent' => $transaction['creation_amount'], 'precision' => 4]); - } - if(isset($transaction['decay'])) { - $body['transactions'][$i]['decay']['balance'] = $this->element('centToFloat', ['cent' => $transaction['decay']['balance'], 'precision' => 4]); - } - } -} - -?> \ No newline at end of file diff --git a/community_server/src/Template/BlockchainTypes/add.ctp b/community_server/src/Template/BlockchainTypes/add.ctp deleted file mode 100644 index bef6b70c5..000000000 --- a/community_server/src/Template/BlockchainTypes/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/BlockchainTypes/edit.ctp b/community_server/src/Template/BlockchainTypes/edit.ctp deleted file mode 100644 index 40cd7849b..000000000 --- a/community_server/src/Template/BlockchainTypes/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/BlockchainTypes/index.ctp b/community_server/src/Template/BlockchainTypes/index.ctp deleted file mode 100644 index 457782043..000000000 --- a/community_server/src/Template/BlockchainTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>Paginator->sort('symbol') ?>
    Number->format($blockchainType->id) ?>name) ?>text) ?>symbol) ?> - Html->link(__('View'), ['action' => 'view', $blockchainType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $blockchainType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $blockchainType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/BlockchainTypes/view.ctp b/community_server/src/Template/BlockchainTypes/view.ctp deleted file mode 100644 index 481cc7b90..000000000 --- a/community_server/src/Template/BlockchainTypes/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    symbol) ?>
    Number->format($blockchainType->id) ?>
    -
    diff --git a/community_server/src/Template/Cell/empty b/community_server/src/Template/Cell/empty deleted file mode 100644 index 8b1378917..000000000 --- a/community_server/src/Template/Cell/empty +++ /dev/null @@ -1 +0,0 @@ - diff --git a/community_server/src/Template/CommunityProfiles/add.ctp b/community_server/src/Template/CommunityProfiles/add.ctp deleted file mode 100644 index ab7ce0f6b..000000000 --- a/community_server/src/Template/CommunityProfiles/add.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/CommunityProfiles/edit.ctp b/community_server/src/Template/CommunityProfiles/edit.ctp deleted file mode 100644 index 230e3b685..000000000 --- a/community_server/src/Template/CommunityProfiles/edit.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/CommunityProfiles/index.ctp b/community_server/src/Template/CommunityProfiles/index.ctp deleted file mode 100644 index 12f3c03b1..000000000 --- a/community_server/src/Template/CommunityProfiles/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('profile_desc') ?>
    Number->format($communityProfile->id) ?>Number->format($communityProfile->state_user_id) ?>profile_desc) ?> - Html->link(__('View'), ['action' => 'view', $communityProfile->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $communityProfile->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $communityProfile->id], ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/CommunityProfiles/view.ctp b/community_server/src/Template/CommunityProfiles/view.ctp deleted file mode 100644 index 1f8aaf0f4..000000000 --- a/community_server/src/Template/CommunityProfiles/view.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    profile_desc) ?>
    Number->format($communityProfile->id) ?>
    Number->format($communityProfile->state_user_id) ?>
    -
    diff --git a/community_server/src/Template/Dashboard/error_http_request.ctp b/community_server/src/Template/Dashboard/error_http_request.ctp deleted file mode 100644 index cdbbec19b..000000000 --- a/community_server/src/Template/Dashboard/error_http_request.ctp +++ /dev/null @@ -1,14 +0,0 @@ -assign('title', __('Error, Please try again')); -?> - -
    - -
    diff --git a/community_server/src/Template/Dashboard/index.ctp b/community_server/src/Template/Dashboard/index.ctp deleted file mode 100644 index fdfe5b072..000000000 --- a/community_server/src/Template/Dashboard/index.ctp +++ /dev/null @@ -1,143 +0,0 @@ -assign( - 'title', - __('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '!' -); -$this->assign( - 'header', - '

    '.__('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '!

    ' -); -?> - - ms - -
    -

    Gradido ...

    -
    -
    - account_balance_wallet - Html->link( - __('Kontoübersicht'), - ['controller' => 'StateBalances', 'action' => 'overview'], - ['class' => 'action-button-link'] - );?> -
    -
    - account_balance - Html->link( - __('Überweisung'), - ['controller' => 'TransactionSendCoins', 'action' => 'create'], - ['class' => 'action-button-link'] - ); ?> -
    -
    -
    - - -
    -

    -

    Gradido ...

    -
    -
    - redeem - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - Statistik -
    -
    - cached - Html->link( - __('Anmeldungen'), - ['controller' => 'Users', 'action' => 'statistics'], - ['class' => 'info-item-link'] - );?> -
    - -
    - error_outline - Html->link( - __('Fehler') . ' (' . $adminErrorCount . ')', - ['controller' => 'AdminErrors'], ['class' => 'info-item-link']); - ?> -
    - -
    -
    - - -
    -

    Benutzer ...

    -
    -
    - search - Html->link( - __('suchen'), - ['controller' => 'StateUsers', 'action' => 'search'], - ['class' => 'info-item-link'] - ); ?> -
    -
    - how_to_reg - - - -
    -
    - enhanced_encryption - - - -
    -
    -
    -
    -

    Login Server ...

    -
    -
    - groups - - - -
    -
    - servers - - - -
    -
    - topics - - - -
    -
    -
    -
    - hedera_accounts - - - -
    -
    - diff --git a/community_server/src/Template/Dashboard/server_index.ctp b/community_server/src/Template/Dashboard/server_index.ctp deleted file mode 100644 index 1b4da7647..000000000 --- a/community_server/src/Template/Dashboard/server_index.ctp +++ /dev/null @@ -1,36 +0,0 @@ -assign('title', __('Willkommen')); -$this->assign( - 'header', - '

    Server Dashboard, nur für Admins

    ' -); -?> -
    -

    Gradido ...

    -
    -
    - redeem - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - error_outline - Html->link( - __('Fehler') . ' (' . $adminErrorCount . ')', - ['controller' => 'AdminErrors'], ['class' => 'info-item-link']); - ?> -
    -
    -
    \ No newline at end of file diff --git a/community_server/src/Template/Element/Flash/default.ctp b/community_server/src/Template/Element/Flash/default.ctp deleted file mode 100644 index 694b244c1..000000000 --- a/community_server/src/Template/Element/Flash/default.ctp +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/community_server/src/Template/Element/Flash/error.ctp b/community_server/src/Template/Element/Flash/error.ctp deleted file mode 100644 index 65a8fbec3..000000000 --- a/community_server/src/Template/Element/Flash/error.ctp +++ /dev/null @@ -1,10 +0,0 @@ - - - \ No newline at end of file diff --git a/community_server/src/Template/Element/Flash/success.ctp b/community_server/src/Template/Element/Flash/success.ctp deleted file mode 100644 index 31a062095..000000000 --- a/community_server/src/Template/Element/Flash/success.ctp +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/community_server/src/Template/Element/centToFloat.ctp b/community_server/src/Template/Element/centToFloat.ctp deleted file mode 100644 index 3beabf837..000000000 --- a/community_server/src/Template/Element/centToFloat.ctp +++ /dev/null @@ -1,22 +0,0 @@ - 0) { - if(isset($useCeil) && $useCeil) { - $transformAmount = ceil($cent / pow(10, $cut_places)); - } else { - $transformAmount = floor($cent / pow(10, $cut_places)); - } -} -if($cut_places < 0) { - $cut_places = 0; -} -echo $transformAmount / pow(10, $precision - $cut_places); - diff --git a/community_server/src/Template/Element/navi.ctp b/community_server/src/Template/Element/navi.ctp deleted file mode 100644 index 33055197f..000000000 --- a/community_server/src/Template/Element/navi.ctp +++ /dev/null @@ -1,38 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$balance = $session->read('StateUser.balance'); -//echo "balance: $balance
    "; -if(!isset($balance)) { - $balance = 0; -} - -$navi = []; -/*if($errorCount > 0) { - $errorNaviEntry = new NaviEntry(__('Fehler '). "($errorCount)", 'mdi-alert-outline', 'StateErrors', 'showForUser'); - $errorNaviEntry->setBGColor('bg-inverse-danger') - ->setIconColor('alert-color'); - array_push($navi, $errorNaviEntry); -}*/ -$balanceNaviEntry = new NaviEntry( - __('Kontoübersicht') . ' (' . - str_replace(array("\r", "\n"), '', strip_tags($this->element('printGradido', ['number' => $balance]))) - . ' )', - 'account_balance_wallet', 'StateBalances', 'overview' -); -if($balance < 0 ) { - //$balanceNaviEntry->setIconColor('alert-color'); -} else if($balance > 0) { - //$balanceNaviEntry->setIconColor('success-color'); -} -array_push($navi, $balanceNaviEntry); -array_push($navi, new NaviEntry(__('Startseite'), 'home', 'Dashboard', 'index')); -array_push($navi, new NaviEntry(__('Überweisung'), 'account_balance', 'TransactionSendCoins', 'create')); -array_push($navi, new NaviEntryExternLink(__('Mitgliederbereich'), 'people_alt', 'https://elopage.com/s/gradido/sign_in')); - -?> - diff --git a/community_server/src/Template/Element/navi_center.ctp b/community_server/src/Template/Element/navi_center.ctp deleted file mode 100644 index d07f44978..000000000 --- a/community_server/src/Template/Element/navi_center.ctp +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/community_server/src/Template/Element/navi_header.ctp b/community_server/src/Template/Element/navi_header.ctp deleted file mode 100644 index cbc2eea97..000000000 --- a/community_server/src/Template/Element/navi_header.ctp +++ /dev/null @@ -1,45 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$transactionPendings = $session->read('Transactions.pending'); - -/* -class NavHeaderEntry -{ - public function __construct($icon_name, $controller, $action, $title) { - ; - } - - public function -} -*/ -?> - \ No newline at end of file diff --git a/community_server/src/Template/Element/navi_notify.ctp b/community_server/src/Template/Element/navi_notify.ctp deleted file mode 100644 index 12ae74465..000000000 --- a/community_server/src/Template/Element/navi_notify.ctp +++ /dev/null @@ -1,44 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$transactionPendings = $session->read('Transactions.pending'); -$transactionPendings += $session->read('Transactions.can_signed'); - -/* -class NavHeaderEntry -{ - public function __construct($icon_name, $controller, $action, $title) { - ; - } - - public function -} -*/ -?> - 0) : ?> - Html->link( - 'announcement' - . 'ss', - ['controller' => 'StateErrors', 'action' => 'ShowForUser'], - ['class' => 'nav-link', 'escape' => false, 'title' => "$errorCount " . __('Fehler')]) ?> - - 0) : ?> - " href="account/checkTransactions"> - verified_user - - () - - - diff --git a/community_server/src/Template/Element/printEuro.ctp b/community_server/src/Template/Element/printEuro.ctp deleted file mode 100644 index 976e4e007..000000000 --- a/community_server/src/Template/Element/printEuro.ctp +++ /dev/null @@ -1,24 +0,0 @@ - 0) $class = "grd-positive-currency";*/ -if($number < 0) { - $class = 'grd-negative-currency'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?> - - - Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/printGDT.ctp b/community_server/src/Template/Element/printGDT.ctp deleted file mode 100644 index 8052283d0..000000000 --- a/community_server/src/Template/Element/printGDT.ctp +++ /dev/null @@ -1,24 +0,0 @@ - 0) $class = "grd-positive-currency";*/ -if($number < 0) { - $class = 'grd-negative-currency'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?> - - - Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/printGradido.ctp b/community_server/src/Template/Element/printGradido.ctp deleted file mode 100644 index 404bdb70d..000000000 --- a/community_server/src/Template/Element/printGradido.ctp +++ /dev/null @@ -1,19 +0,0 @@ - -Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?> - - - Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/user_menu.ctp b/community_server/src/Template/Element/user_menu.ctp deleted file mode 100644 index 633674233..000000000 --- a/community_server/src/Template/Element/user_menu.ctp +++ /dev/null @@ -1,43 +0,0 @@ -getRequest()->getSession(); -$user = $session->read('StateUser'); -$transactionPendings = $session->read('Transactions.pending'); -$this->set('user', $user); -$navi = []; -array_push($navi, new NaviEntry(__('Mein Profil'), 'build', 'Profile', 'index')); -if(intval($transactionPendings) > 0) { -/* array_push($navi, new NaviEntryAbsoluteLink( - __("Transaktionen unterzeichnen") . ' (' . intval($transactionPendings) . ')', - 'mdi-signature-freehand', 'account/checkTransactions' - ));*/ -} else { - array_push($navi, new NaviEntryAbsoluteLink(__('Abmelden'), 'exit_to_app', 'account/logout')); -} -?> -
    - - account_circle -
    - - \ No newline at end of file diff --git a/community_server/src/Template/ElopageBuys/add.ctp b/community_server/src/Template/ElopageBuys/add.ctp deleted file mode 100644 index e9c2c6a80..000000000 --- a/community_server/src/Template/ElopageBuys/add.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - Form->control('elopage_user_id'); - echo $this->Form->control('affiliate_program_id'); - echo $this->Form->control('publisher_id'); - echo $this->Form->control('order_id'); - echo $this->Form->control('product_id'); - echo $this->Form->control('product_price'); - echo $this->Form->control('payer_email'); - echo $this->Form->control('publisher_email'); - echo $this->Form->control('payed'); - echo $this->Form->control('success_date'); - echo $this->Form->control('event'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ElopageBuys/edit.ctp b/community_server/src/Template/ElopageBuys/edit.ctp deleted file mode 100644 index e33956b83..000000000 --- a/community_server/src/Template/ElopageBuys/edit.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - Form->control('elopage_user_id'); - echo $this->Form->control('affiliate_program_id'); - echo $this->Form->control('publisher_id'); - echo $this->Form->control('order_id'); - echo $this->Form->control('product_id'); - echo $this->Form->control('product_price'); - echo $this->Form->control('payer_email'); - echo $this->Form->control('publisher_email'); - echo $this->Form->control('payed'); - echo $this->Form->control('success_date'); - echo $this->Form->control('event'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ElopageBuys/index.ctp b/community_server/src/Template/ElopageBuys/index.ctp deleted file mode 100644 index 4d5ecc1d1..000000000 --- a/community_server/src/Template/ElopageBuys/index.ctp +++ /dev/null @@ -1,67 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('elopage_user_id') ?>Paginator->sort('affiliate_program_id') ?>Paginator->sort('publisher_id') ?>Paginator->sort('order_id') ?>Paginator->sort('product_id') ?>Paginator->sort('product_price') ?>Paginator->sort('payer_email') ?>Paginator->sort('publisher_email') ?>Paginator->sort('payed') ?>Paginator->sort('success_date') ?>Paginator->sort('event') ?>
    Number->format($elopageBuy->id) ?>Number->format($elopageBuy->elopage_user_id) ?>Number->format($elopageBuy->affiliate_program_id) ?>Number->format($elopageBuy->publisher_id) ?>Number->format($elopageBuy->order_id) ?>Number->format($elopageBuy->product_id) ?>Number->format($elopageBuy->product_price) ?>payer_email) ?>publisher_email) ?>payed) ?>success_date) ?>event) ?> - Html->link(__('View'), ['action' => 'view', $elopageBuy->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $elopageBuy->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $elopageBuy->id], ['confirm' => __('Are you sure you want to delete # {0}?', $elopageBuy->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/ElopageBuys/statistics.ctp b/community_server/src/Template/ElopageBuys/statistics.ctp deleted file mode 100644 index 3ac6cf7f6..000000000 --- a/community_server/src/Template/ElopageBuys/statistics.ctp +++ /dev/null @@ -1,35 +0,0 @@ -toArray()); -/*foreach($elopageBuys as $entry) { - echo $entry->success_date . "
    "; -} - * - */ -/*foreach($users as $user) { - //var_dump($user); - echo $user->created; - echo "
    "; -}*/ -?> -
    -
    -
    -
    -
    -
    -
    -

    count()?>

    - - 12.01% -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/community_server/src/Template/ElopageBuys/view.ctp b/community_server/src/Template/ElopageBuys/view.ctp deleted file mode 100644 index 2631e17fe..000000000 --- a/community_server/src/Template/ElopageBuys/view.ctp +++ /dev/null @@ -1,68 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    payer_email) ?>
    publisher_email) ?>
    event) ?>
    Number->format($elopageBuy->id) ?>
    Number->format($elopageBuy->elopage_user_id) ?>
    Number->format($elopageBuy->affiliate_program_id) ?>
    Number->format($elopageBuy->publisher_id) ?>
    Number->format($elopageBuy->order_id) ?>
    Number->format($elopageBuy->product_id) ?>
    Number->format($elopageBuy->product_price) ?>
    success_date) ?>
    payed ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/Email/html/default.ctp b/community_server/src/Template/Email/html/default.ctp deleted file mode 100644 index ac3daa7fe..000000000 --- a/community_server/src/Template/Email/html/default.ctp +++ /dev/null @@ -1,20 +0,0 @@ - ' . $line . "

    \n"; -endforeach; diff --git a/community_server/src/Template/Email/text/default.ctp b/community_server/src/Template/Email/text/default.ctp deleted file mode 100644 index 862cd9f76..000000000 --- a/community_server/src/Template/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ -assign('title', __('Gradido Schöpfung')); -?> first_name ?> last_name ?>, - -element('printGradido', ['number' => $gdd_cent, 'raw' => true])) ?> -Gradido Akademie schreibt: - - - - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Email/text/notification_transaction_failed.ctp b/community_server/src/Template/Email/text/notification_transaction_failed.ctp deleted file mode 100644 index 975848e58..000000000 --- a/community_server/src/Template/Email/text/notification_transaction_failed.ctp +++ /dev/null @@ -1,50 +0,0 @@ -assign('title', __('Gradido Transaktion fehlgeschlagen')); - -$transaction_body = $transaction->getTransactionBody(); -$specific_transaction = $transaction_body->getSpecificTransaction(); -$transaction_type_name = $transaction_body->getTransactionTypeName(); - -?> first_name ?> last_name ?>, - - - - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - -getTargetDate()->format('d.m.Y') ?> - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - - - - - -getErrors(); - foreach($errors as $error) { - //echo "\t".json_encode($error); - echo "\n\t".$error[array_keys($error)[0]]."\n"; - } -}?> - - - - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Email/text/notification_transfer.ctp b/community_server/src/Template/Email/text/notification_transfer.ctp deleted file mode 100644 index 05df9695d..000000000 --- a/community_server/src/Template/Email/text/notification_transfer.ctp +++ /dev/null @@ -1,26 +0,0 @@ -assign('title', __('Gradido Überweisung')); -$receiverNames = $receiverUser->first_name . ' ' . $receiverUser->last_name; -$senderNames = $senderUser->first_name . ' ' . $senderUser->last_name; -$senderNamesEmail = $senderUser->getEmailWithName(); -?> , - -element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNamesEmail) ?> - - - - - - - -email ?> - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Error/error400.ctp b/community_server/src/Template/Error/error400.ctp deleted file mode 100644 index 6b538b7f4..000000000 --- a/community_server/src/Template/Error/error400.ctp +++ /dev/null @@ -1,38 +0,0 @@ -layout = 'error'; - -if (Configure::read('debug')) : - $this->layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error400.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

    - SQL Query: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - -element('auto_table_warning') ?> -end(); -endif; -?> -

    -

    - : - '{$url}'") ?> -

    diff --git a/community_server/src/Template/Error/error500.ctp b/community_server/src/Template/Error/error500.ctp deleted file mode 100644 index 3328cc52c..000000000 --- a/community_server/src/Template/Error/error500.ctp +++ /dev/null @@ -1,43 +0,0 @@ -layout = 'error'; - -if (Configure::read('debug')) : - $this->layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error500.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

    - SQL Query: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - - - Error in: - getFile()), $error->getLine()) ?> - -element('auto_table_warning'); - - if (extension_loaded('xdebug')) : - xdebug_print_function_stack(); - endif; - - $this->end(); -endif; -?> -

    -

    - : - -

    diff --git a/community_server/src/Template/Layout/Email/html/default.ctp b/community_server/src/Template/Layout/Email/html/default.ctp deleted file mode 100644 index 3ff87ff83..000000000 --- a/community_server/src/Template/Layout/Email/html/default.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - - - - <?= $this->fetch('title') ?> - - - fetch('content') ?> - - diff --git a/community_server/src/Template/Layout/Email/text/default.ctp b/community_server/src/Template/Layout/Email/text/default.ctp deleted file mode 100644 index 29b439ccc..000000000 --- a/community_server/src/Template/Layout/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ -fetch('content'); diff --git a/community_server/src/Template/Layout/ajax.ctp b/community_server/src/Template/Layout/ajax.ctp deleted file mode 100644 index 29b439ccc..000000000 --- a/community_server/src/Template/Layout/ajax.ctp +++ /dev/null @@ -1,16 +0,0 @@ -fetch('content'); diff --git a/community_server/src/Template/Layout/default.ctp b/community_server/src/Template/Layout/default.ctp deleted file mode 100644 index 4633502df..000000000 --- a/community_server/src/Template/Layout/default.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - -

    fetch('title') ?>

    - Flash->render() ?> - fetch('content') ?> -
    -
    - -
    - ms -
    - - - diff --git a/community_server/src/Template/Layout/error.ctp b/community_server/src/Template/Layout/error.ctp deleted file mode 100644 index 7367c1bf7..000000000 --- a/community_server/src/Template/Layout/error.ctp +++ /dev/null @@ -1,47 +0,0 @@ - - - - - Html->charset() ?> - - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - - Html->css('base.css') ?> - Html->css('style.css') ?> - - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    - -
    - Flash->render() ?> - - fetch('content') ?> -
    - -
    - - diff --git a/community_server/src/Template/Layout/frontend.ctp b/community_server/src/Template/Layout/frontend.ctp deleted file mode 100644 index cb01fea30..000000000 --- a/community_server/src/Template/Layout/frontend.ctp +++ /dev/null @@ -1,113 +0,0 @@ -"; -//echo "transactions pending: " . $transactionPendings; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - element('navi_notify'); ?> -
    -
    - element('user_menu'); ?> -
    -
    - menu -
    - - - -
    - fetch('header')): ?> -
    - fetch('header') ?> -
    - -
    - fetch('content') ?> -
    -
    - - -
    - - ms - -
    -
    -

    -

    Alpha 0.20.06.03

    -
    -
    - - \ No newline at end of file diff --git a/community_server/src/Template/Layout/rss/default.ctp b/community_server/src/Template/Layout/rss/default.ctp deleted file mode 100644 index 8269be212..000000000 --- a/community_server/src/Template/Layout/rss/default.ctp +++ /dev/null @@ -1,11 +0,0 @@ -fetch('title'); -endif; - -echo $this->Rss->document( - $this->Rss->channel([], $channel, $this->fetch('content')) -); diff --git a/community_server/src/Template/OperatorTypes/add.ctp b/community_server/src/Template/OperatorTypes/add.ctp deleted file mode 100644 index c50feecf0..000000000 --- a/community_server/src/Template/OperatorTypes/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/OperatorTypes/edit.ctp b/community_server/src/Template/OperatorTypes/edit.ctp deleted file mode 100644 index 0b61f0f7a..000000000 --- a/community_server/src/Template/OperatorTypes/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/OperatorTypes/index.ctp b/community_server/src/Template/OperatorTypes/index.ctp deleted file mode 100644 index 52a49b547..000000000 --- a/community_server/src/Template/OperatorTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($operatorType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $operatorType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operatorType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operatorType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operatorType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/OperatorTypes/view.ctp b/community_server/src/Template/OperatorTypes/view.ctp deleted file mode 100644 index a7cb775cf..000000000 --- a/community_server/src/Template/OperatorTypes/view.ctp +++ /dev/null @@ -1,61 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($operatorType->id) ?>
    - -
    diff --git a/community_server/src/Template/Operators/add.ctp b/community_server/src/Template/Operators/add.ctp deleted file mode 100644 index 6696cce5c..000000000 --- a/community_server/src/Template/Operators/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Operators/edit.ctp b/community_server/src/Template/Operators/edit.ctp deleted file mode 100644 index 88a348e59..000000000 --- a/community_server/src/Template/Operators/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Operators/index.ctp b/community_server/src/Template/Operators/index.ctp deleted file mode 100644 index 3da9a6afb..000000000 --- a/community_server/src/Template/Operators/index.ctp +++ /dev/null @@ -1,56 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - operator_type->name ?> - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('user_pubkey') ?>Paginator->sort('operator_type_id') ?>Paginator->sort('data_base64') ?>Paginator->sort('modified') ?>
    Number->format($operator->id) ?>username) ?>user_pubkey)) ?>Html->link(__($operator->operator_type->name), ['controller' => 'OperatorTypes', 'action' => 'view', $operator->operator_type_id]) ?>data_base64) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $operator->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operator->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operator->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operator->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Operators/view.ctp b/community_server/src/Template/Operators/view.ctp deleted file mode 100644 index a317c8e17..000000000 --- a/community_server/src/Template/Operators/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    user_pubkey)) ?>
    data_base64) ?>
    Number->format($operator->id) ?>
    Number->format($operator->operator_type_id) ?>
    -
    diff --git a/community_server/src/Template/Pages/cake_home.ctp b/community_server/src/Template/Pages/cake_home.ctp deleted file mode 100644 index 5a3731e4c..000000000 --- a/community_server/src/Template/Pages/cake_home.ctp +++ /dev/null @@ -1,276 +0,0 @@ -layout = false; - -if (!Configure::read('debug')) : - throw new NotFoundException( - 'Please replace src/Template/Pages/home.ctp with your own version or re-enable debug mode.' - ); -endif; - -$cakeDescription = 'CakePHP: the rapid development PHP framework'; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?> - - - Html->meta('icon') ?> - Html->css('base.css') ?> - Html->css('style.css') ?> - Html->css('home.css') ?> - - - - -
    -
    Html->image('cake.logo.svg') ?>
    -
    -

    Welcome to CakePHP Red Velvet. Build fast. Grow solid.

    -
    -
    - -
    -
    -
    -

    Please be aware that this page will not be shown if you turn off debug mode unless you replace src/Template/Pages/home.ctp with your own version.

    -
    -
    - -
    - -
    -
    - -
    -
    -

    Environment

    -
      - =')) : ?> -
    • Your version of PHP is 5.6.0 or higher (detected ).
    • - -
    • Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected ).
    • - - - -
    • Your version of PHP has the mbstring extension loaded.
    • - -
    • Your version of PHP does NOT have the mbstring extension loaded.
    • - - - -
    • Your version of PHP has the openssl extension loaded.
    • - -
    • Your version of PHP has the mcrypt extension loaded.
    • - -
    • Your version of PHP does NOT have the openssl or mcrypt extension loaded.
    • - - - -
    • Your version of PHP has the intl extension loaded.
    • - -
    • Your version of PHP does NOT have the intl extension loaded.
    • - -
    -
    -
    -

    Filesystem

    -
      - -
    • Your tmp directory is writable.
    • - -
    • Your tmp directory is NOT writable.
    • - - - -
    • Your logs directory is writable.
    • - -
    • Your logs directory is NOT writable.
    • - - - - -
    • The Engine is being used for core caching. To change the config edit config/app.php
    • - -
    • Your cache is NOT working. Please check the settings in config/app.php
    • - -
    -
    -
    -
    - -
    -
    -

    Database

    - connect(); - } catch (Exception $connectionError) { - $connected = false; - $errorMsg = $connectionError->getMessage(); - if (method_exists($connectionError, 'getAttributes')) : - $attributes = $connectionError->getAttributes(); - if (isset($errorMsg['message'])) : - $errorMsg .= '
    ' . $attributes['message']; - endif; - endif; - } - ?> -
      - -
    • CakePHP is able to connect to the database.
    • - -
    • CakePHP is NOT able to connect to the database.
    • - -
    -
    -
    -

    DebugKit

    -
      - -
    • DebugKit is loaded.
    • - -
    • DebugKit is NOT loaded. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
    • - -
    -
    -
    -
    - -
    -
    -

    Editing this Page

    -
      -
    • To change the content of this page, edit: src/Template/Pages/home.ctp.
    • -
    • You can also add some CSS styles for your pages at: webroot/css/.
    • -
    -
    -
    -

    Getting Started

    - -
    -
    - -
    -
    -

    More about Cake

    -

    - CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Front Controller and MVC.
    - Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility. -

    -
    -
    -
    - -
    -
    - P -

    Help and Bug Reports

    - -
    -
    - r -

    Docs and Downloads

    - -
    -
    - s -

    Training and Certification

    - -
    -
    - - - diff --git a/community_server/src/Template/Pages/gradido.ctp b/community_server/src/Template/Pages/gradido.ctp deleted file mode 100644 index f6a2213cc..000000000 --- a/community_server/src/Template/Pages/gradido.ctp +++ /dev/null @@ -1,14 +0,0 @@ -layout = false;?> - - Web Assembly Test (CakePHP Single Node Version) - - - -
    Wird geladen...
    - - - - - \ No newline at end of file diff --git a/community_server/src/Template/Pages/home.ctp b/community_server/src/Template/Pages/home.ctp deleted file mode 100644 index 3926921c4..000000000 --- a/community_server/src/Template/Pages/home.ctp +++ /dev/null @@ -1,19 +0,0 @@ -layout = false;?> - - Web Assembly Test (CakePHP Single Node Version) - - - -
    -
    -

    Gradido

    -

    Implementierung wählen

    -
    - -
    - - - \ No newline at end of file diff --git a/community_server/src/Template/Pages/js.ctp b/community_server/src/Template/Pages/js.ctp deleted file mode 100644 index dd1525dbe..000000000 --- a/community_server/src/Template/Pages/js.ctp +++ /dev/null @@ -1,41 +0,0 @@ -layout = false;?> - - - - - - - - - BootstrapVue Argon Dashboard by Creative Tim - - - - - - - - - -
    - wird geladen... -
    - - - - diff --git a/community_server/src/Template/Pages/visitor.ctp b/community_server/src/Template/Pages/visitor.ctp deleted file mode 100644 index e6956c97c..000000000 --- a/community_server/src/Template/Pages/visitor.ctp +++ /dev/null @@ -1,16 +0,0 @@ -layout = false;?> - - - - Visitor Page - - - - -
    Info Page for Visitor to learn about group before try to enter or connect (befriend)
    - - diff --git a/community_server/src/Template/Profile/edit.ctp b/community_server/src/Template/Profile/edit.ctp deleted file mode 100644 index edddf1631..000000000 --- a/community_server/src/Template/Profile/edit.ctp +++ /dev/null @@ -1,41 +0,0 @@ -assign('title', __('Profil ändern')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -
    - Form->create($profileForm, ['enctype' => 'multipart/form-data']) ?> - Form->control('first_name', ['label' => __('Vorname'), 'placeholder' => 'Vorname', 'value' => $user['first_name']]) ?> - Form->control('last_name', ['label' => __('Nachname'), 'placeholder' => 'Nachname', 'value' => $user['last_name']]) ?> - Form->control('profile_img', ['type' => 'file', 'accept' => 'image/*', 'label' => __('Profilbild')]) ?> - - -
    - - Form->control('profile_desc', ['label' => __('Beschreibung'), 'rows' => 4, 'placeholder' => 'Beschreibung', 'value' => $communityProfile['profile_desc']]) ?> - Form->button(__('Daten speichern'), ['name' => 'submit', 'class' => 'form-button']) ?> - Form->end() ?> -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/Profile/index.ctp b/community_server/src/Template/Profile/index.ctp deleted file mode 100644 index b77ff9f70..000000000 --- a/community_server/src/Template/Profile/index.ctp +++ /dev/null @@ -1,82 +0,0 @@ -'; -$header .= '

    '.$user['first_name'] . ' ' . $user['last_name'] . '

    '; -if (!empty($communityProfile['profile_desc'])) { - $header .= "

    ".$communityProfile['profile_desc']."

    "; -} -$header .= '
    '; -if ($communityProfile && $communityProfile['profile_img']) { - $header .= "
    "; -} -$this->assign('title', __('Mein Profil')); -$this->assign('header', $header); -?> - - ms - -
    -

    - - Meine Daten -

    -
    - -
    - -

    - - Passwort ändern -

    -
    - -
    -
    diff --git a/community_server/src/Template/Roles/add.ctp b/community_server/src/Template/Roles/add.ctp deleted file mode 100644 index c671ed011..000000000 --- a/community_server/src/Template/Roles/add.ctp +++ /dev/null @@ -1,23 +0,0 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Roles/edit.ctp b/community_server/src/Template/Roles/edit.ctp deleted file mode 100644 index 8a7cd385f..000000000 --- a/community_server/src/Template/Roles/edit.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Roles/index.ctp b/community_server/src/Template/Roles/index.ctp deleted file mode 100644 index 2637ef958..000000000 --- a/community_server/src/Template/Roles/index.ctp +++ /dev/null @@ -1,47 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('title') ?>
    Number->format($role->id) ?>title) ?> - Html->link(__('View'), ['action' => 'view', $role->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $role->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $role->id], ['confirm' => __('Are you sure you want to delete # {0}?', $role->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Roles/view.ctp b/community_server/src/Template/Roles/view.ctp deleted file mode 100644 index 04e1dcec5..000000000 --- a/community_server/src/Template/Roles/view.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    -

    title) ?>

    - - - - - - - - - -
    title) ?>
    Number->format($role->id) ?>
    -
    diff --git a/community_server/src/Template/ServerUsers/add.ctp b/community_server/src/Template/ServerUsers/add.ctp deleted file mode 100644 index 35907282b..000000000 --- a/community_server/src/Template/ServerUsers/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($serverUser) ?> -
    - - Form->control('username'); - echo $this->Form->control('password'); - echo $this->Form->control('email'); - echo $this->Form->control('role'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/edit.ctp b/community_server/src/Template/ServerUsers/edit.ctp deleted file mode 100644 index df812d032..000000000 --- a/community_server/src/Template/ServerUsers/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($serverUser) ?> -
    - - Form->control('username'); - echo $this->Form->control('password'); - echo $this->Form->control('email'); - echo $this->Form->control('role'); - echo $this->Form->control('activated'); - echo $this->Form->control('last_login', ['empty' => true]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/index.ctp b/community_server/src/Template/ServerUsers/index.ctp deleted file mode 100644 index a6e14cedc..000000000 --- a/community_server/src/Template/ServerUsers/index.ctp +++ /dev/null @@ -1,59 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('email') ?>Paginator->sort('role') ?>Paginator->sort('activated') ?>Paginator->sort('last_login') ?>Paginator->sort('created') ?>Paginator->sort('modified') ?>
    Number->format($serverUser->id) ?>username) ?>email) ?>role) ?>activated) ?>last_login) ?>created) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $serverUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $serverUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $serverUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $serverUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/ServerUsers/login.ctp b/community_server/src/Template/ServerUsers/login.ctp deleted file mode 100644 index 4996d5e7b..000000000 --- a/community_server/src/Template/ServerUsers/login.ctp +++ /dev/null @@ -1,22 +0,0 @@ -loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -Flash->render() ?> -
    - Form->create() ?> -
    - - Form->control('username') ?> - Form->control('password') ?> -
    - Form->button(__('Login'), ['class' => 'form-button']); ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/view.ctp b/community_server/src/Template/ServerUsers/view.ctp deleted file mode 100644 index 0d3a9ae21..000000000 --- a/community_server/src/Template/ServerUsers/view.ctp +++ /dev/null @@ -1,56 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    password) ?>
    email) ?>
    role) ?>
    Number->format($serverUser->id) ?>
    last_login) ?>
    created) ?>
    modified) ?>
    activated ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/StateBalances/add.ctp b/community_server/src/Template/StateBalances/add.ctp deleted file mode 100644 index 64ef5d576..000000000 --- a/community_server/src/Template/StateBalances/add.ctp +++ /dev/null @@ -1,27 +0,0 @@ - - -
    - Form->create($stateBalance) ?> - add -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateBalances/edit.ctp b/community_server/src/Template/StateBalances/edit.ctp deleted file mode 100644 index c4a6c1e81..000000000 --- a/community_server/src/Template/StateBalances/edit.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($stateBalance) ?> - edit -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateBalances/index.ctp b/community_server/src/Template/StateBalances/index.ctp deleted file mode 100644 index 4b0db06d6..000000000 --- a/community_server/src/Template/StateBalances/index.ctp +++ /dev/null @@ -1,54 +0,0 @@ - - -
    -

    - index - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('modified') ?>Paginator->sort('amount') ?>
    Number->format($stateBalance->id) ?>has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>modified) ?>Number->format($stateBalance->amount) ?> - Html->link(__('View'), ['action' => 'view', $stateBalance->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateBalance->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateBalance->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateBalance->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateBalances/overview.ctp b/community_server/src/Template/StateBalances/overview.ctp deleted file mode 100644 index 1f2f4c811..000000000 --- a/community_server/src/Template/StateBalances/overview.ctp +++ /dev/null @@ -1,166 +0,0 @@ -assign('title', __('Kontoübersicht')); - -$header = '

    ' . __('Aktueller Kontostand: ') . '

    ' . - '

    ' . $this->element('printGradido', ['number' => $balance]) . '

    '; - -if($gdtSum > 0) { - $header .= '

    '.$this->Html->link( - $this->element('printGDT', ['number' => $gdtSum]), - ['action' => 'overview_gdt'], - ['escape' => false] - ).'

    '; -} -$this->assign('header', $header); -//var_dump($transactions); -?> - - 0) : ?> -
    - -
    - -
    -

    Überweisungen

    -

    Berechnet (debugging): element('printGradido', ['number' => $calculated_balance]) ?>

    -
    -
    -
    -
    -
    -
    -
    -
    - 30) { - $memoShort = substr($memoShort, 0, 30) . '...'; - } - $cellColorClass = 'success-color'; - if($send) { - $balance = -$balance; - $cellColorClass = 'alert-color'; - } else if($transaction['type'] == 'creation') { - $cellColorClass = 'orange-color'; - } else if($transaction['type'] == 'decay') { - $cellColorClass = 'red-color'; - } - ?> -
    -
    - Html->image('50x50.png', ['class' => 'profile-img', 'alt' => 'profile image']) ?> -
    - - - - - - - - - - -
    - - redeem - - - - arrow_back - - - arrow_forward - - - minus_circle_multiple - - -
    -
    -
    -
    - 30): ?> - - - - -
    -
    - - nice() ?> - - - -
    -
    element('printGradido', ['number' => $balance]) ?>
    -
    - - - -
    -
    - -
    -
    - - - 0) : ?> - - \ No newline at end of file diff --git a/community_server/src/Template/StateBalances/overview_gdt.ctp b/community_server/src/Template/StateBalances/overview_gdt.ctp deleted file mode 100644 index f293b93be..000000000 --- a/community_server/src/Template/StateBalances/overview_gdt.ctp +++ /dev/null @@ -1,123 +0,0 @@ -assign('title', __('GDT Kontoübersicht')); -$header = '

    ' . __('Zur Verfügung: ') . '

    '; - -if($gdtSum > 0){ - $header .= '

    '.$this->element('printGDT', ['number' => $gdtSum*100.0]).'

    '; -} -if($moreEntrysAsShown) { - $header .= ''. __('Nur die letzten 100 Einträge werden angezeigt!') . ''; -} -$this->assign('header', $header); - -?> - 0) :?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - element('printGDT', ['number' => $entry['amount']*100.0]); ?> - - element('printEuro', ['number' => $entry['amount']*100.0]); ?> - element('printEuro', ['number' => $entry['amount2']*100.0]) ?> - -
    -
    - Number->format($entry['factor']) ?> - x - Number->format($entry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $entry['gdt']*100.0]) ?>
    -
    - -
    -
    - - 0) : ?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - -
    -
    - - element('printGDT', ['number' => $gdtEntry['amount']*100.0]); ?> - - element('printEuro', ['number' => $gdtEntry['amount']*100.0]); ?> - element('printEuro', ['number' => $gdtEntry['amount2']*100.0]) ?> - -
    -
    - Number->format($gdtEntry['factor']) ?> - x - Number->format($gdtEntry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $gdtEntry['gdt'] * 100.0]) ?>
    -
    - -
    -
    - -Html->script(['basic', 'popper.min', 'tippy-bundle.umd.min']) ?> - \ No newline at end of file diff --git a/community_server/src/Template/StateBalances/view.ctp b/community_server/src/Template/StateBalances/view.ctp deleted file mode 100644 index e5f8901dd..000000000 --- a/community_server/src/Template/StateBalances/view.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    -

    id) ?>

    - view - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>
    Number->format($stateBalance->id) ?>
    Number->format($stateBalance->amount) ?>
    modified) ?>
    -
    diff --git a/community_server/src/Template/StateCreated/add.ctp b/community_server/src/Template/StateCreated/add.ctp deleted file mode 100644 index c66cf83f3..000000000 --- a/community_server/src/Template/StateCreated/add.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateCreated) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('month'); - echo $this->Form->control('year'); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('short_ident_hash'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateCreated/edit.ctp b/community_server/src/Template/StateCreated/edit.ctp deleted file mode 100644 index be1ef330b..000000000 --- a/community_server/src/Template/StateCreated/edit.ctp +++ /dev/null @@ -1,37 +0,0 @@ - - -
    - Form->create($stateCreated) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('month'); - echo $this->Form->control('year'); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('short_ident_hash'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateCreated/index.ctp b/community_server/src/Template/StateCreated/index.ctp deleted file mode 100644 index 64a514b3b..000000000 --- a/community_server/src/Template/StateCreated/index.ctp +++ /dev/null @@ -1,61 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('month') ?>Paginator->sort('year') ?>Paginator->sort('state_user_id') ?>Paginator->sort('created') ?>Paginator->sort('short_ident_hash') ?>
    Number->format($stateCreated->id) ?>has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>Number->format($stateCreated->month) ?>Number->format($stateCreated->year) ?>has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>created) ?>Number->format($stateCreated->short_ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $stateCreated->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateCreated->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateCreated->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateCreated->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateCreated/view.ctp b/community_server/src/Template/StateCreated/view.ctp deleted file mode 100644 index e0e9301ec..000000000 --- a/community_server/src/Template/StateCreated/view.ctp +++ /dev/null @@ -1,52 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>
    Number->format($stateCreated->id) ?>
    Number->format($stateCreated->month) ?>
    Number->format($stateCreated->year) ?>
    Number->format($stateCreated->short_ident_hash) ?>
    created) ?>
    -
    diff --git a/community_server/src/Template/StateErrors/add.ctp b/community_server/src/Template/StateErrors/add.ctp deleted file mode 100644 index 24d095b90..000000000 --- a/community_server/src/Template/StateErrors/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateErrors/edit.ctp b/community_server/src/Template/StateErrors/edit.ctp deleted file mode 100644 index 795b6c7dd..000000000 --- a/community_server/src/Template/StateErrors/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateErrors/index.ctp b/community_server/src/Template/StateErrors/index.ctp deleted file mode 100644 index 3f34f449b..000000000 --- a/community_server/src/Template/StateErrors/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_type_id') ?>Paginator->sort('created') ?>
    Number->format($stateError->id) ?>has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>created) ?> - Html->link(__('View'), ['action' => 'view', $stateError->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateError->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateError->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateErrors/show_for_user.ctp b/community_server/src/Template/StateErrors/show_for_user.ctp deleted file mode 100644 index 2420571a3..000000000 --- a/community_server/src/Template/StateErrors/show_for_user.ctp +++ /dev/null @@ -1,51 +0,0 @@ -assign('title', __('Fehlermeldungen')); -//var_dump($transactionTypes); -/*foreach($transactionTypes as $i => $t) { - echo "$i => "; - var_dump($t); - echo "
    "; -}*/ -?> -
    -

    Fehler

    -
    -
    -
    Transaktion Typ
    -
    Datum
    -
    Fehler
    -
    Aktionen
    -
    - transaction_type_id-1]; - $errorMessage = ""; - $errorArray = json_decode($error->message_json, true); - if(isset($errorArray['details']) && is_array($errorArray['details'])) { - foreach($errorArray['details'][0] as $function => $errorString) { - $errorMessage = '' . $function . '
    ' . $errorString; - } - } else { - $errorMessage = $error->message_json; - } - ?> -
    -
    name ?>
    -
    created ?>
    -
    -
    - Html->link( - __('Delete'), - ['action' => 'deleteForUser', $error->id], - ['class' => 'form-button button-cancel'] - ) ?>
    -
    - -
    -
    diff --git a/community_server/src/Template/StateErrors/view.ctp b/community_server/src/Template/StateErrors/view.ctp deleted file mode 100644 index c2913d306..000000000 --- a/community_server/src/Template/StateErrors/view.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>
    Number->format($stateError->id) ?>
    created) ?>
    -
    -

    - Text->autoParagraph(h($stateError->message_json)); ?> -
    -
    diff --git a/community_server/src/Template/StateGroupAddresses/add.ctp b/community_server/src/Template/StateGroupAddresses/add.ctp deleted file mode 100644 index 43ba76178..000000000 --- a/community_server/src/Template/StateGroupAddresses/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupAddresses/edit.ctp b/community_server/src/Template/StateGroupAddresses/edit.ctp deleted file mode 100644 index d3ad6fe70..000000000 --- a/community_server/src/Template/StateGroupAddresses/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupAddresses/index.ctp b/community_server/src/Template/StateGroupAddresses/index.ctp deleted file mode 100644 index fb463e5dd..000000000 --- a/community_server/src/Template/StateGroupAddresses/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('group_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($stateGroupAddress->id) ?>Number->format($stateGroupAddress->group_id) ?>has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $stateGroupAddress->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupAddress->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupAddress->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroupAddresses/view.ctp b/community_server/src/Template/StateGroupAddresses/view.ctp deleted file mode 100644 index 964b12847..000000000 --- a/community_server/src/Template/StateGroupAddresses/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>
    Number->format($stateGroupAddress->id) ?>
    Number->format($stateGroupAddress->group_id) ?>
    -
    diff --git a/community_server/src/Template/StateGroupRelationships/add.ctp b/community_server/src/Template/StateGroupRelationships/add.ctp deleted file mode 100644 index 39eb550e8..000000000 --- a/community_server/src/Template/StateGroupRelationships/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupRelationships/edit.ctp b/community_server/src/Template/StateGroupRelationships/edit.ctp deleted file mode 100644 index 55bcc6afe..000000000 --- a/community_server/src/Template/StateGroupRelationships/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupRelationships/index.ctp b/community_server/src/Template/StateGroupRelationships/index.ctp deleted file mode 100644 index 57fbc4da5..000000000 --- a/community_server/src/Template/StateGroupRelationships/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_group1_id') ?>Paginator->sort('state_group2_id') ?>Paginator->sort('state_relationship_id') ?>
    Number->format($stateGroupRelationship->id) ?>Number->format($stateGroupRelationship->state_group1_id) ?>Number->format($stateGroupRelationship->state_group2_id) ?>Number->format($stateGroupRelationship->state_relationship_id) ?> - Html->link(__('View'), ['action' => 'view', $stateGroupRelationship->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupRelationship->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupRelationship->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupRelationship->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroupRelationships/view.ctp b/community_server/src/Template/StateGroupRelationships/view.ctp deleted file mode 100644 index de871dc77..000000000 --- a/community_server/src/Template/StateGroupRelationships/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    Number->format($stateGroupRelationship->id) ?>
    Number->format($stateGroupRelationship->state_group1_id) ?>
    Number->format($stateGroupRelationship->state_group2_id) ?>
    Number->format($stateGroupRelationship->state_relationship_id) ?>
    -
    diff --git a/community_server/src/Template/StateGroups/add.ctp b/community_server/src/Template/StateGroups/add.ctp deleted file mode 100644 index e71480593..000000000 --- a/community_server/src/Template/StateGroups/add.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroups/edit.ctp b/community_server/src/Template/StateGroups/edit.ctp deleted file mode 100644 index 93b35256b..000000000 --- a/community_server/src/Template/StateGroups/edit.ctp +++ /dev/null @@ -1,38 +0,0 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroups/index.ctp b/community_server/src/Template/StateGroups/index.ctp deleted file mode 100644 index a37029ab2..000000000 --- a/community_server/src/Template/StateGroups/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('user_count') ?>
    Number->format($stateGroup->id) ?>name) ?>Number->format($stateGroup->user_count) ?> - Html->link(__('View'), ['action' => 'view', $stateGroup->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroup->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroup->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroup->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroups/view.ctp b/community_server/src/Template/StateGroups/view.ctp deleted file mode 100644 index 0ecb27009..000000000 --- a/community_server/src/Template/StateGroups/view.ctp +++ /dev/null @@ -1,152 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    Number->format($stateGroup->id) ?>
    Number->format($stateGroup->user_count) ?>
    - - - - -
    diff --git a/community_server/src/Template/StateRelationshipTypes/add.ctp b/community_server/src/Template/StateRelationshipTypes/add.ctp deleted file mode 100644 index 5eb7c3b4f..000000000 --- a/community_server/src/Template/StateRelationshipTypes/add.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateRelationshipTypes/edit.ctp b/community_server/src/Template/StateRelationshipTypes/edit.ctp deleted file mode 100644 index 96ef4ba88..000000000 --- a/community_server/src/Template/StateRelationshipTypes/edit.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateRelationshipTypes/index.ctp b/community_server/src/Template/StateRelationshipTypes/index.ctp deleted file mode 100644 index 2e44a8d88..000000000 --- a/community_server/src/Template/StateRelationshipTypes/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($stateRelationshipType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $stateRelationshipType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateRelationshipType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateRelationshipType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateRelationshipType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateRelationshipTypes/view.ctp b/community_server/src/Template/StateRelationshipTypes/view.ctp deleted file mode 100644 index 5d745a0df..000000000 --- a/community_server/src/Template/StateRelationshipTypes/view.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($stateRelationshipType->id) ?>
    -
    diff --git a/community_server/src/Template/StateUserRoles/assign_role.ctp b/community_server/src/Template/StateUserRoles/assign_role.ctp deleted file mode 100644 index 64d3a1f8b..000000000 --- a/community_server/src/Template/StateUserRoles/assign_role.ctp +++ /dev/null @@ -1,49 +0,0 @@ -assign('title', __('Assign Role')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Assign Role

    -
    - Form->create($assignRoleForm, []) ?> -
    User:  first_name." ".$stateUser->last_name ?>
    -
    Select Role:
    Form->select('role_id', $roles, ['label' => __('Role'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Role'), "multiple" => "multiple", "value" => $role_ids]) ?>
    - Form->button(' ' . __('Assign Role'), ['class' => 'form-button']) ?> - Form->hidden('public_hex', ['id' => 'input-order-row', 'value' => $public_hex]) ?> -
    -
    diff --git a/community_server/src/Template/StateUserRoles/index.ctp b/community_server/src/Template/StateUserRoles/index.ctp deleted file mode 100644 index 4e6ea8cb1..000000000 --- a/community_server/src/Template/StateUserRoles/index.ctp +++ /dev/null @@ -1,69 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUserRoles/search.ctp b/community_server/src/Template/StateUserRoles/search.ctp deleted file mode 100644 index aff7fbbcb..000000000 --- a/community_server/src/Template/StateUserRoles/search.ctp +++ /dev/null @@ -1,53 +0,0 @@ -assign('title', __('Benutzer suchen')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail')]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('email') ?>
    - Html->link(__('Assign Role'), ['action' => 'assignRole', $stateUser['pubkeyhex']]) ?> -
    -
    diff --git a/community_server/src/Template/StateUserTransactions/add.ctp b/community_server/src/Template/StateUserTransactions/add.ctp deleted file mode 100644 index b131a43e5..000000000 --- a/community_server/src/Template/StateUserTransactions/add.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUserTransactions/edit.ctp b/community_server/src/Template/StateUserTransactions/edit.ctp deleted file mode 100644 index eec26e522..000000000 --- a/community_server/src/Template/StateUserTransactions/edit.ctp +++ /dev/null @@ -1,37 +0,0 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUserTransactions/index.ctp b/community_server/src/Template/StateUserTransactions/index.ctp deleted file mode 100644 index 9bdd3d6b3..000000000 --- a/community_server/src/Template/StateUserTransactions/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('transaction_type_id') ?>
    Number->format($stateUserTransaction->id) ?>has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $stateUserTransaction->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUserTransaction->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUserTransaction->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUserTransactions/view.ctp b/community_server/src/Template/StateUserTransactions/view.ctp deleted file mode 100644 index 13c05347b..000000000 --- a/community_server/src/Template/StateUserTransactions/view.ctp +++ /dev/null @@ -1,42 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>
    has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?>
    Number->format($stateUserTransaction->id) ?>
    -
    diff --git a/community_server/src/Template/StateUsers/add.ctp b/community_server/src/Template/StateUsers/add.ctp deleted file mode 100644 index a810bc9d5..000000000 --- a/community_server/src/Template/StateUsers/add.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('index_id'); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUsers/edit.ctp b/community_server/src/Template/StateUsers/edit.ctp deleted file mode 100644 index 473f1d845..000000000 --- a/community_server/src/Template/StateUsers/edit.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('disabled'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUsers/index.ctp b/community_server/src/Template/StateUsers/index.ctp deleted file mode 100644 index 4e6ea8cb1..000000000 --- a/community_server/src/Template/StateUsers/index.ctp +++ /dev/null @@ -1,69 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUsers/list_ident_hashes.ctp b/community_server/src/Template/StateUsers/list_ident_hashes.ctp deleted file mode 100644 index 777a32c99..000000000 --- a/community_server/src/Template/StateUsers/list_ident_hashes.ctp +++ /dev/null @@ -1,29 +0,0 @@ - -
    - - - - - - - - - - - - - - - - - -
    first namelast nameemailidentHashPublic key hex -
    first_name ?>last_name ?>email ?>identHash ?>public_key)) ?>
    -
    diff --git a/community_server/src/Template/StateUsers/search.ctp b/community_server/src/Template/StateUsers/search.ctp deleted file mode 100644 index 626cb7313..000000000 --- a/community_server/src/Template/StateUsers/search.ctp +++ /dev/null @@ -1,79 +0,0 @@ -assign('title', __('Benutzer suchen')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); - -$stateOptions = [ - 'all' => __('Alle'), - //'account created'=>__('Konto angelegt'), - //'account not on login-server' => __('Konto nicht auf Login-Server'), - //'email activated' => __('Konto aktiviert'), - //'account copied to community' => __('Konto auf Gemeinschafts-Server'), - 'email not activated' => __('Konto nicht aktiviert'), - //'account multiple times on login-server' => __('Konto mehrfach vorhanden'), - //'account not on community server' => __('Konto nicht auf Gemeinschafts-Server'), - //'no keys' => __('Keine Schlüssel generiert') -]; - -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail'), 'required' => false]) ?> - Form->control('account_state', ['label' => __('Konto Status'), 'class' => 'form-control', 'type' => 'select', 'options' => $stateOptions]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    - -
    - - -Html->script('userSearch.min') ?> - - - diff --git a/community_server/src/Template/StateUsers/view.ctp b/community_server/src/Template/StateUsers/view.ctp deleted file mode 100644 index c2bb33c2b..000000000 --- a/community_server/src/Template/StateUsers/view.ctp +++ /dev/null @@ -1,143 +0,0 @@ - - -
    -

    first_name) ?> last_name) ?> <email) ?>>

    - Konto-Adresse: public_key))) ?> - - - - - -
    diff --git a/community_server/src/Template/TransactionCreations/add.ctp b/community_server/src/Template/TransactionCreations/add.ctp deleted file mode 100644 index dfe34be56..000000000 --- a/community_server/src/Template/TransactionCreations/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/create.ctp b/community_server/src/Template/TransactionCreations/create.ctp deleted file mode 100644 index d5c9ee2c5..000000000 --- a/community_server/src/Template/TransactionCreations/create.ctp +++ /dev/null @@ -1,31 +0,0 @@ - $receiver) { - //var_dump($receiver); - array_push($address_options, [ - 'text' => $receiver['name'], - 'value' => $i+1, - 'title' => $receiver['key'] - ]); -} -$this->assign('title', __('Schöpfungstransaktion')); -?> -
    - - Form->create($creationForm) ?> -
    - Form->control('memo'); ?> - Form->control('amount'); ?> - Form->control('receiver', ['options' => $address_options]); ?> - -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'grd-form-bn grd-form-bn-succeed grd_clickable grd-width-200']) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'grd-form-bn grd_clickable grd-width-200']) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/create_multi.ctp b/community_server/src/Template/TransactionCreations/create_multi.ctp deleted file mode 100644 index d4d130b9c..000000000 --- a/community_server/src/Template/TransactionCreations/create_multi.ctp +++ /dev/null @@ -1,229 +0,0 @@ - $receiver) { - //var_dump($receiver); - array_push($address_options, [ - 'text' => $receiver['name'], - 'value' => $i+1, - 'title' => $receiver['key'] - ]); -}*/ -$this->assign('title', __('Schöpfungstransaktion')); -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); - -use Cake\I18n\FrozenTime; - -?> -
    -

    Schöpfen

    -
    - Form->create($creationForm) ?> - 0) : ?> -
    - -
    -
    - Form->control('searchText', ['label' => __('Suche'), 'placeholder' => 'Email/Name']); ?> - Form->button(__('Suchen'), ['name' => 'searchButton', 'class' => 'form-button']) ?> -
    -
    - Form->control('memo', ['label' => __('Memo'), 'placeholder' => 'Memo']); ?> - Form->control('amount', ['label' => __('Betrag in GDD'), 'required' => false]); ?> - day(1)->subMonth(1); - ?> - -
    -
    - - -
    -
    - 30000000) { - //$disable = 'disabled'; - } - ?> -
    - - Form->hidden('user_pending[' . $possibleReceiver['id'] . ']', ['value' => $possibleReceiver['pending']] ) ?> - -
    -
    - Form->checkbox('user[' .$possibleReceiver['id'] . ']', ['value' => $possibleReceiver['id'], 'hiddenField' => false, $disable]); ?> -
    -
    - - - - - - - <> - - -
    -
    - Form->text('user_amount[' . $possibleReceiver['id'] . ']', ['placeholder' => __('Für benutzerdefinierten Betrag'), 'class' => 'user_amount', 'type' => 'number', 'step' => '0.01', $disable]); ?> GDD -
    -
    - Form->date('user_target_date[' . $possibleReceiver['id'] . ']', ['value' => $firstDayLastMonth]) ?> -
    -
    -
    - - - Bereits als Transaktion angelegt: element('printGradido', ['number' => $possibleReceiver['pending']]);?> - - - - - In diesen und den letzten 2 Monaten bereits geschöpft (alte Berechnung): element('printGradido', ['number' => $possibleReceiver['amount']]);?> - - - 0) : ?> - - Im letzten Monat geschöpft (neue Berechnung): element('printGradido', ['number' => $possibleReceiver['amount2']]) ?> - - -
    -
    - - -
    - $limit) : ?> -

    Benutzer insgesamt

    -

    Seiten: - 0) echo ', '; - if($i != $page) { - echo $this->Html->link($i, ['action' => 'create_multi', $i]); - } else { - echo $i; - } - } - ?> -

    - -
    -
    -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'form-button' ]) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'form-button']) ?> -
    -
    - Form->end() ?> -
    -
    -Html->script('basic'); ?> - - 0) : ?> - - \ No newline at end of file diff --git a/community_server/src/Template/TransactionCreations/edit.ctp b/community_server/src/Template/TransactionCreations/edit.ctp deleted file mode 100644 index 85b7704be..000000000 --- a/community_server/src/Template/TransactionCreations/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/index.ctp b/community_server/src/Template/TransactionCreations/index.ctp deleted file mode 100644 index 4eb7b2471..000000000 --- a/community_server/src/Template/TransactionCreations/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('target_date') ?>Paginator->sort('received') ?>Paginator->sort('amount') ?>
    Number->format($transactionCreation->id) ?>has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionCreation->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>target_date) ?>transaction->received) ?>element('printGradido', ['number' => $transactionCreation->amount]) ?>ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $transactionCreation->id]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionCreations/view.ctp b/community_server/src/Template/TransactionCreations/view.ctp deleted file mode 100644 index a51312674..000000000 --- a/community_server/src/Template/TransactionCreations/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionCreation->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>
    Number->format($transactionCreation->id) ?>
    Number->format($transactionCreation->amount) ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/add.ctp b/community_server/src/Template/TransactionGroupAddaddress/add.ctp deleted file mode 100644 index 21fa1bea7..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp b/community_server/src/Template/TransactionGroupAddaddress/edit.ctp deleted file mode 100644 index e9d7c318a..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/index.ctp b/community_server/src/Template/TransactionGroupAddaddress/index.ctp deleted file mode 100644 index 404115d69..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($transactionGroupAddaddres->id) ?>has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $transactionGroupAddaddres->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAddaddres->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAddaddres->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAddaddres->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/view.ctp b/community_server/src/Template/TransactionGroupAddaddress/view.ctp deleted file mode 100644 index 8401780e7..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>
    has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>
    Number->format($transactionGroupAddaddres->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp b/community_server/src/Template/TransactionGroupAllowtrades/add.ctp deleted file mode 100644 index 7e29efc24..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp +++ /dev/null @@ -1,27 +0,0 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp b/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp deleted file mode 100644 index 500241331..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp b/community_server/src/Template/TransactionGroupAllowtrades/index.ctp deleted file mode 100644 index 07386ccb2..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('group_id') ?>Paginator->sort('allow') ?>
    Number->format($transactionGroupAllowtrade->id) ?>has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>Number->format($transactionGroupAllowtrade->group_id) ?>allow) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupAllowtrade->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAllowtrade->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAllowtrade->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAllowtrade->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp b/community_server/src/Template/TransactionGroupAllowtrades/view.ctp deleted file mode 100644 index 7a6a36f5a..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp +++ /dev/null @@ -1,38 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>
    Number->format($transactionGroupAllowtrade->id) ?>
    Number->format($transactionGroupAllowtrade->group_id) ?>
    allow ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupCreates/add.ctp b/community_server/src/Template/TransactionGroupCreates/add.ctp deleted file mode 100644 index 6e6174eb4..000000000 --- a/community_server/src/Template/TransactionGroupCreates/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupCreates/edit.ctp b/community_server/src/Template/TransactionGroupCreates/edit.ctp deleted file mode 100644 index d1890afca..000000000 --- a/community_server/src/Template/TransactionGroupCreates/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupCreates/index.ctp b/community_server/src/Template/TransactionGroupCreates/index.ctp deleted file mode 100644 index 13aeabf83..000000000 --- a/community_server/src/Template/TransactionGroupCreates/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_group_id') ?>Paginator->sort('name') ?>
    Number->format($transactionGroupCreate->id) ?>has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>name) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupCreate->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupCreate->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupCreate->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupCreate->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupCreates/view.ctp b/community_server/src/Template/TransactionGroupCreates/view.ctp deleted file mode 100644 index c774f8bc3..000000000 --- a/community_server/src/Template/TransactionGroupCreates/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>
    has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>
    name) ?>
    Number->format($transactionGroupCreate->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionSendCoins/add.ctp b/community_server/src/Template/TransactionSendCoins/add.ctp deleted file mode 100644 index 8b5a757c4..000000000 --- a/community_server/src/Template/TransactionSendCoins/add.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - echo $this->Form->control('sender_final_balance'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSendCoins/create.ctp b/community_server/src/Template/TransactionSendCoins/create.ctp deleted file mode 100644 index 91e7678e0..000000000 --- a/community_server/src/Template/TransactionSendCoins/create.ctp +++ /dev/null @@ -1,40 +0,0 @@ -assign('title', __('Überweisung')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -

    Überweisen

    -
    - Form->create($transferForm) ?> - Form->control('email', ['label' => __('Empfänger'), 'placeholder' => 'E-Mail']) ?> - Form->control('group', ['label' => __('Community Alias'), 'options' => $groups, 'default' => $user['group_alias']]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'form-button']) ?> - - Form->end() ?> -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/TransactionSendCoins/create_raw.ctp b/community_server/src/Template/TransactionSendCoins/create_raw.ctp deleted file mode 100644 index 0b3d74e1f..000000000 --- a/community_server/src/Template/TransactionSendCoins/create_raw.ctp +++ /dev/null @@ -1,55 +0,0 @@ -assign('title', __('Überweisung')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> - -
    -
    -
    -

    Überweisen

    -
    -
    -
    -
    - Form->create($transferRawForm) ?> - Form->control('sender_privkey_hex', ['label' => __('Sender Private Key')]) ?> - Form->control('sender_pubkey_hex', ['label' => __('Sender Public Key')]) ?> - Form->control('receiver_pubkey_hex', ['label' => __('Empfänger Public Key')]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'btn btn-sm btn-primary']) ?> - Form->end() ?> -
    -
    -
    -
    -
    -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/TransactionSendCoins/edit.ctp b/community_server/src/Template/TransactionSendCoins/edit.ctp deleted file mode 100644 index 61a6841fe..000000000 --- a/community_server/src/Template/TransactionSendCoins/edit.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - echo $this->Form->control('sender_final_balance'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSendCoins/index.ctp b/community_server/src/Template/TransactionSendCoins/index.ctp deleted file mode 100644 index c98f675a5..000000000 --- a/community_server/src/Template/TransactionSendCoins/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('receiver_user_id') ?>Paginator->sort('amount') ?>Paginator->sort('sender_final_balance') ?>
    Number->format($transactionSendCoin->id) ?>has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionSendCoin->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>has('receiver_user') ? $this->Html->link($transactionSendCoin->receiver_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->receiver_user->id]) : ''?>element('printGradido', ['number' => $transactionSendCoin->amount]) ?>Number->format($transactionSendCoin->sender_final_balance) ?> - Html->link(__('View'), ['action' => 'view', $transactionSendCoin->id]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionSendCoins/view.ctp b/community_server/src/Template/TransactionSendCoins/view.ctp deleted file mode 100644 index 322621942..000000000 --- a/community_server/src/Template/TransactionSendCoins/view.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionSendCoin->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>
    Number->format($transactionSendCoin->id) ?>
    Number->format($transactionSendCoin->amount) ?>
    Number->format($transactionSendCoin->sender_final_balance) ?>
    -
    diff --git a/community_server/src/Template/TransactionSignatures/add.ctp b/community_server/src/Template/TransactionSignatures/add.ctp deleted file mode 100644 index 752389cd7..000000000 --- a/community_server/src/Template/TransactionSignatures/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSignatures/edit.ctp b/community_server/src/Template/TransactionSignatures/edit.ctp deleted file mode 100644 index 68143712b..000000000 --- a/community_server/src/Template/TransactionSignatures/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSignatures/index.ctp b/community_server/src/Template/TransactionSignatures/index.ctp deleted file mode 100644 index 9b8bc2826..000000000 --- a/community_server/src/Template/TransactionSignatures/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>
    Number->format($transactionSignature->id) ?>has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $transactionSignature->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionSignature->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionSignature->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionSignature->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionSignatures/view.ctp b/community_server/src/Template/TransactionSignatures/view.ctp deleted file mode 100644 index 681198125..000000000 --- a/community_server/src/Template/TransactionSignatures/view.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?>
    Number->format($transactionSignature->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionTypes/add.ctp b/community_server/src/Template/TransactionTypes/add.ctp deleted file mode 100644 index 97de82122..000000000 --- a/community_server/src/Template/TransactionTypes/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionTypes/edit.ctp b/community_server/src/Template/TransactionTypes/edit.ctp deleted file mode 100644 index 421184b55..000000000 --- a/community_server/src/Template/TransactionTypes/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionTypes/index.ctp b/community_server/src/Template/TransactionTypes/index.ctp deleted file mode 100644 index b2248ae4b..000000000 --- a/community_server/src/Template/TransactionTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($transactionType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $transactionType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionTypes/view.ctp b/community_server/src/Template/TransactionTypes/view.ctp deleted file mode 100644 index 3da64f7e3..000000000 --- a/community_server/src/Template/TransactionTypes/view.ctp +++ /dev/null @@ -1,63 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($transactionType->id) ?>
    - -
    diff --git a/community_server/src/Template/Transactions/add.ctp b/community_server/src/Template/Transactions/add.ctp deleted file mode 100644 index 012d82027..000000000 --- a/community_server/src/Template/Transactions/add.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    - Form->create($transaction) ?> -
    - - Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('memo', ['type' => 'textarea']); - echo $this->Form->control('blockchain_type_id', ['options' => $blockchainTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/decode.ctp b/community_server/src/Template/Transactions/decode.ctp deleted file mode 100644 index dddde1cb8..000000000 --- a/community_server/src/Template/Transactions/decode.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - 0) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -Form->create() ?> -Form->control('base64', ['type'=> 'textarea', 'rows' => '5', 'cols' => 40]) ?> -Form->submit(); ?> -Form->end() ?> - - -getTransactionBody(); -?> - - - getMemo() ?> -
    TypegetTransactionTypeName() ?>
    Memo
    - - diff --git a/community_server/src/Template/Transactions/edit.ctp b/community_server/src/Template/Transactions/edit.ctp deleted file mode 100644 index 4085a60c4..000000000 --- a/community_server/src/Template/Transactions/edit.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    - Form->create($transaction) ?> -
    - - Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('received'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/index.ctp b/community_server/src/Template/Transactions/index.ctp deleted file mode 100644 index 9f97dc0c8..000000000 --- a/community_server/src/Template/Transactions/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('memo') ?>
    -
    Paginator->sort('transaction_type_id') ?>
    -
    Paginator->sort('received') ?>
    -
    - -
    -
    Number->format($transaction->id) ?>
    -
    memo) ?>
    -
    has('transaction_type') ? $this->Html->link(__($transaction->transaction_type->name), ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    -
    received) ?>
    -
    - -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Transactions/manual_transaction.ctp b/community_server/src/Template/Transactions/manual_transaction.ctp deleted file mode 100644 index 30bda1175..000000000 --- a/community_server/src/Template/Transactions/manual_transaction.ctp +++ /dev/null @@ -1,63 +0,0 @@ -loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -$now = new \DateTime; -?> - 0) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'creation']) ?> - Form->control('target_public_key', ['type'=> 'text']) ?> - Form->control('target_date', ['type'=> 'text', 'placeholder' => 'yyyy-mm-dd hh:ii:ss', 'default' => $now->format('Y-m-d H:i:s')]) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'transfer']) ?> - Form->control('sender_public_key', ['type'=> 'text']) ?> - Form->control('receiver_public_key', ['type'=> 'text']) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    - -
    -
      - $value) : ?> -
    • :
    • - -
    -
    - \ No newline at end of file diff --git a/community_server/src/Template/Transactions/send_to_node.ctp b/community_server/src/Template/Transactions/send_to_node.ctp deleted file mode 100644 index 0bb652feb..000000000 --- a/community_server/src/Template/Transactions/send_to_node.ctp +++ /dev/null @@ -1,106 +0,0 @@ -assign('title', __('Transaktionen an Gradido-Node senden')); -?> - - -

    - -Bisher keine Transaktionen eingereicht - -Letzte eingereichte Transaktion - -

    -
      - $id) : ?> -
    • - : - - - Wird verarbeitet - - in Warteschlange - - - -
    • -
    -Html->script(['core']); ?> - diff --git a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp b/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp deleted file mode 100644 index 8ac1ecb2d..000000000 --- a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp +++ /dev/null @@ -1,46 +0,0 @@ - -
    -

    Synchronize state_user_transactions with transactions

    -

    transactions count:

    -

    state_user_transaction count:

    -

    Missing count:

    -

    First 10 Missing ids:

    -

    $id) { - if($i > 10) break; - if($i > 0) echo ', '; - echo $id['id']; -} ?>

    - - -

    Synchronize errors:

    -
      - $result) : - if(false != $result) { - $succeed++; - continue; - } - ?> -
    • Error saving entity: with error: getErrors()) ?>
    • - - -
    • Succeed:
    • -
    - - - Form->create() ?> - Form->button(__('Synchronize')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/view.ctp b/community_server/src/Template/Transactions/view.ctp deleted file mode 100644 index e15b9dbe3..000000000 --- a/community_server/src/Template/Transactions/view.ctp +++ /dev/null @@ -1,259 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_group') ? $this->Html->link($transaction->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transaction->state_group->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($transaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    Number->format($transaction->id) ?>
    received) ?>
    - - - - - - - -
    diff --git a/community_server/src/Template/Users/add.ctp b/community_server/src/Template/Users/add.ctp deleted file mode 100644 index 6f67f02e6..000000000 --- a/community_server/src/Template/Users/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($user) ?> -
    - - Form->control('email'); - echo $this->Form->control('first_name'); - echo $this->Form->control('last_name'); - echo $this->Form->control('password'); - echo $this->Form->control('email_checked'); - echo $this->Form->control('language'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Users/edit.ctp b/community_server/src/Template/Users/edit.ctp deleted file mode 100644 index 681eacd36..000000000 --- a/community_server/src/Template/Users/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($user) ?> -
    - - Form->control('email'); - echo $this->Form->control('first_name'); - echo $this->Form->control('last_name'); - echo $this->Form->control('password'); - echo $this->Form->control('email_checked'); - echo $this->Form->control('language'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Users/index.ctp b/community_server/src/Template/Users/index.ctp deleted file mode 100644 index 14566ea26..000000000 --- a/community_server/src/Template/Users/index.ctp +++ /dev/null @@ -1,59 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('email') ?>Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('password') ?>Paginator->sort('created') ?>Paginator->sort('email_checked') ?>Paginator->sort('language') ?>
    Number->format($user->id) ?>email) ?>first_name) ?>last_name) ?>Number->format($user->password) ?>created) ?>email_checked) ?>language) ?> - Html->link(__('View'), ['action' => 'view', $user->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Users/statistics.ctp b/community_server/src/Template/Users/statistics.ctp deleted file mode 100644 index 76532faa8..000000000 --- a/community_server/src/Template/Users/statistics.ctp +++ /dev/null @@ -1,98 +0,0 @@ -assign('title', __('Benutzer Statistiken')); - -//mdi mdi-account-multiple-plus -//$newUserPercent = (1 - (b / a)) * 100 -$newUserPercent = 0; -$percentColor = 'info'; -if($users->count() > 0 && $newUsersLastMonth->count()) { - $newUserPercent = round((1 - ($users->count() / $newUsersLastMonth->count())) * 100.0, 2); - if($newUserPercent > 0 ) { - $percentColor = 'success'; - } else if($newUserPercent <= 0) { - $percentColor = 'alert'; - } -} - -$userColor = 'info'; -if($users->count() > 0) { - if($users->count() > 0 ) { - $userColor = 'success'; - } else if($users->count() <= 0) { - $userColor = 'alert'; - } -} -?> -
    -
    -
    - people -
    -

    count()?>

    -
     
    - -   - -
    -
    -
    - group_add -
    -

    count() ?>

    -
     
    - - - arrow_drop_down - 0) : ?> - arrow_drop_up - - % - -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - -
    -
    first_name . ' ' . $user->last_name ?>
    -
    email ?>
    -
    created ?>
    -
    - - toArray()); ?> -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - $yearEntrys) : ?> - $monthEntrys): ?> -
    -
    -
    -
    -
    - - -
    -
    -Html->script(['core', 'vendor.addons']); ?> -Html->script('userSearch') ?> \ No newline at end of file diff --git a/community_server/src/Template/Users/view.ctp b/community_server/src/Template/Users/view.ctp deleted file mode 100644 index d3a1e67cd..000000000 --- a/community_server/src/Template/Users/view.ctp +++ /dev/null @@ -1,52 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    email) ?>
    first_name) ?>
    last_name) ?>
    language) ?>
    Number->format($user->id) ?>
    Number->format($user->password) ?>
    created) ?>
    email_checked ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/View/AjaxView.php b/community_server/src/View/AjaxView.php deleted file mode 100644 index 3cb786926..000000000 --- a/community_server/src/View/AjaxView.php +++ /dev/null @@ -1,49 +0,0 @@ -response = $this->response->withType('ajax'); - } -} diff --git a/community_server/src/View/AppView.php b/community_server/src/View/AppView.php deleted file mode 100644 index 242ab6bde..000000000 --- a/community_server/src/View/AppView.php +++ /dev/null @@ -1,40 +0,0 @@ -loadHelper('Html');` - * - * @return void - */ - public function initialize() - { - } -} diff --git a/community_server/src/View/Cell/empty b/community_server/src/View/Cell/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/View/Helper/empty b/community_server/src/View/Helper/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/testJson.sh b/community_server/testJson.sh deleted file mode 100755 index b66cf8d18..000000000 --- a/community_server/testJson.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -#sudo -u www-data ./vendor/bin/phpunit --filter testIndex tests/TestCase/Controller/TransactionJsonRequestHandlerControllerTest - -sudo -u www-data ./vendor/bin/phpunit --testdox tests/TestCase/Controller/JsonRequestHandlerControllerTest - diff --git a/community_server/tests/Fixture/AddressTypesFixture.php b/community_server/tests/Fixture/AddressTypesFixture.php deleted file mode 100644 index 1e06a0ec9..000000000 --- a/community_server/tests/Fixture/AddressTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'name' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit amet', - 'text' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/AdminErrorsFixture.php b/community_server/tests/Fixture/AdminErrorsFixture.php deleted file mode 100644 index 0fbc3a067..000000000 --- a/community_server/tests/Fixture/AdminErrorsFixture.php +++ /dev/null @@ -1,56 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'controller' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'action' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'state' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'msg' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'details' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'controller' => 'Lorem ipsum dolor sit amet', - 'action' => 'Lorem ipsum dolor sit amet', - 'state' => 'Lorem ipsum dolor sit amet', - 'msg' => 'Lorem ipsum dolor sit amet', - 'details' => 'Lorem ipsum dolor sit amet', - 'created' => '2019-12-16 15:08:19' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/BaseTestFixture.php b/community_server/tests/Fixture/BaseTestFixture.php deleted file mode 100644 index 1f63aa55e..000000000 --- a/community_server/tests/Fixture/BaseTestFixture.php +++ /dev/null @@ -1,36 +0,0 @@ - '$1' - protected function sqlEntrysToRecords($sql_entries, $fields) { - $field_array_keys = array_keys($fields); - $records = []; - foreach($sql_entries as $sql_entry) { - $record = []; - foreach($sql_entry as $i => $value) { - $field = $field_array_keys[$i]; - if($fields[$field]['type'] == 'binary') { - if(is_string($value)) { - $record[$field] = hex2bin($value); - } - } else { - $record[$field] = $value; - } - } - $records[] = $record; - } - return $records; - } -} \ No newline at end of file diff --git a/community_server/tests/Fixture/CommunityProfilesFixture.php b/community_server/tests/Fixture/CommunityProfilesFixture.php deleted file mode 100644 index 0fa7ed764..000000000 --- a/community_server/tests/Fixture/CommunityProfilesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'profile_img' => ['type' => 'binary', 'length' => 4294967295, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'profile_desc' => ['type' => 'string', 'length' => 2000, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_indexes' => [ - 'state_user_id' => ['type' => 'index', 'columns' => ['state_user_id'], 'length' => []], - ], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []] - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'profile_img' => 'Lorem ipsum dolor sit amet', - 'profile_desc' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/ElopageBuysFixture.php b/community_server/tests/Fixture/ElopageBuysFixture.php deleted file mode 100644 index 20be0f4e3..000000000 --- a/community_server/tests/Fixture/ElopageBuysFixture.php +++ /dev/null @@ -1,64 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'elopage_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'affiliate_program_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'publisher_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'order_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'product_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'product_price' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'payer_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'publisher_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'payed' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'success_date' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'event' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'elopage_user_id' => 1, - 'affiliate_program_id' => 1, - 'publisher_id' => 1, - 'order_id' => 1, - 'product_id' => 1, - 'product_price' => 1, - 'payer_email' => 'Lorem ipsum dolor sit amet', - 'publisher_email' => 'Lorem ipsum dolor sit amet', - 'payed' => 1, - 'success_date' => '2020-02-13 09:49:46', - 'event' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/OperatorTypesFixture.php b/community_server/tests/Fixture/OperatorTypesFixture.php deleted file mode 100644 index dfc589034..000000000 --- a/community_server/tests/Fixture/OperatorTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit a', - 'text' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/OperatorsFixture.php b/community_server/tests/Fixture/OperatorsFixture.php deleted file mode 100644 index 2cb852efc..000000000 --- a/community_server/tests/Fixture/OperatorsFixture.php +++ /dev/null @@ -1,49 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'username' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'operator_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'data_base64' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'username' => ['type' => 'unique', 'columns' => ['username'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'username' => 'Lorem ipsum dolor sit amet', - 'operator_type_id' => 1, - 'data_base64' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/RolesFixture.php b/community_server/tests/Fixture/RolesFixture.php deleted file mode 100644 index db2c7640f..000000000 --- a/community_server/tests/Fixture/RolesFixture.php +++ /dev/null @@ -1,45 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'title' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'roles_id_IDX' => ['type' => 'unique', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'title' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/ServerUsersFixture.php b/community_server/tests/Fixture/ServerUsersFixture.php deleted file mode 100644 index 3aeedab12..000000000 --- a/community_server/tests/Fixture/ServerUsersFixture.php +++ /dev/null @@ -1,58 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'username' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'password' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'email' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'role' => ['type' => 'string', 'length' => 20, 'null' => false, 'default' => 'admin', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'activated' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'last_login' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'username' => 'Lorem ipsum dolor sit amet', - 'password' => 'Lorem ipsum dolor sit amet', - 'email' => 'Lorem ipsum dolor sit amet', - 'role' => 'Lorem ipsum dolor ', - 'activated' => 1, - 'last_login' => '2019-09-13 10:30:09', - 'created' => '2019-09-13 10:30:09', - 'modified' => '2019-09-13 10:30:09' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateBalancesFixture.php b/community_server/tests/Fixture/StateBalancesFixture.php deleted file mode 100644 index 015366c80..000000000 --- a/community_server/tests/Fixture/StateBalancesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'record_date' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [4, 4, '2021-05-27 17:47:50', '2021-05-27 17:47:50', 28808497], - [5, 1, '2021-05-27 17:47:51', '2021-05-27 17:47:50', 9823963] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateCreatedFixture.php b/community_server/tests/Fixture/StateCreatedFixture.php deleted file mode 100644 index 2f1abd155..000000000 --- a/community_server/tests/Fixture/StateCreatedFixture.php +++ /dev/null @@ -1,63 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'month' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'year' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'short_ident_hash' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_indexes' => [ - 'short_ident_hash' => ['type' => 'index', 'columns' => ['short_ident_hash'], 'length' => []], - ], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'month' => 1, - 'year' => 1, - 'state_user_id' => 1, - 'created' => '2019-09-12 11:14:51', - 'short_ident_hash' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateErrorsFixture.php b/community_server/tests/Fixture/StateErrorsFixture.php deleted file mode 100644 index 6f0d95e26..000000000 --- a/community_server/tests/Fixture/StateErrorsFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'message_json' => ['type' => 'text', 'length' => null, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'transaction_type_id' => 1, - 'created' => '2019-11-07 13:13:12', - 'message_json' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupAddressesFixture.php b/community_server/tests/Fixture/StateGroupAddressesFixture.php deleted file mode 100644 index 2ae5581c8..000000000 --- a/community_server/tests/Fixture/StateGroupAddressesFixture.php +++ /dev/null @@ -1,49 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'address_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'group_id' => 1, - 'public_key' => 'Lorem ipsum dolor sit amet', - 'address_type_id' => 1, - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php b/community_server/tests/Fixture/StateGroupRelationshipsFixture.php deleted file mode 100644 index e50d76f5d..000000000 --- a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php +++ /dev/null @@ -1,48 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_group1_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_group2_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_relationship_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_group1_id' => 1, - 'state_group2_id' => 1, - 'state_relationship_id' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupsFixture.php b/community_server/tests/Fixture/StateGroupsFixture.php deleted file mode 100644 index 57cde2350..000000000 --- a/community_server/tests/Fixture/StateGroupsFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'index_id' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'name' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'root_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'user_count' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'index_id' => 'Lorem ipsum dolor sit amet', - 'name' => 'Lorem ipsum dolor sit amet', - 'root_public_key' => 'Lorem ipsum dolor sit amet', - 'user_count' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateRelationshipTypesFixture.php b/community_server/tests/Fixture/StateRelationshipTypesFixture.php deleted file mode 100644 index c461e0ce3..000000000 --- a/community_server/tests/Fixture/StateRelationshipTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit a', - 'text' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateUserTransactionsFixture.php b/community_server/tests/Fixture/StateUserTransactionsFixture.php deleted file mode 100644 index 605e10e5b..000000000 --- a/community_server/tests/Fixture/StateUserTransactionsFixture.php +++ /dev/null @@ -1,59 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'balance_date' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, 4, 1, 1, 0, '2021-04-09 00:00:00'], - [2, 1, 2, 1, 0, '2021-04-12 00:00:00'], - [5, 1, 3, 2, 0, '2021-04-12 00:00:00'], - [6, 4, 3, 2, 0, '2021-04-12 00:00:00'], - [7, 1, 4, 2, 0, '2021-04-14 00:00:00'], - [8, 4, 4, 2, 0, '2021-04-14 00:00:00'], - [23, 1, 5, 2, 0, '2021-04-14 09:01:07'], - [24, 4, 5, 2, 0, '2021-04-14 09:01:07'], - [25, 4, 7, 2, 0, '2021-04-14 09:02:28'], - [26, 1, 7, 2, 0, '2021-04-14 09:02:28'], - [27, 4, 8, 2, 0, '2021-04-14 09:28:46'], - [28, 1, 8, 2, 0, '2021-04-14 09:28:46'], - [29, 4, 9, 2, 0, '2021-04-14 09:31:28'], - [30, 1, 9, 2, 0, '2021-04-14 09:31:28'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateUsersFixture.php b/community_server/tests/Fixture/StateUsersFixture.php deleted file mode 100644 index a9b033bf7..000000000 --- a/community_server/tests/Fixture/StateUsersFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'index_id' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'email' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'first_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'username' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'disabled' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - - - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql_entrys = [ - [1, 0, 0, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 'test1.gmail.de', 'Max', 'Mustermann', NULL, 0], - [3, 0, 0, '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6', 'test2.gmail.com', 'Ines', 'Mustermann', NULL, 0], - [4, 0, 0, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 'test3.yahoo.com', 'Samuel', 'Schmied', NULL, 0] - ]; - $this->records = $this->sqlEntrysToRecords($sql_entrys, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionCreationsFixture.php b/community_server/tests/Fixture/TransactionCreationsFixture.php deleted file mode 100644 index 4221e8729..000000000 --- a/community_server/tests/Fixture/TransactionCreationsFixture.php +++ /dev/null @@ -1,44 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'target_date' => ['type' => 'timestamp', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [2, 1, 4, 10000000, '2021-01-01 00:00:00'], - [3, 2, 1, 10000000, '2021-01-01 00:00:00'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php b/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php deleted file mode 100644 index 7b659386c..000000000 --- a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'address_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'address_type_id' => 1, - 'public_key' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php b/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php deleted file mode 100644 index edb745441..000000000 --- a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php +++ /dev/null @@ -1,48 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'allow' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'group_id' => 1, - 'allow' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php b/community_server/tests/Fixture/TransactionGroupCreatesFixture.php deleted file mode 100644 index 73db1c751..000000000 --- a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'group_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 64, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'group_public_key' => 'Lorem ipsum dolor sit amet', - 'state_group_id' => 1, - 'name' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionSendCoinsFixture.php b/community_server/tests/Fixture/TransactionSendCoinsFixture.php deleted file mode 100644 index c186ccf8e..000000000 --- a/community_server/tests/Fixture/TransactionSendCoinsFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'sender_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'receiver_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'receiver_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'sender_final_balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [2, 3, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 1000000, 6254699], - [3, 4, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 7027197], - [11, 5, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 6922113], - [12, 7, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9212951], - [13, 8, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9112627], - [14, 9, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 8912594] - ]; - - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionSignaturesFixture.php b/community_server/tests/Fixture/TransactionSignaturesFixture.php deleted file mode 100644 index 9a5bbecee..000000000 --- a/community_server/tests/Fixture/TransactionSignaturesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'signature' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, 1, '1c5357f9438f700a5378abadd0dbd74d90e335c6b9691bb9e126520813f3218573b19226382efb89aa8444a9ca98c2e8933463335baac37baf2f4eecd990600a', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [2, 2, '5215376ae7fb989993e3466961636519d4ade77b3bde066149ade028ad54a1a88ca8a206fcf09f52839ae0ed37b99df08ec9af12f3f37197979a206489e3ff0f', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [3, 3, 'c70f124feaaea02194d22a5f597963ed3e430343122a0952877854766fe37a709f92b39510de2aae494ef11abe743cd59f08f971b1e0e36f4c333990453d8b0d', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [4, 4, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [5, 5, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [6, 7, 'c233726674bff9bfb8ccb98bf358c6bc701825d971ece915d3c3a3de98886d1d13ee2f773cd9fc4ccbe543ac17be0d780ebead23a0dbf4ec814f7bae2efb9c0e', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [7, 8, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [8, 9, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionTypesFixture.php b/community_server/tests/Fixture/TransactionTypesFixture.php deleted file mode 100644 index 48e00e0ec..000000000 --- a/community_server/tests/Fixture/TransactionTypesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'name' => ['type' => 'string', 'length' => 24, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'creation', - 'text' => 'Aktives oder Bedingsungsloses Grundeinkommen' - ], - [ - 'id' => 2, - 'name' => 'transfer', - 'text' => 'Einfache Überweisung' - ] - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionsFixture.php b/community_server/tests/Fixture/TransactionsFixture.php deleted file mode 100644 index 8c38f0657..000000000 --- a/community_server/tests/Fixture/TransactionsFixture.php +++ /dev/null @@ -1,55 +0,0 @@ - ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'tx_hash' => ['type' => 'binary', 'length' => 48, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'memo' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'received' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - 'blockchain_type_id' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => '1', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, NULL, 1, '15f242a7bb92a7db82678e0baf5ec1734c038ac0dc7b19e6d1ebbcf92a6cf3ad00000000000000000000000000000000', 'AGE Januar 2021', '2021-04-09 00:00:00', 1], - [2, NULL, 1, 'f932eca7686802d1697773fea713a3c6a3e3dace8b5aa552dd8503d50ce349f500000000000000000000000000000000', 'AGE Januar 2021', '2021-04-12 00:00:00', 1], - [3, NULL, 2, '4e2235f208edaf5cbb285955732022a625cf1e100eb629c56896d2fbfb8b34e800000000000000000000000000000000', 'test', '2021-04-12 00:00:00', 1], - [4, NULL, 2, 'fc6e69696beb7c56ad7c511fc3999f954411427bec810184b70c092911deae1900000000000000000000000000000000', 'test time', '2021-04-14 00:00:00', 1], - [5, NULL, 2, 'a7149ebc0d6cd8c061906dafe05e13689b51642a41100d0ec7bb6cd2dcafdc1800000000000000000000000000000000', 'test time', '2021-04-14 09:01:07', 1], - [6, NULL, 9, '', '', '2021-04-14 09:02:00', 1], - [7, NULL, 2, '2e3c3ab3e42c06f2ecb12f61c970712467d8ad9ddfa16fa58dd76492e5924b7d00000000000000000000000000000000', 'test time 3', '2021-04-14 09:02:28', 1], - [8, NULL, 2, 'c2c6354d77ff371daeee25fce9c947748b53d3d6b8398a92bd681923cfd2057100000000000000000000000000000000', 'test login crash', '2021-04-14 09:28:46', 1], - [9, NULL, 2, '5a8cbf1aaac06b00b2951ff39983cb2ca9a1e6710d72c8e5067278dc679a823100000000000000000000000000000000', 'test login crash', '2021-04-14 09:31:28', 1] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/UsersFixture.php b/community_server/tests/Fixture/UsersFixture.php deleted file mode 100644 index fc1a9e620..000000000 --- a/community_server/tests/Fixture/UsersFixture.php +++ /dev/null @@ -1,61 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'first_name' => ['type' => 'string', 'length' => 150, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => '', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'password' => ['type' => 'biginteger', 'length' => 25, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'privkey' => ['type' => 'binary', 'length' => 80, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - 'email_checked' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'language' => ['type' => 'string', 'length' => 4, 'null' => false, 'default' => 'de', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'email' => ['type' => 'unique', 'columns' => ['email'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'email' => 'Lorem ipsum dolor sit amet', - 'first_name' => 'Lorem ipsum dolor sit amet', - 'last_name' => 'Lorem ipsum dolor sit amet', - 'password' => 1, - 'pubkey' => 'Lorem ipsum dolor sit amet', - 'privkey' => 'Lorem ipsum dolor sit amet', - 'created' => '2020-02-13 10:54:19', - 'email_checked' => 1, - 'language' => 'Lo', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/TestCase/ApplicationTest.php b/community_server/tests/TestCase/ApplicationTest.php deleted file mode 100644 index 1d183729d..000000000 --- a/community_server/tests/TestCase/ApplicationTest.php +++ /dev/null @@ -1,83 +0,0 @@ -bootstrap(); - $plugins = $app->getPlugins(); - - $this->assertCount(2, $plugins); - $this->assertSame('Bake', $plugins->get('Bake')->getName()); - $this->assertSame('DebugKit', $plugins->get('DebugKit')->getName()); - } - - /** - * testBootstrapPluginWitoutHalt - * - * @return void - */ - public function testBootstrapPluginWithoutHalt() - { - $this->expectException(InvalidArgumentException::class); - - $app = $this->getMockBuilder(Application::class) - ->setConstructorArgs([dirname(dirname(__DIR__)) . '/config']) - ->setMethods(['addPlugin']) - ->getMock(); - - $app->method('addPlugin') - ->will($this->throwException(new InvalidArgumentException('test exception.'))); - - $app->bootstrap(); - } - - /** - * testMiddleware - * - * @return void - */ - public function testMiddleware() - { - $app = new Application(dirname(dirname(__DIR__)) . '/config'); - $middleware = new MiddlewareQueue(); - - $middleware = $app->middleware($middleware); - - $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0)); - $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1)); - $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2)); - } -} diff --git a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php b/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php deleted file mode 100644 index 835fc8d08..000000000 --- a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php +++ /dev/null @@ -1,77 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php b/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php deleted file mode 100644 index a9044b4ae..000000000 --- a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php +++ /dev/null @@ -1,76 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old deleted file mode 100644 index 321ed5ac1..000000000 --- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old +++ /dev/null @@ -1,345 +0,0 @@ -session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 1, - 'email_checked' => 1, - 'public_hex' => 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(9099652, $response->balance); - $this->assertLessThan(9099652, $response->decay); - - } - - public function testGetBalance2() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 3, - 'email_checked' => 1, - 'public_hex' => '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(0, $response->balance); - } - public function testGetBalance3() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 4, - 'email_checked' => 1, - 'public_hex' => 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(10899568, $response->balance); - $this->assertLessThan(10899568, $response->decay); - } - - public function testGetBalanceInvalidSession() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'email_checked' => 1, - 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d' - ] - ]); - - $this->getAndParse('/api/get-balance/' . 1211, - ['state' => 'not found', 'msg' => 'invalid session', - 'details' => ['msg' => 'session not found', 'state' => 'not found'] - ] - ); - } - - public function testGetBalanceInvalidSessionId() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'email_checked' => 1, - 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d' - ] - ]); - - $this->getAndParse('/api/get-balance/' , - ['state' => 'not found', 'msg' => 'invalid session', - 'details' => ['msg' => 'session not found', 'state' => 'not found'] - ] - ); - } - - /** - * Test ajaxListTransactions method - * - * @return void - */ - public function testListTransactions() - { - //ajaxListTransactions - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transactions' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 1, - 'first_name' => 'Dario', - 'last_name' => 'Frodo', - 'email_checked' => 1, - 'email' => 'fördertest@gradido.org', - 'public_hex' => '94ae135b93cd9f33752b4e55c41903a3faa13a75bb90bfd411ea1d4a1a5e711f' - ] - ]); - //echo "balance: $balance"; - $expectedResult = '{ - "state": "success", - "transactions": [ - { - "transaction_id": 2, - "date": "2021-04-12T00:00:00+00:00", - "memo": "AGE Januar 2021", - "name": "Gradido Akademie", - "type": "creation", - "target_date": "2021-01-01T00:00:00+00:00", - "balance": 10000000 - }, - { - "transaction_id": 3, - "date": "2021-04-12T00:00:00+00:00", - "memo": "test", - "balance": 1000000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 4, - "date": "2021-04-14T00:00:00+00:00", - "memo": "test time", - "balance": 100000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 5, - "date": "2021-04-14T09:01:07+00:00", - "memo": "test time", - "balance": 100000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 7, - "date": "2021-04-14T09:02:28+00:00", - "memo": "test time 3", - "decay": { - "balance": 6, - "decay_duration": "0 days, 00 hours, 00 minutes, 28 seconds", - "decay_start": 1618390920, - "decay_end": 1618390948, - "decay_start_block": 1618390920 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 8, - "date": "2021-04-14T09:28:46+00:00", - "memo": "test login crash", - "decay": { - "balance": 309, - "decay_duration": "0 days, 00 hours, 26 minutes, 18 seconds", - "decay_start": 1618390948, - "decay_end": 1618392526 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 9, - "date": "2021-04-14T09:31:28+00:00", - "memo": "test login crash", - "decay": { - "balance": 33, - "decay_duration": "0 days, 00 hours, 02 minutes, 42 seconds", - "decay_start": 1618392526, - "decay_end": 1618392688 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "type": "decay", - "balance": 1345726, - "decay_duration": "on 14.04.21", - "decay_start": 1618392688, - "decay_end": 1625673853, - "memo": "" - } - ], - "transactionExecutingCount": 0, - "count": 7, - "gdtSum": 180000, - "timeUsed": 0.44154810905456545, - "decay_date": "2021-07-07T16:04:13+00:00", - "balance": 9099652, - "decay": 7753926 -}'; - $this->getAndParse('/api/list-transactions/', json_decode($expectedResult, true)); - } - - - private function getAndParse($path, $expected) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was in 2xx - 3xx - $this->assertResponseSuccess(); - $json = (object)$this->viewVariable('body'); - - if(!$json) { - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - } else { - $responseBodyString = json_encode($json); - } - - if(is_array($expected)) { - $dynamic_fields = ['timeUsed', 'decay_date', 'decay', 'gdtSum']; - // copy timeUsed because this value will be variy always - foreach($dynamic_fields as $field) { - if(isset($expected[$field]) && isset($json->$field)) { - $expected[$field] = $json->$field; - } - } - // decay balance variy always - if(isset($expected['transactions'])) { - $dynamic_transaction_fields = ['decay_duration', 'balance', 'decay_end']; - foreach($expected['transactions'] as $i => $transaction) { - if(isset($transaction['type']) && $transaction['type'] == 'decay') { - foreach($dynamic_transaction_fields as $field) { - if(isset($transaction[$field])) { - $expected['transactions'][$i][$field] = $json->transactions[$i][$field]; - } - } - } - } - } - $expected = json_encode($expected); - } - - $this->assertEquals($expected, $responseBodyString); - } - private function getAndParseWithoutCompare($path) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was in 2xx - 3xx - $this->assertResponseSuccess(); - $view_body = $this->viewVariable('body'); - if($view_body) { - return (object)$view_body; - } - // Check that the response was a 200 - $this->assertResponseOk(); - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString, true); - $this->assertNotFalse($json); - - return $json; - } -} diff --git a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php b/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php deleted file mode 100644 index 35f439dd7..000000000 --- a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php +++ /dev/null @@ -1,75 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php b/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php deleted file mode 100644 index be6167155..000000000 --- a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php +++ /dev/null @@ -1,95 +0,0 @@ -GradidoNumberComponent = new GradidoNumberComponent($registry); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->GradidoNumberComponent); - - parent::tearDown(); - } - - /** - * Test parseInputNumberToCentNumber method - * - * @return void - */ - /* public function testParseInputNumberToCentNumber() - { - $this->markTestIncomplete('Not implemented yet.'); - }*/ - - public function test100() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100); - $this->assertEquals(1000000, $result); - } - - public function test1000() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(1000); - $this->assertEquals(10000000, $result); - } - - public function test100Comma() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100,12'); - $this->assertEquals(1001200, $result); - } - - public function test100Point() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100.12'); - $this->assertEquals(1001200, $result); - } - - public function test100Decimal() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100.12); - $this->assertEquals(1001200, $result); - } - - public function test1000Point() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000.12'); - $this->assertEquals(10001200, $result); - } - - public function test1000Comma() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000,12'); - $this->assertEquals(10001200, $result); - } -} diff --git a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php b/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php deleted file mode 100644 index c1ba84ee3..000000000 --- a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php +++ /dev/null @@ -1,72 +0,0 @@ -JsonRequestClientComponent = new JsonRequestClientComponent($registry); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->JsonRequestClientComponent); - - parent::tearDown(); - } - - /** - * Test sendTransaction method - * - * @return void - */ - public function testSendTransaction() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test is_base64 method - * - * @return void - */ - public function testIsBase64Valid() - { - $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4+zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE'); - - $this->assertEquals($result, true); - } - - public function testIsBase64Invalid() - { - $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4-zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE'); - - $this->assertEquals($result, false); - } -} diff --git a/community_server/tests/TestCase/Controller/DashboardControllerTest.php b/community_server/tests/TestCase/Controller/DashboardControllerTest.php deleted file mode 100644 index cddf0b7ef..000000000 --- a/community_server/tests/TestCase/Controller/DashboardControllerTest.php +++ /dev/null @@ -1,45 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php b/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php deleted file mode 100644 index f990b3e57..000000000 --- a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php +++ /dev/null @@ -1,176 +0,0 @@ - 'CmYKZAog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfISQDnatUMvitiiP0-sY93JStYPhPKKPU4Vosv_EGrh77BVs48xhPgPj2QHWC3oyuuMh6nN8YNjBQZx20rKvdQ4uwMSRwoMQUdFIE1haSAyMDIxEgYI_c3ChQY6LwolCiD39KSaSsEDefi53ctzHE2exJXm7dFgdfUmcs0l4xefDxDQDxoGCPqbtIQG', - 'validCreation900' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQCaZHmvmvJOt336E3qst3rn1pptdAR5ZPzePaUT10x0_Yky8FnEiQtMGNy1yT94QErzwQudJZjJwDY2uyK4cTgkSOxIGCKb1vYUGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgNHKCBoGCIDMuf8F', - 'validCreation1200' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQF8jptIrosEyVmCf3WEIGVOK0NR8YCcO0j-s8v2yUyR5BKus0ciT6B7IA5LDtn7eQX6zHjg1v5WlsTiZuOpuNgwSRAoHVG8gbXVjaBIGCL3Jv4UGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgOy4CxoGCOG5toQG', - 'notBase64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3', - 'validTransfer' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQA0ZVQ9T1qBabzmgDO1NAWNy2J6mlv0YjMP99CiV7bSR0zemt5XoM-kTviR1aTqKggzpSYSyTN5T6gIx2xa-hgkSYwoLTXkgQmlydGhkYXkSBgie0L-FBjJMCkoKJgog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8QgIl6EiDjNp3jYjzoRG0EJMQBPnodcaJnGuPXvx55jr8GZdFF8g', - 'errornusTransfer' => 'ClxGcm9oZXMgTmV1ZXMgSmFociB1bmQgREFOS0UsIGRhc3MgZHUgZGljaCBzbyBlaW5zZXR6dCBmw7xyIEdyYWRpZG8hIEhlcnpsaWNoZSBHcsO8w59lIFRlcmVzYRIGCPjjgvEFQlAKJgogUQwFYeVlGlfWDrkXNN7rHwejoCDJKt+YkYJfbJVyj3EQwIQ9EiYKIPXIRnUhVJ/zCs5+y/VaTBjTIoYizJNwS+JC//xsbQrHEMCEPQ==' - ]; - - /*public function setUp() { - parent::setUp(); - } -*/ - public function testWrongMethod() - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - $this->get('/JsonRequestHandler'); - $this->assertResponseOk(); - - $expected = json_encode(['state' => 'error', 'msg' => 'unknown method for get', 'details' => null]); - $this->assertEquals($expected, (string)$this->_response->getBody()); - } - - public function testInvalidJson() - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - $this->post('/JsonRequestHandler', '{This isn\'t valid json}'); - $this->assertResponseOk(); - - $expected = json_encode(['state' => 'error', 'msg' => 'parameter error']); - $this->assertEquals($expected, (string)$this->_response->getBody()); - } - - public function testNotSetTransaction() - { - $this->postAndParse( - ['method' => 'putTransaction'], - ['state' => 'error', 'msg' => 'parameter error'] - ); - } - public function testNotSetMethod() - { - $this->postAndParse( - ['transaction' => $this->transactions['validCreation']], - ['state' => 'error', 'msg' => 'parameter error'] - ); - } - - public function testUnknownMethod() - { - //$this->post('/TransactionJsonRequestHandler', ['method' => 'putTransaction', 'transaction' => 'CgpIYWxsbyBXZWx0EgYIyfSG7gVKLwonCiCboKikqwjZfes9xuqgthFH3/cHHaWchkUhWiGhQjB23xCg2pMBELWJ7ZYK']); - $this->postAndParse( - ['method' => 'foobar', 'transaction' => $this->transactions['validCreation']], - ['state' => 'error', 'msg' => 'unknown method for post', 'details' => 'foobar'] - ); - - } - - public function testInvalidEncodedTransaction() { - //"msg":"error parsing transaction","details":[{"Transaction":"base64 decode error"}] - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['notBase64']], - ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [ - ['Transaction' => 'invalid base64 string'], - ['base64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3'] - ]] - ); - } - - public function testInvalidTransaction() { - - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => base64_encode('Hallo Miau Welt')], - ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [ - ['Transaction' => 'Error occurred during parsing: Unexpected wire type.'] - ]] - ); - } - - public function testToLargeCreationSum() - { - - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation900']], - '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}' - ); - } - - public function testToLargeCreation() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation1200']], - '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}' - ); - } - - public function testValidTransfer() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validTransfer']], - ['state' => 'success'] - ); - } - - public function testValidCreation() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation']], - ['state' => 'success'] - ); - } - - private function postAndParse($params, $expected) - { - $this->enableCsrfToken(); - //$this->enableSecurityToken(); - - //$token = 'my-csrf-token'; - //$this->cookie('csrfToken', $token); - - $this->configRequest([ - 'headers' => ['Accept' => 'application/json']//, 'X-CSRF-Token' => $token] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->post('/JsonRequestHandler', json_encode($params)); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - if(is_array($expected)) { - $expected = json_encode($expected); - } - $this->assertEquals($expected, $responseBodyString); - } -} diff --git a/community_server/tests/TestCase/Controller/PagesControllerTest.php b/community_server/tests/TestCase/Controller/PagesControllerTest.php deleted file mode 100644 index a8fd65233..000000000 --- a/community_server/tests/TestCase/Controller/PagesControllerTest.php +++ /dev/null @@ -1,101 +0,0 @@ -get('/'); - $locations = $this->_response->getHeader('Location'); - $this->assertRegExp('%.*/account/$%', $locations[0]); - - $this->get('/'); - $locations = $this->_response->getHeader('Location'); - $this->assertRegExp('%.*/account/$%', $locations[0]); - } - - /** - * testDisplay method - * - * @return void - */ - public function testDisplay() - { - $this->get('/pages/home'); - $this->assertResponseOk(); - $this->assertResponseContains('CakePHP'); - $this->assertResponseContains(''); - } - - /** - * Test that missing template renders 404 page in production - * - * @return void - */ - public function testMissingTemplate() - { - Configure::write('debug', false); - $this->get('/pages/not_existing'); - - $this->assertResponseError(); - $this->assertResponseContains('Not Found'); - } - - /** - * Test that missing template in debug mode renders missing_template error page - * - * @return void - */ - public function testMissingTemplateInDebug() - { - Configure::write('debug', true); - $this->get('/pages/not_existing'); - - $this->assertResponseFailure(); - $this->assertResponseContains('Template file \u0022Pages\/not_existing.ctp\u0022 is missing.'); - $this->assertResponseContains('not_existing.ctp'); - } - - /** - * Test directory traversal protection - * - * @return void - */ - public function testDirectoryTraversalProtection() - { - $this->get('/pages/../Layout/ajax'); - $this->assertResponseCode(403); - $this->assertResponseContains('Forbidden'); - } -} diff --git a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php b/community_server/tests/TestCase/Controller/ProfilesControllerTest.php deleted file mode 100644 index d87558e55..000000000 --- a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php +++ /dev/null @@ -1,76 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/RolesControllerTest.php b/community_server/tests/TestCase/Controller/RolesControllerTest.php deleted file mode 100644 index 12b2868a2..000000000 --- a/community_server/tests/TestCase/Controller/RolesControllerTest.php +++ /dev/null @@ -1,75 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php b/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php deleted file mode 100644 index 9ef8d28e9..000000000 --- a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php +++ /dev/null @@ -1,179 +0,0 @@ -StateBalances = TableRegistry::getTableLocator()->get('StateBalances'); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test overview method - * - * @return void - */ - public function testOverview() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - - - /** - * Test overviewGdt method - * - * @return void - */ - public function testOverviewGdt() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test sortTransactions method - * - * @return void - */ - public function testSortTransactions() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - - private function getAndParse($path, $expected) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - if(is_array($expected)) { - // copy timeUsed because this value will be variy always - if(isset($expected['timeUsed']) && isset($json->timeUsed)) { - $expected['timeUsed'] = $json->timeUsed; - } - $expected = json_encode($expected); - } - - $this->assertEquals($expected, $responseBodyString); - } - private function getAndParseWithoutCompare($path) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - return $json; - } -} diff --git a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php b/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php deleted file mode 100644 index 452af54fc..000000000 --- a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php +++ /dev/null @@ -1,77 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php b/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php deleted file mode 100644 index 0c9e0a513..000000000 --- a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php +++ /dev/null @@ -1,78 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php b/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php deleted file mode 100644 index 74c0e4b1e..000000000 --- a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php +++ /dev/null @@ -1,97 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test create method - * - * @return void - */ - public function testCreate() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Behavior/empty b/community_server/tests/TestCase/Model/Behavior/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php b/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php deleted file mode 100644 index 8f145215c..000000000 --- a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php +++ /dev/null @@ -1,74 +0,0 @@ -exists('AddressTypes') ? [] : ['className' => AddressTypesTable::class]; - $this->AddressTypes = TableRegistry::getTableLocator()->get('AddressTypes', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->AddressTypes); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php deleted file mode 100644 index 09d7a35fb..000000000 --- a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php +++ /dev/null @@ -1,83 +0,0 @@ -exists('AdminErrors') ? [] : ['className' => AdminErrorsTable::class]; - $this->AdminErrors = TableRegistry::getTableLocator()->get('AdminErrors', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->AdminErrors); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php b/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php deleted file mode 100644 index 0d7e5fba2..000000000 --- a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php +++ /dev/null @@ -1,72 +0,0 @@ -exists('CommunityProfiles') ? [] : ['className' => CommunityProfilesTable::class]; - $this->CommunityProfiles = TableRegistry::getTableLocator()->get('CommunityProfiles', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->CommunityProfiles); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/RolesTableTest.php b/community_server/tests/TestCase/Model/Table/RolesTableTest.php deleted file mode 100644 index b40a0ca9b..000000000 --- a/community_server/tests/TestCase/Model/Table/RolesTableTest.php +++ /dev/null @@ -1,82 +0,0 @@ -exists('Roles') ? [] : ['className' => RolesTable::class]; - $this->Roles = TableRegistry::getTableLocator()->get('Roles', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->Roles); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php b/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php deleted file mode 100644 index 68049de34..000000000 --- a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php +++ /dev/null @@ -1,124 +0,0 @@ -exists('StateBalances') ? [] : ['className' => StateBalancesTable::class]; - $this->StateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateBalancesTable); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test sortTransactions method - * - * @return void - */ - public function testSortTransactions() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test updateLastStateBalanceOfMonth method - * - * @return void - */ - public function testUpdateLastStateBalanceOfMonth() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test chooseForMonthAndUser method - * - * @return void - */ - public function testChooseForMonthAndUser() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test updateBalanceWithTransaction method - * - * @return void - */ - public function testUpdateBalanceWithTransaction() - { - $this->markTestIncomplete('Not implemented yet.'); - } - -} diff --git a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php deleted file mode 100644 index 21cbe6128..000000000 --- a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php +++ /dev/null @@ -1,84 +0,0 @@ -exists('StateErrors') ? [] : ['className' => StateErrorsTable::class]; - $this->StateErrors = TableRegistry::getTableLocator()->get('StateErrors', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateErrors); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php b/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php deleted file mode 100644 index 173ad8e12..000000000 --- a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php +++ /dev/null @@ -1,85 +0,0 @@ -exists('StateUserTransactions') ? [] : ['className' => StateUserTransactionsTable::class]; - $this->StateUserTransactions = TableRegistry::getTableLocator()->get('StateUserTransactions', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateUserTransactions); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php b/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php deleted file mode 100644 index 49deb1166..000000000 --- a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php +++ /dev/null @@ -1,97 +0,0 @@ -exists('StateUsers') ? [] : ['className' => StateUsersTable::class]; - $this->StateUsersTable = TableRegistry::getTableLocator()->get('StateUsers', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateUsersTable); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test getReceiverProposal method - * - * @return void - */ - public function testGetReceiverProposal() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php b/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php deleted file mode 100644 index e53549a42..000000000 --- a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php +++ /dev/null @@ -1,41 +0,0 @@ -assertEquals(true, true); - } - - - - -} diff --git a/community_server/tests/TestCase/View/Helper/empty b/community_server/tests/TestCase/View/Helper/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/tests/bootstrap.php b/community_server/tests/bootstrap.php deleted file mode 100644 index 0ca191e4a..000000000 --- a/community_server/tests/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ -9Q7kcv6UAQ@H$MqV!6EkIEQ MPgg&ebxsLQ07X&@0{{R3 diff --git a/community_server/tests/data/verysmall.jpg b/community_server/tests/data/verysmall.jpg deleted file mode 100644 index 7c0373968..000000000 --- a/community_server/tests/data/verysmall.jpg +++ /dev/null @@ -1 +0,0 @@ -FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 00 48 00 00 FF DB 00 43 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF C2 00 0B 08 00 01 00 01 01 01 11 00 FF C4 00 14 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF DA 00 08 01 01 00 01 3F 10 \ No newline at end of file diff --git a/community_server/tests/testApi.sh b/community_server/tests/testApi.sh deleted file mode 100755 index 9476dc7da..000000000 --- a/community_server/tests/testApi.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -cd .. -sudo -u www-data ./vendor/bin/phpunit --testdox tests/TestCase/Controller/StateBalancesControllerTest -cd tests diff --git a/community_server/webroot/.htaccess b/community_server/webroot/.htaccess deleted file mode 100644 index f5f2d631c..000000000 --- a/community_server/webroot/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ - - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^ index.php [L] - diff --git a/community_server/webroot/css/fonts_local.css b/community_server/webroot/css/fonts_local.css deleted file mode 100644 index 99dac0484..000000000 --- a/community_server/webroot/css/fonts_local.css +++ /dev/null @@ -1,79 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 21.01.2021, 12:32:20 - Author : einhornimmond -*/ - -/* open-sans-300 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: url('../fonts/open-sans-v18-latin-300.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-300.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-300.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-regular - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url('../fonts/open-sans-v18-latin-regular.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-regular.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-regular.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-600 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 600; - src: url('../fonts/open-sans-v18-latin-600.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-600.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-600.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-600.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-700 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: url('../fonts/open-sans-v18-latin-700.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-700.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-700.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-800 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 800; - src: url('../fonts/open-sans-v18-latin-800.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-800.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-800.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-800.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-800.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-800.svg#OpenSans') format('svg'); /* Legacy iOS */ -} diff --git a/community_server/webroot/css/grd_styles.css b/community_server/webroot/css/grd_styles.css deleted file mode 100644 index e745ea55e..000000000 --- a/community_server/webroot/css/grd_styles.css +++ /dev/null @@ -1,1821 +0,0 @@ -/* ============================================================ - - Grid Layout Page - - Datei : layout.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -/*==================================== -= BREAK POINTS = -====================================*/ -/* https://scotch.io/courses/getting-started-with-less/responsive-and-media-queries */ -/* GRID */ -.layout { - display: grid; - grid-template-rows: [top] 8vh [line2] 86vh [footer1] 3vh [footer2] 5vh [end]; - grid-template-columns: [left1] auto [left2] 1fr [left3] 12fr [right3] 1fr [right2] auto [right1]; - grid-template-areas: "header header header header header" "left . center center ." "footer footer footer footer footer" "bottom bottom bottom bottom bottom"; - margin: 0; - padding: 0; -} -@media (max-width:1199px) { - .layout { - grid-template-areas: "header header header header header" "left . center center center" "footer footer footer footer footer" "bottom bottom bottom bottom bottom"; - } -} -@media (max-width:767px) { - .layout { - position: relative; - display: grid; - grid-template-rows: [top] 12vh [line2] 80vh [footer1] 3vh [footer2] 8vh [end]; - grid-template-columns: [left1] 100vw [right1]; - grid-template-areas: "header" "center" "footer" "bottom"; - margin: 0; - padding: 0; - } -} -.header-notify { - grid-area: header; - grid-column-start: right3; - grid-column-end: right2; -} -.header-user { - grid-area: header; - grid-column-start: right2; - grid-column-end: right1; -} -.sidebar1 { - grid-area: left; - grid-row-start: top; - grid-row-end: end; -} -@media (max-width:767px) { - .sidebar1 { - position: relative; - grid-area: header; - z-index: 2; - top: -300px; - right: 0px; - } - .header-user, - .header-notify { - grid-area: header; - } -} -.center-form-single, -.content { - grid-area: center; - grid-row-start: line2; - grid-row-end: footer1; -} -.footer { - grid-area: footer; - grid-row-start: footer1; - grid-row-end: footer2; -} -.nav-bottom { - grid-area: bottom; - grid-row-start: footer2; - grid-row-end: end; -} -/* ============================================================ - - Generic Color Definitions - - Vars and some generic CSS rules. - - Datei : colors.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -/* MAIN */ -/* MENU */ -/* CONTENT */ -/* CONTENT-NAV */ -/* CONTENT-ITEMS */ -/* CONTENT-TABLE */ -/* FORMS */ -/* VARIOUS INDIVIDUAL */ -/* XXX TODO XXX */ -/*rgba(0, 0, 0, 0.5) ??? */ -/* NOTIFICATION */ -/* https://www.w3schools.com/colors/colors_shades.asp */ -.info-color { - color: grey; -} -.success-color { - color: #047006; -} -.alert-color { - color: #ff5f66; -} -.orange-color { - color: #ffa600; -} -.blue-color { - color: blue; -} -.unobtrusive { - color: grey; -} -.info-icon { - color: grey; - background-color: #80808026; -} -.success-icon { - color: #047006; - background-color: rgba(4, 112, 6, 0.2); -} -.alert-icon { - color: #ff5f66; - background-color: #ff5f662e; -} -/* ======================= - Gradido - =======================*/ -/* Gradido */ -.grd-negative-currency { - color: red; -} -/* Gradido Transform */ -.gdt-text-color { - color: #a27824; -} -.grd_clickable { - cursor: pointer; -} -/* ============================================================ - - Typography Definitions - - Datei : typography.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -.small-font { - font-size: 0.75em; - font-weight: 300; -} -/* ============================================================ - - Basic screen styles. - - Datei : screen.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@font-face { - font-family: 'Material Icons Outlined'; - font-style: normal; - font-weight: 400; - src: url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.eot); - /* For IE6-8 */ - src: local('Material Icons Outlined'), local('Material-Icons-Outlined'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2) format('woff2'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff) format('woff'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf) format('truetype'); -} -.material-icons-outlined { - font-family: 'Material Icons Outlined'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - vertical-align: middle; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} -@media screen { - /* ======================= - Basis - =======================*/ - html, - body { - font-family: 'Roboto', sans-serif; - font-size: 100%; - line-height: 27px; - color: #212529; - background-color: #f9fafb; - margin: 0; - overflow: auto; - } - div { - border-collapse: collapse; - box-sizing: border-box; - } - /* ======================= - Kopfbereich - =======================*/ - .header { - display: flex; - justify-content: space-between; - align-items: center; - flex: flex-grow; - width: 100%; - padding: 1em; - background-color: #fff; - } - /* ======================= - Fußbereich - =======================*/ - .footer { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - font-size: 70%; - font-style: italic; - line-height: 0; - } - .bottomright { - position: fixed; - bottom: 0; - right: 0; - color: grey; - font-size: smaller; - line-height: 0.125em; - padding-right: 0.25em; - text-align: right; - } - .bottomleft { - position: fixed; - bottom: 0; - left: 0; - color: grey; - font-size: smaller; - line-height: 1.125em; - padding-left: 0.25em; - } - /* ======================= - Sonstige - =======================*/ - /* Hyperlinks */ - a { - text-decoration: none; - color: inherit; - } - main a { - text-decoration: underline; - font-style: italic; - } - a:link, - a:visited { - color: inherit; - } - a:hover, - a:focus { - text-decoration: underline; - } - a:active { - background-color: #fff; - color: #000; - } - a:focus, - a:active { - outline: none; - } - a.grd_invisible_link { - color: #000; - text-decoration: none; - } - a.grd_invisible_link:hover { - color: grey; - } - [type=button]:not(:disabled), - [type=reset]:not(:disabled), - [type=submit]:not(:disabled), - button:not(:disabled) { - cursor: pointer; - } -} -@media screen and (max-width:767px) { - .bottomright { - font-size: 0.7em; - font-weight: 300; - line-height: 1em; - width: 100px; - } - .bottomright p { - margin-block-start: 0; - margin-block-end: 2px; - margin-inline-start: 0; - margin-inline-end: 0; - } -} -/* Ende @media screen */ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for flash messages. - - Datei : messages.css - Datum : 30.10.2019, 16:04:16 - Autor : einhornimmond, Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .flash-messages { - width: 30%; - position: absolute; - top: 57px; - left: 241px; - text-align: center; - } - .flash-messages .alert { - margin: 0; - padding: 1em; - vertical-align: middle; - border-radius: 5px; - } - .flash-messages .alert-success { - color: #1A1A1A !important; - background-color: #06c50a; - border: 1px solid #04700675; - } - .flash-messages .alert-error { - color: #fff !important; - background-color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - } - .flash-messages .message { - padding: 5px; - } - .flash-messages .success { - color: #047006; - } - .flash-messages .error { - color: red; - } - .flash-messages.hidden { - display: none; - } - /* messages, update flash */ - .grd-error { - color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - padding: 5px; - } - .grd-info { - border: 1px dotted gray; - padding: 5px; - } - .grd-success { - padding: 5px; - color: #047006; - } -} -@media screen and (max-width:767px) { - .flash-messages { - width: 90%; - top: 0; - left: 0; - text-align: center; - } -} -/* ============================================================ - - User Menu - - Datei : user.less - Datum : 2020-07-03 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-user { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-end; - align-content: flex-end; - position: relative; - width: 100%; - min-width: 12em; - height: 40px; - background-color: #fff; - border: 1px solid #f2f4f5; - border-radius: 0 0 0 18px; - } - .user-menu-container { - display: flex; - justify-content: flex-end; - align-items: center; - font-size: 0.8em; - font-weight: 300; - padding: 0.25em 0.5em; - z-index: 20; - height: 40px; - } - .user-name, - .user-icon { - display: inline-block; - vertical-align: middle; - cursor: pointer; - } - .user-name { - padding-right: 0.25em; - } - .nav-vertical.user-menu { - display: none; - background-color: #fff; - border-left: 1px solid #f2f4f5; - border-bottom: 1px solid #f2f4f5; - border-radius: 0 0 16px 16px; - z-index: 15; - font-size: 0.9em; - margin-top: 0 !important; - position: fixed; - top: 39px; - right: 0; - } - .nav-vertical.user-menu.visible { - display: inherit; - } - .nav-vertical.user-menu > ul { - padding: 2em; - padding-top: 0.5em; - padding-bottom: 1em; - margin-block-end: 0; - margin-block-start: 0; - } - .nav-vertical.user-menu li { - padding: 0.0125em; - } - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - .material-icons-outlined.user-info { - color: grey; - } - .material-icons-outlined.user-info.success { - color: #047006; - } -} -@media screen and (max-width:767px) { - .header-user { - position: relative; - min-width: 3em; - background-color: transparent; - justify-content: center; - height: 100%; - margin-top: -13px; - margin-left: -16px; - color: #047006; - } - .user-menu-container { - margin: 0; - padding: 0; - } - .user-name { - display: none; - } - .nav-vertical { - margin-top: 55px; - } - .nav-vertical.user-menu { - position: fixed; - top: 1px; - right: 0; - margin-top: 0; - } - .nav-vertical.user-menu > ul { - padding: 1em 1em; - padding-top: 3em; - } -} -/* ============================================================ - - Navigation - - Datei : navi.less - Datum : 2020-04-30 - Autor : einhornimmond / Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .logo { - display: none; - vertical-align: middle; - height: 30px; - padding: 0.5em; - } - .logo.big.visible, - .logo.small.visible { - display: block !important; - } - .logo.mobile { - display: none; - } - .logo.small.visible { - padding-left: 41px; - } - /* - SIDEBARS - */ - .sidebar1 { - background-color: #fff; - font-size: 0.8em; - font-weight: 500; - line-height: 2.5em; - padding: 0; - border-right: 1px solid #f2f4f5; - } - .sidebar2 { - padding: 1em; - background-color: #f9fafb; - } - .sidebar1-header { - font-size: 0.75em; - font-style: italic; - color: grey; - } - /* set general icons size here! */ - .nav-icon { - font-size: 18px !important; - color: #4F4F4F; - vertical-align: middle; - padding-right: 1em; - } - /* important! order matters! we need to overwrite the main button's size here */ - .nav-main-button { - font-size: 32px !important; - color: grey; - margin: 0.3em; - } - /* Hide mobile menu button! */ - .nav-main-button.mobile { - display: none; - } - .nav-menu.nav-menu-maximized { - width: 280px; - height: 100%; - } - .nav-menu.nav-menu-minimized { - width: 120px; - height: 100%; - } - .nav-menu-maximized { - -webkit-animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized { - -webkit-animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized .link-title { - display: none; - } - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 72px; - } - /** - * ---------------------------------------- - * animations slide-in / slide-out - * ---------------------------------------- - */ - /* slide-in */ - @-webkit-keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - } - @keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - } - /* slide-out */ - @-webkit-keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - } - @keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - } - /* - NAVI MOBILE - */ - /* END navi mobile base */ - .selected { - color: #047006; - } - .link-title { - vertical-align: middle; - line-height: normal; - background-color: transparent; - } - .nav-horizontal { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: flex-end; - list-style-type: none; - gap: 5%; - padding: 1em; - } - .footer .nav-horizontal { - gap: 0; - padding: 0 1em; - padding-inline-start: 0 !important; - } - .nav-top-smaller { - margin: 0; - padding: 0; - } - .nav-smaller { - justify-content: left; - align-items: flex-start; - gap: 0; - padding: 0; - } - .nav-smaller li { - padding: 0 !important; - padding: 0.2em 0.5em !important; - border: 1px solid #047006; - margin: 0.1em 0.3em; - border-radius: 12px; - } - .nav-smaller .heading { - font-weight: bold; - } - .nav-vertical { - margin-top: -2em; - } - .nav-horizontal li { - padding: 0.5em; - } - .nav-vertical > ul { - display: flex; - flex-direction: column; - list-style-type: none; - gap: 5%; - padding: 1em; - } - .nav-vertical li { - padding: 0.5em; - } - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - .nav-bottom { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - list-style-type: none; - margin-bottom: 20px; - } - .nav-bottom p { - font-size: 0.9em; - color: grey; - margin: 0; - } - nav.grd-left-bar { - position: fixed; - top: 80.5px; - } - nav .grd-nav-bn { - width: 100px; - } - nav ul { - margin-top: 0; - padding-left: 0; - } - /* buttons */ - .grd-nav-bn:hover, - .grd-active { - background-color: lightgray; - border-color: #000; - } - .grd-nav-bn { - padding: 10px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: grey; - } - .grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: 35px; - } - a.grd-nav-bn, - a.grd-nav-bn:visited { - color: #000; - text-decoration: none; - } -} -@media screen and (max-width:767px) { - .logo.big, - .logo.small { - display: none; - } - .logo.visible { - padding: 0 !important; - } - .logo, - .logo.mobile, - .logo.mobile.visible { - display: block; - position: fixed; - top: 12px; - left: 12px; - } - .logo.big, - .logo.big.visible { - display: none !important; - } - .nav-main-button { - display: none; - } - .nav-main-button.mobile { - display: block; - position: fixed; - top: 2px; - right: 46px; - z-index: 3; - } - .nav-menu.nav-menu-minimized, - .nav-menu.nav-menu-maximized { - width: 280px; - height: 300px; - } - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 0; - } - .nav-menu-maximized { - -webkit-animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized { - -webkit-animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - @-webkit-keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - 100% { - -webkit-transform: translateY(300px); - transform: translateX(300px); - opacity: 1; - } - } - @keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - 100% { - -webkit-transform: translateY(300px); - transform: translateY(300px); - opacity: 1; - } - } - @-webkit-keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - } - @keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - } -} -@media screen and (max-width:767px) { - .nav-vertical { - margin-top: 55px; - } -} -@media screen and (max-width:767px) { - .nav-bottom p { - font-size: 0.8em; - margin-top: -10px; - } -} -/* ============================================================ - - Notification - - Datei : notification.css - Datum : 2020-06-10 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-notify { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; - z-index: 10; - } - .notify { - display: block; - padding: 0.5rem 0.3rem; - color: #525c5d; - animation: blinkingNotifySymbol 1.2s infinite; - } - .notify-alert { - color: #ff5f66; - animation: blinkingAlertSymbol 1.2s infinite; - } - @keyframes blinkingNotifySymbol { - 0% { - color: #525c5d; - } - 49% { - color: #525c5d; - } - 60% { - color: #525c5d82; - } - 99% { - color: #525c5d82; - } - 100% { - color: #525c5d; - } - } - @keyframes blinkingAlertSymbol { - 0% { - color: #ff5f66; - } - 49% { - color: #ff5f66; - } - 60% { - color: #ff5f669e; - } - 99% { - color: #ff5f669e; - } - 100% { - color: #ff5f66; - } - } - /* - .notification-indicator-primary { - background: #047006; - } - - .notification-indicator-warning { - background: #f0825f - } - .notification-indicator-secondary { - background: grey - } - - .notification-indicator-secondary:before { - content: ""; - background: rgba(128, 128, 128, .5) - } - - .notification-indicator-success { - background: #00e093 - } - - .notification-indicator-success:before { - content: ""; - background: rgba(0, 224, 147, .5) - } - - .notification-indicator-info { - background: #6c61f6 - } - - .notification-indicator-info:before { - content: ""; - background: rgba(108, 97, 246, .5) - } - - - .notification-indicator-danger { - background: #ff5f66 - } - - .notification-indicator-danger:before { - content: ""; - background: rgba(255, 95, 102, .5) - } - - .notification-indicator-light { - background: #dfdfdf - } - - .notification-indicator-light:before { - content: ""; - background: rgba(223, 223, 223, .5) - } - - .notification-indicator-dark { - background: #74767b - } - - .notification-indicator-dark:before { - content: ""; - background: rgba(116, 118, 123, .5) - } - - .notification-indicator-white { - background: #fff - } - - .notification-indicator-white:before { - content: ""; - background: rgba(255, 255, 255, .5) - } - */ -} -@media screen and (max-width:767px) { - .header-notify { - justify-content: flex-end; - margin-right: 93px; - margin-top: 8px; - } -} -/* ============================================================ - - Screen styles for the regular center part. - - Datei : center.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - CONTENT - =========*/ - .content-default { - display: flex; - justify-content: center; - max-width: 90%; - } - .content { - display: flex; - justify-content: flex-start; - flex-direction: column; - overflow: auto; - width: 100%; - background-color: #f9fafb; - line-height: 1.75em; - letter-spacing: 0.03rem; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1rem; - padding-right: 5em; - } - /* Center Navigation Top */ - .nav-content { - position: relative; - color: #565656; - margin: 0 0.25em; - } - .nav-content-list { - display: flex; - list-style-type: none; - padding: 0; - margin-left: 0.25em; - } - .nav-content-separator { - margin: 0 1em; - } - /* Center Content Container */ - .content-container { - background-color: #fff; - color: #212529; - border-radius: 0.5em; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2); - border: 1px solid rgba(238, 238, 238, 0.75); - margin: 1em 0.25em; - } - /* Block Container Above Main */ - .block-container { - width: 100%; - display: flex; - } - /* Top Info Above Main */ - .info-container { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 70%; - padding: 1em 25px; - } - /* Main Container */ - .main-container { - width: 100%; - } - .default-container { - width: 90%; - margin: auto; - padding: 1em; - } - /* Content Block */ - .content-block { - width: 170px; - padding: 20px 25px 20px; - border: 1px dashed grey; - border-radius: 16px; - margin: 1em; - display: flex; - flex-direction: column; - justify-content: center; - justify-items: center; - align-items: center; - } - .block-img { - width: 40px; - height: 40px; - line-height: 20px; - font-size: 24px; - padding: 8px; - border-radius: 20px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - } - /* Generic Content */ - .content-region h3 { - color: #21252969; - } - .content-region { - border-bottom: 1px dashed #F5F5F5; - padding: 0 25px; - padding-bottom: 2em; - margin: 1em 0.25em; - } - .content-collection { - display: flex; - } - .content-item { - margin: 0.5em 0; - margin-right: 5em; - width: 220px; - padding: 1em 2em; - } - .action-button { - background: #f9fafb; - border-left: 3px solid #047006; - } - .info-item { - border-left: 2px solid grey; - } - .inline-header { - display: inline; - } - .show-profile-img { - display: block; - height: 100px; - vertical-align: middle; - border-radius: 10px; - border: 2px dotted #80808026; - } - /* OTHER */ - .info-item i, - .info-item-link, - .action-button i, - .action-button-link { - vertical-align: middle; - } -} -@media screen and (max-width:767px) { - .content { - padding-right: 0; - } -} -@media screen and (max-width:767px) { - .nav-content-list { - display: flex; - font-size: small; - margin-bottom: 0; - justify-content: center; - } -} -@media screen and (max-width:1199px) { - .info-container { - flex-direction: column; - max-width: 90%; - line-height: 0.25em; - } -} -@media screen and (max-width:767px) { - .main-container { - max-width: 97%; - } -} -@media screen and (max-width:767px) { - .content-region { - padding-left: 5px; - } - .content-collection { - flex-direction: column; - align-items: center; - } - .content-item { - margin: 0.5em 0; - margin-right: 0; - width: 160px; - padding: 1em 2em; - } -} -/* Ende @media screen */ -/* ============================================================ - - Screen styles for the simple center form. (login etc) - - Datei : center-form-single.css - Datum : 2020-07-10 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .center-form-single { - width: 50%; - margin: auto; - } - .center-form-header { - margin-bottom: 50px; - } - .center-logo { - display: block; - margin: 0 auto; - width: 280px; - } - .center-logo img { - width: 100%; - vertical-align: middle; - border-style: none; - } - .center-form-container { - display: flex; - flex-direction: column; - padding: 2em 8em; - background-color: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, 0.75); - } - .center-form-title h1 { - margin-block-start: 0; - } - .center-form-selectors { - display: flex; - justify-content: flex-end; - align-items: center; - height: 38px; - padding: 5px 0; - margin-bottom: 2em; - } - .center-form-form, - .center-form-form form { - display: flex; - flex-direction: column; - } - .center-form-form .form-label { - text-align: left; - } - .center-form-form .form-control { - width: 100%; - margin: auto; - box-sizing: border-box; - margin-bottom: 0.5em; - } - .center-form-submit { - width: 100%; - margin: 1em 0; - } - .reset-pwd-link, - .signup-link { - padding: 0 20px; - } - .reset-pwd-link a, - .signup-link a { - color: #047006; - } - .reset-pwd-link p, - .signup-link p { - display: inline-block; - margin-block-start: 0; - margin-block-end: 0; - } - .center-bottom { - color: grey; - text-align: center; - padding-top: 30px; - } - .flag-btn { - text-align: center; - vertical-align: middle; - padding: 3px 11px; - } - .flag { - display: block; - } - .flag-germany { - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - width: 40px; - height: 10px; - } - .flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - } - .group { - padding-left: 10px; - padding-top: 10px; - padding-bottom: 10px; - } - .group-is-invalid { - background-color: rgba(240, 130, 95, 0.2); - border-color: #dc3545; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(0.375em + 0.1875rem); - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); - } - .group-is-invalid .radio label .input-frame::before { - border-color: red; - } -} -@media screen and (max-width:767px) { - .center-form-header { - margin-bottom: 30px; - margin-top: -50px; - } - .center-form-single { - width: 97%; - margin: auto; - } - .center-form-container { - padding: 1em 0.5em; - } -} -/* Ende @media screen */ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for plain facts. - - Datei : facts.css - Datum : 08.07.2020 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .fact-list { - display: flex; - flex-direction: column; - list-style-type: none; - width: 100%; - padding-inline-start: 0; - font-weight: 300; - } - .fact { - display: inline-block; - padding-left: 1em; - } - .label { - width: 150px; - text-align: right; - font-weight: bold; - } -} -@media screen and (max-width:767px) { - .fact-list { - margin-block-start: 0; - margin-block-end: 0; - } - li.fact { - display: flex; - flex-direction: column; - } - .fact { - padding-left: 0.5em; - } - .label { - width: 250px; - text-align: left; - font-size: 0.9em; - font-weight: normal; - } -} -/* ============================================================ - - Screen styles for lists. - - Datei : list.css - Datum : 2020-06-09 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - LISTS - =========*/ - /* List Content */ - .content-list { - width: 100%; - } - .content-list-title { - font-size: 1rem; - margin: 0; - padding: 20px 25px; - color: #313131; - } - .content-list-table { - display: flex; - flex-direction: column; - width: 100%; - overflow: auto; - font-size: 16px; - color: #212529; - } - .row { - display: flex; - width: 100%; - border-top: 1px solid #f2f4f9; - -webkit-transition-duration: 0.5s; - transition-duration: 0.5s; - } - .row:hover { - background-color: #f6f7f9; - } - .cell { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 1em 1.5em; - } - .cell-dense { - padding: 0.1em 0.5em; - } - .centered { - justify-content: center; - } - .c0 { - flex-grow: 5; - min-width: 20%; - } - .c1 { - min-width: 40px; - flex: 0 0 40px; - } - .c2 { - min-width: 80px; - flex: 0 0 80px; - } - .c3 { - min-width: 160px; - flex: 0 0 160px; - } - .c4 { - min-width: 240px; - flex: 0 0 240px; - } - .c5 { - min-width: 320px; - flex: 0 0 320px; - } - .c6 { - min-width: 400px; - flex: 0 0 400px; - } - .header-cell { - border-top: 1px solid #f2f4f9; - background-color: #fafafa; - color: #101010; - } - .content-list-table img, - .content-list-table i { - vertical-align: middle; - } - .content-list-table > span { - font-size: 0.8em; - padding: 0.5em 2em; - vertical-align: middle; - } - /* Individual Tables XXX rm!! */ - .error-list { - grid-template-columns: 2fr 2fr 5fr 1fr; - } - .transactions { - grid-template-columns: 1fr 4fr 2fr 2fr; - } - .profile-img { - width: 30px; - height: 30px; - border-radius: 6px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - margin-right: 40px; - } - .tx-email { - cursor: pointer; - display: block; - color: #101010; - font-weight: 400; - } - .small { - font-size: 80%; - font-weight: 400; - } - /*, - .cell-icon .material-icons-outlined */ - .cell-icon { - /*noch ungeklärt - icon ist nicht aligned */ - /*font-size: 1.25em;*/ - vertical-align: middle; - } - /* ===================================== - FORM TOP CONTENT (checkTransaction) - =====================================*/ - .form-content { - padding: 35px; - padding-top: 20px; - max-width: 80%; - margin: auto; - } - .content-table { - border: 1px solid #f2f4f9; - border-top: none; - margin-bottom: 1.5rem; - } - .content-row { - display: flex; - justify-content: space-between; - font-weight: 400; - border-top: 1px solid #f2f4f9; - } - .content-row-header { - font-weight: 500; - color: #101010; - } - .content-row-bg { - background-color: #f0f2f5; - } - .content-cell { - display: block; - border-collapse: collapse; - padding: 10px 15px; - } - .form-button .material-icons-outlined { - font-size: 1.25em; - } -} -@media screen and (max-width:767px) { - .row { - flex-direction: column; - } -} -@media screen and (max-width:767px) { - .cell { - padding: 0.25em 1.5em; - } - .c1 { - flex-basis: auto; - } - .c2 { - flex-basis: auto; - } - .c3 { - flex-basis: auto; - } - .c4 { - flex-basis: auto; - } - .c5 { - flex-basis: auto; - } - .c6 { - flex-basis: auto; - } -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 23.11.2020, 14:04:28 - Author : einhornimmond -*/ -/* Style the tab */ -.tab { - overflow: hidden; - border: 1px solid #ccc; - background-color: #f1f1f1; -} -/* Style the buttons that are used to open the tab content */ -.tab button { - background-color: inherit; - float: left; - border: none; - outline: none; - cursor: pointer; - padding: 14px 16px; - transition: 0.3s; -} -/* Change background color of buttons on hover */ -.tab button:hover { - background-color: #ddd; -} -/* Create an active/current tablink class */ -.tab button.active { - background-color: #ccc; -} -/* Style the tab content */ -.tabcontent { - display: none; - padding: 6px 12px; - border: 1px solid #ccc; - border-top: none; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for forms. - - Datei : form.css - Datum : 2020-06-07 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - FORMS - =========*/ - /* Form Content */ - .action-form { - width: 100%; - } - .form-header { - border-left: 3px solid #047006; - background: #f9fafb; - padding: 15px 20px; - margin: 0; - margin-bottom: 15px; - border-radius: 0 6px 0 0; - } - .form-label { - grid-column: 0.5; - font-weight: 400; - text-align: right; - padding-right: 0.5em; - } - .form-control { - grid-column: 0.66666667; - padding: 0.4em 0.75em; - padding-left: 20px; - padding-right: 20px; - margin: 0; - margin-right: 0.5em; - color: rgba(16, 16, 16, 0.8); - display: block; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: 0.25rem; - -webkit-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - } - .form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); - } - textarea { - resize: vertical; - } - .badge { - display: inline-block; - padding: 0.45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - } - .badge-warning { - color: #fff; - background-color: #00e093; - } - .badge-error { - color: #fff; - background-color: #ff5f66; - } - .form-full-width { - grid-column-start: 1; - grid-column-end: 3; - display: flex; - flex-direction: column; - } - .form-button { - cursor: pointer; - font: 600 13.3333px Arial; - font-size: 0.875rem; - line-height: 1.5; - text-align: center; - vertical-align: middle; - color: #fff; - background-color: #047006; - border-color: #047006; - border: 1px solid transparent; - border-radius: 0.2rem; - height: 35px; - max-height: 35px; - padding: 4px 15px; - margin-right: 0.5em; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - } - .form-button:hover { - background-color: #034b04; - border-color: #023f03; - } - .button-cancel { - color: #fff !important; - background-color: #f0825f; - border-color: #f0825f; - } - .button-cancel:hover { - background-color: #ec5e30; - border-color: #eb5425; - } - .link-button { - display: inline-block; - background: #f9fafb; - color: #fff; - height: 17px; - padding: 1em 2em; - line-height: 1em; - border-radius: 6px; - text-align: center; - vertical-align: middle; - } - .action-link { - color: #047006 !important; - } - .action-link-button { - background-color: #047006 !important; - color: #fff !important; - margin-top: 1em; - padding: 0.5em 1em; - } - .edit-profile-img { - width: 100px; - } - .note-smaller { - font-size: smaller; - } - .form-row, - .grid-row { - display: flex; - justify-content: flex-start; - align-items: center; - align-content: center; - width: 100%; - -webkit-transition-duration: 0.5s; - transition-duration: 0.5s; - } - .justify-end { - justify-content: flex-end; - } - .form-row { - border-top: 1px solid #f2f4f9; - } - .form-row:hover { - background-color: #f6f7f9; - } - /* CENTER FORM SPECIFICS */ - .form-body form { - display: grid; - grid-template-columns: 220px 1fr; - margin: 36px 75px; - grid-gap: 1em; - } - .center-form { - width: 450px; - } - .center-form .form-control { - width: 90%; - } - .center-form fieldset { - margin-bottom: 1em; - } -} -@media screen and (max-width:767px) { - .grid-row { - flex-direction: column; - } -} -@media screen and (max-width:767px) { - .form-body form { - grid-template-columns: 1fr; - margin: 20px; - grid-gap: 0.25em; - } - .form-label { - text-align: left; - } -} diff --git a/community_server/webroot/css/loginServer/style.css b/community_server/webroot/css/loginServer/style.css deleted file mode 100644 index bf5f617a7..000000000 --- a/community_server/webroot/css/loginServer/style.css +++ /dev/null @@ -1,14488 +0,0 @@ -.bg-inverse-primary { - background: rgba(4, 112, 6, .2) -} - -.bg-inverse-secondary { - background: rgba(128, 128, 128, .2) -} - -.bg-inverse-success { - background: rgba(0, 224, 147, .2) -} - -.bg-inverse-info { - background: rgba(108, 97, 246, .2) -} - -.bg-inverse-warning { - background: rgba(240, 130, 95, .2) -} - -.bg-inverse-danger { - background: rgba(255, 95, 102, .2) -} - -.bg-inverse-light { - background: rgba(223, 223, 223, .2) -} - -.bg-inverse-dark { - background: rgba(116, 118, 123, .2) -} - -.bg-inverse-white { - background: rgba(255, 255, 255, .2) -} - -.bg-inverse-orange { - background: rgba(255, 166, 0, .2) -} - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -@keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn -} - -@keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@-webkit-keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -body, -html { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 400; - font-size: 14px -} - -@media (min-width:768px) and (max-width:991px) { - body, - html { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - body, - html { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - body, - html { - font-size: 14px - } - -} - -h1, -h2, -h3, -h4, -h5, -h6, -label { - font-family: Roboto, sans-serif; - font-weight: 500 -} - -label, -p { - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem -} - -a { - font-family: Roboto, sans-serif; - font-weight: 400 -} - -a:hover { - text-decoration: none -} - -pre { - font-size: 15px -} - -@media (min-width:768px) and (max-width:991px) { - pre { - font-size: calc(15px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - pre { - font-size: calc(16px + 0 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - pre { - font-size: 16px - } - -} - -.checkbox label, -.radio label, -label { - font-family: Roboto, sans-serif; - font-weight: 400 -} - -b { - font-weight: 700 -} - -small { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400; - display: inline-block; - line-height: 1.4 -} - -@media (min-width:768px) and (max-width:991px) { - small { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - small { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - small { - font-size: 13px - } - -} - -h1 { - font-size: 20px -} - -@media (min-width:768px) and (max-width:991px) { - h1 { - font-size: calc(20px + 4 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h1 { - font-size: calc(24px + 8 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h1 { - font-size: 32px - } - -} - -h2 { - font-size: 19px -} - -@media (min-width:768px) and (max-width:991px) { - h2 { - font-size: calc(19px + 3 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h2 { - font-size: calc(22px + 7 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h2 { - font-size: 29px - } - -} - -h3 { - font-size: 18px -} - -@media (min-width:768px) and (max-width:991px) { - h3 { - font-size: calc(18px + 3 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h3 { - font-size: calc(21px + 5 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h3 { - font-size: 26px - } - -} - -h4 { - font-size: 17px -} - -@media (min-width:768px) and (max-width:991px) { - h4 { - font-size: calc(17px + 2 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h4 { - font-size: calc(19px + 4 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h4 { - font-size: 23px - } - -} - -h5 { - font-size: 17px -} - -@media (min-width:768px) and (max-width:991px) { - h5 { - font-size: calc(17px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h5 { - font-size: calc(18px + 2 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h5 { - font-size: 20px - } - -} - -h6 { - font-size: 16px -} - -@media (min-width:768px) and (max-width:991px) { - h6 { - font-size: calc(16px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h6 { - font-size: calc(17px + 1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h6 { - font-size: 18px - } - -} - -.display-1 { - font-size: 26px -} - -@media (min-width:768px) and (max-width:991px) { - .display-1 { - font-size: calc(26px + 7 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-1 { - font-size: calc(33px + 25 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-1 { - font-size: 58px - } - -} - -.display-2 { - font-size: 24px -} - -@media (min-width:768px) and (max-width:991px) { - .display-2 { - font-size: calc(24px + 7 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-2 { - font-size: calc(31px + 21 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-2 { - font-size: 52px - } - -} - -.display-3 { - font-size: 23px -} - -@media (min-width:768px) and (max-width:991px) { - .display-3 { - font-size: calc(23px + 6 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-3 { - font-size: calc(29px + 17 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-3 { - font-size: 46px - } - -} - -.display-4 { - font-size: 22px -} - -@media (min-width:768px) and (max-width:991px) { - .display-4 { - font-size: calc(22px + 5 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-4 { - font-size: calc(27px + 14 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-4 { - font-size: 41px - } - -} - -.display-5 { - font-size: 21px -} - -@media (min-width:768px) and (max-width:991px) { - .display-5 { - font-size: calc(21px + 4 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-5 { - font-size: calc(25px + 11 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-5 { - font-size: 36px - } - -} - -.form-control, -input[type=email], -input[type=name], -input[type=number], -input[type=password], -input[type=text], -textarea { - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 14px -} - -@media (min-width:768px) and (max-width:991px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: 13px - } - -} - -.form-control.placeholder, -input[type=email].placeholder, -input[type=name].placeholder, -input[type=number].placeholder, -input[type=password].placeholder, -input[type=text].placeholder, -textarea.placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control:-moz-placeholder, -input[type=email]:-moz-placeholder, -input[type=name]:-moz-placeholder, -input[type=number]:-moz-placeholder, -input[type=password]:-moz-placeholder, -input[type=text]:-moz-placeholder, -textarea:-moz-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control::-moz-placeholder, -input[type=email]::-moz-placeholder, -input[type=name]::-moz-placeholder, -input[type=number]::-moz-placeholder, -input[type=password]::-moz-placeholder, -input[type=text]::-moz-placeholder, -textarea::-moz-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control:-ms-input-placeholder, -input[type=email]:-ms-input-placeholder, -input[type=name]:-ms-input-placeholder, -input[type=number]:-ms-input-placeholder, -input[type=password]:-ms-input-placeholder, -input[type=text]:-ms-input-placeholder, -textarea:-ms-input-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control::-webkit-input-placeholder, -input[type=email]::-webkit-input-placeholder, -input[type=name]::-webkit-input-placeholder, -input[type=number]::-webkit-input-placeholder, -input[type=password]::-webkit-input-placeholder, -input[type=text]::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.grid-title { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -@media (min-width:768px) and (max-width:991px) { - .grid-title { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .grid-title { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .grid-title { - font-size: 14px - } - -} - -.bootstrap-tagsinput .tag { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -@media (min-width:768px) and (max-width:991px) { - .bootstrap-tagsinput .tag { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .bootstrap-tagsinput .tag { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .bootstrap-tagsinput .tag { - font-size: 13px - } - -} - -.font-weight-medium { - font-weight: 500 !important -} - -.font-weight-bold, -.font-weight-bolder, -.font-weight-medium { - letter-spacing: 1px -} - -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #047006; - --secondary: grey; - --success: #00e093; - --info: #6c61f6; - --warning: #f0825f; - --danger: #ff5f66; - --light: #dfdfdf; - --dark: #74767b; - --white: #fff; - --orange: #ffa600; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace -} - -*, -::after, -::before { - box-sizing: border-box -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0) -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.7; - color: #212529; - text-align: left; - background-color: #fff -} - -[tabindex="-1"]:focus { - outline: 0 !important -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: .5rem -} - -p { - margin-top: 0; - margin-bottom: 1rem -} - -abbr[data-original-title], -abbr[title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - text-decoration-skip-ink: none -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit -} - -dl, -ol, -ul { - margin-top: 0; - margin-bottom: 1rem -} - -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -dt { - font-weight: 700 -} - -dd { - margin-bottom: .5rem; - margin-left: 0 -} - -blockquote { - margin: 0 0 1rem -} - -b, -strong { - font-weight: bolder -} - -small { - font-size: 80% -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - -a { - color: #047006; - text-decoration: none; - background-color: transparent -} - -a:hover { - color: #012602; - text-decoration: underline -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus, -a:not([href]):not([tabindex]):hover { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus { - outline: 0 -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto -} - -figure { - margin: 0 0 1rem -} - -img { - vertical-align: middle; - border-style: none -} - -svg { - overflow: hidden; - vertical-align: middle -} - -table { - border-collapse: collapse -} - -caption { - padding-top: 10px 15px; - padding-bottom: 10px 15px; - color: #6c757d; - text-align: left; - caption-side: bottom -} - -th { - text-align: inherit -} - -label { - display: inline-block; - margin-bottom: .5rem -} - -button { - border-radius: 0 -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -button, -input { - overflow: visible -} - -button, -select { - text-transform: none -} - -select { - word-wrap: normal -} - -[type=button], -[type=reset], -[type=submit], -button { - -webkit-appearance: button -} - -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled), -button:not(:disabled) { - cursor: pointer -} - -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, -button::-moz-focus-inner { - padding: 0; - border-style: none -} - -input[type=checkbox], -input[type=radio] { - box-sizing: border-box; - padding: 0 -} - -input[type=date], -input[type=datetime-local], -input[type=month], -input[type=time] { - -webkit-appearance: listbox -} - -textarea { - overflow: auto; - resize: vertical -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal -} - -progress { - vertical-align: baseline -} - -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: none -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} - -output { - display: inline-block -} - -summary { - display: list-item; - cursor: pointer -} - -template { - display: none -} - -[hidden] { - display: none !important -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - margin-bottom: .5rem; - font-weight: 500; - line-height: 1.2 -} - -.h1, -h1 { - font-size: 2.5rem -} - -.h2, -h2 { - font-size: 2rem -} - -.h3, -h3 { - font-size: 1.75rem -} - -.h4, -h4 { - font-size: 1.5rem -} - -.h5, -h5 { - font-size: 1.25rem -} - -.h6, -h6 { - font-size: 1rem -} - -.lead { - font-size: 1.25rem; - font-weight: 300 -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2 -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2 -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.small, -small { - font-size: 80%; - font-weight: 400 -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.list-unstyled { - padding-left: 0; - list-style: none -} - -.list-inline { - padding-left: 0; - list-style: none -} - -.list-inline-item { - display: inline-block -} - -.list-inline-item:not(:last-child) { - margin-right: .5rem -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d -} - -.blockquote-footer::before { - content: "\2014\00A0" -} - -.img-fluid { - max-width: 100%; - height: auto -} - -.img-thumbnail { - padding: .25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: .25rem; - max-width: 100%; - height: auto -} - -.figure { - display: inline-block -} - -.figure-img { - margin-bottom: .5rem; - line-height: 1 -} - -.figure-caption { - font-size: 90%; - color: #6c757d -} - -code { - font-size: 90%; - color: #bd4147; - word-break: break-word -} - -a>code { - color: inherit -} - -kbd { - padding: .2rem .4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: .2rem -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700 -} - -pre { - display: block; - font-size: 90%; - color: #212529 -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll -} - -.container { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -@media (min-width:576px) { - .container { - max-width: 540px - } - -} - -@media (min-width:768px) { - .container { - max-width: 720px - } - -} - -@media (min-width:992px) { - .container { - max-width: 960px - } - -} - -@media (min-width:1200px) { - .container { - max-width: 1140px - } - -} - -.container-fluid { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -.row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -10px; - margin-left: -10px -} - -.no-gutters { - margin-right: 0; - margin-left: 0 -} - -.no-gutters>.col, -.no-gutters>[class*=col-] { - padding-right: 0; - padding-left: 0 -} - -.col, -.col-1, -.col-10, -.col-11, -.col-12, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-auto, -.col-lg, -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-auto, -.col-md, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-auto, -.col-sm, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-auto, -.col-xl, -.col-xl-1, -.col-xl-10, -.col-xl-11, -.col-xl-12, -.col-xl-2, -.col-xl-3, -.col-xl-4, -.col-xl-5, -.col-xl-6, -.col-xl-7, -.col-xl-8, -.col-xl-9, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 10px; - padding-left: 10px -} - -.col { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% -} - -.col-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% -} - -.col-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% -} - -.col-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% -} - -.col-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% -} - -.col-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% -} - -.col-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% -} - -.col-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% -} - -.col-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% -} - -.col-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% -} - -.col-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% -} - -.col-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% -} - -.col-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% -} - -.col-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% -} - -.order-first { - -webkit-box-ordinal-group: 0; - order: -1 -} - -.order-last { - -webkit-box-ordinal-group: 14; - order: 13 -} - -.order-0 { - -webkit-box-ordinal-group: 1; - order: 0 -} - -.order-1 { - -webkit-box-ordinal-group: 2; - order: 1 -} - -.order-2 { - -webkit-box-ordinal-group: 3; - order: 2 -} - -.order-3 { - -webkit-box-ordinal-group: 4; - order: 3 -} - -.order-4 { - -webkit-box-ordinal-group: 5; - order: 4 -} - -.order-5 { - -webkit-box-ordinal-group: 6; - order: 5 -} - -.order-6 { - -webkit-box-ordinal-group: 7; - order: 6 -} - -.order-7 { - -webkit-box-ordinal-group: 8; - order: 7 -} - -.order-8 { - -webkit-box-ordinal-group: 9; - order: 8 -} - -.order-9 { - -webkit-box-ordinal-group: 10; - order: 9 -} - -.order-10 { - -webkit-box-ordinal-group: 11; - order: 10 -} - -.order-11 { - -webkit-box-ordinal-group: 12; - order: 11 -} - -.order-12 { - -webkit-box-ordinal-group: 13; - order: 12 -} - -.offset-1 { - margin-left: 8.33333% -} - -.offset-2 { - margin-left: 16.66667% -} - -.offset-3 { - margin-left: 25% -} - -.offset-4 { - margin-left: 33.33333% -} - -.offset-5 { - margin-left: 41.66667% -} - -.offset-6 { - margin-left: 50% -} - -.offset-7 { - margin-left: 58.33333% -} - -.offset-8 { - margin-left: 66.66667% -} - -.offset-9 { - margin-left: 75% -} - -.offset-10 { - margin-left: 83.33333% -} - -.offset-11 { - margin-left: 91.66667% -} - -@media (min-width:576px) { - .col-sm { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-sm-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-sm-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-sm-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-sm-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-sm-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-sm-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-sm-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-sm-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-sm-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-sm-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-sm-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-sm-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-sm-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-sm-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-sm-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-sm-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-sm-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-sm-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-sm-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-sm-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-sm-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-sm-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-sm-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-sm-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-sm-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-sm-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-sm-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-sm-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-sm-0 { - margin-left: 0 - } - - .offset-sm-1 { - margin-left: 8.33333% - } - - .offset-sm-2 { - margin-left: 16.66667% - } - - .offset-sm-3 { - margin-left: 25% - } - - .offset-sm-4 { - margin-left: 33.33333% - } - - .offset-sm-5 { - margin-left: 41.66667% - } - - .offset-sm-6 { - margin-left: 50% - } - - .offset-sm-7 { - margin-left: 58.33333% - } - - .offset-sm-8 { - margin-left: 66.66667% - } - - .offset-sm-9 { - margin-left: 75% - } - - .offset-sm-10 { - margin-left: 83.33333% - } - - .offset-sm-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:768px) { - .col-md { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-md-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-md-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-md-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-md-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-md-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-md-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-md-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-md-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-md-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-md-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-md-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-md-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-md-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-md-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-md-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-md-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-md-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-md-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-md-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-md-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-md-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-md-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-md-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-md-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-md-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-md-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-md-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-md-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-md-0 { - margin-left: 0 - } - - .offset-md-1 { - margin-left: 8.33333% - } - - .offset-md-2 { - margin-left: 16.66667% - } - - .offset-md-3 { - margin-left: 25% - } - - .offset-md-4 { - margin-left: 33.33333% - } - - .offset-md-5 { - margin-left: 41.66667% - } - - .offset-md-6 { - margin-left: 50% - } - - .offset-md-7 { - margin-left: 58.33333% - } - - .offset-md-8 { - margin-left: 66.66667% - } - - .offset-md-9 { - margin-left: 75% - } - - .offset-md-10 { - margin-left: 83.33333% - } - - .offset-md-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:992px) { - .col-lg { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-lg-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-lg-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-lg-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-lg-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-lg-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-lg-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-lg-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-lg-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-lg-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-lg-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-lg-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-lg-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-lg-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-lg-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-lg-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-lg-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-lg-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-lg-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-lg-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-lg-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-lg-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-lg-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-lg-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-lg-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-lg-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-lg-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-lg-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-lg-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-lg-0 { - margin-left: 0 - } - - .offset-lg-1 { - margin-left: 8.33333% - } - - .offset-lg-2 { - margin-left: 16.66667% - } - - .offset-lg-3 { - margin-left: 25% - } - - .offset-lg-4 { - margin-left: 33.33333% - } - - .offset-lg-5 { - margin-left: 41.66667% - } - - .offset-lg-6 { - margin-left: 50% - } - - .offset-lg-7 { - margin-left: 58.33333% - } - - .offset-lg-8 { - margin-left: 66.66667% - } - - .offset-lg-9 { - margin-left: 75% - } - - .offset-lg-10 { - margin-left: 83.33333% - } - - .offset-lg-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:1200px) { - .col-xl { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-xl-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-xl-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-xl-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-xl-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-xl-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-xl-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-xl-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-xl-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-xl-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-xl-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-xl-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-xl-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-xl-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-xl-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-xl-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-xl-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-xl-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-xl-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-xl-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-xl-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-xl-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-xl-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-xl-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-xl-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-xl-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-xl-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-xl-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-xl-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-xl-0 { - margin-left: 0 - } - - .offset-xl-1 { - margin-left: 8.33333% - } - - .offset-xl-2 { - margin-left: 16.66667% - } - - .offset-xl-3 { - margin-left: 25% - } - - .offset-xl-4 { - margin-left: 33.33333% - } - - .offset-xl-5 { - margin-left: 41.66667% - } - - .offset-xl-6 { - margin-left: 50% - } - - .offset-xl-7 { - margin-left: 58.33333% - } - - .offset-xl-8 { - margin-left: 66.66667% - } - - .offset-xl-9 { - margin-left: 75% - } - - .offset-xl-10 { - margin-left: 83.33333% - } - - .offset-xl-11 { - margin-left: 91.66667% - } - -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529 -} - -.table td, -.table th { - padding: 10px 15px; - vertical-align: top; - border-top: 1px solid #f2f4f9 -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #f2f4f9 -} - -.table tbody+tbody { - border-top: 2px solid #f2f4f9 -} - -.table-sm td, -.table-sm th { - padding: 10px 15px -} - -.table-bordered { - border: 1px solid #f2f4f9 -} - -.table-bordered td, -.table-bordered th { - border: 1px solid #f2f4f9 -} - -.table-bordered thead td, -.table-bordered thead th { - border-bottom-width: 2px -} - -.table-borderless tbody+tbody, -.table-borderless td, -.table-borderless th, -.table-borderless thead th { - border: 0 -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: #f6f7f9 -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: #f6f7f9 -} - -.table-primary, -.table-primary>td, -.table-primary>th { - background-color: #b9d7b9 -} - -.table-primary tbody+tbody, -.table-primary td, -.table-primary th, -.table-primary thead th { - border-color: #7cb57e -} - -.table-hover .table-primary:hover { - background-color: #a9cea9 -} - -.table-hover .table-primary:hover>td, -.table-hover .table-primary:hover>th { - background-color: #a9cea9 -} - -.table-secondary, -.table-secondary>td, -.table-secondary>th { - background-color: #dbdbdb -} - -.table-secondary tbody+tbody, -.table-secondary td, -.table-secondary th, -.table-secondary thead th { - border-color: #bdbdbd -} - -.table-hover .table-secondary:hover { - background-color: #cecece -} - -.table-hover .table-secondary:hover>td, -.table-hover .table-secondary:hover>th { - background-color: #cecece -} - -.table-success, -.table-success>td, -.table-success>th { - background-color: #b8f6e1 -} - -.table-success tbody+tbody, -.table-success td, -.table-success th, -.table-success thead th { - border-color: #7aefc7 -} - -.table-hover .table-success:hover { - background-color: #a1f3d7 -} - -.table-hover .table-success:hover>td, -.table-hover .table-success:hover>th { - background-color: #a1f3d7 -} - -.table-info, -.table-info>td, -.table-info>th { - background-color: #d6d3fc -} - -.table-info tbody+tbody, -.table-info td, -.table-info th, -.table-info thead th { - border-color: #b3adfa -} - -.table-hover .table-info:hover { - background-color: #c0bbfa -} - -.table-hover .table-info:hover>td, -.table-hover .table-info:hover>th { - background-color: #c0bbfa -} - -.table-warning, -.table-warning>td, -.table-warning>th { - background-color: #fbdcd2 -} - -.table-warning tbody+tbody, -.table-warning td, -.table-warning th, -.table-warning thead th { - border-color: #f7beac -} - -.table-hover .table-warning:hover { - background-color: #f9cabb -} - -.table-hover .table-warning:hover>td, -.table-hover .table-warning:hover>th { - background-color: #f9cabb -} - -.table-danger, -.table-danger>td, -.table-danger>th { - background-color: #ffd2d4 -} - -.table-danger tbody+tbody, -.table-danger td, -.table-danger th, -.table-danger thead th { - border-color: #ffacaf -} - -.table-hover .table-danger:hover { - background-color: #ffb9bc -} - -.table-hover .table-danger:hover>td, -.table-hover .table-danger:hover>th { - background-color: #ffb9bc -} - -.table-light, -.table-light>td, -.table-light>th { - background-color: #f6f6f6 -} - -.table-light tbody+tbody, -.table-light td, -.table-light th, -.table-light thead th { - border-color: #eee -} - -.table-hover .table-light:hover { - background-color: #e9e9e9 -} - -.table-hover .table-light:hover>td, -.table-hover .table-light:hover>th { - background-color: #e9e9e9 -} - -.table-dark, -.table-dark>td, -.table-dark>th { - background-color: #d8d9da -} - -.table-dark tbody+tbody, -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #b7b8ba -} - -.table-hover .table-dark:hover { - background-color: #cbccce -} - -.table-hover .table-dark:hover>td, -.table-hover .table-dark:hover>th { - background-color: #cbccce -} - -.table-white, -.table-white>td, -.table-white>th { - background-color: #fff -} - -.table-white tbody+tbody, -.table-white td, -.table-white th, -.table-white thead th { - border-color: #fff -} - -.table-hover .table-white:hover { - background-color: #f2f2f2 -} - -.table-hover .table-white:hover>td, -.table-hover .table-white:hover>th { - background-color: #f2f2f2 -} - -.table-orange, -.table-orange>td, -.table-orange>th { - background-color: #ffe6b8 -} - -.table-orange tbody+tbody, -.table-orange td, -.table-orange th, -.table-orange thead th { - border-color: #ffd17a -} - -.table-hover .table-orange:hover { - background-color: #ffdd9f -} - -.table-hover .table-orange:hover>td, -.table-hover .table-orange:hover>th { - background-color: #ffdd9f -} - -.table-active, -.table-active>td, -.table-active>th { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover>td, -.table-hover .table-active:hover>th { - background-color: rgba(0, 0, 0, .075) -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55 -} - -.table .thead-light th { - color: #495057; - background-color: #e1e4e6; - border-color: #f2f4f9 -} - -.table-dark { - color: #fff; - background-color: #343a40 -} - -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #454d55 -} - -.table-dark.table-bordered { - border: 0 -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, .05) -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, .075) -} - -@media (max-width:575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-sm>.table-bordered { - border: 0 - } - -} - -@media (max-width:767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-md>.table-bordered { - border: 0 - } - -} - -@media (max-width:991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-lg>.table-bordered { - border: 0 - } - -} - -@media (max-width:1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-xl>.table-bordered { - border: 0 - } - -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch -} - -.table-responsive>.table-bordered { - border: 0 -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .form-control { - -webkit-transition: none; - transition: none - } - -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #f8f9fa; - opacity: 1 -} - -select.form-control:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.form-control-file, -.form-control-range { - display: block; - width: 100% -} - -.col-form-label { - padding-top: calc(.375rem + 1px); - padding-bottom: calc(.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5 -} - -.col-form-label-lg { - padding-top: calc(.5rem + 1px); - padding-bottom: calc(.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5 -} - -.col-form-label-sm { - padding-top: calc(.25rem + 1px); - padding-bottom: calc(.25rem + 1px); - font-size: .875rem; - line-height: 1.5 -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: .375rem; - padding-bottom: .375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0 -} - -.form-control-plaintext.form-control-lg, -.form-control-plaintext.form-control-sm { - padding-right: 0; - padding-left: 0 -} - -.form-control-sm { - height: calc(1.5em + .5rem + 2px); - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -select.form-control[multiple], -select.form-control[size] { - height: auto -} - -textarea.form-control { - height: auto -} - -.form-group { - margin-bottom: 1rem -} - -.form-text { - display: block; - margin-top: .25rem -} - -.form-row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px -} - -.form-row>.col, -.form-row>[class*=col-] { - padding-right: 5px; - padding-left: 5px -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem -} - -.form-check-input { - position: absolute; - margin-top: .3rem; - margin-left: -1.25rem -} - -.form-check-input:disabled~.form-check-label { - color: #adb5bd -} - -.form-check-label { - margin-bottom: 0 -} - -.form-check-inline { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-align: center; - align-items: center; - padding-left: 0; - margin-right: .75rem -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: .3125rem; - margin-left: 0 -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #28a745 -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, .9); - border-radius: .25rem -} - -.form-control.is-valid, -.was-validated .form-control:valid { - border-color: #28a745; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-valid:focus, -.was-validated .form-control:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.form-control.is-valid~.valid-feedback, -.form-control.is-valid~.valid-tooltip, -.was-validated .form-control:valid~.valid-feedback, -.was-validated .form-control:valid~.valid-tooltip { - display: block -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-valid, -.was-validated .custom-select:valid { - border-color: #28a745; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-valid:focus, -.was-validated .custom-select:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-select.is-valid~.valid-feedback, -.custom-select.is-valid~.valid-tooltip, -.was-validated .custom-select:valid~.valid-feedback, -.was-validated .custom-select:valid~.valid-tooltip { - display: block -} - -.form-control-file.is-valid~.valid-feedback, -.form-control-file.is-valid~.valid-tooltip, -.was-validated .form-control-file:valid~.valid-feedback, -.was-validated .form-control-file:valid~.valid-tooltip { - display: block -} - -.form-check-input.is-valid~.form-check-label, -.was-validated .form-check-input:valid~.form-check-label { - color: #28a745 -} - -.form-check-input.is-valid~.valid-feedback, -.form-check-input.is-valid~.valid-tooltip, -.was-validated .form-check-input:valid~.valid-feedback, -.was-validated .form-check-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid~.custom-control-label, -.was-validated .custom-control-input:valid~.custom-control-label { - color: #28a745 -} - -.custom-control-input.is-valid~.custom-control-label::before, -.was-validated .custom-control-input:valid~.custom-control-label::before { - border-color: #28a745 -} - -.custom-control-input.is-valid~.valid-feedback, -.custom-control-input.is-valid~.valid-tooltip, -.was-validated .custom-control-input:valid~.valid-feedback, -.was-validated .custom-control-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid:checked~.custom-control-label::before, -.was-validated .custom-control-input:valid:checked~.custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57 -} - -.custom-control-input.is-valid:focus~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before { - border-color: #28a745 -} - -.custom-file-input.is-valid~.custom-file-label, -.was-validated .custom-file-input:valid~.custom-file-label { - border-color: #28a745 -} - -.custom-file-input.is-valid~.valid-feedback, -.custom-file-input.is-valid~.valid-tooltip, -.was-validated .custom-file-input:valid~.valid-feedback, -.was-validated .custom-file-input:valid~.valid-tooltip { - display: block -} - -.custom-file-input.is-valid:focus~.custom-file-label, -.was-validated .custom-file-input:valid:focus~.custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #dc3545 -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, .9); - border-radius: .25rem -} - -.form-control.is-invalid, -.was-validated .form-control:invalid { - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-invalid:focus, -.was-validated .form-control:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-control.is-invalid~.invalid-feedback, -.form-control.is-invalid~.invalid-tooltip, -.was-validated .form-control:invalid~.invalid-feedback, -.was-validated .form-control:invalid~.invalid-tooltip { - display: block -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-invalid, -.was-validated .custom-select:invalid { - border-color: #dc3545; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-invalid:focus, -.was-validated .custom-select:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-select.is-invalid~.invalid-feedback, -.custom-select.is-invalid~.invalid-tooltip, -.was-validated .custom-select:invalid~.invalid-feedback, -.was-validated .custom-select:invalid~.invalid-tooltip { - display: block -} - -.form-control-file.is-invalid~.invalid-feedback, -.form-control-file.is-invalid~.invalid-tooltip, -.was-validated .form-control-file:invalid~.invalid-feedback, -.was-validated .form-control-file:invalid~.invalid-tooltip { - display: block -} - -.form-check-input.is-invalid~.form-check-label, -.was-validated .form-check-input:invalid~.form-check-label { - color: #dc3545 -} - -.form-check-input.is-invalid~.invalid-feedback, -.form-check-input.is-invalid~.invalid-tooltip, -.was-validated .form-check-input:invalid~.invalid-feedback, -.was-validated .form-check-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid~.custom-control-label, -.was-validated .custom-control-input:invalid~.custom-control-label { - color: #dc3545 -} - -.custom-control-input.is-invalid~.custom-control-label::before, -.was-validated .custom-control-input:invalid~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-control-input.is-invalid~.invalid-feedback, -.custom-control-input.is-invalid~.invalid-tooltip, -.was-validated .custom-control-input:invalid~.invalid-feedback, -.was-validated .custom-control-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid:checked~.custom-control-label::before, -.was-validated .custom-control-input:invalid:checked~.custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d -} - -.custom-control-input.is-invalid:focus~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.custom-file-label, -.was-validated .custom-file-input:invalid~.custom-file-label { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.invalid-feedback, -.custom-file-input.is-invalid~.invalid-tooltip, -.was-validated .custom-file-input:invalid~.invalid-feedback, -.was-validated .custom-file-input:invalid~.invalid-tooltip { - display: block -} - -.custom-file-input.is-invalid:focus~.custom-file-label, -.was-validated .custom-file-input:invalid:focus~.custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-inline { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center -} - -.form-inline .form-check { - width: 100% -} - -@media (min-width:576px) { - .form-inline label { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - margin-bottom: 0 - } - - .form-inline .form-group { - display: -webkit-box; - display: flex; - -webkit-box-flex: 0; - flex: 0 0 auto; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center; - margin-bottom: 0 - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .form-inline .form-control-plaintext { - display: inline-block - } - - .form-inline .custom-select, - .form-inline .input-group { - width: auto - } - - .form-inline .form-check { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: auto; - padding-left: 0 - } - - .form-inline .form-check-input { - position: relative; - flex-shrink: 0; - margin-top: 0; - margin-right: .25rem; - margin-left: 0 - } - - .form-inline .custom-control { - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center - } - - .form-inline .custom-control-label { - margin-bottom: 0 - } - -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .btn { - -webkit-transition: none; - transition: none - } - -} - -.btn:hover { - color: #212529; - text-decoration: none -} - -.btn.focus, -.btn:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.btn.disabled, -.btn:disabled { - opacity: .65 -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none -} - -.btn-primary { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:hover { - color: #fff; - background-color: #034b04; - border-color: #023f03 -} - -.btn-primary.focus, -.btn-primary:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:not(:disabled):not(.disabled).active, -.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #023f03; - border-color: #023203 -} - -.btn-primary:not(:disabled):not(.disabled).active:focus, -.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-secondary { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:hover { - color: #fff; - background-color: #6d6d6d; - border-color: #676767 -} - -.btn-secondary.focus, -.btn-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:not(:disabled):not(.disabled).active, -.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #676767; - border-color: #606060 -} - -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-success { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-success:hover { - color: #fff; - background-color: #00ba7a; - border-color: #00ad72 -} - -.btn-success.focus, -.btn-success:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-success:not(:disabled):not(.disabled).active, -.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #00ad72; - border-color: #00a069 -} - -.btn-success:not(:disabled):not(.disabled).active:focus, -.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-info { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:hover { - color: #fff; - background-color: #4a3df4; - border-color: #3f31f3 -} - -.btn-info.focus, -.btn-info:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-info.disabled, -.btn-info:disabled { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:not(:disabled):not(.disabled).active, -.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle { - color: #fff; - background-color: #3f31f3; - border-color: #3425f3 -} - -.btn-info:not(:disabled):not(.disabled).active:focus, -.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-warning { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:hover { - color: #fff; - background-color: #ed673c; - border-color: #ec5e30 -} - -.btn-warning.focus, -.btn-warning:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:not(:disabled):not(.disabled).active, -.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle { - color: #fff; - background-color: #ec5e30; - border-color: #eb5425 -} - -.btn-warning:not(:disabled):not(.disabled).active:focus, -.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-danger { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:hover { - color: #fff; - background-color: #ff3941; - border-color: #ff2c35 -} - -.btn-danger.focus, -.btn-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:not(:disabled):not(.disabled).active, -.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #ff2c35; - border-color: #ff1f29 -} - -.btn-danger:not(:disabled):not(.disabled).active:focus, -.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-light { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:hover { - color: #212529; - background-color: #ccc; - border-color: #c6c6c6 -} - -.btn-light.focus, -.btn-light:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:not(:disabled):not(.disabled).active, -.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle { - color: #212529; - background-color: #c6c6c6; - border-color: #bfbfbf -} - -.btn-light:not(:disabled):not(.disabled).active:focus, -.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-dark { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:hover { - color: #fff; - background-color: #616367; - border-color: #5b5d61 -} - -.btn-dark.focus, -.btn-dark:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:not(:disabled):not(.disabled).active, -.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #5b5d61; - border-color: #55575a -} - -.btn-dark:not(:disabled):not(.disabled).active:focus, -.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-white { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:hover { - color: #212529; - background-color: #ececec; - border-color: #e6e6e6 -} - -.btn-white.focus, -.btn-white:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-white.disabled, -.btn-white:disabled { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:not(:disabled):not(.disabled).active, -.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle { - color: #212529; - background-color: #e6e6e6; - border-color: #dfdfdf -} - -.btn-white:not(:disabled):not(.disabled).active:focus, -.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-orange { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-orange:hover { - color: #fff; - background-color: #d98d00; - border-color: #cc8500 -} - -.btn-orange.focus, -.btn-orange:focus { - box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5) -} - -.btn-orange.disabled, -.btn-orange:disabled { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-orange:not(:disabled):not(.disabled).active, -.btn-orange:not(:disabled):not(.disabled):active,.show>.btn-orange.dropdown-toggle { - color: #fff; - background-color: #cc8500; - border-color: #bf7d00 -} - -.btn-orange:not(:disabled):not(.disabled).active:focus, -.btn-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-orange.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5) -} - -.btn-outline-primary { - color: #047006; - border-color: #047006 -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary.focus, -.btn-outline-primary:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-primary:not(:disabled):not(.disabled).active, -.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-secondary { - color: grey; - border-color: grey -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary.focus, -.btn-outline-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: grey; - background-color: transparent -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-success { - color: #00e093; - border-color: #00e093 -} - -.btn-outline-success:hover { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-outline-success.focus, -.btn-outline-success:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #00e093; - background-color: transparent -} - -.btn-outline-success:not(:disabled):not(.disabled).active, -.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-info { - color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:hover { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info.focus, -.btn-outline-info:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #6c61f6; - background-color: transparent -} - -.btn-outline-info:not(:disabled):not(.disabled).active, -.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-warning { - color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning.focus, -.btn-outline-warning:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #f0825f; - background-color: transparent -} - -.btn-outline-warning:not(:disabled):not(.disabled).active, -.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-danger { - color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger.focus, -.btn-outline-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #ff5f66; - background-color: transparent -} - -.btn-outline-danger:not(:disabled):not(.disabled).active, -.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-light { - color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:hover { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light.focus, -.btn-outline-light:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #dfdfdf; - background-color: transparent -} - -.btn-outline-light:not(:disabled):not(.disabled).active, -.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-dark { - color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark.focus, -.btn-outline-dark:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #74767b; - background-color: transparent -} - -.btn-outline-dark:not(:disabled):not(.disabled).active, -.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-white { - color: #fff; - border-color: #fff -} - -.btn-outline-white:hover { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white.focus, -.btn-outline-white:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-white.disabled, -.btn-outline-white:disabled { - color: #fff; - background-color: transparent -} - -.btn-outline-white:not(:disabled):not(.disabled).active, -.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white:not(:disabled):not(.disabled).active:focus, -.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-orange { - color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange:hover { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange.focus, -.btn-outline-orange:focus { - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.btn-outline-orange.disabled, -.btn-outline-orange:disabled { - color: #ffa600; - background-color: transparent -} - -.btn-outline-orange:not(:disabled):not(.disabled).active, -.btn-outline-orange:not(:disabled):not(.disabled):active,.show>.btn-outline-orange.dropdown-toggle { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange:not(:disabled):not(.disabled).active:focus, -.btn-outline-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-orange.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.btn-link { - font-weight: 400; - color: #047006; - text-decoration: none -} - -.btn-link:hover { - color: #012602; - text-decoration: underline -} - -.btn-link.focus, -.btn-link:focus { - text-decoration: underline; - box-shadow: none -} - -.btn-link.disabled, -.btn-link:disabled { - color: #6c757d; - pointer-events: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.btn-group-sm>.btn, -.btn-sm { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: .5rem -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - -webkit-transition: opacity .15s linear; - transition: opacity .15s linear -} - -@media (prefers-reduced-motion:reduce) { - .fade { - -webkit-transition: none; - transition: none - } - -} - -.fade:not(.show) { - opacity: 0 -} - -.collapse:not(.show) { - display: none -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease -} - -@media (prefers-reduced-motion:reduce) { - .collapsing { - -webkit-transition: none; - transition: none - } - -} - -.dropdown, -.dropleft, -.dropright, -.dropup { - position: relative -} - -.dropdown-toggle { - white-space: nowrap -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid; - border-right: .3em solid transparent; - border-bottom: 0; - border-left: .3em solid transparent -} - -.dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: .5rem 0; - margin: .125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: .25rem -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-menu-right { - right: 0; - left: auto -} - -@media (min-width:576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0 - } - - .dropdown-menu-sm-right { - right: 0; - left: auto - } - -} - -@media (min-width:768px) { - .dropdown-menu-md-left { - right: auto; - left: 0 - } - - .dropdown-menu-md-right { - right: 0; - left: auto - } - -} - -@media (min-width:992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0 - } - - .dropdown-menu-lg-right { - right: 0; - left: auto - } - -} - -@media (min-width:1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0 - } - - .dropdown-menu-xl-right { - right: 0; - left: auto - } - -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: .125rem -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '0 0 8 8'; - border-top: 0; - border-right: .3em solid transparent; - border-bottom: .3em solid; - border-left: .3em solid transparent -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: .125rem -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '%2328a745'; - border-top: .3em solid transparent; - border-right: 0; - border-bottom: .3em solid transparent; - border-left: .3em solid -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-toggle::after { - vertical-align: 0 -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: .125rem -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.dropleft .dropdown-toggle::after { - display: none -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid transparent; - border-right: .3em solid; - border-bottom: .3em solid transparent -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0 -} - -.dropdown-menu[x-placement^=bottom], -.dropdown-menu[x-placement^=left], -.dropdown-menu[x-placement^=right], -.dropdown-menu[x-placement^=top] { - right: auto; - bottom: auto -} - -.dropdown-divider { - height: 0; - margin: .5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef -} - -.dropdown-item { - display: block; - width: 100%; - padding: .25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0 -} - -.dropdown-item:focus, -.dropdown-item:hover { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent -} - -.dropdown-menu.show { - display: block -} - -.dropdown-header { - display: block; - padding: .5rem 1.5rem; - margin-bottom: 0; - font-size: .875rem; - color: #6c757d; - white-space: nowrap -} - -.dropdown-item-text { - display: block; - padding: .25rem 1.5rem; - color: #212529 -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -webkit-inline-box; - display: inline-flex; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto -} - -.btn-group-vertical>.btn:hover, -.btn-group>.btn:hover { - z-index: 1 -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus { - z-index: 1 -} - -.btn-toolbar { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.btn-toolbar .input-group { - width: auto -} - -.btn-group>.btn-group:not(:first-child), -.btn-group>.btn:not(:first-child) { - margin-left: -1px -} - -.btn-group>.btn-group:not(:last-child)>.btn, -.btn-group>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:not(:first-child)>.btn, -.btn-group>.btn:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.dropdown-toggle-split { - padding-right: .5625rem; - padding-left: .5625rem -} - -.dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0 -} - -.btn-group-sm>.btn+.dropdown-toggle-split, -.btn-sm+.dropdown-toggle-split { - padding-right: .375rem; - padding-left: .375rem -} - -.btn-group-lg>.btn+.dropdown-toggle-split, -.btn-lg+.dropdown-toggle-split { - padding-right: .75rem; - padding-left: .75rem -} - -.btn-group-vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: center; - justify-content: center -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group { - width: 100% -} - -.btn-group-vertical>.btn-group:not(:first-child), -.btn-group-vertical>.btn:not(:first-child) { - margin-top: -1px -} - -.btn-group-vertical>.btn-group:not(:last-child)>.btn, -.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:not(:first-child)>.btn, -.btn-group-vertical>.btn:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-toggle>.btn, -.btn-group-toggle>.btn-group>.btn { - margin-bottom: 0 -} - -.btn-group-toggle>.btn input[type=checkbox], -.btn-group-toggle>.btn input[type=radio], -.btn-group-toggle>.btn-group>.btn input[type=checkbox], -.btn-group-toggle>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.input-group { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: stretch; - align-items: stretch; - width: 100% -} - -.input-group>.custom-file, -.input-group>.custom-select, -.input-group>.form-control, -.input-group>.form-control-plaintext { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0 -} - -.input-group>.custom-file+.custom-file, -.input-group>.custom-file+.custom-select, -.input-group>.custom-file+.form-control, -.input-group>.custom-select+.custom-file, -.input-group>.custom-select+.custom-select, -.input-group>.custom-select+.form-control, -.input-group>.form-control+.custom-file, -.input-group>.form-control+.custom-select, -.input-group>.form-control+.form-control, -.input-group>.form-control-plaintext+.custom-file, -.input-group>.form-control-plaintext+.custom-select, -.input-group>.form-control-plaintext+.form-control { - margin-left: -1px -} - -.input-group>.custom-file .custom-file-input:focus~.custom-file-label, -.input-group>.custom-select:focus, -.input-group>.form-control:focus { - z-index: 3 -} - -.input-group>.custom-file .custom-file-input:focus { - z-index: 4 -} - -.input-group>.custom-select:not(:last-child), -.input-group>.form-control:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-select:not(:first-child), -.input-group>.form-control:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group>.custom-file { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.input-group>.custom-file:not(:last-child) .custom-file-label, -.input-group>.custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-append, -.input-group-prepend { - display: -webkit-box; - display: flex -} - -.input-group-append .btn, -.input-group-prepend .btn { - position: relative; - z-index: 2 -} - -.input-group-append .btn:focus, -.input-group-prepend .btn:focus { - z-index: 3 -} - -.input-group-append .btn+.btn, -.input-group-append .btn+.input-group-text, -.input-group-append .input-group-text+.btn, -.input-group-append .input-group-text+.input-group-text, -.input-group-prepend .btn+.btn, -.input-group-prepend .btn+.input-group-text, -.input-group-prepend .input-group-text+.btn, -.input-group-prepend .input-group-text+.input-group-text { - margin-left: -1px -} - -.input-group-prepend { - margin-right: -1px -} - -.input-group-append { - margin-left: -1px -} - -.input-group-text { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .375rem .75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.input-group-text input[type=checkbox], -.input-group-text input[type=radio] { - margin-top: 0 -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control:not(textarea) { - height: calc(1.5em + 1rem + 2px) -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control, -.input-group-lg>.input-group-append>.btn, -.input-group-lg>.input-group-append>.input-group-text, -.input-group-lg>.input-group-prepend>.btn, -.input-group-lg>.input-group-prepend>.input-group-text { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control:not(textarea) { - height: calc(1.5em + .5rem + 2px) -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control, -.input-group-sm>.input-group-append>.btn, -.input-group-sm>.input-group-append>.input-group-text, -.input-group-sm>.input-group-prepend>.btn, -.input-group-sm>.input-group-prepend>.input-group-text { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.input-group-lg>.custom-select, -.input-group-sm>.custom-select { - padding-right: 1.75rem -} - -.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle), -.input-group>.input-group-append:last-child>.input-group-text:not(:last-child), -.input-group>.input-group-append:not(:last-child)>.btn, -.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.input-group-append>.btn, -.input-group>.input-group-append>.input-group-text, -.input-group>.input-group-prepend:first-child>.btn:not(:first-child), -.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child), -.input-group>.input-group-prepend:not(:first-child)>.btn, -.input-group>.input-group-prepend:not(:first-child)>.input-group-text { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.custom-control { - position: relative; - display: block; - min-height: 1.7rem; - padding-left: 1.9rem -} - -.custom-control-inline { - display: -webkit-inline-box; - display: inline-flex; - margin-right: 1rem -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0 -} - -.custom-control-input:checked~.custom-control-label::before { - color: #fff; - border-color: #00e093; - background-color: #00e093 -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-control-input:focus:not(:checked)~.custom-control-label::before { - border-color: #80bdff -} - -.custom-control-input:not(:disabled):active~.custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff -} - -.custom-control-input:disabled~.custom-control-label { - color: #6c757d -} - -.custom-control-input:disabled~.custom-control-label::before { - background-color: #e9ecef -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top -} - -.custom-control-label::before { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - pointer-events: none; - content: '0 0 4 5'; - background-color: #fff; - border: #e1e5f1 solid 1px -} - -.custom-control-label::after { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - content: '%23343a40'; - background: no-repeat 50%/50% 50% -} - -.custom-checkbox .custom-control-label::before { - border-radius: .25rem -} - -.custom-checkbox .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before { - border-color: #007bff; - background-color: #007bff -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-radio .custom-control-label::before { - border-radius: 50% -} - -.custom-radio .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e") -} - -.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-switch { - padding-left: 2.8rem -} - -.custom-switch .custom-control-label::before { - left: -2.8rem; - width: 2.3rem; - pointer-events: all; - border-radius: 25px -} - -.custom-switch .custom-control-label::after { - top: calc(.15rem + 2px); - left: calc(-2.8rem + 2px); - width: 1.1rem; - height: 1.1rem; - background-color: #e1e5f1; - border-radius: 25px; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-switch .custom-control-label::after { - -webkit-transition: none; - transition: none - } - -} - -.custom-switch .custom-control-input:checked~.custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(.9rem); - transform: translateX(.9rem) -} - -.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem 1.75rem .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: .25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-select:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.custom-select[multiple], -.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) { - height: auto; - padding-right: .75rem; - background-image: none -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef -} - -.custom-select::-ms-expand { - display: none -} - -.custom-select-sm { - height: calc(1.5em + .5rem + 2px); - padding-top: .25rem; - padding-bottom: .25rem; - padding-left: .5rem; - font-size: .875rem -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: .5rem; - padding-bottom: .5rem; - padding-left: 1rem; - font-size: 1.25rem -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin-bottom: 0 -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin: 0; - opacity: 0 -} - -.custom-file-input:focus~.custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-file-input:disabled~.custom-file-label { - background-color: #e9ecef -} - -.custom-file-input:lang(en)~.custom-file-label::after { - content: 'http://www.w3.org/2000/svg' -} - -.custom-file-input~.custom-file-label[data-browse]::after { - content: attr(data-browse) -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + .75rem); - padding: .375rem .75rem; - line-height: 1.5; - color: #495057; - content: '0 0 8 8'; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 .25rem .25rem 0 -} - -.custom-range { - width: 100%; - height: calc(1rem + .4rem); - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-range:focus { - outline: 0 -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range::-moz-focus-outer { - border: 0 -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -webkit-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -moz-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-moz-range-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-moz-range-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: .2rem; - margin-left: .2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-ms-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-ms-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: .5rem -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-moz-range-track { - cursor: default -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - -webkit-transition: none; - transition: none - } - -} - -.nav { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav-link { - display: block; - padding: .5rem 1rem -} - -.nav-link:focus, -.nav-link:hover { - text-decoration: none -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6 -} - -.nav-tabs .nav-item { - margin-bottom: -1px -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 2px; - border-top-right-radius: 2px -} - -.nav-tabs .nav-link:focus, -.nav-tabs .nav-link:hover { - border-color: #e9ecef #e9ecef #dee2e6 -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent -} - -.nav-tabs .nav-item.show .nav-link, -.nav-tabs .nav-link.active { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.nav-pills .nav-link { - border-radius: 2px -} - -.nav-pills .nav-link.active, -.nav-pills .show>.nav-link { - color: #fff; - background-color: #007bff -} - -.nav-fill .nav-item { - -webkit-box-flex: 1; - flex: 1 1 auto; - text-align: center -} - -.nav-justified .nav-item { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - text-align: center -} - -.tab-content>.tab-pane { - display: none -} - -.tab-content>.active { - display: block -} - -.navbar { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between; - padding: .5rem 1rem -} - -.navbar>.container, -.navbar>.container-fluid { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between -} - -.navbar-brand { - display: inline-block; - padding-top: .3125rem; - padding-bottom: .3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-nav { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0 -} - -.navbar-nav .dropdown-menu { - position: static; - float: none -} - -.navbar-text { - display: inline-block; - padding-top: .5rem; - padding-bottom: .5rem -} - -.navbar-collapse { - flex-basis: 100%; - -webkit-box-flex: 1; - flex-grow: 1; - -webkit-box-align: center; - align-items: center -} - -.navbar-toggler { - padding: .25rem .75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: .25rem -} - -.navbar-toggler:focus, -.navbar-toggler:hover { - text-decoration: none -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: '%2328a745'; - background: no-repeat center center; - background-size: 100% 100% -} - -@media (max-width:575.98px) { - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:576px) { - .navbar-expand-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-sm .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-sm .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-sm .navbar-toggler { - display: none - } - -} - -@media (max-width:767.98px) { - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:768px) { - .navbar-expand-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-md .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-md .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-md .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-md .navbar-toggler { - display: none - } - -} - -@media (max-width:991.98px) { - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:992px) { - .navbar-expand-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-lg .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-lg .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-lg .navbar-toggler { - display: none - } - -} - -@media (max-width:1199.98px) { - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:1200px) { - .navbar-expand-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-xl .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-xl .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-xl .navbar-toggler { - display: none - } - -} - -.navbar-expand { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - padding-right: 0; - padding-left: 0 -} - -.navbar-expand .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - flex-wrap: nowrap -} - -.navbar-expand .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto -} - -.navbar-expand .navbar-toggler { - display: none -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-brand:focus, -.navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-nav .nav-link:focus, -.navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, .7) -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, .3) -} - -.navbar-light .navbar-nav .active>.nav-link, -.navbar-light .navbar-nav .nav-link.active, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .show>.nav-link { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, .5); - border-color: rgba(0, 0, 0, .1) -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-text a:focus, -.navbar-light .navbar-text a:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-dark .navbar-brand { - color: #fff -} - -.navbar-dark .navbar-brand:focus, -.navbar-dark .navbar-brand:hover { - color: #fff -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-nav .nav-link:focus, -.navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, .75) -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, .25) -} - -.navbar-dark .navbar-nav .active>.nav-link, -.navbar-dark .navbar-nav .nav-link.active, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .show>.nav-link { - color: #fff -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, .5); - border-color: rgba(255, 255, 255, .1) -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-text a { - color: #fff -} - -.navbar-dark .navbar-text a:focus, -.navbar-dark .navbar-text a:hover { - color: #fff -} - -.card { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(238, 238, 238, .75); - border-radius: .25rem -} - -.card>hr { - margin-right: 0; - margin-left: 0 -} - -.card>.list-group:first-child .list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.card>.list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.card-body { - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1.25rem -} - -.card-title { - margin-bottom: .75rem -} - -.card-subtitle { - margin-top: -.375rem; - margin-bottom: 0 -} - -.card-text:last-child { - margin-bottom: 0 -} - -.card-link:hover { - text-decoration: none -} - -.card-link+.card-link { - margin-left: 1.25rem -} - -.card-header { - padding: .75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, .03); - border-bottom: 1px solid rgba(238, 238, 238, .75) -} - -.card-header:first-child { - border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 -} - -.card-header+.list-group .list-group-item:first-child { - border-top: 0 -} - -.card-footer { - padding: .75rem 1.25rem; - background-color: rgba(0, 0, 0, .03); - border-top: 1px solid rgba(238, 238, 238, .75) -} - -.card-footer:last-child { - border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) -} - -.card-header-tabs { - margin-right: -.625rem; - margin-bottom: -.75rem; - margin-left: -.625rem; - border-bottom: 0 -} - -.card-header-pills { - margin-right: -.625rem; - margin-left: -.625rem -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem -} - -.card-img { - width: 100%; - border-radius: calc(.25rem - 1px) -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(.25rem - 1px); - border-top-right-radius: calc(.25rem - 1px) -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(.25rem - 1px); - border-bottom-left-radius: calc(.25rem - 1px) -} - -.card-deck { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-deck .card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-deck { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px - } - - .card-deck .card { - display: -webkit-box; - display: flex; - -webkit-box-flex: 1; - flex: 1 0 0%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px - } - -} - -.card-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-group>.card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-group { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap - } - - .card-group>.card { - -webkit-box-flex: 1; - flex: 1 0 0%; - margin-bottom: 0 - } - - .card-group>.card+.card { - margin-left: 0; - border-left: 0 - } - - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-header, - .card-group>.card:not(:last-child) .card-img-top { - border-top-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-footer, - .card-group>.card:not(:last-child) .card-img-bottom { - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-header, - .card-group>.card:not(:first-child) .card-img-top { - border-top-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-footer, - .card-group>.card:not(:first-child) .card-img-bottom { - border-bottom-left-radius: 0 - } - -} - -.card-columns .card { - margin-bottom: .75rem -} - -@media (min-width:576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1 - } - - .card-columns .card { - display: inline-block; - width: 100% - } - -} - -.accordion>.card { - overflow: hidden -} - -.accordion>.card:not(:first-of-type) .card-header:first-child { - border-radius: 0 -} - -.accordion>.card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0 -} - -.accordion>.card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.accordion>.card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.accordion>.card .card-header { - margin-bottom: -1px -} - -.breadcrumb { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding: .75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #f7f9fa; - border-radius: .25rem -} - -.breadcrumb-item+.breadcrumb-item { - padding-left: .5rem -} - -.breadcrumb-item+.breadcrumb-item::before { - display: inline-block; - padding-right: .5rem; - color: #a8a9ad; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: underline -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: none -} - -.breadcrumb-item.active { - color: #6c757d -} - -.pagination { - display: -webkit-box; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 2px -} - -.page-link { - position: relative; - display: block; - padding: .5rem .75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6 -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6 -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 2px; - border-bottom-left-radius: 2px -} - -.page-item:last-child .page-link { - border-top-right-radius: 2px; - border-bottom-right-radius: 2px -} - -.page-item.active .page-link { - z-index: 1; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6 -} - -.pagination-lg .page-link { - padding: .75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5 -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm .page-link { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5 -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: .2rem; - border-bottom-left-radius: .2rem -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: .2rem; - border-bottom-right-radius: .2rem -} - -.badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .badge { - -webkit-transition: none; - transition: none - } - -} - -a.badge:focus, -a.badge:hover { - text-decoration: none -} - -.badge:empty { - display: none -} - -.btn .badge { - position: relative; - top: -1px -} - -.badge-pill { - padding-right: .5rem; - padding-left: .5rem; - border-radius: 10rem -} - -.badge-primary { - color: #fff; - background-color: #047006 -} - -a.badge-primary:focus, -a.badge-primary:hover { - color: #fff; - background-color: #023f03 -} - -a.badge-primary.focus, -a.badge-primary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.badge-secondary { - color: #fff; - background-color: grey -} - -a.badge-secondary:focus, -a.badge-secondary:hover { - color: #fff; - background-color: #676767 -} - -a.badge-secondary.focus, -a.badge-secondary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.badge-success { - color: #fff; - background-color: #00e093 -} - -a.badge-success:focus, -a.badge-success:hover { - color: #fff; - background-color: #00ad72 -} - -a.badge-success.focus, -a.badge-success:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.badge-info { - color: #fff; - background-color: #6c61f6 -} - -a.badge-info:focus, -a.badge-info:hover { - color: #fff; - background-color: #3f31f3 -} - -a.badge-info.focus, -a.badge-info:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.badge-warning { - color: #212529; - background-color: #f0825f -} - -a.badge-warning:focus, -a.badge-warning:hover { - color: #212529; - background-color: #ec5e30 -} - -a.badge-warning.focus, -a.badge-warning:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.badge-danger { - color: #fff; - background-color: #ff5f66 -} - -a.badge-danger:focus, -a.badge-danger:hover { - color: #fff; - background-color: #ff2c35 -} - -a.badge-danger.focus, -a.badge-danger:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.badge-light { - color: #212529; - background-color: #dfdfdf -} - -a.badge-light:focus, -a.badge-light:hover { - color: #212529; - background-color: #c6c6c6 -} - -a.badge-light.focus, -a.badge-light:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.badge-dark { - color: #fff; - background-color: #74767b -} - -a.badge-dark:focus, -a.badge-dark:hover { - color: #fff; - background-color: #5b5d61 -} - -a.badge-dark.focus, -a.badge-dark:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.badge-white { - color: #212529; - background-color: #fff -} - -a.badge-white:focus, -a.badge-white:hover { - color: #212529; - background-color: #e6e6e6 -} - -a.badge-white.focus, -a.badge-white:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.badge-orange { - color: #212529; - background-color: #ffa600 -} - -a.badge-orange:focus, -a.badge-orange:hover { - color: #212529; - background-color: #cc8500 -} - -a.badge-orange.focus, -a.badge-orange:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 6px -} - -@media (min-width:576px) { - .jumbotron { - padding: 4rem 2rem - } - -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0 -} - -.alert { - position: relative; - padding: 1.15rem 1.15rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 2px -} - -.alert-heading { - color: inherit -} - -.alert-link { - font-weight: 700 -} - -.alert-dismissible { - padding-right: 3.8rem -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 1.15rem 1.15rem; - color: inherit -} - -.alert-primary { - color: #023a03; - background-color: #cde2cd; - border-color: #b9d7b9 -} - -.alert-primary hr { - border-top-color: #a9cea9 -} - -.alert-primary .alert-link { - color: #000900 -} - -.alert-secondary { - color: #434343; - background-color: #e6e6e6; - border-color: #dbdbdb -} - -.alert-secondary hr { - border-top-color: #cecece -} - -.alert-secondary .alert-link { - color: #2a2a2a -} - -.alert-success { - color: #00744c; - background-color: #ccf9e9; - border-color: #b8f6e1 -} - -.alert-success hr { - border-top-color: #a1f3d7 -} - -.alert-success .alert-link { - color: #00412b -} - -.alert-info { - color: #383280; - background-color: #e2dffd; - border-color: #d6d3fc -} - -.alert-info hr { - border-top-color: #c0bbfa -} - -.alert-info .alert-link { - color: #28245b -} - -.alert-warning { - color: #7d4431; - background-color: #fce6df; - border-color: #fbdcd2 -} - -.alert-warning hr { - border-top-color: #f9cabb -} - -.alert-warning .alert-link { - color: #583023 -} - -.alert-danger { - color: #853135; - background-color: #ffdfe0; - border-color: #ffd2d4 -} - -.alert-danger hr { - border-top-color: #ffb9bc -} - -.alert-danger .alert-link { - color: #602326 -} - -.alert-light { - color: #747474; - background-color: #f9f9f9; - border-color: #f6f6f6 -} - -.alert-light hr { - border-top-color: #e9e9e9 -} - -.alert-light .alert-link { - color: #5b5b5b -} - -.alert-dark { - color: #3c3d40; - background-color: #e3e4e5; - border-color: #d8d9da -} - -.alert-dark hr { - border-top-color: #cbccce -} - -.alert-dark .alert-link { - color: #232426 -} - -.alert-white { - color: #858585; - background-color: #fff; - border-color: #fff -} - -.alert-white hr { - border-top-color: #f2f2f2 -} - -.alert-white .alert-link { - color: #6c6c6c -} - -.alert-orange { - color: #855600; - background-color: #ffedcc; - border-color: #ffe6b8 -} - -.alert-orange hr { - border-top-color: #ffdd9f -} - -.alert-orange .alert-link { - color: #523500 -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -.progress { - display: -webkit-box; - display: flex; - height: 1rem; - overflow: hidden; - font-size: .75rem; - background-color: #f3f5f7; - border-radius: 2px -} - -.progress-bar { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - -webkit-transition: width .6s ease; - transition: width .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar { - -webkit-transition: none; - transition: none - } - -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none - } - -} - -.media { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start -} - -.media-body { - -webkit-box-flex: 1; - flex: 1 -} - -.list-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0 -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit -} - -.list-group-item-action:focus, -.list-group-item-action:hover { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef -} - -.list-group-item { - position: relative; - display: block; - padding: .75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, .125) -} - -.list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.list-group-horizontal { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.list-group-horizontal .list-group-item { - margin-right: -1px; - margin-bottom: 0 -} - -.list-group-horizontal .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 -} - -.list-group-horizontal .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 -} - -@media (min-width:576px) { - .list-group-horizontal-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-sm .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-sm .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-sm .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:768px) { - .list-group-horizontal-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-md .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-md .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-md .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:992px) { - .list-group-horizontal-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-lg .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-lg .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-lg .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:1200px) { - .list-group-horizontal-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-xl .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-xl .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-xl .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0 -} - -.list-group-flush .list-group-item:last-child { - margin-bottom: -1px -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0 -} - -.list-group-flush:last-child .list-group-item:last-child { - margin-bottom: 0; - border-bottom: 0 -} - -.list-group-item-primary { - color: #023a03; - background-color: #b9d7b9 -} - -.list-group-item-primary.list-group-item-action:focus, -.list-group-item-primary.list-group-item-action:hover { - color: #023a03; - background-color: #a9cea9 -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #023a03; - border-color: #023a03 -} - -.list-group-item-secondary { - color: #434343; - background-color: #dbdbdb -} - -.list-group-item-secondary.list-group-item-action:focus, -.list-group-item-secondary.list-group-item-action:hover { - color: #434343; - background-color: #cecece -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #434343; - border-color: #434343 -} - -.list-group-item-success { - color: #00744c; - background-color: #b8f6e1 -} - -.list-group-item-success.list-group-item-action:focus, -.list-group-item-success.list-group-item-action:hover { - color: #00744c; - background-color: #a1f3d7 -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #00744c; - border-color: #00744c -} - -.list-group-item-info { - color: #383280; - background-color: #d6d3fc -} - -.list-group-item-info.list-group-item-action:focus, -.list-group-item-info.list-group-item-action:hover { - color: #383280; - background-color: #c0bbfa -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #383280; - border-color: #383280 -} - -.list-group-item-warning { - color: #7d4431; - background-color: #fbdcd2 -} - -.list-group-item-warning.list-group-item-action:focus, -.list-group-item-warning.list-group-item-action:hover { - color: #7d4431; - background-color: #f9cabb -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #7d4431; - border-color: #7d4431 -} - -.list-group-item-danger { - color: #853135; - background-color: #ffd2d4 -} - -.list-group-item-danger.list-group-item-action:focus, -.list-group-item-danger.list-group-item-action:hover { - color: #853135; - background-color: #ffb9bc -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #853135; - border-color: #853135 -} - -.list-group-item-light { - color: #747474; - background-color: #f6f6f6 -} - -.list-group-item-light.list-group-item-action:focus, -.list-group-item-light.list-group-item-action:hover { - color: #747474; - background-color: #e9e9e9 -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #747474; - border-color: #747474 -} - -.list-group-item-dark { - color: #3c3d40; - background-color: #d8d9da -} - -.list-group-item-dark.list-group-item-action:focus, -.list-group-item-dark.list-group-item-action:hover { - color: #3c3d40; - background-color: #cbccce -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #3c3d40; - border-color: #3c3d40 -} - -.list-group-item-white { - color: #858585; - background-color: #fff -} - -.list-group-item-white.list-group-item-action:focus, -.list-group-item-white.list-group-item-action:hover { - color: #858585; - background-color: #f2f2f2 -} - -.list-group-item-white.list-group-item-action.active { - color: #fff; - background-color: #858585; - border-color: #858585 -} - -.list-group-item-orange { - color: #855600; - background-color: #ffe6b8 -} - -.list-group-item-orange.list-group-item-action:focus, -.list-group-item-orange.list-group-item-action:hover { - color: #855600; - background-color: #ffdd9f -} - -.list-group-item-orange.list-group-item-action.active { - color: #fff; - background-color: #855600; - border-color: #855600 -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5 -} - -.close:hover { - color: #000; - text-decoration: none -} - -.close:not(:disabled):not(.disabled):focus, -.close:not(:disabled):not(.disabled):hover { - opacity: .75 -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -a.close.disabled { - pointer-events: none -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: .875rem; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: .25rem -} - -.toast:not(:last-child) { - margin-bottom: .75rem -} - -.toast.showing { - opacity: 1 -} - -.toast.show { - display: block; - opacity: 1 -} - -.toast.hide { - display: none -} - -.toast-header { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .25rem .75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, .05) -} - -.toast-body { - padding: .75rem -} - -.modal-open { - overflow: hidden -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0 -} - -.modal-dialog { - position: relative; - width: auto; - margin: .5rem; - pointer-events: none -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px) -} - -@media (prefers-reduced-motion:reduce) { - .modal.fade .modal-dialog { - -webkit-transition: none; - transition: none - } - -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none -} - -.modal-dialog-scrollable { - display: -webkit-box; - display: flex; - max-height: calc(100% - 1rem) -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden -} - -.modal-dialog-scrollable .modal-footer, -.modal-dialog-scrollable .modal-header { - flex-shrink: 0 -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto -} - -.modal-dialog-centered { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - min-height: calc(100% - 1rem) -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: 'http://www.w3.org/2000/svg' -} - -.modal-dialog-centered.modal-dialog-scrollable { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - height: 100% -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none -} - -.modal-content { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0 -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000 -} - -.modal-backdrop.fade { - opacity: 0 -} - -.modal-backdrop.show { - opacity: .8 -} - -.modal-header { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: .3rem; - border-top-right-radius: .3rem -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5 -} - -.modal-body { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1rem -} - -.modal-footer { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: .3rem; - border-bottom-left-radius: .3rem -} - -.modal-footer>:not(:first-child) { - margin-left: .25rem -} - -.modal-footer>:not(:last-child) { - margin-right: .25rem -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto - } - - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem) - } - - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem) - } - - .modal-dialog-centered { - min-height: calc(100% - 3.5rem) - } - - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem) - } - - .modal-sm { - max-width: 300px - } - -} - -@media (min-width:992px) { - .modal-lg, - .modal-xl { - max-width: 800px - } - -} - -@media (min-width:1200px) { - .modal-xl { - max-width: 1140px - } - -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - opacity: 0 -} - -.tooltip.show { - opacity: .9 -} - -.tooltip .arrow { - position: absolute; - display: block; - width: .8rem; - height: .4rem -} - -.tooltip .arrow::before { - position: absolute; - content: '%23dc3545'; - border-color: transparent; - border-style: solid -} - -.bs-tooltip-auto[x-placement^=top], -.bs-tooltip-top { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow, -.bs-tooltip-top .arrow { - bottom: 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow::before, -.bs-tooltip-top .arrow::before { - top: 0; - border-width: .4rem .4rem 0; - border-top-color: #000 -} - -.bs-tooltip-auto[x-placement^=right], -.bs-tooltip-right { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow, -.bs-tooltip-right .arrow { - left: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow::before, -.bs-tooltip-right .arrow::before { - right: 0; - border-width: .4rem .4rem .4rem 0; - border-right-color: #000 -} - -.bs-tooltip-auto[x-placement^=bottom], -.bs-tooltip-bottom { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow, -.bs-tooltip-bottom .arrow { - top: 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow::before, -.bs-tooltip-bottom .arrow::before { - bottom: 0; - border-width: 0 .4rem .4rem; - border-bottom-color: #000 -} - -.bs-tooltip-auto[x-placement^=left], -.bs-tooltip-left { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow, -.bs-tooltip-left .arrow { - right: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow::before, -.bs-tooltip-left .arrow::before { - left: 0; - border-width: .4rem 0 .4rem .4rem; - border-left-color: #000 -} - -.tooltip-inner { - max-width: 200px; - padding: .25rem .5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: .25rem -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: .5rem; - margin: 0 6px -} - -.popover .arrow::after, -.popover .arrow::before { - position: absolute; - display: block; - content: '-2 -2 7 7'; - border-color: transparent; - border-style: solid -} - -.bs-popover-auto[x-placement^=top], -.bs-popover-top { - margin-bottom: .5rem -} - -.bs-popover-auto[x-placement^=top]>.arrow, -.bs-popover-top>.arrow { - bottom: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=top]>.arrow::before, -.bs-popover-top>.arrow::before { - bottom: 0; - border-width: .5rem .5rem 0; - border-top-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=top]>.arrow::after, -.bs-popover-top>.arrow::after { - bottom: 1px; - border-width: .5rem .5rem 0; - border-top-color: #fff -} - -.bs-popover-auto[x-placement^=right], -.bs-popover-right { - margin-left: .5rem -} - -.bs-popover-auto[x-placement^=right]>.arrow, -.bs-popover-right>.arrow { - left: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=right]>.arrow::before, -.bs-popover-right>.arrow::before { - left: 0; - border-width: .5rem .5rem .5rem 0; - border-right-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=right]>.arrow::after, -.bs-popover-right>.arrow::after { - left: 1px; - border-width: .5rem .5rem .5rem 0; - border-right-color: #fff -} - -.bs-popover-auto[x-placement^=bottom], -.bs-popover-bottom { - margin-top: .5rem -} - -.bs-popover-auto[x-placement^=bottom]>.arrow, -.bs-popover-bottom>.arrow { - top: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::before, -.bs-popover-bottom>.arrow::before { - top: 0; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::after, -.bs-popover-bottom>.arrow::after { - top: 1px; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: #fff -} - -.bs-popover-auto[x-placement^=bottom] .popover-header::before, -.bs-popover-bottom .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -.5rem; - content: '%23dc3545'; - border-bottom: 1px solid #f7f7f7 -} - -.bs-popover-auto[x-placement^=left], -.bs-popover-left { - margin-right: .5rem -} - -.bs-popover-auto[x-placement^=left]>.arrow, -.bs-popover-left>.arrow { - right: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=left]>.arrow::before, -.bs-popover-left>.arrow::before { - right: 0; - border-width: .5rem 0 .5rem .5rem; - border-left-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=left]>.arrow::after, -.bs-popover-left>.arrow::after { - right: 1px; - border-width: .5rem 0 .5rem .5rem; - border-left-color: #fff -} - -.popover-header { - padding: .5rem .75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(6px - 1px); - border-top-right-radius: calc(6px - 1px) -} - -.popover-header:empty { - display: none -} - -.popover-body { - padding: .5rem .75rem; - color: #212529 -} - -.carousel { - position: relative -} - -.carousel.pointer-event { - touch-action: pan-y -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden -} - -.carousel-inner::after { - display: block; - clear: both; - content: 'M0 0l3 3m0-3L0 3' -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transition: -webkit-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .carousel-item { - -webkit-transition: none; - transition: none - } - -} - -.carousel-item-next, -.carousel-item-prev, -.carousel-item.active { - display: block -} - -.active.carousel-item-right, -.carousel-item-next:not(.carousel-item-left) { - -webkit-transform: translateX(100%); - transform: translateX(100%) -} - -.active.carousel-item-left, -.carousel-item-prev:not(.carousel-item-right) { - -webkit-transform: translateX(-100%); - transform: translateX(-100%) -} - -.carousel-fade .carousel-item { - opacity: 0; - -webkit-transition-property: opacity; - transition-property: opacity; - -webkit-transform: none; - transform: none -} - -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right, -.carousel-fade .carousel-item.active { - z-index: 1; - opacity: 1 -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - -webkit-transition: 0s .6s opacity; - transition: 0s .6s opacity -} - -@media (prefers-reduced-motion:reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next, -.carousel-control-prev { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: .5; - -webkit-transition: opacity .15s ease; - transition: opacity .15s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-control-next, - .carousel-control-prev { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next:focus, -.carousel-control-next:hover, -.carousel-control-prev:focus, -.carousel-control-prev:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9 -} - -.carousel-control-prev { - left: 0 -} - -.carousel-control-next { - right: 0 -} - -.carousel-control-next-icon, -.carousel-control-prev-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50%/100% 100% -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none -} - -.carousel-indicators li { - box-sizing: content-box; - -webkit-box-flex: 0; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - -webkit-transition: opacity .6s ease; - transition: opacity .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-indicators li { - -webkit-transition: none; - transition: none - } - -} - -.carousel-indicators .active { - opacity: 1 -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: .25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: .2em -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem -} - -.align-baseline { - vertical-align: baseline !important -} - -.align-top { - vertical-align: top !important -} - -.align-middle { - vertical-align: middle !important -} - -.align-bottom { - vertical-align: bottom !important -} - -.align-text-bottom { - vertical-align: text-bottom !important -} - -.align-text-top { - vertical-align: text-top !important -} - -.bg-primary { - background-color: #047006 !important -} - -a.bg-primary:focus, -a.bg-primary:hover, -button.bg-primary:focus, -button.bg-primary:hover { - background-color: #023f03 !important -} - -.bg-secondary { - background-color: grey !important -} - -a.bg-secondary:focus, -a.bg-secondary:hover, -button.bg-secondary:focus, -button.bg-secondary:hover { - background-color: #676767 !important -} - -.bg-success { - background-color: #00e093 !important -} - -a.bg-success:focus, -a.bg-success:hover, -button.bg-success:focus, -button.bg-success:hover { - background-color: #00ad72 !important -} - -.bg-info { - background-color: #6c61f6 !important -} - -a.bg-info:focus, -a.bg-info:hover, -button.bg-info:focus, -button.bg-info:hover { - background-color: #3f31f3 !important -} - -.bg-warning { - background-color: #f0825f !important -} - -a.bg-warning:focus, -a.bg-warning:hover, -button.bg-warning:focus, -button.bg-warning:hover { - background-color: #ec5e30 !important -} - -.bg-danger { - background-color: #ff5f66 !important -} - -a.bg-danger:focus, -a.bg-danger:hover, -button.bg-danger:focus, -button.bg-danger:hover { - background-color: #ff2c35 !important -} - -.bg-light { - background-color: #dfdfdf !important -} - -a.bg-light:focus, -a.bg-light:hover, -button.bg-light:focus, -button.bg-light:hover { - background-color: #c6c6c6 !important -} - -.bg-dark { - background-color: #74767b !important -} - -a.bg-dark:focus, -a.bg-dark:hover, -button.bg-dark:focus, -button.bg-dark:hover { - background-color: #5b5d61 !important -} - -.bg-white { - background-color: #fff !important -} - -a.bg-white:focus, -a.bg-white:hover, -button.bg-white:focus, -button.bg-white:hover { - background-color: #e6e6e6 !important -} - -.bg-orange { - background-color: #ffa600 !important -} - -a.bg-orange:focus, -a.bg-orange:hover, -button.bg-orange:focus, -button.bg-orange:hover { - background-color: #cc8500 !important -} - -.bg-white { - background-color: #fff !important -} - -.bg-transparent { - background-color: transparent !important -} - -.border { - border: 1px solid #f2f4f9 !important -} - -.border-top { - border-top: 1px solid #f2f4f9 !important -} - -.border-right { - border-right: 1px solid #f2f4f9 !important -} - -.border-bottom { - border-bottom: 1px solid #f2f4f9 !important -} - -.border-left { - border-left: 1px solid #f2f4f9 !important -} - -.border-0 { - border: 0 !important -} - -.border-top-0 { - border-top: 0 !important -} - -.border-right-0 { - border-right: 0 !important -} - -.border-bottom-0 { - border-bottom: 0 !important -} - -.border-left-0 { - border-left: 0 !important -} - -.border-primary { - border-color: #047006 !important -} - -.border-secondary { - border-color: grey !important -} - -.border-success { - border-color: #00e093 !important -} - -.border-info { - border-color: #6c61f6 !important -} - -.border-warning { - border-color: #f0825f !important -} - -.border-danger { - border-color: #ff5f66 !important -} - -.border-light { - border-color: #dfdfdf !important -} - -.border-dark { - border-color: #74767b !important -} - -.border-white { - border-color: #fff !important -} - -.border-orange { - border-color: #ffa600 !important -} - -.border-white { - border-color: #fff !important -} - -.rounded-sm { - border-radius: .2rem !important -} - -.rounded { - border-radius: 2px !important -} - -.rounded-top { - border-top-left-radius: 2px !important; - border-top-right-radius: 2px !important -} - -.rounded-right { - border-top-right-radius: 2px !important; - border-bottom-right-radius: 2px !important -} - -.rounded-bottom { - border-bottom-right-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-left { - border-top-left-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-lg { - border-radius: 6px !important -} - -.rounded-circle { - border-radius: 50% !important -} - -.rounded-pill { - border-radius: 50rem !important -} - -.rounded-0 { - border-radius: 0 !important -} - -.clearfix::after { - display: block; - clear: both; - content: '.5' -} - -.d-none { - display: none !important -} - -.d-inline { - display: inline !important -} - -.d-inline-block { - display: inline-block !important -} - -.d-block { - display: block !important -} - -.d-table { - display: table !important -} - -.d-table-row { - display: table-row !important -} - -.d-table-cell { - display: table-cell !important -} - -.d-flex { - display: -webkit-box !important; - display: flex !important -} - -.d-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important -} - -@media (min-width:576px) { - .d-sm-none { - display: none !important - } - - .d-sm-inline { - display: inline !important - } - - .d-sm-inline-block { - display: inline-block !important - } - - .d-sm-block { - display: block !important - } - - .d-sm-table { - display: table !important - } - - .d-sm-table-row { - display: table-row !important - } - - .d-sm-table-cell { - display: table-cell !important - } - - .d-sm-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-sm-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:768px) { - .d-md-none { - display: none !important - } - - .d-md-inline { - display: inline !important - } - - .d-md-inline-block { - display: inline-block !important - } - - .d-md-block { - display: block !important - } - - .d-md-table { - display: table !important - } - - .d-md-table-row { - display: table-row !important - } - - .d-md-table-cell { - display: table-cell !important - } - - .d-md-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-md-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:992px) { - .d-lg-none { - display: none !important - } - - .d-lg-inline { - display: inline !important - } - - .d-lg-inline-block { - display: inline-block !important - } - - .d-lg-block { - display: block !important - } - - .d-lg-table { - display: table !important - } - - .d-lg-table-row { - display: table-row !important - } - - .d-lg-table-cell { - display: table-cell !important - } - - .d-lg-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-lg-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:1200px) { - .d-xl-none { - display: none !important - } - - .d-xl-inline { - display: inline !important - } - - .d-xl-inline-block { - display: inline-block !important - } - - .d-xl-block { - display: block !important - } - - .d-xl-table { - display: table !important - } - - .d-xl-table-row { - display: table-row !important - } - - .d-xl-table-cell { - display: table-cell !important - } - - .d-xl-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-xl-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media print { - .d-print-none { - display: none !important - } - - .d-print-inline { - display: inline !important - } - - .d-print-inline-block { - display: inline-block !important - } - - .d-print-block { - display: block !important - } - - .d-print-table { - display: table !important - } - - .d-print-table-row { - display: table-row !important - } - - .d-print-table-cell { - display: table-cell !important - } - - .d-print-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-print-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden -} - -.embed-responsive::before { - display: block; - content: '3' -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.flex-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important -} - -.flex-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important -} - -.flex-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important -} - -.flex-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important -} - -.flex-wrap { - flex-wrap: wrap !important -} - -.flex-nowrap { - flex-wrap: nowrap !important -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important -} - -.flex-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important -} - -.flex-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important -} - -.flex-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important -} - -.flex-shrink-0 { - flex-shrink: 0 !important -} - -.flex-shrink-1 { - flex-shrink: 1 !important -} - -.justify-content-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important -} - -.justify-content-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important -} - -.justify-content-center { - -webkit-box-pack: center !important; - justify-content: center !important -} - -.justify-content-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important -} - -.justify-content-around { - justify-content: space-around !important -} - -.align-items-start { - -webkit-box-align: start !important; - align-items: flex-start !important -} - -.align-items-end { - -webkit-box-align: end !important; - align-items: flex-end !important -} - -.align-items-center { - -webkit-box-align: center !important; - align-items: center !important -} - -.align-items-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important -} - -.align-items-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important -} - -.align-content-start { - align-content: flex-start !important -} - -.align-content-end { - align-content: flex-end !important -} - -.align-content-center { - align-content: center !important -} - -.align-content-between { - align-content: space-between !important -} - -.align-content-around { - align-content: space-around !important -} - -.align-content-stretch { - align-content: stretch !important -} - -.align-self-auto { - align-self: auto !important -} - -.align-self-start { - align-self: flex-start !important -} - -.align-self-end { - align-self: flex-end !important -} - -.align-self-center { - align-self: center !important -} - -.align-self-baseline { - align-self: baseline !important -} - -.align-self-stretch { - align-self: stretch !important -} - -@media (min-width:576px) { - .flex-sm-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-sm-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-sm-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-sm-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-sm-wrap { - flex-wrap: wrap !important - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-sm-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-sm-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-sm-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-sm-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-sm-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-sm-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-sm-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-sm-around { - justify-content: space-around !important - } - - .align-items-sm-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-sm-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-sm-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-sm-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-sm-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-sm-start { - align-content: flex-start !important - } - - .align-content-sm-end { - align-content: flex-end !important - } - - .align-content-sm-center { - align-content: center !important - } - - .align-content-sm-between { - align-content: space-between !important - } - - .align-content-sm-around { - align-content: space-around !important - } - - .align-content-sm-stretch { - align-content: stretch !important - } - - .align-self-sm-auto { - align-self: auto !important - } - - .align-self-sm-start { - align-self: flex-start !important - } - - .align-self-sm-end { - align-self: flex-end !important - } - - .align-self-sm-center { - align-self: center !important - } - - .align-self-sm-baseline { - align-self: baseline !important - } - - .align-self-sm-stretch { - align-self: stretch !important - } - -} - -@media (min-width:768px) { - .flex-md-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-md-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-md-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-md-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-md-wrap { - flex-wrap: wrap !important - } - - .flex-md-nowrap { - flex-wrap: nowrap !important - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-md-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-md-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-md-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-md-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-md-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-md-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-md-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-md-around { - justify-content: space-around !important - } - - .align-items-md-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-md-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-md-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-md-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-md-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-md-start { - align-content: flex-start !important - } - - .align-content-md-end { - align-content: flex-end !important - } - - .align-content-md-center { - align-content: center !important - } - - .align-content-md-between { - align-content: space-between !important - } - - .align-content-md-around { - align-content: space-around !important - } - - .align-content-md-stretch { - align-content: stretch !important - } - - .align-self-md-auto { - align-self: auto !important - } - - .align-self-md-start { - align-self: flex-start !important - } - - .align-self-md-end { - align-self: flex-end !important - } - - .align-self-md-center { - align-self: center !important - } - - .align-self-md-baseline { - align-self: baseline !important - } - - .align-self-md-stretch { - align-self: stretch !important - } - -} - -@media (min-width:992px) { - .flex-lg-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-lg-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-lg-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-lg-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-lg-wrap { - flex-wrap: wrap !important - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-lg-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-lg-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-lg-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-lg-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-lg-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-lg-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-lg-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-lg-around { - justify-content: space-around !important - } - - .align-items-lg-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-lg-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-lg-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-lg-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-lg-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-lg-start { - align-content: flex-start !important - } - - .align-content-lg-end { - align-content: flex-end !important - } - - .align-content-lg-center { - align-content: center !important - } - - .align-content-lg-between { - align-content: space-between !important - } - - .align-content-lg-around { - align-content: space-around !important - } - - .align-content-lg-stretch { - align-content: stretch !important - } - - .align-self-lg-auto { - align-self: auto !important - } - - .align-self-lg-start { - align-self: flex-start !important - } - - .align-self-lg-end { - align-self: flex-end !important - } - - .align-self-lg-center { - align-self: center !important - } - - .align-self-lg-baseline { - align-self: baseline !important - } - - .align-self-lg-stretch { - align-self: stretch !important - } - -} - -@media (min-width:1200px) { - .flex-xl-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-xl-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-xl-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-xl-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-xl-wrap { - flex-wrap: wrap !important - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-xl-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-xl-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-xl-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-xl-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-xl-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-xl-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-xl-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-xl-around { - justify-content: space-around !important - } - - .align-items-xl-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-xl-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-xl-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-xl-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-xl-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-xl-start { - align-content: flex-start !important - } - - .align-content-xl-end { - align-content: flex-end !important - } - - .align-content-xl-center { - align-content: center !important - } - - .align-content-xl-between { - align-content: space-between !important - } - - .align-content-xl-around { - align-content: space-around !important - } - - .align-content-xl-stretch { - align-content: stretch !important - } - - .align-self-xl-auto { - align-self: auto !important - } - - .align-self-xl-start { - align-self: flex-start !important - } - - .align-self-xl-end { - align-self: flex-end !important - } - - .align-self-xl-center { - align-self: center !important - } - - .align-self-xl-baseline { - align-self: baseline !important - } - - .align-self-xl-stretch { - align-self: stretch !important - } - -} - -.float-left { - float: left !important -} - -.float-right { - float: right !important -} - -.float-none { - float: none !important -} - -@media (min-width:576px) { - .float-sm-left { - float: left !important - } - - .float-sm-right { - float: right !important - } - - .float-sm-none { - float: none !important - } - -} - -@media (min-width:768px) { - .float-md-left { - float: left !important - } - - .float-md-right { - float: right !important - } - - .float-md-none { - float: none !important - } - -} - -@media (min-width:992px) { - .float-lg-left { - float: left !important - } - - .float-lg-right { - float: right !important - } - - .float-lg-none { - float: none !important - } - -} - -@media (min-width:1200px) { - .float-xl-left { - float: left !important - } - - .float-xl-right { - float: right !important - } - - .float-xl-none { - float: none !important - } - -} - -.overflow-auto { - overflow: auto !important -} - -.overflow-hidden { - overflow: hidden !important -} - -.position-static { - position: static !important -} - -.position-relative { - position: relative !important -} - -.position-absolute { - position: absolute !important -} - -.position-fixed { - position: fixed !important -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030 -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030 -} - -@supports ((position:-webkit-sticky) or (position:sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal -} - -.shadow-sm { - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important -} - -.shadow { - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important -} - -.shadow-none { - box-shadow: none !important -} - -.w-25 { - width: 25% !important -} - -.w-50 { - width: 50% !important -} - -.w-75 { - width: 75% !important -} - -.w-100 { - width: 100% !important -} - -.w-auto { - width: auto !important -} - -.h-25 { - height: 25% !important -} - -.h-50 { - height: 50% !important -} - -.h-75 { - height: 75% !important -} - -.h-100 { - height: 100% !important -} - -.h-auto { - height: auto !important -} - -.mw-100 { - max-width: 100% !important -} - -.mh-100 { - max-height: 100% !important -} - -.min-vw-100 { - min-width: 100vw !important -} - -.min-vh-100 { - min-height: 100vh !important -} - -.vw-100 { - width: 100vw !important -} - -.vh-100 { - height: 100vh !important -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: '.5'; - background-color: rgba(0, 0, 0, 0) -} - -.m-0 { - margin: 0 !important -} - -.mt-0, -.my-0 { - margin-top: 0 !important -} - -.mr-0, -.mx-0 { - margin-right: 0 !important -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important -} - -.ml-0, -.mx-0 { - margin-left: 0 !important -} - -.m-1 { - margin: .25rem !important -} - -.mt-1, -.my-1 { - margin-top: .25rem !important -} - -.mr-1, -.mx-1 { - margin-right: .25rem !important -} - -.mb-1, -.my-1 { - margin-bottom: .25rem !important -} - -.ml-1, -.mx-1 { - margin-left: .25rem !important -} - -.m-2 { - margin: .5rem !important -} - -.mt-2, -.my-2 { - margin-top: .5rem !important -} - -.mr-2, -.mx-2 { - margin-right: .5rem !important -} - -.mb-2, -.my-2 { - margin-bottom: .5rem !important -} - -.ml-2, -.mx-2 { - margin-left: .5rem !important -} - -.m-3 { - margin: 1rem !important -} - -.mt-3, -.my-3 { - margin-top: 1rem !important -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important -} - -.m-4 { - margin: 1.5rem !important -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important -} - -.m-5 { - margin: 3rem !important -} - -.mt-5, -.my-5 { - margin-top: 3rem !important -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important -} - -.p-0 { - padding: 0 !important -} - -.pt-0, -.py-0 { - padding-top: 0 !important -} - -.pr-0, -.px-0 { - padding-right: 0 !important -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important -} - -.pl-0, -.px-0 { - padding-left: 0 !important -} - -.p-1 { - padding: .25rem !important -} - -.pt-1, -.py-1 { - padding-top: .25rem !important -} - -.pr-1, -.px-1 { - padding-right: .25rem !important -} - -.pb-1, -.py-1 { - padding-bottom: .25rem !important -} - -.pl-1, -.px-1 { - padding-left: .25rem !important -} - -.p-2 { - padding: .5rem !important -} - -.pt-2, -.py-2 { - padding-top: .5rem !important -} - -.pr-2, -.px-2 { - padding-right: .5rem !important -} - -.pb-2, -.py-2 { - padding-bottom: .5rem !important -} - -.pl-2, -.px-2 { - padding-left: .5rem !important -} - -.p-3 { - padding: 1rem !important -} - -.pt-3, -.py-3 { - padding-top: 1rem !important -} - -.pr-3, -.px-3 { - padding-right: 1rem !important -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important -} - -.pl-3, -.px-3 { - padding-left: 1rem !important -} - -.p-4 { - padding: 1.5rem !important -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important -} - -.p-5 { - padding: 3rem !important -} - -.pt-5, -.py-5 { - padding-top: 3rem !important -} - -.pr-5, -.px-5 { - padding-right: 3rem !important -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important -} - -.pl-5, -.px-5 { - padding-left: 3rem !important -} - -.m-n1 { - margin: -.25rem !important -} - -.mt-n1, -.my-n1 { - margin-top: -.25rem !important -} - -.mr-n1, -.mx-n1 { - margin-right: -.25rem !important -} - -.mb-n1, -.my-n1 { - margin-bottom: -.25rem !important -} - -.ml-n1, -.mx-n1 { - margin-left: -.25rem !important -} - -.m-n2 { - margin: -.5rem !important -} - -.mt-n2, -.my-n2 { - margin-top: -.5rem !important -} - -.mr-n2, -.mx-n2 { - margin-right: -.5rem !important -} - -.mb-n2, -.my-n2 { - margin-bottom: -.5rem !important -} - -.ml-n2, -.mx-n2 { - margin-left: -.5rem !important -} - -.m-n3 { - margin: -1rem !important -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important -} - -.m-n4 { - margin: -1.5rem !important -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important -} - -.m-n5 { - margin: -3rem !important -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important -} - -.m-auto { - margin: auto !important -} - -.mt-auto, -.my-auto { - margin-top: auto !important -} - -.mr-auto, -.mx-auto { - margin-right: auto !important -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important -} - -.ml-auto, -.mx-auto { - margin-left: auto !important -} - -@media (min-width:576px) { - .m-sm-0 { - margin: 0 !important - } - - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important - } - - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important - } - - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important - } - - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important - } - - .m-sm-1 { - margin: .25rem !important - } - - .mt-sm-1, - .my-sm-1 { - margin-top: .25rem !important - } - - .mr-sm-1, - .mx-sm-1 { - margin-right: .25rem !important - } - - .mb-sm-1, - .my-sm-1 { - margin-bottom: .25rem !important - } - - .ml-sm-1, - .mx-sm-1 { - margin-left: .25rem !important - } - - .m-sm-2 { - margin: .5rem !important - } - - .mt-sm-2, - .my-sm-2 { - margin-top: .5rem !important - } - - .mr-sm-2, - .mx-sm-2 { - margin-right: .5rem !important - } - - .mb-sm-2, - .my-sm-2 { - margin-bottom: .5rem !important - } - - .ml-sm-2, - .mx-sm-2 { - margin-left: .5rem !important - } - - .m-sm-3 { - margin: 1rem !important - } - - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important - } - - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important - } - - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important - } - - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important - } - - .m-sm-4 { - margin: 1.5rem !important - } - - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important - } - - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important - } - - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important - } - - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important - } - - .m-sm-5 { - margin: 3rem !important - } - - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important - } - - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important - } - - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important - } - - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important - } - - .p-sm-0 { - padding: 0 !important - } - - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important - } - - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important - } - - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important - } - - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important - } - - .p-sm-1 { - padding: .25rem !important - } - - .pt-sm-1, - .py-sm-1 { - padding-top: .25rem !important - } - - .pr-sm-1, - .px-sm-1 { - padding-right: .25rem !important - } - - .pb-sm-1, - .py-sm-1 { - padding-bottom: .25rem !important - } - - .pl-sm-1, - .px-sm-1 { - padding-left: .25rem !important - } - - .p-sm-2 { - padding: .5rem !important - } - - .pt-sm-2, - .py-sm-2 { - padding-top: .5rem !important - } - - .pr-sm-2, - .px-sm-2 { - padding-right: .5rem !important - } - - .pb-sm-2, - .py-sm-2 { - padding-bottom: .5rem !important - } - - .pl-sm-2, - .px-sm-2 { - padding-left: .5rem !important - } - - .p-sm-3 { - padding: 1rem !important - } - - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important - } - - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important - } - - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important - } - - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important - } - - .p-sm-4 { - padding: 1.5rem !important - } - - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important - } - - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important - } - - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important - } - - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important - } - - .p-sm-5 { - padding: 3rem !important - } - - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important - } - - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important - } - - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important - } - - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important - } - - .m-sm-n1 { - margin: -.25rem !important - } - - .mt-sm-n1, - .my-sm-n1 { - margin-top: -.25rem !important - } - - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -.25rem !important - } - - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -.25rem !important - } - - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -.25rem !important - } - - .m-sm-n2 { - margin: -.5rem !important - } - - .mt-sm-n2, - .my-sm-n2 { - margin-top: -.5rem !important - } - - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -.5rem !important - } - - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -.5rem !important - } - - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -.5rem !important - } - - .m-sm-n3 { - margin: -1rem !important - } - - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important - } - - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important - } - - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important - } - - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important - } - - .m-sm-n4 { - margin: -1.5rem !important - } - - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important - } - - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important - } - - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important - } - - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important - } - - .m-sm-n5 { - margin: -3rem !important - } - - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important - } - - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important - } - - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important - } - - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important - } - - .m-sm-auto { - margin: auto !important - } - - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important - } - - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important - } - - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important - } - - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important - } - -} - -@media (min-width:768px) { - .m-md-0 { - margin: 0 !important - } - - .mt-md-0, - .my-md-0 { - margin-top: 0 !important - } - - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important - } - - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important - } - - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important - } - - .m-md-1 { - margin: .25rem !important - } - - .mt-md-1, - .my-md-1 { - margin-top: .25rem !important - } - - .mr-md-1, - .mx-md-1 { - margin-right: .25rem !important - } - - .mb-md-1, - .my-md-1 { - margin-bottom: .25rem !important - } - - .ml-md-1, - .mx-md-1 { - margin-left: .25rem !important - } - - .m-md-2 { - margin: .5rem !important - } - - .mt-md-2, - .my-md-2 { - margin-top: .5rem !important - } - - .mr-md-2, - .mx-md-2 { - margin-right: .5rem !important - } - - .mb-md-2, - .my-md-2 { - margin-bottom: .5rem !important - } - - .ml-md-2, - .mx-md-2 { - margin-left: .5rem !important - } - - .m-md-3 { - margin: 1rem !important - } - - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important - } - - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important - } - - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important - } - - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important - } - - .m-md-4 { - margin: 1.5rem !important - } - - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important - } - - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important - } - - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important - } - - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important - } - - .m-md-5 { - margin: 3rem !important - } - - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important - } - - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important - } - - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important - } - - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important - } - - .p-md-0 { - padding: 0 !important - } - - .pt-md-0, - .py-md-0 { - padding-top: 0 !important - } - - .pr-md-0, - .px-md-0 { - padding-right: 0 !important - } - - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important - } - - .pl-md-0, - .px-md-0 { - padding-left: 0 !important - } - - .p-md-1 { - padding: .25rem !important - } - - .pt-md-1, - .py-md-1 { - padding-top: .25rem !important - } - - .pr-md-1, - .px-md-1 { - padding-right: .25rem !important - } - - .pb-md-1, - .py-md-1 { - padding-bottom: .25rem !important - } - - .pl-md-1, - .px-md-1 { - padding-left: .25rem !important - } - - .p-md-2 { - padding: .5rem !important - } - - .pt-md-2, - .py-md-2 { - padding-top: .5rem !important - } - - .pr-md-2, - .px-md-2 { - padding-right: .5rem !important - } - - .pb-md-2, - .py-md-2 { - padding-bottom: .5rem !important - } - - .pl-md-2, - .px-md-2 { - padding-left: .5rem !important - } - - .p-md-3 { - padding: 1rem !important - } - - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important - } - - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important - } - - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important - } - - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important - } - - .p-md-4 { - padding: 1.5rem !important - } - - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important - } - - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important - } - - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important - } - - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important - } - - .p-md-5 { - padding: 3rem !important - } - - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important - } - - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important - } - - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important - } - - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important - } - - .m-md-n1 { - margin: -.25rem !important - } - - .mt-md-n1, - .my-md-n1 { - margin-top: -.25rem !important - } - - .mr-md-n1, - .mx-md-n1 { - margin-right: -.25rem !important - } - - .mb-md-n1, - .my-md-n1 { - margin-bottom: -.25rem !important - } - - .ml-md-n1, - .mx-md-n1 { - margin-left: -.25rem !important - } - - .m-md-n2 { - margin: -.5rem !important - } - - .mt-md-n2, - .my-md-n2 { - margin-top: -.5rem !important - } - - .mr-md-n2, - .mx-md-n2 { - margin-right: -.5rem !important - } - - .mb-md-n2, - .my-md-n2 { - margin-bottom: -.5rem !important - } - - .ml-md-n2, - .mx-md-n2 { - margin-left: -.5rem !important - } - - .m-md-n3 { - margin: -1rem !important - } - - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important - } - - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important - } - - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important - } - - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important - } - - .m-md-n4 { - margin: -1.5rem !important - } - - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important - } - - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important - } - - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important - } - - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important - } - - .m-md-n5 { - margin: -3rem !important - } - - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important - } - - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important - } - - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important - } - - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important - } - - .m-md-auto { - margin: auto !important - } - - .mt-md-auto, - .my-md-auto { - margin-top: auto !important - } - - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important - } - - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important - } - - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important - } - -} - -@media (min-width:992px) { - .m-lg-0 { - margin: 0 !important - } - - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important - } - - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important - } - - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important - } - - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important - } - - .m-lg-1 { - margin: .25rem !important - } - - .mt-lg-1, - .my-lg-1 { - margin-top: .25rem !important - } - - .mr-lg-1, - .mx-lg-1 { - margin-right: .25rem !important - } - - .mb-lg-1, - .my-lg-1 { - margin-bottom: .25rem !important - } - - .ml-lg-1, - .mx-lg-1 { - margin-left: .25rem !important - } - - .m-lg-2 { - margin: .5rem !important - } - - .mt-lg-2, - .my-lg-2 { - margin-top: .5rem !important - } - - .mr-lg-2, - .mx-lg-2 { - margin-right: .5rem !important - } - - .mb-lg-2, - .my-lg-2 { - margin-bottom: .5rem !important - } - - .ml-lg-2, - .mx-lg-2 { - margin-left: .5rem !important - } - - .m-lg-3 { - margin: 1rem !important - } - - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important - } - - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important - } - - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important - } - - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important - } - - .m-lg-4 { - margin: 1.5rem !important - } - - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important - } - - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important - } - - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important - } - - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important - } - - .m-lg-5 { - margin: 3rem !important - } - - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important - } - - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important - } - - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important - } - - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important - } - - .p-lg-0 { - padding: 0 !important - } - - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important - } - - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important - } - - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important - } - - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important - } - - .p-lg-1 { - padding: .25rem !important - } - - .pt-lg-1, - .py-lg-1 { - padding-top: .25rem !important - } - - .pr-lg-1, - .px-lg-1 { - padding-right: .25rem !important - } - - .pb-lg-1, - .py-lg-1 { - padding-bottom: .25rem !important - } - - .pl-lg-1, - .px-lg-1 { - padding-left: .25rem !important - } - - .p-lg-2 { - padding: .5rem !important - } - - .pt-lg-2, - .py-lg-2 { - padding-top: .5rem !important - } - - .pr-lg-2, - .px-lg-2 { - padding-right: .5rem !important - } - - .pb-lg-2, - .py-lg-2 { - padding-bottom: .5rem !important - } - - .pl-lg-2, - .px-lg-2 { - padding-left: .5rem !important - } - - .p-lg-3 { - padding: 1rem !important - } - - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important - } - - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important - } - - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important - } - - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important - } - - .p-lg-4 { - padding: 1.5rem !important - } - - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important - } - - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important - } - - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important - } - - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important - } - - .p-lg-5 { - padding: 3rem !important - } - - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important - } - - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important - } - - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important - } - - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important - } - - .m-lg-n1 { - margin: -.25rem !important - } - - .mt-lg-n1, - .my-lg-n1 { - margin-top: -.25rem !important - } - - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -.25rem !important - } - - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -.25rem !important - } - - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -.25rem !important - } - - .m-lg-n2 { - margin: -.5rem !important - } - - .mt-lg-n2, - .my-lg-n2 { - margin-top: -.5rem !important - } - - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -.5rem !important - } - - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -.5rem !important - } - - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -.5rem !important - } - - .m-lg-n3 { - margin: -1rem !important - } - - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important - } - - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important - } - - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important - } - - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important - } - - .m-lg-n4 { - margin: -1.5rem !important - } - - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important - } - - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important - } - - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important - } - - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important - } - - .m-lg-n5 { - margin: -3rem !important - } - - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important - } - - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important - } - - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important - } - - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important - } - - .m-lg-auto { - margin: auto !important - } - - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important - } - - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important - } - - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important - } - - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important - } - -} - -@media (min-width:1200px) { - .m-xl-0 { - margin: 0 !important - } - - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important - } - - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important - } - - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important - } - - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important - } - - .m-xl-1 { - margin: .25rem !important - } - - .mt-xl-1, - .my-xl-1 { - margin-top: .25rem !important - } - - .mr-xl-1, - .mx-xl-1 { - margin-right: .25rem !important - } - - .mb-xl-1, - .my-xl-1 { - margin-bottom: .25rem !important - } - - .ml-xl-1, - .mx-xl-1 { - margin-left: .25rem !important - } - - .m-xl-2 { - margin: .5rem !important - } - - .mt-xl-2, - .my-xl-2 { - margin-top: .5rem !important - } - - .mr-xl-2, - .mx-xl-2 { - margin-right: .5rem !important - } - - .mb-xl-2, - .my-xl-2 { - margin-bottom: .5rem !important - } - - .ml-xl-2, - .mx-xl-2 { - margin-left: .5rem !important - } - - .m-xl-3 { - margin: 1rem !important - } - - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important - } - - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important - } - - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important - } - - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important - } - - .m-xl-4 { - margin: 1.5rem !important - } - - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important - } - - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important - } - - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important - } - - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important - } - - .m-xl-5 { - margin: 3rem !important - } - - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important - } - - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important - } - - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important - } - - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important - } - - .p-xl-0 { - padding: 0 !important - } - - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important - } - - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important - } - - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important - } - - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important - } - - .p-xl-1 { - padding: .25rem !important - } - - .pt-xl-1, - .py-xl-1 { - padding-top: .25rem !important - } - - .pr-xl-1, - .px-xl-1 { - padding-right: .25rem !important - } - - .pb-xl-1, - .py-xl-1 { - padding-bottom: .25rem !important - } - - .pl-xl-1, - .px-xl-1 { - padding-left: .25rem !important - } - - .p-xl-2 { - padding: .5rem !important - } - - .pt-xl-2, - .py-xl-2 { - padding-top: .5rem !important - } - - .pr-xl-2, - .px-xl-2 { - padding-right: .5rem !important - } - - .pb-xl-2, - .py-xl-2 { - padding-bottom: .5rem !important - } - - .pl-xl-2, - .px-xl-2 { - padding-left: .5rem !important - } - - .p-xl-3 { - padding: 1rem !important - } - - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important - } - - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important - } - - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important - } - - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important - } - - .p-xl-4 { - padding: 1.5rem !important - } - - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important - } - - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important - } - - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important - } - - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important - } - - .p-xl-5 { - padding: 3rem !important - } - - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important - } - - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important - } - - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important - } - - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important - } - - .m-xl-n1 { - margin: -.25rem !important - } - - .mt-xl-n1, - .my-xl-n1 { - margin-top: -.25rem !important - } - - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -.25rem !important - } - - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -.25rem !important - } - - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -.25rem !important - } - - .m-xl-n2 { - margin: -.5rem !important - } - - .mt-xl-n2, - .my-xl-n2 { - margin-top: -.5rem !important - } - - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -.5rem !important - } - - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -.5rem !important - } - - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -.5rem !important - } - - .m-xl-n3 { - margin: -1rem !important - } - - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important - } - - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important - } - - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important - } - - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important - } - - .m-xl-n4 { - margin: -1.5rem !important - } - - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important - } - - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important - } - - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important - } - - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important - } - - .m-xl-n5 { - margin: -3rem !important - } - - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important - } - - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important - } - - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important - } - - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important - } - - .m-xl-auto { - margin: auto !important - } - - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important - } - - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important - } - - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important - } - - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important - } - -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important -} - -.text-justify { - text-align: justify !important -} - -.text-wrap { - white-space: normal !important -} - -.text-nowrap { - white-space: nowrap !important -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} - -.text-left { - text-align: left !important -} - -.text-right { - text-align: right !important -} - -.text-center { - text-align: center !important -} - -@media (min-width:576px) { - .text-sm-left { - text-align: left !important - } - - .text-sm-right { - text-align: right !important - } - - .text-sm-center { - text-align: center !important - } - -} - -@media (min-width:768px) { - .text-md-left { - text-align: left !important - } - - .text-md-right { - text-align: right !important - } - - .text-md-center { - text-align: center !important - } - -} - -@media (min-width:992px) { - .text-lg-left { - text-align: left !important - } - - .text-lg-right { - text-align: right !important - } - - .text-lg-center { - text-align: center !important - } - -} - -@media (min-width:1200px) { - .text-xl-left { - text-align: left !important - } - - .text-xl-right { - text-align: right !important - } - - .text-xl-center { - text-align: center !important - } - -} - -.text-lowercase { - text-transform: lowercase !important -} - -.text-uppercase { - text-transform: uppercase !important -} - -.text-capitalize { - text-transform: capitalize !important -} - -.font-weight-light { - font-weight: 300 !important -} - -.font-weight-lighter { - font-weight: lighter !important -} - -.font-weight-normal { - font-weight: 400 !important -} - -.font-weight-bold { - font-weight: 700 !important -} - -.font-weight-bolder { - font-weight: bolder !important -} - -.font-italic { - font-style: italic !important -} - -.text-white { - color: #fff !important -} - -.text-primary { - color: #047006 !important -} - -a.text-primary:focus, -a.text-primary:hover { - color: #012602 !important -} - -.text-secondary { - color: grey !important -} - -a.text-secondary:focus, -a.text-secondary:hover { - color: #5a5a5a !important -} - -.text-success { - color: #00e093 !important -} - -a.text-success:focus, -a.text-success:hover { - color: #009461 !important -} - -.text-info { - color: #6c61f6 !important -} - -a.text-info:focus, -a.text-info:hover { - color: #2919f2 !important -} - -.text-warning { - color: #f0825f !important -} - -a.text-warning:focus, -a.text-warning:hover { - color: #e94b19 !important -} - -.text-danger { - color: #ff5f66 !important -} - -a.text-danger:focus, -a.text-danger:hover { - color: #ff131d !important -} - -.text-light { - color: #dfdfdf !important -} - -a.text-light:focus, -a.text-light:hover { - color: #b9b9b9 !important -} - -.text-dark { - color: #74767b !important -} - -a.text-dark:focus, -a.text-dark:hover { - color: #4f5054 !important -} - -.text-white { - color: #fff !important -} - -a.text-white:focus, -a.text-white:hover { - color: #d9d9d9 !important -} - -.text-orange { - color: #ffa600 !important -} - -a.text-orange:focus, -a.text-orange:hover { - color: #b37400 !important -} - -.text-body { - color: #212529 !important -} - -.text-muted { - color: #adb5bd !important -} - -.text-black-50 { - color: rgba(0, 0, 0, .5) !important -} - -.text-white-50 { - color: rgba(255, 255, 255, .5) !important -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0 -} - -.text-decoration-none { - text-decoration: none !important -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important -} - -.text-reset { - color: inherit !important -} - -.visible { - visibility: visible !important -} - -.invisible { - visibility: hidden !important -} - -@media print { - *, - ::after, - ::before { - text-shadow: none !important; - box-shadow: none !important - } - - a:not(.btn) { - text-decoration: underline - } - - abbr[title]::after { - content: '3'attr(title) ")" - } - - pre { - white-space: pre-wrap !important - } - - blockquote, - pre { - border: 1px solid #adb5bd; - page-break-inside: avoid - } - - thead { - display: table-header-group - } - - img, - tr { - page-break-inside: avoid - } - - h2, - h3, - p { - orphans: 3; - widows: 3 - } - - h2, - h3 { - page-break-after: avoid - } - - @page { - size: a3 - } - - body { - min-width: 992px !important - } - - .container { - min-width: 992px !important - } - - .navbar { - display: none - } - - .badge { - border: 1px solid #000 - } - - .table { - border-collapse: collapse !important - } - - .table td, - .table th { - background-color: #fff !important - } - - .table-bordered td, - .table-bordered th { - border: 1px solid #dee2e6 !important - } - - .table-dark { - color: inherit - } - - .table-dark tbody+tbody, - .table-dark td, - .table-dark th, - .table-dark thead th { - border-color: #f2f4f9 - } - - .table .thead-dark th { - color: inherit; - border-color: #f2f4f9 - } - -} - -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; - z-index: 120 -} - -.versionstring { - top: 70px; - right: 8px; - left: auto -} - -.grd-time-used { - bottom: 0 -} - -footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 2rem 2.5rem; - max-width: 1140px; - margin-left: auto; - margin-right: auto -} - -@media (max-width:991.98px) { - footer { - padding: 20px 0 30px 0 - } - -} - -footer ul { - margin-left: 0; - padding-left: 0 -} - -footer ul li { - display: inline-block; - padding: 0 10px 0 0; - line-height: 1 -} - -footer ul li:not(:last-child) { - margin-right: 10px; - border-right: 1px solid #f2f4f9 -} - -footer ul li a { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem; - color: #565656 -} - -@media (min-width:768px) and (max-width:991px) { - footer ul li a { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - footer ul li a { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - footer ul li a { - font-size: 13px - } - -} - -.alert { - border: none; - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400 -} - -@media (min-width:768px) and (max-width:991px) { - .alert { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .alert { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .alert { - font-size: 14px - } - -} - -.alert .alert-heading { - margin-top: 20px; - margin-bottom: 10px -} - -.alert .btn-dismmiss { - margin-top: 20px -} - -.alert.dismissible-alert { - position: relative; - padding-right: 40px -} - -.alert.dismissible-alert .alert-close { - position: absolute; - top: 0; - right: 0; - bottom: 0; - padding: 10px; - font-size: 18px; - display: -webkit-box; - display: flex; - cursor: pointer; - height: inherit; - -webkit-box-align: center; - align-items: center -} - -.alert-notification-wrapper { - position: fixed; - left: 17rem; - right: 0; - z-index: 999 -} - -@media (max-width:991.98px) { - .alert-notification-wrapper { - left: 0 - } - -} - -.alert-notification-wrapper.top { - top: 70px -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter { - border: 2px solid #55acee; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i { - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook { - border: 2px solid #0084ff; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i { - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google { - border: 2px solid #dd4b39; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google i { - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin { - border: 2px solid #0077b5; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i { - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest { - border: 2px solid #bd081c; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i { - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube { - border: 2px solid #cd201f; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i { - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github { - border: 2px solid #333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github i { - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance { - border: 2px solid #0454f6; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i { - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble { - border: 2px solid #ea4c89; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i { - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit { - border: 2px solid #ed4333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i { - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram { - border: 2px solid #ff759b; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i { - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-inverse-primary { - background: rgba(4, 112, 6, .15); - color: #047006 -} - -.btn-inverse-primary i { - color: inherit -} - -.btn-inverse-primary:hover { - background: rgba(4, 112, 6, .8); - color: #fff -} - -.btn-inverse-secondary { - background: rgba(128, 128, 128, .15); - color: grey -} - -.btn-inverse-secondary i { - color: inherit -} - -.btn-inverse-secondary:hover { - background: rgba(128, 128, 128, .8); - color: #fff -} - -.btn-inverse-success { - background: rgba(0, 224, 147, .15); - color: #00e093 -} - -.btn-inverse-success i { - color: inherit -} - -.btn-inverse-success:hover { - background: rgba(0, 224, 147, .8); - color: #fff -} - -.btn-inverse-info { - background: rgba(108, 97, 246, .15); - color: #6c61f6 -} - -.btn-inverse-info i { - color: inherit -} - -.btn-inverse-info:hover { - background: rgba(108, 97, 246, .8); - color: #fff -} - -.btn-inverse-warning { - background: rgba(240, 130, 95, .15); - color: #f0825f -} - -.btn-inverse-warning i { - color: inherit -} - -.btn-inverse-warning:hover { - background: rgba(240, 130, 95, .8); - color: #fff -} - -.btn-inverse-danger { - background: rgba(255, 95, 102, .15); - color: #ff5f66 -} - -.btn-inverse-danger i { - color: inherit -} - -.btn-inverse-danger:hover { - background: rgba(255, 95, 102, .8); - color: #fff -} - -.btn-inverse-light { - background: rgba(223, 223, 223, .15); - color: #dfdfdf -} - -.btn-inverse-light i { - color: inherit -} - -.btn-inverse-light:hover { - background: rgba(223, 223, 223, .8); - color: #fff -} - -.btn-inverse-dark { - background: rgba(116, 118, 123, .15); - color: #74767b -} - -.btn-inverse-dark i { - color: inherit -} - -.btn-inverse-dark:hover { - background: rgba(116, 118, 123, .8); - color: #fff -} - -.btn-inverse-white { - background: rgba(255, 255, 255, .15); - color: #fff -} - -.btn-inverse-white i { - color: inherit -} - -.btn-inverse-white:hover { - background: rgba(255, 255, 255, .8); - color: #fff -} - -.btn-inverse-orange { - background: rgba(255, 166, 0, .15); - color: #ffa600 -} - -.btn-inverse-orange i { - color: inherit -} - -.btn-inverse-orange:hover { - background: rgba(255, 166, 0, .8); - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter { - background: #55acee; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter:hover { - background: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-facebook { - background: #0084ff; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-facebook:hover { - background: #006acc -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-btn-outlined).btn-google { - background: #dd4b39; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-google:hover { - background: #c23321 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-btn-outlined).btn-linkedin { - background: #0077b5; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-linkedin:hover { - background: #005582 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-btn-outlined).btn-pinterest { - background: #bd081c; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-pinterest:hover { - background: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-youtube { - background: #cd201f; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-youtube:hover { - background: #a11918 -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-btn-outlined).btn-github { - background: #333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-github:hover { - background: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-btn-outlined).btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-behance { - background: #0454f6; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-behance:hover { - background: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-dribbble { - background: #ea4c89; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-dribbble:hover { - background: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-reddit { - background: #ed4333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-reddit:hover { - background: #da2413 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-btn-outlined).btn-instagram { - background: #ff759b; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-instagram:hover { - background: #ff4276 -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active { - background: #000e01 -} - -.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active { - background: #4d4d4d -} - -.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active { - background: #007a50 -} - -.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active { - background: #1d0de4 -} - -.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active { - background: #d54314 -} - -.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active { - background: #f8000b -} - -.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active { - background: #acacac -} - -.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active { - background: #424447 -} - -.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active { - background: #ccc -} - -.btn-group label.btn.btn-orange:not(:disabled):not(.disabled).active { - background: #996400 -} - -.btn-outline-primary { - border: 2px solid #047006 -} - -.btn-outline-secondary { - border: 2px solid grey -} - -.btn-outline-success { - border: 2px solid #00e093 -} - -.btn-outline-info { - border: 2px solid #6c61f6 -} - -.btn-outline-warning { - border: 2px solid #f0825f -} - -.btn-outline-danger { - border: 2px solid #ff5f66 -} - -.btn-outline-light { - border: 2px solid #dfdfdf -} - -.btn-outline-dark { - border: 2px solid #74767b -} - -.btn-outline-white { - border: 2px solid #fff -} - -.btn-outline-orange { - border: 2px solid #ffa600 -} - -.btn-group label.btn input { - display: none -} - -.btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - -webkit-transition: .3s ease; - transition: .3s ease; - -webkit-transition-property: background, color; - transition-property: background, color; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 600; - letter-spacing: .03rem -} - -.btn:not([class*=btn-inverse]):not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.btn i { - font-size: 1.25rem -} - -.btn-group-lg>.btn, -.btn.btn-lg { - height: 55px; - max-height: 55px; - padding: 15px 30px; - font-size: 1.125rem -} - -.btn-group-sm>.btn, -.btn.btn-sm { - height: 35px; - max-height: 35px; - padding: 4px 15px; - font-size: .875rem -} - -.btn.btn-xs { - height: 25px; - max-height: 25px; - padding: 0 10px; - line-height: 1; - font-size: .75rem -} - -.btn.btn-xs.has-icon i, -.btn.btn-xs.has-icon span { - font-size: .8125rem; - margin-right: 5px -} - -.btn { - height: 40px; - max-height: 40px; - padding: 5px 20px -} - -.btn.active { - box-shadow: none -} - -.btn.social-icon-btn { - height: 40px; - width: 40px -} - -.btn.social-btn i { - margin-right: 10px -} - -.btn.social-btn-outlined i { - margin-right: 10px -} - -.btn.has-icon i, -.btn.has-icon span { - font-size: 1.25rem; - margin-right: 10px; - line-height: 1 -} - -.btn.btn-outline-secondary { - color: #1a1a1a; - border-color: #676767 -} - -.btn.btn-info, -.btn.btn-warning { - color: #fff -} - -.btn.btn-light { - background: #fff; - color: #000 -} - -.btn.dropdown-dotted-list { - background: #fff -} - -.btn.dropdown-toggle-split { - padding: 0 8px -} - -.btn.action-btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - padding: 0; - height: 40px; - width: 40px -} - -.btn.action-btn i { - font-size: 1.25rem; - width: 26px; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - line-height: 23px; - vertical-align: middle; - font-size: 1.25rem -} - -.btn.action-btn i:before { - width: inherit; - height: inherit; - line-height: inherit; - font-size: inherit -} - -.btn.action-btn.btn-xs { - height: 30px; - width: 30px -} - -.btn-group-sm>.btn.action-btn, -.btn.action-btn.btn-sm { - height: 35px; - width: 35px -} - -.btn-group-lg>.btn.action-btn, -.btn.action-btn.btn-lg { - height: 50px; - width: 50px -} - -.btn-group-lg>.btn.action-btn i, -.btn.action-btn.btn-lg i { - font-size: 1.875rem; - line-height: 24px -} - -.btn.action-btn.btn-refresh.clicked i { - color: #047006; - -webkit-animation: rotate360 .8s linear infinite; - animation: rotate360 .8s linear infinite -} - -.btn.action-btn.btn-like.clicked i { - color: #ff5f66; - -webkit-animation: bounceIn .8s linear 1; - animation: bounceIn .8s linear 1 -} - -.btn.action-btn.btn-like.clicked:hover i { - color: #fff -} - -.btn.btn-rounded { - border-radius: 50px -} - -.flag-germany { - width: 40px; - height: 28px; - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - display: block -} - -.flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - display: block -} - -.language-active { - background-color: #f9fafb; - padding: 2px -} - -.language-inactive { - padding: 2px; - background-color: transparent -} - -.is-invalid .form-control { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.is-invalid .invalid-feedback { - display: block -} - -.is-valid .form-control { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.form-control { - padding-left: 20px; - padding-right: 20px; - color: rgba(16, 16, 16, .8) -} - -.form-control.placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-ms-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-webkit-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control.is-invalid { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.form-control.is-valid { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.input-group-text { - background-color: #f6f7f9; - color: #101010; - border-color: #f2f4f9; - padding: 0 10px; - font-size: 17px -} - -.is-valid .input-group-text { - background-color: rgba(4, 112, 6, .2); - color: #047006 -} - -.is-invalid .input-group-text { - background-color: rgba(240, 130, 95, .2); - color: #f0825f -} - -.form-group { - margin-bottom: 20px -} - -.form-group.input-rounded .form-control { - border-radius: 25px -} - -.custom-file .custom-file-label { - padding: 8px .75rem; - height: 41px -} - -.custom-file .custom-file-label:after { - padding: 1.45rem .8rem; - line-height: 0 -} - -.custom-select, -.custom-select[multiple] { - background: #f6f7f9; - border-color: #f0f2f5; - color: rgba(16, 16, 16, .8) -} - -.custom-select option, -.custom-select[multiple] option { - background: #f6f7f9; - color: rgba(16, 16, 16, .8); - display: block; - border-bottom: 1px solid #f2f4f9; - padding: 5px 10px -} - -.custom-select option:checked, -.custom-select[multiple] option:checked { - background: #f6f7f9 -} - -.custom-select option[selected], -.custom-select[multiple] option[selected] { - background: #f6f7f9; - display: block -} - -.custom-select[multiple] { - padding: 0; - border-radius: 2px -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: none -} - -.custom-switch .custom-control-label::after { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - background: #047006 -} - -.checkbox, -.radio { - position: relative; - display: block; - margin-top: 2px; - margin-bottom: 20px -} - -.checkbox label, -.radio label { - display: block; - padding-left: 30px; - line-height: 1.42857143; - font-size: .875rem -} - -.checkbox label input, -.radio label input { - position: absolute; - margin-left: -20px; - margin-top: 4px\9; - top: 0; - left: 0; - margin-left: 0 !important; - z-index: 1; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); - margin-top: 0 -} - -.checkbox label input:checked+.input-frame:before, -.radio label input:checked+.input-frame:before { - background-color: #fff -} - -.checkbox label input:checked+.input-frame:after, -.radio label input:checked+.input-frame:after { - color: #047006; - opacity: 1; - line-height: 1.5; - filter: alpha(opacity=100); - -webkit-transform: scale(1); - transform: scale(1) -} - -.checkbox label input:disabled+.input-frame:before, -.radio label input:disabled+.input-frame:before { - border-color: #fff -} - -.checkbox label input:disabled:checked+.input-frame:before, -.radio label input:disabled:checked+.input-frame:before { - background: #047006 -} - -.checkbox label .input-frame:before, -.radio label .input-frame:before { - position: absolute; - content: '.5'; - top: 0; - width: 19px; - height: 19px; - border-radius: 2px; - left: 0; - border: 2px solid #f2f4f9; - -webkit-transition: all; - transition: all; - -webkit-transition-duration: 250ms; - transition-duration: 250ms -} - -.checkbox label .input-frame:after, -.radio label .input-frame:after { - line-height: 1.5; - -webkit-transition: all; - transition: all; - -webkit-transition-duration: 250ms; - transition-duration: 250ms; - font-family: Material Design Icons; - opacity: 0; - filter: alpha(opacity=0); - -webkit-transform: scale(0); - transform: scale(0); - content: '3'; - position: absolute; - font-size: .9375rem; - left: 1px; - top: -2px; - color: #fff -} - -.checkbox label { - font-size: 16; - line-height: 1.5; - padding-left: 30px -} - -.checkbox label input:checked+.input-helper:before { - background-color: #fff -} - -.checkbox label input:checked+.input-helper:after { - width: 18px; - opacity: 1; - line-height: 18px; - filter: alpha(opacity=100); - -webkit-transform: scale(1); - transform: scale(1) -} - -.checkbox label input:disabled+.input-helper:before { - border-color: #f2f4f9 -} - -.checkbox label input:disabled:checked+.input-helper:after { - color: #f2f4f9 -} - -.checkbox label .input-frame:before { - position: absolute; - content: '3'; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - width: 18px; - height: 18px; - border-radius: 2px; - left: 0; - border: 2px solid #f2f4f9; - -webkit-transition: all; - transition: all; - transition-duration: 0s; - -webkit-transition-duration: 250ms; - transition-duration: 250ms -} - -.rtl .checkbox label .input-frame:before { - left: auto; - right: 0 -} - -.checkbox label .input-frame:after { - -webkit-transition: all; - transition: all; - transition-duration: 0s; - -webkit-transition-duration: 250ms; - transition-duration: 250ms; - font-family: Material Design Icons; - opacity: 0; - filter: alpha(opacity=0); - -webkit-transform: scale(0); - transform: scale(0); - content: '.5'; - position: absolute; - font-size: 15px; - font-weight: 700; - left: 0; - top: 0; - -webkit-transform: translateY(-14%); - transform: translateY(-14%); - color: #047006 -} - -.rtl .checkbox label .input-frame:after { - left: auto; - right: 0 -} - -.radio label input:checked+.input-frame:before { - background-color: #fff -} - -.radio label input:checked:disabled+.input-frame:before { - background-color: #fff; - border-color: #fff -} - -.radio label input:checked:disabled+.input-frame:after { - background-color: #047006 -} - -.radio label .input-frame:before { - border-radius: 50% -} - -.radio label .input-frame:after { - content: 'http://www.w3.org/2000/svg'; - width: 9px; - height: 9px; - background: #047006; - border-radius: 50%; - top: 5px; - left: 5px; - -webkit-transform: scale(0); - transform: scale(0) -} - -.form-inline .checkbox, -.form-inline .radio { - margin-right: 30px -} - -.form-inline .checkbox:last-child, -.form-inline .radio:last-child { - margin-right: 0 -} - -.form-inline .form-check-input { - display: none -} - -.bootstrap-tagsinput { - background: #f6f7f9; - border-color: #f0f2f5; - box-shadow: none; - min-width: 100%; - width: 100%; - max-width: 100% -} - -.bootstrap-tagsinput .tag { - display: inline-block; - background: #047006; - color: #fff; - padding: 2px 9px; - border-radius: 2px; - margin-bottom: 5px -} - -.bootstrap-tagsinput .tag:nth-child(5n+1) { - background: #047006 -} - -.bootstrap-tagsinput .tag:nth-child(5n+2) { - background: #00e093 -} - -.bootstrap-tagsinput .tag:nth-child(5n+3) { - background: #6c61f6 -} - -.bootstrap-tagsinput .tag:nth-child(5n+4) { - background: #f0825f -} - -.bootstrap-tagsinput .tag:nth-child(5n+5) { - background: #ff5f66 -} - -.page-body { - background: #fff -} - -.page-content-wrapper { - background: #f9fafb; - border-left: 1px solid #f2f4f9 -} - -@media (min-width:992px) { - .t-header .t-header-content-wrapper { - border-left: 1px solid #f2f4f9 - } - -} - -@media (min-width:768px) { - .page-body { - position: relative; - display: grid; - max-width: 100%; - grid-template-columns: 17rem calc(100vw - 17rem); - -webkit-transition: .3s; - transition: .3s - } - - .page-body .page-content-wrapper { - position: relative; - width: 100%; - min-height: 100vh; - padding: 1.5rem 2.5rem calc(90px + 1.5rem); - margin-top: 70px - } - - .page-body .page-content-wrapper .page-content-wrapper-inner { - max-width: 1140px; - margin-left: auto; - margin-right: auto - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header { - position: -webkit-sticky; - position: sticky; - top: 70px; - background: #f9fafb; - z-index: 99 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb { - padding: 1rem 1rem 1rem 21px; - margin-left: -20px; - margin-right: -20px; - background: #f9fafb - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item { - color: #565656; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 500 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a { - color: inherit - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active { - color: #047006 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading { - color: #565656; - font-size: 1.5rem; - font-family: Roboto, sans-serif; - font-weight: 500; - margin-bottom: 0 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description { - opacity: .7; - margin-top: 15px - } - - body.sidebar-minimized .t-header .t-header-brand-wrapper { - background: #f9fafb - } - - body.sidebar-minimized .t-header .t-header-content-wrapper { - border-left: #f9fafb - } - - body.sidebar-minimized .page-body { - grid-template-columns: 0 100% - } - - body.sidebar-minimized .page-body .sidebar .sidebar_footer { - left: -17rem - } - - body.sidebar-minimized .page-body .sidebar .nav-category-divider { - position: initial - } - -} - -@media (max-width:991.98px) { - .t-header { - width: 100vw - } - - .t-header .t-header-brand-wrapper { - background: #f9fafb; - width: 4rem; - min-width: 4rem; - max-width: 4rem - } - - .t-header .t-header-brand-wrapper a .logo { - -webkit-animation-name: menuItemFadeIn; - animation-name: menuItemFadeIn; - -webkit-animation-duration: .25s; - animation-duration: .25s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: none - } - - @-webkit-keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - @keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - .t-header .t-header-brand-wrapper a .logo-mini { - display: block - } - - .page-body { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - overflow: hidden; - max-width: 100% - } - - .page-body .sidebar { - position: relative; - left: 0; - z-index: 99; - width: 15rem; - min-width: 15rem; - max-width: 15rem; - margin-left: -15rem; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left, width; - transition-property: margin-left, width - } - - .page-body .sidebar .sidebar_footer { - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: left; - transition-property: left; - left: -15rem - } - - .page-body .page-content-wrapper { - padding: 20px 20px; - min-width: 100vw; - margin-left: 0; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left; - transition-property: margin-left - } - - .page-body .page-content-wrapper .viewport-header .breadcrumb { - background: 0 0; - padding-left: 0 - } - - .page-body .page-content-wrapper footer { - position: relative - } - - .page-body.sidebar-collpased .sidebar { - margin-left: 0; - min-width: 15rem - } - - .page-body.sidebar-collpased .sidebar .sidebar_footer { - left: 0 - } - -} - -@media (max-width:767.98px) { - .page-body .page-content-wrapper { - padding: 80px 20px 0 20px - } - -} - -.logo { - display: block; - margin: 0 auto; - width: 280px -} - -.logo img { - width: 100% -} - -.grid { - background: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75) -} - -.grid-header { - padding: 15px 20px; - margin-bottom: 15px; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 14px; - letter-spacing: .03rem; - background: #f9fafb; - border-left: 3px solid #047006; - border-radius: 0 6px 0 0 -} - -@media (min-width:768px) and (max-width:991px) { - .grid-header { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .grid-header { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .grid-header { - font-size: 14px - } - -} - -.grid-title { - opacity: .9; - margin-bottom: 25px -} - -.close { - color: #101010 -} - -.split-header { - display: -webkit-box; - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper { - display: -webkit-box; - display: flex -} - -.split-header .content-wrapper a i, -.split-header .content-wrapper span i { - font-size: 20px; - color: #adb5bd; - -webkit-transition: .3s ease color; - transition: .3s ease color -} - -.split-header .content-wrapper a i:hover, -.split-header .content-wrapper span i:hover { - color: #047006 -} - -.split-header .content-wrapper.v-centered { - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper.h-centered { - -webkit-box-pack: center; - justify-content: center -} - -.grid-body { - padding: 20px 25px 20px -} - -.card-title { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500; - color: #313131; - margin-bottom: 0 -} - -@media (min-width:768px) and (max-width:991px) { - .card-title { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .card-title { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .card-title { - font-size: 14px - } - -} - -.equel-grid { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch -} - -.equel-grid .grid { - width: 100%; - min-width: 100% -} - -.showcase_row_area { - margin-bottom: 20px -} - -.showcase_row_area .showcase_text_area { - text-align: right -} - -@media (max-width:767.98px) { - .showcase_row_area .showcase_text_area { - text-align: left - } - -} - -.showcase_row_area .showcase_content_area { - margin-bottom: -10px -} - -.showcase_row_area .showcase_content_area .btn { - margin-right: 5px; - margin-bottom: 10px -} - -.showcase_row_area:last-child { - margin-bottom: 0 -} - -.content-preview { - width: 45px; - height: 45px -} - -.content-preview.rounded { - border-radius: 100% -} - -.btn:not(.disabled),.cursor_pointer,a { - cursor: pointer -} - -.grd-positive-currency { - color: #047006 -} - -.grd-negative-currency { - color: red -} - -.color-success { - color: var(--success) -} - -.color-danger { - color: var(--danger) -} - -.color-warning { - color: var(--warning) -} - -.color-primary { - color: var(--primary) -} - -.btn-gradido-orange { - color: #fff; - background-color: #ffa600; - border-color: #ffa600 -} - -.visible-modal { - display: block -} - -.margin-top-10 { - margin-top: 10px -} - -.pull-right { - float: right -} - -.pull-right-row { - display: block; - margin-right: 10px -} - -.display-block { - display: block -} - -p.grd_small { - margin-top: 2px; - margin-bottom: 2px -} - -ul.grd-no-style { - list-style-type: none -} - -.center-ul-container ul { - padding-left: 0; - margin-bottom: 0; - text-align: center -} - -.center-ul-container ul .grd-error { - margin-top: 5px; - color: #8b0000 -} - -.grd-alert-color { - color: #ff5f66 !important -} - -.grd-success-color { - color: #047006 !important -} - -.grd-orange-color { - color: #ffa600 -} - -.hidden { - display: none -} - -.alert { - cursor: pointer -} - -.table.table-auto-break td, -.table.table-auto-break th { - white-space: pre-line -} - -.grd-passphrase-words { - cursor: pointer -} - -.authentication-theme .reset-pwd-link, -.authentication-theme .signup-link { - margin: 20px auto 0 auto; - text-align: center; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme .reset-pwd-link a, -.authentication-theme .signup-link a { - display: inline-block; - margin-left: 10px -} - -.authentication-theme .auth_footer { - margin-top: 30px -} - -.authentication-theme.auth-style_1 { - min-height: 100vh; - width: 100%; - background: #f9fafb; - padding: 10% 0 2px 0 -} - -.authentication-theme.auth-style_1 .logo-section { - margin-bottom: 50px -} - -.authentication-theme.auth-style_1 .grid-body { - padding: 60px 15px; - padding-bottom: 80px; - position: relative -} - -.authentication-theme.auth-style_1 .grid-body .form-wrapper { - position: unset -} - -.authentication-theme.auth-style_1 .grid-body-small { - padding: 15px 5px; - position: relative -} - -.authentication-theme.auth-style_1 .signup-link { - position: absolute; - bottom: 25px; - left: 0; - right: 0 -} - -.authentication-theme.auth-style_1 .reset-pwd-link { - position: absolute; - bottom: 20px; - left: 0; - right: 0 -} - -.authentication-theme.auth-style_2 { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch; - -webkit-box-pack: center; - justify-content: center; - min-height: 100vh -} - -.authentication-theme.auth-style_2 .inner-wrapper { - width: 100% -} - -.authentication-theme.auth-style_2 .banner-section { - background: url(http://www.placehold.it/1200x800) no-repeat center; - background-size: 60%; - background-color: #fff; - display: -webkit-box; - display: flex; - -webkit-box-align: end; - align-items: flex-end -} - -.authentication-theme.auth-style_2 .banner-section .auth_footer { - padding: 20px 20px -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_2 .banner-section { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 0 - } - -} - -.authentication-theme.auth-style_2 .form-section { - background-color: #fff; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center -} - -.authentication-theme.auth-style_2 .form-section .logo-section { - margin: 0 auto 50px auto -} - -.authentication-theme.auth-style_2 .form-section form { - width: 100%; - max-width: 350px; - margin: 0 auto -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_2 .form-section { - background: rgba(255, 255, 255, .96) - } - -} - -.authentication-theme.auth-style_3 { - background: url(http://www.placehold.it/1200x800) no-repeat center; - background-size: cover; - background-color: #fff; - min-height: 100vh; - height: 100%; - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme.auth-style_3 .inner-wrapper { - width: 100% -} - -.authentication-theme.auth-style_3 .logo-section { - margin: 0 auto 50px auto -} - -.authentication-theme.auth-style_3 .form-section { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme.auth-style_3 .form-section form { - width: 100%; - max-width: 400px; - margin: 0 auto -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_3 .form-section form { - max-width: 300px - } - -} diff --git a/community_server/webroot/css/main.css b/community_server/webroot/css/main.css deleted file mode 100644 index 3e16f1164..000000000 --- a/community_server/webroot/css/main.css +++ /dev/null @@ -1,25 +0,0 @@ -@charset "UTF-8"; -/* ============================================================ - - Common CSS file, importing other files. - - Datei : main.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -@import url(normalize.css); -@import url(grd_styles.css); - -/*! debug.css v0.0.3 | MIT License | https://gist.github.com/zaydek/6b2e55258734deabbd2b4a284321d6f6 */ -[debug], -[debug] * { - color: hsla(210, 100%, 100%, 0.9) !important; - background: hsla(210, 100%, 50%, 0.5) !important; - outline: solid 0.25rem hsla(210, 100%, 100%, 0.5) !important; - - box-shadow: none !important; - filter: none !important; -} diff --git a/community_server/webroot/css/materialdesignicons.min.css b/community_server/webroot/css/materialdesignicons.min.css deleted file mode 100644 index bbdcbc816..000000000 --- a/community_server/webroot/css/materialdesignicons.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/* MaterialDesignIcons.com */@font-face{font-family:"Material Design Icons";src:url("../fonts/materialdesignicons-webfont.eot?v=3.5.95");src:url("../fonts/materialdesignicons-webfont.eot?#iefix&v=3.5.95") format("embedded-opentype"),url("../fonts/materialdesignicons-webfont.woff2?v=3.5.95") format("woff2"),url("../fonts/materialdesignicons-webfont.woff?v=3.5.95") format("woff"),url("../fonts/materialdesignicons-webfont.ttf?v=3.5.95") format("truetype"),url("../fonts/materialdesignicons-webfont.svg?v=3.5.95#materialdesigniconsregular") format("svg");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-access-point:before{content:"\F002"}.mdi-access-point-network:before{content:"\F003"}.mdi-access-point-network-off:before{content:"\FBBD"}.mdi-account:before{content:"\F004"}.mdi-account-alert:before{content:"\F005"}.mdi-account-alert-outline:before{content:"\FB2C"}.mdi-account-arrow-left:before{content:"\FB2D"}.mdi-account-arrow-left-outline:before{content:"\FB2E"}.mdi-account-arrow-right:before{content:"\FB2F"}.mdi-account-arrow-right-outline:before{content:"\FB30"}.mdi-account-badge:before{content:"\FD83"}.mdi-account-badge-alert:before{content:"\FD84"}.mdi-account-badge-alert-outline:before{content:"\FD85"}.mdi-account-badge-outline:before{content:"\FD86"}.mdi-account-box:before{content:"\F006"}.mdi-account-box-multiple:before{content:"\F933"}.mdi-account-box-outline:before{content:"\F007"}.mdi-account-card-details:before{content:"\F5D2"}.mdi-account-card-details-outline:before{content:"\FD87"}.mdi-account-check:before{content:"\F008"}.mdi-account-check-outline:before{content:"\FBBE"}.mdi-account-child:before{content:"\FA88"}.mdi-account-child-circle:before{content:"\FA89"}.mdi-account-circle:before{content:"\F009"}.mdi-account-circle-outline:before{content:"\FB31"}.mdi-account-clock:before{content:"\FB32"}.mdi-account-clock-outline:before{content:"\FB33"}.mdi-account-convert:before{content:"\F00A"}.mdi-account-details:before{content:"\F631"}.mdi-account-edit:before{content:"\F6BB"}.mdi-account-group:before{content:"\F848"}.mdi-account-group-outline:before{content:"\FB34"}.mdi-account-heart:before{content:"\F898"}.mdi-account-heart-outline:before{content:"\FBBF"}.mdi-account-key:before{content:"\F00B"}.mdi-account-key-outline:before{content:"\FBC0"}.mdi-account-minus:before{content:"\F00D"}.mdi-account-minus-outline:before{content:"\FAEB"}.mdi-account-multiple:before{content:"\F00E"}.mdi-account-multiple-check:before{content:"\F8C4"}.mdi-account-multiple-minus:before{content:"\F5D3"}.mdi-account-multiple-minus-outline:before{content:"\FBC1"}.mdi-account-multiple-outline:before{content:"\F00F"}.mdi-account-multiple-plus:before{content:"\F010"}.mdi-account-multiple-plus-outline:before{content:"\F7FF"}.mdi-account-network:before{content:"\F011"}.mdi-account-network-outline:before{content:"\FBC2"}.mdi-account-off:before{content:"\F012"}.mdi-account-off-outline:before{content:"\FBC3"}.mdi-account-outline:before{content:"\F013"}.mdi-account-plus:before{content:"\F014"}.mdi-account-plus-outline:before{content:"\F800"}.mdi-account-question:before{content:"\FB35"}.mdi-account-question-outline:before{content:"\FB36"}.mdi-account-remove:before{content:"\F015"}.mdi-account-remove-outline:before{content:"\FAEC"}.mdi-account-search:before{content:"\F016"}.mdi-account-search-outline:before{content:"\F934"}.mdi-account-settings:before{content:"\F630"}.mdi-account-star:before{content:"\F017"}.mdi-account-star-outline:before{content:"\FBC4"}.mdi-account-supervisor:before{content:"\FA8A"}.mdi-account-supervisor-circle:before{content:"\FA8B"}.mdi-account-switch:before{content:"\F019"}.mdi-account-tie:before{content:"\FCBF"}.mdi-accusoft:before{content:"\F849"}.mdi-adchoices:before{content:"\FD1E"}.mdi-adjust:before{content:"\F01A"}.mdi-adobe:before{content:"\F935"}.mdi-air-conditioner:before{content:"\F01B"}.mdi-air-filter:before{content:"\FD1F"}.mdi-air-horn:before{content:"\FD88"}.mdi-air-purifier:before{content:"\FD20"}.mdi-airbag:before{content:"\FBC5"}.mdi-airballoon:before{content:"\F01C"}.mdi-airplane:before{content:"\F01D"}.mdi-airplane-landing:before{content:"\F5D4"}.mdi-airplane-off:before{content:"\F01E"}.mdi-airplane-takeoff:before{content:"\F5D5"}.mdi-airplay:before{content:"\F01F"}.mdi-airport:before{content:"\F84A"}.mdi-alarm:before{content:"\F020"}.mdi-alarm-bell:before{content:"\F78D"}.mdi-alarm-check:before{content:"\F021"}.mdi-alarm-light:before{content:"\F78E"}.mdi-alarm-light-outline:before{content:"\FBC6"}.mdi-alarm-multiple:before{content:"\F022"}.mdi-alarm-off:before{content:"\F023"}.mdi-alarm-plus:before{content:"\F024"}.mdi-alarm-snooze:before{content:"\F68D"}.mdi-album:before{content:"\F025"}.mdi-alert:before{content:"\F026"}.mdi-alert-box:before{content:"\F027"}.mdi-alert-box-outline:before{content:"\FCC0"}.mdi-alert-circle:before{content:"\F028"}.mdi-alert-circle-outline:before{content:"\F5D6"}.mdi-alert-decagram:before{content:"\F6BC"}.mdi-alert-decagram-outline:before{content:"\FCC1"}.mdi-alert-octagon:before{content:"\F029"}.mdi-alert-octagon-outline:before{content:"\FCC2"}.mdi-alert-octagram:before{content:"\F766"}.mdi-alert-octagram-outline:before{content:"\FCC3"}.mdi-alert-outline:before{content:"\F02A"}.mdi-alien:before{content:"\F899"}.mdi-all-inclusive:before{content:"\F6BD"}.mdi-alpha:before{content:"\F02B"}.mdi-alpha-a:before{content:"\41"}.mdi-alpha-a-box:before{content:"\FAED"}.mdi-alpha-a-box-outline:before{content:"\FBC7"}.mdi-alpha-a-circle:before{content:"\FBC8"}.mdi-alpha-a-circle-outline:before{content:"\FBC9"}.mdi-alpha-b:before{content:"\42"}.mdi-alpha-b-box:before{content:"\FAEE"}.mdi-alpha-b-box-outline:before{content:"\FBCA"}.mdi-alpha-b-circle:before{content:"\FBCB"}.mdi-alpha-b-circle-outline:before{content:"\FBCC"}.mdi-alpha-c:before{content:"\43"}.mdi-alpha-c-box:before{content:"\FAEF"}.mdi-alpha-c-box-outline:before{content:"\FBCD"}.mdi-alpha-c-circle:before{content:"\FBCE"}.mdi-alpha-c-circle-outline:before{content:"\FBCF"}.mdi-alpha-d:before{content:"\44"}.mdi-alpha-d-box:before{content:"\FAF0"}.mdi-alpha-d-box-outline:before{content:"\FBD0"}.mdi-alpha-d-circle:before{content:"\FBD1"}.mdi-alpha-d-circle-outline:before{content:"\FBD2"}.mdi-alpha-e:before{content:"\45"}.mdi-alpha-e-box:before{content:"\FAF1"}.mdi-alpha-e-box-outline:before{content:"\FBD3"}.mdi-alpha-e-circle:before{content:"\FBD4"}.mdi-alpha-e-circle-outline:before{content:"\FBD5"}.mdi-alpha-f:before{content:"\46"}.mdi-alpha-f-box:before{content:"\FAF2"}.mdi-alpha-f-box-outline:before{content:"\FBD6"}.mdi-alpha-f-circle:before{content:"\FBD7"}.mdi-alpha-f-circle-outline:before{content:"\FBD8"}.mdi-alpha-g:before{content:"\47"}.mdi-alpha-g-box:before{content:"\FAF3"}.mdi-alpha-g-box-outline:before{content:"\FBD9"}.mdi-alpha-g-circle:before{content:"\FBDA"}.mdi-alpha-g-circle-outline:before{content:"\FBDB"}.mdi-alpha-h:before{content:"\48"}.mdi-alpha-h-box:before{content:"\FAF4"}.mdi-alpha-h-box-outline:before{content:"\FBDC"}.mdi-alpha-h-circle:before{content:"\FBDD"}.mdi-alpha-h-circle-outline:before{content:"\FBDE"}.mdi-alpha-i:before{content:"\49"}.mdi-alpha-i-box:before{content:"\FAF5"}.mdi-alpha-i-box-outline:before{content:"\FBDF"}.mdi-alpha-i-circle:before{content:"\FBE0"}.mdi-alpha-i-circle-outline:before{content:"\FBE1"}.mdi-alpha-j:before{content:"\4A"}.mdi-alpha-j-box:before{content:"\FAF6"}.mdi-alpha-j-box-outline:before{content:"\FBE2"}.mdi-alpha-j-circle:before{content:"\FBE3"}.mdi-alpha-j-circle-outline:before{content:"\FBE4"}.mdi-alpha-k:before{content:"\4B"}.mdi-alpha-k-box:before{content:"\FAF7"}.mdi-alpha-k-box-outline:before{content:"\FBE5"}.mdi-alpha-k-circle:before{content:"\FBE6"}.mdi-alpha-k-circle-outline:before{content:"\FBE7"}.mdi-alpha-l:before{content:"\4C"}.mdi-alpha-l-box:before{content:"\FAF8"}.mdi-alpha-l-box-outline:before{content:"\FBE8"}.mdi-alpha-l-circle:before{content:"\FBE9"}.mdi-alpha-l-circle-outline:before{content:"\FBEA"}.mdi-alpha-m:before{content:"\4D"}.mdi-alpha-m-box:before{content:"\FAF9"}.mdi-alpha-m-box-outline:before{content:"\FBEB"}.mdi-alpha-m-circle:before{content:"\FBEC"}.mdi-alpha-m-circle-outline:before{content:"\FBED"}.mdi-alpha-n:before{content:"\4E"}.mdi-alpha-n-box:before{content:"\FAFA"}.mdi-alpha-n-box-outline:before{content:"\FBEE"}.mdi-alpha-n-circle:before{content:"\FBEF"}.mdi-alpha-n-circle-outline:before{content:"\FBF0"}.mdi-alpha-o:before{content:"\4F"}.mdi-alpha-o-box:before{content:"\FAFB"}.mdi-alpha-o-box-outline:before{content:"\FBF1"}.mdi-alpha-o-circle:before{content:"\FBF2"}.mdi-alpha-o-circle-outline:before{content:"\FBF3"}.mdi-alpha-p:before{content:"\50"}.mdi-alpha-p-box:before{content:"\FAFC"}.mdi-alpha-p-box-outline:before{content:"\FBF4"}.mdi-alpha-p-circle:before{content:"\FBF5"}.mdi-alpha-p-circle-outline:before{content:"\FBF6"}.mdi-alpha-q:before{content:"\51"}.mdi-alpha-q-box:before{content:"\FAFD"}.mdi-alpha-q-box-outline:before{content:"\FBF7"}.mdi-alpha-q-circle:before{content:"\FBF8"}.mdi-alpha-q-circle-outline:before{content:"\FBF9"}.mdi-alpha-r:before{content:"\52"}.mdi-alpha-r-box:before{content:"\FAFE"}.mdi-alpha-r-box-outline:before{content:"\FBFA"}.mdi-alpha-r-circle:before{content:"\FBFB"}.mdi-alpha-r-circle-outline:before{content:"\FBFC"}.mdi-alpha-s:before{content:"\53"}.mdi-alpha-s-box:before{content:"\FAFF"}.mdi-alpha-s-box-outline:before{content:"\FBFD"}.mdi-alpha-s-circle:before{content:"\FBFE"}.mdi-alpha-s-circle-outline:before{content:"\FBFF"}.mdi-alpha-t:before{content:"\54"}.mdi-alpha-t-box:before{content:"\FB00"}.mdi-alpha-t-box-outline:before{content:"\FC00"}.mdi-alpha-t-circle:before{content:"\FC01"}.mdi-alpha-t-circle-outline:before{content:"\FC02"}.mdi-alpha-u:before{content:"\55"}.mdi-alpha-u-box:before{content:"\FB01"}.mdi-alpha-u-box-outline:before{content:"\FC03"}.mdi-alpha-u-circle:before{content:"\FC04"}.mdi-alpha-u-circle-outline:before{content:"\FC05"}.mdi-alpha-v:before{content:"\56"}.mdi-alpha-v-box:before{content:"\FB02"}.mdi-alpha-v-box-outline:before{content:"\FC06"}.mdi-alpha-v-circle:before{content:"\FC07"}.mdi-alpha-v-circle-outline:before{content:"\FC08"}.mdi-alpha-w:before{content:"\57"}.mdi-alpha-w-box:before{content:"\FB03"}.mdi-alpha-w-box-outline:before{content:"\FC09"}.mdi-alpha-w-circle:before{content:"\FC0A"}.mdi-alpha-w-circle-outline:before{content:"\FC0B"}.mdi-alpha-x:before{content:"\58"}.mdi-alpha-x-box:before{content:"\FB04"}.mdi-alpha-x-box-outline:before{content:"\FC0C"}.mdi-alpha-x-circle:before{content:"\FC0D"}.mdi-alpha-x-circle-outline:before{content:"\FC0E"}.mdi-alpha-y:before{content:"\59"}.mdi-alpha-y-box:before{content:"\FB05"}.mdi-alpha-y-box-outline:before{content:"\FC0F"}.mdi-alpha-y-circle:before{content:"\FC10"}.mdi-alpha-y-circle-outline:before{content:"\FC11"}.mdi-alpha-z:before{content:"\5A"}.mdi-alpha-z-box:before{content:"\FB06"}.mdi-alpha-z-box-outline:before{content:"\FC12"}.mdi-alpha-z-circle:before{content:"\FC13"}.mdi-alpha-z-circle-outline:before{content:"\FC14"}.mdi-alphabetical:before{content:"\F02C"}.mdi-altimeter:before{content:"\F5D7"}.mdi-amazon:before{content:"\F02D"}.mdi-amazon-alexa:before{content:"\F8C5"}.mdi-amazon-drive:before{content:"\F02E"}.mdi-ambulance:before{content:"\F02F"}.mdi-ammunition:before{content:"\FCC4"}.mdi-ampersand:before{content:"\FA8C"}.mdi-amplifier:before{content:"\F030"}.mdi-anchor:before{content:"\F031"}.mdi-android:before{content:"\F032"}.mdi-android-auto:before{content:"\FA8D"}.mdi-android-debug-bridge:before{content:"\F033"}.mdi-android-head:before{content:"\F78F"}.mdi-android-messages:before{content:"\FD21"}.mdi-android-studio:before{content:"\F034"}.mdi-angle-acute:before{content:"\F936"}.mdi-angle-obtuse:before{content:"\F937"}.mdi-angle-right:before{content:"\F938"}.mdi-angular:before{content:"\F6B1"}.mdi-angularjs:before{content:"\F6BE"}.mdi-animation:before{content:"\F5D8"}.mdi-animation-outline:before{content:"\FA8E"}.mdi-animation-play:before{content:"\F939"}.mdi-animation-play-outline:before{content:"\FA8F"}.mdi-anvil:before{content:"\F89A"}.mdi-apple:before{content:"\F035"}.mdi-apple-finder:before{content:"\F036"}.mdi-apple-icloud:before{content:"\F038"}.mdi-apple-ios:before{content:"\F037"}.mdi-apple-keyboard-caps:before{content:"\F632"}.mdi-apple-keyboard-command:before{content:"\F633"}.mdi-apple-keyboard-control:before{content:"\F634"}.mdi-apple-keyboard-option:before{content:"\F635"}.mdi-apple-keyboard-shift:before{content:"\F636"}.mdi-apple-safari:before{content:"\F039"}.mdi-application:before{content:"\F614"}.mdi-application-export:before{content:"\FD89"}.mdi-application-import:before{content:"\FD8A"}.mdi-apps:before{content:"\F03B"}.mdi-apps-box:before{content:"\FD22"}.mdi-arch:before{content:"\F8C6"}.mdi-archive:before{content:"\F03C"}.mdi-arrange-bring-forward:before{content:"\F03D"}.mdi-arrange-bring-to-front:before{content:"\F03E"}.mdi-arrange-send-backward:before{content:"\F03F"}.mdi-arrange-send-to-back:before{content:"\F040"}.mdi-arrow-all:before{content:"\F041"}.mdi-arrow-bottom-left:before{content:"\F042"}.mdi-arrow-bottom-left-bold-outline:before{content:"\F9B6"}.mdi-arrow-bottom-left-thick:before{content:"\F9B7"}.mdi-arrow-bottom-right:before{content:"\F043"}.mdi-arrow-bottom-right-bold-outline:before{content:"\F9B8"}.mdi-arrow-bottom-right-thick:before{content:"\F9B9"}.mdi-arrow-collapse:before{content:"\F615"}.mdi-arrow-collapse-all:before{content:"\F044"}.mdi-arrow-collapse-down:before{content:"\F791"}.mdi-arrow-collapse-horizontal:before{content:"\F84B"}.mdi-arrow-collapse-left:before{content:"\F792"}.mdi-arrow-collapse-right:before{content:"\F793"}.mdi-arrow-collapse-up:before{content:"\F794"}.mdi-arrow-collapse-vertical:before{content:"\F84C"}.mdi-arrow-decision:before{content:"\F9BA"}.mdi-arrow-decision-auto:before{content:"\F9BB"}.mdi-arrow-decision-auto-outline:before{content:"\F9BC"}.mdi-arrow-decision-outline:before{content:"\F9BD"}.mdi-arrow-down:before{content:"\F045"}.mdi-arrow-down-bold:before{content:"\F72D"}.mdi-arrow-down-bold-box:before{content:"\F72E"}.mdi-arrow-down-bold-box-outline:before{content:"\F72F"}.mdi-arrow-down-bold-circle:before{content:"\F047"}.mdi-arrow-down-bold-circle-outline:before{content:"\F048"}.mdi-arrow-down-bold-hexagon-outline:before{content:"\F049"}.mdi-arrow-down-bold-outline:before{content:"\F9BE"}.mdi-arrow-down-box:before{content:"\F6BF"}.mdi-arrow-down-circle:before{content:"\FCB7"}.mdi-arrow-down-circle-outline:before{content:"\FCB8"}.mdi-arrow-down-drop-circle:before{content:"\F04A"}.mdi-arrow-down-drop-circle-outline:before{content:"\F04B"}.mdi-arrow-down-thick:before{content:"\F046"}.mdi-arrow-expand:before{content:"\F616"}.mdi-arrow-expand-all:before{content:"\F04C"}.mdi-arrow-expand-down:before{content:"\F795"}.mdi-arrow-expand-horizontal:before{content:"\F84D"}.mdi-arrow-expand-left:before{content:"\F796"}.mdi-arrow-expand-right:before{content:"\F797"}.mdi-arrow-expand-up:before{content:"\F798"}.mdi-arrow-expand-vertical:before{content:"\F84E"}.mdi-arrow-left:before{content:"\F04D"}.mdi-arrow-left-bold:before{content:"\F730"}.mdi-arrow-left-bold-box:before{content:"\F731"}.mdi-arrow-left-bold-box-outline:before{content:"\F732"}.mdi-arrow-left-bold-circle:before{content:"\F04F"}.mdi-arrow-left-bold-circle-outline:before{content:"\F050"}.mdi-arrow-left-bold-hexagon-outline:before{content:"\F051"}.mdi-arrow-left-bold-outline:before{content:"\F9BF"}.mdi-arrow-left-box:before{content:"\F6C0"}.mdi-arrow-left-circle:before{content:"\FCB9"}.mdi-arrow-left-circle-outline:before{content:"\FCBA"}.mdi-arrow-left-drop-circle:before{content:"\F052"}.mdi-arrow-left-drop-circle-outline:before{content:"\F053"}.mdi-arrow-left-right-bold-outline:before{content:"\F9C0"}.mdi-arrow-left-thick:before{content:"\F04E"}.mdi-arrow-right:before{content:"\F054"}.mdi-arrow-right-bold:before{content:"\F733"}.mdi-arrow-right-bold-box:before{content:"\F734"}.mdi-arrow-right-bold-box-outline:before{content:"\F735"}.mdi-arrow-right-bold-circle:before{content:"\F056"}.mdi-arrow-right-bold-circle-outline:before{content:"\F057"}.mdi-arrow-right-bold-hexagon-outline:before{content:"\F058"}.mdi-arrow-right-bold-outline:before{content:"\F9C1"}.mdi-arrow-right-box:before{content:"\F6C1"}.mdi-arrow-right-circle:before{content:"\FCBB"}.mdi-arrow-right-circle-outline:before{content:"\FCBC"}.mdi-arrow-right-drop-circle:before{content:"\F059"}.mdi-arrow-right-drop-circle-outline:before{content:"\F05A"}.mdi-arrow-right-thick:before{content:"\F055"}.mdi-arrow-split-horizontal:before{content:"\F93A"}.mdi-arrow-split-vertical:before{content:"\F93B"}.mdi-arrow-top-left:before{content:"\F05B"}.mdi-arrow-top-left-bold-outline:before{content:"\F9C2"}.mdi-arrow-top-left-thick:before{content:"\F9C3"}.mdi-arrow-top-right:before{content:"\F05C"}.mdi-arrow-top-right-bold-outline:before{content:"\F9C4"}.mdi-arrow-top-right-thick:before{content:"\F9C5"}.mdi-arrow-up:before{content:"\F05D"}.mdi-arrow-up-bold:before{content:"\F736"}.mdi-arrow-up-bold-box:before{content:"\F737"}.mdi-arrow-up-bold-box-outline:before{content:"\F738"}.mdi-arrow-up-bold-circle:before{content:"\F05F"}.mdi-arrow-up-bold-circle-outline:before{content:"\F060"}.mdi-arrow-up-bold-hexagon-outline:before{content:"\F061"}.mdi-arrow-up-bold-outline:before{content:"\F9C6"}.mdi-arrow-up-box:before{content:"\F6C2"}.mdi-arrow-up-circle:before{content:"\FCBD"}.mdi-arrow-up-circle-outline:before{content:"\FCBE"}.mdi-arrow-up-down-bold-outline:before{content:"\F9C7"}.mdi-arrow-up-drop-circle:before{content:"\F062"}.mdi-arrow-up-drop-circle-outline:before{content:"\F063"}.mdi-arrow-up-thick:before{content:"\F05E"}.mdi-artist:before{content:"\F802"}.mdi-artist-outline:before{content:"\FCC5"}.mdi-artstation:before{content:"\FB37"}.mdi-aspect-ratio:before{content:"\FA23"}.mdi-assistant:before{content:"\F064"}.mdi-asterisk:before{content:"\F6C3"}.mdi-at:before{content:"\F065"}.mdi-atlassian:before{content:"\F803"}.mdi-atm:before{content:"\FD23"}.mdi-atom:before{content:"\F767"}.mdi-attachment:before{content:"\F066"}.mdi-audio-video:before{content:"\F93C"}.mdi-audiobook:before{content:"\F067"}.mdi-augmented-reality:before{content:"\F84F"}.mdi-auto-fix:before{content:"\F068"}.mdi-auto-upload:before{content:"\F069"}.mdi-autorenew:before{content:"\F06A"}.mdi-av-timer:before{content:"\F06B"}.mdi-axe:before{content:"\F8C7"}.mdi-axis:before{content:"\FD24"}.mdi-axis-arrow:before{content:"\FD25"}.mdi-axis-arrow-lock:before{content:"\FD26"}.mdi-axis-lock:before{content:"\FD27"}.mdi-axis-x-arrow:before{content:"\FD28"}.mdi-axis-x-arrow-lock:before{content:"\FD29"}.mdi-axis-x-rotate-clockwise:before{content:"\FD2A"}.mdi-axis-x-rotate-counterclockwise:before{content:"\FD2B"}.mdi-axis-x-y-arrow-lock:before{content:"\FD2C"}.mdi-axis-y-arrow:before{content:"\FD2D"}.mdi-axis-y-arrow-lock:before{content:"\FD2E"}.mdi-axis-y-rotate-clockwise:before{content:"\FD2F"}.mdi-axis-y-rotate-counterclockwise:before{content:"\FD30"}.mdi-axis-z-arrow:before{content:"\FD31"}.mdi-axis-z-arrow-lock:before{content:"\FD32"}.mdi-axis-z-rotate-clockwise:before{content:"\FD33"}.mdi-axis-z-rotate-counterclockwise:before{content:"\FD34"}.mdi-azure:before{content:"\F804"}.mdi-babel:before{content:"\FA24"}.mdi-baby:before{content:"\F06C"}.mdi-baby-buggy:before{content:"\F68E"}.mdi-backburger:before{content:"\F06D"}.mdi-backspace:before{content:"\F06E"}.mdi-backspace-outline:before{content:"\FB38"}.mdi-backup-restore:before{content:"\F06F"}.mdi-badminton:before{content:"\F850"}.mdi-balloon:before{content:"\FA25"}.mdi-ballot:before{content:"\F9C8"}.mdi-ballot-outline:before{content:"\F9C9"}.mdi-ballot-recount:before{content:"\FC15"}.mdi-ballot-recount-outline:before{content:"\FC16"}.mdi-bandage:before{content:"\FD8B"}.mdi-bandcamp:before{content:"\F674"}.mdi-bank:before{content:"\F070"}.mdi-bank-minus:before{content:"\FD8C"}.mdi-bank-plus:before{content:"\FD8D"}.mdi-bank-remove:before{content:"\FD8E"}.mdi-bank-transfer:before{content:"\FA26"}.mdi-bank-transfer-in:before{content:"\FA27"}.mdi-bank-transfer-out:before{content:"\FA28"}.mdi-barcode:before{content:"\F071"}.mdi-barcode-scan:before{content:"\F072"}.mdi-barley:before{content:"\F073"}.mdi-barley-off:before{content:"\FB39"}.mdi-barn:before{content:"\FB3A"}.mdi-barrel:before{content:"\F074"}.mdi-baseball:before{content:"\F851"}.mdi-baseball-bat:before{content:"\F852"}.mdi-basecamp:before{content:"\F075"}.mdi-basket:before{content:"\F076"}.mdi-basket-fill:before{content:"\F077"}.mdi-basket-unfill:before{content:"\F078"}.mdi-basketball:before{content:"\F805"}.mdi-basketball-hoop:before{content:"\FC17"}.mdi-basketball-hoop-outline:before{content:"\FC18"}.mdi-bat:before{content:"\FB3B"}.mdi-battery:before{content:"\F079"}.mdi-battery-10:before{content:"\F07A"}.mdi-battery-10-bluetooth:before{content:"\F93D"}.mdi-battery-20:before{content:"\F07B"}.mdi-battery-20-bluetooth:before{content:"\F93E"}.mdi-battery-30:before{content:"\F07C"}.mdi-battery-30-bluetooth:before{content:"\F93F"}.mdi-battery-40:before{content:"\F07D"}.mdi-battery-40-bluetooth:before{content:"\F940"}.mdi-battery-50:before{content:"\F07E"}.mdi-battery-50-bluetooth:before{content:"\F941"}.mdi-battery-60:before{content:"\F07F"}.mdi-battery-60-bluetooth:before{content:"\F942"}.mdi-battery-70:before{content:"\F080"}.mdi-battery-70-bluetooth:before{content:"\F943"}.mdi-battery-80:before{content:"\F081"}.mdi-battery-80-bluetooth:before{content:"\F944"}.mdi-battery-90:before{content:"\F082"}.mdi-battery-90-bluetooth:before{content:"\F945"}.mdi-battery-alert:before{content:"\F083"}.mdi-battery-alert-bluetooth:before{content:"\F946"}.mdi-battery-bluetooth:before{content:"\F947"}.mdi-battery-bluetooth-variant:before{content:"\F948"}.mdi-battery-charging:before{content:"\F084"}.mdi-battery-charging-10:before{content:"\F89B"}.mdi-battery-charging-100:before{content:"\F085"}.mdi-battery-charging-20:before{content:"\F086"}.mdi-battery-charging-30:before{content:"\F087"}.mdi-battery-charging-40:before{content:"\F088"}.mdi-battery-charging-50:before{content:"\F89C"}.mdi-battery-charging-60:before{content:"\F089"}.mdi-battery-charging-70:before{content:"\F89D"}.mdi-battery-charging-80:before{content:"\F08A"}.mdi-battery-charging-90:before{content:"\F08B"}.mdi-battery-charging-outline:before{content:"\F89E"}.mdi-battery-charging-wireless:before{content:"\F806"}.mdi-battery-charging-wireless-10:before{content:"\F807"}.mdi-battery-charging-wireless-20:before{content:"\F808"}.mdi-battery-charging-wireless-30:before{content:"\F809"}.mdi-battery-charging-wireless-40:before{content:"\F80A"}.mdi-battery-charging-wireless-50:before{content:"\F80B"}.mdi-battery-charging-wireless-60:before{content:"\F80C"}.mdi-battery-charging-wireless-70:before{content:"\F80D"}.mdi-battery-charging-wireless-80:before{content:"\F80E"}.mdi-battery-charging-wireless-90:before{content:"\F80F"}.mdi-battery-charging-wireless-alert:before{content:"\F810"}.mdi-battery-charging-wireless-outline:before{content:"\F811"}.mdi-battery-minus:before{content:"\F08C"}.mdi-battery-negative:before{content:"\F08D"}.mdi-battery-outline:before{content:"\F08E"}.mdi-battery-plus:before{content:"\F08F"}.mdi-battery-positive:before{content:"\F090"}.mdi-battery-unknown:before{content:"\F091"}.mdi-battery-unknown-bluetooth:before{content:"\F949"}.mdi-battlenet:before{content:"\FB3C"}.mdi-beach:before{content:"\F092"}.mdi-beaker:before{content:"\FCC6"}.mdi-beaker-outline:before{content:"\F68F"}.mdi-beats:before{content:"\F097"}.mdi-bed-empty:before{content:"\F89F"}.mdi-beer:before{content:"\F098"}.mdi-behance:before{content:"\F099"}.mdi-bell:before{content:"\F09A"}.mdi-bell-alert:before{content:"\FD35"}.mdi-bell-circle:before{content:"\FD36"}.mdi-bell-circle-outline:before{content:"\FD37"}.mdi-bell-off:before{content:"\F09B"}.mdi-bell-off-outline:before{content:"\FA90"}.mdi-bell-outline:before{content:"\F09C"}.mdi-bell-plus:before{content:"\F09D"}.mdi-bell-plus-outline:before{content:"\FA91"}.mdi-bell-ring:before{content:"\F09E"}.mdi-bell-ring-outline:before{content:"\F09F"}.mdi-bell-sleep:before{content:"\F0A0"}.mdi-bell-sleep-outline:before{content:"\FA92"}.mdi-beta:before{content:"\F0A1"}.mdi-betamax:before{content:"\F9CA"}.mdi-bible:before{content:"\F0A2"}.mdi-bike:before{content:"\F0A3"}.mdi-billiards:before{content:"\FB3D"}.mdi-billiards-rack:before{content:"\FB3E"}.mdi-bing:before{content:"\F0A4"}.mdi-binoculars:before{content:"\F0A5"}.mdi-bio:before{content:"\F0A6"}.mdi-biohazard:before{content:"\F0A7"}.mdi-bitbucket:before{content:"\F0A8"}.mdi-bitcoin:before{content:"\F812"}.mdi-black-mesa:before{content:"\F0A9"}.mdi-blackberry:before{content:"\F0AA"}.mdi-blender:before{content:"\FCC7"}.mdi-blender-software:before{content:"\F0AB"}.mdi-blinds:before{content:"\F0AC"}.mdi-block-helper:before{content:"\F0AD"}.mdi-blogger:before{content:"\F0AE"}.mdi-blood-bag:before{content:"\FCC8"}.mdi-bluetooth:before{content:"\F0AF"}.mdi-bluetooth-audio:before{content:"\F0B0"}.mdi-bluetooth-connect:before{content:"\F0B1"}.mdi-bluetooth-off:before{content:"\F0B2"}.mdi-bluetooth-settings:before{content:"\F0B3"}.mdi-bluetooth-transfer:before{content:"\F0B4"}.mdi-blur:before{content:"\F0B5"}.mdi-blur-linear:before{content:"\F0B6"}.mdi-blur-off:before{content:"\F0B7"}.mdi-blur-radial:before{content:"\F0B8"}.mdi-bolnisi-cross:before{content:"\FCC9"}.mdi-bolt:before{content:"\FD8F"}.mdi-bomb:before{content:"\F690"}.mdi-bomb-off:before{content:"\F6C4"}.mdi-bone:before{content:"\F0B9"}.mdi-book:before{content:"\F0BA"}.mdi-book-lock:before{content:"\F799"}.mdi-book-lock-open:before{content:"\F79A"}.mdi-book-minus:before{content:"\F5D9"}.mdi-book-multiple:before{content:"\F0BB"}.mdi-book-multiple-minus:before{content:"\FA93"}.mdi-book-multiple-plus:before{content:"\FA94"}.mdi-book-multiple-remove:before{content:"\FA95"}.mdi-book-multiple-variant:before{content:"\F0BC"}.mdi-book-open:before{content:"\F0BD"}.mdi-book-open-outline:before{content:"\FB3F"}.mdi-book-open-page-variant:before{content:"\F5DA"}.mdi-book-open-variant:before{content:"\F0BE"}.mdi-book-outline:before{content:"\FB40"}.mdi-book-plus:before{content:"\F5DB"}.mdi-book-remove:before{content:"\FA96"}.mdi-book-variant:before{content:"\F0BF"}.mdi-bookmark:before{content:"\F0C0"}.mdi-bookmark-check:before{content:"\F0C1"}.mdi-bookmark-minus:before{content:"\F9CB"}.mdi-bookmark-minus-outline:before{content:"\F9CC"}.mdi-bookmark-music:before{content:"\F0C2"}.mdi-bookmark-off:before{content:"\F9CD"}.mdi-bookmark-off-outline:before{content:"\F9CE"}.mdi-bookmark-outline:before{content:"\F0C3"}.mdi-bookmark-plus:before{content:"\F0C5"}.mdi-bookmark-plus-outline:before{content:"\F0C4"}.mdi-bookmark-remove:before{content:"\F0C6"}.mdi-boombox:before{content:"\F5DC"}.mdi-bootstrap:before{content:"\F6C5"}.mdi-border-all:before{content:"\F0C7"}.mdi-border-all-variant:before{content:"\F8A0"}.mdi-border-bottom:before{content:"\F0C8"}.mdi-border-bottom-variant:before{content:"\F8A1"}.mdi-border-color:before{content:"\F0C9"}.mdi-border-horizontal:before{content:"\F0CA"}.mdi-border-inside:before{content:"\F0CB"}.mdi-border-left:before{content:"\F0CC"}.mdi-border-left-variant:before{content:"\F8A2"}.mdi-border-none:before{content:"\F0CD"}.mdi-border-none-variant:before{content:"\F8A3"}.mdi-border-outside:before{content:"\F0CE"}.mdi-border-right:before{content:"\F0CF"}.mdi-border-right-variant:before{content:"\F8A4"}.mdi-border-style:before{content:"\F0D0"}.mdi-border-top:before{content:"\F0D1"}.mdi-border-top-variant:before{content:"\F8A5"}.mdi-border-vertical:before{content:"\F0D2"}.mdi-bottle-wine:before{content:"\F853"}.mdi-bow-tie:before{content:"\F677"}.mdi-bowl:before{content:"\F617"}.mdi-bowling:before{content:"\F0D3"}.mdi-box:before{content:"\F0D4"}.mdi-box-cutter:before{content:"\F0D5"}.mdi-box-shadow:before{content:"\F637"}.mdi-boxing-glove:before{content:"\FB41"}.mdi-braille:before{content:"\F9CF"}.mdi-brain:before{content:"\F9D0"}.mdi-bread-slice:before{content:"\FCCA"}.mdi-bread-slice-outline:before{content:"\FCCB"}.mdi-bridge:before{content:"\F618"}.mdi-briefcase:before{content:"\F0D6"}.mdi-briefcase-account:before{content:"\FCCC"}.mdi-briefcase-account-outline:before{content:"\FCCD"}.mdi-briefcase-check:before{content:"\F0D7"}.mdi-briefcase-download:before{content:"\F0D8"}.mdi-briefcase-download-outline:before{content:"\FC19"}.mdi-briefcase-edit:before{content:"\FA97"}.mdi-briefcase-edit-outline:before{content:"\FC1A"}.mdi-briefcase-minus:before{content:"\FA29"}.mdi-briefcase-minus-outline:before{content:"\FC1B"}.mdi-briefcase-outline:before{content:"\F813"}.mdi-briefcase-plus:before{content:"\FA2A"}.mdi-briefcase-plus-outline:before{content:"\FC1C"}.mdi-briefcase-remove:before{content:"\FA2B"}.mdi-briefcase-remove-outline:before{content:"\FC1D"}.mdi-briefcase-search:before{content:"\FA2C"}.mdi-briefcase-search-outline:before{content:"\FC1E"}.mdi-briefcase-upload:before{content:"\F0D9"}.mdi-briefcase-upload-outline:before{content:"\FC1F"}.mdi-brightness-1:before{content:"\F0DA"}.mdi-brightness-2:before{content:"\F0DB"}.mdi-brightness-3:before{content:"\F0DC"}.mdi-brightness-4:before{content:"\F0DD"}.mdi-brightness-5:before{content:"\F0DE"}.mdi-brightness-6:before{content:"\F0DF"}.mdi-brightness-7:before{content:"\F0E0"}.mdi-brightness-auto:before{content:"\F0E1"}.mdi-brightness-percent:before{content:"\FCCE"}.mdi-broom:before{content:"\F0E2"}.mdi-brush:before{content:"\F0E3"}.mdi-buddhism:before{content:"\F94A"}.mdi-buffer:before{content:"\F619"}.mdi-bug:before{content:"\F0E4"}.mdi-bug-check:before{content:"\FA2D"}.mdi-bug-check-outline:before{content:"\FA2E"}.mdi-bug-outline:before{content:"\FA2F"}.mdi-bugle:before{content:"\FD90"}.mdi-bulldozer:before{content:"\FB07"}.mdi-bullet:before{content:"\FCCF"}.mdi-bulletin-board:before{content:"\F0E5"}.mdi-bullhorn:before{content:"\F0E6"}.mdi-bullhorn-outline:before{content:"\FB08"}.mdi-bullseye:before{content:"\F5DD"}.mdi-bullseye-arrow:before{content:"\F8C8"}.mdi-bus:before{content:"\F0E7"}.mdi-bus-alert:before{content:"\FA98"}.mdi-bus-articulated-end:before{content:"\F79B"}.mdi-bus-articulated-front:before{content:"\F79C"}.mdi-bus-clock:before{content:"\F8C9"}.mdi-bus-double-decker:before{content:"\F79D"}.mdi-bus-school:before{content:"\F79E"}.mdi-bus-side:before{content:"\F79F"}.mdi-cached:before{content:"\F0E8"}.mdi-cactus:before{content:"\FD91"}.mdi-cake:before{content:"\F0E9"}.mdi-cake-layered:before{content:"\F0EA"}.mdi-cake-variant:before{content:"\F0EB"}.mdi-calculator:before{content:"\F0EC"}.mdi-calculator-variant:before{content:"\FA99"}.mdi-calendar:before{content:"\F0ED"}.mdi-calendar-alert:before{content:"\FA30"}.mdi-calendar-blank:before{content:"\F0EE"}.mdi-calendar-blank-outline:before{content:"\FB42"}.mdi-calendar-check:before{content:"\F0EF"}.mdi-calendar-check-outline:before{content:"\FC20"}.mdi-calendar-clock:before{content:"\F0F0"}.mdi-calendar-edit:before{content:"\F8A6"}.mdi-calendar-export:before{content:"\FB09"}.mdi-calendar-heart:before{content:"\F9D1"}.mdi-calendar-import:before{content:"\FB0A"}.mdi-calendar-minus:before{content:"\FD38"}.mdi-calendar-multiple:before{content:"\F0F1"}.mdi-calendar-multiple-check:before{content:"\F0F2"}.mdi-calendar-multiselect:before{content:"\FA31"}.mdi-calendar-outline:before{content:"\FB43"}.mdi-calendar-plus:before{content:"\F0F3"}.mdi-calendar-question:before{content:"\F691"}.mdi-calendar-range:before{content:"\F678"}.mdi-calendar-range-outline:before{content:"\FB44"}.mdi-calendar-remove:before{content:"\F0F4"}.mdi-calendar-remove-outline:before{content:"\FC21"}.mdi-calendar-search:before{content:"\F94B"}.mdi-calendar-star:before{content:"\F9D2"}.mdi-calendar-text:before{content:"\F0F5"}.mdi-calendar-text-outline:before{content:"\FC22"}.mdi-calendar-today:before{content:"\F0F6"}.mdi-calendar-week:before{content:"\FA32"}.mdi-calendar-week-begin:before{content:"\FA33"}.mdi-call-made:before{content:"\F0F7"}.mdi-call-merge:before{content:"\F0F8"}.mdi-call-missed:before{content:"\F0F9"}.mdi-call-received:before{content:"\F0FA"}.mdi-call-split:before{content:"\F0FB"}.mdi-camcorder:before{content:"\F0FC"}.mdi-camcorder-box:before{content:"\F0FD"}.mdi-camcorder-box-off:before{content:"\F0FE"}.mdi-camcorder-off:before{content:"\F0FF"}.mdi-camera:before{content:"\F100"}.mdi-camera-account:before{content:"\F8CA"}.mdi-camera-burst:before{content:"\F692"}.mdi-camera-control:before{content:"\FB45"}.mdi-camera-enhance:before{content:"\F101"}.mdi-camera-enhance-outline:before{content:"\FB46"}.mdi-camera-front:before{content:"\F102"}.mdi-camera-front-variant:before{content:"\F103"}.mdi-camera-gopro:before{content:"\F7A0"}.mdi-camera-image:before{content:"\F8CB"}.mdi-camera-iris:before{content:"\F104"}.mdi-camera-metering-center:before{content:"\F7A1"}.mdi-camera-metering-matrix:before{content:"\F7A2"}.mdi-camera-metering-partial:before{content:"\F7A3"}.mdi-camera-metering-spot:before{content:"\F7A4"}.mdi-camera-off:before{content:"\F5DF"}.mdi-camera-outline:before{content:"\FD39"}.mdi-camera-party-mode:before{content:"\F105"}.mdi-camera-rear:before{content:"\F106"}.mdi-camera-rear-variant:before{content:"\F107"}.mdi-camera-switch:before{content:"\F108"}.mdi-camera-timer:before{content:"\F109"}.mdi-camera-wireless:before{content:"\FD92"}.mdi-camera-wireless-outline:before{content:"\FD93"}.mdi-cancel:before{content:"\F739"}.mdi-candle:before{content:"\F5E2"}.mdi-candycane:before{content:"\F10A"}.mdi-cannabis:before{content:"\F7A5"}.mdi-caps-lock:before{content:"\FA9A"}.mdi-car:before{content:"\F10B"}.mdi-car-battery:before{content:"\F10C"}.mdi-car-brake-abs:before{content:"\FC23"}.mdi-car-brake-alert:before{content:"\FC24"}.mdi-car-brake-hold:before{content:"\FD3A"}.mdi-car-brake-parking:before{content:"\FD3B"}.mdi-car-connected:before{content:"\F10D"}.mdi-car-convertible:before{content:"\F7A6"}.mdi-car-cruise-control:before{content:"\FD3C"}.mdi-car-defrost-front:before{content:"\FD3D"}.mdi-car-defrost-rear:before{content:"\FD3E"}.mdi-car-door:before{content:"\FB47"}.mdi-car-electric:before{content:"\FB48"}.mdi-car-esp:before{content:"\FC25"}.mdi-car-estate:before{content:"\F7A7"}.mdi-car-hatchback:before{content:"\F7A8"}.mdi-car-key:before{content:"\FB49"}.mdi-car-light-dimmed:before{content:"\FC26"}.mdi-car-light-fog:before{content:"\FC27"}.mdi-car-light-high:before{content:"\FC28"}.mdi-car-limousine:before{content:"\F8CC"}.mdi-car-multiple:before{content:"\FB4A"}.mdi-car-parking-lights:before{content:"\FD3F"}.mdi-car-pickup:before{content:"\F7A9"}.mdi-car-side:before{content:"\F7AA"}.mdi-car-sports:before{content:"\F7AB"}.mdi-car-tire-alert:before{content:"\FC29"}.mdi-car-traction-control:before{content:"\FD40"}.mdi-car-wash:before{content:"\F10E"}.mdi-caravan:before{content:"\F7AC"}.mdi-card:before{content:"\FB4B"}.mdi-card-bulleted:before{content:"\FB4C"}.mdi-card-bulleted-off:before{content:"\FB4D"}.mdi-card-bulleted-off-outline:before{content:"\FB4E"}.mdi-card-bulleted-outline:before{content:"\FB4F"}.mdi-card-bulleted-settings:before{content:"\FB50"}.mdi-card-bulleted-settings-outline:before{content:"\FB51"}.mdi-card-outline:before{content:"\FB52"}.mdi-card-text:before{content:"\FB53"}.mdi-card-text-outline:before{content:"\FB54"}.mdi-cards:before{content:"\F638"}.mdi-cards-club:before{content:"\F8CD"}.mdi-cards-diamond:before{content:"\F8CE"}.mdi-cards-heart:before{content:"\F8CF"}.mdi-cards-outline:before{content:"\F639"}.mdi-cards-playing-outline:before{content:"\F63A"}.mdi-cards-spade:before{content:"\F8D0"}.mdi-cards-variant:before{content:"\F6C6"}.mdi-carrot:before{content:"\F10F"}.mdi-carry-on-bag-check:before{content:"\FD41"}.mdi-cart:before{content:"\F110"}.mdi-cart-arrow-down:before{content:"\FD42"}.mdi-cart-arrow-right:before{content:"\FC2A"}.mdi-cart-arrow-up:before{content:"\FD43"}.mdi-cart-minus:before{content:"\FD44"}.mdi-cart-off:before{content:"\F66B"}.mdi-cart-outline:before{content:"\F111"}.mdi-cart-plus:before{content:"\F112"}.mdi-cart-remove:before{content:"\FD45"}.mdi-case-sensitive-alt:before{content:"\F113"}.mdi-cash:before{content:"\F114"}.mdi-cash-100:before{content:"\F115"}.mdi-cash-marker:before{content:"\FD94"}.mdi-cash-multiple:before{content:"\F116"}.mdi-cash-refund:before{content:"\FA9B"}.mdi-cash-register:before{content:"\FCD0"}.mdi-cash-usd:before{content:"\F117"}.mdi-cassette:before{content:"\F9D3"}.mdi-cast:before{content:"\F118"}.mdi-cast-connected:before{content:"\F119"}.mdi-cast-off:before{content:"\F789"}.mdi-castle:before{content:"\F11A"}.mdi-cat:before{content:"\F11B"}.mdi-cctv:before{content:"\F7AD"}.mdi-ceiling-light:before{content:"\F768"}.mdi-cellphone:before{content:"\F11C"}.mdi-cellphone-android:before{content:"\F11D"}.mdi-cellphone-arrow-down:before{content:"\F9D4"}.mdi-cellphone-basic:before{content:"\F11E"}.mdi-cellphone-dock:before{content:"\F11F"}.mdi-cellphone-erase:before{content:"\F94C"}.mdi-cellphone-iphone:before{content:"\F120"}.mdi-cellphone-key:before{content:"\F94D"}.mdi-cellphone-link:before{content:"\F121"}.mdi-cellphone-link-off:before{content:"\F122"}.mdi-cellphone-lock:before{content:"\F94E"}.mdi-cellphone-message:before{content:"\F8D2"}.mdi-cellphone-off:before{content:"\F94F"}.mdi-cellphone-screenshot:before{content:"\FA34"}.mdi-cellphone-settings:before{content:"\F123"}.mdi-cellphone-settings-variant:before{content:"\F950"}.mdi-cellphone-sound:before{content:"\F951"}.mdi-cellphone-text:before{content:"\F8D1"}.mdi-cellphone-wireless:before{content:"\F814"}.mdi-celtic-cross:before{content:"\FCD1"}.mdi-certificate:before{content:"\F124"}.mdi-chair-school:before{content:"\F125"}.mdi-charity:before{content:"\FC2B"}.mdi-chart-arc:before{content:"\F126"}.mdi-chart-areaspline:before{content:"\F127"}.mdi-chart-bar:before{content:"\F128"}.mdi-chart-bar-stacked:before{content:"\F769"}.mdi-chart-bell-curve:before{content:"\FC2C"}.mdi-chart-bubble:before{content:"\F5E3"}.mdi-chart-donut:before{content:"\F7AE"}.mdi-chart-donut-variant:before{content:"\F7AF"}.mdi-chart-gantt:before{content:"\F66C"}.mdi-chart-histogram:before{content:"\F129"}.mdi-chart-line:before{content:"\F12A"}.mdi-chart-line-stacked:before{content:"\F76A"}.mdi-chart-line-variant:before{content:"\F7B0"}.mdi-chart-multiline:before{content:"\F8D3"}.mdi-chart-pie:before{content:"\F12B"}.mdi-chart-scatterplot-hexbin:before{content:"\F66D"}.mdi-chart-timeline:before{content:"\F66E"}.mdi-chat:before{content:"\FB55"}.mdi-chat-alert:before{content:"\FB56"}.mdi-chat-processing:before{content:"\FB57"}.mdi-check:before{content:"\F12C"}.mdi-check-all:before{content:"\F12D"}.mdi-check-box-multiple-outline:before{content:"\FC2D"}.mdi-check-box-outline:before{content:"\FC2E"}.mdi-check-circle:before{content:"\F5E0"}.mdi-check-circle-outline:before{content:"\F5E1"}.mdi-check-decagram:before{content:"\F790"}.mdi-check-network:before{content:"\FC2F"}.mdi-check-network-outline:before{content:"\FC30"}.mdi-check-outline:before{content:"\F854"}.mdi-checkbook:before{content:"\FA9C"}.mdi-checkbox-blank:before{content:"\F12E"}.mdi-checkbox-blank-circle:before{content:"\F12F"}.mdi-checkbox-blank-circle-outline:before{content:"\F130"}.mdi-checkbox-blank-outline:before{content:"\F131"}.mdi-checkbox-intermediate:before{content:"\F855"}.mdi-checkbox-marked:before{content:"\F132"}.mdi-checkbox-marked-circle:before{content:"\F133"}.mdi-checkbox-marked-circle-outline:before{content:"\F134"}.mdi-checkbox-marked-outline:before{content:"\F135"}.mdi-checkbox-multiple-blank:before{content:"\F136"}.mdi-checkbox-multiple-blank-circle:before{content:"\F63B"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"\F63C"}.mdi-checkbox-multiple-blank-outline:before{content:"\F137"}.mdi-checkbox-multiple-marked:before{content:"\F138"}.mdi-checkbox-multiple-marked-circle:before{content:"\F63D"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"\F63E"}.mdi-checkbox-multiple-marked-outline:before{content:"\F139"}.mdi-checkerboard:before{content:"\F13A"}.mdi-chef-hat:before{content:"\FB58"}.mdi-chemical-weapon:before{content:"\F13B"}.mdi-chess-bishop:before{content:"\F85B"}.mdi-chess-king:before{content:"\F856"}.mdi-chess-knight:before{content:"\F857"}.mdi-chess-pawn:before{content:"\F858"}.mdi-chess-queen:before{content:"\F859"}.mdi-chess-rook:before{content:"\F85A"}.mdi-chevron-double-down:before{content:"\F13C"}.mdi-chevron-double-left:before{content:"\F13D"}.mdi-chevron-double-right:before{content:"\F13E"}.mdi-chevron-double-up:before{content:"\F13F"}.mdi-chevron-down:before{content:"\F140"}.mdi-chevron-down-box:before{content:"\F9D5"}.mdi-chevron-down-box-outline:before{content:"\F9D6"}.mdi-chevron-down-circle:before{content:"\FB0B"}.mdi-chevron-down-circle-outline:before{content:"\FB0C"}.mdi-chevron-left:before{content:"\F141"}.mdi-chevron-left-box:before{content:"\F9D7"}.mdi-chevron-left-box-outline:before{content:"\F9D8"}.mdi-chevron-left-circle:before{content:"\FB0D"}.mdi-chevron-left-circle-outline:before{content:"\FB0E"}.mdi-chevron-right:before{content:"\F142"}.mdi-chevron-right-box:before{content:"\F9D9"}.mdi-chevron-right-box-outline:before{content:"\F9DA"}.mdi-chevron-right-circle:before{content:"\FB0F"}.mdi-chevron-right-circle-outline:before{content:"\FB10"}.mdi-chevron-triple-down:before{content:"\FD95"}.mdi-chevron-triple-left:before{content:"\FD96"}.mdi-chevron-triple-right:before{content:"\FD97"}.mdi-chevron-triple-up:before{content:"\FD98"}.mdi-chevron-up:before{content:"\F143"}.mdi-chevron-up-box:before{content:"\F9DB"}.mdi-chevron-up-box-outline:before{content:"\F9DC"}.mdi-chevron-up-circle:before{content:"\FB11"}.mdi-chevron-up-circle-outline:before{content:"\FB12"}.mdi-chili-hot:before{content:"\F7B1"}.mdi-chili-medium:before{content:"\F7B2"}.mdi-chili-mild:before{content:"\F7B3"}.mdi-chip:before{content:"\F61A"}.mdi-christianity:before{content:"\F952"}.mdi-christianity-outline:before{content:"\FCD2"}.mdi-church:before{content:"\F144"}.mdi-circle:before{content:"\F764"}.mdi-circle-edit-outline:before{content:"\F8D4"}.mdi-circle-medium:before{content:"\F9DD"}.mdi-circle-outline:before{content:"\F765"}.mdi-circle-slice-1:before{content:"\FA9D"}.mdi-circle-slice-2:before{content:"\FA9E"}.mdi-circle-slice-3:before{content:"\FA9F"}.mdi-circle-slice-4:before{content:"\FAA0"}.mdi-circle-slice-5:before{content:"\FAA1"}.mdi-circle-slice-6:before{content:"\FAA2"}.mdi-circle-slice-7:before{content:"\FAA3"}.mdi-circle-slice-8:before{content:"\FAA4"}.mdi-circle-small:before{content:"\F9DE"}.mdi-cisco-webex:before{content:"\F145"}.mdi-city:before{content:"\F146"}.mdi-city-variant:before{content:"\FA35"}.mdi-city-variant-outline:before{content:"\FA36"}.mdi-clipboard:before{content:"\F147"}.mdi-clipboard-account:before{content:"\F148"}.mdi-clipboard-account-outline:before{content:"\FC31"}.mdi-clipboard-alert:before{content:"\F149"}.mdi-clipboard-alert-outline:before{content:"\FCD3"}.mdi-clipboard-arrow-down:before{content:"\F14A"}.mdi-clipboard-arrow-down-outline:before{content:"\FC32"}.mdi-clipboard-arrow-left:before{content:"\F14B"}.mdi-clipboard-arrow-left-outline:before{content:"\FCD4"}.mdi-clipboard-arrow-right:before{content:"\FCD5"}.mdi-clipboard-arrow-right-outline:before{content:"\FCD6"}.mdi-clipboard-arrow-up:before{content:"\FC33"}.mdi-clipboard-arrow-up-outline:before{content:"\FC34"}.mdi-clipboard-check:before{content:"\F14C"}.mdi-clipboard-check-outline:before{content:"\F8A7"}.mdi-clipboard-flow:before{content:"\F6C7"}.mdi-clipboard-outline:before{content:"\F14D"}.mdi-clipboard-play:before{content:"\FC35"}.mdi-clipboard-play-outline:before{content:"\FC36"}.mdi-clipboard-plus:before{content:"\F750"}.mdi-clipboard-pulse:before{content:"\F85C"}.mdi-clipboard-pulse-outline:before{content:"\F85D"}.mdi-clipboard-text:before{content:"\F14E"}.mdi-clipboard-text-outline:before{content:"\FA37"}.mdi-clipboard-text-play:before{content:"\FC37"}.mdi-clipboard-text-play-outline:before{content:"\FC38"}.mdi-clippy:before{content:"\F14F"}.mdi-clock:before{content:"\F953"}.mdi-clock-alert:before{content:"\F954"}.mdi-clock-alert-outline:before{content:"\F5CE"}.mdi-clock-end:before{content:"\F151"}.mdi-clock-fast:before{content:"\F152"}.mdi-clock-in:before{content:"\F153"}.mdi-clock-out:before{content:"\F154"}.mdi-clock-outline:before{content:"\F150"}.mdi-clock-start:before{content:"\F155"}.mdi-close:before{content:"\F156"}.mdi-close-box:before{content:"\F157"}.mdi-close-box-multiple:before{content:"\FC39"}.mdi-close-box-multiple-outline:before{content:"\FC3A"}.mdi-close-box-outline:before{content:"\F158"}.mdi-close-circle:before{content:"\F159"}.mdi-close-circle-outline:before{content:"\F15A"}.mdi-close-network:before{content:"\F15B"}.mdi-close-network-outline:before{content:"\FC3B"}.mdi-close-octagon:before{content:"\F15C"}.mdi-close-octagon-outline:before{content:"\F15D"}.mdi-close-outline:before{content:"\F6C8"}.mdi-closed-caption:before{content:"\F15E"}.mdi-closed-caption-outline:before{content:"\FD99"}.mdi-cloud:before{content:"\F15F"}.mdi-cloud-alert:before{content:"\F9DF"}.mdi-cloud-braces:before{content:"\F7B4"}.mdi-cloud-check:before{content:"\F160"}.mdi-cloud-circle:before{content:"\F161"}.mdi-cloud-download:before{content:"\F162"}.mdi-cloud-download-outline:before{content:"\FB59"}.mdi-cloud-off-outline:before{content:"\F164"}.mdi-cloud-outline:before{content:"\F163"}.mdi-cloud-print:before{content:"\F165"}.mdi-cloud-print-outline:before{content:"\F166"}.mdi-cloud-question:before{content:"\FA38"}.mdi-cloud-search:before{content:"\F955"}.mdi-cloud-search-outline:before{content:"\F956"}.mdi-cloud-sync:before{content:"\F63F"}.mdi-cloud-tags:before{content:"\F7B5"}.mdi-cloud-upload:before{content:"\F167"}.mdi-cloud-upload-outline:before{content:"\FB5A"}.mdi-clover:before{content:"\F815"}.mdi-code-array:before{content:"\F168"}.mdi-code-braces:before{content:"\F169"}.mdi-code-brackets:before{content:"\F16A"}.mdi-code-equal:before{content:"\F16B"}.mdi-code-greater-than:before{content:"\F16C"}.mdi-code-greater-than-or-equal:before{content:"\F16D"}.mdi-code-less-than:before{content:"\F16E"}.mdi-code-less-than-or-equal:before{content:"\F16F"}.mdi-code-not-equal:before{content:"\F170"}.mdi-code-not-equal-variant:before{content:"\F171"}.mdi-code-parentheses:before{content:"\F172"}.mdi-code-string:before{content:"\F173"}.mdi-code-tags:before{content:"\F174"}.mdi-code-tags-check:before{content:"\F693"}.mdi-codepen:before{content:"\F175"}.mdi-coffee:before{content:"\F176"}.mdi-coffee-outline:before{content:"\F6C9"}.mdi-coffee-to-go:before{content:"\F177"}.mdi-coffin:before{content:"\FB5B"}.mdi-cogs:before{content:"\F8D5"}.mdi-coin:before{content:"\F178"}.mdi-coins:before{content:"\F694"}.mdi-collage:before{content:"\F640"}.mdi-collapse-all:before{content:"\FAA5"}.mdi-collapse-all-outline:before{content:"\FAA6"}.mdi-color-helper:before{content:"\F179"}.mdi-comment:before{content:"\F17A"}.mdi-comment-account:before{content:"\F17B"}.mdi-comment-account-outline:before{content:"\F17C"}.mdi-comment-alert:before{content:"\F17D"}.mdi-comment-alert-outline:before{content:"\F17E"}.mdi-comment-arrow-left:before{content:"\F9E0"}.mdi-comment-arrow-left-outline:before{content:"\F9E1"}.mdi-comment-arrow-right:before{content:"\F9E2"}.mdi-comment-arrow-right-outline:before{content:"\F9E3"}.mdi-comment-check:before{content:"\F17F"}.mdi-comment-check-outline:before{content:"\F180"}.mdi-comment-eye:before{content:"\FA39"}.mdi-comment-eye-outline:before{content:"\FA3A"}.mdi-comment-multiple:before{content:"\F85E"}.mdi-comment-multiple-outline:before{content:"\F181"}.mdi-comment-outline:before{content:"\F182"}.mdi-comment-plus:before{content:"\F9E4"}.mdi-comment-plus-outline:before{content:"\F183"}.mdi-comment-processing:before{content:"\F184"}.mdi-comment-processing-outline:before{content:"\F185"}.mdi-comment-question:before{content:"\F816"}.mdi-comment-question-outline:before{content:"\F186"}.mdi-comment-remove:before{content:"\F5DE"}.mdi-comment-remove-outline:before{content:"\F187"}.mdi-comment-search:before{content:"\FA3B"}.mdi-comment-search-outline:before{content:"\FA3C"}.mdi-comment-text:before{content:"\F188"}.mdi-comment-text-multiple:before{content:"\F85F"}.mdi-comment-text-multiple-outline:before{content:"\F860"}.mdi-comment-text-outline:before{content:"\F189"}.mdi-compare:before{content:"\F18A"}.mdi-compass:before{content:"\F18B"}.mdi-compass-off:before{content:"\FB5C"}.mdi-compass-off-outline:before{content:"\FB5D"}.mdi-compass-outline:before{content:"\F18C"}.mdi-console:before{content:"\F18D"}.mdi-console-line:before{content:"\F7B6"}.mdi-console-network:before{content:"\F8A8"}.mdi-console-network-outline:before{content:"\FC3C"}.mdi-contact-mail:before{content:"\F18E"}.mdi-contactless-payment:before{content:"\FD46"}.mdi-contacts:before{content:"\F6CA"}.mdi-contain:before{content:"\FA3D"}.mdi-contain-end:before{content:"\FA3E"}.mdi-contain-start:before{content:"\FA3F"}.mdi-content-copy:before{content:"\F18F"}.mdi-content-cut:before{content:"\F190"}.mdi-content-duplicate:before{content:"\F191"}.mdi-content-paste:before{content:"\F192"}.mdi-content-save:before{content:"\F193"}.mdi-content-save-all:before{content:"\F194"}.mdi-content-save-edit:before{content:"\FCD7"}.mdi-content-save-edit-outline:before{content:"\FCD8"}.mdi-content-save-outline:before{content:"\F817"}.mdi-content-save-settings:before{content:"\F61B"}.mdi-content-save-settings-outline:before{content:"\FB13"}.mdi-contrast:before{content:"\F195"}.mdi-contrast-box:before{content:"\F196"}.mdi-contrast-circle:before{content:"\F197"}.mdi-controller-classic:before{content:"\FB5E"}.mdi-controller-classic-outline:before{content:"\FB5F"}.mdi-cookie:before{content:"\F198"}.mdi-copyright:before{content:"\F5E6"}.mdi-cordova:before{content:"\F957"}.mdi-corn:before{content:"\F7B7"}.mdi-counter:before{content:"\F199"}.mdi-cow:before{content:"\F19A"}.mdi-crane:before{content:"\F861"}.mdi-creation:before{content:"\F1C9"}.mdi-creative-commons:before{content:"\FD47"}.mdi-credit-card:before{content:"\F19B"}.mdi-credit-card-marker:before{content:"\FD9A"}.mdi-credit-card-multiple:before{content:"\F19C"}.mdi-credit-card-off:before{content:"\F5E4"}.mdi-credit-card-plus:before{content:"\F675"}.mdi-credit-card-refund:before{content:"\FAA7"}.mdi-credit-card-scan:before{content:"\F19D"}.mdi-credit-card-settings:before{content:"\F8D6"}.mdi-credit-card-wireless:before{content:"\FD48"}.mdi-cricket:before{content:"\FD49"}.mdi-crop:before{content:"\F19E"}.mdi-crop-free:before{content:"\F19F"}.mdi-crop-landscape:before{content:"\F1A0"}.mdi-crop-portrait:before{content:"\F1A1"}.mdi-crop-rotate:before{content:"\F695"}.mdi-crop-square:before{content:"\F1A2"}.mdi-crosshairs:before{content:"\F1A3"}.mdi-crosshairs-gps:before{content:"\F1A4"}.mdi-crown:before{content:"\F1A5"}.mdi-cryengine:before{content:"\F958"}.mdi-crystal-ball:before{content:"\FB14"}.mdi-cube:before{content:"\F1A6"}.mdi-cube-outline:before{content:"\F1A7"}.mdi-cube-scan:before{content:"\FB60"}.mdi-cube-send:before{content:"\F1A8"}.mdi-cube-unfolded:before{content:"\F1A9"}.mdi-cup:before{content:"\F1AA"}.mdi-cup-off:before{content:"\F5E5"}.mdi-cup-water:before{content:"\F1AB"}.mdi-cupcake:before{content:"\F959"}.mdi-curling:before{content:"\F862"}.mdi-currency-bdt:before{content:"\F863"}.mdi-currency-brl:before{content:"\FB61"}.mdi-currency-btc:before{content:"\F1AC"}.mdi-currency-chf:before{content:"\F7B8"}.mdi-currency-cny:before{content:"\F7B9"}.mdi-currency-eth:before{content:"\F7BA"}.mdi-currency-eur:before{content:"\F1AD"}.mdi-currency-gbp:before{content:"\F1AE"}.mdi-currency-ils:before{content:"\FC3D"}.mdi-currency-inr:before{content:"\F1AF"}.mdi-currency-jpy:before{content:"\F7BB"}.mdi-currency-krw:before{content:"\F7BC"}.mdi-currency-kzt:before{content:"\F864"}.mdi-currency-ngn:before{content:"\F1B0"}.mdi-currency-php:before{content:"\F9E5"}.mdi-currency-rub:before{content:"\F1B1"}.mdi-currency-sign:before{content:"\F7BD"}.mdi-currency-try:before{content:"\F1B2"}.mdi-currency-twd:before{content:"\F7BE"}.mdi-currency-usd:before{content:"\F1B3"}.mdi-currency-usd-off:before{content:"\F679"}.mdi-current-ac:before{content:"\F95A"}.mdi-current-dc:before{content:"\F95B"}.mdi-cursor-default:before{content:"\F1B4"}.mdi-cursor-default-click:before{content:"\FCD9"}.mdi-cursor-default-click-outline:before{content:"\FCDA"}.mdi-cursor-default-outline:before{content:"\F1B5"}.mdi-cursor-move:before{content:"\F1B6"}.mdi-cursor-pointer:before{content:"\F1B7"}.mdi-cursor-text:before{content:"\F5E7"}.mdi-database:before{content:"\F1B8"}.mdi-database-check:before{content:"\FAA8"}.mdi-database-edit:before{content:"\FB62"}.mdi-database-export:before{content:"\F95D"}.mdi-database-import:before{content:"\F95C"}.mdi-database-lock:before{content:"\FAA9"}.mdi-database-minus:before{content:"\F1B9"}.mdi-database-plus:before{content:"\F1BA"}.mdi-database-refresh:before{content:"\FCDB"}.mdi-database-remove:before{content:"\FCDC"}.mdi-database-search:before{content:"\F865"}.mdi-database-settings:before{content:"\FCDD"}.mdi-death-star:before{content:"\F8D7"}.mdi-death-star-variant:before{content:"\F8D8"}.mdi-deathly-hallows:before{content:"\FB63"}.mdi-debian:before{content:"\F8D9"}.mdi-debug-step-into:before{content:"\F1BB"}.mdi-debug-step-out:before{content:"\F1BC"}.mdi-debug-step-over:before{content:"\F1BD"}.mdi-decagram:before{content:"\F76B"}.mdi-decagram-outline:before{content:"\F76C"}.mdi-decimal-decrease:before{content:"\F1BE"}.mdi-decimal-increase:before{content:"\F1BF"}.mdi-delete:before{content:"\F1C0"}.mdi-delete-circle:before{content:"\F682"}.mdi-delete-circle-outline:before{content:"\FB64"}.mdi-delete-empty:before{content:"\F6CB"}.mdi-delete-forever:before{content:"\F5E8"}.mdi-delete-forever-outline:before{content:"\FB65"}.mdi-delete-outline:before{content:"\F9E6"}.mdi-delete-restore:before{content:"\F818"}.mdi-delete-sweep:before{content:"\F5E9"}.mdi-delete-sweep-outline:before{content:"\FC3E"}.mdi-delete-variant:before{content:"\F1C1"}.mdi-delta:before{content:"\F1C2"}.mdi-desk-lamp:before{content:"\F95E"}.mdi-deskphone:before{content:"\F1C3"}.mdi-desktop-classic:before{content:"\F7BF"}.mdi-desktop-mac:before{content:"\F1C4"}.mdi-desktop-mac-dashboard:before{content:"\F9E7"}.mdi-desktop-tower:before{content:"\F1C5"}.mdi-desktop-tower-monitor:before{content:"\FAAA"}.mdi-details:before{content:"\F1C6"}.mdi-dev-to:before{content:"\FD4A"}.mdi-developer-board:before{content:"\F696"}.mdi-deviantart:before{content:"\F1C7"}.mdi-dialpad:before{content:"\F61C"}.mdi-diameter:before{content:"\FC3F"}.mdi-diameter-outline:before{content:"\FC40"}.mdi-diameter-variant:before{content:"\FC41"}.mdi-diamond:before{content:"\FB66"}.mdi-diamond-outline:before{content:"\FB67"}.mdi-diamond-stone:before{content:"\F1C8"}.mdi-dice-1:before{content:"\F1CA"}.mdi-dice-2:before{content:"\F1CB"}.mdi-dice-3:before{content:"\F1CC"}.mdi-dice-4:before{content:"\F1CD"}.mdi-dice-5:before{content:"\F1CE"}.mdi-dice-6:before{content:"\F1CF"}.mdi-dice-d10:before{content:"\F76E"}.mdi-dice-d12:before{content:"\F866"}.mdi-dice-d20:before{content:"\F5EA"}.mdi-dice-d4:before{content:"\F5EB"}.mdi-dice-d6:before{content:"\F5EC"}.mdi-dice-d8:before{content:"\F5ED"}.mdi-dice-multiple:before{content:"\F76D"}.mdi-dictionary:before{content:"\F61D"}.mdi-dip-switch:before{content:"\F7C0"}.mdi-directions:before{content:"\F1D0"}.mdi-directions-fork:before{content:"\F641"}.mdi-disc:before{content:"\F5EE"}.mdi-disc-alert:before{content:"\F1D1"}.mdi-disc-player:before{content:"\F95F"}.mdi-discord:before{content:"\F66F"}.mdi-dishwasher:before{content:"\FAAB"}.mdi-disqus:before{content:"\F1D2"}.mdi-disqus-outline:before{content:"\F1D3"}.mdi-diving-flippers:before{content:"\FD9B"}.mdi-diving-helmet:before{content:"\FD9C"}.mdi-diving-scuba:before{content:"\FD9D"}.mdi-diving-scuba-flag:before{content:"\FD9E"}.mdi-diving-scuba-tank:before{content:"\FD9F"}.mdi-diving-scuba-tank-multiple:before{content:"\FDA0"}.mdi-diving-snorkel:before{content:"\FDA1"}.mdi-division:before{content:"\F1D4"}.mdi-division-box:before{content:"\F1D5"}.mdi-dlna:before{content:"\FA40"}.mdi-dna:before{content:"\F683"}.mdi-dns:before{content:"\F1D6"}.mdi-dns-outline:before{content:"\FB68"}.mdi-do-not-disturb:before{content:"\F697"}.mdi-do-not-disturb-off:before{content:"\F698"}.mdi-docker:before{content:"\F867"}.mdi-doctor:before{content:"\FA41"}.mdi-dog:before{content:"\FA42"}.mdi-dog-service:before{content:"\FAAC"}.mdi-dog-side:before{content:"\FA43"}.mdi-dolby:before{content:"\F6B2"}.mdi-domain:before{content:"\F1D7"}.mdi-domain-off:before{content:"\FD4B"}.mdi-donkey:before{content:"\F7C1"}.mdi-door:before{content:"\F819"}.mdi-door-closed:before{content:"\F81A"}.mdi-door-open:before{content:"\F81B"}.mdi-doorbell-video:before{content:"\F868"}.mdi-dot-net:before{content:"\FAAD"}.mdi-dots-horizontal:before{content:"\F1D8"}.mdi-dots-horizontal-circle:before{content:"\F7C2"}.mdi-dots-horizontal-circle-outline:before{content:"\FB69"}.mdi-dots-vertical:before{content:"\F1D9"}.mdi-dots-vertical-circle:before{content:"\F7C3"}.mdi-dots-vertical-circle-outline:before{content:"\FB6A"}.mdi-douban:before{content:"\F699"}.mdi-download:before{content:"\F1DA"}.mdi-download-multiple:before{content:"\F9E8"}.mdi-download-network:before{content:"\F6F3"}.mdi-download-network-outline:before{content:"\FC42"}.mdi-download-outline:before{content:"\FB6B"}.mdi-drag:before{content:"\F1DB"}.mdi-drag-horizontal:before{content:"\F1DC"}.mdi-drag-variant:before{content:"\FB6C"}.mdi-drag-vertical:before{content:"\F1DD"}.mdi-drama-masks:before{content:"\FCDE"}.mdi-drawing:before{content:"\F1DE"}.mdi-drawing-box:before{content:"\F1DF"}.mdi-dribbble:before{content:"\F1E0"}.mdi-dribbble-box:before{content:"\F1E1"}.mdi-drone:before{content:"\F1E2"}.mdi-dropbox:before{content:"\F1E3"}.mdi-drupal:before{content:"\F1E4"}.mdi-duck:before{content:"\F1E5"}.mdi-dumbbell:before{content:"\F1E6"}.mdi-dump-truck:before{content:"\FC43"}.mdi-ear-hearing:before{content:"\F7C4"}.mdi-ear-hearing-off:before{content:"\FA44"}.mdi-earth:before{content:"\F1E7"}.mdi-earth-box:before{content:"\F6CC"}.mdi-earth-box-off:before{content:"\F6CD"}.mdi-earth-off:before{content:"\F1E8"}.mdi-edge:before{content:"\F1E9"}.mdi-egg:before{content:"\FAAE"}.mdi-egg-easter:before{content:"\FAAF"}.mdi-eight-track:before{content:"\F9E9"}.mdi-eject:before{content:"\F1EA"}.mdi-eject-outline:before{content:"\FB6D"}.mdi-elephant:before{content:"\F7C5"}.mdi-elevation-decline:before{content:"\F1EB"}.mdi-elevation-rise:before{content:"\F1EC"}.mdi-elevator:before{content:"\F1ED"}.mdi-email:before{content:"\F1EE"}.mdi-email-alert:before{content:"\F6CE"}.mdi-email-box:before{content:"\FCDF"}.mdi-email-check:before{content:"\FAB0"}.mdi-email-check-outline:before{content:"\FAB1"}.mdi-email-lock:before{content:"\F1F1"}.mdi-email-mark-as-unread:before{content:"\FB6E"}.mdi-email-open:before{content:"\F1EF"}.mdi-email-open-outline:before{content:"\F5EF"}.mdi-email-outline:before{content:"\F1F0"}.mdi-email-plus:before{content:"\F9EA"}.mdi-email-plus-outline:before{content:"\F9EB"}.mdi-email-search:before{content:"\F960"}.mdi-email-search-outline:before{content:"\F961"}.mdi-email-variant:before{content:"\F5F0"}.mdi-ember:before{content:"\FB15"}.mdi-emby:before{content:"\F6B3"}.mdi-emoticon:before{content:"\FC44"}.mdi-emoticon-angry:before{content:"\FC45"}.mdi-emoticon-angry-outline:before{content:"\FC46"}.mdi-emoticon-cool:before{content:"\FC47"}.mdi-emoticon-cool-outline:before{content:"\F1F3"}.mdi-emoticon-cry:before{content:"\FC48"}.mdi-emoticon-cry-outline:before{content:"\FC49"}.mdi-emoticon-dead:before{content:"\FC4A"}.mdi-emoticon-dead-outline:before{content:"\F69A"}.mdi-emoticon-devil:before{content:"\FC4B"}.mdi-emoticon-devil-outline:before{content:"\F1F4"}.mdi-emoticon-excited:before{content:"\FC4C"}.mdi-emoticon-excited-outline:before{content:"\F69B"}.mdi-emoticon-happy:before{content:"\FC4D"}.mdi-emoticon-happy-outline:before{content:"\F1F5"}.mdi-emoticon-kiss:before{content:"\FC4E"}.mdi-emoticon-kiss-outline:before{content:"\FC4F"}.mdi-emoticon-neutral:before{content:"\FC50"}.mdi-emoticon-neutral-outline:before{content:"\F1F6"}.mdi-emoticon-outline:before{content:"\F1F2"}.mdi-emoticon-poop:before{content:"\F1F7"}.mdi-emoticon-poop-outline:before{content:"\FC51"}.mdi-emoticon-sad:before{content:"\FC52"}.mdi-emoticon-sad-outline:before{content:"\F1F8"}.mdi-emoticon-tongue:before{content:"\F1F9"}.mdi-emoticon-tongue-outline:before{content:"\FC53"}.mdi-emoticon-wink:before{content:"\FC54"}.mdi-emoticon-wink-outline:before{content:"\FC55"}.mdi-engine:before{content:"\F1FA"}.mdi-engine-off:before{content:"\FA45"}.mdi-engine-off-outline:before{content:"\FA46"}.mdi-engine-outline:before{content:"\F1FB"}.mdi-equal:before{content:"\F1FC"}.mdi-equal-box:before{content:"\F1FD"}.mdi-eraser:before{content:"\F1FE"}.mdi-eraser-variant:before{content:"\F642"}.mdi-escalator:before{content:"\F1FF"}.mdi-eslint:before{content:"\FC56"}.mdi-et:before{content:"\FAB2"}.mdi-ethereum:before{content:"\F869"}.mdi-ethernet:before{content:"\F200"}.mdi-ethernet-cable:before{content:"\F201"}.mdi-ethernet-cable-off:before{content:"\F202"}.mdi-etsy:before{content:"\F203"}.mdi-ev-station:before{content:"\F5F1"}.mdi-eventbrite:before{content:"\F7C6"}.mdi-evernote:before{content:"\F204"}.mdi-exclamation:before{content:"\F205"}.mdi-exit-run:before{content:"\FA47"}.mdi-exit-to-app:before{content:"\F206"}.mdi-expand-all:before{content:"\FAB3"}.mdi-expand-all-outline:before{content:"\FAB4"}.mdi-exponent:before{content:"\F962"}.mdi-exponent-box:before{content:"\F963"}.mdi-export:before{content:"\F207"}.mdi-export-variant:before{content:"\FB6F"}.mdi-eye:before{content:"\F208"}.mdi-eye-check:before{content:"\FCE0"}.mdi-eye-check-outline:before{content:"\FCE1"}.mdi-eye-circle:before{content:"\FB70"}.mdi-eye-circle-outline:before{content:"\FB71"}.mdi-eye-off:before{content:"\F209"}.mdi-eye-off-outline:before{content:"\F6D0"}.mdi-eye-outline:before{content:"\F6CF"}.mdi-eye-plus:before{content:"\F86A"}.mdi-eye-plus-outline:before{content:"\F86B"}.mdi-eye-settings:before{content:"\F86C"}.mdi-eye-settings-outline:before{content:"\F86D"}.mdi-eyedropper:before{content:"\F20A"}.mdi-eyedropper-variant:before{content:"\F20B"}.mdi-face:before{content:"\F643"}.mdi-face-agent:before{content:"\FD4C"}.mdi-face-outline:before{content:"\FB72"}.mdi-face-profile:before{content:"\F644"}.mdi-face-recognition:before{content:"\FC57"}.mdi-facebook:before{content:"\F20C"}.mdi-facebook-box:before{content:"\F20D"}.mdi-facebook-messenger:before{content:"\F20E"}.mdi-facebook-workplace:before{content:"\FB16"}.mdi-factory:before{content:"\F20F"}.mdi-fan:before{content:"\F210"}.mdi-fan-off:before{content:"\F81C"}.mdi-fast-forward:before{content:"\F211"}.mdi-fast-forward-10:before{content:"\FD4D"}.mdi-fast-forward-30:before{content:"\FCE2"}.mdi-fast-forward-outline:before{content:"\F6D1"}.mdi-fax:before{content:"\F212"}.mdi-feather:before{content:"\F6D2"}.mdi-feature-search:before{content:"\FA48"}.mdi-feature-search-outline:before{content:"\FA49"}.mdi-fedora:before{content:"\F8DA"}.mdi-ferry:before{content:"\F213"}.mdi-file:before{content:"\F214"}.mdi-file-account:before{content:"\F73A"}.mdi-file-alert:before{content:"\FA4A"}.mdi-file-alert-outline:before{content:"\FA4B"}.mdi-file-cabinet:before{content:"\FAB5"}.mdi-file-cancel:before{content:"\FDA2"}.mdi-file-cancel-outline:before{content:"\FDA3"}.mdi-file-chart:before{content:"\F215"}.mdi-file-check:before{content:"\F216"}.mdi-file-cloud:before{content:"\F217"}.mdi-file-compare:before{content:"\F8A9"}.mdi-file-delimited:before{content:"\F218"}.mdi-file-document:before{content:"\F219"}.mdi-file-document-box:before{content:"\F21A"}.mdi-file-document-box-multiple:before{content:"\FAB6"}.mdi-file-document-box-multiple-outline:before{content:"\FAB7"}.mdi-file-document-box-outline:before{content:"\F9EC"}.mdi-file-document-edit:before{content:"\FDA4"}.mdi-file-document-edit-outline:before{content:"\FDA5"}.mdi-file-document-outline:before{content:"\F9ED"}.mdi-file-download:before{content:"\F964"}.mdi-file-download-outline:before{content:"\F965"}.mdi-file-excel:before{content:"\F21B"}.mdi-file-excel-box:before{content:"\F21C"}.mdi-file-export:before{content:"\F21D"}.mdi-file-eye:before{content:"\FDA6"}.mdi-file-eye-outline:before{content:"\FDA7"}.mdi-file-find:before{content:"\F21E"}.mdi-file-find-outline:before{content:"\FB73"}.mdi-file-hidden:before{content:"\F613"}.mdi-file-image:before{content:"\F21F"}.mdi-file-import:before{content:"\F220"}.mdi-file-lock:before{content:"\F221"}.mdi-file-move:before{content:"\FAB8"}.mdi-file-multiple:before{content:"\F222"}.mdi-file-music:before{content:"\F223"}.mdi-file-outline:before{content:"\F224"}.mdi-file-pdf:before{content:"\F225"}.mdi-file-pdf-box:before{content:"\F226"}.mdi-file-percent:before{content:"\F81D"}.mdi-file-plus:before{content:"\F751"}.mdi-file-powerpoint:before{content:"\F227"}.mdi-file-powerpoint-box:before{content:"\F228"}.mdi-file-presentation-box:before{content:"\F229"}.mdi-file-question:before{content:"\F86E"}.mdi-file-remove:before{content:"\FB74"}.mdi-file-replace:before{content:"\FB17"}.mdi-file-replace-outline:before{content:"\FB18"}.mdi-file-restore:before{content:"\F670"}.mdi-file-search:before{content:"\FC58"}.mdi-file-search-outline:before{content:"\FC59"}.mdi-file-send:before{content:"\F22A"}.mdi-file-table:before{content:"\FC5A"}.mdi-file-table-outline:before{content:"\FC5B"}.mdi-file-tree:before{content:"\F645"}.mdi-file-undo:before{content:"\F8DB"}.mdi-file-upload:before{content:"\FA4C"}.mdi-file-upload-outline:before{content:"\FA4D"}.mdi-file-video:before{content:"\F22B"}.mdi-file-word:before{content:"\F22C"}.mdi-file-word-box:before{content:"\F22D"}.mdi-file-xml:before{content:"\F22E"}.mdi-film:before{content:"\F22F"}.mdi-filmstrip:before{content:"\F230"}.mdi-filmstrip-off:before{content:"\F231"}.mdi-filter:before{content:"\F232"}.mdi-filter-outline:before{content:"\F233"}.mdi-filter-remove:before{content:"\F234"}.mdi-filter-remove-outline:before{content:"\F235"}.mdi-filter-variant:before{content:"\F236"}.mdi-finance:before{content:"\F81E"}.mdi-find-replace:before{content:"\F6D3"}.mdi-fingerprint:before{content:"\F237"}.mdi-fire:before{content:"\F238"}.mdi-fire-truck:before{content:"\F8AA"}.mdi-firebase:before{content:"\F966"}.mdi-firefox:before{content:"\F239"}.mdi-fish:before{content:"\F23A"}.mdi-flag:before{content:"\F23B"}.mdi-flag-checkered:before{content:"\F23C"}.mdi-flag-minus:before{content:"\FB75"}.mdi-flag-outline:before{content:"\F23D"}.mdi-flag-plus:before{content:"\FB76"}.mdi-flag-remove:before{content:"\FB77"}.mdi-flag-triangle:before{content:"\F23F"}.mdi-flag-variant:before{content:"\F240"}.mdi-flag-variant-outline:before{content:"\F23E"}.mdi-flare:before{content:"\FD4E"}.mdi-flash:before{content:"\F241"}.mdi-flash-auto:before{content:"\F242"}.mdi-flash-circle:before{content:"\F81F"}.mdi-flash-off:before{content:"\F243"}.mdi-flash-outline:before{content:"\F6D4"}.mdi-flash-red-eye:before{content:"\F67A"}.mdi-flashlight:before{content:"\F244"}.mdi-flashlight-off:before{content:"\F245"}.mdi-flask:before{content:"\F093"}.mdi-flask-empty:before{content:"\F094"}.mdi-flask-empty-outline:before{content:"\F095"}.mdi-flask-outline:before{content:"\F096"}.mdi-flattr:before{content:"\F246"}.mdi-flickr:before{content:"\FCE3"}.mdi-flip-to-back:before{content:"\F247"}.mdi-flip-to-front:before{content:"\F248"}.mdi-floor-lamp:before{content:"\F8DC"}.mdi-floor-plan:before{content:"\F820"}.mdi-floppy:before{content:"\F249"}.mdi-floppy-variant:before{content:"\F9EE"}.mdi-flower:before{content:"\F24A"}.mdi-flower-outline:before{content:"\F9EF"}.mdi-flower-poppy:before{content:"\FCE4"}.mdi-flower-tulip:before{content:"\F9F0"}.mdi-flower-tulip-outline:before{content:"\F9F1"}.mdi-folder:before{content:"\F24B"}.mdi-folder-account:before{content:"\F24C"}.mdi-folder-account-outline:before{content:"\FB78"}.mdi-folder-alert:before{content:"\FDA8"}.mdi-folder-alert-outline:before{content:"\FDA9"}.mdi-folder-clock:before{content:"\FAB9"}.mdi-folder-clock-outline:before{content:"\FABA"}.mdi-folder-download:before{content:"\F24D"}.mdi-folder-edit:before{content:"\F8DD"}.mdi-folder-edit-outline:before{content:"\FDAA"}.mdi-folder-google-drive:before{content:"\F24E"}.mdi-folder-image:before{content:"\F24F"}.mdi-folder-key:before{content:"\F8AB"}.mdi-folder-key-network:before{content:"\F8AC"}.mdi-folder-key-network-outline:before{content:"\FC5C"}.mdi-folder-lock:before{content:"\F250"}.mdi-folder-lock-open:before{content:"\F251"}.mdi-folder-move:before{content:"\F252"}.mdi-folder-multiple:before{content:"\F253"}.mdi-folder-multiple-image:before{content:"\F254"}.mdi-folder-multiple-outline:before{content:"\F255"}.mdi-folder-network:before{content:"\F86F"}.mdi-folder-network-outline:before{content:"\FC5D"}.mdi-folder-open:before{content:"\F76F"}.mdi-folder-open-outline:before{content:"\FDAB"}.mdi-folder-outline:before{content:"\F256"}.mdi-folder-plus:before{content:"\F257"}.mdi-folder-plus-outline:before{content:"\FB79"}.mdi-folder-pound:before{content:"\FCE5"}.mdi-folder-pound-outline:before{content:"\FCE6"}.mdi-folder-remove:before{content:"\F258"}.mdi-folder-remove-outline:before{content:"\FB7A"}.mdi-folder-search:before{content:"\F967"}.mdi-folder-search-outline:before{content:"\F968"}.mdi-folder-star:before{content:"\F69C"}.mdi-folder-star-outline:before{content:"\FB7B"}.mdi-folder-sync:before{content:"\FCE7"}.mdi-folder-sync-outline:before{content:"\FCE8"}.mdi-folder-text:before{content:"\FC5E"}.mdi-folder-text-outline:before{content:"\FC5F"}.mdi-folder-upload:before{content:"\F259"}.mdi-font-awesome:before{content:"\F03A"}.mdi-food:before{content:"\F25A"}.mdi-food-apple:before{content:"\F25B"}.mdi-food-apple-outline:before{content:"\FC60"}.mdi-food-croissant:before{content:"\F7C7"}.mdi-food-fork-drink:before{content:"\F5F2"}.mdi-food-off:before{content:"\F5F3"}.mdi-food-variant:before{content:"\F25C"}.mdi-football:before{content:"\F25D"}.mdi-football-australian:before{content:"\F25E"}.mdi-football-helmet:before{content:"\F25F"}.mdi-forklift:before{content:"\F7C8"}.mdi-format-align-bottom:before{content:"\F752"}.mdi-format-align-center:before{content:"\F260"}.mdi-format-align-justify:before{content:"\F261"}.mdi-format-align-left:before{content:"\F262"}.mdi-format-align-middle:before{content:"\F753"}.mdi-format-align-right:before{content:"\F263"}.mdi-format-align-top:before{content:"\F754"}.mdi-format-annotation-minus:before{content:"\FABB"}.mdi-format-annotation-plus:before{content:"\F646"}.mdi-format-bold:before{content:"\F264"}.mdi-format-clear:before{content:"\F265"}.mdi-format-color-fill:before{content:"\F266"}.mdi-format-color-text:before{content:"\F69D"}.mdi-format-columns:before{content:"\F8DE"}.mdi-format-float-center:before{content:"\F267"}.mdi-format-float-left:before{content:"\F268"}.mdi-format-float-none:before{content:"\F269"}.mdi-format-float-right:before{content:"\F26A"}.mdi-format-font:before{content:"\F6D5"}.mdi-format-font-size-decrease:before{content:"\F9F2"}.mdi-format-font-size-increase:before{content:"\F9F3"}.mdi-format-header-1:before{content:"\F26B"}.mdi-format-header-2:before{content:"\F26C"}.mdi-format-header-3:before{content:"\F26D"}.mdi-format-header-4:before{content:"\F26E"}.mdi-format-header-5:before{content:"\F26F"}.mdi-format-header-6:before{content:"\F270"}.mdi-format-header-decrease:before{content:"\F271"}.mdi-format-header-equal:before{content:"\F272"}.mdi-format-header-increase:before{content:"\F273"}.mdi-format-header-pound:before{content:"\F274"}.mdi-format-horizontal-align-center:before{content:"\F61E"}.mdi-format-horizontal-align-left:before{content:"\F61F"}.mdi-format-horizontal-align-right:before{content:"\F620"}.mdi-format-indent-decrease:before{content:"\F275"}.mdi-format-indent-increase:before{content:"\F276"}.mdi-format-italic:before{content:"\F277"}.mdi-format-letter-case:before{content:"\FB19"}.mdi-format-letter-case-lower:before{content:"\FB1A"}.mdi-format-letter-case-upper:before{content:"\FB1B"}.mdi-format-line-spacing:before{content:"\F278"}.mdi-format-line-style:before{content:"\F5C8"}.mdi-format-line-weight:before{content:"\F5C9"}.mdi-format-list-bulleted:before{content:"\F279"}.mdi-format-list-bulleted-square:before{content:"\FDAC"}.mdi-format-list-bulleted-type:before{content:"\F27A"}.mdi-format-list-checkbox:before{content:"\F969"}.mdi-format-list-checks:before{content:"\F755"}.mdi-format-list-numbered:before{content:"\F27B"}.mdi-format-list-numbered-rtl:before{content:"\FCE9"}.mdi-format-page-break:before{content:"\F6D6"}.mdi-format-paint:before{content:"\F27C"}.mdi-format-paragraph:before{content:"\F27D"}.mdi-format-pilcrow:before{content:"\F6D7"}.mdi-format-quote-close:before{content:"\F27E"}.mdi-format-quote-open:before{content:"\F756"}.mdi-format-rotate-90:before{content:"\F6A9"}.mdi-format-section:before{content:"\F69E"}.mdi-format-size:before{content:"\F27F"}.mdi-format-strikethrough:before{content:"\F280"}.mdi-format-strikethrough-variant:before{content:"\F281"}.mdi-format-subscript:before{content:"\F282"}.mdi-format-superscript:before{content:"\F283"}.mdi-format-text:before{content:"\F284"}.mdi-format-text-rotation-down:before{content:"\FD4F"}.mdi-format-text-rotation-none:before{content:"\FD50"}.mdi-format-text-wrapping-clip:before{content:"\FCEA"}.mdi-format-text-wrapping-overflow:before{content:"\FCEB"}.mdi-format-text-wrapping-wrap:before{content:"\FCEC"}.mdi-format-textbox:before{content:"\FCED"}.mdi-format-textdirection-l-to-r:before{content:"\F285"}.mdi-format-textdirection-r-to-l:before{content:"\F286"}.mdi-format-title:before{content:"\F5F4"}.mdi-format-underline:before{content:"\F287"}.mdi-format-vertical-align-bottom:before{content:"\F621"}.mdi-format-vertical-align-center:before{content:"\F622"}.mdi-format-vertical-align-top:before{content:"\F623"}.mdi-format-wrap-inline:before{content:"\F288"}.mdi-format-wrap-square:before{content:"\F289"}.mdi-format-wrap-tight:before{content:"\F28A"}.mdi-format-wrap-top-bottom:before{content:"\F28B"}.mdi-forum:before{content:"\F28C"}.mdi-forum-outline:before{content:"\F821"}.mdi-forward:before{content:"\F28D"}.mdi-forwardburger:before{content:"\FD51"}.mdi-fountain:before{content:"\F96A"}.mdi-fountain-pen:before{content:"\FCEE"}.mdi-fountain-pen-tip:before{content:"\FCEF"}.mdi-foursquare:before{content:"\F28E"}.mdi-freebsd:before{content:"\F8DF"}.mdi-fridge:before{content:"\F290"}.mdi-fridge-bottom:before{content:"\F292"}.mdi-fridge-outline:before{content:"\F28F"}.mdi-fridge-top:before{content:"\F291"}.mdi-fuel:before{content:"\F7C9"}.mdi-fullscreen:before{content:"\F293"}.mdi-fullscreen-exit:before{content:"\F294"}.mdi-function:before{content:"\F295"}.mdi-function-variant:before{content:"\F870"}.mdi-fuse:before{content:"\FC61"}.mdi-fuse-blade:before{content:"\FC62"}.mdi-gamepad:before{content:"\F296"}.mdi-gamepad-variant:before{content:"\F297"}.mdi-gantry-crane:before{content:"\FDAD"}.mdi-garage:before{content:"\F6D8"}.mdi-garage-alert:before{content:"\F871"}.mdi-garage-open:before{content:"\F6D9"}.mdi-gas-cylinder:before{content:"\F647"}.mdi-gas-station:before{content:"\F298"}.mdi-gate:before{content:"\F299"}.mdi-gate-and:before{content:"\F8E0"}.mdi-gate-nand:before{content:"\F8E1"}.mdi-gate-nor:before{content:"\F8E2"}.mdi-gate-not:before{content:"\F8E3"}.mdi-gate-or:before{content:"\F8E4"}.mdi-gate-xnor:before{content:"\F8E5"}.mdi-gate-xor:before{content:"\F8E6"}.mdi-gauge:before{content:"\F29A"}.mdi-gauge-empty:before{content:"\F872"}.mdi-gauge-full:before{content:"\F873"}.mdi-gauge-low:before{content:"\F874"}.mdi-gavel:before{content:"\F29B"}.mdi-gender-female:before{content:"\F29C"}.mdi-gender-male:before{content:"\F29D"}.mdi-gender-male-female:before{content:"\F29E"}.mdi-gender-transgender:before{content:"\F29F"}.mdi-gentoo:before{content:"\F8E7"}.mdi-gesture:before{content:"\F7CA"}.mdi-gesture-double-tap:before{content:"\F73B"}.mdi-gesture-pinch:before{content:"\FABC"}.mdi-gesture-spread:before{content:"\FABD"}.mdi-gesture-swipe:before{content:"\FD52"}.mdi-gesture-swipe-down:before{content:"\F73C"}.mdi-gesture-swipe-horizontal:before{content:"\FABE"}.mdi-gesture-swipe-left:before{content:"\F73D"}.mdi-gesture-swipe-right:before{content:"\F73E"}.mdi-gesture-swipe-up:before{content:"\F73F"}.mdi-gesture-swipe-vertical:before{content:"\FABF"}.mdi-gesture-tap:before{content:"\F740"}.mdi-gesture-tap-hold:before{content:"\FD53"}.mdi-gesture-two-double-tap:before{content:"\F741"}.mdi-gesture-two-tap:before{content:"\F742"}.mdi-ghost:before{content:"\F2A0"}.mdi-ghost-off:before{content:"\F9F4"}.mdi-gif:before{content:"\FD54"}.mdi-gift:before{content:"\F2A1"}.mdi-git:before{content:"\F2A2"}.mdi-github-box:before{content:"\F2A3"}.mdi-github-circle:before{content:"\F2A4"}.mdi-github-face:before{content:"\F6DA"}.mdi-gitlab:before{content:"\FB7C"}.mdi-glass-cocktail:before{content:"\F356"}.mdi-glass-flute:before{content:"\F2A5"}.mdi-glass-mug:before{content:"\F2A6"}.mdi-glass-stange:before{content:"\F2A7"}.mdi-glass-tulip:before{content:"\F2A8"}.mdi-glass-wine:before{content:"\F875"}.mdi-glassdoor:before{content:"\F2A9"}.mdi-glasses:before{content:"\F2AA"}.mdi-globe-model:before{content:"\F8E8"}.mdi-gmail:before{content:"\F2AB"}.mdi-gnome:before{content:"\F2AC"}.mdi-go-kart:before{content:"\FD55"}.mdi-go-kart-track:before{content:"\FD56"}.mdi-gog:before{content:"\FB7D"}.mdi-golf:before{content:"\F822"}.mdi-gondola:before{content:"\F685"}.mdi-goodreads:before{content:"\FD57"}.mdi-google:before{content:"\F2AD"}.mdi-google-adwords:before{content:"\FC63"}.mdi-google-allo:before{content:"\F801"}.mdi-google-analytics:before{content:"\F7CB"}.mdi-google-assistant:before{content:"\F7CC"}.mdi-google-cardboard:before{content:"\F2AE"}.mdi-google-chrome:before{content:"\F2AF"}.mdi-google-circles:before{content:"\F2B0"}.mdi-google-circles-communities:before{content:"\F2B1"}.mdi-google-circles-extended:before{content:"\F2B2"}.mdi-google-circles-group:before{content:"\F2B3"}.mdi-google-classroom:before{content:"\F2C0"}.mdi-google-controller:before{content:"\F2B4"}.mdi-google-controller-off:before{content:"\F2B5"}.mdi-google-drive:before{content:"\F2B6"}.mdi-google-earth:before{content:"\F2B7"}.mdi-google-fit:before{content:"\F96B"}.mdi-google-glass:before{content:"\F2B8"}.mdi-google-hangouts:before{content:"\F2C9"}.mdi-google-home:before{content:"\F823"}.mdi-google-keep:before{content:"\F6DB"}.mdi-google-lens:before{content:"\F9F5"}.mdi-google-maps:before{content:"\F5F5"}.mdi-google-nearby:before{content:"\F2B9"}.mdi-google-pages:before{content:"\F2BA"}.mdi-google-photos:before{content:"\F6DC"}.mdi-google-physical-web:before{content:"\F2BB"}.mdi-google-play:before{content:"\F2BC"}.mdi-google-plus:before{content:"\F2BD"}.mdi-google-plus-box:before{content:"\F2BE"}.mdi-google-spreadsheet:before{content:"\F9F6"}.mdi-google-street-view:before{content:"\FC64"}.mdi-google-translate:before{content:"\F2BF"}.mdi-gpu:before{content:"\F8AD"}.mdi-gradient:before{content:"\F69F"}.mdi-grain:before{content:"\FD58"}.mdi-graphql:before{content:"\F876"}.mdi-grave-stone:before{content:"\FB7E"}.mdi-grease-pencil:before{content:"\F648"}.mdi-greater-than:before{content:"\F96C"}.mdi-greater-than-or-equal:before{content:"\F96D"}.mdi-grid:before{content:"\F2C1"}.mdi-grid-large:before{content:"\F757"}.mdi-grid-off:before{content:"\F2C2"}.mdi-group:before{content:"\F2C3"}.mdi-guitar-acoustic:before{content:"\F770"}.mdi-guitar-electric:before{content:"\F2C4"}.mdi-guitar-pick:before{content:"\F2C5"}.mdi-guitar-pick-outline:before{content:"\F2C6"}.mdi-guy-fawkes-mask:before{content:"\F824"}.mdi-hackernews:before{content:"\F624"}.mdi-hail:before{content:"\FAC0"}.mdi-halloween:before{content:"\FB7F"}.mdi-hamburger:before{content:"\F684"}.mdi-hammer:before{content:"\F8E9"}.mdi-hand:before{content:"\FA4E"}.mdi-hand-okay:before{content:"\FA4F"}.mdi-hand-peace:before{content:"\FA50"}.mdi-hand-peace-variant:before{content:"\FA51"}.mdi-hand-pointing-down:before{content:"\FA52"}.mdi-hand-pointing-left:before{content:"\FA53"}.mdi-hand-pointing-right:before{content:"\F2C7"}.mdi-hand-pointing-up:before{content:"\FA54"}.mdi-hanger:before{content:"\F2C8"}.mdi-hard-hat:before{content:"\F96E"}.mdi-harddisk:before{content:"\F2CA"}.mdi-hat-fedora:before{content:"\FB80"}.mdi-hazard-lights:before{content:"\FC65"}.mdi-hdr:before{content:"\FD59"}.mdi-hdr-off:before{content:"\FD5A"}.mdi-headphones:before{content:"\F2CB"}.mdi-headphones-bluetooth:before{content:"\F96F"}.mdi-headphones-box:before{content:"\F2CC"}.mdi-headphones-off:before{content:"\F7CD"}.mdi-headphones-settings:before{content:"\F2CD"}.mdi-headset:before{content:"\F2CE"}.mdi-headset-dock:before{content:"\F2CF"}.mdi-headset-off:before{content:"\F2D0"}.mdi-heart:before{content:"\F2D1"}.mdi-heart-box:before{content:"\F2D2"}.mdi-heart-box-outline:before{content:"\F2D3"}.mdi-heart-broken:before{content:"\F2D4"}.mdi-heart-broken-outline:before{content:"\FCF0"}.mdi-heart-circle:before{content:"\F970"}.mdi-heart-circle-outline:before{content:"\F971"}.mdi-heart-half:before{content:"\F6DE"}.mdi-heart-half-full:before{content:"\F6DD"}.mdi-heart-half-outline:before{content:"\F6DF"}.mdi-heart-multiple:before{content:"\FA55"}.mdi-heart-multiple-outline:before{content:"\FA56"}.mdi-heart-off:before{content:"\F758"}.mdi-heart-outline:before{content:"\F2D5"}.mdi-heart-pulse:before{content:"\F5F6"}.mdi-helicopter:before{content:"\FAC1"}.mdi-help:before{content:"\F2D6"}.mdi-help-box:before{content:"\F78A"}.mdi-help-circle:before{content:"\F2D7"}.mdi-help-circle-outline:before{content:"\F625"}.mdi-help-network:before{content:"\F6F4"}.mdi-help-network-outline:before{content:"\FC66"}.mdi-help-rhombus:before{content:"\FB81"}.mdi-help-rhombus-outline:before{content:"\FB82"}.mdi-hexagon:before{content:"\F2D8"}.mdi-hexagon-multiple:before{content:"\F6E0"}.mdi-hexagon-outline:before{content:"\F2D9"}.mdi-hexagon-slice-1:before{content:"\FAC2"}.mdi-hexagon-slice-2:before{content:"\FAC3"}.mdi-hexagon-slice-3:before{content:"\FAC4"}.mdi-hexagon-slice-4:before{content:"\FAC5"}.mdi-hexagon-slice-5:before{content:"\FAC6"}.mdi-hexagon-slice-6:before{content:"\FAC7"}.mdi-hexagram:before{content:"\FAC8"}.mdi-hexagram-outline:before{content:"\FAC9"}.mdi-high-definition:before{content:"\F7CE"}.mdi-high-definition-box:before{content:"\F877"}.mdi-highway:before{content:"\F5F7"}.mdi-hiking:before{content:"\FD5B"}.mdi-hinduism:before{content:"\F972"}.mdi-history:before{content:"\F2DA"}.mdi-hockey-puck:before{content:"\F878"}.mdi-hockey-sticks:before{content:"\F879"}.mdi-hololens:before{content:"\F2DB"}.mdi-home:before{content:"\F2DC"}.mdi-home-account:before{content:"\F825"}.mdi-home-alert:before{content:"\F87A"}.mdi-home-assistant:before{content:"\F7CF"}.mdi-home-automation:before{content:"\F7D0"}.mdi-home-circle:before{content:"\F7D1"}.mdi-home-city:before{content:"\FCF1"}.mdi-home-city-outline:before{content:"\FCF2"}.mdi-home-currency-usd:before{content:"\F8AE"}.mdi-home-floor-0:before{content:"\FDAE"}.mdi-home-floor-1:before{content:"\FD5C"}.mdi-home-floor-2:before{content:"\FD5D"}.mdi-home-floor-3:before{content:"\FD5E"}.mdi-home-floor-a:before{content:"\FD5F"}.mdi-home-floor-b:before{content:"\FD60"}.mdi-home-floor-g:before{content:"\FD61"}.mdi-home-floor-l:before{content:"\FD62"}.mdi-home-floor-negative-1:before{content:"\FDAF"}.mdi-home-group:before{content:"\FDB0"}.mdi-home-heart:before{content:"\F826"}.mdi-home-lock:before{content:"\F8EA"}.mdi-home-lock-open:before{content:"\F8EB"}.mdi-home-map-marker:before{content:"\F5F8"}.mdi-home-minus:before{content:"\F973"}.mdi-home-modern:before{content:"\F2DD"}.mdi-home-outline:before{content:"\F6A0"}.mdi-home-plus:before{content:"\F974"}.mdi-home-variant:before{content:"\F2DE"}.mdi-home-variant-outline:before{content:"\FB83"}.mdi-hook:before{content:"\F6E1"}.mdi-hook-off:before{content:"\F6E2"}.mdi-hops:before{content:"\F2DF"}.mdi-horseshoe:before{content:"\FA57"}.mdi-hospital:before{content:"\F2E0"}.mdi-hospital-building:before{content:"\F2E1"}.mdi-hospital-marker:before{content:"\F2E2"}.mdi-hot-tub:before{content:"\F827"}.mdi-hotel:before{content:"\F2E3"}.mdi-houzz:before{content:"\F2E4"}.mdi-houzz-box:before{content:"\F2E5"}.mdi-hubspot:before{content:"\FCF3"}.mdi-hulu:before{content:"\F828"}.mdi-human:before{content:"\F2E6"}.mdi-human-child:before{content:"\F2E7"}.mdi-human-female:before{content:"\F649"}.mdi-human-female-boy:before{content:"\FA58"}.mdi-human-female-female:before{content:"\FA59"}.mdi-human-female-girl:before{content:"\FA5A"}.mdi-human-greeting:before{content:"\F64A"}.mdi-human-handsdown:before{content:"\F64B"}.mdi-human-handsup:before{content:"\F64C"}.mdi-human-male:before{content:"\F64D"}.mdi-human-male-boy:before{content:"\FA5B"}.mdi-human-male-female:before{content:"\F2E8"}.mdi-human-male-girl:before{content:"\FA5C"}.mdi-human-male-male:before{content:"\FA5D"}.mdi-human-pregnant:before{content:"\F5CF"}.mdi-humble-bundle:before{content:"\F743"}.mdi-ice-cream:before{content:"\F829"}.mdi-iframe:before{content:"\FC67"}.mdi-iframe-outline:before{content:"\FC68"}.mdi-image:before{content:"\F2E9"}.mdi-image-album:before{content:"\F2EA"}.mdi-image-area:before{content:"\F2EB"}.mdi-image-area-close:before{content:"\F2EC"}.mdi-image-broken:before{content:"\F2ED"}.mdi-image-broken-variant:before{content:"\F2EE"}.mdi-image-filter:before{content:"\F2EF"}.mdi-image-filter-black-white:before{content:"\F2F0"}.mdi-image-filter-center-focus:before{content:"\F2F1"}.mdi-image-filter-center-focus-weak:before{content:"\F2F2"}.mdi-image-filter-drama:before{content:"\F2F3"}.mdi-image-filter-frames:before{content:"\F2F4"}.mdi-image-filter-hdr:before{content:"\F2F5"}.mdi-image-filter-none:before{content:"\F2F6"}.mdi-image-filter-tilt-shift:before{content:"\F2F7"}.mdi-image-filter-vintage:before{content:"\F2F8"}.mdi-image-move:before{content:"\F9F7"}.mdi-image-multiple:before{content:"\F2F9"}.mdi-image-off:before{content:"\F82A"}.mdi-image-outline:before{content:"\F975"}.mdi-image-plus:before{content:"\F87B"}.mdi-image-search:before{content:"\F976"}.mdi-image-search-outline:before{content:"\F977"}.mdi-image-size-select-actual:before{content:"\FC69"}.mdi-image-size-select-large:before{content:"\FC6A"}.mdi-image-size-select-small:before{content:"\FC6B"}.mdi-import:before{content:"\F2FA"}.mdi-inbox:before{content:"\F686"}.mdi-inbox-arrow-down:before{content:"\F2FB"}.mdi-inbox-arrow-up:before{content:"\F3D1"}.mdi-inbox-multiple:before{content:"\F8AF"}.mdi-inbox-multiple-outline:before{content:"\FB84"}.mdi-incognito:before{content:"\F5F9"}.mdi-infinity:before{content:"\F6E3"}.mdi-information:before{content:"\F2FC"}.mdi-information-outline:before{content:"\F2FD"}.mdi-information-variant:before{content:"\F64E"}.mdi-instagram:before{content:"\F2FE"}.mdi-instapaper:before{content:"\F2FF"}.mdi-internet-explorer:before{content:"\F300"}.mdi-invert-colors:before{content:"\F301"}.mdi-ip:before{content:"\FA5E"}.mdi-ip-network:before{content:"\FA5F"}.mdi-ip-network-outline:before{content:"\FC6C"}.mdi-ipod:before{content:"\FC6D"}.mdi-islam:before{content:"\F978"}.mdi-itunes:before{content:"\F676"}.mdi-jabber:before{content:"\FDB1"}.mdi-jeepney:before{content:"\F302"}.mdi-jira:before{content:"\F303"}.mdi-jquery:before{content:"\F87C"}.mdi-jsfiddle:before{content:"\F304"}.mdi-json:before{content:"\F626"}.mdi-judaism:before{content:"\F979"}.mdi-kabaddi:before{content:"\FD63"}.mdi-karate:before{content:"\F82B"}.mdi-keg:before{content:"\F305"}.mdi-kettle:before{content:"\F5FA"}.mdi-key:before{content:"\F306"}.mdi-key-change:before{content:"\F307"}.mdi-key-minus:before{content:"\F308"}.mdi-key-outline:before{content:"\FDB2"}.mdi-key-plus:before{content:"\F309"}.mdi-key-remove:before{content:"\F30A"}.mdi-key-variant:before{content:"\F30B"}.mdi-keyboard:before{content:"\F30C"}.mdi-keyboard-backspace:before{content:"\F30D"}.mdi-keyboard-caps:before{content:"\F30E"}.mdi-keyboard-close:before{content:"\F30F"}.mdi-keyboard-off:before{content:"\F310"}.mdi-keyboard-outline:before{content:"\F97A"}.mdi-keyboard-return:before{content:"\F311"}.mdi-keyboard-settings:before{content:"\F9F8"}.mdi-keyboard-settings-outline:before{content:"\F9F9"}.mdi-keyboard-tab:before{content:"\F312"}.mdi-keyboard-variant:before{content:"\F313"}.mdi-kickstarter:before{content:"\F744"}.mdi-knife:before{content:"\F9FA"}.mdi-knife-military:before{content:"\F9FB"}.mdi-kodi:before{content:"\F314"}.mdi-label:before{content:"\F315"}.mdi-label-off:before{content:"\FACA"}.mdi-label-off-outline:before{content:"\FACB"}.mdi-label-outline:before{content:"\F316"}.mdi-label-variant:before{content:"\FACC"}.mdi-label-variant-outline:before{content:"\FACD"}.mdi-ladybug:before{content:"\F82C"}.mdi-lambda:before{content:"\F627"}.mdi-lamp:before{content:"\F6B4"}.mdi-lan:before{content:"\F317"}.mdi-lan-connect:before{content:"\F318"}.mdi-lan-disconnect:before{content:"\F319"}.mdi-lan-pending:before{content:"\F31A"}.mdi-language-c:before{content:"\F671"}.mdi-language-cpp:before{content:"\F672"}.mdi-language-csharp:before{content:"\F31B"}.mdi-language-css3:before{content:"\F31C"}.mdi-language-go:before{content:"\F7D2"}.mdi-language-haskell:before{content:"\FC6E"}.mdi-language-html5:before{content:"\F31D"}.mdi-language-java:before{content:"\FB1C"}.mdi-language-javascript:before{content:"\F31E"}.mdi-language-lua:before{content:"\F8B0"}.mdi-language-php:before{content:"\F31F"}.mdi-language-python:before{content:"\F320"}.mdi-language-python-text:before{content:"\F321"}.mdi-language-r:before{content:"\F7D3"}.mdi-language-ruby-on-rails:before{content:"\FACE"}.mdi-language-swift:before{content:"\F6E4"}.mdi-language-typescript:before{content:"\F6E5"}.mdi-laptop:before{content:"\F322"}.mdi-laptop-chromebook:before{content:"\F323"}.mdi-laptop-mac:before{content:"\F324"}.mdi-laptop-off:before{content:"\F6E6"}.mdi-laptop-windows:before{content:"\F325"}.mdi-laravel:before{content:"\FACF"}.mdi-lastfm:before{content:"\F326"}.mdi-lastpass:before{content:"\F446"}.mdi-launch:before{content:"\F327"}.mdi-lava-lamp:before{content:"\F7D4"}.mdi-layers:before{content:"\F328"}.mdi-layers-off:before{content:"\F329"}.mdi-layers-off-outline:before{content:"\F9FC"}.mdi-layers-outline:before{content:"\F9FD"}.mdi-lead-pencil:before{content:"\F64F"}.mdi-leaf:before{content:"\F32A"}.mdi-leaf-maple:before{content:"\FC6F"}.mdi-leak:before{content:"\FDB3"}.mdi-leak-off:before{content:"\FDB4"}.mdi-led-off:before{content:"\F32B"}.mdi-led-on:before{content:"\F32C"}.mdi-led-outline:before{content:"\F32D"}.mdi-led-strip:before{content:"\F7D5"}.mdi-led-variant-off:before{content:"\F32E"}.mdi-led-variant-on:before{content:"\F32F"}.mdi-led-variant-outline:before{content:"\F330"}.mdi-less-than:before{content:"\F97B"}.mdi-less-than-or-equal:before{content:"\F97C"}.mdi-library:before{content:"\F331"}.mdi-library-books:before{content:"\F332"}.mdi-library-movie:before{content:"\FCF4"}.mdi-library-music:before{content:"\F333"}.mdi-library-plus:before{content:"\F334"}.mdi-library-shelves:before{content:"\FB85"}.mdi-library-video:before{content:"\FCF5"}.mdi-lifebuoy:before{content:"\F87D"}.mdi-light-switch:before{content:"\F97D"}.mdi-lightbulb:before{content:"\F335"}.mdi-lightbulb-on:before{content:"\F6E7"}.mdi-lightbulb-on-outline:before{content:"\F6E8"}.mdi-lightbulb-outline:before{content:"\F336"}.mdi-lighthouse:before{content:"\F9FE"}.mdi-lighthouse-on:before{content:"\F9FF"}.mdi-link:before{content:"\F337"}.mdi-link-box:before{content:"\FCF6"}.mdi-link-box-outline:before{content:"\FCF7"}.mdi-link-box-variant:before{content:"\FCF8"}.mdi-link-box-variant-outline:before{content:"\FCF9"}.mdi-link-off:before{content:"\F338"}.mdi-link-plus:before{content:"\FC70"}.mdi-link-variant:before{content:"\F339"}.mdi-link-variant-off:before{content:"\F33A"}.mdi-linkedin:before{content:"\F33B"}.mdi-linkedin-box:before{content:"\F33C"}.mdi-linux:before{content:"\F33D"}.mdi-linux-mint:before{content:"\F8EC"}.mdi-litecoin:before{content:"\FA60"}.mdi-loading:before{content:"\F771"}.mdi-lock:before{content:"\F33E"}.mdi-lock-alert:before{content:"\F8ED"}.mdi-lock-clock:before{content:"\F97E"}.mdi-lock-open:before{content:"\F33F"}.mdi-lock-open-outline:before{content:"\F340"}.mdi-lock-outline:before{content:"\F341"}.mdi-lock-pattern:before{content:"\F6E9"}.mdi-lock-plus:before{content:"\F5FB"}.mdi-lock-question:before{content:"\F8EE"}.mdi-lock-reset:before{content:"\F772"}.mdi-lock-smart:before{content:"\F8B1"}.mdi-locker:before{content:"\F7D6"}.mdi-locker-multiple:before{content:"\F7D7"}.mdi-login:before{content:"\F342"}.mdi-login-variant:before{content:"\F5FC"}.mdi-logout:before{content:"\F343"}.mdi-logout-variant:before{content:"\F5FD"}.mdi-looks:before{content:"\F344"}.mdi-loop:before{content:"\F6EA"}.mdi-loupe:before{content:"\F345"}.mdi-lumx:before{content:"\F346"}.mdi-lyft:before{content:"\FB1D"}.mdi-magnet:before{content:"\F347"}.mdi-magnet-on:before{content:"\F348"}.mdi-magnify:before{content:"\F349"}.mdi-magnify-close:before{content:"\F97F"}.mdi-magnify-minus:before{content:"\F34A"}.mdi-magnify-minus-cursor:before{content:"\FA61"}.mdi-magnify-minus-outline:before{content:"\F6EB"}.mdi-magnify-plus:before{content:"\F34B"}.mdi-magnify-plus-cursor:before{content:"\FA62"}.mdi-magnify-plus-outline:before{content:"\F6EC"}.mdi-mail-ru:before{content:"\F34C"}.mdi-mailbox:before{content:"\F6ED"}.mdi-mailbox-open:before{content:"\FD64"}.mdi-mailbox-open-outline:before{content:"\FD65"}.mdi-mailbox-open-up:before{content:"\FD66"}.mdi-mailbox-open-up-outline:before{content:"\FD67"}.mdi-mailbox-outline:before{content:"\FD68"}.mdi-mailbox-up:before{content:"\FD69"}.mdi-mailbox-up-outline:before{content:"\FD6A"}.mdi-map:before{content:"\F34D"}.mdi-map-clock:before{content:"\FCFA"}.mdi-map-clock-outline:before{content:"\FCFB"}.mdi-map-legend:before{content:"\FA00"}.mdi-map-marker:before{content:"\F34E"}.mdi-map-marker-check:before{content:"\FC71"}.mdi-map-marker-circle:before{content:"\F34F"}.mdi-map-marker-distance:before{content:"\F8EF"}.mdi-map-marker-minus:before{content:"\F650"}.mdi-map-marker-multiple:before{content:"\F350"}.mdi-map-marker-off:before{content:"\F351"}.mdi-map-marker-outline:before{content:"\F7D8"}.mdi-map-marker-path:before{content:"\FCFC"}.mdi-map-marker-plus:before{content:"\F651"}.mdi-map-marker-radius:before{content:"\F352"}.mdi-map-minus:before{content:"\F980"}.mdi-map-outline:before{content:"\F981"}.mdi-map-plus:before{content:"\F982"}.mdi-map-search:before{content:"\F983"}.mdi-map-search-outline:before{content:"\F984"}.mdi-mapbox:before{content:"\FB86"}.mdi-margin:before{content:"\F353"}.mdi-markdown:before{content:"\F354"}.mdi-marker:before{content:"\F652"}.mdi-marker-cancel:before{content:"\FDB5"}.mdi-marker-check:before{content:"\F355"}.mdi-mastodon:before{content:"\FAD0"}.mdi-mastodon-variant:before{content:"\FAD1"}.mdi-material-design:before{content:"\F985"}.mdi-material-ui:before{content:"\F357"}.mdi-math-compass:before{content:"\F358"}.mdi-math-cos:before{content:"\FC72"}.mdi-math-sin:before{content:"\FC73"}.mdi-math-tan:before{content:"\FC74"}.mdi-matrix:before{content:"\F628"}.mdi-maxcdn:before{content:"\F359"}.mdi-medal:before{content:"\F986"}.mdi-medical-bag:before{content:"\F6EE"}.mdi-medium:before{content:"\F35A"}.mdi-meetup:before{content:"\FAD2"}.mdi-memory:before{content:"\F35B"}.mdi-menu:before{content:"\F35C"}.mdi-menu-down:before{content:"\F35D"}.mdi-menu-down-outline:before{content:"\F6B5"}.mdi-menu-left:before{content:"\F35E"}.mdi-menu-left-outline:before{content:"\FA01"}.mdi-menu-open:before{content:"\FB87"}.mdi-menu-right:before{content:"\F35F"}.mdi-menu-right-outline:before{content:"\FA02"}.mdi-menu-swap:before{content:"\FA63"}.mdi-menu-swap-outline:before{content:"\FA64"}.mdi-menu-up:before{content:"\F360"}.mdi-menu-up-outline:before{content:"\F6B6"}.mdi-message:before{content:"\F361"}.mdi-message-alert:before{content:"\F362"}.mdi-message-alert-outline:before{content:"\FA03"}.mdi-message-bulleted:before{content:"\F6A1"}.mdi-message-bulleted-off:before{content:"\F6A2"}.mdi-message-draw:before{content:"\F363"}.mdi-message-image:before{content:"\F364"}.mdi-message-outline:before{content:"\F365"}.mdi-message-plus:before{content:"\F653"}.mdi-message-processing:before{content:"\F366"}.mdi-message-reply:before{content:"\F367"}.mdi-message-reply-text:before{content:"\F368"}.mdi-message-settings:before{content:"\F6EF"}.mdi-message-settings-variant:before{content:"\F6F0"}.mdi-message-text:before{content:"\F369"}.mdi-message-text-outline:before{content:"\F36A"}.mdi-message-video:before{content:"\F36B"}.mdi-meteor:before{content:"\F629"}.mdi-metronome:before{content:"\F7D9"}.mdi-metronome-tick:before{content:"\F7DA"}.mdi-micro-sd:before{content:"\F7DB"}.mdi-microphone:before{content:"\F36C"}.mdi-microphone-minus:before{content:"\F8B2"}.mdi-microphone-off:before{content:"\F36D"}.mdi-microphone-outline:before{content:"\F36E"}.mdi-microphone-plus:before{content:"\F8B3"}.mdi-microphone-settings:before{content:"\F36F"}.mdi-microphone-variant:before{content:"\F370"}.mdi-microphone-variant-off:before{content:"\F371"}.mdi-microscope:before{content:"\F654"}.mdi-microsoft:before{content:"\F372"}.mdi-microsoft-dynamics:before{content:"\F987"}.mdi-microwave:before{content:"\FC75"}.mdi-midi:before{content:"\F8F0"}.mdi-midi-port:before{content:"\F8F1"}.mdi-mine:before{content:"\FDB6"}.mdi-minecraft:before{content:"\F373"}.mdi-mini-sd:before{content:"\FA04"}.mdi-minidisc:before{content:"\FA05"}.mdi-minus:before{content:"\F374"}.mdi-minus-box:before{content:"\F375"}.mdi-minus-box-outline:before{content:"\F6F1"}.mdi-minus-circle:before{content:"\F376"}.mdi-minus-circle-outline:before{content:"\F377"}.mdi-minus-network:before{content:"\F378"}.mdi-minus-network-outline:before{content:"\FC76"}.mdi-mixcloud:before{content:"\F62A"}.mdi-mixed-martial-arts:before{content:"\FD6B"}.mdi-mixed-reality:before{content:"\F87E"}.mdi-mixer:before{content:"\F7DC"}.mdi-molecule:before{content:"\FB88"}.mdi-monitor:before{content:"\F379"}.mdi-monitor-cellphone:before{content:"\F988"}.mdi-monitor-cellphone-star:before{content:"\F989"}.mdi-monitor-dashboard:before{content:"\FA06"}.mdi-monitor-lock:before{content:"\FDB7"}.mdi-monitor-multiple:before{content:"\F37A"}.mdi-monitor-off:before{content:"\FD6C"}.mdi-monitor-star:before{content:"\FDB8"}.mdi-more:before{content:"\F37B"}.mdi-mother-nurse:before{content:"\FCFD"}.mdi-motion-sensor:before{content:"\FD6D"}.mdi-motorbike:before{content:"\F37C"}.mdi-mouse:before{content:"\F37D"}.mdi-mouse-bluetooth:before{content:"\F98A"}.mdi-mouse-off:before{content:"\F37E"}.mdi-mouse-variant:before{content:"\F37F"}.mdi-mouse-variant-off:before{content:"\F380"}.mdi-move-resize:before{content:"\F655"}.mdi-move-resize-variant:before{content:"\F656"}.mdi-movie:before{content:"\F381"}.mdi-movie-outline:before{content:"\FDB9"}.mdi-movie-roll:before{content:"\F7DD"}.mdi-muffin:before{content:"\F98B"}.mdi-multiplication:before{content:"\F382"}.mdi-multiplication-box:before{content:"\F383"}.mdi-mushroom:before{content:"\F7DE"}.mdi-mushroom-outline:before{content:"\F7DF"}.mdi-music:before{content:"\F759"}.mdi-music-box:before{content:"\F384"}.mdi-music-box-outline:before{content:"\F385"}.mdi-music-circle:before{content:"\F386"}.mdi-music-circle-outline:before{content:"\FAD3"}.mdi-music-note:before{content:"\F387"}.mdi-music-note-bluetooth:before{content:"\F5FE"}.mdi-music-note-bluetooth-off:before{content:"\F5FF"}.mdi-music-note-eighth:before{content:"\F388"}.mdi-music-note-half:before{content:"\F389"}.mdi-music-note-off:before{content:"\F38A"}.mdi-music-note-plus:before{content:"\FDBA"}.mdi-music-note-quarter:before{content:"\F38B"}.mdi-music-note-sixteenth:before{content:"\F38C"}.mdi-music-note-whole:before{content:"\F38D"}.mdi-music-off:before{content:"\F75A"}.mdi-nail:before{content:"\FDBB"}.mdi-nas:before{content:"\F8F2"}.mdi-nativescript:before{content:"\F87F"}.mdi-nature:before{content:"\F38E"}.mdi-nature-people:before{content:"\F38F"}.mdi-navigation:before{content:"\F390"}.mdi-near-me:before{content:"\F5CD"}.mdi-needle:before{content:"\F391"}.mdi-netflix:before{content:"\F745"}.mdi-network:before{content:"\F6F2"}.mdi-network-off:before{content:"\FC77"}.mdi-network-off-outline:before{content:"\FC78"}.mdi-network-outline:before{content:"\FC79"}.mdi-network-strength-1:before{content:"\F8F3"}.mdi-network-strength-1-alert:before{content:"\F8F4"}.mdi-network-strength-2:before{content:"\F8F5"}.mdi-network-strength-2-alert:before{content:"\F8F6"}.mdi-network-strength-3:before{content:"\F8F7"}.mdi-network-strength-3-alert:before{content:"\F8F8"}.mdi-network-strength-4:before{content:"\F8F9"}.mdi-network-strength-4-alert:before{content:"\F8FA"}.mdi-network-strength-off:before{content:"\F8FB"}.mdi-network-strength-off-outline:before{content:"\F8FC"}.mdi-network-strength-outline:before{content:"\F8FD"}.mdi-new-box:before{content:"\F394"}.mdi-newspaper:before{content:"\F395"}.mdi-nfc:before{content:"\F396"}.mdi-nfc-tap:before{content:"\F397"}.mdi-nfc-variant:before{content:"\F398"}.mdi-ninja:before{content:"\F773"}.mdi-nintendo-switch:before{content:"\F7E0"}.mdi-nodejs:before{content:"\F399"}.mdi-not-equal:before{content:"\F98C"}.mdi-not-equal-variant:before{content:"\F98D"}.mdi-note:before{content:"\F39A"}.mdi-note-multiple:before{content:"\F6B7"}.mdi-note-multiple-outline:before{content:"\F6B8"}.mdi-note-outline:before{content:"\F39B"}.mdi-note-plus:before{content:"\F39C"}.mdi-note-plus-outline:before{content:"\F39D"}.mdi-note-text:before{content:"\F39E"}.mdi-notebook:before{content:"\F82D"}.mdi-notification-clear-all:before{content:"\F39F"}.mdi-npm:before{content:"\F6F6"}.mdi-npm-variant:before{content:"\F98E"}.mdi-npm-variant-outline:before{content:"\F98F"}.mdi-nuke:before{content:"\F6A3"}.mdi-null:before{content:"\F7E1"}.mdi-numeric:before{content:"\F3A0"}.mdi-numeric-0:before{content:"\30"}.mdi-numeric-0-box:before{content:"\F3A1"}.mdi-numeric-0-box-multiple-outline:before{content:"\F3A2"}.mdi-numeric-0-box-outline:before{content:"\F3A3"}.mdi-numeric-0-circle:before{content:"\FC7A"}.mdi-numeric-0-circle-outline:before{content:"\FC7B"}.mdi-numeric-1:before{content:"\31"}.mdi-numeric-1-box:before{content:"\F3A4"}.mdi-numeric-1-box-multiple-outline:before{content:"\F3A5"}.mdi-numeric-1-box-outline:before{content:"\F3A6"}.mdi-numeric-1-circle:before{content:"\FC7C"}.mdi-numeric-1-circle-outline:before{content:"\FC7D"}.mdi-numeric-2:before{content:"\32"}.mdi-numeric-2-box:before{content:"\F3A7"}.mdi-numeric-2-box-multiple-outline:before{content:"\F3A8"}.mdi-numeric-2-box-outline:before{content:"\F3A9"}.mdi-numeric-2-circle:before{content:"\FC7E"}.mdi-numeric-2-circle-outline:before{content:"\FC7F"}.mdi-numeric-3:before{content:"\33"}.mdi-numeric-3-box:before{content:"\F3AA"}.mdi-numeric-3-box-multiple-outline:before{content:"\F3AB"}.mdi-numeric-3-box-outline:before{content:"\F3AC"}.mdi-numeric-3-circle:before{content:"\FC80"}.mdi-numeric-3-circle-outline:before{content:"\FC81"}.mdi-numeric-4:before{content:"\34"}.mdi-numeric-4-box:before{content:"\F3AD"}.mdi-numeric-4-box-multiple-outline:before{content:"\F3AE"}.mdi-numeric-4-box-outline:before{content:"\F3AF"}.mdi-numeric-4-circle:before{content:"\FC82"}.mdi-numeric-4-circle-outline:before{content:"\FC83"}.mdi-numeric-5:before{content:"\35"}.mdi-numeric-5-box:before{content:"\F3B0"}.mdi-numeric-5-box-multiple-outline:before{content:"\F3B1"}.mdi-numeric-5-box-outline:before{content:"\F3B2"}.mdi-numeric-5-circle:before{content:"\FC84"}.mdi-numeric-5-circle-outline:before{content:"\FC85"}.mdi-numeric-6:before{content:"\36"}.mdi-numeric-6-box:before{content:"\F3B3"}.mdi-numeric-6-box-multiple-outline:before{content:"\F3B4"}.mdi-numeric-6-box-outline:before{content:"\F3B5"}.mdi-numeric-6-circle:before{content:"\FC86"}.mdi-numeric-6-circle-outline:before{content:"\FC87"}.mdi-numeric-7:before{content:"\37"}.mdi-numeric-7-box:before{content:"\F3B6"}.mdi-numeric-7-box-multiple-outline:before{content:"\F3B7"}.mdi-numeric-7-box-outline:before{content:"\F3B8"}.mdi-numeric-7-circle:before{content:"\FC88"}.mdi-numeric-7-circle-outline:before{content:"\FC89"}.mdi-numeric-8:before{content:"\38"}.mdi-numeric-8-box:before{content:"\F3B9"}.mdi-numeric-8-box-multiple-outline:before{content:"\F3BA"}.mdi-numeric-8-box-outline:before{content:"\F3BB"}.mdi-numeric-8-circle:before{content:"\FC8A"}.mdi-numeric-8-circle-outline:before{content:"\FC8B"}.mdi-numeric-9:before{content:"\39"}.mdi-numeric-9-box:before{content:"\F3BC"}.mdi-numeric-9-box-multiple-outline:before{content:"\F3BD"}.mdi-numeric-9-box-outline:before{content:"\F3BE"}.mdi-numeric-9-circle:before{content:"\FC8C"}.mdi-numeric-9-circle-outline:before{content:"\FC8D"}.mdi-numeric-9-plus-box:before{content:"\F3BF"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"\F3C0"}.mdi-numeric-9-plus-box-outline:before{content:"\F3C1"}.mdi-numeric-9-plus-circle:before{content:"\FC8E"}.mdi-numeric-9-plus-circle-outline:before{content:"\FC8F"}.mdi-nut:before{content:"\F6F7"}.mdi-nutrition:before{content:"\F3C2"}.mdi-oar:before{content:"\F67B"}.mdi-ocarina:before{content:"\FDBC"}.mdi-octagon:before{content:"\F3C3"}.mdi-octagon-outline:before{content:"\F3C4"}.mdi-octagram:before{content:"\F6F8"}.mdi-octagram-outline:before{content:"\F774"}.mdi-odnoklassniki:before{content:"\F3C5"}.mdi-office:before{content:"\F3C6"}.mdi-office-building:before{content:"\F990"}.mdi-oil:before{content:"\F3C7"}.mdi-oil-temperature:before{content:"\F3C8"}.mdi-omega:before{content:"\F3C9"}.mdi-one-up:before{content:"\FB89"}.mdi-onedrive:before{content:"\F3CA"}.mdi-onenote:before{content:"\F746"}.mdi-onepassword:before{content:"\F880"}.mdi-opacity:before{content:"\F5CC"}.mdi-open-in-app:before{content:"\F3CB"}.mdi-open-in-new:before{content:"\F3CC"}.mdi-open-source-initiative:before{content:"\FB8A"}.mdi-openid:before{content:"\F3CD"}.mdi-opera:before{content:"\F3CE"}.mdi-orbit:before{content:"\F018"}.mdi-origin:before{content:"\FB2B"}.mdi-ornament:before{content:"\F3CF"}.mdi-ornament-variant:before{content:"\F3D0"}.mdi-outlook:before{content:"\FCFE"}.mdi-owl:before{content:"\F3D2"}.mdi-pac-man:before{content:"\FB8B"}.mdi-package:before{content:"\F3D3"}.mdi-package-down:before{content:"\F3D4"}.mdi-package-up:before{content:"\F3D5"}.mdi-package-variant:before{content:"\F3D6"}.mdi-package-variant-closed:before{content:"\F3D7"}.mdi-page-first:before{content:"\F600"}.mdi-page-last:before{content:"\F601"}.mdi-page-layout-body:before{content:"\F6F9"}.mdi-page-layout-footer:before{content:"\F6FA"}.mdi-page-layout-header:before{content:"\F6FB"}.mdi-page-layout-sidebar-left:before{content:"\F6FC"}.mdi-page-layout-sidebar-right:before{content:"\F6FD"}.mdi-page-next:before{content:"\FB8C"}.mdi-page-next-outline:before{content:"\FB8D"}.mdi-page-previous:before{content:"\FB8E"}.mdi-page-previous-outline:before{content:"\FB8F"}.mdi-palette:before{content:"\F3D8"}.mdi-palette-advanced:before{content:"\F3D9"}.mdi-palette-outline:before{content:"\FDE8"}.mdi-palette-swatch:before{content:"\F8B4"}.mdi-pan:before{content:"\FB90"}.mdi-pan-bottom-left:before{content:"\FB91"}.mdi-pan-bottom-right:before{content:"\FB92"}.mdi-pan-down:before{content:"\FB93"}.mdi-pan-horizontal:before{content:"\FB94"}.mdi-pan-left:before{content:"\FB95"}.mdi-pan-right:before{content:"\FB96"}.mdi-pan-top-left:before{content:"\FB97"}.mdi-pan-top-right:before{content:"\FB98"}.mdi-pan-up:before{content:"\FB99"}.mdi-pan-vertical:before{content:"\FB9A"}.mdi-panda:before{content:"\F3DA"}.mdi-pandora:before{content:"\F3DB"}.mdi-panorama:before{content:"\F3DC"}.mdi-panorama-fisheye:before{content:"\F3DD"}.mdi-panorama-horizontal:before{content:"\F3DE"}.mdi-panorama-vertical:before{content:"\F3DF"}.mdi-panorama-wide-angle:before{content:"\F3E0"}.mdi-paper-cut-vertical:before{content:"\F3E1"}.mdi-paperclip:before{content:"\F3E2"}.mdi-parachute:before{content:"\FC90"}.mdi-parachute-outline:before{content:"\FC91"}.mdi-parking:before{content:"\F3E3"}.mdi-passport:before{content:"\F7E2"}.mdi-passport-biometric:before{content:"\FDBD"}.mdi-patreon:before{content:"\F881"}.mdi-pause:before{content:"\F3E4"}.mdi-pause-circle:before{content:"\F3E5"}.mdi-pause-circle-outline:before{content:"\F3E6"}.mdi-pause-octagon:before{content:"\F3E7"}.mdi-pause-octagon-outline:before{content:"\F3E8"}.mdi-paw:before{content:"\F3E9"}.mdi-paw-off:before{content:"\F657"}.mdi-paypal:before{content:"\F882"}.mdi-peace:before{content:"\F883"}.mdi-pen:before{content:"\F3EA"}.mdi-pen-lock:before{content:"\FDBE"}.mdi-pen-minus:before{content:"\FDBF"}.mdi-pen-off:before{content:"\FDC0"}.mdi-pen-plus:before{content:"\FDC1"}.mdi-pen-remove:before{content:"\FDC2"}.mdi-pencil:before{content:"\F3EB"}.mdi-pencil-box:before{content:"\F3EC"}.mdi-pencil-box-outline:before{content:"\F3ED"}.mdi-pencil-circle:before{content:"\F6FE"}.mdi-pencil-circle-outline:before{content:"\F775"}.mdi-pencil-lock:before{content:"\F3EE"}.mdi-pencil-lock-outline:before{content:"\FDC3"}.mdi-pencil-minus:before{content:"\FDC4"}.mdi-pencil-minus-outline:before{content:"\FDC5"}.mdi-pencil-off:before{content:"\F3EF"}.mdi-pencil-off-outline:before{content:"\FDC6"}.mdi-pencil-outline:before{content:"\FC92"}.mdi-pencil-plus:before{content:"\FDC7"}.mdi-pencil-plus-outline:before{content:"\FDC8"}.mdi-pencil-remove:before{content:"\FDC9"}.mdi-pencil-remove-outline:before{content:"\FDCA"}.mdi-pentagon:before{content:"\F6FF"}.mdi-pentagon-outline:before{content:"\F700"}.mdi-percent:before{content:"\F3F0"}.mdi-periodic-table:before{content:"\F8B5"}.mdi-periodic-table-co2:before{content:"\F7E3"}.mdi-periscope:before{content:"\F747"}.mdi-perspective-less:before{content:"\FCFF"}.mdi-perspective-more:before{content:"\FD00"}.mdi-pharmacy:before{content:"\F3F1"}.mdi-phone:before{content:"\F3F2"}.mdi-phone-bluetooth:before{content:"\F3F3"}.mdi-phone-classic:before{content:"\F602"}.mdi-phone-forward:before{content:"\F3F4"}.mdi-phone-hangup:before{content:"\F3F5"}.mdi-phone-in-talk:before{content:"\F3F6"}.mdi-phone-incoming:before{content:"\F3F7"}.mdi-phone-lock:before{content:"\F3F8"}.mdi-phone-log:before{content:"\F3F9"}.mdi-phone-minus:before{content:"\F658"}.mdi-phone-missed:before{content:"\F3FA"}.mdi-phone-off:before{content:"\FDCB"}.mdi-phone-outgoing:before{content:"\F3FB"}.mdi-phone-outline:before{content:"\FDCC"}.mdi-phone-paused:before{content:"\F3FC"}.mdi-phone-plus:before{content:"\F659"}.mdi-phone-return:before{content:"\F82E"}.mdi-phone-rotate-landscape:before{content:"\F884"}.mdi-phone-rotate-portrait:before{content:"\F885"}.mdi-phone-settings:before{content:"\F3FD"}.mdi-phone-voip:before{content:"\F3FE"}.mdi-pi:before{content:"\F3FF"}.mdi-pi-box:before{content:"\F400"}.mdi-pi-hole:before{content:"\FDCD"}.mdi-piano:before{content:"\F67C"}.mdi-pickaxe:before{content:"\F8B6"}.mdi-pier:before{content:"\F886"}.mdi-pier-crane:before{content:"\F887"}.mdi-pig:before{content:"\F401"}.mdi-pill:before{content:"\F402"}.mdi-pillar:before{content:"\F701"}.mdi-pin:before{content:"\F403"}.mdi-pin-off:before{content:"\F404"}.mdi-pin-off-outline:before{content:"\F92F"}.mdi-pin-outline:before{content:"\F930"}.mdi-pine-tree:before{content:"\F405"}.mdi-pine-tree-box:before{content:"\F406"}.mdi-pinterest:before{content:"\F407"}.mdi-pinterest-box:before{content:"\F408"}.mdi-pinwheel:before{content:"\FAD4"}.mdi-pinwheel-outline:before{content:"\FAD5"}.mdi-pipe:before{content:"\F7E4"}.mdi-pipe-disconnected:before{content:"\F7E5"}.mdi-pipe-leak:before{content:"\F888"}.mdi-pirate:before{content:"\FA07"}.mdi-pistol:before{content:"\F702"}.mdi-piston:before{content:"\F889"}.mdi-pizza:before{content:"\F409"}.mdi-play:before{content:"\F40A"}.mdi-play-box-outline:before{content:"\F40B"}.mdi-play-circle:before{content:"\F40C"}.mdi-play-circle-outline:before{content:"\F40D"}.mdi-play-network:before{content:"\F88A"}.mdi-play-network-outline:before{content:"\FC93"}.mdi-play-pause:before{content:"\F40E"}.mdi-play-protected-content:before{content:"\F40F"}.mdi-play-speed:before{content:"\F8FE"}.mdi-playlist-check:before{content:"\F5C7"}.mdi-playlist-edit:before{content:"\F8FF"}.mdi-playlist-minus:before{content:"\F410"}.mdi-playlist-music:before{content:"\FC94"}.mdi-playlist-music-outline:before{content:"\FC95"}.mdi-playlist-play:before{content:"\F411"}.mdi-playlist-plus:before{content:"\F412"}.mdi-playlist-remove:before{content:"\F413"}.mdi-playlist-star:before{content:"\FDCE"}.mdi-playstation:before{content:"\F414"}.mdi-plex:before{content:"\F6B9"}.mdi-plus:before{content:"\F415"}.mdi-plus-box:before{content:"\F416"}.mdi-plus-box-outline:before{content:"\F703"}.mdi-plus-circle:before{content:"\F417"}.mdi-plus-circle-multiple-outline:before{content:"\F418"}.mdi-plus-circle-outline:before{content:"\F419"}.mdi-plus-minus:before{content:"\F991"}.mdi-plus-minus-box:before{content:"\F992"}.mdi-plus-network:before{content:"\F41A"}.mdi-plus-network-outline:before{content:"\FC96"}.mdi-plus-one:before{content:"\F41B"}.mdi-plus-outline:before{content:"\F704"}.mdi-pocket:before{content:"\F41C"}.mdi-podcast:before{content:"\F993"}.mdi-podium:before{content:"\FD01"}.mdi-podium-bronze:before{content:"\FD02"}.mdi-podium-gold:before{content:"\FD03"}.mdi-podium-silver:before{content:"\FD04"}.mdi-point-of-sale:before{content:"\FD6E"}.mdi-pokeball:before{content:"\F41D"}.mdi-pokemon-go:before{content:"\FA08"}.mdi-poker-chip:before{content:"\F82F"}.mdi-polaroid:before{content:"\F41E"}.mdi-poll:before{content:"\F41F"}.mdi-poll-box:before{content:"\F420"}.mdi-polymer:before{content:"\F421"}.mdi-pool:before{content:"\F606"}.mdi-popcorn:before{content:"\F422"}.mdi-postage-stamp:before{content:"\FC97"}.mdi-pot:before{content:"\F65A"}.mdi-pot-mix:before{content:"\F65B"}.mdi-pound:before{content:"\F423"}.mdi-pound-box:before{content:"\F424"}.mdi-power:before{content:"\F425"}.mdi-power-cycle:before{content:"\F900"}.mdi-power-off:before{content:"\F901"}.mdi-power-on:before{content:"\F902"}.mdi-power-plug:before{content:"\F6A4"}.mdi-power-plug-off:before{content:"\F6A5"}.mdi-power-settings:before{content:"\F426"}.mdi-power-sleep:before{content:"\F903"}.mdi-power-socket:before{content:"\F427"}.mdi-power-socket-au:before{content:"\F904"}.mdi-power-socket-eu:before{content:"\F7E6"}.mdi-power-socket-uk:before{content:"\F7E7"}.mdi-power-socket-us:before{content:"\F7E8"}.mdi-power-standby:before{content:"\F905"}.mdi-powershell:before{content:"\FA09"}.mdi-prescription:before{content:"\F705"}.mdi-presentation:before{content:"\F428"}.mdi-presentation-play:before{content:"\F429"}.mdi-printer:before{content:"\F42A"}.mdi-printer-3d:before{content:"\F42B"}.mdi-printer-alert:before{content:"\F42C"}.mdi-printer-settings:before{content:"\F706"}.mdi-printer-wireless:before{content:"\FA0A"}.mdi-priority-high:before{content:"\F603"}.mdi-priority-low:before{content:"\F604"}.mdi-professional-hexagon:before{content:"\F42D"}.mdi-progress-alert:before{content:"\FC98"}.mdi-progress-check:before{content:"\F994"}.mdi-progress-clock:before{content:"\F995"}.mdi-progress-download:before{content:"\F996"}.mdi-progress-upload:before{content:"\F997"}.mdi-progress-wrench:before{content:"\FC99"}.mdi-projector:before{content:"\F42E"}.mdi-projector-screen:before{content:"\F42F"}.mdi-publish:before{content:"\F6A6"}.mdi-pulse:before{content:"\F430"}.mdi-pumpkin:before{content:"\FB9B"}.mdi-puzzle:before{content:"\F431"}.mdi-puzzle-outline:before{content:"\FA65"}.mdi-qi:before{content:"\F998"}.mdi-qqchat:before{content:"\F605"}.mdi-qrcode:before{content:"\F432"}.mdi-qrcode-edit:before{content:"\F8B7"}.mdi-qrcode-scan:before{content:"\F433"}.mdi-quadcopter:before{content:"\F434"}.mdi-quality-high:before{content:"\F435"}.mdi-quality-low:before{content:"\FA0B"}.mdi-quality-medium:before{content:"\FA0C"}.mdi-quicktime:before{content:"\F436"}.mdi-quora:before{content:"\FD05"}.mdi-rabbit:before{content:"\F906"}.mdi-racing-helmet:before{content:"\FD6F"}.mdi-racquetball:before{content:"\FD70"}.mdi-radar:before{content:"\F437"}.mdi-radiator:before{content:"\F438"}.mdi-radiator-disabled:before{content:"\FAD6"}.mdi-radiator-off:before{content:"\FAD7"}.mdi-radio:before{content:"\F439"}.mdi-radio-am:before{content:"\FC9A"}.mdi-radio-fm:before{content:"\FC9B"}.mdi-radio-handheld:before{content:"\F43A"}.mdi-radio-tower:before{content:"\F43B"}.mdi-radioactive:before{content:"\F43C"}.mdi-radiobox-blank:before{content:"\F43D"}.mdi-radiobox-marked:before{content:"\F43E"}.mdi-radius:before{content:"\FC9C"}.mdi-radius-outline:before{content:"\FC9D"}.mdi-raspberry-pi:before{content:"\F43F"}.mdi-ray-end:before{content:"\F440"}.mdi-ray-end-arrow:before{content:"\F441"}.mdi-ray-start:before{content:"\F442"}.mdi-ray-start-arrow:before{content:"\F443"}.mdi-ray-start-end:before{content:"\F444"}.mdi-ray-vertex:before{content:"\F445"}.mdi-react:before{content:"\F707"}.mdi-read:before{content:"\F447"}.mdi-receipt:before{content:"\F449"}.mdi-record:before{content:"\F44A"}.mdi-record-player:before{content:"\F999"}.mdi-record-rec:before{content:"\F44B"}.mdi-recycle:before{content:"\F44C"}.mdi-reddit:before{content:"\F44D"}.mdi-redo:before{content:"\F44E"}.mdi-redo-variant:before{content:"\F44F"}.mdi-reflect-horizontal:before{content:"\FA0D"}.mdi-reflect-vertical:before{content:"\FA0E"}.mdi-refresh:before{content:"\F450"}.mdi-regex:before{content:"\F451"}.mdi-registered-trademark:before{content:"\FA66"}.mdi-relative-scale:before{content:"\F452"}.mdi-reload:before{content:"\F453"}.mdi-reminder:before{content:"\F88B"}.mdi-remote:before{content:"\F454"}.mdi-remote-desktop:before{content:"\F8B8"}.mdi-rename-box:before{content:"\F455"}.mdi-reorder-horizontal:before{content:"\F687"}.mdi-reorder-vertical:before{content:"\F688"}.mdi-repeat:before{content:"\F456"}.mdi-repeat-off:before{content:"\F457"}.mdi-repeat-once:before{content:"\F458"}.mdi-replay:before{content:"\F459"}.mdi-reply:before{content:"\F45A"}.mdi-reply-all:before{content:"\F45B"}.mdi-reproduction:before{content:"\F45C"}.mdi-resistor:before{content:"\FB1F"}.mdi-resistor-nodes:before{content:"\FB20"}.mdi-resize:before{content:"\FA67"}.mdi-resize-bottom-right:before{content:"\F45D"}.mdi-responsive:before{content:"\F45E"}.mdi-restart:before{content:"\F708"}.mdi-restart-off:before{content:"\FD71"}.mdi-restore:before{content:"\F99A"}.mdi-restore-clock:before{content:"\F6A7"}.mdi-rewind:before{content:"\F45F"}.mdi-rewind-10:before{content:"\FD06"}.mdi-rewind-30:before{content:"\FD72"}.mdi-rewind-outline:before{content:"\F709"}.mdi-rhombus:before{content:"\F70A"}.mdi-rhombus-medium:before{content:"\FA0F"}.mdi-rhombus-outline:before{content:"\F70B"}.mdi-rhombus-split:before{content:"\FA10"}.mdi-ribbon:before{content:"\F460"}.mdi-rice:before{content:"\F7E9"}.mdi-ring:before{content:"\F7EA"}.mdi-road:before{content:"\F461"}.mdi-road-variant:before{content:"\F462"}.mdi-robot:before{content:"\F6A8"}.mdi-robot-industrial:before{content:"\FB21"}.mdi-robot-vacuum:before{content:"\F70C"}.mdi-robot-vacuum-variant:before{content:"\F907"}.mdi-rocket:before{content:"\F463"}.mdi-roller-skate:before{content:"\FD07"}.mdi-rollerblade:before{content:"\FD08"}.mdi-rollupjs:before{content:"\FB9C"}.mdi-room-service:before{content:"\F88C"}.mdi-room-service-outline:before{content:"\FD73"}.mdi-rotate-3d:before{content:"\F464"}.mdi-rotate-left:before{content:"\F465"}.mdi-rotate-left-variant:before{content:"\F466"}.mdi-rotate-orbit:before{content:"\FD74"}.mdi-rotate-right:before{content:"\F467"}.mdi-rotate-right-variant:before{content:"\F468"}.mdi-rounded-corner:before{content:"\F607"}.mdi-router-wireless:before{content:"\F469"}.mdi-router-wireless-settings:before{content:"\FA68"}.mdi-routes:before{content:"\F46A"}.mdi-rowing:before{content:"\F608"}.mdi-rss:before{content:"\F46B"}.mdi-rss-box:before{content:"\F46C"}.mdi-ruby:before{content:"\FD09"}.mdi-rugby:before{content:"\FD75"}.mdi-ruler:before{content:"\F46D"}.mdi-ruler-square:before{content:"\FC9E"}.mdi-run:before{content:"\F70D"}.mdi-run-fast:before{content:"\F46E"}.mdi-sack:before{content:"\FD0A"}.mdi-sack-percent:before{content:"\FD0B"}.mdi-safe:before{content:"\FA69"}.mdi-safety-goggles:before{content:"\FD0C"}.mdi-sale:before{content:"\F46F"}.mdi-salesforce:before{content:"\F88D"}.mdi-sass:before{content:"\F7EB"}.mdi-satellite:before{content:"\F470"}.mdi-satellite-uplink:before{content:"\F908"}.mdi-satellite-variant:before{content:"\F471"}.mdi-sausage:before{content:"\F8B9"}.mdi-saxophone:before{content:"\F609"}.mdi-scale:before{content:"\F472"}.mdi-scale-balance:before{content:"\F5D1"}.mdi-scale-bathroom:before{content:"\F473"}.mdi-scanner:before{content:"\F6AA"}.mdi-scanner-off:before{content:"\F909"}.mdi-school:before{content:"\F474"}.mdi-scissors-cutting:before{content:"\FA6A"}.mdi-screen-rotation:before{content:"\F475"}.mdi-screen-rotation-lock:before{content:"\F476"}.mdi-screw-flat-top:before{content:"\FDCF"}.mdi-screw-lag:before{content:"\FDD0"}.mdi-screw-machine-flat-top:before{content:"\FDD1"}.mdi-screw-machine-round-top:before{content:"\FDD2"}.mdi-screw-round-top:before{content:"\FDD3"}.mdi-screwdriver:before{content:"\F477"}.mdi-script:before{content:"\FB9D"}.mdi-script-outline:before{content:"\F478"}.mdi-script-text:before{content:"\FB9E"}.mdi-script-text-outline:before{content:"\FB9F"}.mdi-sd:before{content:"\F479"}.mdi-seal:before{content:"\F47A"}.mdi-search-web:before{content:"\F70E"}.mdi-seat:before{content:"\FC9F"}.mdi-seat-flat:before{content:"\F47B"}.mdi-seat-flat-angled:before{content:"\F47C"}.mdi-seat-individual-suite:before{content:"\F47D"}.mdi-seat-legroom-extra:before{content:"\F47E"}.mdi-seat-legroom-normal:before{content:"\F47F"}.mdi-seat-legroom-reduced:before{content:"\F480"}.mdi-seat-outline:before{content:"\FCA0"}.mdi-seat-recline-extra:before{content:"\F481"}.mdi-seat-recline-normal:before{content:"\F482"}.mdi-seatbelt:before{content:"\FCA1"}.mdi-security:before{content:"\F483"}.mdi-security-network:before{content:"\F484"}.mdi-select:before{content:"\F485"}.mdi-select-all:before{content:"\F486"}.mdi-select-color:before{content:"\FD0D"}.mdi-select-compare:before{content:"\FAD8"}.mdi-select-drag:before{content:"\FA6B"}.mdi-select-inverse:before{content:"\F487"}.mdi-select-off:before{content:"\F488"}.mdi-selection:before{content:"\F489"}.mdi-selection-drag:before{content:"\FA6C"}.mdi-selection-ellipse:before{content:"\FD0E"}.mdi-selection-off:before{content:"\F776"}.mdi-send:before{content:"\F48A"}.mdi-send-circle:before{content:"\FDD4"}.mdi-send-circle-outline:before{content:"\FDD5"}.mdi-send-lock:before{content:"\F7EC"}.mdi-serial-port:before{content:"\F65C"}.mdi-server:before{content:"\F48B"}.mdi-server-minus:before{content:"\F48C"}.mdi-server-network:before{content:"\F48D"}.mdi-server-network-off:before{content:"\F48E"}.mdi-server-off:before{content:"\F48F"}.mdi-server-plus:before{content:"\F490"}.mdi-server-remove:before{content:"\F491"}.mdi-server-security:before{content:"\F492"}.mdi-set-all:before{content:"\F777"}.mdi-set-center:before{content:"\F778"}.mdi-set-center-right:before{content:"\F779"}.mdi-set-left:before{content:"\F77A"}.mdi-set-left-center:before{content:"\F77B"}.mdi-set-left-right:before{content:"\F77C"}.mdi-set-none:before{content:"\F77D"}.mdi-set-right:before{content:"\F77E"}.mdi-set-top-box:before{content:"\F99E"}.mdi-settings:before{content:"\F493"}.mdi-settings-box:before{content:"\F494"}.mdi-settings-helper:before{content:"\FA6D"}.mdi-settings-outline:before{content:"\F8BA"}.mdi-shape:before{content:"\F830"}.mdi-shape-circle-plus:before{content:"\F65D"}.mdi-shape-outline:before{content:"\F831"}.mdi-shape-plus:before{content:"\F495"}.mdi-shape-polygon-plus:before{content:"\F65E"}.mdi-shape-rectangle-plus:before{content:"\F65F"}.mdi-shape-square-plus:before{content:"\F660"}.mdi-share:before{content:"\F496"}.mdi-share-outline:before{content:"\F931"}.mdi-share-variant:before{content:"\F497"}.mdi-sheep:before{content:"\FCA2"}.mdi-shield:before{content:"\F498"}.mdi-shield-account:before{content:"\F88E"}.mdi-shield-account-outline:before{content:"\FA11"}.mdi-shield-airplane:before{content:"\F6BA"}.mdi-shield-airplane-outline:before{content:"\FCA3"}.mdi-shield-check:before{content:"\F565"}.mdi-shield-check-outline:before{content:"\FCA4"}.mdi-shield-cross:before{content:"\FCA5"}.mdi-shield-cross-outline:before{content:"\FCA6"}.mdi-shield-half-full:before{content:"\F77F"}.mdi-shield-home:before{content:"\F689"}.mdi-shield-home-outline:before{content:"\FCA7"}.mdi-shield-key:before{content:"\FBA0"}.mdi-shield-key-outline:before{content:"\FBA1"}.mdi-shield-link-variant:before{content:"\FD0F"}.mdi-shield-link-variant-outline:before{content:"\FD10"}.mdi-shield-lock:before{content:"\F99C"}.mdi-shield-lock-outline:before{content:"\FCA8"}.mdi-shield-off:before{content:"\F99D"}.mdi-shield-off-outline:before{content:"\F99B"}.mdi-shield-outline:before{content:"\F499"}.mdi-shield-plus:before{content:"\FAD9"}.mdi-shield-plus-outline:before{content:"\FADA"}.mdi-shield-remove:before{content:"\FADB"}.mdi-shield-remove-outline:before{content:"\FADC"}.mdi-shield-search:before{content:"\FD76"}.mdi-ship-wheel:before{content:"\F832"}.mdi-shoe-formal:before{content:"\FB22"}.mdi-shoe-heel:before{content:"\FB23"}.mdi-shoe-print:before{content:"\FDD6"}.mdi-shopify:before{content:"\FADD"}.mdi-shopping:before{content:"\F49A"}.mdi-shopping-music:before{content:"\F49B"}.mdi-shovel:before{content:"\F70F"}.mdi-shovel-off:before{content:"\F710"}.mdi-shower:before{content:"\F99F"}.mdi-shower-head:before{content:"\F9A0"}.mdi-shredder:before{content:"\F49C"}.mdi-shuffle:before{content:"\F49D"}.mdi-shuffle-disabled:before{content:"\F49E"}.mdi-shuffle-variant:before{content:"\F49F"}.mdi-sigma:before{content:"\F4A0"}.mdi-sigma-lower:before{content:"\F62B"}.mdi-sign-caution:before{content:"\F4A1"}.mdi-sign-direction:before{content:"\F780"}.mdi-sign-text:before{content:"\F781"}.mdi-signal:before{content:"\F4A2"}.mdi-signal-2g:before{content:"\F711"}.mdi-signal-3g:before{content:"\F712"}.mdi-signal-4g:before{content:"\F713"}.mdi-signal-5g:before{content:"\FA6E"}.mdi-signal-cellular-1:before{content:"\F8BB"}.mdi-signal-cellular-2:before{content:"\F8BC"}.mdi-signal-cellular-3:before{content:"\F8BD"}.mdi-signal-cellular-outline:before{content:"\F8BE"}.mdi-signal-hspa:before{content:"\F714"}.mdi-signal-hspa-plus:before{content:"\F715"}.mdi-signal-off:before{content:"\F782"}.mdi-signal-variant:before{content:"\F60A"}.mdi-signature:before{content:"\FDD7"}.mdi-signature-freehand:before{content:"\FDD8"}.mdi-signature-image:before{content:"\FDD9"}.mdi-signature-text:before{content:"\FDDA"}.mdi-silo:before{content:"\FB24"}.mdi-silverware:before{content:"\F4A3"}.mdi-silverware-fork:before{content:"\F4A4"}.mdi-silverware-fork-knife:before{content:"\FA6F"}.mdi-silverware-spoon:before{content:"\F4A5"}.mdi-silverware-variant:before{content:"\F4A6"}.mdi-sim:before{content:"\F4A7"}.mdi-sim-alert:before{content:"\F4A8"}.mdi-sim-off:before{content:"\F4A9"}.mdi-sina-weibo:before{content:"\FADE"}.mdi-sitemap:before{content:"\F4AA"}.mdi-skate:before{content:"\FD11"}.mdi-skew-less:before{content:"\FD12"}.mdi-skew-more:before{content:"\FD13"}.mdi-skip-backward:before{content:"\F4AB"}.mdi-skip-forward:before{content:"\F4AC"}.mdi-skip-next:before{content:"\F4AD"}.mdi-skip-next-circle:before{content:"\F661"}.mdi-skip-next-circle-outline:before{content:"\F662"}.mdi-skip-previous:before{content:"\F4AE"}.mdi-skip-previous-circle:before{content:"\F663"}.mdi-skip-previous-circle-outline:before{content:"\F664"}.mdi-skull:before{content:"\F68B"}.mdi-skull-crossbones:before{content:"\FBA2"}.mdi-skull-crossbones-outline:before{content:"\FBA3"}.mdi-skull-outline:before{content:"\FBA4"}.mdi-skype:before{content:"\F4AF"}.mdi-skype-business:before{content:"\F4B0"}.mdi-slack:before{content:"\F4B1"}.mdi-slackware:before{content:"\F90A"}.mdi-sleep:before{content:"\F4B2"}.mdi-sleep-off:before{content:"\F4B3"}.mdi-slope-downhill:before{content:"\FDDB"}.mdi-slope-uphill:before{content:"\FDDC"}.mdi-smog:before{content:"\FA70"}.mdi-smoke-detector:before{content:"\F392"}.mdi-smoking:before{content:"\F4B4"}.mdi-smoking-off:before{content:"\F4B5"}.mdi-snapchat:before{content:"\F4B6"}.mdi-snowflake:before{content:"\F716"}.mdi-snowman:before{content:"\F4B7"}.mdi-soccer:before{content:"\F4B8"}.mdi-soccer-field:before{content:"\F833"}.mdi-sofa:before{content:"\F4B9"}.mdi-solar-panel:before{content:"\FD77"}.mdi-solar-panel-large:before{content:"\FD78"}.mdi-solar-power:before{content:"\FA71"}.mdi-solid:before{content:"\F68C"}.mdi-sort:before{content:"\F4BA"}.mdi-sort-alphabetical:before{content:"\F4BB"}.mdi-sort-ascending:before{content:"\F4BC"}.mdi-sort-descending:before{content:"\F4BD"}.mdi-sort-numeric:before{content:"\F4BE"}.mdi-sort-variant:before{content:"\F4BF"}.mdi-sort-variant-lock:before{content:"\FCA9"}.mdi-sort-variant-lock-open:before{content:"\FCAA"}.mdi-soundcloud:before{content:"\F4C0"}.mdi-source-branch:before{content:"\F62C"}.mdi-source-commit:before{content:"\F717"}.mdi-source-commit-end:before{content:"\F718"}.mdi-source-commit-end-local:before{content:"\F719"}.mdi-source-commit-local:before{content:"\F71A"}.mdi-source-commit-next-local:before{content:"\F71B"}.mdi-source-commit-start:before{content:"\F71C"}.mdi-source-commit-start-next-local:before{content:"\F71D"}.mdi-source-fork:before{content:"\F4C1"}.mdi-source-merge:before{content:"\F62D"}.mdi-source-pull:before{content:"\F4C2"}.mdi-source-repository:before{content:"\FCAB"}.mdi-source-repository-multiple:before{content:"\FCAC"}.mdi-soy-sauce:before{content:"\F7ED"}.mdi-spa:before{content:"\FCAD"}.mdi-spa-outline:before{content:"\FCAE"}.mdi-space-invaders:before{content:"\FBA5"}.mdi-speaker:before{content:"\F4C3"}.mdi-speaker-bluetooth:before{content:"\F9A1"}.mdi-speaker-multiple:before{content:"\FD14"}.mdi-speaker-off:before{content:"\F4C4"}.mdi-speaker-wireless:before{content:"\F71E"}.mdi-speedometer:before{content:"\F4C5"}.mdi-spellcheck:before{content:"\F4C6"}.mdi-spider-web:before{content:"\FBA6"}.mdi-spotify:before{content:"\F4C7"}.mdi-spotlight:before{content:"\F4C8"}.mdi-spotlight-beam:before{content:"\F4C9"}.mdi-spray:before{content:"\F665"}.mdi-spray-bottle:before{content:"\FADF"}.mdi-square:before{content:"\F763"}.mdi-square-edit-outline:before{content:"\F90B"}.mdi-square-inc:before{content:"\F4CA"}.mdi-square-inc-cash:before{content:"\F4CB"}.mdi-square-medium:before{content:"\FA12"}.mdi-square-medium-outline:before{content:"\FA13"}.mdi-square-outline:before{content:"\F762"}.mdi-square-root:before{content:"\F783"}.mdi-square-root-box:before{content:"\F9A2"}.mdi-square-small:before{content:"\FA14"}.mdi-squeegee:before{content:"\FAE0"}.mdi-ssh:before{content:"\F8BF"}.mdi-stack-exchange:before{content:"\F60B"}.mdi-stack-overflow:before{content:"\F4CC"}.mdi-stadium:before{content:"\F71F"}.mdi-stairs:before{content:"\F4CD"}.mdi-stamper:before{content:"\FD15"}.mdi-standard-definition:before{content:"\F7EE"}.mdi-star:before{content:"\F4CE"}.mdi-star-box:before{content:"\FA72"}.mdi-star-box-outline:before{content:"\FA73"}.mdi-star-circle:before{content:"\F4CF"}.mdi-star-circle-outline:before{content:"\F9A3"}.mdi-star-face:before{content:"\F9A4"}.mdi-star-four-points:before{content:"\FAE1"}.mdi-star-four-points-outline:before{content:"\FAE2"}.mdi-star-half:before{content:"\F4D0"}.mdi-star-off:before{content:"\F4D1"}.mdi-star-outline:before{content:"\F4D2"}.mdi-star-three-points:before{content:"\FAE3"}.mdi-star-three-points-outline:before{content:"\FAE4"}.mdi-steam:before{content:"\F4D3"}.mdi-steam-box:before{content:"\F90C"}.mdi-steering:before{content:"\F4D4"}.mdi-steering-off:before{content:"\F90D"}.mdi-step-backward:before{content:"\F4D5"}.mdi-step-backward-2:before{content:"\F4D6"}.mdi-step-forward:before{content:"\F4D7"}.mdi-step-forward-2:before{content:"\F4D8"}.mdi-stethoscope:before{content:"\F4D9"}.mdi-sticker:before{content:"\F5D0"}.mdi-sticker-emoji:before{content:"\F784"}.mdi-stocking:before{content:"\F4DA"}.mdi-stop:before{content:"\F4DB"}.mdi-stop-circle:before{content:"\F666"}.mdi-stop-circle-outline:before{content:"\F667"}.mdi-store:before{content:"\F4DC"}.mdi-store-24-hour:before{content:"\F4DD"}.mdi-stove:before{content:"\F4DE"}.mdi-strava:before{content:"\FB25"}.mdi-subdirectory-arrow-left:before{content:"\F60C"}.mdi-subdirectory-arrow-right:before{content:"\F60D"}.mdi-subtitles:before{content:"\FA15"}.mdi-subtitles-outline:before{content:"\FA16"}.mdi-subway:before{content:"\F6AB"}.mdi-subway-alert-variant:before{content:"\FD79"}.mdi-subway-variant:before{content:"\F4DF"}.mdi-summit:before{content:"\F785"}.mdi-sunglasses:before{content:"\F4E0"}.mdi-surround-sound:before{content:"\F5C5"}.mdi-surround-sound-2-0:before{content:"\F7EF"}.mdi-surround-sound-3-1:before{content:"\F7F0"}.mdi-surround-sound-5-1:before{content:"\F7F1"}.mdi-surround-sound-7-1:before{content:"\F7F2"}.mdi-svg:before{content:"\F720"}.mdi-swap-horizontal:before{content:"\F4E1"}.mdi-swap-horizontal-bold:before{content:"\FBA9"}.mdi-swap-horizontal-variant:before{content:"\F8C0"}.mdi-swap-vertical:before{content:"\F4E2"}.mdi-swap-vertical-bold:before{content:"\FBAA"}.mdi-swap-vertical-variant:before{content:"\F8C1"}.mdi-swim:before{content:"\F4E3"}.mdi-switch:before{content:"\F4E4"}.mdi-sword:before{content:"\F4E5"}.mdi-sword-cross:before{content:"\F786"}.mdi-symfony:before{content:"\FAE5"}.mdi-sync:before{content:"\F4E6"}.mdi-sync-alert:before{content:"\F4E7"}.mdi-sync-off:before{content:"\F4E8"}.mdi-tab:before{content:"\F4E9"}.mdi-tab-minus:before{content:"\FB26"}.mdi-tab-plus:before{content:"\F75B"}.mdi-tab-remove:before{content:"\FB27"}.mdi-tab-unselected:before{content:"\F4EA"}.mdi-table:before{content:"\F4EB"}.mdi-table-border:before{content:"\FA17"}.mdi-table-column:before{content:"\F834"}.mdi-table-column-plus-after:before{content:"\F4EC"}.mdi-table-column-plus-before:before{content:"\F4ED"}.mdi-table-column-remove:before{content:"\F4EE"}.mdi-table-column-width:before{content:"\F4EF"}.mdi-table-edit:before{content:"\F4F0"}.mdi-table-large:before{content:"\F4F1"}.mdi-table-merge-cells:before{content:"\F9A5"}.mdi-table-of-contents:before{content:"\F835"}.mdi-table-plus:before{content:"\FA74"}.mdi-table-remove:before{content:"\FA75"}.mdi-table-row:before{content:"\F836"}.mdi-table-row-height:before{content:"\F4F2"}.mdi-table-row-plus-after:before{content:"\F4F3"}.mdi-table-row-plus-before:before{content:"\F4F4"}.mdi-table-row-remove:before{content:"\F4F5"}.mdi-table-search:before{content:"\F90E"}.mdi-table-settings:before{content:"\F837"}.mdi-tablet:before{content:"\F4F6"}.mdi-tablet-android:before{content:"\F4F7"}.mdi-tablet-cellphone:before{content:"\F9A6"}.mdi-tablet-ipad:before{content:"\F4F8"}.mdi-taco:before{content:"\F761"}.mdi-tag:before{content:"\F4F9"}.mdi-tag-faces:before{content:"\F4FA"}.mdi-tag-heart:before{content:"\F68A"}.mdi-tag-heart-outline:before{content:"\FBAB"}.mdi-tag-minus:before{content:"\F90F"}.mdi-tag-multiple:before{content:"\F4FB"}.mdi-tag-outline:before{content:"\F4FC"}.mdi-tag-plus:before{content:"\F721"}.mdi-tag-remove:before{content:"\F722"}.mdi-tag-text-outline:before{content:"\F4FD"}.mdi-tank:before{content:"\FD16"}.mdi-tape-measure:before{content:"\FB28"}.mdi-target:before{content:"\F4FE"}.mdi-target-account:before{content:"\FBAC"}.mdi-target-variant:before{content:"\FA76"}.mdi-taxi:before{content:"\F4FF"}.mdi-tea:before{content:"\FD7A"}.mdi-tea-outline:before{content:"\FD7B"}.mdi-teach:before{content:"\F88F"}.mdi-teamviewer:before{content:"\F500"}.mdi-telegram:before{content:"\F501"}.mdi-telescope:before{content:"\FB29"}.mdi-television:before{content:"\F502"}.mdi-television-box:before{content:"\F838"}.mdi-television-classic:before{content:"\F7F3"}.mdi-television-classic-off:before{content:"\F839"}.mdi-television-guide:before{content:"\F503"}.mdi-television-off:before{content:"\F83A"}.mdi-temperature-celsius:before{content:"\F504"}.mdi-temperature-fahrenheit:before{content:"\F505"}.mdi-temperature-kelvin:before{content:"\F506"}.mdi-tennis:before{content:"\FD7C"}.mdi-tennis-ball:before{content:"\F507"}.mdi-tent:before{content:"\F508"}.mdi-terrain:before{content:"\F509"}.mdi-test-tube:before{content:"\F668"}.mdi-test-tube-empty:before{content:"\F910"}.mdi-test-tube-off:before{content:"\F911"}.mdi-text:before{content:"\F9A7"}.mdi-text-shadow:before{content:"\F669"}.mdi-text-short:before{content:"\F9A8"}.mdi-text-subject:before{content:"\F9A9"}.mdi-text-to-speech:before{content:"\F50A"}.mdi-text-to-speech-off:before{content:"\F50B"}.mdi-textbox:before{content:"\F60E"}.mdi-textbox-password:before{content:"\F7F4"}.mdi-texture:before{content:"\F50C"}.mdi-theater:before{content:"\F50D"}.mdi-theme-light-dark:before{content:"\F50E"}.mdi-thermometer:before{content:"\F50F"}.mdi-thermometer-alert:before{content:"\FDDD"}.mdi-thermometer-chevron-down:before{content:"\FDDE"}.mdi-thermometer-chevron-up:before{content:"\FDDF"}.mdi-thermometer-lines:before{content:"\F510"}.mdi-thermometer-minus:before{content:"\FDE0"}.mdi-thermometer-plus:before{content:"\FDE1"}.mdi-thermostat:before{content:"\F393"}.mdi-thermostat-box:before{content:"\F890"}.mdi-thought-bubble:before{content:"\F7F5"}.mdi-thought-bubble-outline:before{content:"\F7F6"}.mdi-thumb-down:before{content:"\F511"}.mdi-thumb-down-outline:before{content:"\F512"}.mdi-thumb-up:before{content:"\F513"}.mdi-thumb-up-outline:before{content:"\F514"}.mdi-thumbs-up-down:before{content:"\F515"}.mdi-ticket:before{content:"\F516"}.mdi-ticket-account:before{content:"\F517"}.mdi-ticket-confirmation:before{content:"\F518"}.mdi-ticket-outline:before{content:"\F912"}.mdi-ticket-percent:before{content:"\F723"}.mdi-tie:before{content:"\F519"}.mdi-tilde:before{content:"\F724"}.mdi-timelapse:before{content:"\F51A"}.mdi-timeline:before{content:"\FBAD"}.mdi-timeline-outline:before{content:"\FBAE"}.mdi-timeline-text:before{content:"\FBAF"}.mdi-timeline-text-outline:before{content:"\FBB0"}.mdi-timer:before{content:"\F51B"}.mdi-timer-10:before{content:"\F51C"}.mdi-timer-3:before{content:"\F51D"}.mdi-timer-off:before{content:"\F51E"}.mdi-timer-sand:before{content:"\F51F"}.mdi-timer-sand-empty:before{content:"\F6AC"}.mdi-timer-sand-full:before{content:"\F78B"}.mdi-timetable:before{content:"\F520"}.mdi-toaster-oven:before{content:"\FCAF"}.mdi-toggle-switch:before{content:"\F521"}.mdi-toggle-switch-off:before{content:"\F522"}.mdi-toggle-switch-off-outline:before{content:"\FA18"}.mdi-toggle-switch-outline:before{content:"\FA19"}.mdi-toilet:before{content:"\F9AA"}.mdi-toolbox:before{content:"\F9AB"}.mdi-toolbox-outline:before{content:"\F9AC"}.mdi-tooltip:before{content:"\F523"}.mdi-tooltip-account:before{content:"\F00C"}.mdi-tooltip-edit:before{content:"\F524"}.mdi-tooltip-image:before{content:"\F525"}.mdi-tooltip-image-outline:before{content:"\FBB1"}.mdi-tooltip-outline:before{content:"\F526"}.mdi-tooltip-plus:before{content:"\FBB2"}.mdi-tooltip-plus-outline:before{content:"\F527"}.mdi-tooltip-text:before{content:"\F528"}.mdi-tooltip-text-outline:before{content:"\FBB3"}.mdi-tooth:before{content:"\F8C2"}.mdi-tooth-outline:before{content:"\F529"}.mdi-tor:before{content:"\F52A"}.mdi-tortoise:before{content:"\FD17"}.mdi-tournament:before{content:"\F9AD"}.mdi-tower-beach:before{content:"\F680"}.mdi-tower-fire:before{content:"\F681"}.mdi-towing:before{content:"\F83B"}.mdi-track-light:before{content:"\F913"}.mdi-trackpad:before{content:"\F7F7"}.mdi-trackpad-lock:before{content:"\F932"}.mdi-tractor:before{content:"\F891"}.mdi-trademark:before{content:"\FA77"}.mdi-traffic-light:before{content:"\F52B"}.mdi-train:before{content:"\F52C"}.mdi-train-car:before{content:"\FBB4"}.mdi-train-variant:before{content:"\F8C3"}.mdi-tram:before{content:"\F52D"}.mdi-transcribe:before{content:"\F52E"}.mdi-transcribe-close:before{content:"\F52F"}.mdi-transfer-down:before{content:"\FD7D"}.mdi-transfer-left:before{content:"\FD7E"}.mdi-transfer-right:before{content:"\F530"}.mdi-transfer-up:before{content:"\FD7F"}.mdi-transit-connection:before{content:"\FD18"}.mdi-transit-connection-variant:before{content:"\FD19"}.mdi-transit-transfer:before{content:"\F6AD"}.mdi-transition:before{content:"\F914"}.mdi-transition-masked:before{content:"\F915"}.mdi-translate:before{content:"\F5CA"}.mdi-translate-off:before{content:"\FDE2"}.mdi-transmission-tower:before{content:"\FD1A"}.mdi-trash-can:before{content:"\FA78"}.mdi-trash-can-outline:before{content:"\FA79"}.mdi-treasure-chest:before{content:"\F725"}.mdi-tree:before{content:"\F531"}.mdi-trello:before{content:"\F532"}.mdi-trending-down:before{content:"\F533"}.mdi-trending-neutral:before{content:"\F534"}.mdi-trending-up:before{content:"\F535"}.mdi-triangle:before{content:"\F536"}.mdi-triangle-outline:before{content:"\F537"}.mdi-triforce:before{content:"\FBB5"}.mdi-trophy:before{content:"\F538"}.mdi-trophy-award:before{content:"\F539"}.mdi-trophy-broken:before{content:"\FD80"}.mdi-trophy-outline:before{content:"\F53A"}.mdi-trophy-variant:before{content:"\F53B"}.mdi-trophy-variant-outline:before{content:"\F53C"}.mdi-truck:before{content:"\F53D"}.mdi-truck-check:before{content:"\FCB0"}.mdi-truck-delivery:before{content:"\F53E"}.mdi-truck-fast:before{content:"\F787"}.mdi-truck-trailer:before{content:"\F726"}.mdi-tshirt-crew:before{content:"\FA7A"}.mdi-tshirt-crew-outline:before{content:"\F53F"}.mdi-tshirt-v:before{content:"\FA7B"}.mdi-tshirt-v-outline:before{content:"\F540"}.mdi-tumble-dryer:before{content:"\F916"}.mdi-tumblr:before{content:"\F541"}.mdi-tumblr-box:before{content:"\F917"}.mdi-tumblr-reblog:before{content:"\F542"}.mdi-tune:before{content:"\F62E"}.mdi-tune-vertical:before{content:"\F66A"}.mdi-turnstile:before{content:"\FCB1"}.mdi-turnstile-outline:before{content:"\FCB2"}.mdi-turtle:before{content:"\FCB3"}.mdi-twitch:before{content:"\F543"}.mdi-twitter:before{content:"\F544"}.mdi-twitter-box:before{content:"\F545"}.mdi-twitter-circle:before{content:"\F546"}.mdi-twitter-retweet:before{content:"\F547"}.mdi-two-factor-authentication:before{content:"\F9AE"}.mdi-uber:before{content:"\F748"}.mdi-ubisoft:before{content:"\FBB6"}.mdi-ubuntu:before{content:"\F548"}.mdi-ultra-high-definition:before{content:"\F7F8"}.mdi-umbraco:before{content:"\F549"}.mdi-umbrella:before{content:"\F54A"}.mdi-umbrella-closed:before{content:"\F9AF"}.mdi-umbrella-outline:before{content:"\F54B"}.mdi-undo:before{content:"\F54C"}.mdi-undo-variant:before{content:"\F54D"}.mdi-unfold-less-horizontal:before{content:"\F54E"}.mdi-unfold-less-vertical:before{content:"\F75F"}.mdi-unfold-more-horizontal:before{content:"\F54F"}.mdi-unfold-more-vertical:before{content:"\F760"}.mdi-ungroup:before{content:"\F550"}.mdi-unity:before{content:"\F6AE"}.mdi-unreal:before{content:"\F9B0"}.mdi-untappd:before{content:"\F551"}.mdi-update:before{content:"\F6AF"}.mdi-upload:before{content:"\F552"}.mdi-upload-multiple:before{content:"\F83C"}.mdi-upload-network:before{content:"\F6F5"}.mdi-upload-network-outline:before{content:"\FCB4"}.mdi-upload-outline:before{content:"\FDE3"}.mdi-usb:before{content:"\F553"}.mdi-van-passenger:before{content:"\F7F9"}.mdi-van-utility:before{content:"\F7FA"}.mdi-vanish:before{content:"\F7FB"}.mdi-variable:before{content:"\FAE6"}.mdi-vector-arrange-above:before{content:"\F554"}.mdi-vector-arrange-below:before{content:"\F555"}.mdi-vector-bezier:before{content:"\FAE7"}.mdi-vector-circle:before{content:"\F556"}.mdi-vector-circle-variant:before{content:"\F557"}.mdi-vector-combine:before{content:"\F558"}.mdi-vector-curve:before{content:"\F559"}.mdi-vector-difference:before{content:"\F55A"}.mdi-vector-difference-ab:before{content:"\F55B"}.mdi-vector-difference-ba:before{content:"\F55C"}.mdi-vector-ellipse:before{content:"\F892"}.mdi-vector-intersection:before{content:"\F55D"}.mdi-vector-line:before{content:"\F55E"}.mdi-vector-point:before{content:"\F55F"}.mdi-vector-polygon:before{content:"\F560"}.mdi-vector-polyline:before{content:"\F561"}.mdi-vector-radius:before{content:"\F749"}.mdi-vector-rectangle:before{content:"\F5C6"}.mdi-vector-selection:before{content:"\F562"}.mdi-vector-square:before{content:"\F001"}.mdi-vector-triangle:before{content:"\F563"}.mdi-vector-union:before{content:"\F564"}.mdi-venmo:before{content:"\F578"}.mdi-vhs:before{content:"\FA1A"}.mdi-vibrate:before{content:"\F566"}.mdi-vibrate-off:before{content:"\FCB5"}.mdi-video:before{content:"\F567"}.mdi-video-3d:before{content:"\F7FC"}.mdi-video-4k-box:before{content:"\F83D"}.mdi-video-account:before{content:"\F918"}.mdi-video-image:before{content:"\F919"}.mdi-video-input-antenna:before{content:"\F83E"}.mdi-video-input-component:before{content:"\F83F"}.mdi-video-input-hdmi:before{content:"\F840"}.mdi-video-input-svideo:before{content:"\F841"}.mdi-video-minus:before{content:"\F9B1"}.mdi-video-off:before{content:"\F568"}.mdi-video-off-outline:before{content:"\FBB7"}.mdi-video-outline:before{content:"\FBB8"}.mdi-video-plus:before{content:"\F9B2"}.mdi-video-stabilization:before{content:"\F91A"}.mdi-video-switch:before{content:"\F569"}.mdi-video-vintage:before{content:"\FA1B"}.mdi-view-agenda:before{content:"\F56A"}.mdi-view-array:before{content:"\F56B"}.mdi-view-carousel:before{content:"\F56C"}.mdi-view-column:before{content:"\F56D"}.mdi-view-dashboard:before{content:"\F56E"}.mdi-view-dashboard-outline:before{content:"\FA1C"}.mdi-view-dashboard-variant:before{content:"\F842"}.mdi-view-day:before{content:"\F56F"}.mdi-view-grid:before{content:"\F570"}.mdi-view-headline:before{content:"\F571"}.mdi-view-list:before{content:"\F572"}.mdi-view-module:before{content:"\F573"}.mdi-view-parallel:before{content:"\F727"}.mdi-view-quilt:before{content:"\F574"}.mdi-view-sequential:before{content:"\F728"}.mdi-view-split-horizontal:before{content:"\FBA7"}.mdi-view-split-vertical:before{content:"\FBA8"}.mdi-view-stream:before{content:"\F575"}.mdi-view-week:before{content:"\F576"}.mdi-vimeo:before{content:"\F577"}.mdi-violin:before{content:"\F60F"}.mdi-virtual-reality:before{content:"\F893"}.mdi-visual-studio:before{content:"\F610"}.mdi-visual-studio-code:before{content:"\FA1D"}.mdi-vk:before{content:"\F579"}.mdi-vk-box:before{content:"\F57A"}.mdi-vk-circle:before{content:"\F57B"}.mdi-vlc:before{content:"\F57C"}.mdi-voice:before{content:"\F5CB"}.mdi-voicemail:before{content:"\F57D"}.mdi-volleyball:before{content:"\F9B3"}.mdi-volume-high:before{content:"\F57E"}.mdi-volume-low:before{content:"\F57F"}.mdi-volume-medium:before{content:"\F580"}.mdi-volume-minus:before{content:"\F75D"}.mdi-volume-mute:before{content:"\F75E"}.mdi-volume-off:before{content:"\F581"}.mdi-volume-plus:before{content:"\F75C"}.mdi-volume-variant-off:before{content:"\FDE4"}.mdi-vote:before{content:"\FA1E"}.mdi-vote-outline:before{content:"\FA1F"}.mdi-vpn:before{content:"\F582"}.mdi-vuejs:before{content:"\F843"}.mdi-walk:before{content:"\F583"}.mdi-wall:before{content:"\F7FD"}.mdi-wall-sconce:before{content:"\F91B"}.mdi-wall-sconce-flat:before{content:"\F91C"}.mdi-wall-sconce-variant:before{content:"\F91D"}.mdi-wallet:before{content:"\F584"}.mdi-wallet-giftcard:before{content:"\F585"}.mdi-wallet-membership:before{content:"\F586"}.mdi-wallet-outline:before{content:"\FBB9"}.mdi-wallet-travel:before{content:"\F587"}.mdi-wallpaper:before{content:"\FDE5"}.mdi-wan:before{content:"\F588"}.mdi-washing-machine:before{content:"\F729"}.mdi-watch:before{content:"\F589"}.mdi-watch-export:before{content:"\F58A"}.mdi-watch-export-variant:before{content:"\F894"}.mdi-watch-import:before{content:"\F58B"}.mdi-watch-import-variant:before{content:"\F895"}.mdi-watch-variant:before{content:"\F896"}.mdi-watch-vibrate:before{content:"\F6B0"}.mdi-watch-vibrate-off:before{content:"\FCB6"}.mdi-water:before{content:"\F58C"}.mdi-water-off:before{content:"\F58D"}.mdi-water-outline:before{content:"\FDE6"}.mdi-water-percent:before{content:"\F58E"}.mdi-water-pump:before{content:"\F58F"}.mdi-watermark:before{content:"\F612"}.mdi-waves:before{content:"\F78C"}.mdi-waze:before{content:"\FBBA"}.mdi-weather-cloudy:before{content:"\F590"}.mdi-weather-fog:before{content:"\F591"}.mdi-weather-hail:before{content:"\F592"}.mdi-weather-hurricane:before{content:"\F897"}.mdi-weather-lightning:before{content:"\F593"}.mdi-weather-lightning-rainy:before{content:"\F67D"}.mdi-weather-night:before{content:"\F594"}.mdi-weather-partlycloudy:before{content:"\F595"}.mdi-weather-pouring:before{content:"\F596"}.mdi-weather-rainy:before{content:"\F597"}.mdi-weather-snowy:before{content:"\F598"}.mdi-weather-snowy-rainy:before{content:"\F67E"}.mdi-weather-sunny:before{content:"\F599"}.mdi-weather-sunset:before{content:"\F59A"}.mdi-weather-sunset-down:before{content:"\F59B"}.mdi-weather-sunset-up:before{content:"\F59C"}.mdi-weather-windy:before{content:"\F59D"}.mdi-weather-windy-variant:before{content:"\F59E"}.mdi-web:before{content:"\F59F"}.mdi-webcam:before{content:"\F5A0"}.mdi-webhook:before{content:"\F62F"}.mdi-webpack:before{content:"\F72A"}.mdi-wechat:before{content:"\F611"}.mdi-weight:before{content:"\F5A1"}.mdi-weight-gram:before{content:"\FD1B"}.mdi-weight-kilogram:before{content:"\F5A2"}.mdi-weight-pound:before{content:"\F9B4"}.mdi-whatsapp:before{content:"\F5A3"}.mdi-wheelchair-accessibility:before{content:"\F5A4"}.mdi-whistle:before{content:"\F9B5"}.mdi-white-balance-auto:before{content:"\F5A5"}.mdi-white-balance-incandescent:before{content:"\F5A6"}.mdi-white-balance-iridescent:before{content:"\F5A7"}.mdi-white-balance-sunny:before{content:"\F5A8"}.mdi-widgets:before{content:"\F72B"}.mdi-wifi:before{content:"\F5A9"}.mdi-wifi-off:before{content:"\F5AA"}.mdi-wifi-star:before{content:"\FDE7"}.mdi-wifi-strength-1:before{content:"\F91E"}.mdi-wifi-strength-1-alert:before{content:"\F91F"}.mdi-wifi-strength-1-lock:before{content:"\F920"}.mdi-wifi-strength-2:before{content:"\F921"}.mdi-wifi-strength-2-alert:before{content:"\F922"}.mdi-wifi-strength-2-lock:before{content:"\F923"}.mdi-wifi-strength-3:before{content:"\F924"}.mdi-wifi-strength-3-alert:before{content:"\F925"}.mdi-wifi-strength-3-lock:before{content:"\F926"}.mdi-wifi-strength-4:before{content:"\F927"}.mdi-wifi-strength-4-alert:before{content:"\F928"}.mdi-wifi-strength-4-lock:before{content:"\F929"}.mdi-wifi-strength-alert-outline:before{content:"\F92A"}.mdi-wifi-strength-lock-outline:before{content:"\F92B"}.mdi-wifi-strength-off:before{content:"\F92C"}.mdi-wifi-strength-off-outline:before{content:"\F92D"}.mdi-wifi-strength-outline:before{content:"\F92E"}.mdi-wii:before{content:"\F5AB"}.mdi-wiiu:before{content:"\F72C"}.mdi-wikipedia:before{content:"\F5AC"}.mdi-wind-turbine:before{content:"\FD81"}.mdi-window-close:before{content:"\F5AD"}.mdi-window-closed:before{content:"\F5AE"}.mdi-window-maximize:before{content:"\F5AF"}.mdi-window-minimize:before{content:"\F5B0"}.mdi-window-open:before{content:"\F5B1"}.mdi-window-restore:before{content:"\F5B2"}.mdi-windows:before{content:"\F5B3"}.mdi-windows-classic:before{content:"\FA20"}.mdi-wiper:before{content:"\FAE8"}.mdi-wiper-wash:before{content:"\FD82"}.mdi-wordpress:before{content:"\F5B4"}.mdi-worker:before{content:"\F5B5"}.mdi-wrap:before{content:"\F5B6"}.mdi-wrap-disabled:before{content:"\FBBB"}.mdi-wrench:before{content:"\F5B7"}.mdi-wrench-outline:before{content:"\FBBC"}.mdi-wunderlist:before{content:"\F5B8"}.mdi-xamarin:before{content:"\F844"}.mdi-xamarin-outline:before{content:"\F845"}.mdi-xaml:before{content:"\F673"}.mdi-xbox:before{content:"\F5B9"}.mdi-xbox-controller:before{content:"\F5BA"}.mdi-xbox-controller-battery-alert:before{content:"\F74A"}.mdi-xbox-controller-battery-charging:before{content:"\FA21"}.mdi-xbox-controller-battery-empty:before{content:"\F74B"}.mdi-xbox-controller-battery-full:before{content:"\F74C"}.mdi-xbox-controller-battery-low:before{content:"\F74D"}.mdi-xbox-controller-battery-medium:before{content:"\F74E"}.mdi-xbox-controller-battery-unknown:before{content:"\F74F"}.mdi-xbox-controller-off:before{content:"\F5BB"}.mdi-xda:before{content:"\F5BC"}.mdi-xing:before{content:"\F5BD"}.mdi-xing-box:before{content:"\F5BE"}.mdi-xing-circle:before{content:"\F5BF"}.mdi-xml:before{content:"\F5C0"}.mdi-xmpp:before{content:"\F7FE"}.mdi-yahoo:before{content:"\FB2A"}.mdi-yammer:before{content:"\F788"}.mdi-yeast:before{content:"\F5C1"}.mdi-yelp:before{content:"\F5C2"}.mdi-yin-yang:before{content:"\F67F"}.mdi-youtube:before{content:"\F5C3"}.mdi-youtube-creator-studio:before{content:"\F846"}.mdi-youtube-gaming:before{content:"\F847"}.mdi-youtube-subscription:before{content:"\FD1C"}.mdi-youtube-tv:before{content:"\F448"}.mdi-z-wave:before{content:"\FAE9"}.mdi-zend:before{content:"\FAEA"}.mdi-zigbee:before{content:"\FD1D"}.mdi-zip-box:before{content:"\F5C4"}.mdi-zip-disk:before{content:"\FA22"}.mdi-zodiac-aquarius:before{content:"\FA7C"}.mdi-zodiac-aries:before{content:"\FA7D"}.mdi-zodiac-cancer:before{content:"\FA7E"}.mdi-zodiac-capricorn:before{content:"\FA7F"}.mdi-zodiac-gemini:before{content:"\FA80"}.mdi-zodiac-leo:before{content:"\FA81"}.mdi-zodiac-libra:before{content:"\FA82"}.mdi-zodiac-pisces:before{content:"\FA83"}.mdi-zodiac-sagittarius:before{content:"\FA84"}.mdi-zodiac-scorpio:before{content:"\FA85"}.mdi-zodiac-taurus:before{content:"\FA86"}.mdi-zodiac-virgo:before{content:"\FA87"}.mdi-blank:before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} -/*# sourceMappingURL=materialdesignicons.min.css.map */ diff --git a/community_server/webroot/css/normalize.css b/community_server/webroot/css/normalize.css deleted file mode 100644 index b0c1902dc..000000000 --- a/community_server/webroot/css/normalize.css +++ /dev/null @@ -1,349 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} \ No newline at end of file diff --git a/community_server/webroot/css/rippleUI/style.css b/community_server/webroot/css/rippleUI/style.css deleted file mode 100644 index 8ba93da24..000000000 --- a/community_server/webroot/css/rippleUI/style.css +++ /dev/null @@ -1,14705 +0,0 @@ -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -@keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn -} - -@keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@-webkit-keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Thin.ttf); - font-weight: 100 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Light.ttf); - font-weight: 300 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Regular.ttf); - font-weight: 400 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Medium.ttf); - font-weight: 500 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Bold.ttf); - font-weight: 700 -} - -.bg-inverse-primary { - background: rgba(4, 112, 6, .2) -} - -.bg-inverse-secondary { - background: rgba(128, 128, 128, .2) -} - -.bg-inverse-success { - background: rgba(0, 224, 147, .2) -} - -.bg-inverse-info { - background: rgba(108, 97, 246, .2) -} - -.bg-inverse-warning { - background: rgba(240, 130, 95, .2) -} - -.bg-inverse-danger { - background: rgba(255, 95, 102, .2) -} - -.bg-inverse-light { - background: rgba(223, 223, 223, .2) -} - -.bg-inverse-dark { - background: rgba(116, 118, 123, .2) -} - -.bg-inverse-white { - background: rgba(255, 255, 255, .2) -} - -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #047006; - --secondary: grey; - --success: #047006; - --info: #6c61f6; - --warning: #f0825f; - --danger: #ff5f66; - --light: #dfdfdf; - --dark: #74767b; - --white: #fff; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace -} - -*, -::after, -::before { - box-sizing: border-box -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0) -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.7; - color: #212529; - text-align: left; - background-color: #fff -} - -[tabindex="-1"]:focus { - outline: 0 !important -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: .5rem -} - -p { - margin-top: 0; - margin-bottom: 1rem -} - -abbr[data-original-title], -abbr[title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - text-decoration-skip-ink: none -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit -} - -dl, -ol, -ul { - margin-top: 0; - margin-bottom: 1rem -} - -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -dt { - font-weight: 700 -} - -dd { - margin-bottom: .5rem; - margin-left: 0 -} - -blockquote { - margin: 0 0 1rem -} - -b, -strong { - font-weight: bolder -} - -small { - font-size: 80% -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - -a { - color: #047006; - text-decoration: none; - background-color: transparent -} - -a:hover { - color: #012602; - text-decoration: underline -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus, -a:not([href]):not([tabindex]):hover { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus { - outline: 0 -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto -} - -figure { - margin: 0 0 1rem -} - -img { - vertical-align: middle; - border-style: none -} - -svg { - overflow: hidden; - vertical-align: middle -} - -table { - border-collapse: collapse -} - -caption { - padding-top: 10px 15px; - padding-bottom: 10px 15px; - color: #6c757d; - text-align: left; - caption-side: bottom -} - -th { - text-align: inherit -} - -label { - display: inline-block; - margin-bottom: .5rem -} - -button { - border-radius: 0 -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -button, -input { - overflow: visible -} - -button, -select { - text-transform: none -} - -select { - word-wrap: normal -} - -[type=button], -[type=reset], -[type=submit], -button { - -webkit-appearance: button -} - -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled), -button:not(:disabled) { - cursor: pointer -} - -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, -button::-moz-focus-inner { - padding: 0; - border-style: none -} - -input[type=checkbox], -input[type=radio] { - box-sizing: border-box; - padding: 0 -} - -input[type=date], -input[type=datetime-local], -input[type=month], -input[type=time] { - -webkit-appearance: listbox -} - -textarea { - overflow: auto; - resize: vertical -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal -} - -progress { - vertical-align: baseline -} - -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: none -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} - -output { - display: inline-block -} - -summary { - display: list-item; - cursor: pointer -} - -template { - display: none -} - -[hidden] { - display: none !important -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - margin-bottom: .5rem; - font-weight: 500; - line-height: 1.2 -} - -.h1, -h1 { - font-size: 2.5rem -} - -.h2, -h2 { - font-size: 2rem -} - -.h3, -h3 { - font-size: 1.75rem -} - -.h4, -h4 { - font-size: 1.5rem -} - -.h5, -h5 { - font-size: 1.25rem -} - -.h6, -h6 { - font-size: 1rem -} - -.lead { - font-size: 1.25rem; - font-weight: 300 -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2 -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2 -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.small, -small { - font-size: 80%; - font-weight: 400 -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.list-unstyled { - padding-left: 0; - list-style: none -} - -.list-inline { - padding-left: 0; - list-style: none -} - -.list-inline-item { - display: inline-block -} - -.list-inline-item:not(:last-child) { - margin-right: .5rem -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d -} - -.blockquote-footer::before { - content: "\2014\00A0" -} - -.img-fluid { - max-width: 100%; - height: auto -} - -.img-thumbnail { - padding: .25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: .25rem; - max-width: 100%; - height: auto -} - -.figure { - display: inline-block -} - -.figure-img { - margin-bottom: .5rem; - line-height: 1 -} - -.figure-caption { - font-size: 90%; - color: #6c757d -} - -code { - font-size: 90%; - color: #bd4147; - word-break: break-word -} - -a>code { - color: inherit -} - -kbd { - padding: .2rem .4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: .2rem -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700 -} - -pre { - display: block; - font-size: 90%; - color: #212529 -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll -} - -.container { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -@media (min-width:576px) { - .container { - max-width: 540px - } - -} - -@media (min-width:768px) { - .container { - max-width: 720px - } - -} - -@media (min-width:992px) { - .container { - max-width: 960px - } - -} - -@media (min-width:1200px) { - .container { - max-width: 1140px - } - -} - -.container-fluid { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -.row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -10px; - margin-left: -10px -} - -.no-gutters { - margin-right: 0; - margin-left: 0 -} - -.no-gutters>.col, -.no-gutters>[class*=col-] { - padding-right: 0; - padding-left: 0 -} - -.col, -.col-1, -.col-10, -.col-11, -.col-12, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-auto, -.col-lg, -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-auto, -.col-md, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-auto, -.col-sm, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-auto, -.col-xl, -.col-xl-1, -.col-xl-10, -.col-xl-11, -.col-xl-12, -.col-xl-2, -.col-xl-3, -.col-xl-4, -.col-xl-5, -.col-xl-6, -.col-xl-7, -.col-xl-8, -.col-xl-9, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 10px; - padding-left: 10px -} - -.col { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% -} - -.col-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% -} - -.col-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% -} - -.col-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% -} - -.col-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% -} - -.col-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% -} - -.col-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% -} - -.col-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% -} - -.col-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% -} - -.col-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% -} - -.col-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% -} - -.col-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% -} - -.col-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% -} - -.col-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% -} - -.order-first { - -webkit-box-ordinal-group: 0; - order: -1 -} - -.order-last { - -webkit-box-ordinal-group: 14; - order: 13 -} - -.order-0 { - -webkit-box-ordinal-group: 1; - order: 0 -} - -.order-1 { - -webkit-box-ordinal-group: 2; - order: 1 -} - -.order-2 { - -webkit-box-ordinal-group: 3; - order: 2 -} - -.order-3 { - -webkit-box-ordinal-group: 4; - order: 3 -} - -.order-4 { - -webkit-box-ordinal-group: 5; - order: 4 -} - -.order-5 { - -webkit-box-ordinal-group: 6; - order: 5 -} - -.order-6 { - -webkit-box-ordinal-group: 7; - order: 6 -} - -.order-7 { - -webkit-box-ordinal-group: 8; - order: 7 -} - -.order-8 { - -webkit-box-ordinal-group: 9; - order: 8 -} - -.order-9 { - -webkit-box-ordinal-group: 10; - order: 9 -} - -.order-10 { - -webkit-box-ordinal-group: 11; - order: 10 -} - -.order-11 { - -webkit-box-ordinal-group: 12; - order: 11 -} - -.order-12 { - -webkit-box-ordinal-group: 13; - order: 12 -} - -.offset-1 { - margin-left: 8.33333% -} - -.offset-2 { - margin-left: 16.66667% -} - -.offset-3 { - margin-left: 25% -} - -.offset-4 { - margin-left: 33.33333% -} - -.offset-5 { - margin-left: 41.66667% -} - -.offset-6 { - margin-left: 50% -} - -.offset-7 { - margin-left: 58.33333% -} - -.offset-8 { - margin-left: 66.66667% -} - -.offset-9 { - margin-left: 75% -} - -.offset-10 { - margin-left: 83.33333% -} - -.offset-11 { - margin-left: 91.66667% -} - -@media (min-width:576px) { - .col-sm { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-sm-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-sm-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-sm-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-sm-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-sm-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-sm-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-sm-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-sm-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-sm-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-sm-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-sm-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-sm-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-sm-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-sm-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-sm-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-sm-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-sm-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-sm-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-sm-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-sm-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-sm-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-sm-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-sm-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-sm-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-sm-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-sm-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-sm-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-sm-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-sm-0 { - margin-left: 0 - } - - .offset-sm-1 { - margin-left: 8.33333% - } - - .offset-sm-2 { - margin-left: 16.66667% - } - - .offset-sm-3 { - margin-left: 25% - } - - .offset-sm-4 { - margin-left: 33.33333% - } - - .offset-sm-5 { - margin-left: 41.66667% - } - - .offset-sm-6 { - margin-left: 50% - } - - .offset-sm-7 { - margin-left: 58.33333% - } - - .offset-sm-8 { - margin-left: 66.66667% - } - - .offset-sm-9 { - margin-left: 75% - } - - .offset-sm-10 { - margin-left: 83.33333% - } - - .offset-sm-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:768px) { - .col-md { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-md-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-md-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-md-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-md-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-md-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-md-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-md-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-md-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-md-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-md-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-md-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-md-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-md-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-md-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-md-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-md-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-md-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-md-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-md-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-md-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-md-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-md-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-md-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-md-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-md-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-md-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-md-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-md-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-md-0 { - margin-left: 0 - } - - .offset-md-1 { - margin-left: 8.33333% - } - - .offset-md-2 { - margin-left: 16.66667% - } - - .offset-md-3 { - margin-left: 25% - } - - .offset-md-4 { - margin-left: 33.33333% - } - - .offset-md-5 { - margin-left: 41.66667% - } - - .offset-md-6 { - margin-left: 50% - } - - .offset-md-7 { - margin-left: 58.33333% - } - - .offset-md-8 { - margin-left: 66.66667% - } - - .offset-md-9 { - margin-left: 75% - } - - .offset-md-10 { - margin-left: 83.33333% - } - - .offset-md-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:992px) { - .col-lg { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-lg-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-lg-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-lg-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-lg-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-lg-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-lg-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-lg-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-lg-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-lg-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-lg-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-lg-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-lg-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-lg-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-lg-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-lg-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-lg-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-lg-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-lg-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-lg-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-lg-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-lg-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-lg-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-lg-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-lg-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-lg-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-lg-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-lg-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-lg-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-lg-0 { - margin-left: 0 - } - - .offset-lg-1 { - margin-left: 8.33333% - } - - .offset-lg-2 { - margin-left: 16.66667% - } - - .offset-lg-3 { - margin-left: 25% - } - - .offset-lg-4 { - margin-left: 33.33333% - } - - .offset-lg-5 { - margin-left: 41.66667% - } - - .offset-lg-6 { - margin-left: 50% - } - - .offset-lg-7 { - margin-left: 58.33333% - } - - .offset-lg-8 { - margin-left: 66.66667% - } - - .offset-lg-9 { - margin-left: 75% - } - - .offset-lg-10 { - margin-left: 83.33333% - } - - .offset-lg-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:1200px) { - .col-xl { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-xl-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-xl-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-xl-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-xl-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-xl-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-xl-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-xl-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-xl-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-xl-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-xl-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-xl-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-xl-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-xl-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-xl-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-xl-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-xl-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-xl-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-xl-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-xl-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-xl-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-xl-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-xl-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-xl-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-xl-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-xl-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-xl-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-xl-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-xl-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-xl-0 { - margin-left: 0 - } - - .offset-xl-1 { - margin-left: 8.33333% - } - - .offset-xl-2 { - margin-left: 16.66667% - } - - .offset-xl-3 { - margin-left: 25% - } - - .offset-xl-4 { - margin-left: 33.33333% - } - - .offset-xl-5 { - margin-left: 41.66667% - } - - .offset-xl-6 { - margin-left: 50% - } - - .offset-xl-7 { - margin-left: 58.33333% - } - - .offset-xl-8 { - margin-left: 66.66667% - } - - .offset-xl-9 { - margin-left: 75% - } - - .offset-xl-10 { - margin-left: 83.33333% - } - - .offset-xl-11 { - margin-left: 91.66667% - } - -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529 -} - -.table td, -.table th { - padding: 10px 15px; - vertical-align: top; - border-top: 1px solid #f2f4f9 -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #f2f4f9 -} - -.table tbody+tbody { - border-top: 2px solid #f2f4f9 -} - -.table-sm td, -.table-sm th { - padding: 10px 15px -} - -.table-bordered { - border: 1px solid #f2f4f9 -} - -.table-bordered td, -.table-bordered th { - border: 1px solid #f2f4f9 -} - -.table-bordered thead td, -.table-bordered thead th { - border-bottom-width: 2px -} - -.table-borderless tbody+tbody, -.table-borderless td, -.table-borderless th, -.table-borderless thead th { - border: 0 -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: #f6f7f9 -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: #f6f7f9 -} - -.table-primary, -.table-primary>td, -.table-primary>th { - background-color: #b9d7b9 -} - -.table-primary tbody+tbody, -.table-primary td, -.table-primary th, -.table-primary thead th { - border-color: #7cb57e -} - -.table-hover .table-primary:hover { - background-color: #a9cea9 -} - -.table-hover .table-primary:hover>td, -.table-hover .table-primary:hover>th { - background-color: #a9cea9 -} - -.table-secondary, -.table-secondary>td, -.table-secondary>th { - background-color: #dbdbdb -} - -.table-secondary tbody+tbody, -.table-secondary td, -.table-secondary th, -.table-secondary thead th { - border-color: #bdbdbd -} - -.table-hover .table-secondary:hover { - background-color: #cecece -} - -.table-hover .table-secondary:hover>td, -.table-hover .table-secondary:hover>th { - background-color: #cecece -} - -.table-success, -.table-success>td, -.table-success>th { - background-color: #b8f6e1 -} - -.table-success tbody+tbody, -.table-success td, -.table-success th, -.table-success thead th { - border-color: #7aefc7 -} - -.table-hover .table-success:hover { - background-color: #a1f3d7 -} - -.table-hover .table-success:hover>td, -.table-hover .table-success:hover>th { - background-color: #a1f3d7 -} - -.table-info, -.table-info>td, -.table-info>th { - background-color: #d6d3fc -} - -.table-info tbody+tbody, -.table-info td, -.table-info th, -.table-info thead th { - border-color: #b3adfa -} - -.table-hover .table-info:hover { - background-color: #c0bbfa -} - -.table-hover .table-info:hover>td, -.table-hover .table-info:hover>th { - background-color: #c0bbfa -} - -.table-warning, -.table-warning>td, -.table-warning>th { - background-color: #fbdcd2 -} - -.table-warning tbody+tbody, -.table-warning td, -.table-warning th, -.table-warning thead th { - border-color: #f7beac -} - -.table-hover .table-warning:hover { - background-color: #f9cabb -} - -.table-hover .table-warning:hover>td, -.table-hover .table-warning:hover>th { - background-color: #f9cabb -} - -.table-danger, -.table-danger>td, -.table-danger>th { - background-color: #ffd2d4 -} - -.table-danger tbody+tbody, -.table-danger td, -.table-danger th, -.table-danger thead th { - border-color: #ffacaf -} - -.table-hover .table-danger:hover { - background-color: #ffb9bc -} - -.table-hover .table-danger:hover>td, -.table-hover .table-danger:hover>th { - background-color: #ffb9bc -} - -.table-light, -.table-light>td, -.table-light>th { - background-color: #f6f6f6 -} - -.table-light tbody+tbody, -.table-light td, -.table-light th, -.table-light thead th { - border-color: #eee -} - -.table-hover .table-light:hover { - background-color: #e9e9e9 -} - -.table-hover .table-light:hover>td, -.table-hover .table-light:hover>th { - background-color: #e9e9e9 -} - -.table-dark, -.table-dark>td, -.table-dark>th { - background-color: #d8d9da -} - -.table-dark tbody+tbody, -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #b7b8ba -} - -.table-hover .table-dark:hover { - background-color: #cbccce -} - -.table-hover .table-dark:hover>td, -.table-hover .table-dark:hover>th { - background-color: #cbccce -} - -.table-white, -.table-white>td, -.table-white>th { - background-color: #fff -} - -.table-white tbody+tbody, -.table-white td, -.table-white th, -.table-white thead th { - border-color: #fff -} - -.table-hover .table-white:hover { - background-color: #f2f2f2 -} - -.table-hover .table-white:hover>td, -.table-hover .table-white:hover>th { - background-color: #f2f2f2 -} - -.table-active, -.table-active>td, -.table-active>th { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover>td, -.table-hover .table-active:hover>th { - background-color: rgba(0, 0, 0, .075) -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55 -} - -.table .thead-light th { - color: #495057; - background-color: #e1e4e6; - border-color: #f2f4f9 -} - -.table-dark { - color: #fff; - background-color: #343a40 -} - -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #454d55 -} - -.table-dark.table-bordered { - border: 0 -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, .05) -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, .075) -} - -@media (max-width:575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-sm>.table-bordered { - border: 0 - } - -} - -@media (max-width:767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-md>.table-bordered { - border: 0 - } - -} - -@media (max-width:991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-lg>.table-bordered { - border: 0 - } - -} - -@media (max-width:1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-xl>.table-bordered { - border: 0 - } - -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch -} - -.table-responsive>.table-bordered { - border: 0 -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .form-control { - -webkit-transition: none; - transition: none - } - -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #f8f9fa; - opacity: 1 -} - -select.form-control:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.form-control-file, -.form-control-range { - display: block; - width: 100% -} - -.col-form-label { - padding-top: calc(.375rem + 1px); - padding-bottom: calc(.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5 -} - -.col-form-label-lg { - padding-top: calc(.5rem + 1px); - padding-bottom: calc(.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5 -} - -.col-form-label-sm { - padding-top: calc(.25rem + 1px); - padding-bottom: calc(.25rem + 1px); - font-size: .875rem; - line-height: 1.5 -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: .375rem; - padding-bottom: .375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0 -} - -.form-control-plaintext.form-control-lg, -.form-control-plaintext.form-control-sm { - padding-right: 0; - padding-left: 0 -} - -.form-control-sm { - height: calc(1.5em + .5rem + 2px); - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -select.form-control[multiple], -select.form-control[size] { - height: auto -} - -textarea.form-control { - height: auto -} - -.form-group { - margin-bottom: 1rem -} - -.form-text { - display: block; - margin-top: .25rem -} - -.form-row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px -} - -.form-row>.col, -.form-row>[class*=col-] { - padding-right: 5px; - padding-left: 5px -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem -} - -.form-check-input { - position: absolute; - margin-top: .3rem; - margin-left: -1.25rem -} - -.form-check-input:disabled~.form-check-label { - color: #adb5bd -} - -.form-check-label { - margin-bottom: 0 -} - -.form-check-inline { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-align: center; - align-items: center; - padding-left: 0; - margin-right: .75rem -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: .3125rem; - margin-left: 0 -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #28a745 -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, .9); - border-radius: .25rem -} - -.form-control.is-valid, -.was-validated .form-control:valid { - border-color: #28a745; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-valid:focus, -.was-validated .form-control:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.form-control.is-valid~.valid-feedback, -.form-control.is-valid~.valid-tooltip, -.was-validated .form-control:valid~.valid-feedback, -.was-validated .form-control:valid~.valid-tooltip { - display: block -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-valid, -.was-validated .custom-select:valid { - border-color: #28a745; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-valid:focus, -.was-validated .custom-select:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-select.is-valid~.valid-feedback, -.custom-select.is-valid~.valid-tooltip, -.was-validated .custom-select:valid~.valid-feedback, -.was-validated .custom-select:valid~.valid-tooltip { - display: block -} - -.form-control-file.is-valid~.valid-feedback, -.form-control-file.is-valid~.valid-tooltip, -.was-validated .form-control-file:valid~.valid-feedback, -.was-validated .form-control-file:valid~.valid-tooltip { - display: block -} - -.form-check-input.is-valid~.form-check-label, -.was-validated .form-check-input:valid~.form-check-label { - color: #28a745 -} - -.form-check-input.is-valid~.valid-feedback, -.form-check-input.is-valid~.valid-tooltip, -.was-validated .form-check-input:valid~.valid-feedback, -.was-validated .form-check-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid~.custom-control-label, -.was-validated .custom-control-input:valid~.custom-control-label { - color: #28a745 -} - -.custom-control-input.is-valid~.custom-control-label::before, -.was-validated .custom-control-input:valid~.custom-control-label::before { - border-color: #28a745 -} - -.custom-control-input.is-valid~.valid-feedback, -.custom-control-input.is-valid~.valid-tooltip, -.was-validated .custom-control-input:valid~.valid-feedback, -.was-validated .custom-control-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid:checked~.custom-control-label::before, -.was-validated .custom-control-input:valid:checked~.custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57 -} - -.custom-control-input.is-valid:focus~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before { - border-color: #28a745 -} - -.custom-file-input.is-valid~.custom-file-label, -.was-validated .custom-file-input:valid~.custom-file-label { - border-color: #28a745 -} - -.custom-file-input.is-valid~.valid-feedback, -.custom-file-input.is-valid~.valid-tooltip, -.was-validated .custom-file-input:valid~.valid-feedback, -.was-validated .custom-file-input:valid~.valid-tooltip { - display: block -} - -.custom-file-input.is-valid:focus~.custom-file-label, -.was-validated .custom-file-input:valid:focus~.custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #dc3545 -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, .9); - border-radius: .25rem -} - -.form-control.is-invalid, -.was-validated .form-control:invalid { - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-invalid:focus, -.was-validated .form-control:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-control.is-invalid~.invalid-feedback, -.form-control.is-invalid~.invalid-tooltip, -.was-validated .form-control:invalid~.invalid-feedback, -.was-validated .form-control:invalid~.invalid-tooltip { - display: block -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-invalid, -.was-validated .custom-select:invalid { - border-color: #dc3545; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-invalid:focus, -.was-validated .custom-select:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-select.is-invalid~.invalid-feedback, -.custom-select.is-invalid~.invalid-tooltip, -.was-validated .custom-select:invalid~.invalid-feedback, -.was-validated .custom-select:invalid~.invalid-tooltip { - display: block -} - -.form-control-file.is-invalid~.invalid-feedback, -.form-control-file.is-invalid~.invalid-tooltip, -.was-validated .form-control-file:invalid~.invalid-feedback, -.was-validated .form-control-file:invalid~.invalid-tooltip { - display: block -} - -.form-check-input.is-invalid~.form-check-label, -.was-validated .form-check-input:invalid~.form-check-label { - color: #dc3545 -} - -.form-check-input.is-invalid~.invalid-feedback, -.form-check-input.is-invalid~.invalid-tooltip, -.was-validated .form-check-input:invalid~.invalid-feedback, -.was-validated .form-check-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid~.custom-control-label, -.was-validated .custom-control-input:invalid~.custom-control-label { - color: #dc3545 -} - -.custom-control-input.is-invalid~.custom-control-label::before, -.was-validated .custom-control-input:invalid~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-control-input.is-invalid~.invalid-feedback, -.custom-control-input.is-invalid~.invalid-tooltip, -.was-validated .custom-control-input:invalid~.invalid-feedback, -.was-validated .custom-control-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid:checked~.custom-control-label::before, -.was-validated .custom-control-input:invalid:checked~.custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d -} - -.custom-control-input.is-invalid:focus~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.custom-file-label, -.was-validated .custom-file-input:invalid~.custom-file-label { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.invalid-feedback, -.custom-file-input.is-invalid~.invalid-tooltip, -.was-validated .custom-file-input:invalid~.invalid-feedback, -.was-validated .custom-file-input:invalid~.invalid-tooltip { - display: block -} - -.custom-file-input.is-invalid:focus~.custom-file-label, -.was-validated .custom-file-input:invalid:focus~.custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-inline { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center -} - -.form-inline .form-check { - width: 100% -} - -@media (min-width:576px) { - .form-inline label { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - margin-bottom: 0 - } - - .form-inline .form-group { - display: -webkit-box; - display: flex; - -webkit-box-flex: 0; - flex: 0 0 auto; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center; - margin-bottom: 0 - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .form-inline .form-control-plaintext { - display: inline-block - } - - .form-inline .custom-select, - .form-inline .input-group { - width: auto - } - - .form-inline .form-check { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: auto; - padding-left: 0 - } - - .form-inline .form-check-input { - position: relative; - flex-shrink: 0; - margin-top: 0; - margin-right: .25rem; - margin-left: 0 - } - - .form-inline .custom-control { - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center - } - - .form-inline .custom-control-label { - margin-bottom: 0 - } - -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .btn { - -webkit-transition: none; - transition: none - } - -} - -.btn:hover { - color: #212529; - text-decoration: none -} - -.btn.focus, -.btn:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.btn.disabled, -.btn:disabled { - opacity: .65 -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none -} - -.btn-primary { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:hover { - color: #fff; - background-color: #034b04; - border-color: #023f03 -} - -.btn-primary.focus, -.btn-primary:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:not(:disabled):not(.disabled).active, -.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #023f03; - border-color: #023203 -} - -.btn-primary:not(:disabled):not(.disabled).active:focus, -.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-secondary { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:hover { - color: #fff; - background-color: #6d6d6d; - border-color: #676767 -} - -.btn-secondary.focus, -.btn-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:not(:disabled):not(.disabled).active, -.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #676767; - border-color: #606060 -} - -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-success { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-success:hover { - color: #fff; - background-color: #00ba7a; - border-color: #00ad72 -} - -.btn-success.focus, -.btn-success:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-success:not(:disabled):not(.disabled).active, -.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #00ad72; - border-color: #00a069 -} - -.btn-success:not(:disabled):not(.disabled).active:focus, -.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-info { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:hover { - color: #fff; - background-color: #4a3df4; - border-color: #3f31f3 -} - -.btn-info.focus, -.btn-info:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-info.disabled, -.btn-info:disabled { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:not(:disabled):not(.disabled).active, -.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle { - color: #fff; - background-color: #3f31f3; - border-color: #3425f3 -} - -.btn-info:not(:disabled):not(.disabled).active:focus, -.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-warning { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:hover { - color: #fff; - background-color: #ed673c; - border-color: #ec5e30 -} - -.btn-warning.focus, -.btn-warning:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:not(:disabled):not(.disabled).active, -.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle { - color: #fff; - background-color: #ec5e30; - border-color: #eb5425 -} - -.btn-warning:not(:disabled):not(.disabled).active:focus, -.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-danger { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:hover { - color: #fff; - background-color: #ff3941; - border-color: #ff2c35 -} - -.btn-danger.focus, -.btn-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:not(:disabled):not(.disabled).active, -.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #ff2c35; - border-color: #ff1f29 -} - -.btn-danger:not(:disabled):not(.disabled).active:focus, -.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-light { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:hover { - color: #212529; - background-color: #ccc; - border-color: #c6c6c6 -} - -.btn-light.focus, -.btn-light:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:not(:disabled):not(.disabled).active, -.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle { - color: #212529; - background-color: #c6c6c6; - border-color: #bfbfbf -} - -.btn-light:not(:disabled):not(.disabled).active:focus, -.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-dark { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:hover { - color: #fff; - background-color: #616367; - border-color: #5b5d61 -} - -.btn-dark.focus, -.btn-dark:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:not(:disabled):not(.disabled).active, -.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #5b5d61; - border-color: #55575a -} - -.btn-dark:not(:disabled):not(.disabled).active:focus, -.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-white { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:hover { - color: #212529; - background-color: #ececec; - border-color: #e6e6e6 -} - -.btn-white.focus, -.btn-white:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-white.disabled, -.btn-white:disabled { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:not(:disabled):not(.disabled).active, -.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle { - color: #212529; - background-color: #e6e6e6; - border-color: #dfdfdf -} - -.btn-white:not(:disabled):not(.disabled).active:focus, -.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-outline-primary { - color: #047006; - border-color: #047006 -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary.focus, -.btn-outline-primary:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-primary:not(:disabled):not(.disabled).active, -.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-secondary { - color: grey; - border-color: grey -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary.focus, -.btn-outline-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: grey; - background-color: transparent -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-success { - color: #047006; - border-color: #047006 -} - -.btn-outline-success:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-success.focus, -.btn-outline-success:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-success:not(:disabled):not(.disabled).active, -.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-info { - color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:hover { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info.focus, -.btn-outline-info:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #6c61f6; - background-color: transparent -} - -.btn-outline-info:not(:disabled):not(.disabled).active, -.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-warning { - color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning.focus, -.btn-outline-warning:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #f0825f; - background-color: transparent -} - -.btn-outline-warning:not(:disabled):not(.disabled).active, -.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-danger { - color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger.focus, -.btn-outline-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #ff5f66; - background-color: transparent -} - -.btn-outline-danger:not(:disabled):not(.disabled).active, -.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-light { - color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:hover { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light.focus, -.btn-outline-light:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #dfdfdf; - background-color: transparent -} - -.btn-outline-light:not(:disabled):not(.disabled).active, -.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-dark { - color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark.focus, -.btn-outline-dark:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #74767b; - background-color: transparent -} - -.btn-outline-dark:not(:disabled):not(.disabled).active, -.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-white { - color: #fff; - border-color: #fff -} - -.btn-outline-white:hover { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white.focus, -.btn-outline-white:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-white.disabled, -.btn-outline-white:disabled { - color: #fff; - background-color: transparent -} - -.btn-outline-white:not(:disabled):not(.disabled).active, -.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white:not(:disabled):not(.disabled).active:focus, -.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-link { - font-weight: 400; - color: #047006; - text-decoration: none -} - -.btn-link:hover { - color: #012602; - text-decoration: underline -} - -.btn-link.focus, -.btn-link:focus { - text-decoration: underline; - box-shadow: none -} - -.btn-link.disabled, -.btn-link:disabled { - color: #6c757d; - pointer-events: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.btn-group-sm>.btn, -.btn-sm { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: .5rem -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - -webkit-transition: opacity .15s linear; - transition: opacity .15s linear -} - -@media (prefers-reduced-motion:reduce) { - .fade { - -webkit-transition: none; - transition: none - } - -} - -.fade:not(.show) { - opacity: 0 -} - -.collapse:not(.show) { - display: none -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease -} - -@media (prefers-reduced-motion:reduce) { - .collapsing { - -webkit-transition: none; - transition: none - } - -} - -.dropdown, -.dropleft, -.dropright, -.dropup { - position: relative -} - -.dropdown-toggle { - white-space: nowrap -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid; - border-right: .3em solid transparent; - border-bottom: 0; - border-left: .3em solid transparent -} - -.dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: .5rem 0; - margin: .125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: .25rem -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-menu-right { - right: 0; - left: auto -} - -@media (min-width:576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0 - } - - .dropdown-menu-sm-right { - right: 0; - left: auto - } - -} - -@media (min-width:768px) { - .dropdown-menu-md-left { - right: auto; - left: 0 - } - - .dropdown-menu-md-right { - right: 0; - left: auto - } - -} - -@media (min-width:992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0 - } - - .dropdown-menu-lg-right { - right: 0; - left: auto - } - -} - -@media (min-width:1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0 - } - - .dropdown-menu-xl-right { - right: 0; - left: auto - } - -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: .125rem -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '0 0 8 8'; - border-top: 0; - border-right: .3em solid transparent; - border-bottom: .3em solid; - border-left: .3em solid transparent -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: .125rem -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '%2328a745'; - border-top: .3em solid transparent; - border-right: 0; - border-bottom: .3em solid transparent; - border-left: .3em solid -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-toggle::after { - vertical-align: 0 -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: .125rem -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.dropleft .dropdown-toggle::after { - display: none -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid transparent; - border-right: .3em solid; - border-bottom: .3em solid transparent -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0 -} - -.dropdown-menu[x-placement^=bottom], -.dropdown-menu[x-placement^=left], -.dropdown-menu[x-placement^=right], -.dropdown-menu[x-placement^=top] { - right: auto; - bottom: auto -} - -.dropdown-divider { - height: 0; - margin: .5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef -} - -.dropdown-item { - display: block; - width: 100%; - padding: .25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0 -} - -.dropdown-item:focus, -.dropdown-item:hover { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent -} - -.dropdown-menu.show { - display: block -} - -.dropdown-header { - display: block; - padding: .5rem 1.5rem; - margin-bottom: 0; - font-size: .875rem; - color: #6c757d; - white-space: nowrap -} - -.dropdown-item-text { - display: block; - padding: .25rem 1.5rem; - color: #212529 -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -webkit-inline-box; - display: inline-flex; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto -} - -.btn-group-vertical>.btn:hover, -.btn-group>.btn:hover { - z-index: 1 -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus { - z-index: 1 -} - -.btn-toolbar { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.btn-toolbar .input-group { - width: auto -} - -.btn-group>.btn-group:not(:first-child), -.btn-group>.btn:not(:first-child) { - margin-left: -1px -} - -.btn-group>.btn-group:not(:last-child)>.btn, -.btn-group>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:not(:first-child)>.btn, -.btn-group>.btn:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.dropdown-toggle-split { - padding-right: .5625rem; - padding-left: .5625rem -} - -.dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0 -} - -.btn-group-sm>.btn+.dropdown-toggle-split, -.btn-sm+.dropdown-toggle-split { - padding-right: .375rem; - padding-left: .375rem -} - -.btn-group-lg>.btn+.dropdown-toggle-split, -.btn-lg+.dropdown-toggle-split { - padding-right: .75rem; - padding-left: .75rem -} - -.btn-group-vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: center; - justify-content: center -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group { - width: 100% -} - -.btn-group-vertical>.btn-group:not(:first-child), -.btn-group-vertical>.btn:not(:first-child) { - margin-top: -1px -} - -.btn-group-vertical>.btn-group:not(:last-child)>.btn, -.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:not(:first-child)>.btn, -.btn-group-vertical>.btn:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-toggle>.btn, -.btn-group-toggle>.btn-group>.btn { - margin-bottom: 0 -} - -.btn-group-toggle>.btn input[type=checkbox], -.btn-group-toggle>.btn input[type=radio], -.btn-group-toggle>.btn-group>.btn input[type=checkbox], -.btn-group-toggle>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.input-group { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: stretch; - align-items: stretch; - width: 100% -} - -.input-group>.custom-file, -.input-group>.custom-select, -.input-group>.form-control, -.input-group>.form-control-plaintext { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0 -} - -.input-group>.custom-file+.custom-file, -.input-group>.custom-file+.custom-select, -.input-group>.custom-file+.form-control, -.input-group>.custom-select+.custom-file, -.input-group>.custom-select+.custom-select, -.input-group>.custom-select+.form-control, -.input-group>.form-control+.custom-file, -.input-group>.form-control+.custom-select, -.input-group>.form-control+.form-control, -.input-group>.form-control-plaintext+.custom-file, -.input-group>.form-control-plaintext+.custom-select, -.input-group>.form-control-plaintext+.form-control { - margin-left: -1px -} - -.input-group>.custom-file .custom-file-input:focus~.custom-file-label, -.input-group>.custom-select:focus, -.input-group>.form-control:focus { - z-index: 3 -} - -.input-group>.custom-file .custom-file-input:focus { - z-index: 4 -} - -.input-group>.custom-select:not(:last-child), -.input-group>.form-control:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-select:not(:first-child), -.input-group>.form-control:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group>.custom-file { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.input-group>.custom-file:not(:last-child) .custom-file-label, -.input-group>.custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-append, -.input-group-prepend { - display: -webkit-box; - display: flex -} - -.input-group-append .btn, -.input-group-prepend .btn { - position: relative; - z-index: 2 -} - -.input-group-append .btn:focus, -.input-group-prepend .btn:focus { - z-index: 3 -} - -.input-group-append .btn+.btn, -.input-group-append .btn+.input-group-text, -.input-group-append .input-group-text+.btn, -.input-group-append .input-group-text+.input-group-text, -.input-group-prepend .btn+.btn, -.input-group-prepend .btn+.input-group-text, -.input-group-prepend .input-group-text+.btn, -.input-group-prepend .input-group-text+.input-group-text { - margin-left: -1px -} - -.input-group-prepend { - margin-right: -1px -} - -.input-group-append { - margin-left: -1px -} - -.input-group-text { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .375rem .75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.input-group-text input[type=checkbox], -.input-group-text input[type=radio] { - margin-top: 0 -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control:not(textarea) { - height: calc(1.5em + 1rem + 2px) -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control, -.input-group-lg>.input-group-append>.btn, -.input-group-lg>.input-group-append>.input-group-text, -.input-group-lg>.input-group-prepend>.btn, -.input-group-lg>.input-group-prepend>.input-group-text { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control:not(textarea) { - height: calc(1.5em + .5rem + 2px) -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control, -.input-group-sm>.input-group-append>.btn, -.input-group-sm>.input-group-append>.input-group-text, -.input-group-sm>.input-group-prepend>.btn, -.input-group-sm>.input-group-prepend>.input-group-text { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.input-group-lg>.custom-select, -.input-group-sm>.custom-select { - padding-right: 1.75rem -} - -.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle), -.input-group>.input-group-append:last-child>.input-group-text:not(:last-child), -.input-group>.input-group-append:not(:last-child)>.btn, -.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.input-group-append>.btn, -.input-group>.input-group-append>.input-group-text, -.input-group>.input-group-prepend:first-child>.btn:not(:first-child), -.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child), -.input-group>.input-group-prepend:not(:first-child)>.btn, -.input-group>.input-group-prepend:not(:first-child)>.input-group-text { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.custom-control { - position: relative; - display: block; - min-height: 1.7rem; - padding-left: 1.9rem -} - -.custom-control-inline { - display: -webkit-inline-box; - display: inline-flex; - margin-right: 1rem -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0 -} - -.custom-control-input:checked~.custom-control-label::before { - color: #fff; - border-color: #047006; - background-color: #047006 -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-control-input:focus:not(:checked)~.custom-control-label::before { - border-color: #80bdff -} - -.custom-control-input:not(:disabled):active~.custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff -} - -.custom-control-input:disabled~.custom-control-label { - color: #6c757d -} - -.custom-control-input:disabled~.custom-control-label::before { - background-color: #e9ecef -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top -} - -.custom-control-label::before { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - pointer-events: none; - content: '0 0 4 5'; - background-color: #fff; - border: #e1e5f1 solid 1px -} - -.custom-control-label::after { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - content: '%23343a40'; - background: no-repeat 50%/50% 50% -} - -.custom-checkbox .custom-control-label::before { - border-radius: .25rem -} - -.custom-checkbox .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before { - border-color: #007bff; - background-color: #007bff -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-radio .custom-control-label::before { - border-radius: 50% -} - -.custom-radio .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e") -} - -.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-switch { - padding-left: 2.8rem -} - -.custom-switch .custom-control-label::before { - left: -2.8rem; - width: 2.3rem; - pointer-events: all; - border-radius: 25px -} - -.custom-switch .custom-control-label::after { - top: calc(.15rem + 2px); - left: calc(-2.8rem + 2px); - width: 1.1rem; - height: 1.1rem; - background-color: #e1e5f1; - border-radius: 25px; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-switch .custom-control-label::after { - -webkit-transition: none; - transition: none - } - -} - -.custom-switch .custom-control-input:checked~.custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(.9rem); - transform: translateX(.9rem) -} - -.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem 1.75rem .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: .25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-select:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.custom-select[multiple], -.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) { - height: auto; - padding-right: .75rem; - background-image: none -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef -} - -.custom-select::-ms-expand { - display: none -} - -.custom-select-sm { - height: calc(1.5em + .5rem + 2px); - padding-top: .25rem; - padding-bottom: .25rem; - padding-left: .5rem; - font-size: .875rem -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: .5rem; - padding-bottom: .5rem; - padding-left: 1rem; - font-size: 1.25rem -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin-bottom: 0 -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin: 0; - opacity: 0 -} - -.custom-file-input:focus~.custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-file-input:disabled~.custom-file-label { - background-color: #e9ecef -} - -.custom-file-input:lang(en)~.custom-file-label::after { - content: 'http://www.w3.org/2000/svg' -} - -.custom-file-input~.custom-file-label[data-browse]::after { - content: attr(data-browse) -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + .75rem); - padding: .375rem .75rem; - line-height: 1.5; - color: #495057; - content: '0 0 8 8'; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 .25rem .25rem 0 -} - -.custom-range { - width: 100%; - height: calc(1rem + .4rem); - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-range:focus { - outline: 0 -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range::-moz-focus-outer { - border: 0 -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -webkit-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -moz-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-moz-range-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-moz-range-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: .2rem; - margin-left: .2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-ms-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-ms-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: .5rem -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-moz-range-track { - cursor: default -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - -webkit-transition: none; - transition: none - } - -} - -.nav { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav-link { - display: block; - padding: .5rem 1rem -} - -.nav-link:focus, -.nav-link:hover { - text-decoration: none -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6 -} - -.nav-tabs .nav-item { - margin-bottom: -1px -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 2px; - border-top-right-radius: 2px -} - -.nav-tabs .nav-link:focus, -.nav-tabs .nav-link:hover { - border-color: #e9ecef #e9ecef #dee2e6 -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent -} - -.nav-tabs .nav-item.show .nav-link, -.nav-tabs .nav-link.active { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.nav-pills .nav-link { - border-radius: 2px -} - -.nav-pills .nav-link.active, -.nav-pills .show>.nav-link { - color: #fff; - background-color: #007bff -} - -.nav-fill .nav-item { - -webkit-box-flex: 1; - flex: 1 1 auto; - text-align: center -} - -.nav-justified .nav-item { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - text-align: center -} - -.tab-content>.tab-pane { - display: none -} - -.tab-content>.active { - display: block -} - -.navbar { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between; - padding: .5rem 1rem -} - -.navbar>.container, -.navbar>.container-fluid { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between -} - -.navbar-brand { - display: inline-block; - padding-top: .3125rem; - padding-bottom: .3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-nav { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0 -} - -.navbar-nav .dropdown-menu { - position: static; - float: none -} - -.navbar-text { - display: inline-block; - padding-top: .5rem; - padding-bottom: .5rem -} - -.navbar-collapse { - flex-basis: 100%; - -webkit-box-flex: 1; - flex-grow: 1; - -webkit-box-align: center; - align-items: center -} - -.navbar-toggler { - padding: .25rem .75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: .25rem -} - -.navbar-toggler:focus, -.navbar-toggler:hover { - text-decoration: none -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: '%2328a745'; - background: no-repeat center center; - background-size: 100% 100% -} - -@media (max-width:575.98px) { - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:576px) { - .navbar-expand-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-sm .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-sm .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-sm .navbar-toggler { - display: none - } - -} - -@media (max-width:767.98px) { - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:768px) { - .navbar-expand-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-md .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-md .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-md .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-md .navbar-toggler { - display: none - } - -} - -@media (max-width:991.98px) { - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:992px) { - .navbar-expand-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-lg .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-lg .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-lg .navbar-toggler { - display: none - } - -} - -@media (max-width:1199.98px) { - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:1200px) { - .navbar-expand-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-xl .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-xl .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-xl .navbar-toggler { - display: none - } - -} - -.navbar-expand { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - padding-right: 0; - padding-left: 0 -} - -.navbar-expand .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - flex-wrap: nowrap -} - -.navbar-expand .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto -} - -.navbar-expand .navbar-toggler { - display: none -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-brand:focus, -.navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-nav .nav-link:focus, -.navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, .7) -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, .3) -} - -.navbar-light .navbar-nav .active>.nav-link, -.navbar-light .navbar-nav .nav-link.active, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .show>.nav-link { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, .5); - border-color: rgba(0, 0, 0, .1) -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-text a:focus, -.navbar-light .navbar-text a:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-dark .navbar-brand { - color: #fff -} - -.navbar-dark .navbar-brand:focus, -.navbar-dark .navbar-brand:hover { - color: #fff -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-nav .nav-link:focus, -.navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, .75) -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, .25) -} - -.navbar-dark .navbar-nav .active>.nav-link, -.navbar-dark .navbar-nav .nav-link.active, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .show>.nav-link { - color: #fff -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, .5); - border-color: rgba(255, 255, 255, .1) -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-text a { - color: #fff -} - -.navbar-dark .navbar-text a:focus, -.navbar-dark .navbar-text a:hover { - color: #fff -} - -.card { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(238, 238, 238, .75); - border-radius: .25rem -} - -.card>hr { - margin-right: 0; - margin-left: 0 -} - -.card>.list-group:first-child .list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.card>.list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.card-body { - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1.25rem -} - -.card-title { - margin-bottom: .75rem -} - -.card-subtitle { - margin-top: -.375rem; - margin-bottom: 0 -} - -.card-text:last-child { - margin-bottom: 0 -} - -.card-link:hover { - text-decoration: none -} - -.card-link+.card-link { - margin-left: 1.25rem -} - -.card-header { - padding: .75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, .03); - border-bottom: 1px solid rgba(238, 238, 238, .75) -} - -.card-header:first-child { - border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 -} - -.card-header+.list-group .list-group-item:first-child { - border-top: 0 -} - -.card-footer { - padding: .75rem 1.25rem; - background-color: rgba(0, 0, 0, .03); - border-top: 1px solid rgba(238, 238, 238, .75) -} - -.card-footer:last-child { - border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) -} - -.card-header-tabs { - margin-right: -.625rem; - margin-bottom: -.75rem; - margin-left: -.625rem; - border-bottom: 0 -} - -.card-header-pills { - margin-right: -.625rem; - margin-left: -.625rem -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem -} - -.card-img { - width: 100%; - border-radius: calc(.25rem - 1px) -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(.25rem - 1px); - border-top-right-radius: calc(.25rem - 1px) -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(.25rem - 1px); - border-bottom-left-radius: calc(.25rem - 1px) -} - -.card-deck { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-deck .card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-deck { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px - } - - .card-deck .card { - display: -webkit-box; - display: flex; - -webkit-box-flex: 1; - flex: 1 0 0%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px - } - -} - -.card-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-group>.card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-group { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap - } - - .card-group>.card { - -webkit-box-flex: 1; - flex: 1 0 0%; - margin-bottom: 0 - } - - .card-group>.card+.card { - margin-left: 0; - border-left: 0 - } - - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-header, - .card-group>.card:not(:last-child) .card-img-top { - border-top-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-footer, - .card-group>.card:not(:last-child) .card-img-bottom { - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-header, - .card-group>.card:not(:first-child) .card-img-top { - border-top-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-footer, - .card-group>.card:not(:first-child) .card-img-bottom { - border-bottom-left-radius: 0 - } - -} - -.card-columns .card { - margin-bottom: .75rem -} - -@media (min-width:576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1 - } - - .card-columns .card { - display: inline-block; - width: 100% - } - -} - -.accordion>.card { - overflow: hidden -} - -.accordion>.card:not(:first-of-type) .card-header:first-child { - border-radius: 0 -} - -.accordion>.card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0 -} - -.accordion>.card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.accordion>.card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.accordion>.card .card-header { - margin-bottom: -1px -} - -.breadcrumb { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding: .75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #f7f9fa; - border-radius: .25rem -} - -.breadcrumb-item+.breadcrumb-item { - padding-left: .5rem -} - -.breadcrumb-item+.breadcrumb-item::before { - display: inline-block; - padding-right: .5rem; - color: #a8a9ad; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: underline -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: none -} - -.breadcrumb-item.active { - color: #6c757d -} - -.pagination { - display: -webkit-box; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 2px -} - -.page-link { - position: relative; - display: block; - padding: .5rem .75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6 -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6 -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 2px; - border-bottom-left-radius: 2px -} - -.page-item:last-child .page-link { - border-top-right-radius: 2px; - border-bottom-right-radius: 2px -} - -.page-item.active .page-link { - z-index: 1; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6 -} - -.pagination-lg .page-link { - padding: .75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5 -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm .page-link { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5 -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: .2rem; - border-bottom-left-radius: .2rem -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: .2rem; - border-bottom-right-radius: .2rem -} - -.badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .badge { - -webkit-transition: none; - transition: none - } - -} - -a.badge:focus, -a.badge:hover { - text-decoration: none -} - -.badge:empty { - display: none -} - -.btn .badge { - position: relative; - top: -1px -} - -.badge-pill { - padding-right: .5rem; - padding-left: .5rem; - border-radius: 10rem -} - -.badge-primary { - color: #fff; - background-color: #047006 -} - -a.badge-primary:focus, -a.badge-primary:hover { - color: #fff; - background-color: #023f03 -} - -a.badge-primary.focus, -a.badge-primary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.badge-secondary { - color: #fff; - background-color: grey -} - -a.badge-secondary:focus, -a.badge-secondary:hover { - color: #fff; - background-color: #676767 -} - -a.badge-secondary.focus, -a.badge-secondary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.badge-success { - color: #fff; - background-color: #047006 -} - -a.badge-success:focus, -a.badge-success:hover { - color: #fff; - background-color: #00ad72 -} - -a.badge-success.focus, -a.badge-success:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.badge-info { - color: #fff; - background-color: #6c61f6 -} - -a.badge-info:focus, -a.badge-info:hover { - color: #fff; - background-color: #3f31f3 -} - -a.badge-info.focus, -a.badge-info:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.badge-warning { - color: #212529; - background-color: #f0825f -} - -a.badge-warning:focus, -a.badge-warning:hover { - color: #212529; - background-color: #ec5e30 -} - -a.badge-warning.focus, -a.badge-warning:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.badge-danger { - color: #fff; - background-color: #ff5f66 -} - -a.badge-danger:focus, -a.badge-danger:hover { - color: #fff; - background-color: #ff2c35 -} - -a.badge-danger.focus, -a.badge-danger:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.badge-light { - color: #212529; - background-color: #dfdfdf -} - -a.badge-light:focus, -a.badge-light:hover { - color: #212529; - background-color: #c6c6c6 -} - -a.badge-light.focus, -a.badge-light:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.badge-dark { - color: #fff; - background-color: #74767b -} - -a.badge-dark:focus, -a.badge-dark:hover { - color: #fff; - background-color: #5b5d61 -} - -a.badge-dark.focus, -a.badge-dark:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.badge-white { - color: #212529; - background-color: #fff -} - -a.badge-white:focus, -a.badge-white:hover { - color: #212529; - background-color: #e6e6e6 -} - -a.badge-white.focus, -a.badge-white:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 6px -} - -@media (min-width:576px) { - .jumbotron { - padding: 4rem 2rem - } - -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0 -} - -.alert { - position: relative; - padding: 1.15rem 1.15rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 2px -} - -.alert-heading { - color: inherit -} - -.alert-link { - font-weight: 700 -} - -.alert-dismissible { - padding-right: 3.8rem -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 1.15rem 1.15rem; - color: inherit -} - -.alert-primary { - color: #023a03; - background-color: #cde2cd; - border-color: #b9d7b9 -} - -.alert-primary hr { - border-top-color: #a9cea9 -} - -.alert-primary .alert-link { - color: #000900 -} - -.alert-secondary { - color: #434343; - background-color: #e6e6e6; - border-color: #dbdbdb -} - -.alert-secondary hr { - border-top-color: #cecece -} - -.alert-secondary .alert-link { - color: #2a2a2a -} - -.alert-success { - color: #00744c; - background-color: #ccf9e9; - border-color: #b8f6e1 -} - -.alert-success hr { - border-top-color: #a1f3d7 -} - -.alert-success .alert-link { - color: #00412b -} - -.alert-info { - color: #383280; - background-color: #e2dffd; - border-color: #d6d3fc -} - -.alert-info hr { - border-top-color: #c0bbfa -} - -.alert-info .alert-link { - color: #28245b -} - -.alert-warning { - color: #7d4431; - background-color: #fce6df; - border-color: #fbdcd2 -} - -.alert-warning hr { - border-top-color: #f9cabb -} - -.alert-warning .alert-link { - color: #583023 -} - -.alert-danger { - color: #853135; - background-color: #ffdfe0; - border-color: #ffd2d4 -} - -.alert-danger hr { - border-top-color: #ffb9bc -} - -.alert-danger .alert-link { - color: #602326 -} - -.alert-light { - color: #747474; - background-color: #f9f9f9; - border-color: #f6f6f6 -} - -.alert-light hr { - border-top-color: #e9e9e9 -} - -.alert-light .alert-link { - color: #5b5b5b -} - -.alert-dark { - color: #3c3d40; - background-color: #e3e4e5; - border-color: #d8d9da -} - -.alert-dark hr { - border-top-color: #cbccce -} - -.alert-dark .alert-link { - color: #232426 -} - -.alert-white { - color: #858585; - background-color: #fff; - border-color: #fff -} - -.alert-white hr { - border-top-color: #f2f2f2 -} - -.alert-white .alert-link { - color: #6c6c6c -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -.progress { - display: -webkit-box; - display: flex; - height: 1rem; - overflow: hidden; - font-size: .75rem; - background-color: #f3f5f7; - border-radius: 2px -} - -.progress-bar { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - -webkit-transition: width .6s ease; - transition: width .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar { - -webkit-transition: none; - transition: none - } - -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none - } - -} - -.media { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start -} - -.media-body { - -webkit-box-flex: 1; - flex: 1 -} - -.list-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0 -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit -} - -.list-group-item-action:focus, -.list-group-item-action:hover { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef -} - -.list-group-item { - position: relative; - display: block; - padding: .75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, .125) -} - -.list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.list-group-horizontal { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.list-group-horizontal .list-group-item { - margin-right: -1px; - margin-bottom: 0 -} - -.list-group-horizontal .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 -} - -.list-group-horizontal .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 -} - -@media (min-width:576px) { - .list-group-horizontal-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-sm .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-sm .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-sm .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:768px) { - .list-group-horizontal-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-md .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-md .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-md .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:992px) { - .list-group-horizontal-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-lg .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-lg .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-lg .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:1200px) { - .list-group-horizontal-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-xl .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-xl .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-xl .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0 -} - -.list-group-flush .list-group-item:last-child { - margin-bottom: -1px -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0 -} - -.list-group-flush:last-child .list-group-item:last-child { - margin-bottom: 0; - border-bottom: 0 -} - -.list-group-item-primary { - color: #023a03; - background-color: #b9d7b9 -} - -.list-group-item-primary.list-group-item-action:focus, -.list-group-item-primary.list-group-item-action:hover { - color: #023a03; - background-color: #a9cea9 -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #023a03; - border-color: #023a03 -} - -.list-group-item-secondary { - color: #434343; - background-color: #dbdbdb -} - -.list-group-item-secondary.list-group-item-action:focus, -.list-group-item-secondary.list-group-item-action:hover { - color: #434343; - background-color: #cecece -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #434343; - border-color: #434343 -} - -.list-group-item-success { - color: #00744c; - background-color: #b8f6e1 -} - -.list-group-item-success.list-group-item-action:focus, -.list-group-item-success.list-group-item-action:hover { - color: #00744c; - background-color: #a1f3d7 -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #00744c; - border-color: #00744c -} - -.list-group-item-info { - color: #383280; - background-color: #d6d3fc -} - -.list-group-item-info.list-group-item-action:focus, -.list-group-item-info.list-group-item-action:hover { - color: #383280; - background-color: #c0bbfa -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #383280; - border-color: #383280 -} - -.list-group-item-warning { - color: #7d4431; - background-color: #fbdcd2 -} - -.list-group-item-warning.list-group-item-action:focus, -.list-group-item-warning.list-group-item-action:hover { - color: #7d4431; - background-color: #f9cabb -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #7d4431; - border-color: #7d4431 -} - -.list-group-item-danger { - color: #853135; - background-color: #ffd2d4 -} - -.list-group-item-danger.list-group-item-action:focus, -.list-group-item-danger.list-group-item-action:hover { - color: #853135; - background-color: #ffb9bc -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #853135; - border-color: #853135 -} - -.list-group-item-light { - color: #747474; - background-color: #f6f6f6 -} - -.list-group-item-light.list-group-item-action:focus, -.list-group-item-light.list-group-item-action:hover { - color: #747474; - background-color: #e9e9e9 -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #747474; - border-color: #747474 -} - -.list-group-item-dark { - color: #3c3d40; - background-color: #d8d9da -} - -.list-group-item-dark.list-group-item-action:focus, -.list-group-item-dark.list-group-item-action:hover { - color: #3c3d40; - background-color: #cbccce -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #3c3d40; - border-color: #3c3d40 -} - -.list-group-item-white { - color: #858585; - background-color: #fff -} - -.list-group-item-white.list-group-item-action:focus, -.list-group-item-white.list-group-item-action:hover { - color: #858585; - background-color: #f2f2f2 -} - -.list-group-item-white.list-group-item-action.active { - color: #fff; - background-color: #858585; - border-color: #858585 -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5 -} - -.close:hover { - color: #000; - text-decoration: none -} - -.close:not(:disabled):not(.disabled):focus, -.close:not(:disabled):not(.disabled):hover { - opacity: .75 -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -a.close.disabled { - pointer-events: none -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: .875rem; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: .25rem -} - -.toast:not(:last-child) { - margin-bottom: .75rem -} - -.toast.showing { - opacity: 1 -} - -.toast.show { - display: block; - opacity: 1 -} - -.toast.hide { - display: none -} - -.toast-header { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .25rem .75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, .05) -} - -.toast-body { - padding: .75rem -} - -.modal-open { - overflow: hidden -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0 -} - -.modal-dialog { - position: relative; - width: auto; - margin: .5rem; - pointer-events: none -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px) -} - -@media (prefers-reduced-motion:reduce) { - .modal.fade .modal-dialog { - -webkit-transition: none; - transition: none - } - -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none -} - -.modal-dialog-scrollable { - display: -webkit-box; - display: flex; - max-height: calc(100% - 1rem) -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden -} - -.modal-dialog-scrollable .modal-footer, -.modal-dialog-scrollable .modal-header { - flex-shrink: 0 -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto -} - -.modal-dialog-centered { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - min-height: calc(100% - 1rem) -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: 'http://www.w3.org/2000/svg' -} - -.modal-dialog-centered.modal-dialog-scrollable { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - height: 100% -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none -} - -.modal-content { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0 -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000 -} - -.modal-backdrop.fade { - opacity: 0 -} - -.modal-backdrop.show { - opacity: .8 -} - -.modal-header { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: .3rem; - border-top-right-radius: .3rem -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5 -} - -.modal-body { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1rem -} - -.modal-footer { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: .3rem; - border-bottom-left-radius: .3rem -} - -.modal-footer>:not(:first-child) { - margin-left: .25rem -} - -.modal-footer>:not(:last-child) { - margin-right: .25rem -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto - } - - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem) - } - - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem) - } - - .modal-dialog-centered { - min-height: calc(100% - 3.5rem) - } - - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem) - } - - .modal-sm { - max-width: 300px - } - -} - -@media (min-width:992px) { - .modal-lg, - .modal-xl { - max-width: 800px - } - -} - -@media (min-width:1200px) { - .modal-xl { - max-width: 1140px - } - -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - opacity: 0 -} - -.tooltip.show { - opacity: .9 -} - -.tooltip .arrow { - position: absolute; - display: block; - width: .8rem; - height: .4rem -} - -.tooltip .arrow::before { - position: absolute; - content: '%23dc3545'; - border-color: transparent; - border-style: solid -} - -.bs-tooltip-auto[x-placement^=top], -.bs-tooltip-top { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow, -.bs-tooltip-top .arrow { - bottom: 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow::before, -.bs-tooltip-top .arrow::before { - top: 0; - border-width: .4rem .4rem 0; - border-top-color: #000 -} - -.bs-tooltip-auto[x-placement^=right], -.bs-tooltip-right { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow, -.bs-tooltip-right .arrow { - left: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow::before, -.bs-tooltip-right .arrow::before { - right: 0; - border-width: .4rem .4rem .4rem 0; - border-right-color: #000 -} - -.bs-tooltip-auto[x-placement^=bottom], -.bs-tooltip-bottom { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow, -.bs-tooltip-bottom .arrow { - top: 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow::before, -.bs-tooltip-bottom .arrow::before { - bottom: 0; - border-width: 0 .4rem .4rem; - border-bottom-color: #000 -} - -.bs-tooltip-auto[x-placement^=left], -.bs-tooltip-left { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow, -.bs-tooltip-left .arrow { - right: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow::before, -.bs-tooltip-left .arrow::before { - left: 0; - border-width: .4rem 0 .4rem .4rem; - border-left-color: #000 -} - -.tooltip-inner { - max-width: 200px; - padding: .25rem .5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: .25rem -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: .5rem; - margin: 0 6px -} - -.popover .arrow::after, -.popover .arrow::before { - position: absolute; - display: block; - content: '-2 -2 7 7'; - border-color: transparent; - border-style: solid -} - -.bs-popover-auto[x-placement^=top], -.bs-popover-top { - margin-bottom: .5rem -} - -.bs-popover-auto[x-placement^=top]>.arrow, -.bs-popover-top>.arrow { - bottom: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=top]>.arrow::before, -.bs-popover-top>.arrow::before { - bottom: 0; - border-width: .5rem .5rem 0; - border-top-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=top]>.arrow::after, -.bs-popover-top>.arrow::after { - bottom: 1px; - border-width: .5rem .5rem 0; - border-top-color: #fff -} - -.bs-popover-auto[x-placement^=right], -.bs-popover-right { - margin-left: .5rem -} - -.bs-popover-auto[x-placement^=right]>.arrow, -.bs-popover-right>.arrow { - left: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=right]>.arrow::before, -.bs-popover-right>.arrow::before { - left: 0; - border-width: .5rem .5rem .5rem 0; - border-right-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=right]>.arrow::after, -.bs-popover-right>.arrow::after { - left: 1px; - border-width: .5rem .5rem .5rem 0; - border-right-color: #fff -} - -.bs-popover-auto[x-placement^=bottom], -.bs-popover-bottom { - margin-top: .5rem -} - -.bs-popover-auto[x-placement^=bottom]>.arrow, -.bs-popover-bottom>.arrow { - top: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::before, -.bs-popover-bottom>.arrow::before { - top: 0; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::after, -.bs-popover-bottom>.arrow::after { - top: 1px; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: #fff -} - -.bs-popover-auto[x-placement^=bottom] .popover-header::before, -.bs-popover-bottom .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -.5rem; - content: '%23dc3545'; - border-bottom: 1px solid #f7f7f7 -} - -.bs-popover-auto[x-placement^=left], -.bs-popover-left { - margin-right: .5rem -} - -.bs-popover-auto[x-placement^=left]>.arrow, -.bs-popover-left>.arrow { - right: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=left]>.arrow::before, -.bs-popover-left>.arrow::before { - right: 0; - border-width: .5rem 0 .5rem .5rem; - border-left-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=left]>.arrow::after, -.bs-popover-left>.arrow::after { - right: 1px; - border-width: .5rem 0 .5rem .5rem; - border-left-color: #fff -} - -.popover-header { - padding: .5rem .75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(6px - 1px); - border-top-right-radius: calc(6px - 1px) -} - -.popover-header:empty { - display: none -} - -.popover-body { - padding: .5rem .75rem; - color: #212529 -} - -.carousel { - position: relative -} - -.carousel.pointer-event { - touch-action: pan-y -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden -} - -.carousel-inner::after { - display: block; - clear: both; - content: 'M0 0l3 3m0-3L0 3' -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transition: -webkit-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .carousel-item { - -webkit-transition: none; - transition: none - } - -} - -.carousel-item-next, -.carousel-item-prev, -.carousel-item.active { - display: block -} - -.active.carousel-item-right, -.carousel-item-next:not(.carousel-item-left) { - -webkit-transform: translateX(100%); - transform: translateX(100%) -} - -.active.carousel-item-left, -.carousel-item-prev:not(.carousel-item-right) { - -webkit-transform: translateX(-100%); - transform: translateX(-100%) -} - -.carousel-fade .carousel-item { - opacity: 0; - -webkit-transition-property: opacity; - transition-property: opacity; - -webkit-transform: none; - transform: none -} - -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right, -.carousel-fade .carousel-item.active { - z-index: 1; - opacity: 1 -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - -webkit-transition: 0s .6s opacity; - transition: 0s .6s opacity -} - -@media (prefers-reduced-motion:reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next, -.carousel-control-prev { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: .5; - -webkit-transition: opacity .15s ease; - transition: opacity .15s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-control-next, - .carousel-control-prev { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next:focus, -.carousel-control-next:hover, -.carousel-control-prev:focus, -.carousel-control-prev:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9 -} - -.carousel-control-prev { - left: 0 -} - -.carousel-control-next { - right: 0 -} - -.carousel-control-next-icon, -.carousel-control-prev-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50%/100% 100% -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none -} - -.carousel-indicators li { - box-sizing: content-box; - -webkit-box-flex: 0; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - -webkit-transition: opacity .6s ease; - transition: opacity .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-indicators li { - -webkit-transition: none; - transition: none - } - -} - -.carousel-indicators .active { - opacity: 1 -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: .25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: .2em -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem -} - -.align-baseline { - vertical-align: baseline !important -} - -.align-top { - vertical-align: top !important -} - -.align-middle { - vertical-align: middle !important -} - -.align-bottom { - vertical-align: bottom !important -} - -.align-text-bottom { - vertical-align: text-bottom !important -} - -.align-text-top { - vertical-align: text-top !important -} - -.bg-primary { - background-color: #047006 !important -} - -a.bg-primary:focus, -a.bg-primary:hover, -button.bg-primary:focus, -button.bg-primary:hover { - background-color: #023f03 !important -} - -.bg-secondary { - background-color: grey !important -} - -a.bg-secondary:focus, -a.bg-secondary:hover, -button.bg-secondary:focus, -button.bg-secondary:hover { - background-color: #676767 !important -} - -.bg-success { - background-color: #047006 !important -} - -a.bg-success:focus, -a.bg-success:hover, -button.bg-success:focus, -button.bg-success:hover { - background-color: #00ad72 !important -} - -.bg-info { - background-color: #6c61f6 !important -} - -a.bg-info:focus, -a.bg-info:hover, -button.bg-info:focus, -button.bg-info:hover { - background-color: #3f31f3 !important -} - -.bg-warning { - background-color: #f0825f !important -} - -a.bg-warning:focus, -a.bg-warning:hover, -button.bg-warning:focus, -button.bg-warning:hover { - background-color: #ec5e30 !important -} - -.bg-danger { - background-color: #ff5f66 !important -} - -a.bg-danger:focus, -a.bg-danger:hover, -button.bg-danger:focus, -button.bg-danger:hover { - background-color: #ff2c35 !important -} - -.bg-light { - background-color: #dfdfdf !important -} - -a.bg-light:focus, -a.bg-light:hover, -button.bg-light:focus, -button.bg-light:hover { - background-color: #c6c6c6 !important -} - -.bg-dark { - background-color: #74767b !important -} - -a.bg-dark:focus, -a.bg-dark:hover, -button.bg-dark:focus, -button.bg-dark:hover { - background-color: #5b5d61 !important -} - -.bg-white { - background-color: #fff !important -} - -a.bg-white:focus, -a.bg-white:hover, -button.bg-white:focus, -button.bg-white:hover { - background-color: #e6e6e6 !important -} - -.bg-white { - background-color: #fff !important -} - -.bg-transparent { - background-color: transparent !important -} - -.border { - border: 1px solid #f2f4f9 !important -} - -.border-top { - border-top: 1px solid #f2f4f9 !important -} - -.border-right { - border-right: 1px solid #f2f4f9 !important -} - -.border-bottom { - border-bottom: 1px solid #f2f4f9 !important -} - -.border-left { - border-left: 1px solid #f2f4f9 !important -} - -.border-0 { - border: 0 !important -} - -.border-top-0 { - border-top: 0 !important -} - -.border-right-0 { - border-right: 0 !important -} - -.border-bottom-0 { - border-bottom: 0 !important -} - -.border-left-0 { - border-left: 0 !important -} - -.border-primary { - border-color: #047006 !important -} - -.border-secondary { - border-color: grey !important -} - -.border-success { - border-color: #047006 !important -} - -.border-info { - border-color: #6c61f6 !important -} - -.border-warning { - border-color: #f0825f !important -} - -.border-danger { - border-color: #ff5f66 !important -} - -.border-light { - border-color: #dfdfdf !important -} - -.border-dark { - border-color: #74767b !important -} - -.border-white { - border-color: #fff !important -} - -.border-white { - border-color: #fff !important -} - -.rounded-sm { - border-radius: .2rem !important -} - -.rounded { - border-radius: 2px !important -} - -.rounded-top { - border-top-left-radius: 2px !important; - border-top-right-radius: 2px !important -} - -.rounded-right { - border-top-right-radius: 2px !important; - border-bottom-right-radius: 2px !important -} - -.rounded-bottom { - border-bottom-right-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-left { - border-top-left-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-lg { - border-radius: 6px !important -} - -.rounded-circle { - border-radius: 50% !important -} - -.rounded-pill { - border-radius: 50rem !important -} - -.rounded-0 { - border-radius: 0 !important -} - -.clearfix::after { - display: block; - clear: both; - content: '.5' -} - -.d-none { - display: none !important -} - -.d-inline { - display: inline !important -} - -.d-inline-block { - display: inline-block !important -} - -.d-block { - display: block !important -} - -.d-table { - display: table !important -} - -.d-table-row { - display: table-row !important -} - -.d-table-cell { - display: table-cell !important -} - -.d-flex { - display: -webkit-box !important; - display: flex !important -} - -.d-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important -} - -@media (min-width:576px) { - .d-sm-none { - display: none !important - } - - .d-sm-inline { - display: inline !important - } - - .d-sm-inline-block { - display: inline-block !important - } - - .d-sm-block { - display: block !important - } - - .d-sm-table { - display: table !important - } - - .d-sm-table-row { - display: table-row !important - } - - .d-sm-table-cell { - display: table-cell !important - } - - .d-sm-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-sm-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:768px) { - .d-md-none { - display: none !important - } - - .d-md-inline { - display: inline !important - } - - .d-md-inline-block { - display: inline-block !important - } - - .d-md-block { - display: block !important - } - - .d-md-table { - display: table !important - } - - .d-md-table-row { - display: table-row !important - } - - .d-md-table-cell { - display: table-cell !important - } - - .d-md-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-md-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:992px) { - .d-lg-none { - display: none !important - } - - .d-lg-inline { - display: inline !important - } - - .d-lg-inline-block { - display: inline-block !important - } - - .d-lg-block { - display: block !important - } - - .d-lg-table { - display: table !important - } - - .d-lg-table-row { - display: table-row !important - } - - .d-lg-table-cell { - display: table-cell !important - } - - .d-lg-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-lg-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:1200px) { - .d-xl-none { - display: none !important - } - - .d-xl-inline { - display: inline !important - } - - .d-xl-inline-block { - display: inline-block !important - } - - .d-xl-block { - display: block !important - } - - .d-xl-table { - display: table !important - } - - .d-xl-table-row { - display: table-row !important - } - - .d-xl-table-cell { - display: table-cell !important - } - - .d-xl-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-xl-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media print { - .d-print-none { - display: none !important - } - - .d-print-inline { - display: inline !important - } - - .d-print-inline-block { - display: inline-block !important - } - - .d-print-block { - display: block !important - } - - .d-print-table { - display: table !important - } - - .d-print-table-row { - display: table-row !important - } - - .d-print-table-cell { - display: table-cell !important - } - - .d-print-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-print-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden -} - -.embed-responsive::before { - display: block; - content: '3' -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.flex-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important -} - -.flex-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important -} - -.flex-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important -} - -.flex-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important -} - -.flex-wrap { - flex-wrap: wrap !important -} - -.flex-nowrap { - flex-wrap: nowrap !important -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important -} - -.flex-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important -} - -.flex-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important -} - -.flex-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important -} - -.flex-shrink-0 { - flex-shrink: 0 !important -} - -.flex-shrink-1 { - flex-shrink: 1 !important -} - -.justify-content-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important -} - -.justify-content-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important -} - -.justify-content-center { - -webkit-box-pack: center !important; - justify-content: center !important -} - -.justify-content-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important -} - -.justify-content-around { - justify-content: space-around !important -} - -.align-items-start { - -webkit-box-align: start !important; - align-items: flex-start !important -} - -.align-items-end { - -webkit-box-align: end !important; - align-items: flex-end !important -} - -.align-items-center { - -webkit-box-align: center !important; - align-items: center !important -} - -.align-items-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important -} - -.align-items-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important -} - -.align-content-start { - align-content: flex-start !important -} - -.align-content-end { - align-content: flex-end !important -} - -.align-content-center { - align-content: center !important -} - -.align-content-between { - align-content: space-between !important -} - -.align-content-around { - align-content: space-around !important -} - -.align-content-stretch { - align-content: stretch !important -} - -.align-self-auto { - align-self: auto !important -} - -.align-self-start { - align-self: flex-start !important -} - -.align-self-end { - align-self: flex-end !important -} - -.align-self-center { - align-self: center !important -} - -.align-self-baseline { - align-self: baseline !important -} - -.align-self-stretch { - align-self: stretch !important -} - -@media (min-width:576px) { - .flex-sm-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-sm-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-sm-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-sm-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-sm-wrap { - flex-wrap: wrap !important - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-sm-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-sm-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-sm-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-sm-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-sm-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-sm-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-sm-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-sm-around { - justify-content: space-around !important - } - - .align-items-sm-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-sm-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-sm-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-sm-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-sm-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-sm-start { - align-content: flex-start !important - } - - .align-content-sm-end { - align-content: flex-end !important - } - - .align-content-sm-center { - align-content: center !important - } - - .align-content-sm-between { - align-content: space-between !important - } - - .align-content-sm-around { - align-content: space-around !important - } - - .align-content-sm-stretch { - align-content: stretch !important - } - - .align-self-sm-auto { - align-self: auto !important - } - - .align-self-sm-start { - align-self: flex-start !important - } - - .align-self-sm-end { - align-self: flex-end !important - } - - .align-self-sm-center { - align-self: center !important - } - - .align-self-sm-baseline { - align-self: baseline !important - } - - .align-self-sm-stretch { - align-self: stretch !important - } - -} - -@media (min-width:768px) { - .flex-md-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-md-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-md-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-md-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-md-wrap { - flex-wrap: wrap !important - } - - .flex-md-nowrap { - flex-wrap: nowrap !important - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-md-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-md-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-md-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-md-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-md-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-md-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-md-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-md-around { - justify-content: space-around !important - } - - .align-items-md-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-md-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-md-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-md-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-md-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-md-start { - align-content: flex-start !important - } - - .align-content-md-end { - align-content: flex-end !important - } - - .align-content-md-center { - align-content: center !important - } - - .align-content-md-between { - align-content: space-between !important - } - - .align-content-md-around { - align-content: space-around !important - } - - .align-content-md-stretch { - align-content: stretch !important - } - - .align-self-md-auto { - align-self: auto !important - } - - .align-self-md-start { - align-self: flex-start !important - } - - .align-self-md-end { - align-self: flex-end !important - } - - .align-self-md-center { - align-self: center !important - } - - .align-self-md-baseline { - align-self: baseline !important - } - - .align-self-md-stretch { - align-self: stretch !important - } - -} - -@media (min-width:992px) { - .flex-lg-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-lg-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-lg-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-lg-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-lg-wrap { - flex-wrap: wrap !important - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-lg-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-lg-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-lg-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-lg-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-lg-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-lg-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-lg-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-lg-around { - justify-content: space-around !important - } - - .align-items-lg-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-lg-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-lg-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-lg-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-lg-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-lg-start { - align-content: flex-start !important - } - - .align-content-lg-end { - align-content: flex-end !important - } - - .align-content-lg-center { - align-content: center !important - } - - .align-content-lg-between { - align-content: space-between !important - } - - .align-content-lg-around { - align-content: space-around !important - } - - .align-content-lg-stretch { - align-content: stretch !important - } - - .align-self-lg-auto { - align-self: auto !important - } - - .align-self-lg-start { - align-self: flex-start !important - } - - .align-self-lg-end { - align-self: flex-end !important - } - - .align-self-lg-center { - align-self: center !important - } - - .align-self-lg-baseline { - align-self: baseline !important - } - - .align-self-lg-stretch { - align-self: stretch !important - } - -} - -@media (min-width:1200px) { - .flex-xl-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-xl-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-xl-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-xl-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-xl-wrap { - flex-wrap: wrap !important - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-xl-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-xl-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-xl-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-xl-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-xl-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-xl-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-xl-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-xl-around { - justify-content: space-around !important - } - - .align-items-xl-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-xl-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-xl-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-xl-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-xl-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-xl-start { - align-content: flex-start !important - } - - .align-content-xl-end { - align-content: flex-end !important - } - - .align-content-xl-center { - align-content: center !important - } - - .align-content-xl-between { - align-content: space-between !important - } - - .align-content-xl-around { - align-content: space-around !important - } - - .align-content-xl-stretch { - align-content: stretch !important - } - - .align-self-xl-auto { - align-self: auto !important - } - - .align-self-xl-start { - align-self: flex-start !important - } - - .align-self-xl-end { - align-self: flex-end !important - } - - .align-self-xl-center { - align-self: center !important - } - - .align-self-xl-baseline { - align-self: baseline !important - } - - .align-self-xl-stretch { - align-self: stretch !important - } - -} - -.float-left { - float: left !important -} - -.float-right { - float: right !important -} - -.float-none { - float: none !important -} - -@media (min-width:576px) { - .float-sm-left { - float: left !important - } - - .float-sm-right { - float: right !important - } - - .float-sm-none { - float: none !important - } - -} - -@media (min-width:768px) { - .float-md-left { - float: left !important - } - - .float-md-right { - float: right !important - } - - .float-md-none { - float: none !important - } - -} - -@media (min-width:992px) { - .float-lg-left { - float: left !important - } - - .float-lg-right { - float: right !important - } - - .float-lg-none { - float: none !important - } - -} - -@media (min-width:1200px) { - .float-xl-left { - float: left !important - } - - .float-xl-right { - float: right !important - } - - .float-xl-none { - float: none !important - } - -} - -.overflow-auto { - overflow: auto !important -} - -.overflow-hidden { - overflow: hidden !important -} - -.position-static { - position: static !important -} - -.position-relative { - position: relative !important -} - -.position-absolute { - position: absolute !important -} - -.position-fixed { - position: fixed !important -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030 -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030 -} - -@supports ((position:-webkit-sticky) or (position:sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal -} - -.shadow-sm { - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important -} - -.shadow { - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important -} - -.shadow-none { - box-shadow: none !important -} - -.w-25 { - width: 25% !important -} - -.w-50 { - width: 50% !important -} - -.w-75 { - width: 75% !important -} - -.w-100 { - width: 100% !important -} - -.w-auto { - width: auto !important -} - -.h-25 { - height: 25% !important -} - -.h-50 { - height: 50% !important -} - -.h-75 { - height: 75% !important -} - -.h-100 { - height: 100% !important -} - -.h-auto { - height: auto !important -} - -.mw-100 { - max-width: 100% !important -} - -.mh-100 { - max-height: 100% !important -} - -.min-vw-100 { - min-width: 100vw !important -} - -.min-vh-100 { - min-height: 100vh !important -} - -.vw-100 { - width: 100vw !important -} - -.vh-100 { - height: 100vh !important -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: '.5'; - background-color: rgba(0, 0, 0, 0) -} - -.m-0 { - margin: 0 !important -} - -.mt-0, -.my-0 { - margin-top: 0 !important -} - -.mr-0, -.mx-0 { - margin-right: 0 !important -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important -} - -.ml-0, -.mx-0 { - margin-left: 0 !important -} - -.m-1 { - margin: .25rem !important -} - -.mt-1, -.my-1 { - margin-top: .25rem !important -} - -.mr-1, -.mx-1 { - margin-right: .25rem !important -} - -.mb-1, -.my-1 { - margin-bottom: .25rem !important -} - -.ml-1, -.mx-1 { - margin-left: .25rem !important -} - -.m-2 { - margin: .5rem !important -} - -.mt-2, -.my-2 { - margin-top: .5rem !important -} - -.mr-2, -.mx-2 { - margin-right: .5rem !important -} - -.mb-2, -.my-2 { - margin-bottom: .5rem !important -} - -.ml-2, -.mx-2 { - margin-left: .5rem !important -} - -.m-3 { - margin: 1rem !important -} - -.mt-3, -.my-3 { - margin-top: 1rem !important -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important -} - -.m-4 { - margin: 1.5rem !important -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important -} - -.m-5 { - margin: 3rem !important -} - -.mt-5, -.my-5 { - margin-top: 3rem !important -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important -} - -.p-0 { - padding: 0 !important -} - -.pt-0, -.py-0 { - padding-top: 0 !important -} - -.pr-0, -.px-0 { - padding-right: 0 !important -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important -} - -.pl-0, -.px-0 { - padding-left: 0 !important -} - -.p-1 { - padding: .25rem !important -} - -.pt-1, -.py-1 { - padding-top: .25rem !important -} - -.pr-1, -.px-1 { - padding-right: .25rem !important -} - -.pb-1, -.py-1 { - padding-bottom: .25rem !important -} - -.pl-1, -.px-1 { - padding-left: .25rem !important -} - -.p-2 { - padding: .5rem !important -} - -.pt-2, -.py-2 { - padding-top: .5rem !important -} - -.pr-2, -.px-2 { - padding-right: .5rem !important -} - -.pb-2, -.py-2 { - padding-bottom: .5rem !important -} - -.pl-2, -.px-2 { - padding-left: .5rem !important -} - -.p-3 { - padding: 1rem !important -} - -.pt-3, -.py-3 { - padding-top: 1rem !important -} - -.pr-3, -.px-3 { - padding-right: 1rem !important -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important -} - -.pl-3, -.px-3 { - padding-left: 1rem !important -} - -.p-4 { - padding: 1.5rem !important -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important -} - -.p-5 { - padding: 3rem !important -} - -.pt-5, -.py-5 { - padding-top: 3rem !important -} - -.pr-5, -.px-5 { - padding-right: 3rem !important -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important -} - -.pl-5, -.px-5 { - padding-left: 3rem !important -} - -.m-n1 { - margin: -.25rem !important -} - -.mt-n1, -.my-n1 { - margin-top: -.25rem !important -} - -.mr-n1, -.mx-n1 { - margin-right: -.25rem !important -} - -.mb-n1, -.my-n1 { - margin-bottom: -.25rem !important -} - -.ml-n1, -.mx-n1 { - margin-left: -.25rem !important -} - -.m-n2 { - margin: -.5rem !important -} - -.mt-n2, -.my-n2 { - margin-top: -.5rem !important -} - -.mr-n2, -.mx-n2 { - margin-right: -.5rem !important -} - -.mb-n2, -.my-n2 { - margin-bottom: -.5rem !important -} - -.ml-n2, -.mx-n2 { - margin-left: -.5rem !important -} - -.m-n3 { - margin: -1rem !important -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important -} - -.m-n4 { - margin: -1.5rem !important -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important -} - -.m-n5 { - margin: -3rem !important -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important -} - -.m-auto { - margin: auto !important -} - -.mt-auto, -.my-auto { - margin-top: auto !important -} - -.mr-auto, -.mx-auto { - margin-right: auto !important -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important -} - -.ml-auto, -.mx-auto { - margin-left: auto !important -} - -@media (min-width:576px) { - .m-sm-0 { - margin: 0 !important - } - - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important - } - - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important - } - - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important - } - - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important - } - - .m-sm-1 { - margin: .25rem !important - } - - .mt-sm-1, - .my-sm-1 { - margin-top: .25rem !important - } - - .mr-sm-1, - .mx-sm-1 { - margin-right: .25rem !important - } - - .mb-sm-1, - .my-sm-1 { - margin-bottom: .25rem !important - } - - .ml-sm-1, - .mx-sm-1 { - margin-left: .25rem !important - } - - .m-sm-2 { - margin: .5rem !important - } - - .mt-sm-2, - .my-sm-2 { - margin-top: .5rem !important - } - - .mr-sm-2, - .mx-sm-2 { - margin-right: .5rem !important - } - - .mb-sm-2, - .my-sm-2 { - margin-bottom: .5rem !important - } - - .ml-sm-2, - .mx-sm-2 { - margin-left: .5rem !important - } - - .m-sm-3 { - margin: 1rem !important - } - - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important - } - - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important - } - - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important - } - - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important - } - - .m-sm-4 { - margin: 1.5rem !important - } - - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important - } - - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important - } - - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important - } - - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important - } - - .m-sm-5 { - margin: 3rem !important - } - - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important - } - - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important - } - - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important - } - - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important - } - - .p-sm-0 { - padding: 0 !important - } - - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important - } - - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important - } - - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important - } - - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important - } - - .p-sm-1 { - padding: .25rem !important - } - - .pt-sm-1, - .py-sm-1 { - padding-top: .25rem !important - } - - .pr-sm-1, - .px-sm-1 { - padding-right: .25rem !important - } - - .pb-sm-1, - .py-sm-1 { - padding-bottom: .25rem !important - } - - .pl-sm-1, - .px-sm-1 { - padding-left: .25rem !important - } - - .p-sm-2 { - padding: .5rem !important - } - - .pt-sm-2, - .py-sm-2 { - padding-top: .5rem !important - } - - .pr-sm-2, - .px-sm-2 { - padding-right: .5rem !important - } - - .pb-sm-2, - .py-sm-2 { - padding-bottom: .5rem !important - } - - .pl-sm-2, - .px-sm-2 { - padding-left: .5rem !important - } - - .p-sm-3 { - padding: 1rem !important - } - - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important - } - - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important - } - - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important - } - - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important - } - - .p-sm-4 { - padding: 1.5rem !important - } - - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important - } - - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important - } - - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important - } - - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important - } - - .p-sm-5 { - padding: 3rem !important - } - - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important - } - - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important - } - - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important - } - - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important - } - - .m-sm-n1 { - margin: -.25rem !important - } - - .mt-sm-n1, - .my-sm-n1 { - margin-top: -.25rem !important - } - - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -.25rem !important - } - - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -.25rem !important - } - - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -.25rem !important - } - - .m-sm-n2 { - margin: -.5rem !important - } - - .mt-sm-n2, - .my-sm-n2 { - margin-top: -.5rem !important - } - - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -.5rem !important - } - - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -.5rem !important - } - - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -.5rem !important - } - - .m-sm-n3 { - margin: -1rem !important - } - - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important - } - - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important - } - - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important - } - - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important - } - - .m-sm-n4 { - margin: -1.5rem !important - } - - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important - } - - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important - } - - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important - } - - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important - } - - .m-sm-n5 { - margin: -3rem !important - } - - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important - } - - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important - } - - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important - } - - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important - } - - .m-sm-auto { - margin: auto !important - } - - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important - } - - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important - } - - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important - } - - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important - } - -} - -@media (min-width:768px) { - .m-md-0 { - margin: 0 !important - } - - .mt-md-0, - .my-md-0 { - margin-top: 0 !important - } - - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important - } - - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important - } - - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important - } - - .m-md-1 { - margin: .25rem !important - } - - .mt-md-1, - .my-md-1 { - margin-top: .25rem !important - } - - .mr-md-1, - .mx-md-1 { - margin-right: .25rem !important - } - - .mb-md-1, - .my-md-1 { - margin-bottom: .25rem !important - } - - .ml-md-1, - .mx-md-1 { - margin-left: .25rem !important - } - - .m-md-2 { - margin: .5rem !important - } - - .mt-md-2, - .my-md-2 { - margin-top: .5rem !important - } - - .mr-md-2, - .mx-md-2 { - margin-right: .5rem !important - } - - .mb-md-2, - .my-md-2 { - margin-bottom: .5rem !important - } - - .ml-md-2, - .mx-md-2 { - margin-left: .5rem !important - } - - .m-md-3 { - margin: 1rem !important - } - - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important - } - - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important - } - - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important - } - - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important - } - - .m-md-4 { - margin: 1.5rem !important - } - - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important - } - - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important - } - - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important - } - - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important - } - - .m-md-5 { - margin: 3rem !important - } - - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important - } - - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important - } - - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important - } - - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important - } - - .p-md-0 { - padding: 0 !important - } - - .pt-md-0, - .py-md-0 { - padding-top: 0 !important - } - - .pr-md-0, - .px-md-0 { - padding-right: 0 !important - } - - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important - } - - .pl-md-0, - .px-md-0 { - padding-left: 0 !important - } - - .p-md-1 { - padding: .25rem !important - } - - .pt-md-1, - .py-md-1 { - padding-top: .25rem !important - } - - .pr-md-1, - .px-md-1 { - padding-right: .25rem !important - } - - .pb-md-1, - .py-md-1 { - padding-bottom: .25rem !important - } - - .pl-md-1, - .px-md-1 { - padding-left: .25rem !important - } - - .p-md-2 { - padding: .5rem !important - } - - .pt-md-2, - .py-md-2 { - padding-top: .5rem !important - } - - .pr-md-2, - .px-md-2 { - padding-right: .5rem !important - } - - .pb-md-2, - .py-md-2 { - padding-bottom: .5rem !important - } - - .pl-md-2, - .px-md-2 { - padding-left: .5rem !important - } - - .p-md-3 { - padding: 1rem !important - } - - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important - } - - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important - } - - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important - } - - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important - } - - .p-md-4 { - padding: 1.5rem !important - } - - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important - } - - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important - } - - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important - } - - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important - } - - .p-md-5 { - padding: 3rem !important - } - - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important - } - - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important - } - - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important - } - - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important - } - - .m-md-n1 { - margin: -.25rem !important - } - - .mt-md-n1, - .my-md-n1 { - margin-top: -.25rem !important - } - - .mr-md-n1, - .mx-md-n1 { - margin-right: -.25rem !important - } - - .mb-md-n1, - .my-md-n1 { - margin-bottom: -.25rem !important - } - - .ml-md-n1, - .mx-md-n1 { - margin-left: -.25rem !important - } - - .m-md-n2 { - margin: -.5rem !important - } - - .mt-md-n2, - .my-md-n2 { - margin-top: -.5rem !important - } - - .mr-md-n2, - .mx-md-n2 { - margin-right: -.5rem !important - } - - .mb-md-n2, - .my-md-n2 { - margin-bottom: -.5rem !important - } - - .ml-md-n2, - .mx-md-n2 { - margin-left: -.5rem !important - } - - .m-md-n3 { - margin: -1rem !important - } - - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important - } - - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important - } - - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important - } - - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important - } - - .m-md-n4 { - margin: -1.5rem !important - } - - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important - } - - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important - } - - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important - } - - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important - } - - .m-md-n5 { - margin: -3rem !important - } - - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important - } - - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important - } - - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important - } - - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important - } - - .m-md-auto { - margin: auto !important - } - - .mt-md-auto, - .my-md-auto { - margin-top: auto !important - } - - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important - } - - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important - } - - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important - } - -} - -@media (min-width:992px) { - .m-lg-0 { - margin: 0 !important - } - - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important - } - - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important - } - - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important - } - - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important - } - - .m-lg-1 { - margin: .25rem !important - } - - .mt-lg-1, - .my-lg-1 { - margin-top: .25rem !important - } - - .mr-lg-1, - .mx-lg-1 { - margin-right: .25rem !important - } - - .mb-lg-1, - .my-lg-1 { - margin-bottom: .25rem !important - } - - .ml-lg-1, - .mx-lg-1 { - margin-left: .25rem !important - } - - .m-lg-2 { - margin: .5rem !important - } - - .mt-lg-2, - .my-lg-2 { - margin-top: .5rem !important - } - - .mr-lg-2, - .mx-lg-2 { - margin-right: .5rem !important - } - - .mb-lg-2, - .my-lg-2 { - margin-bottom: .5rem !important - } - - .ml-lg-2, - .mx-lg-2 { - margin-left: .5rem !important - } - - .m-lg-3 { - margin: 1rem !important - } - - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important - } - - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important - } - - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important - } - - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important - } - - .m-lg-4 { - margin: 1.5rem !important - } - - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important - } - - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important - } - - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important - } - - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important - } - - .m-lg-5 { - margin: 3rem !important - } - - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important - } - - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important - } - - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important - } - - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important - } - - .p-lg-0 { - padding: 0 !important - } - - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important - } - - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important - } - - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important - } - - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important - } - - .p-lg-1 { - padding: .25rem !important - } - - .pt-lg-1, - .py-lg-1 { - padding-top: .25rem !important - } - - .pr-lg-1, - .px-lg-1 { - padding-right: .25rem !important - } - - .pb-lg-1, - .py-lg-1 { - padding-bottom: .25rem !important - } - - .pl-lg-1, - .px-lg-1 { - padding-left: .25rem !important - } - - .p-lg-2 { - padding: .5rem !important - } - - .pt-lg-2, - .py-lg-2 { - padding-top: .5rem !important - } - - .pr-lg-2, - .px-lg-2 { - padding-right: .5rem !important - } - - .pb-lg-2, - .py-lg-2 { - padding-bottom: .5rem !important - } - - .pl-lg-2, - .px-lg-2 { - padding-left: .5rem !important - } - - .p-lg-3 { - padding: 1rem !important - } - - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important - } - - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important - } - - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important - } - - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important - } - - .p-lg-4 { - padding: 1.5rem !important - } - - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important - } - - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important - } - - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important - } - - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important - } - - .p-lg-5 { - padding: 3rem !important - } - - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important - } - - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important - } - - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important - } - - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important - } - - .m-lg-n1 { - margin: -.25rem !important - } - - .mt-lg-n1, - .my-lg-n1 { - margin-top: -.25rem !important - } - - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -.25rem !important - } - - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -.25rem !important - } - - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -.25rem !important - } - - .m-lg-n2 { - margin: -.5rem !important - } - - .mt-lg-n2, - .my-lg-n2 { - margin-top: -.5rem !important - } - - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -.5rem !important - } - - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -.5rem !important - } - - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -.5rem !important - } - - .m-lg-n3 { - margin: -1rem !important - } - - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important - } - - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important - } - - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important - } - - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important - } - - .m-lg-n4 { - margin: -1.5rem !important - } - - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important - } - - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important - } - - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important - } - - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important - } - - .m-lg-n5 { - margin: -3rem !important - } - - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important - } - - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important - } - - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important - } - - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important - } - - .m-lg-auto { - margin: auto !important - } - - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important - } - - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important - } - - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important - } - - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important - } - -} - -@media (min-width:1200px) { - .m-xl-0 { - margin: 0 !important - } - - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important - } - - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important - } - - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important - } - - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important - } - - .m-xl-1 { - margin: .25rem !important - } - - .mt-xl-1, - .my-xl-1 { - margin-top: .25rem !important - } - - .mr-xl-1, - .mx-xl-1 { - margin-right: .25rem !important - } - - .mb-xl-1, - .my-xl-1 { - margin-bottom: .25rem !important - } - - .ml-xl-1, - .mx-xl-1 { - margin-left: .25rem !important - } - - .m-xl-2 { - margin: .5rem !important - } - - .mt-xl-2, - .my-xl-2 { - margin-top: .5rem !important - } - - .mr-xl-2, - .mx-xl-2 { - margin-right: .5rem !important - } - - .mb-xl-2, - .my-xl-2 { - margin-bottom: .5rem !important - } - - .ml-xl-2, - .mx-xl-2 { - margin-left: .5rem !important - } - - .m-xl-3 { - margin: 1rem !important - } - - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important - } - - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important - } - - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important - } - - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important - } - - .m-xl-4 { - margin: 1.5rem !important - } - - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important - } - - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important - } - - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important - } - - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important - } - - .m-xl-5 { - margin: 3rem !important - } - - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important - } - - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important - } - - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important - } - - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important - } - - .p-xl-0 { - padding: 0 !important - } - - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important - } - - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important - } - - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important - } - - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important - } - - .p-xl-1 { - padding: .25rem !important - } - - .pt-xl-1, - .py-xl-1 { - padding-top: .25rem !important - } - - .pr-xl-1, - .px-xl-1 { - padding-right: .25rem !important - } - - .pb-xl-1, - .py-xl-1 { - padding-bottom: .25rem !important - } - - .pl-xl-1, - .px-xl-1 { - padding-left: .25rem !important - } - - .p-xl-2 { - padding: .5rem !important - } - - .pt-xl-2, - .py-xl-2 { - padding-top: .5rem !important - } - - .pr-xl-2, - .px-xl-2 { - padding-right: .5rem !important - } - - .pb-xl-2, - .py-xl-2 { - padding-bottom: .5rem !important - } - - .pl-xl-2, - .px-xl-2 { - padding-left: .5rem !important - } - - .p-xl-3 { - padding: 1rem !important - } - - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important - } - - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important - } - - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important - } - - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important - } - - .p-xl-4 { - padding: 1.5rem !important - } - - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important - } - - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important - } - - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important - } - - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important - } - - .p-xl-5 { - padding: 3rem !important - } - - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important - } - - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important - } - - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important - } - - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important - } - - .m-xl-n1 { - margin: -.25rem !important - } - - .mt-xl-n1, - .my-xl-n1 { - margin-top: -.25rem !important - } - - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -.25rem !important - } - - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -.25rem !important - } - - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -.25rem !important - } - - .m-xl-n2 { - margin: -.5rem !important - } - - .mt-xl-n2, - .my-xl-n2 { - margin-top: -.5rem !important - } - - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -.5rem !important - } - - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -.5rem !important - } - - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -.5rem !important - } - - .m-xl-n3 { - margin: -1rem !important - } - - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important - } - - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important - } - - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important - } - - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important - } - - .m-xl-n4 { - margin: -1.5rem !important - } - - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important - } - - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important - } - - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important - } - - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important - } - - .m-xl-n5 { - margin: -3rem !important - } - - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important - } - - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important - } - - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important - } - - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important - } - - .m-xl-auto { - margin: auto !important - } - - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important - } - - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important - } - - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important - } - - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important - } - -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important -} - -.text-justify { - text-align: justify !important -} - -.text-wrap { - white-space: normal !important -} - -.text-nowrap { - white-space: nowrap !important -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} - -.text-left { - text-align: left !important -} - -.text-right { - text-align: right !important -} - -.text-center { - text-align: center !important -} - -@media (min-width:576px) { - .text-sm-left { - text-align: left !important - } - - .text-sm-right { - text-align: right !important - } - - .text-sm-center { - text-align: center !important - } - -} - -@media (min-width:768px) { - .text-md-left { - text-align: left !important - } - - .text-md-right { - text-align: right !important - } - - .text-md-center { - text-align: center !important - } - -} - -@media (min-width:992px) { - .text-lg-left { - text-align: left !important - } - - .text-lg-right { - text-align: right !important - } - - .text-lg-center { - text-align: center !important - } - -} - -@media (min-width:1200px) { - .text-xl-left { - text-align: left !important - } - - .text-xl-right { - text-align: right !important - } - - .text-xl-center { - text-align: center !important - } - -} - -.text-lowercase { - text-transform: lowercase !important -} - -.text-uppercase { - text-transform: uppercase !important -} - -.text-capitalize { - text-transform: capitalize !important -} - -.font-weight-light { - font-weight: 300 !important -} - -.font-weight-lighter { - font-weight: lighter !important -} - -.font-weight-normal { - font-weight: 400 !important -} - -.font-weight-bold { - font-weight: 700 !important -} - -.font-weight-bolder { - font-weight: bolder !important -} - -.font-italic { - font-style: italic !important -} - -.text-white { - color: #fff !important -} - -.text-primary { - color: #047006 !important -} - -a.text-primary:focus, -a.text-primary:hover { - color: #012602 !important -} - -.text-secondary { - color: grey !important -} - -a.text-secondary:focus, -a.text-secondary:hover { - color: #5a5a5a !important -} - -.text-success { - color: #047006 !important -} - -a.text-success:focus, -a.text-success:hover { - color: #009461 !important -} - -.text-info { - color: #6c61f6 !important -} - -a.text-info:focus, -a.text-info:hover { - color: #2919f2 !important -} - -.text-warning { - color: #f0825f !important -} - -a.text-warning:focus, -a.text-warning:hover { - color: #e94b19 !important -} - -.text-danger { - color: #ff5f66 !important -} - -a.text-danger:focus, -a.text-danger:hover { - color: #ff131d !important -} - -.text-light { - color: #dfdfdf !important -} - -a.text-light:focus, -a.text-light:hover { - color: #b9b9b9 !important -} - -.text-dark { - color: #74767b !important -} - -a.text-dark:focus, -a.text-dark:hover { - color: #4f5054 !important -} - -.text-white { - color: #fff !important -} - -a.text-white:focus, -a.text-white:hover { - color: #d9d9d9 !important -} - -.text-body { - color: #212529 !important -} - -.text-muted { - color: #adb5bd !important -} - -.text-black-50 { - color: rgba(0, 0, 0, .5) !important -} - -.text-white-50 { - color: rgba(255, 255, 255, .5) !important -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0 -} - -.text-decoration-none { - text-decoration: none !important -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important -} - -.text-reset { - color: inherit !important -} - -.visible { - visibility: visible !important -} - -.invisible { - visibility: hidden !important -} - -@media print { - *, - ::after, - ::before { - text-shadow: none !important; - box-shadow: none !important - } - - a:not(.btn) { - text-decoration: underline - } - - abbr[title]::after { - content: '3'attr(title) ")" - } - - pre { - white-space: pre-wrap !important - } - - blockquote, - pre { - border: 1px solid #adb5bd; - page-break-inside: avoid - } - - thead { - display: table-header-group - } - - img, - tr { - page-break-inside: avoid - } - - h2, - h3, - p { - orphans: 3; - widows: 3 - } - - h2, - h3 { - page-break-after: avoid - } - - @page { - size: a3 - } - - body { - min-width: 992px !important - } - - .container { - min-width: 992px !important - } - - .navbar { - display: none - } - - .badge { - border: 1px solid #000 - } - - .table { - border-collapse: collapse !important - } - - .table td, - .table th { - background-color: #fff !important - } - - .table-bordered td, - .table-bordered th { - border: 1px solid #dee2e6 !important - } - - .table-dark { - color: inherit - } - - .table-dark tbody+tbody, - .table-dark td, - .table-dark th, - .table-dark thead th { - border-color: #f2f4f9 - } - - .table .thead-dark th { - color: inherit; - border-color: #f2f4f9 - } - -} - -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; - z-index: 120 -} - -.versionstring { - top: 70px; - right: 8px; - left: auto -} - -.grd-time-used { - bottom: 0 -} - -.t-header { - display: -webkit-box; - display: flex; - height: 70px; - background: #f9fafb; - z-index: 100 -} - -@media (max-width:991.98px) { - .t-header { - padding-left: 5px; - padding-right: 5px - } - -} - -.t-header .t-header-brand-wrapper { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - height: 70px; - width: 17rem; - min-width: 17rem; - max-width: 17rem; - background: #fff; - z-index: 100; - padding-left: 18px -} - -.t-header .t-header-brand-wrapper a { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - color: #dfdfdf; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1.25rem -} - -.t-header .t-header-brand-wrapper a .logo { - max-width: 100%; - width: 110px -} - -.t-header .t-header-brand-wrapper a .logo-mini { - display: none; - max-width: 100%; - width: 35px -} - -.t-header .t-header-brand-wrapper a p { - color: inherit; - font-size: inherit; - font-weight: inherit; - margin-bottom: 0 -} - -@media (max-width:991.98px) { - .t-header .t-header-brand-wrapper { - padding-left: 0; - -webkit-box-pack: center; - justify-content: center - } - - .t-header .t-header-brand-wrapper a .logo-mini { - width: 25px - } - -} - -.t-header .t-header-content-wrapper { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - width: 100%; - max-width: 100%; - padding: 0 2.5rem -} - -@media (max-width:991.98px) { - .t-header .t-header-content-wrapper { - padding: 0 1rem - } - -} - -.t-header .t-header-content-wrapper .t-header-search-box { - display: -webkit-box; - display: flex; - width: 40%; - height: 45px; - border: none; - background: #edf0f3; - border-radius: 4px; - -webkit-transition: .3s ease-in-out; - transition: .3s ease-in-out; - -webkit-transition-property: background; - transition-property: background -} - -@media (max-width:580px) { - .t-header .t-header-content-wrapper .t-header-search-box { - display: none - } - -} - -.t-header .t-header-content-wrapper .t-header-search-box .input-group-prepend .input-group-text { - border: none; - background: 0 0; - font-size: 1.5rem; - padding-left: 15px; - line-height: 23px -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control { - height: inherit; - border: none; - background: 0 0; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 500; - padding-left: 0 -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control.placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control:-moz-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control::-moz-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control:-ms-input-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control::-webkit-input-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box:hover { - background: #e4e8ed -} - -.t-header .t-header-content-wrapper .t-header-content { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - width: 100%; - max-width: 100% -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link { - position: relative; - font-family: Roboto, sans-serif -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link i { - color: #525c5d -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link .notification-indicator { - position: absolute; - top: 12px; - right: 12px -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item:last-child .nav-link { - padding-right: 0 -} - -.t-header .t-header-toggler { - background: 0 0; - border: none; - margin-left: auto -} - -.t-header .t-header-toggler svg.logo { - width: 50px; - height: 50px; - cursor: pointer; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) -} - -.t-header .t-header-toggler svg.logo path { - fill: none; - -webkit-transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25); - transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25); - stroke-width: 8px; - stroke-linecap: round; - stroke: #adb5bd; - stroke-dashoffset: -20px -} - -.t-header .t-header-toggler svg.logo .bottom, -.t-header .t-header-toggler svg.logo .middle, -.t-header .t-header-toggler svg.logo .top { - stroke-dasharray: 60px 300px -} - -.t-header .t-header-toggler.arrow path.bottom, -.t-header .t-header-toggler.arrow path.top { - stroke-dasharray: 25px 300px; - stroke-dashoffset: -230px -} - -.t-header .t-header-toggler i { - font-size: 1.375rem -} - -.t-header .t-header-toggler.t-header-mobile-toggler { - margin-left: 0; - margin-right: 15px -} - -.t-header.fixed-top { - position: fixed -} - -.header-fixed .t-header { - position: fixed; - top: 0; - right: 0; - left: 0; - width: 100%; - z-index: 100 -} - -.header-fixed .sidebar { - padding-top: 70px -} - -.header-fixed .sidebar .t-header-brand-wrapper { - position: fixed; - left: 0; - top: 0; - z-index: 100; - width: 17rem; - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .05) -} - -.header-fixed .sidebar .navigation-menu { - z-index: 1 -} - -.sidebar { - position: relative; - display: block; - height: 100%; - min-height: 100vh; - width: 17rem; - min-width: 17rem; - max-width: 17rem; - background: #fff -} - -.sidebar .sidebar-header { - border-bottom: 1px solid #2c3744 -} - -.sidebar .navigation-menu { - padding-left: 0; - padding-bottom: 80px; - margin-bottom: 0; - margin-top: 18px -} - -.sidebar .navigation-menu li { - display: block; - margin: 0; - -webkit-transition-duration: .25s; - transition-duration: .25s; - -webkit-transition-timing-function: cubic-bezier(.26, .66, .45, .78); - transition-timing-function: cubic-bezier(.26, .66, .45, .78); - -webkit-transition-property: background; - transition-property: background -} - -.sidebar .navigation-menu li.nav-category-divider { - position: -webkit-sticky; - position: sticky; - top: 64px; - display: block; - background: #fff; - margin: 15px 0 0 0; - padding: 20px 30px 10px 30px; - font-size: 10px; - color: #047006; - z-index: 1; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.sidebar .navigation-menu li.nav-category-divider:first-child { - margin-top: 0 -} - -.sidebar .navigation-menu li a { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - flex-direction: row-reverse; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 12px 30px 12px 30px; - font-size: 13px; - line-height: 1; - color: #525c5d; - letter-spacing: .03rem; - font-weight: 500; - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden -} - -.sidebar .navigation-menu li a .link-icon { - margin-right: 15px; - line-height: 1; - color: #525c5d; - font-size: 1.1875rem -} - -.sidebar .navigation-menu li:last-child a { - border-bottom: none -} - -.sidebar .navigation-menu li .navigation-submenu { - background: #fafafa; - padding: 0 0 10px 30px -} - -.sidebar .navigation-menu li .navigation-submenu.collapsing { - -webkit-transition: .2s ease-in; - transition: .2s ease-in -} - -.sidebar .navigation-menu li .navigation-submenu li { - display: inherit -} - -.sidebar .navigation-menu li .navigation-submenu li a { - display: block; - padding: calc(9px) 30px calc(9px) calc(30px + 2px); - opacity: .8; - letter-spacing: .03rem; - font-weight: 400; - font-size: calc(13px - 1px); - -webkit-transition: .3s ease-in-out; - transition: .3s ease-in-out; - -webkit-transition-property: color; - transition-property: color -} - -.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse] { - position: relative -} - -.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse]:after { - content: '.5'; - height: 7px; - width: 7px; - border-radius: 25px; - position: absolute; - right: calc(30px + 4px); - top: 14px -} - -.sidebar .navigation-menu li .navigation-submenu li a.active { - color: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li a:hover { - color: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:first-child a { - padding-top: 10px -} - -.sidebar .navigation-menu li .navigation-submenu li:first-child a:after { - top: 15px -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+1) a:after { - background: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+2) a:after { - background: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+3) a:after { - background: #ff5f66 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+4) a:after { - background: #f0825f -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+5) a:after { - background: #6c61f6 -} - -.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu { - padding-left: 0 -} - -.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu li a { - opacity: .5 -} - -.sidebar .navigation-menu li.active a .link-title { - color: #047006 -} - -.sidebar .navigation-menu li.active a .link-icon { - color: #047006 -} - -.sidebar .navigation-menu>li:not(.nav-category-divider):hover { - background: #fafafa -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse] { - position: relative -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse]:after { - content: '3'; - font-family: "Material Design Icons"; - font-size: 15px; - text-rendering: auto; - line-height: inherit; - font-weight: bolder; - position: absolute; - top: 13px; - right: 30px; - display: block; - -webkit-transition: .3s; - transition: .3s; - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - transition-property: transform; - transition-property: transform, -webkit-transform; - color: #839092 -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true] { - background: #fafafa -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true]:after { - -webkit-transform: rotate(90deg); - transform: rotate(90deg) -} - -.sidebar .sidebar_footer { - display: block; - position: fixed; - bottom: 0; - left: 0; - margin-top: auto; - width: inherit; - z-index: 2; - background: #fff -} - -.sidebar .sidebar_footer .admin-access-level { - position: absolute; - bottom: 0; - display: -webkit-box; - display: flex; - -webkit-box-pack: start; - justify-content: flex-start; - -webkit-box-align: center; - align-items: center; - z-index: 9999; - height: auto; - width: 100%; - background: #fff; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - padding: 10px 20px; - box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12) -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper { - padding: 0 0 0 10px -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_name { - color: #525c5d; - margin-bottom: 8px; - line-height: 1; - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - max-width: 95px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_access_level { - color: #74767b; - line-height: 1 -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .status-indicator { - margin-right: 5px -} - -.sidebar .sidebar_footer .admin-access-level .arrow { - color: #525c5d; - margin-left: auto; - font-size: 20px; - line-height: 1; - -webkit-transition: .3s; - transition: .3s -} - -.sidebar .sidebar_footer .user-account { - display: block; - width: 100%; - border-radius: 0; - border: none; - margin-bottom: -100vh; - opacity: 0; - -webkit-transition: .3s; - transition: .3s; - border-right: 1px solid #f2f4f9; - box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12) -} - -.sidebar .sidebar_footer .user-account:before { - display: none -} - -.sidebar .sidebar_footer .user-account .user-profile-item-tittle { - background: 0 0; - padding: 20px 18px 10px 18px; - z-index: 1; - color: #adb5bd; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.sidebar .sidebar_footer .user-account .user-profile-itemcategory { - background: 0 0; - margin-bottom: 10px; - border-bottom: 1px solid #f2f4f9; - padding-bottom: 10px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .user-account .user-profile-item { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - background: inherit; - padding: 10px 18px; - -webkit-transition: .3s; - transition: .3s; - z-index: 1; - background: 0 0; - color: #525c5d; - font-size: 13px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .user-account .user-profile-item:hover { - background: #f5f5f5 -} - -.sidebar .sidebar_footer .user-account .user-profile-item i { - margin-right: 10px; - font-size: 18px; - line-height: 1; - color: inherit -} - -.sidebar .sidebar_footer .user-account .user-profile-item img { - margin-right: 10px -} - -.sidebar .sidebar_footer .user-account .btn-logout { - width: 91%; - max-width: 91%; - margin: 15px 10px 30px 10px; - border-radius: 4px -} - -.sidebar .sidebar_footer.opened { - background: #fff -} - -.sidebar .sidebar_footer.opened .admin-access-level { - background: #fff -} - -.sidebar .sidebar_footer.opened .admin-access-level .arrow { - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg) -} - -.sidebar .sidebar_footer.opened .user-account { - margin-bottom: 60px; - opacity: 1; - background: #fff -} - -footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 2rem 2.5rem; - max-width: 1140px; - margin-left: auto; - margin-right: auto -} - -@media (max-width:991.98px) { - footer { - padding: 20px 0 30px 0 - } - -} - -footer ul { - margin-left: 0; - padding-left: 0 -} - -footer ul li { - display: inline-block; - padding: 0 10px 0 0; - line-height: 1 -} - -footer ul li:not(:last-child) { - margin-right: 10px; - border-right: 1px solid #f2f4f9 -} - -footer ul li a { - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem; - color: #565656 -} - -pre.cake-error { - z-index: 220; - position: absolute; - background-color: #fff -} - -.alert-notification-wrapper { - position: fixed; - left: 17rem; - right: 0; - z-index: 999 -} - -@media (max-width:991.98px) { - .alert-notification-wrapper { - left: 0 - } - -} - -.alert-notification-wrapper.top { - top: 70px -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter { - border: 2px solid #55acee; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i { - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook { - border: 2px solid #0084ff; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i { - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google { - border: 2px solid #dd4b39; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google i { - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin { - border: 2px solid #0077b5; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i { - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest { - border: 2px solid #bd081c; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i { - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube { - border: 2px solid #cd201f; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i { - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github { - border: 2px solid #333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github i { - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance { - border: 2px solid #0454f6; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i { - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble { - border: 2px solid #ea4c89; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i { - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit { - border: 2px solid #ed4333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i { - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram { - border: 2px solid #ff759b; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i { - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-inverse-primary { - background: rgba(4, 112, 6, .15); - color: #047006 -} - -.btn-inverse-primary i { - color: inherit -} - -.btn-inverse-primary:hover { - background: rgba(4, 112, 6, .8); - color: #fff -} - -.btn-inverse-secondary { - background: rgba(128, 128, 128, .15); - color: grey -} - -.btn-inverse-secondary i { - color: inherit -} - -.btn-inverse-secondary:hover { - background: rgba(128, 128, 128, .8); - color: #fff -} - -.btn-inverse-success { - background: rgba(0, 224, 147, .15); - color: #047006 -} - -.btn-inverse-success i { - color: inherit -} - -.btn-inverse-success:hover { - background: rgba(0, 224, 147, .8); - color: #fff -} - -.btn-inverse-info { - background: rgba(108, 97, 246, .15); - color: #6c61f6 -} - -.btn-inverse-info i { - color: inherit -} - -.btn-inverse-info:hover { - background: rgba(108, 97, 246, .8); - color: #fff -} - -.btn-inverse-warning { - background: rgba(240, 130, 95, .15); - color: #f0825f -} - -.btn-inverse-warning i { - color: inherit -} - -.btn-inverse-warning:hover { - background: rgba(240, 130, 95, .8); - color: #fff -} - -.btn-inverse-danger { - background: rgba(255, 95, 102, .15); - color: #ff5f66 -} - -.btn-inverse-danger i { - color: inherit -} - -.btn-inverse-danger:hover { - background: rgba(255, 95, 102, .8); - color: #fff -} - -.btn-inverse-light { - background: rgba(223, 223, 223, .15); - color: #dfdfdf -} - -.btn-inverse-light i { - color: inherit -} - -.btn-inverse-light:hover { - background: rgba(223, 223, 223, .8); - color: #fff -} - -.btn-inverse-dark { - background: rgba(116, 118, 123, .15); - color: #74767b -} - -.btn-inverse-dark i { - color: inherit -} - -.btn-inverse-dark:hover { - background: rgba(116, 118, 123, .8); - color: #fff -} - -.btn-inverse-white { - background: rgba(255, 255, 255, .15); - color: #fff -} - -.btn-inverse-white i { - color: inherit -} - -.btn-inverse-white:hover { - background: rgba(255, 255, 255, .8); - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter { - background: #55acee; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter:hover { - background: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-facebook { - background: #0084ff; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-facebook:hover { - background: #006acc -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-btn-outlined).btn-google { - background: #dd4b39; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-google:hover { - background: #c23321 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-btn-outlined).btn-linkedin { - background: #0077b5; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-linkedin:hover { - background: #005582 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-btn-outlined).btn-pinterest { - background: #bd081c; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-pinterest:hover { - background: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-youtube { - background: #cd201f; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-youtube:hover { - background: #a11918 -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-btn-outlined).btn-github { - background: #333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-github:hover { - background: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-btn-outlined).btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-behance { - background: #0454f6; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-behance:hover { - background: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-dribbble { - background: #ea4c89; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-dribbble:hover { - background: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-reddit { - background: #ed4333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-reddit:hover { - background: #da2413 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-btn-outlined).btn-instagram { - background: #ff759b; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-instagram:hover { - background: #ff4276 -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active { - background: #000e01 -} - -.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active { - background: #4d4d4d -} - -.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active { - background: #007a50 -} - -.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active { - background: #1d0de4 -} - -.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active { - background: #d54314 -} - -.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active { - background: #f8000b -} - -.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active { - background: #acacac -} - -.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active { - background: #424447 -} - -.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active { - background: #ccc -} - -.btn-outline-primary { - border: 2px solid #047006 -} - -.btn-outline-secondary { - border: 2px solid grey -} - -.btn-outline-success { - border: 2px solid #047006 -} - -.btn-outline-info { - border: 2px solid #6c61f6 -} - -.btn-outline-warning { - border: 2px solid #f0825f -} - -.btn-outline-danger { - border: 2px solid #ff5f66 -} - -.btn-outline-light { - border: 2px solid #dfdfdf -} - -.btn-outline-dark { - border: 2px solid #74767b -} - -.btn-outline-white { - border: 2px solid #fff -} - -.btn-group label.btn input { - display: none -} - -.btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - -webkit-transition: .3s ease; - transition: .3s ease; - -webkit-transition-property: background, color; - transition-property: background, color; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 600; - letter-spacing: .03rem -} - -.btn:not([class*=btn-inverse]):not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.btn i { - font-size: 1.25rem -} - -.btn-group-lg>.btn, -.btn.btn-lg { - height: 55px; - max-height: 55px; - padding: 15px 30px; - font-size: 1.125rem -} - -.btn-group-sm>.btn, -.btn.btn-sm { - height: 35px; - max-height: 35px; - padding: 4px 15px; - font-size: .875rem -} - -.btn.btn-xs { - height: 25px; - max-height: 25px; - padding: 0 10px; - line-height: 1; - font-size: .75rem -} - -.btn.btn-xs.has-icon i, -.btn.btn-xs.has-icon span { - font-size: .8125rem; - margin-right: 5px -} - -.btn { - height: 40px; - max-height: 40px; - padding: 5px 20px -} - -.btn.active { - box-shadow: none -} - -.btn.social-icon-btn { - height: 40px; - width: 40px -} - -.btn.social-btn i { - margin-right: 10px -} - -.btn.social-btn-outlined i { - margin-right: 10px -} - -.btn.has-icon i, -.btn.has-icon span { - font-size: 1.25rem; - margin-right: 10px; - line-height: 1 -} - -.btn.btn-outline-secondary { - color: #1a1a1a; - border-color: #676767 -} - -.btn.btn-info, -.btn.btn-warning { - color: #fff -} - -.btn.btn-light { - background: #fff; - color: #000 -} - -.btn.dropdown-dotted-list { - background: #fff -} - -.btn.dropdown-toggle-split { - padding: 0 8px -} - -.btn.action-btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - padding: 0; - height: 40px; - width: 40px -} - -.btn.action-btn i { - font-size: 1.25rem; - width: 26px; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - line-height: 23px; - vertical-align: middle; - font-size: 1.25rem -} - -.btn.action-btn i:before { - width: inherit; - height: inherit; - line-height: inherit; - font-size: inherit -} - -.btn.action-btn.btn-xs { - height: 30px; - width: 30px -} - -.btn-group-sm>.btn.action-btn, -.btn.action-btn.btn-sm { - height: 35px; - width: 35px -} - -.btn-group-lg>.btn.action-btn, -.btn.action-btn.btn-lg { - height: 50px; - width: 50px -} - -.btn-group-lg>.btn.action-btn i, -.btn.action-btn.btn-lg i { - font-size: 1.875rem; - line-height: 24px -} - -.btn.action-btn.btn-refresh.clicked i { - color: #047006; - -webkit-animation: rotate360 .8s linear infinite; - animation: rotate360 .8s linear infinite -} - -.btn.action-btn.btn-like.clicked i { - color: #ff5f66; - -webkit-animation: bounceIn .8s linear 1; - animation: bounceIn .8s linear 1 -} - -.btn.action-btn.btn-like.clicked:hover i { - color: #fff -} - -.btn.btn-rounded { - border-radius: 50px -} - -.flag-germany { - width: 40px; - height: 28px; - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - display: block -} - -.flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - display: block -} - -.language-active { - background-color: #f9fafb; - padding: 2px -} - -.language-inactive { - padding: 2px; - background-color: transparent -} - -.is-invalid .form-control { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.is-invalid .invalid-feedback { - display: block -} - -.is-valid .form-control { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.form-control { - padding-left: 20px; - padding-right: 20px; - color: rgba(16, 16, 16, .8) -} - -.form-control.placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-ms-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-webkit-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control.is-invalid { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.form-control.is-valid { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.input-group-text { - background-color: #f6f7f9; - color: #101010; - border-color: #f2f4f9; - padding: 0 10px; - font-size: 17px -} - -.is-valid .input-group-text { - background-color: rgba(4, 112, 6, .2); - color: #047006 -} - -.is-invalid .input-group-text { - background-color: rgba(240, 130, 95, .2); - color: #f0825f -} - -.form-group { - margin-bottom: 20px -} - -.form-group.input-rounded .form-control { - border-radius: 25px -} - -.custom-file .custom-file-label { - padding: 8px .75rem; - height: 41px -} - -.custom-file .custom-file-label:after { - padding: 1.45rem .8rem; - line-height: 0 -} - -.custom-select, -.custom-select[multiple] { - background: #f6f7f9; - border-color: #f0f2f5; - color: rgba(16, 16, 16, .8) -} - -.custom-select option, -.custom-select[multiple] option { - background: #f6f7f9; - color: rgba(16, 16, 16, .8); - display: block; - border-bottom: 1px solid #f2f4f9; - padding: 5px 10px -} - -.custom-select option:checked, -.custom-select[multiple] option:checked { - background: #f6f7f9 -} - -.custom-select option[selected], -.custom-select[multiple] option[selected] { - background: #f6f7f9; - display: block -} - -.custom-select[multiple] { - padding: 0; - border-radius: 2px -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: none -} - -.custom-switch .custom-control-label::after { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - background: #047006 -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link { - color: #047006 -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link.active { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-primary .tab-content { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link { - color: grey -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link.active { - background: grey; - color: #fff -} - -.tab-container.tab-bg-secondary .tab-content { - background: grey; - color: #fff -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link { - color: #047006 -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link.active { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-success .tab-content { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link { - color: #6c61f6 -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link.active { - background: #6c61f6; - color: #fff -} - -.tab-container.tab-bg-info .tab-content { - background: #6c61f6; - color: #fff -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link { - color: #f0825f -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link.active { - background: #f0825f; - color: #fff -} - -.tab-container.tab-bg-warning .tab-content { - background: #f0825f; - color: #fff -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link { - color: #ff5f66 -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link.active { - background: #ff5f66; - color: #fff -} - -.tab-container.tab-bg-danger .tab-content { - background: #ff5f66; - color: #fff -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link { - color: #dfdfdf -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link.active { - background: #dfdfdf; - color: #fff -} - -.tab-container.tab-bg-light .tab-content { - background: #dfdfdf; - color: #fff -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link { - color: #74767b -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link.active { - background: #74767b; - color: #fff -} - -.tab-container.tab-bg-dark .tab-content { - background: #74767b; - color: #fff -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link { - color: #fff -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link.active { - background: #fff; - color: #fff -} - -.tab-container.tab-bg-white .tab-content { - background: #fff; - color: #fff -} - -.nav-tabs { - border-bottom: 1px solid #f2f4f9 -} - -.tab-container .nav-pills, -.tab-container .nav-tabs { - border-bottom: none -} - -.tab-container .nav-pills .nav-item .nav-link, -.tab-container .nav-tabs .nav-item .nav-link { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: start; - justify-content: start; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: 1; - padding: 7px 13px; - border: none; - -webkit-transition-duration: .3s; - transition-duration: .3s; - -webkit-transition-property: background, color; - transition-property: background, color -} - -.tab-container .nav-pills .nav-item .nav-link i, -.tab-container .nav-tabs .nav-item .nav-link i { - font-size: 20px; - line-height: 1 -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle { - display: inline-block -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle.prepend, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.prepend { - margin-left: 10px -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle.append, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.append { - margin-right: 10px -} - -.tab-container .tab-content { - padding: 30px 20px 20px 20px; - width: 100%; - background: #f0f2f5 -} - -.tab-container .nav-tabs .nav-link { - color: #101010 -} - -.tab-container .nav-tabs .nav-link i { - color: #101010 -} - -.tab-container .nav-tabs .nav-link.active { - background: #f7f7f7; - color: #047006 -} - -.tab-container .nav-tabs .nav-link.active i { - color: inherit -} - -.tab-container .nav-pills { - margin: 10px -} - -.tab-container .nav-pills .nav-link.active { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - color: #fff -} - -.tab-container.vertical-tabs { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - -webkit-box-flex: 1; - flex-grow: 1 -} - -.tab-container.vertical-tabs .nav-pills, -.tab-container.vertical-tabs .nav-tabs { - float: left; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.table, -table { - margin-bottom: 0 -} - -.table tfoot tr th, -.table thead tr th, -table tfoot tr th, -table thead tr th { - border-bottom-width: 1px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.table tbody tr, -table tbody tr { - -webkit-transition-duration: .5s; - transition-duration: .5s -} - -.table tbody tr td, -table tbody tr td { - font-family: Roboto, sans-serif; - font-weight: 400; - vertical-align: middle -} - -.table tbody tr td .input-frame:after, -table tbody tr td .input-frame:after { - top: 5px -} - -.table tbody tr td span, -table tbody tr td span { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.table tbody tr td span .status-indicator, -table tbody tr td span .status-indicator { - margin-right: 5px -} - -.table tbody tr td .image, -table tbody tr td .image { - max-width: 75px; - width: 100% -} - -.table tbody tr.text-align-edge td:first-child, -table tbody tr.text-align-edge td:first-child { - padding-left: 0; - text-align: left -} - -.table tbody tr.text-align-edge td:last-child, -table tbody tr.text-align-edge td:last-child { - padding-right: 0; - text-align: right -} - -.table td, -.table th, -table td, -table th { - white-space: nowrap -} - -.table:not(.table-dark) thead tr.solid-header th, -table:not(.table-dark) thead tr.solid-header th { - background: #fafafa; - border-top: 1px solid #f2f4f9 -} - -.table:not(.table-dark) tfoot, -.table:not(.table-dark) thead, -table:not(.table-dark) tfoot, -table:not(.table-dark) thead { - background: #e1e4e6 -} - -.table:not(.table-dark) tfoot tr th, -.table:not(.table-dark) thead tr th, -table:not(.table-dark) tfoot tr th, -table:not(.table-dark) thead tr th { - background: #fff; - color: #101010 -} - -.table:not(.table-dark) tbody tr[class*=bg], -table:not(.table-dark) tbody tr[class*=bg] { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.table:not(.table-dark) tbody tr[class*=bg] td, -table:not(.table-dark) tbody tr[class*=bg] td { - color: #fff; - border: none -} - -.table:not(.table-dark) tbody tr td, -table:not(.table-dark) tbody tr td { - color: #101010 -} - -.table:not(.table-bordered) tfoot tr th, -.table:not(.table-bordered) thead tr th, -table:not(.table-bordered) tfoot tr th, -table:not(.table-bordered) thead tr th { - border-top: none -} - -.table.info-table tr td, -.table.info-table tr th, -table.info-table tr td, -table.info-table tr th { - text-align: right -} - -.table.info-table tr td:first-child, -.table.info-table tr th:first-child, -table.info-table tr td:first-child, -table.info-table tr th:first-child { - text-align: left -} - -.table.info-table tr td.actions, -.table.info-table tr th.actions, -table.info-table tr td.actions, -table.info-table tr th.actions { - padding-left: 0 -} - -.tippy-tooltip[data-animation=fade][data-state=hidden] { - opacity: 0 -} - -.tippy-iOS { - cursor: pointer !important; - -webkit-tap-highlight-color: transparent -} - -.tippy-popper { - pointer-events: none; - max-width: calc(100vw - 10px); - -webkit-transition-timing-function: cubic-bezier(.165, .84, .44, 1); - transition-timing-function: cubic-bezier(.165, .84, .44, 1); - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - transition-property: transform; - transition-property: transform, -webkit-transform -} - -.tippy-tooltip { - position: relative; - color: #fff; - border-radius: 4px; - font-size: 14px; - line-height: 1.4; - background-color: #333; - -webkit-transition-property: visibility, opacity, -webkit-transform; - transition-property: visibility, opacity, -webkit-transform; - transition-property: visibility, opacity, transform; - transition-property: visibility, opacity, transform, -webkit-transform; - outline: 0 -} - -.tippy-tooltip[data-placement^=top]>.tippy-arrow { - border-width: 8px 8px 0; - border-top-color: #333; - margin: 0 3px; - -webkit-transform-origin: 50% 0; - transform-origin: 50% 0; - bottom: -7px -} - -.tippy-tooltip[data-placement^=bottom]>.tippy-arrow { - border-width: 0 8px 8px; - border-bottom-color: #333; - margin: 0 3px; - -webkit-transform-origin: 50% 7px; - transform-origin: 50% 7px; - top: -7px -} - -.tippy-tooltip[data-placement^=left]>.tippy-arrow { - border-width: 8px 0 8px 8px; - border-left-color: #333; - margin: 3px 0; - -webkit-transform-origin: 0 50%; - transform-origin: 0 50%; - right: -7px -} - -.tippy-tooltip[data-placement^=right]>.tippy-arrow { - border-width: 8px 8px 8px 0; - border-right-color: #333; - margin: 3px 0; - -webkit-transform-origin: 7px 50%; - transform-origin: 7px 50%; - left: -7px -} - -.tippy-tooltip[data-interactive][data-state=visible] { - pointer-events: auto -} - -.tippy-tooltip[data-inertia][data-state=visible] { - -webkit-transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11); - transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11) -} - -.tippy-arrow { - position: absolute; - border-color: transparent; - border-style: solid -} - -.tippy-content { - padding: 5px 9px -} - -.tippy-tooltip { - color: #101010; - background-color: #f9fafb; - border-radius: 0; - font-size: 12px -} - -.tippy-tooltip .tippy-content b { - color: #047006 -} - -.tippy-tooltip .tippy-content ul { - list-style-type: none; - padding-left: 4px -} - -.tippy-tooltip .tippy-content .mdi { - font-size: 16px -} - -.tippy-tooltip .tippy-content .grid-header { - padding: 5px 10px; - margin-bottom: 5px -} - -.page-body { - background: #fff -} - -.page-content-wrapper { - background: #f9fafb; - border-left: 1px solid #f2f4f9 -} - -@media (min-width:992px) { - .t-header .t-header-content-wrapper { - border-left: 1px solid #f2f4f9 - } - -} - -@media (min-width:768px) { - .page-body { - position: relative; - display: grid; - max-width: 100%; - grid-template-columns: 17rem calc(100vw - 17rem); - -webkit-transition: .3s; - transition: .3s - } - - .page-body .page-content-wrapper { - position: relative; - width: 100%; - min-height: 100vh; - padding: 1.5rem 2.5rem calc(90px + 1.5rem); - margin-top: 70px - } - - .page-body .page-content-wrapper .page-content-wrapper-inner { - max-width: 1140px; - margin-left: auto; - margin-right: auto - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header { - position: -webkit-sticky; - position: sticky; - top: 70px; - background: #f9fafb; - z-index: 99 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb { - padding: 1rem 1rem 1rem 21px; - margin-left: -20px; - margin-right: -20px; - background: #f9fafb - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item { - color: #565656; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 500 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a { - color: inherit - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active { - color: #047006 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading { - color: #565656; - font-size: 1.5rem; - font-family: Roboto, sans-serif; - font-weight: 500; - margin-bottom: 0 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description { - opacity: .7; - margin-top: 15px - } - - body.sidebar-minimized .t-header .t-header-brand-wrapper { - background: #f9fafb - } - - body.sidebar-minimized .t-header .t-header-content-wrapper { - border-left: #f9fafb - } - - body.sidebar-minimized .page-body { - grid-template-columns: 0 100% - } - - body.sidebar-minimized .page-body .sidebar .sidebar_footer { - left: -17rem - } - - body.sidebar-minimized .page-body .sidebar .nav-category-divider { - position: initial - } - -} - -@media (max-width:991.98px) { - .t-header { - width: 100vw - } - - .t-header .t-header-brand-wrapper { - background: #f9fafb; - width: 4rem; - min-width: 4rem; - max-width: 4rem - } - - .t-header .t-header-brand-wrapper a .logo { - -webkit-animation-name: menuItemFadeIn; - animation-name: menuItemFadeIn; - -webkit-animation-duration: .25s; - animation-duration: .25s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: none - } - - @-webkit-keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - @keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - .t-header .t-header-brand-wrapper a .logo-mini { - display: block - } - - .page-body { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - overflow: hidden; - max-width: 100% - } - - .page-body .sidebar { - position: relative; - left: 0; - z-index: 99; - width: 15rem; - min-width: 15rem; - max-width: 15rem; - margin-left: -15rem; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left, width; - transition-property: margin-left, width - } - - .page-body .sidebar .sidebar_footer { - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: left; - transition-property: left; - left: -15rem - } - - .page-body .page-content-wrapper { - padding: 20px 20px; - min-width: 100vw; - margin-left: 0; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left; - transition-property: margin-left - } - - .page-body .page-content-wrapper .viewport-header .breadcrumb { - background: 0 0; - padding-left: 0 - } - - .page-body .page-content-wrapper footer { - position: relative - } - - .page-body.sidebar-collpased .sidebar { - margin-left: 0; - min-width: 15rem - } - - .page-body.sidebar-collpased .sidebar .sidebar_footer { - left: 0 - } - -} - -@media (max-width:767.98px) { - .page-body .page-content-wrapper { - padding: 80px 20px 0 20px - } - -} - -.profile-img.bg-inverse-primary { - color: #047006 -} - -.profile-img.bg-inverse-secondary { - color: grey -} - -.profile-img.bg-inverse-success { - color: #047006 -} - -.profile-img.bg-inverse-info { - color: #6c61f6 -} - -.profile-img.bg-inverse-warning { - color: #f0825f -} - -.profile-img.bg-inverse-danger { - color: #ff5f66 -} - -.profile-img.bg-inverse-light { - color: #dfdfdf -} - -.profile-img.bg-inverse-dark { - color: #74767b -} - -.profile-img.bg-inverse-white { - color: #fff -} - -.notification-indicator-primary { - background: #047006 -} - -.notification-indicator-primary:before { - content: '3'; - background: rgba(4, 112, 6, .5) -} - -.notification-indicator-secondary { - background: grey -} - -.notification-indicator-secondary:before { - content: '.5'; - background: rgba(128, 128, 128, .5) -} - -.notification-indicator-success { - background: #047006 -} - -.notification-indicator-success:before { - content: 'http://www.w3.org/2000/svg'; - background: rgba(0, 224, 147, .5) -} - -.notification-indicator-info { - background: #6c61f6 -} - -.notification-indicator-info:before { - content: '0 0 4 5'; - background: rgba(108, 97, 246, .5) -} - -.notification-indicator-warning { - background: #f0825f -} - -.notification-indicator-warning:before { - content: '%23343a40'; - background: rgba(240, 130, 95, .5) -} - -.notification-indicator-danger { - background: #ff5f66 -} - -.notification-indicator-danger:before { - content: 'M2 0L0 2h4zm0 5L0 3h4z'; - background: rgba(255, 95, 102, .5) -} - -.notification-indicator-light { - background: #dfdfdf -} - -.notification-indicator-light:before { - content: 'http://www.w3.org/2000/svg'; - background: rgba(223, 223, 223, .5) -} - -.notification-indicator-dark { - background: #74767b -} - -.notification-indicator-dark:before { - content: '%23dc3545'; - background: rgba(116, 118, 123, .5) -} - -.notification-indicator-white { - background: #fff -} - -.notification-indicator-white:before { - content: '-2 -2 7 7'; - background: rgba(255, 255, 255, .5) -} - -.border-top { - border-top-style: solid; - border-top-color: #f2f4f9; - border-top-width: 1px -} - -.border-right { - border-right-style: solid; - border-right-color: #f2f4f9; - border-right-width: 1px -} - -.border-bottom { - border-bottom-style: solid; - border-bottom-color: #f2f4f9; - border-bottom-width: 1px -} - -.border-left { - border-left-style: solid; - border-left-color: #f2f4f9; - border-left-width: 1px -} - -.ellipsor { - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden -} - -.text-gray { - color: #565656 -} - -.overflow-hidden { - overflow: hidden -} - -.pos-relative { - position: relative -} - -.profile-img { - width: 40px; - height: 40px; - overflow: hidden -} - -.profile-img:not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.profile-img:not(.img-sm):not(.img-lg):not(.img-xl) img { - width: 40px; - height: 40px -} - -.profile-img:not(.img-rounded) { - border-radius: 6px -} - -.profile-img.no-avatar { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - text-align: center; - text-transform: uppercase; - font-family: Roboto, sans-serif; - font-weight: 600 -} - -.profile-img.img-rounded { - border-radius: 100% -} - -.grouped-images { - display: -webkit-box; - display: flex -} - -.grouped-images .plus-text, -.grouped-images img { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - text-align: center; - border-radius: 100%; - overflow: hidden; - margin-right: -10px; - margin-right: -10px; - border: 3px solid #fff; - background: #f0f2f5; - color: #565656; - font-family: Roboto, sans-serif; - font-weight: 700; - letter-spacing: .03rem -} - -.grouped-images .plus-text:not(.img-sm):not(.img-lg):not(.img-xl), -.grouped-images img:not(.img-sm):not(.img-lg):not(.img-xl) { - width: 40px; - height: 40px -} - -.img-sm { - width: 30px; - height: 30px -} - -.img-lg { - width: 80px; - height: 80px -} - -.img-xl { - width: 100px; - height: 100px -} - -.mdi.mdi-1x:before { - font-size: 1.25rem -} - -.mdi.mdi-2x:before { - font-size: 1.5625rem -} - -.mdi.mdi-3x:before { - font-size: 1.875rem -} - -.mdi.mdi-4x:before { - font-size: 2.1875rem -} - -.mdi.mdi-5x:before { - font-size: 2.5rem -} - -.mdi.mdi-6x:before { - font-size: 3.125rem -} - -.mdi.mdi-7x:before { - font-size: 3.75rem -} - -.status-indicator { - display: inline-block; - width: 12px; - min-width: 12px; - height: 12px; - border-radius: 4px -} - -.status-indicator.rounded-indicator { - border-radius: 50px -} - -.status-indicator.small { - width: 7px; - min-width: 7px; - height: 7px -} - -.text-black { - color: #101010 -} - -.notification-indicator { - display: block; - width: 7px; - height: 7px; - border-radius: 100%; - z-index: 0 -} - -.notification-indicator.notification-indicator-ripple:before { - content: '%23dc3545'; - display: block; - width: 26px; - height: 26px; - z-index: -1; - position: absolute; - top: -9px; - left: -9px; - border-radius: 100%; - opacity: 0; - -webkit-transform-origin: 50% 50%; - transform-origin: 50% 50%; - mix-blend-mode: screen; - -webkit-animation: ripple 1.2s ease-out; - animation: ripple 1.2s ease-out; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -.logo { - display: block; - margin: 0 auto; - width: 280px -} - -.logo img { - width: 100% -} - -.grid { - background: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75) -} - -.grid-header { - padding: 15px 20px; - margin-bottom: 15px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem; - background: #f9fafb; - border-left: 3px solid #047006; - border-radius: 0 6px 0 0 -} - -.grid-title { - opacity: .9; - margin-bottom: 25px -} - -.close { - color: #101010 -} - -.split-header { - display: -webkit-box; - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper { - display: -webkit-box; - display: flex -} - -.split-header .content-wrapper a i, -.split-header .content-wrapper span i { - font-size: 20px; - color: #adb5bd; - -webkit-transition: .3s ease color; - transition: .3s ease color -} - -.split-header .content-wrapper a i:hover, -.split-header .content-wrapper span i:hover { - color: #047006 -} - -.split-header .content-wrapper.v-centered { - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper.h-centered { - -webkit-box-pack: center; - justify-content: center -} - -.grid-body { - padding: 20px 25px 20px -} - -.card-title { - font-family: Roboto, sans-serif; - font-weight: 500; - color: #313131; - margin-bottom: 0 -} - -.equel-grid { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch -} - -.equel-grid .grid { - width: 100%; - min-width: 100% -} - -.showcase_row_area { - margin-bottom: 20px -} - -.showcase_row_area .showcase_text_area { - text-align: right -} - -@media (max-width:767.98px) { - .showcase_row_area .showcase_text_area { - text-align: left - } - -} - -.showcase_row_area .showcase_content_area { - margin-bottom: -10px -} - -.showcase_row_area .showcase_content_area .btn { - margin-right: 5px; - margin-bottom: 10px -} - -.showcase_row_area:last-child { - margin-bottom: 0 -} - -.content-preview { - width: 45px; - height: 45px -} - -.content-preview.rounded { - border-radius: 100% -} - -.btn:not(.disabled),.cursor_pointer,a { - cursor: pointer -} - -.grd-positive-currency { - color: #047006 -} - -.grd-negative-currency { - color: red -} - -.color-success { - color: var(--success) -} - -.color-danger { - color: var(--danger) -} - -.color-warning { - color: var(--warning) -} - -.color-primary { - color: var(--primary) -} - -.btn-gradido-orange { - color: #fff; - background-color: #ffa600; - border-color: #ffa600 -} - -.visible-modal { - display: block -} - -.margin-top-10 { - margin-top: 10px -} - -.pull-right { - float: right -} - -.pull-right-row { - display: block; - margin-right: 10px -} - -.display-block { - display: block -} - -p.grd_small { - margin-top: 2px; - margin-bottom: 2px -} - -ul.grd-no-style { - list-style-type: none -} - -.center-ul-container ul { - padding-left: 0; - margin-bottom: 0; - text-align: center -} - -.center-ul-container ul .grd-error { - margin-top: 5px; - color: #8b0000 -} - -.grd-alert-color { - color: #ff5f66 !important -} - -.grd-success-color { - color: #047006 !important -} - -.grd-orange-color { - color: #ffa600 -} - -.hidden { - display: none -} - -.alert { - cursor: pointer -} - -.table.table-auto-break td, -.table.table-auto-break th { - white-space: pre-line -} diff --git a/community_server/webroot/css/styles.css b/community_server/webroot/css/styles.css deleted file mode 100644 index 143cbdc08..000000000 --- a/community_server/webroot/css/styles.css +++ /dev/null @@ -1,347 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 09:26:42 - Author : einhornimmond -*/ -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; -} -.grd-time-used { - bottom: 0; -} -.versionstring { - top: 0; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 12.07.2019, 07:59:32 - Author : einhornimmond -*/ -div[role='grd_dialog'] { - position: fixed; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - top: 0; - left: 0; -} -div.grd_modal-dialog { - margin-top: 100px; - min-height: 200px; - max-width: 1000px; - margin-left: auto; - margin-right: auto; - background-color: white; - color: black; - border: 1px solid grey; -} -div.grd_modal-dialog.grd_dialog-large { - margin-top: 5px; - width: 90%; -} -div.grd_modal-body { - padding: 25px; -} -div.grd_modal-header { - background-color: rgba(0, 0, 0, 0.1); - padding: 5px; - padding-left: 15px; - border: 1px solid grey; - color: black; -} -div.grd_modal-footer { - background-color: rgba(0, 0, 0, 0.1); - height: 40px; -} -.grd_modal-footer a, -.grd_modal-footer button { - float: right; - padding: 9px; - margin-right: 10px; - border: 1px solid grey; -} -.grd_modal-footer a:hover, -.grd_modal-footer button:hover { - background-color: rgba(255, 255, 255, 0.5); -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 14:41:57 - Author : einhornimmond -*/ -/* Button */ -/*a.grd_bn,a.grd_bn:visited { - color:black; - text-decoration: none; -} -*/ -.grd-form-bn:hover, -.grd-active { - background-color: lightgray; - border-color: black; -} -.grd-form-bn { - padding: 5px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: #444; -} -a.grd-form-bn, -a.grd-form-bn:visited { - color: black; - text-decoration: none; -} -.grd-form-bn-succeed { - background-color: lightcyan; - color: green; - margin-top: 3px; - margin-bottom: 3px; -} -.grd-form-bn-succeed:not([disabled]):hover { - background-color: lightgreen; -} -.grd-form-bn-discard { - margin-left: 5px; - border: 1px solid red; - color: red; - cursor: pointer; -} -/* -.grd_large-bn { - width:100vw; - height:25vh; - font-size: 8vh; -} - -.grd_bg-bn { - width:50vw; - height:25vh; - font-size: 7vh; -} - -.gr_md-bn { - width:50vw; - height:25vh; - font-size: 6vh; -} -*/ -/* form elements */ -.grd_textarea { - border: 1px solid grey; - background-color: rgba(0, 0, 0, 0.05); - padding: 5px; - font-style: italic; -} -.grd-input label { - display: block; -} -input.grd-privkey { - width: 465px; -} -input.grd-pubkey { - width: 465px; -} -input.grd-non-der-keys { - width: 900px; -} -input:not([type='radio']) { - width: 200px; -} -label:not(.grd_radio_label) { - width: 80px; - display: inline-block; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 13.10.2019, 15:43:58 - Author : einhornimmond -*/ -.grd-time-used { - position: fixed; - bottom: 0; - left: 0; - color: grey; - font-size: smaller; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 16:04:16 - Author : einhornimmond -*/ -/* messages, update flash */ -.grd-error { - color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - padding: 5px; -} -.grd-info { - border: 1px dotted gray; - padding: 5px; -} -.grd-success { - padding: 5px; - color: green; -} -.flash-messages .message { - padding: 5px; -} -.flash-messages .success { - color: green; -} -.flash-messages .error { - color: red; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 14:16:16 - Author : einhornimmond -*/ -/* navbar */ -nav.grd-left-bar { - position: fixed; - top: 80.5px; -} -nav .grd-nav-bn { - width: 120px; -} -nav ul { - margin-top: 0; - padding-left: 0; -} -/* buttons */ -.grd-nav-bn:hover, -.grd-active { - background-color: lightgray; - border-color: black; -} -.grd-nav-bn { - padding: 10px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: grey; -} -.grd-nav-without-border { - border: none; -} -.grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: 35px; -} -a.grd-nav-bn, -a.grd-nav-bn:visited { - color: black; - text-decoration: none; -} -.grd-nav-bn-discard { - color: darkred !important; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 07.07.2019, 16:20:15 - Author : einhornimmond -*/ -/* content container */ -.grd_container { - max-width: 820px; - margin-left: auto; - margin-right: auto; -} -.grd_container_small { - max-width: 500px; -} -.grd_text { - max-width: 550px; - margin-bottom: 5px; -} -.grd_text-max-width { - max-width: 550px; -} -/* layout helper */ -.grd_margin_5 { - margin: 5px; -} -.grd-margin-top-10 { - margin-top: 10px; -} -.grd-width-200 { - width: 200px; -} -.grd-padding-top-bottom-5 { - padding-top: 5px; - padding-bottom: 5px; -} -.grd-padding-top-bottom-10 { - padding-top: 10px; - padding-bottom: 10px; -} -.grd_margin-bottom { - margin-bottom: 5px; -} -.grd_right { - float: right; -} -a.grd_invisible_link { - color: black; - text-decoration: none; -} -a.grd_invisible_link:hover { - color: grey; -} -.grd_clickable { - cursor: pointer; -} -ul.grd-no-style { - list-style: none; -} -p.grd_small { - margin-top: 2px; - margin-bottom: 2px; -} -.grd-default-currency { - color: grey; -} -.grd-positive-currency { - color: green; -} -.grd-negative-currency { - color: red; -} -.admin-border { - border-color: #ffa600; -} diff --git a/community_server/webroot/favicon.ico b/community_server/webroot/favicon.ico deleted file mode 100644 index 5b44f2027a43f47a77304c87106fabac76ed17bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 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 diff --git a/community_server/webroot/favicon.png b/community_server/webroot/favicon.png deleted file mode 100644 index 5c437973ef3767f4738ee7c839d6830a3b60175d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7955 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 JPDHLkV1ncyf#m=I diff --git a/community_server/webroot/font/cakedingbats-webfont.eot b/community_server/webroot/font/cakedingbats-webfont.eot deleted file mode 100644 index e8605d92685dc69e3555a2d46c934332ade64789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75538 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 J{3OkB{|TIQ9Sr~g diff --git a/community_server/webroot/font/cakedingbats-webfont.svg b/community_server/webroot/font/cakedingbats-webfont.svg deleted file mode 100644 index d1e0c98f7..000000000 --- a/community_server/webroot/font/cakedingbats-webfont.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/community_server/webroot/font/cakedingbats-webfont.ttf b/community_server/webroot/font/cakedingbats-webfont.ttf deleted file mode 100644 index 13d54454e71f4ed2ca3ad46bf8910b77acff1b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75412 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

    ~D z#jWgQe|k=f_VXOJUO(l_!~^^r?aamHJ-!3_Lo((bqd|gm3fA8wJbJWjEET=^q(7KU znvs}j-lR);t09+c>Z)FhPGTz6*p<5@Yo?h1X86)jJRUktifb-wLMAgI4iU?XZGw8M zF^AQ1H{%8MB$Llq@&33|iVbHsvWDXO@dMtkdd@}nq<~oNAmX}9IG0_8^zWG*8-kqK zPT{mCMu5&nT~-7I#X>lyFu`_!eL-QkD&+hp!h>h?5x$&n(=CM85$+(of$$52dkH!9 zxE>aNAGS%98G2K1kDF~$?Gg~(p;XHb!+u*qBEloOb2=E>NcJqQ0tz~k1MzVwDxxc6SI@W!qt=nbP6M6wy& zu4S9l-$*38RlKlOMI%)oOIxu_mY5}Fr1SOZO>5e?VIGBmRx7HimGM}SSNU=PXm z0ngJa9C_ud(n4vgehMvwcBWdY!XN%{M*(fJ zLqmN>_r#9+LW9z6`jqcvPY>2t)4M!D(l zb#k1a!HMs3zz2vC`Y;xvuiz*?nL!hg`^9R-W*kq&;(K^M>sI`O2zD;V-4SkA0oM$M z6V^9OQ>;hhTT)n|VqJbfoZH}rLk=YatWM1HV04`Wj$x*nEugGY`9H8OTT+YA@mq$h zyr_h?YrZ9TA3ZW?cu_I2AS0XFeW8wN!!2E>&T2IyHIZc>UD}SFbx2JskL+-NK;YfPJ*$bZrZ(rP?;O;oB=h-XDxW`k_t(d^m-V;x@07967*FWB zKAMPS-DCd&{VS5z-!!0JK~sIGXVd~;e2>$t@X&ATBHJmn#g^s*(M8DeY)%yKvsZ3Rufpn4(qy)7Q0Lz0B>(pumXBi!D*3{kUq@R9gLC z9`Jj>@s(w?V!c?b7mM{`v0g0Ji^Y1eSTC0Hm6ageE*BQ0(VUuPRZgL@DO5Iv%BE1+ z6jmjdJi@i|a9N-0$+Dg->&dd7EbDpRdY-qQ=dI^?>v`UKp0}Rot><~`S)c1!pX*tl z>&xr&7%Q>Y=P_1-toJfnB-WSrxh`X+ZeWMn(52qkCWd_zbh%Buu}!?OO}w#9ys=HZ zu}!?OO}w#9ys=HZu}!=&aX_Zt*e2eXa$_d%X$$XZOZh!*VcfPbZd(|)EsWb1#%&AZ zwuN!q!nkc=+_o@oTNt-3jN2AvVH$Zf*G-~ji0?6Uon+e`X5W~tFrB!qYSL}sY#`tK zez8QsHoTQ$3Az&^tS0OyTt;{aq1dgE^eg$jnebY^?wa@AYB2)^zO3))$nf2rso}ea zTZH-q*J%a&Mj-|(gr#1#8z!nX9_mu}K`$=6#yjIFYMH_SmMUQT+oy(iDaE|mW(cvnrbX<|NAWqLpQY9gb#xh=TIwAX41`K+gI!a$wafo?l~W><(q z7FO*GdF`j66r|*&4exXH+4Q!Y(7(LK2vNyQ*6G-&?}l+H3CQq&~=GUfN=mzfau7sliZV}D?<)X!yA1Vi|Q)MEJPfAC#- zm%hFs76Ke22h^$@M2YdhNqxP>VE%{VRd+ z=+8n4<7tc<#q<_ow`*4fG{YMSrFuK+#y&jqg%RyH{Bd7kg~C>%p{vGSt~*hfkjr&i zZIjoPPx@m|M^5tVa3q(xDsSX3AwQ>N31=}n?xGYg*2pI1?~oS^M>yN zM-CYOI3pOtvCEI3>G6!NwA1w%=_^QILHhaS`c0Auv6|R@02^(DR-!E+hdhhe7k}@UVgIc8QSwb zD2>0Z#2}~Z`UP`Vt}1_{rGKNPhZ&(AYA2W2w~2jQ^?SdjYzpD_b_9O_b{|Ku$y>(y z^q50n>w`YoC0rY=P3zOTq%Q3?h-{N6Io-)M0@KJ&!`5mg*CBGvhRB9}aG|s+D&-Ju zbU~@SNs)lhCG}h<^#X7qNb`QQb>Qoq_z!?9m5xe_ZX(B(JpB`uXWm@FKKZVv@1QKk zXSF^`+zEasxU?NIx&|3t#eW9;GY$?(UDQ8R{FlMMtnmHX*QK@cuC;xP;BLZillpCF zvcD`pPf~RQGNQrw3hn{-Ae-wSKZEoTu_0=umwJLax(I7z6H0UP{V3n9fNX8rk6eb1 zN!oT1EIx-ReE`K#1B(i>0b)Rbqlu&$+-W84C5}P=A!&LJ!uLZe7pB~8kD9u8TzN*~ zG`3AmdFa$;Kny=l#o>#^F`)Ycu%oK%^OUevR#|4+5OJK&nLb`RFPr5#;I-hj;CF(f zGvE@Pfp+i~@D^~%-v!>KmeVu-$M zOR7zWHLptvj=PTFflAuB&-D^Dk5cm}HGiA3yjT-sa?t(WPD_7U}C87m!yf|?YYGL7x;X_BZNonmg#J?IvcID zO!tG!CzsaiQE<^dVMEh1;2H2|!EK%pmLXCihHTR?kW{p#7EQU~3GKF-Zzsl79SR7h zhQ#KVoTQ+OXb}^AVwHs4B9R$xgNQte^kcCkx5EC?3=z2`$xGfef{rtE95aeFqcX9& zOj{l(pU$A^Xo}{ojP>Y!y?s5C-%pGq`a9_$#$$A)fz?cb5b9q zb$n%;nUr_ZKxw?$GgFAsLi&e>jq#=Fx;!13;a;3bVf|tfQ2OV#OP4YYsbp`DNJCGO zM-K1=s^UD0C~;#6QkB;^vZj)TdTy6(=Sfn_O~U227%ZC9CrP%WChQdzl!Fs&6e-fb zGNH!Nm(y;_$|N})@k(fFihrsBB^3&7ETJf5;@C|NzRi=wN>Xo0{guNrR2&UScJ9>+ zXCvsltkt^W4Z!euK<@w!mWX)8}}jAc2y=R;a!ORzc` zpE`8Hg5%P$mQ2f;%N88jYc^pfu+SR_cxsBpn(ES0v3i3occ5c~0``AMxKFU%Up( zL*fr6nhF_-h;MNq5V&&Y%+}WaP%sk7SV=34v`H>zA`=#AmV~|-aazoXh9Znp1XD*5 z?Km-1H+FY4HTqVpbX@o7-0oQ=YxH+*Q>L_;pKqHoV4P_1@94ikJZ}t%2gnJLL?Uvo z{L%l2R=Md*Mcy7cka&%r`v@`yWOA>bH8(`?Pk-?0|2D-#_~D z+#k$^T^=jd>7|;QQmH1A^JnU&@lMohz2w57p?Sj}_{pT+u1;U=5?!xKHaGTE)fO+D z`+@oMhCZiWN+OxNx63rYPh&pp^L+$Cva2-zh5y>{`=$>zecP9`GbY~sknwIzPf)yhdX8#k-{q@+<&Gns95+`- zQ`%!kKcjtc^dnq}Awc49%lBK)cJ%W5x$>L{HD?58@DsF++Q+r++D+P5w8ynqjGvC+ zEchWgWN5b|?emH{GHe5r>-7QGt#FBzMn0!Z50`N{DDatcHS=-&X=HpHl)Ye^N&<5p59+%U)oJi@4;VaFC%8{D=6!LA9Cgl77;mKz>pEeUhNa4Jfv;aw%G?QZY-Zy_ltW; z{{m@0bkat&XDZmUmHeOQKBBzXXtz_>FXc48h12)|r|M=k%`wCR)j%fvjfjpY17;#X zqV1G84MP-ADFpil=jP`XwvF@k^$J5tQo9k%CP*x2H1{03cn+s3!7m4gny!ZAbKsxj?027b zy*(`Iq{xtK&miY8&H)2QCqq0gG(#H~%@DDYUt!|^zxebU zW%Cb~4el$G_eT4*ixyqmhUN&e1twe?F}UvuB{&gzs_w$ve%iXrHn)!@*>i1Xb`?gy zThdtD$1D%F^&6WLVr)NN9KBFC;*Pa_r1_gM9^M^6?ABw33{Q}-qqVM(Et}g9>aod< z%G~~heqXXH+g!*tcuF{NLpnF~7wv(u(-a&j&gseLd*&2JA1Ti5$v^mDzGrT6x10%b zEoP>zwzjRU*6$BY){fVI?G6Uafq1Cp-^MPw${)W0F9+HWy@79Hmwm&sjFKHVaVTXW zI}jUcoEl3FowzWgEOXCYHCjLpWb3v@M;~yc1sEK-G$i9RScHm#EKGwbvGwlH})9&E~ zH7GOf$weJ#8AT?H-G*sU-i1FjwtKUrCRL4iz zKi`5a_Jsoo2biuCWRu2Lf$drJ0M@xphl%hyaer2+y$n*AZf3f%g16#KbZ^M@a0Qw6Bwo@txrE<-%TvBE7E$U(J{4 zN@~A_K90b)xz4p*VV~mJw!wjWD%kxz)26umYXy6Z=U=Ew9CR>DYIVQdx_@b zCHt!Qbazj;)sWq=e}(B=;r;TNvwzs>dc`fL#W!!fn@&9FjQfoQnf2dB{LfpeT`#w$ zhUvY{fq1N@r#Y2s?x~S5lMF2Ux%ewalEHo5>Gxha)U#saO?NL|eD_ToSM)5|e~yjJ z`OwZ~Mq$!Wsby$VLGM{LA$-DRw=PjJC1Q>~PEOooZfYOC@!72(dT8G9`_`^f9yINr z?p+f$-Fn~26$hGIpS@}LpJNIa-MV{K#qp-(Ir=`}HfoS5r&3?(@FqjV{B9VBi z*jEP^q^Bl7v6xB~Cn9c<=$f&y%p@2HH1`irIP&Y}nLWiEqFKeBnavXtaU0Qhwh#3e z1Eo1qYF^2V2AijK*85BL#(Z=Gs&P2aycb`Xb?LZ%Q9NnYwdbCfpBZaxCrOb?dR<3P zTyLyysd-P-(i}F+uxe%(Q@MUnZnnGpG9;{hSF>HNAp6OO&C5N@z%rO8Kb_@q z>iUru(qiWP16VBcIQ{@wKv3~z`K;?yrdZi;BZ!lokft=W1ek zL2$$)fPH9$aHcpEO>7*kYUA(`BO()ReVVTftM{DO&=6DjUgEicV!C znaV~o6&CAMSgccFu})>JPKCuf6&CAM_KKTE#tU6)$cT z_pDXCyj9$@R`GsTanD-CJ!=*BtX1WE)-hIM-?NUf5-||$5&i&B1p0v?U@5Q$xB}P; z+yU$Y9s!;N4gs$LZvoD=@fa(yyK{_{@CNts28GxDHQwOYn7Hc**AYtmCE%CXH|1?~ zc^h5cMwhqI65IIi0@`9K&9&FZ0UeQ)oNQkVC;^2o0;~^VX~4Pw$SH9V@CdkY=HlFWHJu;7 zcabK>)JyyXE zI;mm_8tOW?F)t)wj7V^OvSld}wt-T2%92DJcDP00J0T+8NLfl8w=EOxhnM11KI@=dx4H4fO4#l*o93^4`i*i(db$$`ygGy{ZBmW znba}7ynS%hX(yhvv}g27&@or`EIsMO(^d_(FCXq03zTNB=xtkEgZ3^xEVgx?Jfn$g ztA=p2);n2yM!#TL4zc-jm(|ViW@DqBnYy}+{-apdJELydxocLPm}?*Et>Fsvcyi7u zE0>;-%N@UT<;inXljfzO3*O#pchoX2uUT^XSntSrfrN?V?B7vhP2P3^RdM3hGLixThsZ^ZUGov>WG`@zc{FKg#P38Ee ziJenA`i=@AH6~{Q&vIlN3swfQ9!1Z5<^jYWOpfKU zu%;0$jN2QC5lZTat5L+4`1XH`RU2ltN*E`cMwnr<+^W9)zP}<&^>ecR9&qH`hWWS; z%SVup`!FB(VLtA|eB6imxDWGjALipe%*TD0kNYrt$FP!f+e8a&2O%GIuri%)1m^0s zu7heBf31=x?Rl8?NGL`jzf(yWCg#VaNGSWx4TNKaV{9jl>@5a&6-|Sd_EXi-|AH4S zUB{_Q#Tc^N^<&b6|7{@NC78w@gcKJT&Xm~r1^WgiY~J>5V4qcSUw7^=2XOlArcsjb zQ816fK2F)I73QbLeuYJ;SLDS+_G`af_1G@U2dsXY9;E3(n*IQI3|uy8i}2%wU4&hv zY2fF9p9e1K9|A|L0C{n_`SiQ|YD>PFm>Wsac+NM~bG`%im`mr0KPK&E(w-rFmGB9| zKd9gPIde&y{zLsL4<&NuV%7;r0cK%R0mDv{Oq&!XG&fQ95vrDLHAgNq7%)-+!e$Va zNEV7+Spx`$XF|M|z`_)ko2Haql$R4|cTxvRN=P_~{>(t3f$g%lfcP3lrTQTiHWs)? zO<_0fb(CcaN(O!=xwRgmGmVNLTA0)<#+C|`QU&5Fwx^t{m2$PjRZU&B%DW^QLyB*h z$91X~n%QI5ssHp3j{aOPj@|jF_8&9n_D-DgnI%Kp24~K#&Hp{^^9Qn#P*vdX{nyMM z+6IAWVn^#)y;Co4YizQyi^kxyEyab}-HE7Gm9);eJ(f*b@#u*B7`?n{N=JQQEJ^zH zx%lYs-Ame=`5A2JoYt&`A|Y)Z1~|M&KjhUlbDfH)GQ94OoP&z@*dvI#jD1_%0C8mO zD)-MDI%~q=n$Cv0ww9h!*mv}Ke`rE~dmBQ-`A{g|*-&U}@1GFz8(qF|si&pwXGi~z zkZwH`pi;iLprm0t`tyT#o;JL#fA(?RykW%tJEW;*s%JTiJ$RqH@q&{!NOwT@2PVrBm`SU1pG zrD+Rfm-YE%vt7W>bS*aei$lCN%<0W-KvgJ z6G%fm$R*-IvNwDc{Hv__dtn&NQqSE-%syhIw*BDyot(0!Uj?5<{9E8}*|_H8(8a|~ zYSZe#MQY}H@F8J3V5dL;*j(7*eoR<<%aHu)X=}oi+3Z(*1oT?#k&@0y0g&wM6wP3U^E&8#`-%>Tsu`y zqhVFu)s)s|UUF(r+wi#qS}-^L%$fDo3znVJ0x2wJq+)&@7*?_GqSOg3dhUre4zu>T}bY+dQzMI5_f=(oW~(8gY9TQpE# zKd`8+4aLLy$&1`iF%F4jW2n9@4B@=L&5++RKA&c2IJ^d&9l(bP}iOxXH}m*!P20HW9>p2I?HaMsz(BzGSEa>UY5WL#UxHm8xq9-DKrcp-?Js zA-NDaGQ}4*#{O>3do_}Bf8_0J=OrWN!ASD$w{DuH{XW9^doexqM_$+Pa*8+OB9>)- z&WJROADOYyu(y6m)Xxyl2nJ`wHIF~Kq}~(3L9K6SzRzd)U~3eX#JpZDK0O$m9*27p zT~aV3+zHTeoIm9Df?QNTd0}}h+S(RQu9tn8E#e>RJsUh1bMDEaoFobfA7?AM2O9Fr zT$umj`iB-owrquVrm^$@M^+zuvFsmvInvsct3fu~lEmSQ&qVl5_LM=^u288Yl!MYE z>>NcHNGL}r34008C!9qnHOwb`gm5b%zU~xR{08tF9Q-zL z5%ZHgcY-_Y^u26rd-*!-W!u}!*I_Sb#k~*-_Ch4s%h7r-8{=L!pS^TzFP+&7kzg-< z-V2dnZ<$DNjFs3#f@7=%r3?84KBBhB&(g`~IQ0LJj>0Tgt^*Bd3I;FRKf`Yn1OxmYS%wB95B}KT8hgXCg2v8fqij60J?XBuYqh zvczzKc|mR?JnYIbyCS^?EveLnSsr?9Fs=388##?jrRY z9QSQI%EF|uKf^MdnSstvdm?T>wvUf`@g+i3s76vnZ8#-($$-*CrE$l8}VJfQT&!7{w0Q zA;tzAKZs3m6=FgX+lgQ6<}txdX5F|+Gi}qy#*=O9OlO?d#*oY=-8PRl$t0~?(l*^` zGMTJ*HW_CYI@ zVhr9YRa^w{%L- zTdBypbPA{W$3&-7bi#+_diswJUM#IB743B`)zvL^c6LGq5sS-XB6nuH1qcKRFc^&nqf)C?#tm@C@EY7Ym%*m;)3z#f&~B;l*@zpwHfyDU@+^*0^R}u8 z2@#PhZ!i$6Gin!K&>F+ZP<^GZk@6dTmGz-y7)qOVt+6f^2>x>Mzm#_VDA~MO1zm=W z3ax_vTjZhfJ9lM;!)Ai#y~zkWG^3M0g|0dTeaz>Jk)<0y$cE%`au?AFOFIR<(diL= zF*Goa14FY$Cs@(!(xS<96ZQ9Bq|tCH#rm~fYkK;l{%m_~ZF|-q?eAIBwYGlgqRFJ( zR$S?}RJLS8zOE9b4zUhuuT6UF`XbE^wK^aOr*Vf28xaC<@q*v&^7~zG|FEbh?-jjR zYc!jU3KQk#|JS1ajv(f3W=Y^MYqVN^3(a_jNenTQaN@L^0rJCAu2!cx?!hb1UEOP% zQ15`-?ICHkmlqTV&%=>O#Z|Dc6zwo0DH+}dr@MqarePPrNd#~b0h~ktClSC&1aJ}o zoJ0U85x_|Va1wzr$R8lRfa5(Jzr`V|n?GeE5-0hTjewJ^MptQf3f8eKI+jJpvglYA z9m}F)S#&Imj%CrYEIO7&$Fk^H7A!K0j%CrYEIO7gbnH_$B6aLjHiC|wmOC~J>oTc} z2*tDvyA?PHU)S}25DiQ@)Y3bkVo43Gk{+P{4#z0nJgpeXYd^? z_z#L?bOas%X#i7yIpQvy$Q(8eu>r{>i6j@2XDDUr?T;g~Ebl!i#cLte4k|H~Hpvo_ zaS|MJR<`x=?t|n6jSnwtlypNZR7ydM-A>U{{>qMwB6WhrewLQniF!!~C9dd~KcVIA zMF(2b8&8Dowt;ocZ3D-j-Lq%@a|2y>`GXtQ`PTP`0z8#0?J+RB2h*icVv(`v*br`npX3x@{~@xi9G3u-M4QS>%{vMQbm2P3@>tzE-s zThm@=U!&LCkwWAEsuu`5on6(AaFBK!6f{d`_B?xhpg_jJ=jH|DEps#d{WEj7Oq_qP zzyHDW%KMA0mSVeL6m52$&H)=~!7k!+TKr}KDL(AHrf=idXrXdiOJ^C@kQ6< zFWP)Av)Sdd@t%7+_=@~*Ixvajt{zrDrv5B8x#+{H&M?9p?0|cB4*Ko8u+)8+JI0Tn zha5UBJ4D zK|4@70tlT$W2EFCMB0e?{w|~~IB&tEb`sd+TTWIr5`+&4vvOgRrG)4w#|ueSA-{tw zH7E2Hii&=->+83*Sxk#>8ZG(9%=z6$%Oel)SW*+N3F$>q-!^Q~7zGN=!}nW;PY-Ct z#h;SV2#%Thb?FAZ;>3H!O&)gx|4#lzK6T>6l11?W9Scv13Gl=4@q(Xt+>`GLxXs!RO zFq#ywKI7QcLBV5&GHJkqrpl&@Be~E;2ZM`D9eA5 z{>z{g&g1O)cZ{q1u|Si-!#V;d_9Jk(oX3jAudv5jF_!pF&hlaI_e^#&U@GteyU7kf zDnPS%ZD^OsS#AyZFFhPLpk$Dh+=bVOa-jJH52nWj5jA0AOwc(%vw)Zm)Pcv*0T%vo zoCNY;PU2~)#?w*_b~6ij9^#W9gv=A?r)8ormWjfJWuh?nVHo_7V&jCt55rg{3gbx) zLx2lo)glb_Y#2;0j7x{1wGA^jd%8v!u0g(PHvry*mt#o2#w=cT>1wkW7YUN=-9}Mk zw2{$}0}Z(X4LQ(|0}VOQkOK`lw3P!5Ina;;4LQ(|0}VOQkOK`l@`)v8K7)!gs5pa) zGpINNX3h#uqTnP7PNLu>3QjWZ@HtR=1~kk<4E-L{)BYY1rh5=bNv3`QydxyKs?y`U!FDqLIEVjE5Ens0fL3i#vAZeNE z5MKUKmiJxcVfhNLd>t+g`IGHvbRMt{Fajm; zpONv;0fyR~Q8o*B7811poELFB9zgmNaL8_*Je zunZ?@d9f-7MYRf_Wy-XvRdkvlQc3nlgG{?EvRPw=0+#9I#+c?s%n&JD6dK1AQG^0o zM%IW)-R5ieZ;C~S?q0j)j_~H1^^rhVw9Fmr3Z(jKHkT&SS;dH}r-_10lqY&ZH7%}0 zqOPOL7q~G!HGa&}P#TU0t72`6*2B@6nQxq$d!GMY{wZC$(U&T}-nS!@8qL&JcMc^x zwyY}WKZJ$#8|s9@(|df?#?VM}D5@)u)kW8*Dk|GHM6bOwwzhslAQ&)slEG*;?)If` zSVL$(BK1O+&KR!jLlwCA--9z^sNq63J z3Iy5{z`{M+3(Mtx$dF+kES~h9=)&k z{12b!zZ~DZud8eSmUwe$cU7%7*~?U=b-pdG`if#hqP)sh(^4I1tF^*VBGhO$++uM| zj^*F^fuQ$Qm3t#K-+n3nh~g{xFP?cJf8pOF5vRMmKIYGiv?NEn1EIccafA7LEs@67 z{A5#nth&Ck%;d0I^oH_KXC&0qR2HnAsHpUoh)yfGmN(oUjP^Cb0q%h#e^C6>;qkrB zRo-(2J9Gx@-FucY&w5vlQ2tpmP+z=kDk(Rc%bmuGa#0=Ac|Ar)87y4N9Y%L~@gH8( zc`M-MT2cWNhcT+!UT<;&y$tY`FE@}*Sb=%n3H4XiaqyHlcQc|-;SDTf`*|Y1QYnrA zjusrfIB3UH4f}c~@ah%gg)GKLrk>@5aTdnw8HFu`hJ6q;z)8}M$xhD1I3LGBZmK6O zSVa-(n0%E`U==MJ?yz?aGZM%qn5ihSQHipDdSUMITzh-&@wtWR#ix z<0HZRYd)VJW5Cluu%D8{cB1SYc?%y@|HoEy+ee&7bB0Rayz^0ft_$hahSWFJ^Eee~ z4A~EL)bm$ia-MnvqxzlHH&?VQVPq6P#!4i9%D1EpO4ZXaQQwEqb+2)pZ41Y_uwQQZ z%LuX5O6_r+<|SNYGjM(c`14Zhx?YZR)^J?WE6Cdqyl%jEBSn4HqexGo4$4&vC|7YB zO&DgYQ#gMZWfM4dbDYTl_rDU7I+%d4#ySBhc-~H_8G(3G+NmP{3viE>~ED! z#}sUf3$;I4w~+srt$IJv?jWOP3fI0BSNF=-@&2D$9tYK4Q0oQ#dy(!$+n-_7PayAB zD9vbW{{KhvZ;!@}pm00rqQ27|l}5Rn-8C=P`li{Kc%coYvLxb_#aPs`CU&=~d+QXq;}7fn(M5kmH!h*c+rUcC761SU1O=HRsjI=dI12jVt)^d z@|qgy83F(lrT*A3{0J-0lqZbo5By<2{r$`h0Dy$of^Ejs%F*?QUH<6*jDtYz42x_0!mwQ+C+ z04V)u+} zqoAk%S>aI_>3{X3t8475iwPzIhF}VKkJ0Ce77Rl`GfV)0q6b{>iiv`ek1>vcMs7=S zN;O#V_4bWl2~2W58ViA9;v2#A{r&zu_D%f#@|pAAd+9g(InuJ3cWeL{X^HU5cTJMd zA5setc$NVKfC`%v{1-YKJRN?IZ*FXDXlZI|U}0ioWF?M}wl=?0CQvfgmPyt8)Sp1X}0JH%6|Ev_~>QBZGviHw=XvK0% z57Hw9jr^uQ1QSDxr=dcjsyQu_{~afr&PUD#%R65!^b99vW~ynMoX4a^8>|~2)x0{) zbTf7O(17e~fplo~inb4(@cLJBx5kG6{O!I|oFH>q=|;S>{H82umQH|<2b?n@_B0Fg{V)HVfXH21q)jW_#gCAMG%YwelQb_A3!DVKHjckFL`K-^EwOogv#T|PlS1XZA0zxiC_SyKd9oRGokPfdK2$t!;n z@L!5I`{S)-txiv65O?k*Ya&Q@j=`qV={Dw$P0YU@V8N6gL`ppc9VEcb%q30gA%qNE zxp~a$GrpEU{hhA+nHsd!y3a=UhfXpZTp3&p7ou>6a0lRYw%m3u)n1&OqcP^z+;%G0 zVBWYw69g4gLL_mP%Z645&+1|<)xXXs&(s6g8Y1NUem4TS97-;b?kkw4q;0ls?zk+- z=l>2quU_q`^2f|2&5ht+@wW!I0=)wH#A$?oWH_~mHTW7ssNXk)IO7i}n#E_#{Symm z2)JhN^i;^cllyKufIxvb6YEMQok5y_nvTWk%B%nl%}*rsG+HS)*XX~3yr)F`baxh) zCevP4*B0a$dm!Y$rf;qi2^i6*&+}TY&qy9(jEv_4CP(1M*fWRv3`HhqnG}_;?>c%( zaNegPEG*PIVVJUI>EK2(@T6a4$^2J{3^*H*DRz}|Twk14l`@C9G<@z76`T#rwLbU+ zk`B`I>2*jjKH*n14LWLe&uTCFGB#IpuA40}BR_59N^{g7l}NJ+Ms#bGanJ}g^xg+= zf*A5bw{8-}BGA2Asa9g>D4XyYTUZQn=vKUIbL%BqYeJI&*;A;zDYX3mAIX0CO^fIS zu2+-*ufU2>WJ3+3$K+_%7m-<&xh10`lu36GyWB;v+OGqlv|3w;+r*7oBib-*+Zw~} z2xKabV_l3{RV3LJoA8|gMcvY0G9zI&t`t@%>AmhwywTzj5X4YW=~j-822C7dfwto? zaiiv{j76-I0j(;%`8<)Sd-WEW@pG=FqQaFzQJYP|X-OFt4@Nkcr82$cA}9x!mYfFG zDn^In;!Q;2Ybfm?V-j=Ot3nT~W@OrR$$_@P^#w;*Q6_7eeBeeTMn00-I1;~j>BvX_}wjG%- zQ@Wi!#DQ)5x-)+X`rIUvy1D?B#A!NGdqE%`ZQd7>yOb!#2P|S=?mG;|<|%!u7X7nT zCx0>wDI2#_1t2n(1-nEC_AuTO*-qw?YzPWCTZ8D>ntY^@>c(8d%^U$-FgOTs%Tc0U`tvY_mgVZ z11Sx>Rx@GOgFLpIa#Ii6o1A6XjpmmH8wi)7fIyG8;rG28lEDM9QIuEv*y8t4=o8ZHkdC+`IZ zpDu%`pYvJ!ds}-Oo`JV&uVC;|?Gj3E-3+?$G=OAK&4HvFu?$Dm2l5A*~GQuYZowPt)-cmW^u(Gra zx;3A_Myfiy)iAYV(kLDx2g7G-`smF}u%LbmIlTSTY0Z2l7CLz{V_xlm*R{E)*kQbr z6dmSnadG)=Yc6(#Ry0IXh-CB=r5&;n`Iez|QulF?*ZIJ$D%f0)YP^~oQ(NVj`>b_mjK=FT>)ffZ2G zBlGJ+`3iGoa}*5E7}V-}x(p^Qw52tNmAjY&{Ye=!KY0-Q%n(dJs(J%)ulIvU5qMDbu9*~`Mjpo`Er?>Uz$wapbe_= zX}^Fb|3nBGASgEoF!Hk?pyt+xg-iP*`iZ2FMxFRjt#jn1f3PS25r)1#hpdv@Qyeb? z^4Ab%57`zI?m71?z0K%92?_|Zf%XA>zq_V_2JcyKG1~5=`P)sjzrJONQ$`>SgdE~3 zHY8Y_qF=^~|2iE#(N4DWI<5ol)9!UWy?x_C9^QA(M$VL--Q~x5-|=NJEPNiE$PRPt z8`pzHF>Ia;hgsjqvEDx)GZf1+AvzJry!v)_lIb)3=s9qP?b7M+W^{A8>gpaaU9PQ6 zkk&w}zQcVtJTZf%A(xDwlcXtXzpl)`F^v!sK4XhV zJK$uSVqekLRI9>jYvAmFdRuL{fGp`_je*^iG}5>s%j(bKg19Nn9$tAADRqj3cf9&6{+Ju*Mh4LfV;&a*3FR8G^Ycx>3{?^l4!Z0{*QV zA!aYpP2o4(h&+}Ng3m&!l*5-cf}qBFH@=`jS|?@6>2)<&pFHOf0-v+7WsV9u^cFd! zm#Nn{p)8p9;;eU?W?|Fqa)0Pyqvmlet7j`EswWMegKVi>v#`f3Jn5&Kwq|gzN*zul zp&T)ARF4&v@3!Z}vsw0qSB>#%4A{c5%D;6$Wg1*q@YzGliC0i|K+%-Q40 z86zv6AoQy3C|t=t0<3`?6GWV{)3f_obfgsbYL&8!{0pcQ=ef_N)oGJvGhmbTn*Cbp z+Ui;+6@YUTX&`O!RJJv2F_ORyNiTQ^@$~T9D6`Fw`9Ko{w@ZzU1ob+l^2jGlnFqhh zlSiZhvhyLW4+!mGjvEFC=UrjspxN?<0n4E7jb9~Jn$+60)UeLI^O|b z1OEhH1>Z`*HINnXQ^2!t<-^}m)5Bb}dW*RiGJ&q{q2%I)-n8TkV#L>J!0dzqR@N~G z9$BnK7%bRyKy{#Y3`d$%=UL@h>Dd|n^eEU{M2H^?!F?{V%#?+BZJ16BSK3>oUD8oe zrrY$-j@G|pri>{|1E1`ZBqG<|r-OePJg-BfJMlU0yscSHF-=iV-DkCOt#Z9*@n$=6 zXZUvfS2Laa1(Y*k2)REuoiaaM$jq69tb$9Y5SlRaSp^r3L)T&CG6?@0j0oc3C!~@N zMvz>z$vbL>GyQzmYqi+rfq!v(+-#Y1z&EH87rX*?(TRS(<=Mvs0NjD!1l=q;Sn!oG z@G8imHY@<(4xrwek;`z0z*em3_r{+FL#_0=1_}oI4Rn#6AL8ddHk$y^k_6j!Lttmk zi)+2J_d6MP1OV55hzjm&4v=FuJd-Ysc&sfGa4jv*;iR7%{TlO~MN5bW z@`VwtJ*MMNPd9&0w^C2HN{=_%wS}z@M{dzKRcp_<*=qx!(Rjfq>~Rh8l47uJmv_{b>B~CS#^!Xr0ut}NMl&&%)5z|SMY zi{*j|)#eGIg~uZU-C_DQ-*s^^vW^4h9LJFTQ_3`}07LQMYaA0|yTr<{x1Qnw*+; zlYM%qdi9&T4R^E|GknP*RL6K98=b;Xc8D=cM$cnpk}=W^K{xlHZ?drj31zS-Q zbhv#VW~IAtzCE|1EfWXNZc5s^fR$t!a~G8Gx+B2|z9gnCi##NUv}9<|P&Ql6$(v$$pD;jJ;BTH+Rc zA^Y$Z6w6~i?UWxgyQCjagW?qhlLt?^?)rK$H?vW7wna;4jmp6#Id;Lf#9_be0#Ir* zB8?S8WEjGN?0q~GrD5RjJ%iC@e^Ip5^dn*+m1Se0z9#yy-S!ph9!+IK$qZhYg$1T7 zaTl_fIwWT-we#h3hQ>DTEhHV`*;tS)3JqY$GAzeVVX|Wl_Zl#e4M?jJ^-whM>~NP!O;kf6xn-__?qMz5qHgJVMRFrXSG}mcl23u>^<&lpgJXYR$rR z&1Nsyj`%j;amlQ3ngH|wO*Nt-ztUdgkaQ$rBA+DB+8g#x%?fkW#B^ZQ)$m_F+1B9d zHuS=#f?D@d+X5T=Vbeoz`l{`MO#-p$qO}74&sBN9@w0McQGW@F&CpK%8S3BBpuAT` zX~Gx2HbGq;@sdta;BMP8Me)lRN;d#Lj(36)cU(!&bMULyJ7vtZZZJBH0DU#`ZGGqEPgl4uRy%CiU(nOdU#f!SB8lEC-uzxFr89~W<=G8&xN>#-QKOgD+Ulu8 zdO`Pl4^0oAw4N(jB3PJMW|MWT`W~!+Q&fNK+|Vcu9!nAt;t&#zClR5dNGNCvzYaW0 zBtnV4OdFglO!vsjtVWd>tN1ljnkDs0@(yU}<4%u-|D0@NslL7N7DK$u7-V3;9 z&yy>74(8EeP&F&34PItz(uWn*+2qgwOMKNN9I2rKXv@^iQ^-MEzsDa|tg8AntMCm| zUjjkm8I8bHlA^?PdzrKmGA!Ki{7@lz5+de@PW}Cac%cjlUcBlb+l;9(BmoNO1eOIx)gjcN2`vZ>X#y*QVw(`^ z(f%83R?S34`KOJa9xdO>rZj4nvy3@9TTTN#@Vkes(+Ry%@-7+EbkVNnfVBexN9kEr z@jkc6ROUGWjguo?+F=?Ig-PF~;slP%6f=021ktGrM`<#`J*<#1SgKZsLD?3+*|nid zou_$(v4nXC24%wJF3K95aq?UZh^=hU8U!c8q^UZ^5!6l-G(8~eyMHwD#OrLj@@ zkooO~fO5}igLu12 zJEcPT_*2~02oVv=OL2@D6vlK4X%qh)1wVw|o>X}_czbx0`bhZT{NNo;=xE#cohGyj zu@hS7jV!puw=Tp6V)}byAeT+RY=`^=<%{sx1;U$1co6VKV%Q@DSv-`sepD8Ns7bZ% zN#Ot#x@hmz8yT#zXfYD7T$q3ipd6&hZ`e=w=oX%^cOGy`E3d;5)d_jCW6ydKEtMoN zC>KbD--UMMz7}unl4yXiD08~r&=E4r52$-!wvDv0Jg}NB?bJIE%7{nlMd1nE`E#|bP0V0@FtGZY& z0li`9I1|trI7}T3?9&)g#^zi%c5mG{7dWzNhu)_{54ab^)Nn+kAivsXWy z_N~*g=yd9vDVO-`TSMFKVXLHA^-*YCq;V4uJ0lqJJ4o;fSKiPlvmGagO(?vx7>Q08 z7RPET)!LG9s_ekB2rip>VM~(kZxWKD5AyoSs*YC+@*j~?f^wOqNK(QleohM3+8vGpMn{1~7B<=Wd+aYTFxM)RdO1=~zde<8 z(!}K^@jg;J$?E&}o;XH@?f-ZoUKqUHPsDt6mlhumFrg@5?*Go@$)K||w!1xGc%VyS zQ2`HFnlf5rKx3S{eprK+(HO??KBQEs3dY#IgeCT9}88`zM})oQJ(OB4Ii9R5 z)?|}1C8CBh7LpyxYgE4>DBU8f=S0-NS|M1s0mgfXDtG9%ZAyO^-is}qFpAxA8UtuK zClP0g;L7lGl|$)(gtm#XB5I>dIdjgy*fzF|7(Zl8WwUVI*n4onC8VJX0jc>DW7dJ9 z5@9A*7$Kw0qYc5S6^Q{hw1hx(4w&4h8)c9y;0r`b4`DW~DWp2+t9{!#+Xd^VGt9)|!}0O)cU*jyZwjX}g{_ zjzdmVcN&e?b=}A7Y%__vP851#i%|tdlu603Ql9m;gpU$ zKq*-9;uUooG1C?XPVEj-wL`XfK!VNBpXrNMmu@tH8xgaHdQ+ewC>;grE>&{1<5 zT9r8*>OF^iEs`jvnxu9*Jo==bo%q>y^is~SeC4+3-2$k}7kEP`Ut_sg^~mlzuc%n+;$ zTN15>=$;5S1t<@?jdInG_~>GA$5zdnS{W>&4Nvtmqt!!K@+0*x<_nsOZ)@nEd=l|; zF>Fl1;e@wC$@)}H0oq?G{b21$n}T=*pNFvbXm2!cxNosIB%s@)oNhUHd0U5$m0xfS z8aBYQRxqDvreuOPKv_exBDoZk-fy7_qfh+pBK7j<`-%a@l*=b=2J4ACg z!rLPEN+ow{YBmg?rs*Dm6P>b$6@hiK$Lko?bk*3{ja>((P0l?Bm$4IN+iT2Rnl;hc ziqWniXX8x#z7s%Oe6HrFF@s&63{$G_WpE zZMEk}KY(1pH@jjV)y3yydfk9|X8J#i@V-?f*KPXT&@){eu(shps9JAeO;>XIKC_~I zYW{iwyfC%mpReTfdSPGVgRhKzu~yOI+$h7$A&nHhd4n7voR(IC)#spQe04tftu zV{)0?o&sg}d#HE1KH1bc%Kf{ieC#M!Jo{t%=VL%CU=L8e~Qar^Pt~V#1pI zIG}bq#4#_B1KQIdarTIEP#0xdj2qYCG-+c6Sw)w(@u%LDqlNe*Ys4;sDSD_4cT2ha=Z9X#}EI;-|yFOo6E2xcp!0C^ zxCy~?iD#Wi9~r4v<^Umgqz- zu%>6*RV5xVJaV#2ZvdCY2+-`oWzwZn`l2KsN1CN z{lv0=I+f+M=SXhJq<|8)Xt(9#Z`-Pm5fWU?oQ4)RRf~^TjjJdn?gF1V0JW5%AK_Z) zcKGmR(9^M)ED>j%b%%)Z$~Cq(UGFS^K2Z??c5;V|h&uhBGyeV`3Y#h*@8d(zC()&JZIK7!PCG z3zAjKCmrQPeneBvw$dJTiu%n2T2YcVV>EsjKPGaYXs zF?~;S98Q}Nb3e|wPa9@FXWpA+Gx{S8#I{%1Ho-=^8V%uT78;lV#lgB~zh4ZAzB3Z{ z&}tawgcO)yQDGjmr+RK&Oq#It$DUteWXMG7IejQDevR|3GJ=z18c&5H8X=(hQBh)( zkR-p8I<#{Ld77(VN(YHU19rJ2`bNT`$9L{gqSI>CegAlIf zbxrN)%Zc!vEd{^w`yscI9FL1$!) zt$;@xV3YW$8X&``dv=&Iw4t1U2lRw#7`I+r_1};8U$OR(s#0W{I8s_G?A?JIK~_A4 zf+9~2gJ^W4Px|4TDxpA#Qk$+uDFw|CT0VluD>xaSxpdW_gjnuI49tzW3z*c9tm0z1qW zAf5+U@CQaG4GcF(V^&@aqD#%Q@@|g@ocDis#y^h8Nz0CgClD5zpriX+=qHPbdE~Ny z#1V$V@Ebx92_j(nk0J;K6EOb2Pm!~qQPK(CP9S_Rg7m=j(KVQyYKvHT zH#Q1ngd4xPl3?@R{?3k zw?j9=F2b(^yQ4p1o@&G@pZucyS4dXy0v(F`KkkUZw+=BBi@Ko7%R3}zg=K~#F&AC~ilMn({a5C% zX~|F9On|Nt8$mNVgm$P8ZC?l4w)($u_>-Ogzaue{qs|a(aD*F#hMa+xA+c8o^|%7f zg8vPoM>zbujp;VJgw&fnWS6D@FI}FB#3}m7xo_8KuePBs9b+vz=4u4Yr7+kt5wJ&` z-+#psO8*(XG+ZYk=85P_MD%gZC^h##!Ki$hr_7_%gA!O@d+OOE2uF4xt!Ta!;@P7g zE!x|gVQb{Lg!uF^6U~bB_RsE6?}hIQpbl`So-VqNmmQX2rpL?8e$Rx?z|O>Tl+B_X z{5DiBNnFSxBX zy<6ZZ)@8fO9j0dGj?k**Of(^yV}oPM46}OG0Jcu*xfb ztpoF}8@MeM2601cN*y90oISX?U0p%8X9YqN&h_K%6pUu2Ak!ok@D?t}-%GI+BVRfp zqR|A&t`D#>ZoK4Xus~u(bwTH6$qKXxGUB>NUkW8895tC_l4`}S_eU#`^Q27XPYeO9 zU*J;P9j23|rNqHacy;Fm@o*#-i&FQ7Sa%kxho2NUBGFXsBa1iUI3l0ujQfS+3MEm1 zvoC6=Kbg%Cd`gHVeWD{_vd6vGv@MfUFAd>1t<1rk0oFqAy+(|R$ih|dJ% z%@{H6M!FIC6W$d1$&@O$>)Xddz?y$yy1Ni&x-rC(3YlH)R4*LFLzuEDG~K zlV!U7Iv>vpH&d#_`$ZryBtan-Y7~~rcbYofaA&=K(WwaI)e#yV<|qG6DEV0Lu`UW% z6{a|o^WHyUHIPxhY=~!#DW}lJC{-LGU}Y73k|3wTmH%h$vQfQ)EvM9qWTRoBVaKeI zl}DkY-dVJ@npkLqUl=#df6x_z5#fQ`xARF)f41Y{^o|YP&R_ znw1VOVT;L3wQy0^a|$Tc z=UsVv^zkaa%WM{`$bp}s(o*UBp($hH$wkG~k{{ML<}s6fprZRH8Vf>&J2M9JYvz=* z1DQBl(C5{dZPL_nJZclmRgIJ@u@mkbALC)XR#Smgd4swB5=#E^%4-9pjRR4tgu9Cg zw~;};GNG&vDw9Zq5X4H1n3FUNnFG%4sn*Dn$6PZhp$}-KhWhM((+G*xiB1U@6LrtW!47URP z@NrCO79(>uR#R@1wWjA{=?4W%Qxtc}W__LtE*36heVg$s$yZkut_<(za?Q7UY)>)$ zFh^6Dv!uD%)q0u%ZN^e;mbczZVgy;S*k04}9GSjC`qsXbk4%jL953Ce_8zV6)LUt=>Ye->qx~&mSSC(uy7_asGePB)U3cpl(q*G}Pt}GB`|}m? zT5qF+dS!@jqlXO_u{Xi8)%;V;n=dal-R~ZHHz_)-A15$w3H%zTAKwJNfzS%#z!k*- z-*wT(&Il1T^;LgSB#oC!99xv%J(H?hDKE{mRNof-73)fiYDOoSS)Duudg|X@T@T z>^7VDRu~$i6n;0Ok39LU%*f)pt~+cqB6v(^@E8bGPSTeJMMkWO2w7F<7|5j9I=jaM z!o=76@#s6vvXE?LLpWRwmIMtFb^39mYJ)FA3~t+{PQLM($ugNTn}V4_p6bswf?ol9!MtM?_E`O2&uylR9+Lp+iYdP9=yE-cH#en$M&UI1Gy;Zqs9ZS&GswADyma+m*jhu|KsV-cP0HakKC zPzA09{mwH*d8#xE9;!P&mt~XR!*U1nE4TXev^L;{2OF0RM*7`77yWZ{26L6%^vIrE zpEpH+=8;&AHY#7`;)CZJGtes>`D=UTs^12m4af-F4<$!n)UNlybR0v8|2QHEi49le zTT`EiAI<0Q91|)*MGU8jZ`+_qM9#%8X*3xhf4KPf)(Bs^@t-*BDKyk@58P`zj@4e) zCX?mHFyyrhxTys10Qb;uW*lXuO|n5qpdBDj32Epz;$8f+HdmBaIW6nEt%;1rU#F^_ zIleE*+}j$xHfMKV;IBUR>Sfyt1Kv>ECGM*=zCH5;cwju0cV}Thm5V&u^>6IF8V2K8V@r&FNm5%dmfo zhYOnRQVpZ4wRN#fQq3-d%qokKM$(3*ihx}UVe(HJNRFmF(zY&8zcpkTvZrfF!8G(B zMyly!?b-9dAH-9r8uND&wQw40CaUyw<+JKx0;M$}{p=?Cq|X)o=n zx{I$F4(+;o!}c7@vhDP_z;p-t*SI$IS)EIq%}}u-HXg0R+h!3G0kYZ&rvcyuGo`R4r{?~PnQqI zV(}UuxE8Y<5w#=@4OPI}A-UZRt&zw`e>Q0%KF`_WE{%jhld86ktGc*x%zB%nJP4+oRzES*O?BYcHfWF7xc>YE)IEXmu0Yt zrSiP6)!B4iHD^^xhG!DuxWmJR;%!0ewD*T^oc-K$8;3SexC$cmt|N1;?JFGPhQF1{ z!m*ayp)F<6hUwOryhh`%6~xDLw9{Z3d&W(go|-MF_L|ulV_M@{170y6ID&7aKYPrm zzQ8-qur=sO8r5_TSF?nyF^xZ|(pWb_$sciR@%o679U9rs=|Me9uH}BEf5- zxB(?kJi^W{sbd530ESBj;nsB>23;o+4;VxvM{pSMeiT+wYC&H$h~Ln_nLKE$*siR% zNxdf5D<5=oT3U8>wvS%V7QQwh+r8VE7bn#wBBREJA0d|E@7dA0$q47hf$eG?#4lWA zu_p|ETrr!xF_4FDsY){iXxS&qe%0VxpzC1g;8%cM(C;vhG-5q$_WyY+c|>jSzE)7) zxyg;)nN69REj86#=Y!>Aff4qdhuH#hL=`;Ikd@f_>q4lZ&}w}} zrVU9$m4_{1>Hz5le@|T5JR>O5EI9p~`Mms50lXgg4th)H>yyXbK7IwdT@msYo8@~i zgAKmU1ID@AOd--#n^Is9?4;mwYZldE6??T4z z>Fn@#lW?y`v4z}bEXwmBPY}5}bzzqNBs^l`-k^Mjx5r(wJMsp@fuf$l;^}q$?h5ui zb1|`fT<*zeR7^>Nfq2UZmUw|zI>r(rgd!C7PDgdM1TN}HIOLt~vfzW~oRG`omcj15 z&rW_VujHYD?&`YR(%L{`YOPMP(M{86={4C@*i*Wc@{*nG*5yqq%a3XXgC;qi=4>sVwe6BLh9Mx)jsLxM1j6 z(n71c%9hC+573d`wk5^O$bKM>kNwz2;vVr;{oVyDL#Kro(@asF1pj?RT8S=>vA z0FyDelE7m0sk1&}!qy;_l`AD-6ol20aU`=(v<`R`kPFO}SV^+B+B!g+Tcrb0O<*Q* z7F}4Voe)#*%M=^igBz`c3^2l2|EV)Lj;j+O&7atc~=8f8hvg8erjt)VyN zY&{;?Kxl(JSdMp2B}+;BcI7i zyxkGEYK)gNM^3npcS+W$8kkr~((qQ|W?3sBrRYUug06grBOx9aR}-aT&-Q$-3I%gb zdIee_r%1yt*JR%HFY3U_$}Us+vPQJif?TgMd*|I^E=gC5MGD36`zx2VDU0b)DlR|v zi{Y-c^gbT}uGnUX1b9fLvf3j=Bk6}UxY*@+3IEWQ4NlvHIuZvt5k zMVB7*lIh)p{3vl;PWg>6m7rHXXUQtfatl^5nn5F?Z|82P(>`eyn^?rUv}(|VWhlpr z*|`lpQQuG`TdrI+fic`exkAFtV(#3&V-nr;yGv^TqOZK6oDn)%(9@}N_aP!bZIxj( z6769ReqytmDS4S<+tJH4kULJ2gNu0B+2ch#uG&b!t2*}Z3Xik@K#UCe8F3D6pfGX+ zOObGXpG|_Oenz6%-b1)$qTCg0>XIY9Aw4tuy1bNXHB$Z;5t%kCmXOXU`k%F#X5~Zr;%qAMlJRwoWyCjYt@Fe%gQh?;9|~zd7b*J@bz>clevlkqZLAfDgC{2 zHXE4|%a6x*DqfdkvG07cYz0@-+1Rkfv+mVldOWE0Y?HLM-lorT4jTAsW|KcZ_fT%0 zJoOYWqaUtdd+N$}>4Qu#i9UD(BOGlem8+YR6qaQDQw z1<+=Jwb8lPdIxaB8vODZw|2wD_J7!o<|TLm5>)vcQ^373|7yg1pN)LmhMwUYzTA*E zLz+jF>8Xx_5RmkyMlZ96*JW4Oz5C1JwWfua~8?x5a)R@ zIJ4W7*K?NNiG}HRNNa`Na1t{w+mu1xx`3qnMJRLyDRETQS-6rZg9PP~XS)N6? z_q!id<01Gu9JOdmb7XYENeCSOCG;wsBKU^i{pkqec6xzmvc%x%u@rV|N8c9gwF5_r z@)-DLfqRl^Xw^Q17xY9mu8P2>*Z)aE75%>-E-jgWy^Xo5D@i~$+A#E4WwDXW_mBR20n2`~!> zCWe}&>F^J>7os+&Si+J}Y3E7f;-&&%QaO09%P4>48y`1ik1#O2A^Q4e$j z@4d=`>Aw-8IDdEKFX2hLHc~|i`b2bJzW8kM*X-QDwr}x^REJlq_i*AscTi*i`dFz5 z=dvC@d$`IG5HWC$%WJ!&#fd$RuaRHHSB2{*UHOlZsCH3kw4FArdFr>(92K1a$=A1O zvd+S!htr%rkXj|~lp9T$rkS!(qDAO8LcOR)hUCaqj<$68yLl|Y>g`7qB6&AR$Z;88 zsW?$;L%Z3~kA?p=QsX%i)Uyu@2R#ih5tnM^537NlElA>uW37|Ulmw~)3@F@RJ)#OE6J z>xl-aSf0>=+1hD+x_0&In8|9oZ@S#Ju$=>`TK&9PZOgi1N{ZDjkvra{dFrh3PQlE` z)CAt7NNykCuX7aUinTS43tUIf1H=p73*igoaY9c*&-HM=_F=X@$G&H6Y4j`P?-|Bv zOLtY=$Nn6K>?+{&i~JMVg*1I$Zb1ydFNpbR1TY9+N`9+cI|53*|KtAvu})vK*N}x3 zS(+aQNbZD27Z9hm>LBFY(wwQL9JA`d-jVII z)_<-*WOPlrMNiGV_&_@8Fy2v4iG!aB7B^r%0XyL_-0@FsU_Ofqjn4p0I58Lnrsa$O zqzEKc8&b~uQe)dEE{vr4P4$Yrs;Aw+5nv16Tu5}nKc1!GWoKf~DpGTId9!T>*`m)E zT&ztb=Vqd1<0b#4zs1|tR-B3$4Jrz zdvV%$CkY|iBQ?m|#vk)|q}zBXn!v*zeSNKGj5^(Lu>c zeEosrQWNjJSBx4CG&4rreiCzl1Ar=8h??jy8U zhRCj~!S3LDjiJxSWFMWY%bs6WaJQJj@W}+Th$c(Z5^cZ+6!E52uW%Gq=r=b0gw)M&1^Mh|@XhGHsIcX8dj-NEdTzjzT|L35UsuH|b?bzX z`gLhzNWe8X-D_en61sv&9R!%P8Fc8{L~in~QPja}s;$emHs!a<9En&7MAe4(wqkXH zW^Gqch(dM6RaGK^WOA3*4QmD}uB&TJf+5S{^?vBXEIS-dlS)!qSx!zJlwpzhnbQ@+8I(a6Yxdk9;a>&>xO?af@p^3i?{eKRqLiO8tRy?16r{m975T6?WsA7R`=ChKp4iA1g@WZay;r5giN zc+9BTEATH|*||rn;#d@nPsP5bxUC-#>fH#zt{`2RIWjp(f}EkS@y#M25$3fQ6tBfb z2aIwqOo$Wl=oqjTxdt@*pBZLsRFqvx{i=sLK0Z1^X&ytl%*nTMB3#e>t^gO@Sbg|x zJa8pB>ye6H(+i05i@y|U-l;(N!Zh8uZan@ zlQPrQCV$3UTGr1rrDF}qvYeDwuA0kW2>@RExk{ zvnDFYjQj0W(d4mcq>KxH%Y$A56;<4pXLMU6pK)r(wt4*?#mlTCnfVokHs6RNd|eU| z;xvCRY5G{EBZg#65vLn=CZDB;QuKIwMbm1r(AT9-K7*)#eBPe1h0u&G{7)jrV8fuo zQTGhn-`8s?d_xv91SwaaMd&i26OP1@`Oruj;TG)Ybtmn!)R3GF&uqe#nz)2y!4;jG zuNAFDu~I))PDd3?mpN?{=JjvyBo5TtSjeEfis$1aM(eu}8N>Ddn;}=N!BYH7>vSUB z1)E+uJGKRdIr;^n7^_sl?sH>1Ct4m0FSF}1NFBe!PLQu}uTxyFXD^5sRb7UwkK0#E zwvx>N$HkQmEQ^bLMO*h29qn7hL~iW9EEA<+Gt@oLedh&Zb(QY(JFL+WWeh=*guB!f zWGL0{dtu4>nCEM+)O09}_Rr(qlCxaLPwYh|ws>0ELHD*EdlNPBEinI|gZc_{+VtB? zPxb3A@8jvN7hOr+ugi7kVeXO-g*C%w2;Z!`E?*sXE#mUs)`T+%@6)v#@MikGiB34H z5<`W*Kv%>Om)?<^WxisJ@Tj=rHxKRuaQ(QlH`=Z#G`$S-kZcef9URt?ZVo}yb?An_ zTIico;03Qq-pTKMs0v!cW#YK)ri-hfxKoy|4E5zK70(`uHy^4lrKyT3kI`YLqf2%lZlV_Z6WuXx1qUSa=Oj#{eh+MG=LU7L}GyV~TT6%iks;M{si8 zs+PlKJ)7E@?s$8#-*MGF!eb0u7+mA!t9vrsovSgn#by!LUoAWv9yJgp@PU2^PD;x= zhDWF^RJ{F|OyOpoxcylz{8B!IS^KXE(=HnlDusti;Gz?`YDD~(0Z~;1?CinykkWC0lfSxd6FLQ z^(ANnDY3bUs+#sP`rE{%g7a)X=3<$uDE4Ir>6LEPTu!N0aYv$Pj@$KlZS4cu+TI}U z6`c>=iVRd#_e%G z@V%Fh){%u0p5mXux0Ea0sf_;2iK(v6Rn#OW^$64ADAJD7=upf7|DA1VQ};NW4cq%n zYH~4@R~Yzc_+Fy!jy>5={PdsWtOw0LPH`Xg&Ln9=7Z=BJUg~#QPOCUy)Zci`^!X#@ zZ2eM7eM7Q+A7ybl2W-i)*N`Jp+G2-4>)6P7ja8Lj^W`GuY^alNWUzBqYj2#y%oz#J z_aoMwn*KDY*N>d=y?eKzjkpSZ8}W00Zx?R&9ezFhfjDC=ffEf-E%!0$ppoJik#~09 zWMKyqY1>e-dTY4xpDcc)jdmF=_Xk$HfEAhVQ=~j)cX?#qBy|Zn;K!zdsqE^ofIi3A z49pYhreQ0qrCJ*Ms77z=;wf5PhnWx>&4BY*l#81)I{>j4CCWHkDkD3Xv9xE<;p{fM zD+J4UhEMxjgD)N|=u}dur6bq&WZ%)Z5zLo0K`{|98?aE)P8;ev7@Pt9kq3_7O0H|w z!o2r<+XUf%c&BAM+ZjN9v}cZ(v|op-sLSX+&|P^6>fhaM>*ThDAQqmrO#j^4Ts9^; zftR!plpZ_yfrad@jh2Vi2y>$z&mnaH>2(>3F83ie1it?3WDtDZP>MgxJJUO5`R>!s z4*z|QygIABUW{_-MHYSGCQ8YX-*P$(j45t;l+SH z_76(IQk$%|A~*d)2RZA%!xtlHNlypYsL7GS(A*P9OW=TcB8`u%d9QxNc5xXy)0GQ# zQ)#hM0(|EGKPjCNb3M?7D=hiDXaB1F5Vt%s66{I4bcgx5Q;5&4U=y^+T=gPssI^|$ zh}-opyA>v^DYuXV#rb&^y!H8b2JTcZw@EeERj_tcu&z~X3)qHTpnSja7`1j7os<+U zL?t-$Xj{7?+m5VETXm3OA06hkA9DTENl3e~s;BGJLYCsNE@4Kpm@WsX!$LX6^b^lkFIu{3m15qe`#EVKQV`uDGiw~U(me??33QSk?oi|j)$cr zooSZ*%aNIck4$9Ey+{OY?a;v_p7=1|m=KoEBPMA=V%T%-MxWw_%3htw&K#BIuI&_b zg!*<*(apSVi!NRN>>RBa+xt9hUhLw~&UsyQOMl-!z7eZ!aSBTzVCide`blVI*8lC6 zgtz=XqlNSY=IMEu4snwEeJXo0W>Ku!=9aER7kQ(@-$-JyO z9yw=3GQbHxmQBE@)suFJO1~PM+LSggf6yVjA?>3^45j#k$f&g}-AKl6=8$D6`4>02 z=U~0F{I>LJyMRf%oT+(XMFBgevgs?(;m>cizoF;X$H^T=DttJz?&_GtE3}Lwl;yEH z4mRt@4q{b7bBmB}O-;-=?p?5C#*z~2(Sg^&-`zVtgvZ;^)1^Zlp?BgNgclRk z-8uGu*Y3nYoARNhL$E{LLl8pfVcCurw-1HoNcc^?3NbA3xn&Pw%w&6HlsD8JUY+w&5z~R32uIkqoDn_wD61=pX+^s`cfi>{P|`-=n(B5RN0KO z=eDa|lFJC{nP@0bS_FY8*|TShH( zi@hOJbTG=28-q7pXuPEN7cDscayn1}ujV+{+ zeCxc!=DD@~HQh^d{rqYFm<4b~QU9%-^(-|nB_GRa_GGJ5GgPOj1)dZ_4g%YNB<$}; zhJ|Ec0*)l;AB03)ST_$s(0t|Y@1hQB;Is)cyu-5jT_1B}gYS_3fE6sb*>lr#e!Yp3b5ho1H1w%fTBz6B4l6we4+&DLy?=z4JxhA=;;CS^7*oEMb%kYbR zmeBo73;1aa3SMjoc*n;0;oa+l_#6xP!Mf$|`imd4=u^!hb=F84uTwG!>7Aes{w(!u zcx|7{PxTBQ(Fe4Db1OBqb1=d2Y#8B>xQ}1lgAZyBn-8B4VF1+66)*$90M-GkhuHHA zFbpsU=z)2l>*>ZfgmoZPuHecyvC*_-uMa_lw+a;lp!aUQIrpY;|IQ7d z#syR29si{R|1|3V0q2+w?AWIJrr3+?Z1w|xoueY&%Hv6O3g`L#51J=7-HCJFf1v&_ z6p~)YKE*gU3p>G~R!?J~nNX-sGCX73g-kp8PO;;e2{YXks;pTbZil2Y>~WC9H~Lw!{lK>Tiy=kyhGKa^OGH1VB=Rfu+-zz%va&2wvdtp<0j+X7az|O` zNe;;TzO*gs^z{1ln_g9{3%5j3+`Ku?Wrm>MAYIIh^SW<7wHj|{|4|MJT2f+qez?1FmUNc>ui z3V9>&)>{)ZkxE&{NUYc@>pSD_axL6161@}j$ zN!@MLx{`XLi_hk(&DtR@#GbmNP8vAz@)U*T8G_8!E_(CI-WG8Px@GIn)YnOWOig_#XHdDV4&X9(5bLfG zVQG(;4;l?9frcPMM&18`yThBAL$r!jqm5pZ3(xD94@_!|^R0At7Bwk0g0RI;23yS_ z?j$g>p@+DE@mL6!lo}lHjoma2i3I7uRZTiWCDG`*T64%bXt0U_keURUbM*BhNF%4X zYV8y7J9ubd87H)P-(V?dt_jhkB*K+#F&;Wcpt^|nqN1$WNd*Rum(fBBN??MfvU(9< z#&;rB6OD}&=R9>yy~pn^vOKv~3}7IT4XepP{MIXJS)E6lvqp4!%x=OB{$fQ=wv%Bc ztvNBE=6F4g$=rQrS^~;e(*M|pxa?U?M`70}MH4dHpY^)xQD&gbrLVTUU95>znNYUY zYHeRq)8z4tio`_p7CcprI^W4yJy}+e`Q2oY3X+N{U%%*~2WrgnF&Wyx!4!|-gf+>U zf(9P~>uc9E3K8M|+N;Tw_%1{lzAYO6jDCQM?wP0^B>%Ru{;L%u+GCwx-RM<8miil1 zYw)xz49&xct!zKir*xj?_`K;(LFy}(=uZWsYO1F8lxDaZRtW80e?*5eM{0`&yK)TWn8>o4ie?Hu zJS@%TyO06B84of<(-KZWx1h=nF`#WQta~bzY^{eCiKh({)oWkyOQCC1CmdV+X}Alx zy_YJeWnNXvLYM!|lAabal$H*cfHLA@D_z|rr|}kH1OZ!!$(6t&M{>!fy0+qq10fuB z8Yc8Rphn{;6A}r`lmWMUorNC06awuuRIM|XH$WH~9Cpg8L;@KcwobZxGSn;u7>rtt zIJzthc;uHsDWPLSyFP-cDl^gvEarJN0xwZHCTD|X@v)J*o=lc+;z*w0D$t`5R-RhY zDIZQ#Op(S=Ho-=@P4$s_$^2rF(wUZK9|wdCc%5mT@gFEOJM%iAg6L~^hIl7=voz$? z@zn*#0Wrd^X99Ah7-6~NjMRbLa9N8zrBmSXgm_}jpAeXER3*0OwgBs<&GXUeoXzvB zi1+R+his#Tl@3SsX zh}+`w9;HlkkzvE{J@(QO{w|qQzD+JyBS9j9b!A||`_nf2SyXFWO?Vnua#3`G-f8G(0Mj(+=QAxw6=fZ)=ne=>{g6BujM z;Jo9~szfw~dr2{OB~gZb{w{yH-&TT+2{O8bF@khQbZY6G@nERYEhe)lrIx@v!FlL& z&+5e8;msfT4SV6al>*NUEZN~sYhtvZXwvyEQtBNJymr2{ePW|gMIY!A%Y5UCCkCD& zx0W$tV49vSDjr#M$qg)=|BKx*EsU$De~N(eg$eQ(am8=0zqodCPmOWZT)knOCv*zF~NtpZHgMh7^)6<)%akHb})}X-T$Ipj|o;+ecd*w1z#}=?brdF9QYPk0KLwV87&H6fOB%ziU*4 zVI$f@@zA4J{mL1sMjcTk9cT!4R0Us^RaG_lM8x_MrzY)$QMNAJrg`|pM01r@!fdcQ z{DkoYS#M7?ch@2m?u!xZ_^I);`*asl@U~9=!Zltmg}kx)H0&|m%Br9VfpYFKnWKu=SQVkO=!d%GBihs4OQ8>e$Ns&xG_@l}q5SZDT zLNtMtNHi~StrfOX%5iX%Bzq%|Brk->FRo+gv=jSOM|A|^>W69<}++;pPOD+RL_N(67)w3xBL#<@| zu4!zSc1wv9+DYM85XRkYuHh;jsZF_^hEM0%xm*`AClk6`h<2wnvU2j?fnRCKgKq7; zZLQ6Pe(%f67$?UNCzBxXs&&x zV8nq6{mZHwCotAXxT(K!Q(bGxUQNJmnk*DwLEp85b?%3Ib1A=^8HsAs+cw%U>d&hreNmzzUe@rz1~WaGP_tfcbaNoA$0U+n2awNM+i`(&|17cyXze$ zqK#9gzmkf~$5^4LI{;c2?w1h8w z&U_@DSj)L9W;++G4lZ~tJczou_Y-D9a0HIXApsEt5~m9o0C=is@zh9oTGJ&`tYlL! z-pZSB;lHkel~-UDtr*4s?fU;Vc;DW!B4PdTL}o{&N zpafB(-41xl4>mh-4)%RGX}`a(#$e<3T4m5DGNGw0fb@c5MYEa&57-#1Tu!@Zy>Y&E$amk5!gzaw+wnHN@aIaRMn{TN6kpkP-u=zv@!MUl zc;R_I5Vy19J2_6>VyElA#qLPWnzQUZOTg!MoBJ2${Z0zEx8bt8XcRKsSUu3X@%Svk z_pfVv@#gnCyW<`wEs)~bK_0X+ESdIbQF>&DS%{P>w_IJ+l-XzNEhbaM;p`f%J3gwqMXmaF6*PU<=&*II>|OZ8+jNX^Tn0U0 zBTNJRL{(fZlwWVKn%rqISJCy7ihQR;nM;w7qt;sBYo*l$!Y3=U4w5y>X8)@mrSKSL zUCYbLTX^+dnIVHYMu&+4D;0O)soWL|IiiAKyvN(;Y2QjL)YU&(lHq51?Oy-L{o&;< z?vDPh?_@W4!(M^{GG|c7u!Yf{|2M)~ChZ5Ify<|Z?C5Z6#9RL)WaJv z_lE-1fi8jC@eMHdumaS9c0gYd`&X9Vev5$fBM=dY#RZ)#H8;vH`Jw|R2`wTp1#krr z`hfwj{SH~L>K!>MX9h_{m`#z9K+8an02+V>L_OA?P(T&n8L)-G0DBADUj?uS_JQ1^ z8ubw)3eJN_XbR6TeT=@e;3z`pa+zTefXat4zyoZyh;G*zFU&H?g7R|0Dgd7Xr$YcD z+sS?y#C@GrUy9foZk%Lu$6^sO{@09uReTUTuL!pHc+)lp{7yF?oEgTfZbStx3!#4n zKkeJsjvlbBUDeOObH9iRUBVZ0ME1=tj!~&s!pLc^gp( zo$5g5z!Xpm2xz#NpC?P=I;DSjFSinx305ui_N*rD+J4VLP?3AyXT0|UIrJ=EPVw?N6h2~Tzy+R?5+h$6Jk zsfM)&UHE;#N&L{SDD_RCjZ-(9$kq~Vil-o{J!u7X?C}4l``*DeG@gFCtWpUqTd?M| zcp-egRs@VQCw;~DWR224ZKmt0jOX{3X%&u(E2wYjnhKZiE>XHXcwBYwZo_6YT8}k!bRY8WlOF%xc5t} z4nH0@{sMj66=rz%=E=ft{K}Ykt0~DFn;n``obbrLvS41ngI!@|;%b0+OTW@{tcPJo z|LQ?kA$RW-a`$}IFeLA6B}^aQF`CfMvW5O%WxynY!)dE?=gM_8di> zFNz;`ySY!iz1=E~WIV7>MfOjKfS-OifAm{(>Spx^e86{LFifu^zRh)z6+Y`vFhBZ$zFcL;>b;i}#k){qezX60tQk%y;;93-YU# z95Yu}z5y*DCwSNDnwbB54=Fx~CIZ39AR^q8KJG!!-VNuLyOdApnkK{brXG1LikScH zn<^~BPAe~K^@cClZj<6Ow$t*!F5SC*B$t`7EbP{BM_yVjC|+r#U=!AZx&Fq|YB~T! z&9B0U6Zl70x-3kDJkQl%JD|4S0(sPdXf@AL>pboH58epM( z%iNzkRGVK&uj)JJ^%PvmB!11OVlKAkh?ZuD(4VBqOk+J=B2Vl&e^*aK#Pj ziy+FYA*El`Srel7Swy?WE8*Vu;Yuj8=yfV*8&(DBwGviEu$M@IBp zq=>LeBRfKep=MgG%&&Lb1s&WRGV4471-iNm_^&nIj_G8V&Wq-ai4Pw2Cve{lb-sI8 zISzK6c-@=uQ4jJfa?RXe7`9iv&iQNuV1Oq5g%)%dce-`iw zi)e@b!r~rAT-&2JnNq1?jh1z`aA>AJq$YQLwRI-b zMp0bVY*%gcqQ1+bGLq}c$R*XDM))#Ck>2ym+22Sbj03nMDyC~4(HrhjJ3ae>fm8hY zo;ILOMS-SkYvgWjC^fe60hW^i9O^I7E#$q+7TP_m9#QgRx}FsWxhv!iztOm-xN)^h(tHs^VBJ6A4}7+k?V+LWy_&>S&?;7ht++bcsohe zwTrA8<0%nRb*K2mqomu|zs5%c$zrwEPAl9&6}M67#S>Tk+G1FO$~Coeqnm4he@#sa z!|ouJ>d~!DLp8EEwK8XUpG2*ne{#CjF0&@1roB43e3xNjVauf%s*}5ut7{{^0U*|$8L!2vILLL zBURj%Qn!%)wgx0Yv8r}oRCr)-8FrqUaWTa)3-z>~5_^^nWaHq*3N?9)z+Q&CEY*Lf z7f7_kjezenggv-Kk)GgrO<2NJud*-|u9= zkxoU&da=Y<+;GwG+)H}$6T((*9<4jLghB8cXK+Yy-n+jTZXO`wJ)e3-#!fq|cgUDS zw0#CbjPm1nhxB~?WgojCBR}PT^y>}fN9Yl|%0T<0+#*}KqMsL47*;|tF`A!M)3>79+IVj-h(Hvsi z+bbi_e|1O3Sf=JZ<&=Ig71AN`VadCN4688Qz+^?yMer@ID zXDJ3F8j;9E+SA{4=Ti^ZERzU|s@cNTP?*ym-Zh&E%Bs828vJrx%6mw1i8|m=RKO*> z*a)Dv-k_8d!kgmbjDG?1Ek$OXZZ^YAp2$Rp%#2EBo+(C$0;+;+Y@;+dq44HprO+V6 zOR427$VNyED462=W&o!S$_IFZ8Q2r3LXwfng&n%K2t>QKTZ^?gAg@bv9NJfn5J6}u zGnTiK)hBMo|4R-*D(sqkkbFy(T9T68tuX}=ox^=RDhwDpm=|W#N+-Sji3k0@PwuOr z%*1Rq8rNMiXD4t!QM$G=JS->`r}X9wWFP&m)=H!aOH4##T2>Oyskqb9U`V8*e(x%4 zrcff(##d({HHxSlhR#l11PeXjWTPGz@+^%rKbQ|R4K2^a3BeoTdx94{Gfe*X|>JhQbKd~V%!;Q3jkU*hLUa}6E2aXl+$7Z*OsQcVe; z>{kdh2)o&`fH47&_7%1RgT+*>vRP92CI*qbDu`|5M0$8j*t&(FE~CmalU0Z~MoboB zo;!$0*|I>PiWW?eZpeY@BTE_?O}T{XbsIAc=Y!$%+Z7Jour3azc5hXRzmTL z|FxVyAmBu{Y2v7bLhg8mjEM1JHg^2dK2F)oVub$>An z!;Zqmn}OKnd6|-zsf3L?Lnz#Qpx)!aaiZMk{j0uzb_T^+7iC+a^9nconT5?Pv{QBb(?7!S#PBB1<2CkJ?G>=uV^mZGP{`~8&;#@w?!@}BD*#wV zWd*naq_wy-PMV~QGIYkMbMWXL@F2BA0bhqkVev(0Z$ngJrr+mQ2oA9&*kn`nhw95g zaCq)q&-CF~v4j*Em??j|hf*uWDP~u&$2&mk?yq(Z+;l)CoUVCK;%%iz=KV-t@rGuE?kTKGBp`1S>nC*{a1K z>Q;=EC?NJEez*)Ssq#U1b%9BM6~Iry(-G>y4N&^u0NemO@OF&74*);-D_B215Fa3b z(fq4Te9jHE-c)luoKc>HJ%n;_eL_c9^yZ6vgTgN6s2UfIi(U7_WsnWrC zWZ(wy2_KGhm^EK?UBL#;ki;Y8y&JdHG=$%w{rdWOS3VTGYfSI*U_kG(XhiSgywHXd zw0s)>=yIw}J3psYK4Nxn`3$C0Cb8x3+S5DL!m)Q6@}2f_@e_UwE|hm&2%RFgfPP-4 z+rY2W_vmlsK!6+-^1~erlC&+W=#Qg{vc##f>txHhH+sO*>}%Q4hDY`r-X%f4i};2> zX^my^tYDjt?G4=vkyD6$2ob5L3bAKdKx@VHlEo^yhGvmAUk(apLzc3AZHQ}v#9zy$ z%OPlYTczut{NkxQ;K+I%L~8J4?v&3_O1N-?Av5Vo*`PA}=>s{+E*zHFgnyygO|k7+ zfYQoYtUEc14vV8h>E-GD4N2JA*3PEs-ovq{$9A>DvNhhGn+?y}dNz630J^Rw&0Zco z^KP{>rfqe}!x|U;53&o~$tw|UdfYKk(VWJR!x=jO|?7Z zw+CNZv*{Z_*|Ka#mxUzKjgz_@p2n{hkj9+pBjbATmvE*;q(T00n-`*1Z(?qAb=_Hsz60{Y;XOx{COn-a7K8`~9uH=+95_u^hJ{0=j4Zno+pc^_{gh=Og&`1s zJ3k5t=*Mh88MBHJ#Qau9?eXog zUUF`;{<_ev4Oe-L|7Ljqa3FD`*S4@fz!fGo+F7V^y*5s%iik7^Q|7%2&;i@3v`wgFafXk}9!jM0tDw3szP)0Xysqt%xSsKb?#_?RF&ZWE zqsF10?<>Xn6RWpg$j9uZxqdIsVA2up{(e26TYw-h&8ZR9 z74~`5itsZ8O-j3T-P`Sd-I{wZ@F7XvS(m=+@9A!t-(#D9*_H$}blqw6{YkxrI81*- zhtS-D(4Ux==JC9kX0O@vo|;B~WJoCu{QZjp8MW{j*&j4Y^WbF-mJ2ALMXe#ceod2e zY7*Dyi(5m8hPn%R>L>*vkN@k;j@f1-Qb1X{B(WxANyXA~^7uh>Xf%jnMD6R2oIqLcD%D-8LZ+F^COFL~KICVyCm% zhIfrf==A^VR`6gKGBPEm@o&`sd9%lQ`cK})jm4RM?2JdxRQ%-GX@pV8Ugde{JfcYL zUGd0|61M?qO_}i>4=>D7x(D|Iw~v6hzEdefZ%oA|LMtvc!W++KfCsvib(pzDYUUy2 z3^W|&vJmXHubxhOR`y;yb#&^0?2o|V5y>I{`jBL!eDgmZkWnsar8a6KR4)hGu{{6D~&646lh5MGEvr#d5)) zK6bwpcmJ%fg7EE0-jT*jjd}cke@@JS48k(o{R>I2LE~A@&_k%kY-`C(4pZT|WSH5H ztcW`H6kLaIQpfMIN3ezlR*`FwqfG5ZFFV-8LY;X{5q2XHdb?7v?BS(Pp)VP4Qy6qp zO)}~qoqnLc$Cj>87<0&+;hZj=VZFX4mQGt=Iv56B^niZ)l4U?6o&2Um(|GzCpD_zXC=ilD?R}Haowxq%@9=nNRRA}98^9iFxpwsHZm3G$qRptwy4s7HRRs=NlJx7px{wex{ic6-^D+{Fq^)1wHimM}07GjJZvTW(E0~zzP z3A4N5(fqyE7?mjP+7XZS#PdbsYi2L{$x4R~+MJB#wA4c!yvW8y)|obl;v!y#GTrR& z;!S8at-M(ESgL3X`92=nf|Bw56L%^>*_S zSsA#;MlUnQCiLRzm5&Ufain0jYuI?&hwTq1V3PalG;eQKQgiY!%EcT^F0T_|j4T9Q z8$OqYxA~D{W$e553THgO5QjFc3XY^Q5* z=iv0^vT&Sp6XK}dDy_7DFP>M$KceZXoNx8ladd z`^>k3`B8#*=qF^dGPk<#$ocD)f!@eOso{X$WRbCAm|CJIy+J zFr)UBJhLO?|4Dw#6nYfT(;H@-VoC-=JMnqKySTmYD8tO0qdAj3sxz=Py9FWqRyHk7 z;PyRw{z1yC0?`*?~=RWOtg|CHQ;^{y#>1a+jde zHTYTce?|UdNOt^5`fqpXZYz0Z$*Ulmw^O0n?XkJIc)EW@*eA^L{u)Gf$s~kADMG#s zK5)3(k_PM-q!54M6CT-eDI(PGSj0ay2au5}4e+ZscJ;0*VUnSGndRiT#X>`Nw+IPx zLa~w>wnyZceVw}KyI}GeI@(Jz6g8XTMlDUQNdkn{1krl zdoM~p={^Y3(YCT-VrQegZ$QJ}0I4VJ8(+*Rry>9v1O^ZWHE}gl2Sfu`$hjP?<||?X zG*1#m$RNYR7nM(&N~h)*bC_`jIWOC&O}=s^DZ#Z}fl(chQjYWihsKi8mNf(1yL+Vq zzB#04M5))vL-|DESPBM(Dq>cM*C|O4tT@ig3L~U5>?t3@I$>0gN>3y7(C_IYBDEZs z<~E>P7O#2GPxOA~fPXU6bN$@u%?DCTX498m`S z92dTzUKto^I5wM}Lp!nzeGp@2bICC;CdAMOtJ*=(fLH4H10{PIE|RZe;T7r@8E`t3z(h?#-_I zoA)Si&pz3+3A_FUe^QCuHttLgiQkyEOXt=kj`WB`Y$}?%cs4FG_SSI=!9#vYz;)yA z;KfQ@nNlXU{ow|h#LY7xqR>aFXb`@#Er;8Vth)?jZ@0XyQ9!LYFG?u7sfo9$RxhrF z)UpfGlI5_XQf#uaY{jjVY5T_Qv(t@rzL9_=6Q3thP|0csqgWze-QHNVcQ_dwkvs2h zmH9D}tj-p7QiESzfib5Z#-sj4cIDm5YUhS}^zZ2ij}wM^oG znlv=NrjamPwDQU$klD{)7Q#d}WvaqNQ$2M5EFP^1|NR7`&E7x3 z<|>o7Mb2WaBUMScVjU-UwwH&i(|ByXP=N;znhg1K7L*!t3oC@;hbD=$k>TnLt{~bE z{O2kKL^2R%0sr^hYDYdLy{hWdXK!z3C!H?yOaxjZ?CSr~*jE76(REwm?(P@?(Xh(fs4Dt@V)zwTr9k!^HKD5zwn8Y) zeq4qHBClGC(%~PM8oP>tZc&Yp{{)qk5Xn|c(Iv{K#7-W}Y9t>HmoPo1EqzyJt}pAu z%zXs-l8h1;(hqsbWT$$K#%f36S4QT)zS*ZT(_-!0Q<+RT$CxCnG9jIZblnN(yv=u3 zr`}-K+9xtpsm0eoJ7i{wM+RCEHm1ubj>>XYN^s1w6PpSj&$(WM?y~N#C+@!1rT>_y zomOVw#8XI8%y3wFX}RtYCH_nhx~YK~aFETWAG0rqNQsZJKj&TSTK3Cr8{U41YKgjW za?Z&cZbd?f(Xw}C`fTRqBI{?ZMLNL>|ILd{>Tc437(vSQvjkkIY!XdOvvr-=!q5;xZkh@Olp^ZY8Jb069d zrFz;djuvhGt0H+Djy2%1*t^pkv&t}+O*jL#E{rn;lPX%up0dU7yJY3(`xx5c<26>P zTVz{ux@gX||>6_>)DEn(P~A|G<7mq3;8SwJu) z=)mXwW91fZhgGlX=V8?%DW|xxfIMp@SpmNLFaYBkV_DIe7n@nT#v`th z^~~?VR&-72V=BE8!*#DoeM@8OE&5?K6u}$Oz5KwP9Pzuiyj4cv_ouM}d}S-zUM!0) z6kM4hve0&<8cX^+&t#s?Jv7Wn<<5Jy`<)?0ezwraQAATnL9?#9RX|=fUUEY^LsmJh z`%u*(3YH!yw{qJ4x6R*KVY|HdgE6_i=XrsfNX;n!yzZfE1~j=2$Oj&Sv)?=|GbJ<` z^iZS2$O*k9Y%bqW`nj|kV)cdk-s>IQ&al_m0-|nuF6=TwWazAv9`fF8*Vt}q-{pi+ zVwCPa@JVR$rlfPQ1j)~*j^nr!cZEX~k6L25ds&*b?_udYJE5rqxNZS|e3eO418IjP;3v>F!6MREJZ z-73%ELHY(Y5R+i5c4xJK?y}2EY>mSjr*2Q1%t930J!(!~INbg5^i~JqL@K*vHO}ai zU(Th_?KM^F#>(1M(A`~8JR@n{gaURMfw>-WR0FqJs3Ao`pkX0tGqaBQ2(2x$s>5^b zPkJi%R0PgO zZmYgsq_D=@>wXHNRrL4)MUxgEOY1C?21Du;b9O#WJlG6ufD8A$i9P$|TF1as(OyZ* z>i`R%`X5|}8loDeJZK)hcjU+C%Xu8MMAN1MRqHxAqo{aLeF2#V+dOyC4a5ZEPJ>wf zmyF6PCB{(xKqgb~LCex9(kaV#yO(g}_^$bKs<^DL;5xRA;F1!i7Hx?#L7bM znJDlZg`h2sJg+h4Dl8Ed#fwLv@*<{XiNYUR38JyEp6#%)pdm!V(#FqtlhTgP{o?i- z(2xXT%?(5^O^MQ5%K zTZ5R)`kRQC?+}yETaN+H&xB^HPm}Wh(oZ2eN=f^8qiD%D{i?>fzKJ+KKVEIy2&c$F zq)FERAHJ-s&fD;&*`yQ62b__#BT#M@P!{E?aJW>OuoMw*QN{0WqRF2e5MWE8A7(}w zK@1^oB0NYvaAcs*RTZhVmHCW(3-u)3I3*xy&I?^fKX-Kg{+1Ie1bHqz&n~}Z_#SaQ z*^4)QaVgdknmF=6H~}zz`^A%XnAZ1dmoKhxECZjW(L_^;X@A^_`jC|r|NT!{VJhLN zBw$Oa5!bqHDY4ItI-lhQ_ldf(2l#enbk6VnW3?5zs@?NwX0@vQm)`2tHYys&^NEmU z^Y??l_NRX*NLIP0%t<`YD)+haQ7D5m1L7IaHW~_Yybr=wC%w$ic5)P;=llz=<2sA% zMl0L2)Je^4yf0VYqJsA(mTtR5<}Yc2NS=_Hoo#hhZegRC?kvv`{V(oCXHk|4BEx;A zOBQ0SlfJ2y+!++yi=9Vj>oPmv@{qmg)l^mB@PxaRR8%bypztEJ6#;)}$udt4e0Lc2 zQ({!KonSDLW+Nv;ftfzv*Yj;Gl;`cr#6-|Z33`xw;53Xl_ob^N%KB-6T>U6veHD^z zw1cWMI?}pqK6U-0#E4V)!fKAZtWHOyo}sI{&XiOELxTe+w-$N^kwY zr}}R|i-5+UEnd}a%3(oxfA{wwLXIFYW}ztx;VGse%5C5boH!xM(jd*7A+^_0M0QcT zz@`u@W)Kg;|DYd`%W?UnjPb=ag+2FY4j73bpCJqkLMSS65o3f96v!A#3MfkjA9n~c zNEf0lT%Z4%f;A5~u?SxTLqw3#TFg#21Myy192dqf*1p^IOjB;?Onh~P|7-sL--5OF z|8oaBn#(O4zGQsPoZ^mD7kUWosA9GbjNUx_Z1?M(uRE$o7XXk=T;2dH1M%VE1eDdSKUrCIeJ%W zQuW2|ef8Nq;ey8UpPn0p0~o<;_nsO25sh-~esJlMpbWXwU~aIURz!ONk+Ut} z@^Obwc9^`yoG4PkBLZCZ{PY&J9!jNF^4>yP)YjyO3h$wf9}mV2ERQT>pJy-EZ$jOM z2%=%#)01Bmc%c%|?2H&;u;tog`od*c$R<}Q%4|f4s?-aDZC^Iju|rqVyD)tZHA}7F z)k3dF!DP1IUnQ9_ln!3_dPjmj5q8Gh9?V?&;Mu0=OmwrP{pmYT0T->u;#!WU2hYBHRgbwCd7@DcQuLNcK&dVi|&T`*b&l)c_k=9ua zgMBlD8eSE4EnF8`@16=|Bde8*R6ValH=vkw5gBXqJ&{~}g-jGYhP#IKwd0Nw4Bu)% zA5x}3Z%~wMdkR3G*VRDwFYt#uR-%YfkZIL-@3HC2haIDZs$`?z6AhloUslf4=XNIK zScLBa0N1^@YGGd9b{3v4Z>iXkdK0u1mm|wLXRu$~ZHk1<`k##O;+6~D%mYmu?;9Hu zM>6rtpwcpe?Pb8|Ke9IRv^>;WU+ z54)=%e_#U=B?{0>l<`Rm1pDoFj@oEQ@LCDync<)SSn zIx?WIF&$4o7L6{hFd4v#keE_m_N0Ld4}02)dO&!_)~<&TM)XXzLfaVz5HT z0L8bFsZwy*R=K>-SbDG=Im|n_-GJ@Qohhp3Y4`onksZloOtSKl8|vIOzT+U+N2t5{ zoX^>C+LwXB?k_ud?a@8$jVveyt?>0X&jQdy&JtssA94votddju#G{A}s5Q))#04}g zlBi%=jOU%L!*Xo?nP`x3OY`LFqc{b&_=eGqr{;X zYGpq&e^9rU#EnA%3&hRjm@v6#eduT}lWYw5oL?|!qzAl3;9&JgI(^f>Zv`Il@=WS&bw^G8*cEl|7wm6UU$n0b#e;pz{I^95donuY-2 z42F^D4%XB13`qpg`$i5wRG7E1_vJ8);BX&&a{2$&RwGol7?} zPiWh@&)<#3!%kQTX^OF$Y}=iGNCTHnTn(2` zr*!+=x3PEH^cNwn3LkiNOBG&*4-C4bT8DAP9QY#=MTX_LSb*u(G*h-O=R4Fys(1NO z8@l3{2E8YU*BE;R}?)&5!*XPJ19*8W&hi9M8^DP)W8wux`Xq47JL4UP!EpW*AvmrIp zF@zB=ycr@fH>3^3ocTg(($=rJ(P-4^q_RxB6pKvpG=51cIY#a_zS4n`tCUYjf@o)p zi;Z3m#nJjl>MB_Z`AUB)X&o0DLzlG#v>%+1T^2!l6IK1tY?8Z*TPNWYGpfA`WOLOG zwt22LpQ;Eab5c<6rc)6xQy+P}An7SA>}*|cCsG2%uP+mC;0+}>%&8?L)UAB}eYc=^ z)i||4dikQjCylWVjP~%%e5{aZju7av`hw|M&KuJ|stuH@^k+N(DUu(jGu2CfZ&{Us zwGDEDZLwTez@cHiMMdibd5Htq`oibwQYVWb!+!&qm$@QP@frR| z6kyPJnpIeooxh9mOz&_;o{!Stl`l`xjKtJuBaIV&BDV<9ElJEi#mCJlaxyr0x?N14 zBKlFkz4q}7ir1bVw)<38YP(%>gqeprD#RraF?`b+^&504$;H7riLeT;Un;fS3r{C~ zXl;I=PbpJ9XlGv}BGVE#-gd7LFkl!lYY&)+V*+`EQ5z1WcCj3*dUzFB($f})4vd7M z_~L?(VG}j-B{|A`l|f4d(F1d>iIAlX{EWIjsn~|)OR0qC3f$rZK+Z&h zKZEnL723+5Y7H=R_dVa_mC=qA(!0xgR^1c^8aV+^4VohhP68%1QbU5g8r;p7orn&b zY}RixQ7kFM9D!zIQ_|=90&#y$dS2Y==akvsWwa~euTnloeC~u&oRbHQJtR|_Bt7F8 z*i{wY!i5w+B$`R8?cus^c<6wPRg4@)Ut=YpIJvB)d}L~ET@~4Y3KTLgFRp)Kh6tDG zk%fNDEwZM^O17X-?Fe^LqlKEOl2ald0el!m;@7%Q%+R_xZdu2?u_BCz`0WLMk9j56 zj!=ZDc%AsuSJXMoi?8eN*qMf6h8XE}4z3q~?P$M7DQ_my#VY0c@gjE~uDcYX&=W~z znDu)$=Jk*ZnziD9)R5RF0}t*(>rf*XPb;16l*Z3vdZT9VeYIEN^@BYr?(Vu5f#hSj z_uVrdw zjzt#JSv(ZfByy-8P_ZcJL)&)^tD}FbdmlNRKG6QsR}+$svB5;FQqT` zo}7wR*@P&WcVS0k^!2H%ZB3i}*&@wxd;q(-8y*kcFA@F=X~iBwz0QuHbzPR+#h!GAJl5j$#`$ zXaPd~ch>^a0kEvs~=!Pb?(H15l8 zEG-0rZ_X-1=?t(A>h_Bj`OTi!@}bYK^3R=`;)ZIVAZ|vv^IyHSQ7*`HOc%A~l;f7C z8HjAl5rdw;p0xh@7X0qfv8<@xQNeuvxtFUub%3`m@~wj>`VRp{8(J;=Wm7pUI|HvX z>kG-IktCI7UoF+>1v*rX;Zd^5;vEi>Py_d?FDA3E%Rt}pn6uBmiONO4JtQN;wcsR@ z_YA5y53l4l|IK%{&vD;HkPC1I58=5nj-$@~mH2NMfp$r=D&_ z4#`uDA(so37V zik2dU(ADTE6|jb^fjat4_seEbs?8q3NbKrGYY0PB2DPOWwbA~nPZx;dik??D!C%Dr zB>HD&$n9%mZv=uFfGJ&|&D+(|?lRoobzsNv`08!h0iQd(-6VAl&YJ~u=$6T5Y%;>W zG@)tax{af8Ku#a0pI_&Vr9QfY!PGqX2R+SBzoDRt;KarVeliqH^@i6CUs!fc{}4*pG zsH9P&QnljZ@ zrL=X&e|5T%a2B~q4Ys0{x4VwK#yKC8=QcS&C_nvHIGGFy7T_%ZhIPkumdn~3eZwxm zn0dL=%hc%7D!V=GChrLCCdPNfcHoZOn&cIx)?H7+3lVH@dz0f9Rpr0 z6-u>g)F`>Vr{_8}^lfX!8513q^zBY}i?ZI9oESkrl*{#7@|){zzG;C2bezh-ZA!%2 zB%c_ezwbN{W~kxaF!L*B)o}|6=?Kp&*M60WVfsP^_iT}tswv@0pTAUFT%4X07^(*# zRZ9iy;sxO9QiT=WnS2UkShhOH(E+jR>#0$5G-243N=NzEa@|cGMd`QoFb;$slf^}- zk*~LSJWfa}30c1bMw9gGvf5_IQ68+9tHl~iKUDcCSMfsB-i2NN3@GiMZJ%MXL>i)6 zXr0-N4H-oRULj_&#-P_Y)ECs@Rrn~cHWqoaVIr;0Lw#;hx=!lx;)+B+dbDzNCzK zG9sF2>-%B&Vh1k$ytL{e&%F9fA6c3GY3t;$>cC6k;uK{noRbl_Z>zea)8;J=?VpoR zkr-4s<5dv7=N@!(Jk}1v4#cS)WLagS-Yb)yjyD+2Fslrn3}TxS`6BszAE`ccw_5L# zX{zYFY~{#BbXTZwastI%6BHYOf(P3bD(*#t%0Zy92_RY*&=b1i?wmCb)WmK z6QtJ1NGsUwX((%TECuJ4=)+_2(=Xw~J@y&$zLpJ43D$QvgJ%b{d&i>8xuAY_)o>{j zunIf|Z^XrD%8*NS6qwK|ec>E=8@Opa(R-a?Uhf|2r%izOujjJI#%ArM)-}F?#b5n| z`YlgIZu6OM!G*9gN#Em>K4zJW6Tyj>w&xp9CH=?r1S za%zSPQ-7==Cs*Uo@Wy&&4cgNakA-Lu%TRa`Uy+8zH=LA!+9916E!2Wl1n>7afq2wD zIKNKFrwU}ZJ5CP8vuOR{EOjO1eSaXBDr#v%78;u^iam*mYB>{9sXH-#b)KD`HTDN2& z#h*b5mSl9jiy%WQ68y1XmKmrL=$S7vuhA1CtuQ}fW)x(;T@nH=P;N9Vq1^Ui+|Dk| zvLQPq0wqFM+b-$;gu_F+U{I66Y>7hrYnqcF1QELY{||GB9TxWp!A0T|1U>Z&f(T7! ztI%JW4FUE)<|K&_Q)R5D8nwOWrasEYt&46=P2c~@{X)Sjrn#^gw|>ox`6v5X*sMXb zVojzC-19cnf9Ia#zyVX~Q$%1S|kjA^~TIQEqSsX0n?&pE%#X_)=5|(xR;MO7aCw zah-Gn-%=89hMN4+Gy=?IXH-FrLk)kK>@%bx z4GB39=x`sV2XjT)@1^->ZHW8k4dIY&cF~ogQ`4^rV5++~f2qTlmvcPqe#3XJV6tl> z(VlBuolk8mU;44jU6e4lGzxamJ$Ql&Gs&6zh7Olf{a}&NvS0E=-%BHLyo0JbFK<$t zcX6M2h@m8Y{MZg1#pB^}N#n_OPxX8Dkfy2Ya$`rUm6OvC=jwj_c}-x>JMSx)JpPN0 z)cR$pR(g(Vk-&s%?D-GP#7v!*wf0|1!&HOz?!J0)+pND>?+TZp7!NhTe>}X?64|~>G+!$5;T<4Wox24A-mz($cV#Iy7(t^2w-F(+|-b=OOeii&}Hvf@7yStuzI>dDxiyd)E6vnB2 zQhu9^eASq5_Dv0?P$IdZyz&wD%uOj(e%1T1=Ab zuQnTJgi@fm3u>?*9fiTI5Ky8e?)oXQ;PHwp zsaqi!n&Sym(WHe$j(fn|E1=E!6%1Bqh!=M2;$j2VFiC0mtUejW9^|XJ_ErwpIP|v1M+^M85#T)CBYOxn?UT$Pki$=}|fifzjS|MU3omx83lH2@!4MgD>kjP`-; z=}T$jT1UPPr`h;))VI;E?Kyr!)@jV}$+;3waoDOX@91d`w^lAIMh3Zh9JYQ|q_7m8b~81ylAYNN9j)AMZA9Fd%Q zMsGca87ATTd}Ue-cHCCZqk?{d-j9DTSP@?^yy+B}g_w3VxwY<+dOS_wa4`Y0POL;t z^%f2KU=;B3;;|3D8w5ntCP(bY07HIs30Tb!MUH>Ae~us^kRTwSAW)_Laa~s0qlLdh zi;@I(u1iEvVKGVIh0!z3iE+bGnHR+1(BpEQN-Yv#MWjX;9Owx8&{pHU-{k(TzCh^6 zkoSX`(H>&s+BE>QqgU|yxIb%9KLVSX>uZuj3WVuzl5UY`$G`Miu4^v|x%g1XS@XSZW@3#?|g z!eM%m2FoorDDp*Q)suSYI)TBBsgDKcD;ni|3m$ow5+fX#%r!uz5#*o8rTJh_4dRqc*TYxPF?nM0g2&xRAH%*^xr=_{R& z?^z_B4*3>(Ei+BDy^C5WdO@XL^sm_B(`N}wsyzx3l4*9)+_#apg%XuQ8K=W795;en zUlR(!KS6isxvdV-A7g1fDys+uBna4Uf)Ew$-$n}E>DyfA@*naGLFGk9aDxJ{2Sp&G zgC6Vm-xC)=vKp$!$p;5%(eE?xCh;1POuANTz+k=7lbT7$U=o#H%>45ZeseT_wWEnajA5N?$27^9eSC6uU&T~OVh}^?&u(olx0gYmlVe)Hsop~G!!~nn{&Qj zy#d@&k+R5bCt5nHVycAh&63Yd4T4OK7si*Yk`?Mq8pktvjs01^~9 z6e5%>6hjmb1I(aTk-TYCL&JwKnw~MXn4EM15DS3{00bZfh7bpWI1GV0 zKX+wfW(HfD3UPz!rUTgP<+cF}9vAgCpL}E>-HBGVUOmTuM+&$x%EQJ1aD${J`~UyX zOe$k&6Etl_P;ol<{ipJXOgF_+sbrBWKn3NF07_~G|-yQPM#i@Ho0CKr(;bdw8QmJt@v zY9<_EPWQ*D&I>>Kgm<_ttuZZ?xzn}teg4~N(p~aHMxnDl>FXe0S_`&m@Wx}tUDfMLQw zz#s%fW(Rtw7^hx}HU>&wV{>%h}I&&@i|Zn8%qtrMbXw$vX^|@HrbTnUOe!>_UpbuwUhi?M;o5Zqb9RP zBZ*cLyB-p!uTNaF5T`Rhb88^0zGcHAp#`>P8v_Q6Q8^4EMGyrP5m4VqP{Bqq5)14= z#ZRpN*2lMB{}rCkU(xSW_k8z(A_(&p%T@_?U4*QvOKPht%MMUUz~xC*mG_xj5ccV^F>(3%+N|EY{y%g3LcxrKk7!2M9m$A!WF>v= zT#G6o-mwx2qJ*F=Mnp@lyURc1?fu)@j6w-Ai740#W(Ky|W^(eC+q&KRI#8>Y~oxmxnB-4~ktr@IAkunVax? zArNwnTH}BePyyBE-_qDQwm`Byva7n&t{_?BhOf~99y}49vf1577Q}w_4S+L^*(H8(Dk!Av=zyiAMk>OzUEB%sZ zCU7w9TwDlYnVeo&F;vloCm{&ogIe`0LA0iOpYW*yDOX`hegQ}lOoT6bKuJoqbpdj5 zSDYLKc4L3Q2Y=-QJkVcjt#$JP3dZ2Tcv~#uG0WgaU=s442p&xHZ>m{40}>LXbs!zN zTiKcG6#A7@s$G>o%z*R%p8@b^0Ip_+qKSbL0LqUukZ2CT^@5cA9*EW3M{aZq0RuuZ zz)b)o+2lshk#wY-qSpDY3bDL*MRo6r?mD;Su8ZpG@_3-8eMa|{EVYccjErIg(5NBp zmgJzXFg5G%I6F>hoc_)_jzhe@kk}PJKn~Cp&=GR}|7)tXxcLVrm|f9q8---AQgky_ z$`*eE{rT~TJP{K81yYPG*&gMKRuov-q%1o%mD4%hq|8)Pw4P;Ii*|~p8yiE71N&nN z2b$ET^JlF2KGfW1`}rj^D-;wIG{qzBTJ1QIrp>bWKjM)8$7YWiTVLjO&MFMRPwPRX zsEYefw$yb97=kcZ%67KgJvN(KnP0nKoVuLlBC}0IBD2P?rbDgJ-fLYxm0#^M)ZdQQE>AEfoZmQ%?y10097ue*E$i0O02Ho|Dl2qx8gl2nzte zG=M?>iNjF-fEH7^J#T;P~I)U3JH>;MPi1Pa9!O!y?y-y zgG0k3qhsST{=Y2n#nkl7?A-jq;?nZU>e_lG6&ssdGG6ov{1M_r$um3L)Ce&?1pvT4 z1Hkq${sct-2;);L|DfLkkHg6$zb6=K zf-jqM3)fijI^WnQ3L!P%9>yvV6py}xmn|6;S}oqB?`E}%5Zc$52p**HDctvg78yBK zg{d!2!#&@3R9}(cxNNDUf(AR~<1vAUbHY~$ zmvMf1w+{02t8?&<{X8L1Sg$*ubd~P;L-wj8%fp-?$tn6TQ!}b^>bQ6oqB!V)nIwmE_P5{qq?JyyL?3O8H znSv1z9|16cSaYQ82MR)OrzrG(uph1Ekoee=_#$~D|RkCaU7$R zU-anpbNy)n+DFfqC&|4>^OJwT%dkg4W3=+8oXK?8ol)g%wV4qm2rtuvyw%h7dJbC0 zeD4AO$Fq2}A84&lL>+Y3CikDOkFEnIcW}yLGK)i)X_?$SrN!Eiy#oOqQH$)POu{rm zLlnadOmtAo$TB_0^sN<^BQ+)6-@JMHbb1b=EXiBkmU^MVeS^&|IHnQnD|Up2q4peF#&`<)@K+x(dU!TPTP%U}D26T2%vQN*hmilRV? z)g`fL#`#$G4gFu{T#2-_*D$Uh+t~=7ZtHkX=?o| z&7zglH4)>KSm4@UQU7O|p!2zdJ+p2#{z+8&OkD41Rj8N_Pn#Xl4##@Z<+hscRw(6} z1u#EdBK{8xx&kKKeOjm$xZmNmgoW2WcxX$h+2Pfcu_pho_e#Y7?<8_Cgc6ztx$R!> zm1FUJ()=&7AWML|6j`go5%*K8N7Cq9e1_i|pk#1e2mQyXl3GU-g%vMBl(R+F?iO5Q#F%8pYw z^NaVgjWA@J8JqJ*5M>n$qb3@Szs>3>SC|t*=fqn7#oq)r-rtN3ON zeR5)<$st!f<%0*y956=GX=DwM?FnNI4ew4yYuMhK9%;#bH{mRL_~a&WGf8`}@R6Af zN;`Ajf_dgW+o_eajWlihH~=oI+o~u+s7A*egV@5$sD{CG%2<%s>IZ}BT={L9M3bUA zFy9`$6|Spte&9FXI05ZjfES$>CUBq2b=$27(^&v+?hoI`TCCe|#izF^yUxOw&dDFm zv*4jkDRKo1#&g^Tm9tRmXOa(cLSK+4O*fUDSqpdkv?hi?SIH@6oS1BpO8J zc@j;Tv^W-ial+VAs!SFp24U+Nn&4>sfofjB-^xr&r~}`fH>&g#=3EO~4sxBkqrwez zm?QK>@^6VrgZXyWiVYV_67Gq55iYy7qX|BV%pe8kq{?A}gj*D@Xd?B^zLK9hB zudp}~XO#wzAz4a8th7d<}UL^MW zHvQE0OCZoa#KKbau!lECXwiY73Ot5|=k44*@5@@l(m-#P`D7h#$CQ&wcfXb;8P3WO zm*tZB{Yqt&g~y3q^Se$h99OXG7wk<_rZ0S-YlJ{(!DxZJqr#RtP@`J$;Xk~EL$`yO zM-~F*;jh*TO4EUkwR<{V71oXNj4>IOs-=cbSXP_J!0cgbbWF_e0D8zCh#>VacP?c zU;hG!(X^Z8Ut(v(&CVJ)1@=E~zJspDS1%j`u`6m)V1zEgSD->&0XK?OqoaDnThXiH zTfnJxWz-fyS5F(k4XaYPJi1AIfb8x;*X?@l_H+QWQP$9A4|NU5?FhObUo+czYC4&`H1){k8QHBGf|o4YrpcS~Vzbrc zwooO9yu4pmnC=GVHEnvtyUPiJrXge0pIdREZ5J@T|Co&;i=bN3?W(c0eg$G=uQa}d zf#asA?+VHBX#bq>mUI}H)KMWQWg0z!U+w&1=eHEJucY}>fx-2dM0O`ghFl+T>+i=5 zU5t&@;5NTJa;0TL=G%_-Z8`K}vK>*V;6ot5uf_>zH*l^kvtzZwf4t}ZOo|8fCj;A#q- zvz^YTUr!~t&l~veLVxXiU-Nve|H8R?g=B0jFOh7IxLK_N$AJ~Op+)x+6h+Bdwg=db zLDrK)R>ngy+21iw7tqEl>lVJzLnyoK(pbNtGB9JFh@q3Och;hWu8=(da(giPf5NdnKG?Qo9pDsY%d#}RX{(iJf-C8Y4QwTYpv+AOM` zu;8k%dz+%5e~S`ZIDd9|N1P)3*-R7juPb;8l*&{9m2pjYG<+8EsFO^{d`M0WnoluS zyzpYWoQPgnb`iIdbcW%lawRqcZQx3E;f0v8tH{pWmbn5?1Z`T$T8u}(KJs%#@5qXX zpIvtoo5acW`v`hGb-{)D&WX-eu-9ml0%Q^IpN)^ZBCTlXhkilt#>~!kh+9H7iF^0p zloDwI^uUzp>3_R(4XYx&-i-?^L6TzYAY)3AuRQE>z4A{sBHKvgp^|*4<9u>@&NZy; zC|_9J!&2e+DJ(9bKIQGC9?V2P>rpfHMAA#6^XI=s8SOg74fz^>ejT^hy>7&na-nDzdDf^{Ghq90OEfG3p+a;J^vc zP7QJ6c|H$rT_E;iW(g2O^|V$8-N8z4XPamKLpee6AZJ~e#CJH&|Y{6-y6<`bJc$GHJnW4x$yW( z)LiV^gYS@5IWF{8)3tqNnkkTA_kaQI`W(I%zgb$;AzosVS)FI%Aetv5V;}n~R-6uL zcn^C_R*h`=Qs;!ys8r<2qo8NMYzXbVRAI(ZX<3r8A7d(n@4;vAC^*mdjok0tK50|w zG5jUo9kGYx?|Lt=wCoWz!M}|bg&?3BAVdj*<(!>d9m>vP`@8;zRf;m2d?@s;s_I4q zEcmOm@T$t>>xpx=MOvVOoo@*fPSq~-HoPM12d=uJ3v8JimeWma{~c4)D)|L5v-}YG zi<(hmL(2-EIRzht7IjXpBr zcVSxkq;*E!5;miAItKT-Tdlo9mt*Wtx5$$n;pMcV+fRUs4`W{$q3U)0DCUajmC10T z9VO%|izYoyL}AM+G?H}NT21%~+b-46hmqAps8Cv5O~`ojWJUzt?9h4F;iSFq*#~05 z4+9T0>+0O34li1$J7ev8U!< zpRBj74alv4&xWt-&?28os(ctYIMTNhy-JT(AV}Fc=`bF46>s0tnWY`FyGjS0k>$f@ zq@MGeo0)hY)=YNCR*z&J3e`s@=Jyl(ig+VNQNx6$S<<~=MOayA_9K?oB%2k!pd2OS zG^HGsAJiCkm$YMa1?cXZ@RgL}Vz8Rn7hW3D#7mzh7btaNFJugFHXqt~&A#u(!wMg8 zom$cL%P2S+R7af>OUTq+P@1(=Zt;XGf6ZonTgLnSQA=nMXX4axJ-zv-bqVVXy}Z+n z*Igy+1_jm%iwohyCC##M0FGpXg-FT*{i~ za>iy}uve#7DNMQAo6UFCT*Zav(vNW95pD&GQzdhUaY>qkjAt;xkfyO7fTf_Fg1 zK{BY>%OQx`twIyuQ^FdLt z;%UW+i-<81!GpeEl6$Zv05q0mA;|h4N6FR}8-ss{$seKMKg`E_y!xMpTjzagyvv>y?rB zcq2|G$9;7Fnue;w4o>B;DFMMylozgGOlS*vr;8&$^D!QGY&p&*Pd~(TXhI;*apdSP zDaRRe4U1KxI4O=lu0;;BV+Bx5Sli^fv_nuR@$qkz@mjgPp^al`ULFPmp^uQZoZxn0 zOT_C*bQC_0x)hvS#M&VOc+N*X;#p#IXqEV><)k!N5~6xxBTi7_K&})8LhYnnV!rn) zbrEtW@+VzI-Z;~V_;19+sf9oH4RQ82>TdePzdc{)X2H+Y5nWQ2Sdm^pk&nogz@d6jbC}?E}*A7Wm56 z?KaK6d*!X5-}K5tv)SRq9nc+5e{|-{OE1^^2R|)>U_CBl>g)VO0)ZmPdk|yd^K)2c z`yz#W3AXU)OtJMTacKOFHzAt4u;C%0MRf&ntqD~$Q|fC;^^fsmx9(s?L}yk^aC9sj z)ZX+lPG$QWa*fT*m6$ER^377!AmM6cUw z$$@mjdyMMdVDy|=wdXJ{yJ2)vGVK=~BnBZ1Yzd2?%~qjnO~D-T^62M>pGHdNAoULO361o3RNC*kd8I!aGrgdf>rR$WrD8l>ECsWK>A zjtZIhu9#)S{ggAetIi(7kHZ zhY;zSXs)TvQ29nxRu1E!l2x#2HsTxmug^9k5X+}=u}kHPSYRpC(60{GecGsR_s608rWRIBv@4+@umWw;7V^?Tc)%QhXrgu``_=$qMaJ2V`;K6)U~W zcBVQlK`0t=Q03U*Sn#AaQIQ3FFoglsmxvI?9Xx-Wz8pmuquNC68Dz2>*k#rFjgJy_ zYWu(ltbeX7gjPZd=8RAqs(6LoxTjrZMb{f&22tjkvYIxwW~$=m72$A2`ZsANDTi5A zhEGbYVi_Ibi5cciO(8brYF`QPm|ielE_x=WKl`c`UNm`*W}{ci09Ah%xcmcMqy8XdjpNx9!E4)@>bq5kRjFbp)IUdWiv=?J z?Y^So&m)dqp3l0+O|5LDs6wNw(y0!5?L$*RPd8P?0nJB6<<9J{DxwR)?NMR9(XuDH zQU~2I{CLw8WVB`mB&>PV{VqzlMW$8jak z>arR0PJ7scS(@wagv%ehvcY z>~I~N_v2VoCj@ddBm`A9<|5f6RzWHW>acphO=n`a>x>U1ti0KBk{pTpD)*M=KEq~~ zmU|+8`CC?G^-RQ#+r`XRKEYCABqtZCkGVa?d0T1rM%(DFvV6SsTYAK<^I&g6>5oD( z)DZHrPO5i~ktfZl;*?viocT4Y->&>c^Ty!4?iQ7%O!$H$=auJuFU9@C0zy1NG0U<> z;|du~a6189SE}m*ExjV-5<7>u6_!3DQNu!cY%55YWusHPY~AP>Oe0p|wn%g4pF@8Y zVi0NlEXRWr@d>4BZtXZ7+%^JmYOjb;HC4QtU)x#L@q1&E!I3hwpe7ZYv^rq{^9mdb z3Y$pb< zC@7(Aos)-?qj!s7Sa2FF98uZ!tpjQRwTs!hgrqbLDqrt3kgl$3j? zQ{rcMz|JAXDJn)BS_Lk8)6UXoLocZ8GS!kio4$dT54L?mJ?b;;G!L~3eZ|^DgA8|U z%dR(~+o{sE`W??U8NHI%UA1D>)SZWcMXis=^?GwOwc^`#ZfaGouY$?Z^AJ<>*#YrR zOS{!1O6k(PIR{;)_AWASWDT!k)bQa_hl`+)Fx%5vv#Q6YUM7&8x9Mx=y?ReqNpv%a znz-5g(G@1fHEhI4$nCL$?Zt`VLY%~sdc4N^=crzN9>m9g_udFKoyeQ7)WPvyt*5+ zO<7d)LBus2FrC)-J6ESzk{65zgO5(IIS$Ws~+1wyq*zt5y@LnpIgzpt`13 z#0|+T#Ki-eZ}maCvdfBFRTpo);O;3Fsg_Nf>(s`Dt{YZiFyGN>h;7q~gtac?jhmJY z-ihVw&%RU3_KCzHXM6jGc|?Zz6U5)Gmpj?Rpes*PGcLU&nT)2t$@+nq zc2%nB$mfimbywDL>4e7L=`Y3KyBLZ48A(=-${x6D+9S!YOIdO7Bo{J!xz1h!(F}z9 zGL@B{R+GAP+8SHMm8V{Ow1G+QAxV6wJp%6tNo`!F##0Nho_i!!N4)#To>7x8_xxG? z{VS3YBBO*}SBE3Mldvo;>|1%GOWR&<58EAUEXh!J!)Bo@PjbNz>rBB`158Jx=uvadt)!zd3a?Q6q}Bj1rsep5 zN(j0J?V1k6N(k}K?pGH8B=={R-CyrQ16KP;soNTz0xNk$^Cd9wpf3zit8CnYOcHfNvZ0&iT>`0bqUYJhGSaG!e1KVpD0EA2vp-S71Cwu~v# zi*ApBUe*S%U>Y~Sr0?9^sVsg<7N}@+C7=JMf?qp?IlWO=V#>bxI=u)@O#fO{r6@Y^ zHT#>T$=aKuuSTVXolBYMH)N#iu!)I){)`MVK|V)%#`-sIyDzMTtImbNMZIsN%%4?@ zK$~-`=lbz5&uJ`tzYYF&N>QW`Hi>sKZ3)74hV1(k!LjVNw`ldOr`v0&2BXc{1+^8- zKM;=4Ky;>GL}uKI+T>N7Lbzyhu2RUuRR?#3Gw-rMY$yO%mr!+oZN6&uyCtO3#?XeO zHJXKa)l21B!I?k@*Tq?5a|f+(&z)VID9Dq(B=kZH&>N7n`!TTrlLnpUP+;R zp~oE`OGa*7`RC3VB<$HR9SI(i{ShH!etv>Ugcf&hTg3c}^KdNOu^qF!qmxDF^$#MS z>T0NM=)YyV=00K}J}YiraiE|?ktpb2wCT{sQCE46Wq9H7*#}FKMQxF16_&>Eh0CVy zMqgF^A^P9}_$}t&4p&t^n%PmD^FBcyI{P2sGFB3ic%OWocr^3=DsP9+<%9fw_joJ1 zN!yK1U-Vn}HQ)AS^#}CV%ggmQCRjbX=KD2VwvC$G&b!ZG;P-i6PLUI4DnT42p(GEa zc32MefQNJMQxe2xN>04Ei*O%j;O{fqd0JfW)B(RM=$F{<ND4PuNbGq}^65kxu#RRwcS7AC6A(+=$%no-diXe&|m7XM0yxiV@0L>Jj2*q^<3ie7!5ZG%AWjM>9aeG| z(Dy@T-3WvZY>wv(;+I^9hCK(VH~d#cavTi~u51FSuZ@h<6Mfdn9GqDkM~Gg=RHVo> za2!%1$&qGQCazd))e;Qol0-{P2G`?rx#^PRIPGu?*!*kCSXbY{tcP=&49vt>*U=wf zUN#)3l_cXtes-{WS+Ybsu$K!m(AVMFe$N|14;DAp>E~PGT}zfUT`B%26p*aV8e$A; zd+g)&)o?oL0yUu7%{ao$=={oi5p%-RJ}s_6FJ;*$Yp;GH8zvo~!ROU2baLmlbV%b);)hQmN=h~`fnYg zD)m_4+I!}tJk1K-gzF+)+j~=BfXqi!SpWS z?!WN1oYncH+a&JD8zPL#;9(uDqUm^r2#ZO0l z;Xu~)2KSDfZ5ASR3NS|2))5YF%x%9u%aV%_^IkgpslZ>1B?Yl9|Wf z{^UG}8kvn!?x9@7N^{ICw2O84Tp$XXLErh4nM<*<0Gt54XKV+Us^hfy7UJU=ZJ5)szaD*hK>j3|UR!Rf%c@G|+h7WSkZr^EJ z!AAxU+}yzDZ@77q&)*%jAsp$*da^A=yn;AL1a=dNyMeZ$sap7l9R3!aHbNkdWM&R> zh{^!zP{|P^NeJ+LX2~YL$fC3r<0-Gl+WN}&%!6ix!O_$YB#Kd5uAHHYzU6xBK=O%-0TF)t&E0?>u zI1@-$B%ik}bus@xc1$pb&!MRvI2{Qp+8g`-UMyA~F8Iaij9$fW+^W@@wr2&q1`3|F zrOEq}x~i(XlKNz6X#^9juT@f)yf3Y-;MuN$X9Y0%(Zm&jEsoM@j(LGA6B7ehI9f_e zTO2C_6Iq>?I$8o(BsOH++pyto2H$iac9{H2b=Qkt--m&?G#qMu*%0j$dN&EyDfywb zuv=8L(WJ&%uo5R%hpNt{oP+Kr$atlNvN^D07uoV1rK31<%W~Kr@-5Yn7u76J!K)wL zTy~ju26lvGnQe;t0Idain@8RSX{HSH5eWS|bC^mi|CAFcDdFsED#@b4^6K9TXs^KN|=KNZ|v|k{K{* zwcQ}gKIUq$_WG3w`b1bHYCB0un<@B;CjWa!gRoO}YC93Ag+GQAq4Jn2vmdTc*b$74 z&#r97&DOFJ_tK^Ak+L%P>7`3X+-0P)WI-4hS-La;QvPAX1mF)%wgf*1Iv7_xp0I$M zg^6)XgiSGyk#W~J!;eX%i3xN3zI}x$zf@Ig!}ujc7`@Ct`3HnjyTL#wlNV`L`qj_l zw%vwRiRsppRwhywX{dUlnOw%8mXZ_cX)E<)${@MHFQd`ZDFu67xPQhvv?|xW_4zLd z03#5Ak{Fm?nG^BtD0g5WxOt(Uln10!wQmIH8HxnIzB-tPF&!uTY3%4+=(MDH3nFH$ zW1*6h4_7~{_J@2QKuDx;*N;Xk1`?~A{DQeR$*XOf^GD4kEI0}ye}{5gAP6kO!@zH1 zEVUfRGGU@ONRKqks%l$1koDImYv*aW97Ez_L*7O34Y+BWfAF8`8D1#e;nslS z{E7qKOptlXv*?G1uSZi3U!rXEL*SSVky{%)ZChrgGzAmoz=yT)Qw4)jxw(4%rq;vI zR~*~h8F9`q(ri;o5xy2@O)z9x|Dtf<(w0lQc7x%tzJ9WO$EbUy+#`*3>fu;eAv-!+ z8do2iGp%&IzNFahl8}&2yTOB0ObRS^)R&BpXV%9R2f7&FLYu*i^xKLFEnp$f3SS-V z9h2A${~!ncF6ZA&YKRbKRA%N(SfVz@;0z30r>sw$x?p=7+O&p0#tb85H8i zT`Rbxmt$~$H!sc8dDf)7DwWuUlCSf{Nw*T={d4>I&*I(l^?Z{{@1`Uv7-_MMyOPU0 zI}7dY(j+7I#HI7>np4IYM1I_;oj2TNFZR{n(s{t)3T($c*1q7{_1ZPQ5>UBUuaDj0 z@sQ}fi7l}n4{GZ55)n6U98|=U%Via~hVLpiQG=fwUG$0&`sjI+=n{Ml;?qw&pUKzS zOzh(S2=o;0lQ(bq^>?1mS6I~|uX*nrw8-q`6a3n~6s64@AZ8@ET!qhDJ6oGpBiOTU zW;Wf^`r)~HaT%_7SK%|Z++6oSSvJDG^n+x@JT_-6_V+~|#a^Xbqc~^f3KZJ?;Fuzf zvSMfOh2W!+irW2(gN;E<^P6Wpb@pxDc}2~B#l`d*aj@BjX^OB&8NW${Y^i^!3R>%J ztd;JPuG*g^5tr?}T!K;jliysttJn&Qx#S9tkC@7C^pMGHNWd~Fb$yu63)iNNDiHB% zY4EIB1Be^OqR3T%tK*61%9?7C#fzB>p(x0Poh3|!S`431!4Bx;$bc`tJhFn6T2Z}O8NNS z>e@b2USuA@#nr2B*0%pwq>c^tN@6X7oDl!S;M^E%dSHlPU*Ow4we_!qLz6`LfOCb<|C0}sqN5d7ma#PRN=xi}KwDDfP17{k zr#Ora$r&{|OJZHPGgsJb@@HYox8at!O_+sF$HV`-za8^ScGLyA9n$Hs{@IqYjJQT& zA~z->*0SWw@(_nLG&q?OpA>&A>XGvl^(Q z_7t%@@bRvN_?hUTUhZCB#5wPFac!>D#wBuB1GT{F;}Hy6D=>qzo?7*W`{1y`^jRsQHtU#AQHDCvCd5amFE zz+JBVo>FH~g;GMnc(R@DwUG?n<&rpqCH6@2obAW(%=Z>%TS@F3YH?Z8+$Xu-?cS%p z%4v18XP=6k^KE$ri^9e+?GsYL+LKKJUgqLPzGRMz!Gn?8o0&vcdo+>d@|<&@+nBLR z=T5o&?dEwbGWYX)EZfNtY{kG&cERM|)7$W55gC`g?j347t2F7gYS!W9jPm_>E*brO zZOwb*HyA~NQS}QbTnJeua)=Vs6XP6l?QAAhYTfb$EKDf0G>tL(G}%V+aWTL)F~)3a zBI}O@@yrp&Z`RxlI%bYM!GMH2qbK48$O#)4@dHI8AaL=#BvA0gct+p6dmw;o?(##? ziCMF?-gHfa#iDLZ&zz%kWY&icr~8szVoi{dL!!q8N$GZoBQPl3A#rD9blYD#u@zLp zOIDsvaB=LCFzBY$Mv#k}*2AJF1qY5Z_|sQ-fY_R8mBp+DS18x%3O$ z?akWqO^b`S9^QHK{5i_IJ81{*ss*Lj6D`t0l_@MoXf}$o!$So*v6gg6XmqA5!p_VO zMzLePveK6O72&$}|K|U2&Q)imYU<2pO?^h%-2C$NGKQ6JWy&fRRLHChKEoQ#u{CHD z^4_?@j=n4}$?)kD#Ofdu2kh@Whcv9||F3%=9yp3ZWFhX^^@xlNp4H`rL_d^y!#qWt zn>P)FFEmXdgaa=?IBs#n>ezF;mRJ8o7L$L{!RW+zDDBd!Jzd&}5m zQhsWLIbJrpk`jXR;PCNF6M~LOdovemZ+MJ^BpHPV&7nZwtqe~&Mxk#g zuS4R}93;ZrdJo%x$ImiS4WnDZ*Ru4h$+UOEVOJ^YDruyKC@74(77rVxNOFLrhWX8n zSvQbJj*>>XvgbK5upv;veOg+;;%1TO+Jw>pDxZpMF7wtRgN~G7Z#(MoCr=lU%x=~j zn^-f6HK3OKjLE^=IpA535{N<7YWs>D#Lzs{od+K#X9^juB*$ev#Ii&xHL;A?LpV8) zLf3wwVS##?+)PQ8h7z)vZmxsrBBZFZ#1dKRoikmDwYdqIVNyz}+^m;Lex+UF>IoiA zAjK6)03*PLgAYg)Sl5t|L_D^53holfP5-(j&fYww>U|jbe%0TB2s&JRK%pOJ=Q(pR z?6h2V{DaN`&W(~-bDJ^%QUqt~A{En*73T0X5!2;M!6B1%QA%U$OjBU1?Ql^jO>Ls- zP!SzoY*6du2(ntxfFvaDxz7?L)$WBur&_9N$>5{O@RCkbZl`eoCP2--r?^H#vo zW6|@%Qe}V1UHQX(0T*`){KV`lpv0ns3S}bXHkz5NsiYF&P}sw}(XS*d``u#l}U znQq}8%_J(PR&$G@-I=@Y(>~pMrp!Jss`rP1;wTngCwBD^KZkdF^e^`=r6r&V4J~1B z`aqp2EUCSv*Uy;;QUv0p6eugqw;Rs0r7;Xr4`5jB6;r|AyA~;KO~gHKmWMqyR0d< zR6sV`G`+US!zXypDEw}KB$<*dPclSOLNY};K$cWVb6joH%Zu2B;W@7Isd3R8tt=pP z^kv7557A^=T>rdljnhz4kxoUt`-V5AH74lfpVlozQiZik(V|C?ic-v1(SbAbt`VuT z#25$5I$6Dy?47k7Ah1Jy#cXzwFEmeV^%b$X3r%r739k{$E^NeyHYiHC1N@4WnF@TW zGoo6)t9@Bpgka{AYE7d4AVhp43-{3s>F*Clh%D~H^EQn~IO(`jqv4xQuGDLYRXt74 zMAPyTTe%WGU%@zmgPK}su8b#S@{@#&{T8dCTt7-q&!4LdOBKV!v(tT3OJ<_Tu%d`^ z1!BGeC3+q`L2!lW0}L{}J%v4)2t!%VxRPpVbeS?KNm&*XZD4|xjE*6JO0dcx2|$_v zJ3aKrjQZrw=&kCez`<^UO|wLPhttu;URcPG@-oUOwY=eH=8^DnPxx7x!CV!xPUu0D z8B8nf%%C9o#;p{Yy$;w~ZJ9Ja^qQ6%36{ZFFiY{(Cd)do%m_uq1rN@OGMix}MdafN&JT5Ca zC=X%`zHsk2Eh0Oa9nYS0(`2_=8{`XYf~L@_3anG&SKitFtfb(7M+8bnk7G(E1k$%{ zKDdn@7;8o!AH}kJ7so*<>F6ySFvGIeqVz4+YBlNKXa9%ClELVP$|fnzRA*!Bp&3$b zy1MVmKB`uo@#pK{F>sOmyAax0$)>Sf)Ukj5~)!6i|?7_dH}?9-m;hhv1JfXSt1-JaHNhy2utl@!iipfMGznOW@4` zH5=!k1tUqZVNMOZ8eZarp(da^QSjp$6fX6M8MK*k8@AcKmMcug@=dEyL`V(_vxf)` zV#0#u-yJ$0LKJPBZX$?y(-D~cMKmG3N5@5(mIW=PGZ6Qs%*O0Y6ly-ZH+KH!$PBdJ24h1XV=JfZU@Gb?HLY>XkAtJwh8u2eavyFaDmJQ3?%rb%mTzV|= z(|W~ZctA2cJA#EJS~S2;&Xx`!NMcK+rvvPs@h86vWMO#`^~0PXYoNyz6clJno%_pF zy#tUSUC^f6wryL}?w)Dewr$(CZQHhO+qP|O{~P!2?)OARA)*+Cla=Sq%x{2?DOSwc zUy+n){^3GjJWw)(!|SeQk4!{<^!hg?Yf94>j_%J(sn{GfflVN8nEeJ~C=Aqia$^5T z)JtE|+Ml_NM8ZdBI^M(t3(&6kNW$XFpH@sdXZ_-w@}gI8|Ik~3544KXHCYn|n6KOY zyurnP?3JVb1;#9xPV4Yjc0@@=aZa|9>7XIdJD3eepDZ6Y5vrG3Y1CjdUjtwx{;eDy zS&@;N-;Pn3l#N!zvkF(vAeP(H<~=!tqsKJH@}ob60MNY@CeYvovjrVru=hL@kWVsY zqoP_qheLf=CUMjoQI+s-Pavhs+@XgtdB(>|Nv0RNV{vfzmoLqEO|bWk<(D@FJ;Eux zF)%(3`Mgilu+)tcfSAL^8nv&y8epC8xUDIJqh5$?rx2{&Mtb5g2l8xOn?0?pmr_ja`!l0*N)#} zXbsdpMki%+?m*$>;xxB#1-vIcyUHShICZe-d}@))23I(I1VBf`9}0HSl41_(WpW{O zpb4vgYYa*ArR2hfcZ=S*tWj6Q3TpNIcGh><|G>jfSpPOMe{l!ewR@3M?!m$4NVic7aTTP`M3ij%kQ!BRGu=+Amj-H_95{$~xCt`_-M9wy zz>lu0lu-8sFG@jxre&i0*9e!8PN0G2AkGyd850QnD#3Z2?ktL({LT~!;G_dyYxY7v z)qXm{Pq1w;_vHTTBB)>B7I5NVJ8VkD&~_7M_{kaKxRNe=FvAkRy$(+7Ml(czSrc=N zA3E2cnSDB_HHqAvPZS{CwxK+N4~Xe)e3XWHVLKY>3a7me>)?g6>mLa~gXn{#_`Kho zKA*N0$sreqX8|&$Huze_fSM`kDJ7uVpCKB9juEzRaxVAHnW{VPZ^y4_ZfQ=Rh%Y8?Yd*|xOK9ykMz>QGHb|Ea5?LgYZ8J(V08$>+8r+5H;)}^b$ZxcCO-mudgA;L zXCVsI$8u{u-)LO242{I~bXdY9jq}YzUFN5;Hamz-4%K{L6CNzYu`saM;}75M1f0{8 zVd#g`B2x3MYEWK3VWY3)Rh+~$7cySuLCJDz4T+1)`BHy0OB9PJ&_e>Z*XzPTyz5Te zE5jX08rNJGh$(=zI~O$Dd|_yDIW0?>28mcDBj53H4X;Wza4m`ZH8xmElNb1;QlnLq z7>@!a;|tpiI`@|1fcC3%Z4)9h056s+zZu3&b=Q6<@1kLB5Mo7(y zh>*4RPf)naMRw;kna6QuM1)pwP@RX#ip#}#RJ4D(PuDvrpF}T5pW*2JazVgk@LJmS z-DO;@2erqqa>@5%U`#5F`BI*Y!gDDg3*D{egLspqzaw_e_(EUEtHpYmpr;3;FtdZV z;5H?~Mz0`iQt`Up`IfkYgZN?qgG06p6bd9zDr`mmsuYzp0V8I(y8sZsQl~aN!qF5P z(SG4lw(YQaSQ+?Bxw))Gs2^e7s=WhoOx^&vv%v~xE^8;@9aZ*^{Y+aEk}xh}3@hr| zq*tv$xG8u>bpYXz{Ja`K8~N}2tS*#xz5YxjBg{X4cdSnD?<~}$@!CYI%lovs1 zP>bzAEt3@%)usx=rzw%PD4~oy`)pn@oMA)?vGqmP`Z-CK^{cZq<07X~hLCm3xS_apbpJfl{g)@>7N61oU=k&TJdl1kq6m`+LqDdlVuaPKhZ`*YN!A(l>D_m z-&_BwaRN4cTb-lDfcy+WD*8OcQO@%0b=zADA0vbJ3))XEKgbL-}uwb4=@=;gNuXHXYkJ>k|4Ap z6$5F>MjRl&i`TbE@^Qz3gziiM1Nfj9*G6&uZq+MJ1Q^C1$H{Y6IV}Lyvx;A!q8|vq zbzJ$9fN-nL8z5e0(>I{{pVb@~be8S6n+ge}aWx2qZac+FPC&^uIsH0XT<`JbXdERw z((Qm$mAn1+QK13*LMN(j5t@-NXr%bLeywZ;TrUqsIH9gn6!eR2p%AGtULjLJlNkFQ zZMONd!=lq<(!&cpPikwLDTco;O^??t)3*IY21nw~_xiEBTLNM4=UdAtH+w1{LykdgY*^>>(Yt#$GvhTrEl7c!B zq?oy7iKA)XO5qt+&WOojDztTNM)$43SJG7tnAuG3PZq9}(Kp5cF zOzbD#;cfSaZ2O^w+05yyM8tlzIFU5s5J_Ol>5GbAL#$~Mimpff$JOf!ZpPR zI$KF6)rKylC@|v&Q=$s#OWL|+rQ_Xe0SB`4Mg?_-@b70PTBD(}wi9Is2bZn>LX4_v z^-nuOl1D2F``V~QAt8kmbJmvbtMU~0_$x5jDP-0S!M_g3FU7zc+A8}>&c7~yXc_;2 zy^`eYf@uooTi0|?Pd~kyf#jzgN!maM@kYklCv|$Y(~K}YHkmjq7atSv>(ULzg1lZHY6duLDOIt{x2`ef{IrJus3xp91VQLU(cLb z0aq?C@c`>zS?;;JI|wWW!-%5pO&wofu!(TecL9S*l$f^2j&y;lgE8M$3p-ey0~py# z(x_mxZ-_}OCiSI5>BcrySeWDUm$Nx$+t=TW>^9@(+Q7=%B^0?&3e`Jh zSSWoA(M##xk*dW99D`CtA~$l7ie_H1iBql0TyhL?)lAt>%mV^Q5wZv)CO*gzWPgs4 z!+S{F#8-G9@lWx2BQy%AAey!B+ZcCib03~Q%l3mjU2Oo&oS@Y)9JiUn8CNkuI zxFAv7jS=Kii5{W`9UDUbazPdfb?MQ1J5;ij?wy5i z71ui#(O$cYt7*gOlpNKL|Ik|cc4!MYcZ?fbn1pc#sEBd*0XeA|!KqYmK-;4s{dp6( zWup7Ea%G8zCgu6V2R%~^fI?eq#ch9hOo`1Ro7DetiF4NO^Qni`u(Thx9yRh700K(+ zKzp$3b0DfZ{PRPpsWdt#`$+`Ujr>O@7kiOv!46vJ^-X3=&QH*rW<)YVD7bR z)T2XZVvUJkS{3Ele^We+EwS1AL6MMxoEPCi3uy3hXTQuqGeOX?h4^DFPJjBujZdE3 ziocAemTqhJ%X1dyWhnPg9cs0mjDk6c0D_mizi8fO00tKi<~aKraQ z8&g{?1z*&1c;&7vP)qC7_O7I4;Gt%(H$N-I&hHySj;Em;d}{Y!+)fFaDBQu1Mfmg2 z4q`|^TS>Ft)roDn>k~5y0@E_H?ly(-0VdED5QVx>il4R7zyLv7`gOk(<^Y{^1`bA5 zFVsLSD8sEGL?3ODSq+3-?KMQA12t z14d7nWbmgbRWJBArR5~J5#*AH-kIB{K|6ge?&o}{SFB`jWv>BsH>c$~!??Y}oApOq zkR&hR+QH64v}FONL)hPc_hM5M#x!o_M0y6`j!H^c74?i0_@WHH$9e7`c zuT5;HJ6giB8Bu%6!zRZ@l_4SNo_HVCg~t=Gkq@KR@9hS9d3WKNpjv6=eYV(I0XZs| zGbr9%?MWL?A$M_Wo0r^ZPA~nSm?6DX7p2wED$}?^9F2$r3kGGJul^E%5wmi;I#tLA zy0IW0E-=Kp$?OuD$t{fC<*4`uE~Jn`ESL9xQxZQXrG^H1}}1CxjT z{sG`rB?Q&G7%&O8pC$B@*i4~9IXP3Memg#NZ!`wtO9YaN@0IVA7)knus=VgoW^d1l z%CR-mHq*n+Lpr@YVIkYcXqWs+wuJ)T}(x)6@ zd^Wu}dVi0nS+t*ut*giih8lK5 zcKP3$bl3fANe$dgMQjxK>6uYL!5)TLvjepsAlh)KGrd5Lb0@ld(Q^Izj6rsxJjTOF ze2fccbu!tEuppX<&h{7T2OvtYmr-OFHkc)1=YVxFK*SpCV#n@zBU?Av9z)m z<}=E%gxc^Qm7Xlgj92|LrMX7G4CUBG+&>dWcMq)3c871jVzZYmm#7-rC znF=eJybVO3<|{O#k81vLIkz+Oofvhm{9*TA3-jvzRf!NGHH}ucz|tTjVTvvL_9kg5 zU*#aVQY&;%(hup$R~dzuHYbl;ubl`6zl8aOR!kzRf!$`z7#o0z6BbjhL~}yYcbd-^ zOJlN&hT@&&MQq44Ehp<< z&S3l3i>ZC|>Skx^`g9ln9;r=A03p*nk;cSuS~_4RN^^QGVB#xQj7pDgy`bBtVu7ed z^yEvj6MjKA7|~#0AKzGqhd1vZJ}zJvjVqBCVTvWxGmSg*@lS19A~PXA!!o#Ml~oZp|~PacQ|^x1A;7JCE&5%6=4T3#qP^4FT2!rP6Ei;kG5`#sL#HAT38sGF) z4})eLy_C&(T^s9p>G&2%!|Bc^2Qp(giXZRW){>MRbn}=F{*h)s^ni>3^gQh9THa24 zbUNrtd6&r0_h?*{D*8M%0^vxebBO8E2y=)xCw66rkUl(rjfKz3yH}W@VaRpXRLE;y z-^S*!%Y!bey-qXuLhsGowa}A1$GUVKHn9cXKadY^q9Z;BSES#Uj9ykGN$Y}Sfk3Q3 z-rF8I++d3|Q4}$@iKbg-U717Jhk=OI`mz2gTk&MhovklV;q$m-3TNMVO`cR*6`~mS z36H6or)GN2cX;5&@OYO23uohEwwzRL9C4*W;uq_W$(8GaIX$o2bm;mW{$R$3s7$G5 z6$tLW#b}s$zET{a4;lt(>Vy^3ir`!s_O%Nd5X~{YreSt)Ht$wT>=s-X8d+pBVenYk zBj_;8D+IDngC3J*#_DzDD$0<{)Ls|~ zMme;{7yc-KARG0sX=Qq;|6X&A^7Q9bOb0>m5wF{-84^r*XUkQZ#14xS#HG zXnQCk%QvzZVrRcTGFY-7sjkiV3hh(;2wB!r%wahAT3#8Na;$J=_V*Rey8QJYe zHiBDhGB~Q8JVESr))8=`i;1M>#mmV~n^1(^(5H*Jgf=aRQG~>G-~nmyI(S70w+=Su zia9OK(h#YLO(#YSlsSdVuP4H!Nd!w5W^Qma$=(sExfnx`gj4;3DclOWBU+*fkV+W{ z5KmWoK$<$agh8pZQV7i(WF`|4JUh82fy9n#yv7z8H`e{ET2fh3Fz@gcL3~ygiEuW6 zS=LCi7(+z$?Q6&?it`PXsu#SL*lxP*WjeR;iT+t*^-}DAL!HyuoS>e>5a}w?8g! z5?aua;)?PAD~7h3>k{nfU+A97#0GxiLCx=&Q{}< zgpc2LrWaXQgOH&MSpq4#VsWm}yo+0o(EUi?m00?ot0(U{=;#cSBL?kC z_|SFNY#a{Wx#)%~z)e)X*1zPeCol{y_6LH!bIKR0V;)Eg-L zAni000}r52D{yb#J@?2%8gJ2qF(2QCjxFLdAYfoQXcroshB(|m{%qS{T^c=;u3J$K ziPRVA*~h|m9B_Fe&ljaV2-2Rc!;v#FH>>d(enfhWZ4#U@Qhl#J6lxo4?=E)9!|vR1 zMtS2kZO<2fD5~A6Q0HMO`gFXfQpS78XIfpZaK7KSp&$<Z*7Jaw3fl zxai6Fr@6hM!Oi*9@$ODGE~2d8`ng>0(vcISXEzw}c@-p8vL)et@Ty~&bdovHOg(a| z<@|cplSA9(Fm^e_)p0n$rgDGc(v6c-480(e{oUSaTmm)d{pejV*#N&ydpYMe;!B(L z&n)j?_amy|$9q8&e;8h$93>sPPlgkm7JxK)+zs*9ms96f9f9i~H%22e&v+7ABLWDW zMA0Dd<6vvhU*xSgO=KIJXhstFr;y0Oa6hJ?ETF94pvQ7h>B&w)57u0c{&Js@)HoLwF|Gux1;Z& z^c>s5zD2Ib*R9pMo|WP?NiiA2?2Wo?HkKBFuMv@V>D2Y99d0{fc#jbBZs~18XgglT z$eRo;#-qstUr&<)+9{8v5{_dak6t#$*&qPW4k#bX4-*6IKLjtCMJ6U9ctw4j$?J%T zEqqJX5+RTIf}XBR29R(uwugy|i;Gjy74|4Cs5+PB7)=)Muc}WV-{Bsz&<&fzj9U>$ z^VO+hS_1NMmof&LAhxSv$-9@-2vgje0qgR+%D9OHFe|)AkTnGyh{B@bk=LlZ&JOZ) z{~%w84XIuW%RIeW&IOP6A=n_^Si!`5PxR5(qD9Xnye>EaxrGSCq7b0}W*^7DC4uP@ zAV-MN`6=mf1~L7E;z$Eof3$B#GGBD__h4j^BT8e}5W*%{#(qO}?>Dyv*<6FvR&ysK z!9!oIcrjP_Qd{Xj7vQ~nrXXg~xbD^4x>AP}`biZ@S_-4hp+mY)CS*Z;`|eEU+KbQo zG%qj3sVb7;#L$9hp#(nc^KDemyO^vp|D#jqfVv=&NQrdTKd1A>GKK$drcIfxlq9^n zyVI^cyyVEYwP;L|L`63Uh{>>+JP`9(`+@aZ=Y7WVF(;sy)Qhkek5qerGIxUGz17y{)J zCw0(p|LqNnQ!1>K>^Qw!ChP=^eAGgMjBO06tW9~#$_Fg=6L)PFD(B4eI2$Bd%7Az( zWf1#lY@=%iwsDdQRYt@E+07fAw6JWcU>a_%)ku(A_w-1~pGHZsFLvVZjUl+L(Lv+1 z{0(9&;{z)P)3IdMuNgfh11EhWH*=|0!vv|YL=v(1|1%60lhm12={kw|pI%g1W&Pc` zoT;$}Uf?zRLiO}1+vyzpu`{Bo3Afwgq#Z#t0n&ADN|zb#Q}vEYfsxCn*&!Qgu)CXv z$9^eBzW4&ZX(rd-$=qs&DR#SK+)KdpKeSZ*`#*dnXQliH7pV(_M3T_%a;xFr+5x&r zDe(wds2BK_1WTvwi(TBSiu!jQM%as$0YSEAXs(1k?JpZs&IJ6v;n=#(+|x|DPBl_N zkSE0#4;2JpLyXHn>13e2`+nzL_n0I zZT?eCB1@$bsjSrSVO6FANXkZ0B4`YO%5VSFSDoFs1yet7^b99H&0r>1R`{cySfA}Z zI(}wbch-q!(;y4>U~M8Dp2#kfUd%nF&O~)DxxL3a{-v z@FWz+??IGLDD4J2O$?c5C!gCgIE-9|YOc&qph`L5{#MA?wbJo6Dt!{LmpNs%cWHBB zArzu~ydm3%L(tmv$g3Zj=hb^^)z}>JYSmsQWf=az_}|Z#QA1&p@S_NuN|uk^N^mhz zcBl(&X3B~xDpQ&ym%Zt$jfsh~4ZM6*IyIo#huhj*Bnu(6`(I&*>*nlz=z)`w+dtk* z<8rj0iY)8Jl#O!jWzK&s6;VSy0-=mDj2I+~MitUS)#_ykQfOWOVWd7!7;-HcOYAp~ z7vDI?){LN(a?h%kNbqAlVNz43{f+xIlG<3sq8jL6uxrjU)8S3uxGbSKDh8hqFo7>C zU!)g188?QI4G7LgXkv#e`V3sZHpIS&|o}xQj$Ferq z39!Cc&mu6!li%fS4qs6w;?3Ve43qqNz8Non^o^EgOf zxhJ0{)^2kQI@*t(ocd{Vn*l>`xRXP8rGg0*ob$=COn|1s7BgwedWKkg`R@u<6+3+8 zGXksRR9`88+kXAMd|-^lwF>jZ0qtO2_HXyq#ZdWadihDVG1J0B2}MHgDSLFXD(tr^ zE;2u@kAS!c@M!5@u}Bxexi97`%$J0UfpYG^E`N1h5mLYQ2-x)JpaH=PYEjy?ZKY@( z9JE7^qjhw+24Q$)mR_i?ZcNU6TC*7TKzE|J6l{HK0suIfpOsS}KuH}aS}nno43I!9$|4=C@XqLg3^o^4nsb9qvxvi?eSOGdZ1fXIh0vR=bec1eV>i> zmQ;0xhH;W-0t2h91VlTcg{{C_0RloZotAKT4rZSKtY z%LcEtrX_tSL|@2snFI+l@`!hM0xW~!r$UWMq_@j4r=`>(i$5`GHFmo~IR4axH?0yf z%94c75&oN_zSb3m5g-P;ljIyZNJxn_f=ppcMM1q+ zJyY60a!;TFSy_uvxJJr(0sI0XOz z3fWvbXAxy^bf4%VcxLxvX?rpYiXg;V6DX-vF(}PKOBj=VugQ)j%$)JKt9) z_T(o`wur+lyXEXdsg#A`cby9TaTmIIz-@Z-t+fiD*pfvRU*XusQH#3z(dAq^9EJkR zQ)Ys_MwD)FdD5qz&ilTT2H^w5r4eg3;qZ`YUEoG~$#@UTVOs+>W10|1*Ki%K2f;6s z7?$8ttLpAsQ8Q1dSkiWt7q+OXO#2k1t$W#(pR}21$@~@n<#gx{>&2A{W|a0~^`PAk zi2gbGq6ckc^hzPFvJ+wzUmr5^ElZ~D z)~VRt{}1ZKDpKM|f+D8W#B~{|m;G0GS;FBNB&}lp5&wq{`v;Zy-=~j)`$!DaTJ*`e zthN24tlygZX;P2!IHsij}%)r&wR*k@C zuI9x6r=U7Uz5DjZL2%jKz{|<`LF`ucoV%2Vyj;#M>lqciFH2rc=zi~)c1^X4Vb=!M z%O>p8>^oIH4UhA;fL)F!z9%~U>#!W@^7gmo9bPPr?Gt@+DFY<73qw7R9?@9TR2VY&^hQCfXSgvYIIr^g@@p>B6}I;ej!6ZJaPVX2wZFj zEybYUG-$6SsRkNp=orb&6R}tlkYmxIKxd(Y`152bP@sMnf`ATV1>oLD z-$ul4Gi#VK>W-@_cIcJ6wYgCL?aBSMV@Rde&m%Y}WoKN4A!)!C!QQ&^E4>N90f8la zz!W$&dZF@I0_HY^))_gTuUu+YWrk0LD+&0JY6wM!3FW%c{>k_=O_V3;F)u7Tw47CE zs+0E)1cni4pO(D=L1AzZ>k``aEYS{bzk)l2VEG>|leUa##Spym-n)p8%#Tt`b2^%(8vP3clYvN? zJK!PfafC^APW%^nAr)viDRkM={F#C31YekW|lNC?M<<3Z-yD$;9^du%W3+>9RrFE|fIhhbdejQ$4R z-XhId;wbk32)&)OrUZP(&B8C?_OxN6Q1Mh8jY5zGwzsON2?Q_O+^rdEZrTOxvaFLo z0%C}JK_NpN+lgYF+!r>dwi;*(;>USeFN~;uz=9 zkc=`%93)I-qSdsaN81U)6kg`^JfUCK-G`B9wv=wSOlIOP1H{Y$K@{bSrn)-k179{^ zgEIg~kzsmpo=+`u+yZ|XA5+AC^!nVzh`2g363@NK# zU`UMTeoH{N*oFKtKX&}BsFb#GThOj&$)MY z+G^ye%`h@D)^K$zTWYL#I?S$6Rsn&MI^@vWijt5hEksU)NC0TcRozaI#ef`;0kIo- zv^rLlG_pmKh&t@}O`y5$r(LZt4}5`|_!XkaTcmeL@FY|h6+T`0wp_r$>AV^#YCY+R zBxDp9^84%~w+ecEbS50(JxYeY2~C1NH&&3b=4Dc#K1u<`P(B7>7&%-xKMW{yngkn@ zKpg@cNd>$BSXmGOnSP9YuE7i*k@0gV<@Qak{uqc{S}oj-;346Jl@CgDV0oO|Z%Q&e zE-`2$^eFUCJ`D23Y4*3*8PPkJr9YPSFr|tq!|;#v#Y_@p|Dkxezz}p!#n_MztfP|@ z13A0Vb2sNo^}+N9arj@C9>CHhA^IuBnYtH*)R*tn>+h0ccL{> z?OSj}(Xsy+x26|9LO;kJ=eiHJRB9^mG$F%RQ>=DOINgBYIbEb;4a#AXnp9UVRvLeE`Lb= zb1TTK2T7?zySLXa_?*60@$lHsmAr2wFI0H-|HJ-Bx>~dUDYfbrBhViur?$dXV%?IF z_pBvVSmY<;o!4ikbs-F;ZW1|~a+`=3Rc49!vO{9hFr&}takoW5Khd=53b4gwB{Wc6 z34hBrSFA9{vjPSyZvdg+W8VW86wM^fu}3r7n3bNpXV&0Abh;>_s zs9llnCXfhr&YbWLWA0EIz!&A4MN3}4{Kj)OCUrmGWW>a@VF6o5Wa%;^lFy!Vv=z1E2KZ1|A^i z6^Clco^<)f`l1_$lH(6*?WfarKOwmbvr`SNHtZMH@91VOMXh|P;7w(!YzydCGpqW5 zq5&Lq;i>PCoqh(g+_MXj8;{6O5Q=qfj%}}G%W-6>3fu=6=4N49FfFGy`hbol_?||; zN}OA?zY@q@;n%Y%7k74FO|~@PjU_7z6H00%@mBl>S?(fypFs3`A1Gh>*hKTKZ8H*t z(_sO2?d>JPt*;Q$0pVx8j3OmR>DtYiSBy#ssRVFPQSrm=)|3uQd4{ZSJ(DKnw|ET} zzpSpcxf%h|IQJER4a=hgq;A1QJYpY4(-AH&_C5KA3Ly31`2}GFMGRr+sF|7!O2-xs zGff&f7T&C=s@LTyPv+;>;61q@wW!RVQAqp81X5Ljbj|n$z{zHVSb_LV3rGPGXZLvv?MZv4xCq-qZ!--IgTN|agBwq6k#~jb14Ii1b|cAALJ_|OHhZF zcT{pvl9TAU=BehywAE?ZL_FUb#TmsQEu_Pyy0*+RW~VMpQ6mr!%53_nwY_i0 zY1{ysy5cNo>aiT2ehY3XMY6yB_>-wXo0plI{Rfq*QPuk2S85?kTZfVB8W2D?7}yH} zz#i>=BB@Ws9+HVy>ZT{GhvI1k*Aq;n;@?`Fw6aCNKeJ=j^(Fu>CahMP=ltH?m;RPoG2qP2pu7NuQ5oP6``&St-n*!^UfHFN6Hd_lVb7z1tzMBz<> zF?^S%K)FI4$mA+8}Xj8 z63KnF8OUwSQ5M9FJ6E{B4L%id?MD;OF3fMmrl-&{32ZI&n{0BE4I;z4X!smzOO)#j z*h$A(!Ns4qT(~91C(mNo2^Sf zuCtl;{DU?64a#7|kDR87{q|Q_C*z<9DRpS`q`px#H$Z9AaO9h1kXwnp)8ajFJN!6Ox2SPa{JryO z&4dw@QfB=d`r3%7_{F^8fZJsGpl70Z?KAWeOTp=%*3;gPqeyz1OX`!+DsQgs&~GpJc;7!8)(4(fa|0 zusx5}+v2J>foFsZ9-5^~_S}DxsoRvw<@PM}?L2{LcD-X^fBRd(0&U9sX`XMb`nuOp zX>@&J0X~A4G+ta}s9)Bn?*K_}20qvTC$L`EwLsu7BB6Q*Fr~V8Je*yGQ9Mcb2K7&J z(mu9L;5vch0BSh7lBk*gg0TC~B>I^ne3^i@^J=-8_(72(*Dog0W2ONPi$ITJHHF_< zZBTZNTHXxM4;`w)3OU1n99(N5nidl{O903E9Ph{shBY)KZruq%VbK-BP!715B2_9VF!M!rnhd56R)C>;k_3qK?A zlapctbr&z;OcY^d=J*?a3g=xF3)B$wCw6*iN^-)DaQMZ*vo%c0vY zEE8|iS+ED$c1yMzD$jpd@pi8@`q6uhAMJbP^Pv<6;}H~luk1JrjVAAHALuP4XI)RPhHn_`vK?Upcp-|3t?qpfV3cd`KI{bD=>Pt2;WxIkb+}y zvFW5Kv@kiXQ70zW)_}s{Q{M7q8yb-F#!J$tXL|fXPSnO|;K4V}puP!{o|8xa@by!= zYXF+C&oIp}t(H#WEj!g6|oms++8BoWKyXle2^$vVp=%y)YZE2&%~2|eNHjp%dH%_WQf zrW+K`0&Eyn&M%@aq^w5S7dbBWKTO7}to@pIZW_EcU;9l=?Ig)AXG)GKp^pD0s`}T) zUg232C4{JLM2yR*^+)KWM#@3SM#+DS$ozsn1AU(B|d1;#1 z-j-ykLpcElu8i4*|9Wt#+*lrtg;J^`JqD-yly4fJj;tT@4iu$-xK>x6TbL3c`^}$F~z+q@!fF)YFcxqAS#S z?~1@Zv*>Tho9z!GCo`$HsOm8U4K$3h!2%H0FA(D5ANf!4p0R^8KdGBKMTR_4%RmmK z5_ei{j7(&8fawl%IOamkVnLmJS=O>p?W)Pu@jNBkz!f*!6HYEP4!o&Q#fN)voMp7w z6koY%|Hj~kTIOb54O16UCr|lcwL-8<;@{Rw=<>?v(R0QfswQvEA21a1@`?#keW|b< zR-H1f{MXY68FK~5g)b&MgZ5H7*d_C(OqtNLKouutEu2^qZ+Y;OIjf;)YiLy}i|Yl{ z0x`J8LnsVJP)kTH;2%M;ddf-Q!k!!1%Wj*`r;Zb<(C%X^!>;!8`KII5WN1vUuhcQ4 z2g2%1@QGL+-H7==$L@zNv#-mOR(u|oPNoN0{cy(x#M_YSA+9PBjl`00r1TDy+S)Nb zakY%yA0(eVga{BIKz_Ug2v~l+?2MunwnH^5fbh57LmH_2cdndxF*&ZnNWT-GKEqe- zK=mWVjxs`}a>X+FoR-4+#o+zMTfxvjEu0Ap2Q7l@d%7pzYDLhH$cL4JJ^PW_vN! ztDaAG@X?+~ItT_L-Z*ZW{?4d{%5sIs(~M5u*KI;UH$rHn)r5!^Wj!v){XUno7 z<3(=+lb##J-WuG)Tt}AXeFfkH!;abQ1xA%8c7$?~wp+iGW(sDcg)!{!<1%k%5t)Yc z@E73m&=&v*g5dv-T1k8X{D)4Ba=QUlteeF{c4%D#TG;gB{Gy^_cgV*)7y!uCAwbz61AAyc(js82 zicSl-yAZ3CqQt()Jo95L6QtX3rAvFc2&$hzNwG0gj*43#woPfd*FT zgrho)RdaDhwx<~%YWqrGRHSC*4z?ok_IB1?aXgVWFOx%J{a`9`3vbUoG&moN^{qMq zzQQT%04WY93Hc>gjWO_yhfizNg}~f6dE4n<|065Sf|Md<;FMJYo7W?>S^c~hO5fvO ze!?H#0Y!|;eqVYo)ZjaM1ym%q)z$FWMe!pkF-41pMknp2TGb{t~Gj`-EwhTV%Y&IfxxQk3jc~S=EEyQ3dk}TAxzf z&-rq8`_k^>gYghIjc^5|4P}!Swtq?dX(+ElSb8lPZ zwnP(dprMLMZ^(U1>m=#bSth%f6$sb1wV2U0jH&1;fwS}vcxB5z+lB<{~t@6L+?+Egwx^s5G{Z=xB3Hj>QI$##DJ8{~za!8|2CORnuFX(`I z`mTHjQJ&O;b4W#Y2vb4ZyxPM-=!yA|lktn>Qs#SO)1}R!+ttEe`oi_hVyGwuSq`i` zvOTe_%&SdR#BQ0|)Na@J^e=hQFqqP}J=U(dzBB?~vQR&i8^vPh5g#~H^8%U_V!m>I zQi^@C56NtlfsOei)==P^GS&cfNSV7CP;i_1$M-Vije3@_qfolmkn=9Gqb|+6s1+BN zBT)|E9f4~vKI*rmMw0!~)@zyP30ugK9dU8J&cK zPP$Fu+XYx_J*uG2gY|OIC3R-qi}aSzC|;me8#v17YE8ngtI&lir^jZ*|D4|L5YDc4EjOL@RviF;R|Mb{7=y~sAYfBzS4~~4XCV;9s#8@^?I2*v zlDqVrGOP$QOqlVIYTuk57@#fQgSHCcl8Ewn=A-gOzs##=-uv%7m>JJLM3A2=L1=3gT4- z+Z*DS(0DHh_n~iSz6hlJ+6R}pF5N358D$0?Fr~O0N#kT9jxFwcA~!C5JD zrs#9{DbO?Z1Oz~j8rgnku-U5%EO-e{`7l2W6rXzzLOe(rV}PuB<(TvBvVo1Z?3 z`XxMk(m+t24NL_4x>kp~Ref)~5{xv@)ZH}WUd#Faezut>qyGy`H>#bJe-dd`xdlK4IovPPP2&Y-C2FTPXjH3p6Gnut_#ABJPDhZRTYGHj;4V_oSBlS6Td=UXueQUI$0z5u63nsf;+3|n zm?~@DOKc+fsWQoIqB!pMUYSWtZ&#J$g1^8U$LEj^#JLw2@)VdbXpMC_rO03^1Lx0$ zhN+2w>R`GJee$TIb2U-P(pXqfP1e#PD_{-Hnvt4IKi}2;MwuUQ?&uk$M~@yodi3bg zqeqV(J$m%$X_`w`5Ph9&8*;$8&LUBbonE^RmO2E>I+I=VxU^}7@=r=y#iD0$Mp8qq z&L;oec2-DQsSYATw94vFqKSBn1({h z;1=tHvm>mT*}t$M%oMM-(o=<5;Q0XbiGc&3iNW8S*fc53)oS5OHO2%59VPqKRk3XE zG_K4h(bClqP$>*olRzI1ONb909IUFvV!O<^TFh5h9udx zBuQ#2`HH^sLDlrm6EE2y3?ucmAD4FZdHbylHyO0QZMw53Zhl9vf6_!hB4ln3%P9M3 zNV4J&^$<=4c!51oA73MX{;(|kOm9b2>^M(VC74|Co2BP(w@rX)hgZuiJx$IiB*0s? z6v1JEoqLk)re@T)q4?3$>lx2f=f?1tMjctG@9NR`i%rOROR~C6hxQMB84HP)Wk#6} zSOK5cTwY#AQ2SL-S^08=(tSPXMo>jn^=-9KGZwEq_u$4%I+n(Vu~*c3H+3I6&A6c6 zTRY5uS-v@={=6ifIr1z*K-aR=`tT+#aaH8c$xG-%MEL4yVj8Z>CoprKz-Kk$U?jQyuBUAlDX8satTJq&i}6BEZj zYxShtSik;$<3a2p!^ETZgNgQcsm)BA z_0a6a(t271JKqOZ!-EX#Ar~(*Ys-*ARUB93TEC5!f$MenP^%%X!Y!JPB$&pJXS=rp zQ`@kxl;Ky|Sz(K+k;oC-kzfB@&$H~w3cEIWbOHXH^11%#2)6FgV$y00n@0eWA6`UJ>-5>US;p#4VxYu9~UFF?Ej$Qc3pJwRN7 zJER8$l&=e*?*QUJ0Pht*kK)0z0@&@@a}SVB0@xRTC;&u}Q9!gQfSm&PngG5mz?K6b zX%oPQ1&C(=IU;};0f4*(h&zD%50Jk?+$K|qHIwTC>{>V%en!3HpF|dTMr{MQM*w;a zKn;ftz+C{E768)?E>;u0rUB=(Rf<;c1ONaUfHA%1hBy}>pnM7dP!2c~qCS<(!(ps> zHX>$Gfy~2Ekxtkczt;*QBjVv7A5O3r`r)+l3VS$5U0X$Ic!XVgYoufzewnFWKKu$Y z(md=caiqUR_fMcc)N*Llq{BS*YSn3_6aJ2Few{cbW{LH}RXXUzm^O1>R_c6NOTu5H zMU8ppr@vYZhf1?gZ5`*_Heahsr6(ymao1`yN99b+Fw?%4#(}idXyCjn#|W&ZTV}9qXs&P%U=g&^~a=A(i&!^>QgqCfXoiN(M(mpIU)r$6HrfCQV)^ zSDPNTj-@!CC{^6E;h2SAlqtdn*J#qJQk!|&PU4xk3m0qFrXKOt=FDY2LhyVD6lZUF zCjdnd0-*q*|6vi=9VT3aNKv90#fYU`K8{7a1c{O)KVNV8H0j21%8)7RKEtnGt~?V> z;*zgGp(4dfxRokX&QnMThX{y-s9)2(8ZpE`EF^)rDtr~8idbKIH+Nf>XG8t{Y>%!U zU+(wP57H@FJd#bg2ycWp!&~9)@J@I)ycgc@Ke)%n+5TUA@!KtcKuru-O zKkj{R+GQ>~0Lau2c%Z=j%&Q}OU%ed3BwQc?J9+bZ8#I$w2m8;u5!22o%{3g91i@Cceb|Mm~?#{}yD diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot deleted file mode 100644 index 3e035411cbc618924a327d6b9df6a44075eefbf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220322 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Ņ?&8$|`-a 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 cb+522VP<)>Lzvp}YkAaoF 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 diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff deleted file mode 100644 index 5f10918f0d4338b8dc56adf59299929890920fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130986 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 BibMba diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 deleted file mode 100644 index 34df5fe02a72776816b9e51657f840067aa4c1b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67204 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

    )qPw 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

    ~M8)?dE#I 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 Xk2aT?%S{K<(OhA!BxPw6dg^}wc$YKS diff --git a/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf b/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf deleted file mode 100644 index d3f01ad245b628f386ac95786f53167038720eb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170760 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�!3r53e9=KAt@g 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


      '); - } else if (!matches) { - return (0, _mithril["default"])('li', value); - } else { - var acc = getAction(matches[1]); - - if (acc) { - //return m(acc, {user:vnode.attrs.user}) - return (0, _mithril["default"])('li', (0, _mithril["default"])(acc, { - user: vnode.attrs.user, - updateState: vnode.attrs.updateState, - deleteUser: vnode.attrs.deleteUser - })); - } else { - return (0, _mithril["default"])('li', value); - } - } - })]) : null])); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"./actions/copyCommunityLogin":16,"./actions/copyLoginCommunity":17,"./actions/deleteCommunityServer":18,"./actions/userTransactionsOverview":19,"./actions/verificationResend":20,"mithril":3}],23:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -var _AccountState = _interopRequireDefault(require("../../model/AccountState")); - -var _Gradido = _interopRequireDefault(require("../../lib/Gradido")); - -var _Tooltip = _interopRequireDefault(require("../../lib/Tooltip")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function oninit(vnode) {} - -function view(vnode) { - var status = new _AccountState["default"](vnode.attrs.user.indicator.name); - var user = vnode.attrs.user; - var statusColor = status.getColor(); - var statusTitle = status.getTitle(); - var pubkey_shortend = user.pubkeyhex; - - if (pubkey_shortend !== '') { - pubkey_shortend = user.pubkeyhex.substring(0, 10) + '...'; - } - - var created = user.created; - - if (created) { - var creationDateTime = new Date(created); - created = creationDateTime.toLocaleDateString() + "
      " + creationDateTime.toLocaleTimeString(); - } - - var actionColor = false; - - if (status.hasActions()) { - actionColor = status.getRawColor(); - actionColor = 'primary'; - } - - var buttonState = 'down'; - - if (vnode.attrs.open) { - buttonState = 'up'; - } // disable until has function - //actionColor = false - //const tooltipContent = status.getTooltipText() - - - return (0, _mithril["default"])('tr', [(0, _mithril["default"])('td', actionColor !== false ? (0, _mithril["default"])('i.mdi.mdi-menu-' + buttonState + '.btn.btn-xs.btn-' + actionColor, { - onclick: vnode.attrs.btnClick - }) : null), (0, _mithril["default"])('td.pr-0', [(0, _mithril["default"])('span.text-black.font-weight-medium.d-block', user.name), (0, _mithril["default"])((0, _Tooltip["default"])((0, _mithril["default"])('span', [(0, _mithril["default"])('span.status-indicator.rounded-indicator.small.' + statusColor), (0, _mithril["default"])('small', statusTitle)])), { - accountState: status - })]), (0, _mithril["default"])('td', user.email), (0, _mithril["default"])('td', (0, _mithril["default"])(_Gradido["default"], { - centAmount: user.balance - })), (0, _mithril["default"])('td', { - title: user.pubkeyhex - }, pubkey_shortend), (0, _mithril["default"])('td', _mithril["default"].trust(created))]); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"../../lib/Gradido":9,"../../lib/Tooltip":10,"../../model/AccountState":12,"mithril":3}]},{},[8]); diff --git a/community_server/webroot/js/userSearch.min.js b/community_server/webroot/js/userSearch.min.js deleted file mode 100644 index 9dd4f94f9..000000000 --- a/community_server/webroot/js/userSearch.min.js +++ /dev/null @@ -1 +0,0 @@ -!function r(i,o,a){function s(t,e){if(!o[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(l)return l(t,!0);throw(n=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",n}n=o[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,r,i,o,a)}return o[t].exports}for(var l="function"==typeof require&&require,e=0;e>>0,o=0;if(3===arguments.length)n=arguments[2];else{for(;o=n.clientWidth&&e>=n.clientHeight}),t=(0l[e]&&!r.escapeWithReference&&(n=Math.min(u[t],l[e]-("right"===e?u.width:u.height))),y({},t,n)}};return s.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=E({},u,c[t](e))}),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,i=e.placement.split("-")[0],o=Math.floor,a=-1!==["top","bottom"].indexOf(i),t=a?"right":"bottom",i=a?"left":"top",a=a?"width":"height";return n[t]o(r[t])&&(e.offsets.popper[i]=o(r[t])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){if(!U(e.instance.modifiers,"arrow","keepTogether"))return e;var n=t.element;if("string"==typeof n){if(!(n=e.instance.popper.querySelector(n)))return e}else if(!e.instance.popper.contains(n))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],i=e.offsets,o=i.popper,a=i.reference,s=-1!==["left","right"].indexOf(r),l=s?"height":"width",u=s?"Top":"Left",c=u.toLowerCase(),t=s?"left":"top",i=s?"bottom":"right",r=A(n)[l];a[i]-ro[i]&&(e.offsets.popper[c]+=a[c]+r-o[i]),e.offsets.popper=x(e.offsets.popper);s=a[c]+a[l]/2-r/2,i=d(e.instance.popper),a=parseFloat(i["margin"+u]),u=parseFloat(i["border"+u+"Width"]),u=s-e.offsets.popper[c]-a-u,u=Math.max(Math.min(o[l]-r,u),0);return e.arrowElement=n,e.offsets.arrow=(y(n={},c,Math.round(u)),y(n,t,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(u,c){if(F(u.instance.modifiers,"inner"))return u;if(u.flipped&&u.placement===u.originalPlacement)return u;var d=C(u.instance.popper,u.instance.reference,c.padding,c.boundariesElement,u.positionFixed),f=u.placement.split("-")[0],p=M(f),m=u.placement.split("-")[1]||"",h=[];switch(c.behavior){case K:h=[f,p];break;case G:h=Y(f);break;case W:h=Y(f,!0);break;default:h=c.behavior}return h.forEach(function(e,t){if(f!==e||h.length===t+1)return u;f=u.placement.split("-")[0],p=M(f);var n=u.offsets.popper,r=u.offsets.reference,i=Math.floor,o="left"===f&&i(n.right)>i(r.left)||"right"===f&&i(n.left)i(r.top)||"bottom"===f&&i(n.top)i(d.right),l=i(n.top)i(d.bottom),r="left"===f&&a||"right"===f&&s||"top"===f&&l||"bottom"===f&&e,n=-1!==["top","bottom"].indexOf(f),i=!!c.flipVariations&&(n&&"start"===m&&a||n&&"end"===m&&s||!n&&"start"===m&&l||!n&&"end"===m&&e),l=!!c.flipVariationsByContent&&(n&&"start"===m&&s||n&&"end"===m&&a||!n&&"start"===m&&e||!n&&"end"===m&&l),l=i||l;(o||r||l)&&(u.flipped=!0,(o||r)&&(f=h[t+1]),l&&(m="end"===m?"start":"start"===m?"end":m),u.placement=f+(m?"-"+m:""),u.offsets.popper=E({},u.offsets.popper,D(u.instance.popper,u.offsets.reference,u.placement)),u=I(u.instance.modifiers,u,"flip"))}),u},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,i=r.popper,o=r.reference,a=-1!==["left","right"].indexOf(n),r=-1===["top","left"].indexOf(n);return i[a?"left":"top"]=o[n]-(r?i[a?"width":"height"]:0),e.placement=M(t),e.offsets.popper=x(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!U(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=L(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right or , not
      ","or ."].join(" ")),Ee("showOnInit"===t,"The `showOnInit` prop was renamed to `showOnCreate` in v5."),Ee("arrowType"===t,["The `arrowType` prop was removed in v5 in favor of overloading the `arrow`","prop.","\n\n",'"round" string was replaced with importing the string from the package.',"\n\n","* import {roundArrow} from 'tippy.js'; (ESM version)\n","* const {roundArrow} = tippy; (IIFE CDN version)","\n\n",'Before: {arrow: true, arrowType: "round"}\n',"After: {arrow: roundArrow}`"].join(" ")),Ee("touchHold"===t,["The `touchHold` prop was removed in v5 in favor of overloading the `touch`","prop.","\n\n","Before: {touchHold: true}\n",'After: {touch: "hold"}'].join(" ")),Ee("size"===t,["The `size` prop was removed in v5. Instead, use a theme that specifies","CSS padding and font-size properties."].join(" ")),Ee("theme"===t&&"google"===e,'The included theme "google" was renamed to "material" in v5.'),Ee(n,["Specifying placement in `popperOptions` is not supported. Use the base-level","`placement` prop instead.","\n\n",'Before: {popperOptions: {placement: "bottom"}}\n','After: {placement: "bottom"}'].join(" ")),Ee(r,["`"+t+"`","is not a valid prop. You may have spelled it incorrectly, or if it's a","plugin, forgot to pass it in an array as props.plugins.","\n\n","In v5, the following props were turned into plugins:","\n\n","* animateFill\n","* followCursor\n","* sticky","\n\n","All props: https://atomiks.github.io/tippyjs/all-props/\n","Plugins: https://atomiks.github.io/tippyjs/plugins/"].join(" "))})}var Ce={passive:!0},d="tippy-iOS",Ne="tippy-popper",ke="tippy-tooltip",Ae="tippy-content",f="tippy-arrow",p="tippy-svg-arrow",Me="."+Ne,m="."+ke,h="."+Ae,v="."+f,g="."+p,De={isTouch:!1},b=0;function y(){De.isTouch||(De.isTouch=!0,window.performance&&document.addEventListener("mousemove",w))}function w(){var e=performance.now();e-b<20&&(De.isTouch=!1,document.removeEventListener("mousemove",w)),b=e}function E(){var e,t=document.activeElement;i(t)&&(e=t._tippy,t.blur&&!e.state.isVisible&&t.blur())}var e="undefined"!=typeof window&&"undefined"!=typeof document,T=e?navigator.userAgent:"",Le=/MSIE |Trident\//.test(T),x=e&&/iPhone|iPad|iPod/.test(navigator.platform);function Ie(e){e=e&&x&&De.isTouch;document.body.classList[e?"add":"remove"](d)}function Fe(e){return e.split("-")[0]}function Pe(e){e.setAttribute("data-inertia","")}function Re(e){e.setAttribute("data-interactive","")}function je(e,t){l(t.content)?(n(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(e[t.allowHTML?"innerHTML":"textContent"]=t.content)}function Be(e){return{tooltip:e.querySelector(m),content:e.querySelector(h),arrow:e.querySelector(v)||e.querySelector(g)}}function ze(e){var t=oe();return!0===e?t.className=f:(t.className=p,l(e)?t.appendChild(e):n(t,e)),t}function Ue(e,t,n){var r=Be(e),i=r.tooltip,o=r.content,r=r.arrow;e.style.zIndex=""+n.zIndex,i.setAttribute("data-animation",n.animation),i.style.maxWidth="number"==typeof(e=n.maxWidth)?e+"px":e,n.role?i.setAttribute("role",n.role):i.removeAttribute("role"),t.content!==n.content&&je(o,n),!t.arrow&&n.arrow?(i.appendChild(ze(n.arrow)),i.setAttribute("data-arrow","")):t.arrow&&!n.arrow?(i.removeChild(r),i.removeAttribute("data-arrow")):t.arrow!==n.arrow&&(i.removeChild(r),i.appendChild(ze(n.arrow))),!t.interactive&&n.interactive?Re(i):t.interactive&&!n.interactive&&i.removeAttribute("data-interactive"),!t.inertia&&n.inertia?Pe(i):t.inertia&&!n.inertia&&i.removeAttribute("data-inertia"),t.theme!==n.theme&&(He(i,"remove",t.theme),He(i,"add",n.theme))}function Ve(t,n,r){["transitionend","webkitTransitionEnd"].forEach(function(e){t[n+"EventListener"](e,r)})}function He(t,n,e){pe(e).forEach(function(e){t.classList[n](e+"-theme")})}var Ye=1,Ke=[],Ge=[];function _(l,e){var i,t,n,r=Se(l,Z({},Te,{},_e(e)));if(!r.multiple&&l._tippy)return null;var o,a,s,u,c,d=!1,f=!1,p=!1,m=0,h=[],v=le(H,r.interactiveDebounce),g=ve(r.triggerTarget||l),b=Ye++,y=function(e,t){var n=oe();n.className=Ne,n.style.position="absolute",n.style.top="0",n.style.left="0";var r=oe();return r.className=ke,r.id="tippy-"+e,r.setAttribute("data-state","hidden"),r.setAttribute("tabindex","-1"),He(r,"add",t.theme),(e=oe()).className=Ae,e.setAttribute("data-state","hidden"),t.interactive&&Re(r),t.arrow&&(r.setAttribute("data-arrow",""),r.appendChild(ze(t.arrow))),t.inertia&&Pe(r),je(e,t),r.appendChild(e),n.appendChild(r),Ue(n,t,t),n}(b,r),w=Be(y),E=(c=r.plugins).filter(function(e,t){return c.indexOf(e)===t}),T=w.tooltip,e=w.content,x=[T,e],_={id:b,reference:l,popper:y,popperChildren:w,popperInstance:null,props:r,state:{currentPlacement:null,isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:E,clearDelayTimeouts:function(){clearTimeout(i),clearTimeout(t),cancelAnimationFrame(n)},setProps:function(n){var t,e;"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("setProps")),_.state.isDestroyed||("production"!==We.env.NODE_ENV&&(Oe(n,E),Ee(!!n.plugins&&(n.plugins.length!==E.length||E.some(function(e,t){return!n.plugins||!n.plugins[t]||e!==n.plugins[t]})),"Cannot update plugins")),M("onBeforeUpdate",[_,n]),U(),t=_.props,(e=Se(l,Z({},_.props,{},n,{ignoreAttributes:!0}))).ignoreAttributes=me(n.ignoreAttributes,t.ignoreAttributes),_.props=e,z(),t.interactiveDebounce!==e.interactiveDebounce&&(I(),v=le(H,e.interactiveDebounce)),Ue(y,t,e),_.popperChildren=Be(y),t.triggerTarget&&!e.triggerTarget?he(t.triggerTarget).forEach(function(e){e.removeAttribute("aria-expanded")}):e.triggerTarget&&l.removeAttribute("aria-expanded"),L(),_.popperInstance&&(xe.some(function(e){return Q(n,e)&&n[e]!==t[e]})?(e=_.popperInstance.reference,_.popperInstance.destroy(),W(),_.popperInstance.reference=e,_.state.isVisible&&_.popperInstance.enableEventListeners()):_.popperInstance.update()),M("onAfterUpdate",[_,n]))},setContent:function(e){_.setProps({content:e})},show:function(e){void 0===e&&(e=ee(_.props.duration,0,Te.duration)),"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("show"));var t=_.state.isVisible,n=_.state.isDestroyed,r=!_.state.isEnabled,i=De.isTouch&&!_.props.touch;t||n||r||i||k().hasAttribute("disabled")||(_.popperInstance||W(),M("onShow",[_],!1),!1!==_.props.onShow(_)&&(P(),y.style.visibility="visible",_.state.isVisible=!0,_.state.isMounted||ae(x.concat(y),0),a=function(){_.state.isVisible&&(ae([y],_.props.updateDuration),ae(x,e),se(x,"visible"),D(),L(),ge(Ge,_),Ie(!0),_.state.isMounted=!0,M("onMount",[_]),j(e,function(){_.state.isShown=!0,M("onShown",[_])}))},function(){m=0;var e=_.props.appendTo,t=k(),n=_.props.interactive&&e===Te.appendTo||"parent"===e?t.parentNode:re(e,[t]);n.contains(y)||n.appendChild(y),"production"!==We.env.NODE_ENV&&Ee(_.props.interactive&&e===Te.appendTo&&t.nextElementSibling!==y,["Interactive tippy element may not be accessible via keyboard navigation","because it is not directly after the reference element in the DOM source","order.","\n\n","Using a wrapper
      or tag around the reference element solves","this by creating a new parentNode context.","\n\n","Specifying `appendTo: document.body` silences this warning, but it","assumes you are using a focus management solution to handle keyboard","navigation.","\n\n","See: https://atomiks.github.io/tippyjs/accessibility/#interactivity"].join(" ")),ie(_.popperInstance.modifiers,"flip","enabled",_.props.flip),_.popperInstance.enableEventListeners(),_.popperInstance.update()}()))},hide:function(e){void 0===e&&(e=ee(_.props.duration,1,Te.duration)),"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("hide"));var t=!_.state.isVisible&&!d,n=_.state.isDestroyed,r=!_.state.isEnabled&&!d;t||n||r||(M("onHide",[_],!1),!1===_.props.onHide(_)&&!d||(R(),y.style.visibility="hidden",_.state.isVisible=!1,_.state.isShown=!1,ae(x,e),se(x,"hidden"),D(),L(),j(e,function(){!_.state.isVisible&&y.parentNode&&y.parentNode.contains(y)&&(_.popperInstance.disableEventListeners(),_.popperInstance.options.placement=_.props.placement,y.parentNode.removeChild(y),0===(Ge=Ge.filter(function(e){return e!==_})).length&&Ie(!1),_.state.isMounted=!1,M("onHidden",[_]))})))},enable:function(){_.state.isEnabled=!0},disable:function(){_.hide(),_.state.isEnabled=!1},destroy:function(){"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("destroy")),_.state.isDestroyed||(d=!0,_.clearDelayTimeouts(),_.hide(0),U(),delete l._tippy,_.popperInstance&&_.popperInstance.destroy(),d=!1,_.state.isDestroyed=!0,M("onDestroy",[_]))}};l._tippy=_,y._tippy=_;var S=E.map(function(e){return e.fn(_)}),O=l.hasAttribute("aria-expanded");return z(),L(),r.lazy||W(),M("onCreate",[_]),r.showOnCreate&&$(),y.addEventListener("mouseenter",function(){_.props.interactive&&_.state.isVisible&&_.clearDelayTimeouts()}),y.addEventListener("mouseleave",function(e){_.props.interactive&&fe(_.props.trigger,"mouseenter")&&(v(e),g.addEventListener("mousemove",v))}),_;function C(){var e=_.props.touch;return Array.isArray(e)?e:[e,0]}function N(){return"hold"===C()[0]}function k(){return u||l}function A(e){return _.state.isMounted&&!_.state.isVisible||De.isTouch||o&&"focus"===o.type?0:ee(_.props.delay,e?0:1,Te.delay)}function M(t,n,e){void 0===e&&(e=!0),S.forEach(function(e){Q(e,t)&&e[t].apply(e,n)}),e&&(e=_.props)[t].apply(e,n)}function D(){var n,r,e=_.props.aria;e&&(n="aria-"+e,r=T.id,he(_.props.triggerTarget||l).forEach(function(e){var t=e.getAttribute(n);_.state.isVisible?e.setAttribute(n,t?t+" "+r:r):(t=t&&t.replace(r,"").trim())?e.setAttribute(n,t):e.removeAttribute(n)}))}function L(){O||he(_.props.triggerTarget||l).forEach(function(e){_.props.interactive?e.setAttribute("aria-expanded",_.state.isVisible&&e===k()?"true":"false"):e.removeAttribute("aria-expanded")})}function I(){g.body.removeEventListener("mouseleave",X),g.removeEventListener("mousemove",v),Ke=Ke.filter(function(e){return e!==v})}function F(e){if(!_.props.interactive||!y.contains(e.target)){if(k().contains(e.target)){if(De.isTouch)return;if(_.state.isVisible&&fe(_.props.trigger,"click"))return}!0===_.props.hideOnClick&&(f=!1,_.clearDelayTimeouts(),_.hide(),p=!0,setTimeout(function(){p=!1}),_.state.isMounted||R())}}function P(){g.addEventListener("mousedown",F,!0)}function R(){g.removeEventListener("mousedown",F,!0)}function j(e,t){function n(e){e.target===T&&(Ve(T,"remove",n),t())}if(0===e)return t();Ve(T,"remove",s),Ve(T,"add",n),s=n}function B(t,n,r){void 0===r&&(r=!1),he(_.props.triggerTarget||l).forEach(function(e){e.addEventListener(t,n,r),h.push({node:e,eventType:t,handler:n,options:r})})}function z(){N()&&(B("touchstart",V,Ce),B("touchend",Y,Ce)),pe(_.props.trigger).forEach(function(e){if("manual"!==e)switch(B(e,V),e){case"mouseenter":B("mouseleave",Y);break;case"focus":B(Le?"focusout":"blur",K);break;case"focusin":B("focusout",K)}})}function U(){h.forEach(function(e){var t=e.node,n=e.eventType,r=e.handler,e=e.options;t.removeEventListener(n,r,e)}),h=[]}function V(t){var e,n,r=!1;!_.state.isEnabled||G(t)||p||(u=(o=t).currentTarget,L(),!_.state.isVisible&&ne(t)&&Ke.forEach(function(e){return e(t)}),"click"!==t.type||fe(_.props.trigger,"mouseenter")&&!f||!1===_.props.hideOnClick||!_.state.isVisible?(e=(n=C())[0],n=n[1],De.isTouch&&"hold"===e&&n?i=setTimeout(function(){$(t)},n):$(t)):r=!0,"click"===t.type&&(f=!r),r&&X(t))}function H(e){var a,s,t=de(e.target,function(e){return e===l||e===y});"mousemove"===e.type&&t||(t=ce(y.querySelectorAll(Me)).concat(y).map(function(e){var t=e._tippy,n=t.popperChildren.tooltip,t=t.props.interactiveBorder;return{popperRect:e.getBoundingClientRect(),tooltipRect:n.getBoundingClientRect(),interactiveBorder:t}}),a=e.clientX,s=e.clientY,t.every(function(e){var t=e.popperRect,n=e.tooltipRect,r=e.interactiveBorder,i=Math.min(t.top,n.top),o=Math.max(t.right,n.right),e=Math.max(t.bottom,n.bottom),n=Math.min(t.left,n.left);return r element.cloneNode(true)"].join(" ")));t=t.reduce(function(e,t){t=t&&_(t,a);return t&&e.push(t),e},[]);return l(e)?t[0]:t}S.version="5.2.1",S.defaultProps=Te,S.setDefaultProps=o,S.currentInput=De,C.BACKDROP_CLASS="tippy-backdrop",C.ROUND_ARROW='',C._extends=Z,C.arrayFrom=ce,C.closestCallback=de,C.createTippyWithPlugins=function(r){"production"!==We.env.NODE_ENV&&Ee(!0,["createTippyWithPlugins([...]) has been deprecated.","\n\n","Use tippy.setDefaultProps({plugins: [...]}) instead."].join(" "));function e(e,t,n){return void 0===n&&(n=[]),n=(t=void 0===t?{}:t).plugins||n,S(e,Z({},t,{plugins:[].concat(r,n)}))}return e.version="5.2.1",e.defaultProps=Te,e.setDefaultProps=o,e.currentInput=De,e},C.currentInput=De,C.defaultProps=Te,C.div=oe,C.errorWhen=u,C.getBasePlacement=Fe,C.getOwnerDocument=ve,C.hideAll=function(e){var e=void 0===e?{}:e,n=e.exclude,r=e.duration;Ge.forEach(function(e){var t=!1;(t=n?i(n)?e.reference===n:e.popper===n.popper:t)||e.hide(r)})},C.includes=fe,C.isBrowser=e,C.isMouseEvent=ne,C.normalizeToArray=he,C.removeProperties=a,C.setVisibilityState=se,C.tippy=S,C.useIfDefined=me,C.warnWhen=Ee}.call(this)}.call(this,O("_process"))},{_process:4,"popper.js":3}],7:[function(i,e,o){!function(f){!function(){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var y=i("./tippy.chunk.cjs.js");i("popper.js");var d={mouseover:"mouseenter",focusin:"focus",click:"click"},e={name:"animateFill",defaultValue:!1,fn:function(e){var t=e.popperChildren,n=t.tooltip,r=t.content,i=e.props.animateFill?((t=y.div()).className=y.BACKDROP_CLASS,y.setVisibilityState([t],"hidden"),t):null;function o(){e.popperChildren.backdrop=i}return{onCreate:function(){i&&(o(),n.insertBefore(i,n.firstElementChild),n.setAttribute("data-animatefill",""),n.style.overflow="hidden",e.setProps({animation:"shift-away",arrow:!1}))},onMount:function(){var e,t;i&&(e=n.style.transitionDuration,t=Number(e.replace("ms","")),r.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y.setVisibilityState([i],"visible"),"production"!==f.env.NODE_ENV&&(y.warnWhen("absolute"!==getComputedStyle(i).position,"The `tippy.js/dist/backdrop.css` stylesheet has not been\n imported!\n \n The `animateFill` plugin requires this stylesheet to work."),y.warnWhen("none"===getComputedStyle(n).transform,"The `tippy.js/animations/shift-away.css` stylesheet has not\n been imported!\n \n The `animateFill` plugin requires this stylesheet to work.")))},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y.setVisibilityState([i],"hidden")},onAfterUpdate:function(){o()}}}},t={name:"followCursor",defaultValue:!1,fn:function(c){var d,f=c.reference,p=c.popper,m=null,e=y.getOwnerDocument(c.props.triggerTarget||f),n=null,r=!1,i=c.props;function t(){return"manual"===c.props.trigger.trim()}function o(){var e=!!t()||null!==n&&!(0===n.clientX&&0===n.clientY);return c.props.followCursor&&e}function h(){return y.currentInput.isTouch||"initial"===c.props.followCursor&&c.state.isVisible}function a(){c.popperInstance&&m&&(c.popperInstance.reference=m)}function s(){var e,t;!o()&&c.props.placement===i.placement||(t=(e=i.placement).split("-")[1],r=!0,c.setProps({placement:o()&&t?e.replace(t,"start"===t?"end":"start"):e}),r=!1)}function l(){c.popperInstance&&o()&&h()&&c.popperInstance.disableEventListeners()}function u(){o()?e.addEventListener("mousemove",b):a()}function v(){o()&&b(d)}function g(){e.removeEventListener("mousemove",b)}function b(e){var t,n,r,i,o,a,s=d=e,l=s.clientX,u=s.clientY;c.popperInstance&&c.state.currentPlacement&&(s=y.closestCallback(e.target,function(e){return e===f}),e=c.props.followCursor,t="horizontal"===e,n="vertical"===e,r=y.includes(["top","bottom"],y.getBasePlacement(c.state.currentPlacement)),e={size:e=r?p.offsetWidth:p.offsetHeight,x:r?e:0,y:r?0:e},i=e.size,o=e.x,a=e.y,!s&&c.props.interactive||(null===m&&(m=c.popperInstance.reference),c.popperInstance.reference={referenceNode:f,clientWidth:0,clientHeight:0,getBoundingClientRect:function(){var e=f.getBoundingClientRect();return{width:r?i:0,height:r?0:i,top:(t?e.top:u)-a,bottom:(t?e.bottom:u)+a,left:(n?e.left:l)-o,right:(n?e.right:l)+o}}},c.popperInstance.update()),h()&&g())}return{onAfterUpdate:function(e,t){var n;r||(n=t,Object.keys(n).forEach(function(e){i[e]=y.useIfDefined(n[e],i[e])}),t.placement&&s()),t.placement&&l(),requestAnimationFrame(v)},onMount:function(){v(),l()},onShow:function(){t()&&(d=n={clientX:0,clientY:0},s(),u())},onTrigger:function(e,t){n||(y.isMouseEvent(t)&&(n={clientX:t.clientX,clientY:t.clientY},d=t),s(),u())},onUntrigger:function(){c.state.isVisible||(g(),n=null)},onHidden:function(){g(),a(),n=null}}}},n={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t=e.reference;function n(){return e.props.inlinePositioning}return{onHidden:function(){n()&&(e.popperInstance.reference=t)},onShow:function(){n()&&(e.popperInstance.reference={referenceNode:t,clientWidth:0,clientHeight:0,getBoundingClientRect:function(){return function(t,e,n){if(n.length<2||null===t)return e;switch(t){case"top":case"bottom":var r=n[0],i=n[n.length-1],o="top"===t,a=r.top,s=i.bottom,l=(o?r:i).left,i=(o?r:i).right;return{top:a,bottom:s,left:l,right:i,width:i-l,height:s-a};case"left":case"right":var u=Math.min.apply(Math,n.map(function(e){return e.left})),c=Math.max.apply(Math,n.map(function(e){return e.right})),s=n.filter(function(e){return"left"===t?e.left===u:e.right===c}),a=s[0].top,s=s[s.length-1].bottom;return{top:a,bottom:s,left:u,right:c,width:c-u,height:s-a};default:return e}}(e.state.currentPlacement&&y.getBasePlacement(e.state.currentPlacement),t.getBoundingClientRect(),y.arrayFrom(t.getClientRects()))}})}}}},r={name:"sticky",defaultValue:!1,fn:function(n){var r=n.reference,i=n.popper;function o(e){return!0===n.props.sticky||n.props.sticky===e}var a=null,s=null;function l(){var e=o("reference")?(n.popperInstance?n.popperInstance.reference:r).getBoundingClientRect():null,t=o("popper")?i.getBoundingClientRect():null;(e&&u(a,e)||t&&u(s,t))&&n.popperInstance.update(),a=e,s=t,n.state.isMounted&&requestAnimationFrame(l)}return{onMount:function(){n.props.sticky&&l()}}}};function u(e,t){return!e||!t||e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left}o.createTippyWithPlugins=y.createTippyWithPlugins,o.default=y.tippy,o.hideAll=y.hideAll,o.roundArrow=y.ROUND_ARROW,o.animateFill=e,o.createSingleton=function(o,e,t){void 0===e&&(e={}),void 0===t&&(t=[]),"production"!==f.env.NODE_ENV&&y.errorWhen(!Array.isArray(o),["The first argument passed to createSingleton() must be an array of tippy","instances. The passed value was",String(o)].join(" ")),t=e.plugins||t,o.forEach(function(e){e.disable()});var a,s,l=y._extends({},y.defaultProps,{},e).aria,n=!1,u=o.map(function(e){return e.reference}),r={fn:function(r){function i(e){var t;a&&(t="aria-"+a,e&&!r.props.interactive?s.setAttribute(t,r.popperChildren.tooltip.id):s.removeAttribute(t))}return{onAfterUpdate:function(e,t){t=t.aria;void 0!==t&&t!==l&&(n?(n=!0,r.setProps({aria:null}),n=!1):l=t)},onDestroy:function(){o.forEach(function(e){e.enable()})},onMount:function(){i(!0)},onUntrigger:function(){i(!1)},onTrigger:function(e,t){var n=t.currentTarget,t=u.indexOf(n);n!==s&&(s=n,a=l,r.state.isVisible&&i(!0),r.popperInstance.reference=n,r.setContent(o[t].props.content))}}}};return y.tippy(y.div(),y._extends({},e,{plugins:[r].concat(t),aria:null,triggerTarget:u}))},o.delegate=function(e,r,t){void 0===t&&(t=[]),"production"!==f.env.NODE_ENV&&y.errorWhen(!(r&&r.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" ")),t=r.plugins||t;var i=[],o=[],a=r.target,n=y.removeProperties(r,["target"]),s=y._extends({},n,{plugins:t,trigger:"manual"}),l=y._extends({},n,{plugins:t,showOnCreate:!0}),s=y.tippy(e,s);function u(e){var t,n;!e.target||(n=e.target.closest(a))&&(t=n.getAttribute("data-tippy-trigger")||r.trigger||y.defaultProps.trigger,!y.includes(t,d[e.type])||(n=y.tippy(n,l))&&(o=o.concat(n)))}function c(e,t,n,r){e.addEventListener(t,n,r=void 0===r?!1:r),i.push({node:e,eventType:t,handler:n,options:r})}return y.normalizeToArray(s).forEach(function(e){var t=e.destroy;e.destroy=function(e){(e=void 0===e?!0:e)&&o.forEach(function(e){e.destroy()}),o=[],i.forEach(function(e){var t=e.node,n=e.eventType,r=e.handler,e=e.options;t.removeEventListener(n,r,e)}),i=[],t()},c(e=e.reference,"mouseover",u),c(e,"focusin",u),c(e,"click",u)}),s},o.followCursor=t,o.inlinePositioning=n,o.sticky=r}.call(this)}.call(this,i("_process"))},{"./tippy.chunk.cjs.js":6,_process:4,"popper.js":3}],8:[function(e,t,n){"use strict";var r=a(e("mithril")),i=a(e("./view")),o=a(e("./texte/de"));function a(e){return e&&e.__esModule?e:{default:e}}document,window,domIsReady(function(){window.texte=o.default,r.default.mount(window.document.getElementById("gradido-mithril-user-search"),i.default)})},{"./texte/de":13,"./view":14,mithril:1}],9:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=o(e("mithril")),i=o(e("numeral"));function o(e){return e&&e.__esModule?e:{default:e}}var a=!1;n.default={view:function(e){return(0,r.default)("span",(e=e.attrs.centAmount/1e4,i.default.locale("de"),(0,i.default)(e).format("0,0.00")+" GDD"))},oninit:function(e){a||(i.default.register("locale","de",{delimiters:{thousands:".",decimal:","},currency:{symbol:"€"}}),i.default.locale("de"),a=!0)}}},{mithril:1,numeral:2}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return{oncreate:function(e){(0,r.default)(e.dom,{content:e.attrs.accountState.getTooltipText(),placement:"right-start",theme:"rippleUI-theme",arrow:!1})},onremove:function(){},view:function(){return e}}},i(e("mithril"));var r=i(e("tippy.js"));function i(e){return e&&e.__esModule?e:{default:e}}},{mithril:1,"tippy.js":7}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("mithril"))&&e.__esModule?e:{default:e};n.default={view:function(e){return(0,r.default)("div.modal.visible-modal",{tabindex:"-1",role:"dialog"},(0,r.default)("div.modal-dialog",{role:"document"},(0,r.default)("div.modal-content",[(0,r.default)("p.grid-header",e.attrs.title),(0,r.default)("div.modal-body",e.attrs.body),(0,r.default)("div.modal-footer",[(0,r.default)("button.btn.btn-primary",{type:"button",disabled:e.attrs.btnDisabled,"data-dismiss":"modal",onclick:e.attrs.dismiss},"Ok")])])))},oninit:function(e){}}},{mithril:1}],12:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("mithril"))&&e.__esModule?e:{default:e};function i(e,t){for(var n=0;n';if(t+='
      '+e.description.title+"
      ",null!=e.description.lines){for(var n in t+="
        ",e.description.lines){var r=e.description.lines[n],i=window.texte.ACCOUNT_STATES.LINES[n],n="mdi ";if("+"===r)n+=" mdi-check color-primary";else if("-"===r)n+=" mdi-close color-danger";else{if("/"!==r)continue;n+=" mdi-alert-circle-outline color-warning"}t+="
      • ",t+='',t+=" ",t+=""+i.title+": "+i[r]+"",t+="
      • "}t+="
      "}return t+"
      "}}]),e=o;function o(e){!function(e){if(!(e instanceof o))throw new TypeError("Cannot call a class as a function")}(this),this.stateName=e,this.texte=window.texte.ACCOUNT_STATES[e]}n.default=e},{mithril:1}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0,n.default={ACCOUNT_STATES:{LINES:[{title:"Login-Server","+":"Das Benutzer-Konto liegt auf dem Login-Server!","-":"Das Benutzer-Konto existiert nicht auf dem Login-Server!"},{title:"Konto Aktivierung","+":"Der Benutzer hat sein Konto aktiviert!","-":"Der Benutzer hat noch nicht auf den Link in seiner E-Mail geklickt!"},{title:"Schlüsselpaar","+":"Es wurde bereits ein Schlüsselpaar für den Benutzer erzeugt und ihm eine Passphrase gezeigt!","-":"Es wurden noch keine Schlüssel und Passphrase für den Benutzer erzeugt!"},{title:"Gemeinschafts-Server","+":"Das Benutzer-Konto wurde auf auf den Gemeinschafts-Server kopiert!","-":"Das Benutzer-Konto wurde noch nicht auf den Gemeinschafts-Server kopiert!"},{title:"Gradidos","+":"Es können Gradidos an den Benutzer geschickt werden!","-":"Es können noch keine Gradidos an den Benutzer geschickt werden!","/":"Es können theoretisch Gradidos an den Benutzer geschickt werden, aber es ist nicht sicher ob er sie verwenden kann!"}],"account created":{title:"Konto angelegt",color:"secondary",description:{title:"Das Konto wurde auf dem Login-Server angelegt, vermutlich durch eine elopage-Anmeldung.",lines:["+","-","-","-","-"]},todo:{title:"Als nächstes müsste der Benutzer den Link in seiner E-Mail anklicken und den Anweisungen folgen. ",lines:["Stimmt die E-Mail Adresse? Hat der Benutzer in seinem Spam-Verzeichnis nachgesehen?","{{verification-resend}}","{{mailto-verification-resend}}"]}},"account not on login-server":{title:"Konto nicht auf Login-Server",color:"danger",description:{title:"Das Konto existiert nicht (mehr) auf dem Login-Server: ein Fehler oder es wurde nur teilweise gelöscht.",lines:["-","+","+","+","/"]},todo:{title:"Wenn der Benutzer seine Passphrase hat, kann er sein Konto auf dem Login-Server wiederherstellen, ansonsten bleibt eigentlich nur das Konto auf dem Gemeinschafts-Server zu löschen",lines:["Nachdem das Konto auf dem Login-Server kopiert wurde, bekommt der Benutzer automatisch eine E-Mail mit einem Link zur Kontoaktivierung zugeschickt.","{{copy-from-community-to-login-server}}","
      ","Es wird nur der Benutzer gelöscht, nicht seine Transaktionen. Zu diesen hat er wieder Zugriff wenn er sein Konto mit Hilfe seiner Passphrase wiederhergestellt hat.","{{user-transactions-overview}}","{{delete-from-community-server}}"]}},"email activated":{title:"Konto aktiviert",color:"primary",description:{title:"Das Konto wurde vom Benutzer aktiviert und Schlüssel erzeugt, aber noch nicht auf diesen Gemeinschafts-Server kopiert.",lines:["+","+","+","-","-"]},todo:{title:"Das Benutzer Konto müsste vom Login-Server auf den Gemeinschafts-Server kopiert werden.",lines:["{{copy-from-login-to-community-server}}"]}},"account copied to community":{title:"Konto auf Gemeinschafts-Server",color:"success",description:{title:"Das Konto ist vollständig aktiviert und es können Gradidos überwiesen werden.",lines:["+","+","+","+","+"]}},"email not activated":{title:"Konto nicht aktiviert",color:"warning",description:{title:"Das Konto wurde auf dem Login-Server angelegt, vermutlich durch eine elopage-Anmeldung. Es wurde aber noch nicht aktiviert!",lines:["+","-","-","-","-"]},todo:{title:"Als nächstes müsste der Benutzer den Link in seiner E-Mail anklicken und den Anweisungen folgen. ",lines:["Stimmt die E-Mail Adresse? Hat der Benutzer in seinem Spam-Verzeichnis nachgesehen?","{{verification-resend}}","{{mailto-verification-resend}}"]}},"account multiple times on login-server":{title:"Konto mehrfach vorhanden",color:"danger",description:{title:"Das Konto ist auf dem Login-Server mehrfach vorhanden, das sollte nicht sein, auf dem Login-Server muss ein Fehler passiert sein!!"},todo:{title:"Du solltest mit dem Entwickler in Kontakt treten.",lines:["{{mailto-developer}}"]}},"account not on community server":{title:"Konto nicht auf Gemeinschafts-Server",color:"secondary",description:{title:"Das Konto wurde auf dem Login-Server angelegt, aber existiert noch nicht auf dem Gemeinschafts-Server!",lines:["+",null,"-","-","-"]},todo:{title:"Das sollte eigentlich nicht passieren, du solltest mit dem Entwickler sprechen.",lines:["{{mailto-developer}}"]}},"no keys":{title:"Keine Schlüssel generiert",color:"warning",description:{title:"Das Konto wurde auf dem Login-Server angelegt, aber es wurden noch keine Schlüssel generiert!",lines:["+","+","-","-","-"]},todo:{title:"Der Benutzer muss sich mit seinen Daten einloggen, dann müsste er automatisch durch die Schlüsselgenerierung/Konto-Wiederherstellung geführt werden",lines:["{{mailto-user-login}}","Wenn der Benutzer sein Passwort vergessen hat, kann er sich auch eine Passwort Reset E-Mail zuschicken lassen.","{{reset-password}}","{{mailto-reset-password}}"]}}},NO_USER_FOUND:"Keine Benutzer gefunden",USER_FOUND:"Benutzer gefunden",NAME:"Name",EMAIL:"E-Mail",BALANCE:"Kontostand",PUBLIC_KEY:"Öffentlicher
      Schlüssel",CREATED:"Erstellt",COPY_FROM_LOGIN_TO_COMMUNITY:"Vom Login-Server zum Gemeinschafts-Server kopieren",COPY_FROM_LOGIN_TO_COMMUNITY_SUCCESS:"Kontodaten wurden erfolgreich vom Login-Server zu diesem Gemeinschafts-Server kopiert!",COPY_FROM_COMMUNITY_TO_LOGIN:"Vom Gemeinschafts-Server zum Login-Server kopieren",COPY_FROM_COMMUNITY_TO_LOGIN_SUCCESS:"Kontodaten wurden erfolgreich vom Gemeinschafts-Server zum Login-Server kopiert!",DELETE_FROM_COMMUNITY:"Benutzer Konto vom Gemeinschafts-Server löschen",DELETE_FROM_COMMUNITY_SUCCESS:"Benutzer Konto vom Gemeinschafts-Server erfolgreich gelöscht",VERIFICATION_EMAIL_RESEND:"Verification Email erneut zusenden",VERIFICATION_EMAIL_RESEND_SUCCESS:"Verification Email wird erneut zugestellt",COPY_FAILED:"Fehler beim Kopieren",DELETE_FAILED:"Fehler beim löschen",RESEND_FAILED:"Senden fehlgeschlagen",AJAX_CRITICAL:"Kritischer Fehler beim Ajax-Request",COPY_IN_PROGRESS:"Wird kopiert",DELETE_IN_PROGRESS:"Wird gelöscht",RESEND_IN_PROGRESS:"Wird gesendet",RECEIVE_TRANSACTIONS_COUNT:"Erhaltene Transaktionen: ",SENDED_TRANSACTIONS_COUNT:"gesendete Transaktionen: ",CREATION_TRANSACTIONS_COUNT:"erhaltende Schöpfungs-Transaktionen: "}},{}],14:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=a(e("mithril")),i=a(e("./userTable")),o=a(e("../model/AccountState"));function a(e){return e&&e.__esModule?e:{default:e}}n.default={view:function(e){return void 0===g_users?(0,r.default)(""):0"===e)return i.default.trust("

    ",{class:"select2-results__options select2-results__options--nested"});c.append(o),s.append(a),s.append(c)}else this.template(t,e);return p.StoreData(e,"data",t),e},n.prototype.bind=function(e,t){var l=this,i=e.id+"-results";this.$results.attr("id",i),e.on("results:all",function(t){l.clear(),l.append(t.data),e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("results:append",function(t){l.append(t.data),e.isOpen()&&l.setClasses()}),e.on("query",function(t){l.hideMessages(),l.showLoading(t)}),e.on("select",function(){e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("unselect",function(){e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),e.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),e.on("results:toggle",function(){var t=l.getHighlightedResults();0!==t.length&&t.trigger("mouseup")}),e.on("results:select",function(){var t=l.getHighlightedResults();if(0!==t.length){var e=p.GetData(t[0],"data");"true"==t.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:e})}}),e.on("results:previous",function(){var t=l.getHighlightedResults(),e=l.$results.find("[aria-selected]"),i=e.index(t);if(!(i<=0)){var n=i-1;0===t.length&&(n=0);var r=e.eq(n);r.trigger("mouseenter");var s=l.$results.offset().top,a=r.offset().top,o=l.$results.scrollTop()+(a-s);0===n?l.$results.scrollTop(0):a-s<0&&l.$results.scrollTop(o)}}),e.on("results:next",function(){var t=l.getHighlightedResults(),e=l.$results.find("[aria-selected]"),i=e.index(t)+1;if(!(i>=e.length)){var n=e.eq(i);n.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),s=n.offset().top+n.outerHeight(!1),a=l.$results.scrollTop()+s-r;0===i?l.$results.scrollTop(0):rthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(r)}},n.prototype.template=function(t,e){var i=this.options.get("templateResult"),n=this.options.get("escapeMarkup"),r=i(t,e);null==r?e.style.display="none":"string"==typeof r?e.innerHTML=n(r):d(e).append(r)},n}),t.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),t.define("select2/selection/base",["jquery","../utils","../keys"],function(i,n,r){function s(t,e){this.$element=t,this.options=e,s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.render=function(){var t=i('');return this._tabindex=0,null!=n.GetData(this.$element[0],"old-tabindex")?this._tabindex=n.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),t.attr("title",this.$element.attr("title")),t.attr("tabindex",this._tabindex),this.$selection=t},s.prototype.bind=function(t,e){var i=this,n=(t.id,t.id+"-results");this.container=t,this.$selection.on("focus",function(t){i.trigger("focus",t)}),this.$selection.on("blur",function(t){i._handleBlur(t)}),this.$selection.on("keydown",function(t){i.trigger("keypress",t),t.which===r.SPACE&&t.preventDefault()}),t.on("results:focus",function(t){i.$selection.attr("aria-activedescendant",t.data._resultId)}),t.on("selection:update",function(t){i.update(t.data)}),t.on("open",function(){i.$selection.attr("aria-expanded","true"),i.$selection.attr("aria-owns",n),i._attachCloseHandler(t)}),t.on("close",function(){i.$selection.attr("aria-expanded","false"),i.$selection.removeAttr("aria-activedescendant"),i.$selection.removeAttr("aria-owns"),i.$selection.focus(),window.setTimeout(function(){i.$selection.focus()},0),i._detachCloseHandler(t)}),t.on("enable",function(){i.$selection.attr("tabindex",i._tabindex)}),t.on("disable",function(){i.$selection.attr("tabindex","-1")})},s.prototype._handleBlur=function(t){var e=this;window.setTimeout(function(){document.activeElement==e.$selection[0]||i.contains(e.$selection[0],document.activeElement)||e.trigger("blur",t)},1)},s.prototype._attachCloseHandler=function(t){i(document.body).on("mousedown.select2."+t.id,function(t){var e=i(t.target).closest(".select2");i(".select2.select2-container--open").each(function(){i(this),this!=e[0]&&n.GetData(this,"element").select2("close")})})},s.prototype._detachCloseHandler=function(t){i(document.body).off("mousedown.select2."+t.id)},s.prototype.position=function(t,e){e.find(".selection").append(t)},s.prototype.destroy=function(){this._detachCloseHandler(this.container)},s.prototype.update=function(t){throw new Error("The `update` method must be defined in child classes.")},s}),t.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(t,e,i,n){function r(){r.__super__.constructor.apply(this,arguments)}return i.Extend(r,e),r.prototype.render=function(){var t=r.__super__.render.call(this);return t.addClass("select2-selection--single"),t.html(''),t},r.prototype.bind=function(e,t){var i=this;r.__super__.bind.apply(this,arguments);var n=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",n).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",n),this.$selection.on("mousedown",function(t){1===t.which&&i.trigger("toggle",{originalEvent:t})}),this.$selection.on("focus",function(t){}),this.$selection.on("blur",function(t){}),e.on("focus",function(t){e.isOpen()||i.$selection.focus()})},r.prototype.clear=function(){var t=this.$selection.find(".select2-selection__rendered");t.empty(),t.removeAttr("title")},r.prototype.display=function(t,e){var i=this.options.get("templateSelection");return this.options.get("escapeMarkup")(i(t,e))},r.prototype.selectionContainer=function(){return t("")},r.prototype.update=function(t){if(0!==t.length){var e=t[0],i=this.$selection.find(".select2-selection__rendered"),n=this.display(e,i);i.empty().append(n),i.attr("title",e.title||e.text)}else this.clear()},r}),t.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,t,o){function i(t,e){i.__super__.constructor.apply(this,arguments)}return o.Extend(i,t),i.prototype.render=function(){var t=i.__super__.render.call(this);return t.addClass("select2-selection--multiple"),t.html('
      '),t},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments),this.$selection.on("click",function(t){n.trigger("toggle",{originalEvent:t})}),this.$selection.on("click",".select2-selection__choice__remove",function(t){if(!n.options.get("disabled")){var e=r(this).parent(),i=o.GetData(e[0],"data");n.trigger("unselect",{originalEvent:t,data:i})}})},i.prototype.clear=function(){var t=this.$selection.find(".select2-selection__rendered");t.empty(),t.removeAttr("title")},i.prototype.display=function(t,e){var i=this.options.get("templateSelection");return this.options.get("escapeMarkup")(i(t,e))},i.prototype.selectionContainer=function(){return r('
    • ×
    • ')},i.prototype.update=function(t){if(this.clear(),0!==t.length){for(var e=[],i=0;i×');o.StoreData(i[0],"data",e),this.$selection.find(".select2-selection__rendered").prepend(i)}},t}),t.define("select2/selection/search",["jquery","../utils","../keys"],function(n,a,o){function t(t,e,i){t.call(this,e,i)}return t.prototype.render=function(t){var e=n('');this.$searchContainer=e,this.$search=e.find("input");var i=t.call(this);return this._transferTabIndex(),i},t.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),e.on("open",function(){n.$search.trigger("focus")}),e.on("close",function(){n.$search.val(""),n.$search.removeAttr("aria-activedescendant"),n.$search.trigger("focus")}),e.on("enable",function(){n.$search.prop("disabled",!1),n._transferTabIndex()}),e.on("disable",function(){n.$search.prop("disabled",!0)}),e.on("focus",function(t){n.$search.trigger("focus")}),e.on("results:focus",function(t){n.$search.attr("aria-activedescendant",t.id)}),this.$selection.on("focusin",".select2-search--inline",function(t){n.trigger("focus",t)}),this.$selection.on("focusout",".select2-search--inline",function(t){n._handleBlur(t)}),this.$selection.on("keydown",".select2-search--inline",function(t){if(t.stopPropagation(),n.trigger("keypress",t),n._keyUpPrevented=t.isDefaultPrevented(),t.which===o.BACKSPACE&&""===n.$search.val()){var e=n.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:e.term,params:e}}):t.call(this,e,i)},t}),t.define("select2/data/maximumSelectionLength",[],function(){function t(t,e,i){this.maximumSelectionLength=i.get("maximumSelectionLength"),t.call(this,e,i)}return t.prototype.query=function(i,n,r){var s=this;this.current(function(t){var e=null!=t?t.length:0;0=s.maximumSelectionLength?s.trigger("results:message",{message:"maximumSelected",args:{maximum:s.maximumSelectionLength}}):i.call(s,n,r)})},t}),t.define("select2/dropdown",["jquery","./utils"],function(e,t){function i(t,e){this.$element=t,this.options=e,i.__super__.constructor.call(this)}return t.Extend(i,t.Observable),i.prototype.render=function(){var t=e('');return t.attr("dir",this.options.get("dir")),this.$dropdown=t},i.prototype.bind=function(){},i.prototype.position=function(t,e){},i.prototype.destroy=function(){this.$dropdown.remove()},i}),t.define("select2/dropdown/search",["jquery","../utils"],function(r,t){function e(){}return e.prototype.render=function(t){var e=t.call(this),i=r('');return this.$searchContainer=i,this.$search=i.find("input"),e.prepend(i),e},e.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),this.$search.on("keydown",function(t){n.trigger("keypress",t),n._keyUpPrevented=t.isDefaultPrevented()}),this.$search.on("input",function(t){r(this).off("keyup")}),this.$search.on("keyup input",function(t){n.handleSearch(t)}),e.on("open",function(){n.$search.attr("tabindex",0),n.$search.focus(),window.setTimeout(function(){n.$search.focus()},0)}),e.on("close",function(){n.$search.attr("tabindex",-1),n.$search.val(""),n.$search.blur()}),e.on("focus",function(){e.isOpen()||n.$search.focus()}),e.on("results:all",function(t){null!=t.query.term&&""!==t.query.term||(n.showSearch(t)?n.$searchContainer.removeClass("select2-search--hide"):n.$searchContainer.addClass("select2-search--hide"))})},e.prototype.handleSearch=function(t){if(!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},e.prototype.showSearch=function(t,e){return!0},e}),t.define("select2/dropdown/hidePlaceholder",[],function(){function t(t,e,i,n){this.placeholder=this.normalizePlaceholder(i.get("placeholder")),t.call(this,e,i,n)}return t.prototype.append=function(t,e){e.results=this.removePlaceholder(e.results),t.call(this,e)},t.prototype.normalizePlaceholder=function(t,e){return"string"==typeof e&&(e={id:"",text:e}),e},t.prototype.removePlaceholder=function(t,e){for(var i=e.slice(0),n=e.length-1;0<=n;n--){var r=e[n];this.placeholder.id===r.id&&i.splice(n,1)}return i},t}),t.define("select2/dropdown/infiniteScroll",["jquery"],function(r){function t(t,e,i,n){this.lastParams={},t.call(this,e,i,n),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(t,e){this.$loadingMore.remove(),this.loading=!1,t.call(this,e),this.showLoadingMore(e)&&this.$results.append(this.$loadingMore)},t.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),e.on("query",function(t){n.lastParams=t,n.loading=!0}),e.on("query:append",function(t){n.lastParams=t,n.loading=!0}),this.$results.on("scroll",function(){var t=r.contains(document.documentElement,n.$loadingMore[0]);!n.loading&&t&&n.$results.offset().top+n.$results.outerHeight(!1)+50>=n.$loadingMore.offset().top+n.$loadingMore.outerHeight(!1)&&n.loadMore()})},t.prototype.loadMore=function(){this.loading=!0;var t=r.extend({},{page:1},this.lastParams);t.page++,this.trigger("query:append",t)},t.prototype.showLoadingMore=function(t,e){return e.pagination&&e.pagination.more},t.prototype.createLoadingMore=function(){var t=r('
    • '),e=this.options.get("translations").get("loadingMore");return t.html(e(this.lastParams)),t},t}),t.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,o){function t(t,e,i){this.$dropdownParent=i.get("dropdownParent")||f(document.body),t.call(this,e,i)}return t.prototype.bind=function(t,e,i){var n=this,r=!1;t.call(this,e,i),e.on("open",function(){n._showDropdown(),n._attachPositioningHandler(e),r||(r=!0,e.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),e.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}))}),e.on("close",function(){n._hideDropdown(),n._detachPositioningHandler(e)}),this.$dropdownContainer.on("mousedown",function(t){t.stopPropagation()})},t.prototype.destroy=function(t){t.call(this),this.$dropdownContainer.remove()},t.prototype.position=function(t,e,i){e.attr("class",i.attr("class")),e.removeClass("select2"),e.addClass("select2-container--open"),e.css({position:"absolute",top:-999999}),this.$container=i},t.prototype.render=function(t){var e=f(""),i=t.call(this);return e.append(i),this.$dropdownContainer=e},t.prototype._hideDropdown=function(t){this.$dropdownContainer.detach()},t.prototype._attachPositioningHandler=function(t,e){var i=this,n="scroll.select2."+e.id,r="resize.select2."+e.id,s="orientationchange.select2."+e.id,a=this.$container.parents().filter(o.hasScroll);a.each(function(){o.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),a.on(n,function(t){var e=o.GetData(this,"select2-scroll-position");f(this).scrollTop(e.y)}),f(window).on(n+" "+r+" "+s,function(t){i._positionDropdown(),i._resizeDropdown()})},t.prototype._detachPositioningHandler=function(t,e){var i="scroll.select2."+e.id,n="resize.select2."+e.id,r="orientationchange.select2."+e.id;this.$container.parents().filter(o.hasScroll).off(i),f(window).off(i+" "+n+" "+r)},t.prototype._positionDropdown=function(){var t=f(window),e=this.$dropdown.hasClass("select2-dropdown--above"),i=this.$dropdown.hasClass("select2-dropdown--below"),n=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=r.top,s.bottom=r.top+s.height;var a=this.$dropdown.outerHeight(!1),o=t.scrollTop(),l=t.scrollTop()+t.height(),h=or.bottom+a,c={left:r.left,top:s.bottom},d=this.$dropdownParent;"static"===d.css("position")&&(d=d.offsetParent());var p=d.offset();c.top-=p.top,c.left-=p.left,e||i||(n="below"),u||!h||e?!h&&u&&e&&(n="below"):n="above",("above"==n||e&&"below"!==n)&&(c.top=s.top-p.top-a),null!=n&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+n),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+n)),this.$dropdownContainer.css(c)},t.prototype._resizeDropdown=function(){var t={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(t.minWidth=t.width,t.position="relative",t.width="auto"),this.$dropdown.css(t)},t.prototype._showDropdown=function(t){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},t}),t.define("select2/dropdown/minimumResultsForSearch",[],function(){function t(t,e,i,n){this.minimumResultsForSearch=i.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),t.call(this,e,i,n)}return t.prototype.showSearch=function(t,e){return!(function t(e){for(var i=0,n=0;n');return t.attr("dir",this.options.get("dir")),this.$container=t,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(t[0],"element",this.$element),t},c}),t.define("jquery-mousewheel",["jquery"],function(t){return t}),t.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(r,t,s,e,a){if(null==r.fn.select2){var o=["open","close","destroy"];r.fn.select2=function(e){if("object"==typeof(e=e||{}))return this.each(function(){var t=r.extend(!0,{},e);new s(r(this),t)}),this;if("string"!=typeof e)throw new Error("Invalid arguments for Select2: "+e);var i,n=Array.prototype.slice.call(arguments,1);return this.each(function(){var t=a.GetData(this,"select2");null==t&&window.console&&console.error&&console.error("The select2('"+e+"') method was called on an element that is not using Select2."),i=t[e].apply(t,n)}),-1").attr("name",n.submitButton.name).val(u(n.submitButton).val()).appendTo(n.currentForm)),!(n.settings.submitHandler&&!n.settings.debug)||(e=n.settings.submitHandler.call(n,n.currentForm,i),t&&t.remove(),void 0!==e&&e)}return n.settings.debug&&i.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,t()):n.form()?n.pendingRequest?!(n.formSubmitted=!0):t():(n.focusInvalid(),!1)})),n)}t&&t.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var t,e,i;return u(this[0]).is("form")?t=this.validate().form():(i=[],t=!0,e=u(this[0].form).validate(),this.each(function(){(t=e.element(this)&&t)||(i=i.concat(e.errorList))}),e.errorList=i),t},rules:function(t,e){var i,n,r,s,a,o,l=this[0],h=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=l&&(!l.form&&h&&(l.form=this.closest("form")[0],l.name=this.attr("name")),null!=l.form)){if(t)switch(i=u.data(l.form,"validator").settings,n=i.rules,r=u.validator.staticRules(l),t){case"add":u.extend(r,u.validator.normalizeRule(e)),delete r.messages,n[l.name]=r,e.messages&&(i.messages[l.name]=u.extend(i.messages[l.name],e.messages));break;case"remove":return e?(o={},u.each(e.split(/\s/),function(t,e){o[e]=r[e],delete r[e]}),o):(delete n[l.name],r)}return(s=u.validator.normalizeRules(u.extend({},u.validator.classRules(l),u.validator.attributeRules(l),u.validator.dataRules(l),u.validator.staticRules(l)),l)).required&&(a=s.required,delete s.required,s=u.extend({required:a},s)),s.remote&&(a=s.remote,delete s.remote,s=u.extend(s,{remote:a})),s}}}),u.extend(u.expr.pseudos||u.expr[":"],{blank:function(t){return!u.trim(""+u(t).val())},filled:function(t){var e=u(t).val();return null!==e&&!!u.trim(""+e)},unchecked:function(t){return!u(t).prop("checked")}}),u.validator=function(t,e){this.settings=u.extend(!0,{},u.validator.defaults,t),this.currentForm=e,this.init()},u.validator.format=function(i,t){return 1===arguments.length?function(){var t=u.makeArray(arguments);return t.unshift(i),u.validator.format.apply(this,t)}:(void 0===t||(2Warning: No message defined for "+t.name+""),n=/\$?\{(\d+)\}/g;return"function"==typeof i?i=i.call(this,e.parameters,t):n.test(i)&&(i=u.validator.format(i.replace(n,"{$1}"),e.parameters)),i},formatAndAdd:function(t,e){var i=this.defaultMessage(t,e);this.errorList.push({message:i,element:t,method:e.method}),this.errorMap[t.name]=i,this.submitted[t.name]=i},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,i;for(t=0;this.errorList[t];t++)i=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return u(this.errorList).map(function(){return this.element})},showLabel:function(t,e){var i,n,r,s,a=this.errorsFor(t),o=this.idOrName(t),l=u(t).attr("aria-describedby");a.length?(a.removeClass(this.settings.validClass).addClass(this.settings.errorClass),a.html(e)):(i=a=u("<"+this.settings.errorElement+">").attr("id",o+"-error").addClass(this.settings.errorClass).html(e||""),this.settings.wrapper&&(i=a.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(i):this.settings.errorPlacement?this.settings.errorPlacement.call(this,i,u(t)):i.insertAfter(t),a.is("label")?a.attr("for",o):0===a.parents("label[for='"+this.escapeCssMeta(o)+"']").length&&(r=a.attr("id"),l?l.match(new RegExp("\\b"+this.escapeCssMeta(r)+"\\b"))||(l+=" "+r):l=r,u(t).attr("aria-describedby",l),(n=this.groups[t.name])&&(s=this,u.each(s.groups,function(t,e){e===n&&u("[name='"+s.escapeCssMeta(t)+"']",s.currentForm).attr("aria-describedby",a.attr("id"))})))),!e&&this.settings.success&&(a.text(""),"string"==typeof this.settings.success?a.addClass(this.settings.success):this.settings.success(a,t)),this.toShow=this.toShow.add(a)},errorsFor:function(t){var e=this.escapeCssMeta(this.idOrName(t)),i=u(t).attr("aria-describedby"),n="label[for='"+e+"'], label[for='"+e+"'] *";return i&&(n=n+", #"+this.escapeCssMeta(i).replace(/\s+/g,", #")),this.errors().filter(n)},escapeCssMeta:function(t){return t.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name)),u(t).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(t){return u(this.currentForm).find("[name='"+this.escapeCssMeta(t)+"']")},getLength:function(t,e){switch(e.nodeName.toLowerCase()){case"select":return u("option:selected",e).length;case"input":if(this.checkable(e))return this.findByName(e.name).filter(":checked").length}return t.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{boolean:function(t){return t},string:function(t,e){return!!u(t,e.form).length},function:function(t,e){return t(e)}},optional:function(t){var e=this.elementValue(t);return!u.validator.methods.required.call(this,e,t)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,u(t).addClass(this.settings.pendingClass),this.pending[t.name]=!0)},stopRequest:function(t,e){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[t.name],u(t).removeClass(this.settings.pendingClass),e&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(u(this.currentForm).submit(),this.submitButton&&u("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!e&&0===this.pendingRequest&&this.formSubmitted&&(u(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(t,e){return e="string"==typeof e&&e||"remote",u.data(t,"previousValue")||u.data(t,"previousValue",{old:null,valid:!0,message:this.defaultMessage(t,{method:e})})},destroy:function(){this.resetForm(),u(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(t,e){t.constructor===String?this.classRuleSettings[t]=e:u.extend(this.classRuleSettings,t)},classRules:function(t){var e={},i=u(t).attr("class");return i&&u.each(i.split(" "),function(){this in u.validator.classRuleSettings&&u.extend(e,u.validator.classRuleSettings[this])}),e},normalizeAttributeRule:function(t,e,i,n){/min|max|step/.test(i)&&(null===e||/number|range|text/.test(e))&&(n=Number(n),isNaN(n)&&(n=void 0)),n||0===n?t[i]=n:e===i&&"range"!==e&&(t[i]=!0)},attributeRules:function(t){var e,i,n={},r=u(t),s=t.getAttribute("type");for(e in u.validator.methods)i="required"===e?(""===(i=t.getAttribute(e))&&(i=!0),!!i):r.attr(e),this.normalizeAttributeRule(n,s,e,i);return n.maxlength&&/-1|2147483647|524288/.test(n.maxlength)&&delete n.maxlength,n},dataRules:function(t){var e,i,n={},r=u(t),s=t.getAttribute("type");for(e in u.validator.methods)""===(i=r.data("rule"+e.charAt(0).toUpperCase()+e.substring(1).toLowerCase()))&&(i=!0),this.normalizeAttributeRule(n,s,e,i);return n},staticRules:function(t){var e={},i=u.data(t.form,"validator");return i.settings.rules&&(e=u.validator.normalizeRule(i.settings.rules[t.name])||{}),e},normalizeRules:function(n,r){return u.each(n,function(t,e){if(!1!==e){if(e.param||e.depends){var i=!0;switch(typeof e.depends){case"string":i=!!u(e.depends,r.form).length;break;case"function":i=e.depends.call(r,r)}i?n[t]=void 0===e.param||e.param:(u.data(r.form,"validator").resetElements(u(r)),delete n[t])}}else delete n[t]}),u.each(n,function(t,e){n[t]=u.isFunction(e)&&"normalizer"!==t?e(r):e}),u.each(["minlength","maxlength"],function(){n[this]&&(n[this]=Number(n[this]))}),u.each(["rangelength","range"],function(){var t;n[this]&&(u.isArray(n[this])?n[this]=[Number(n[this][0]),Number(n[this][1])]:"string"==typeof n[this]&&(t=n[this].replace(/[\[\]]/g,"").split(/[\s,]+/),n[this]=[Number(t[0]),Number(t[1])]))}),u.validator.autoCreateRanges&&(null!=n.min&&null!=n.max&&(n.range=[n.min,n.max],delete n.min,delete n.max),null!=n.minlength&&null!=n.maxlength&&(n.rangelength=[n.minlength,n.maxlength],delete n.minlength,delete n.maxlength)),n},normalizeRule:function(t){if("string"==typeof t){var e={};u.each(t.split(/\s/),function(){e[this]=!0}),t=e}return t},addMethod:function(t,e,i){u.validator.methods[t]=e,u.validator.messages[t]=void 0!==i?i:u.validator.messages[t],e.length<3&&u.validator.addClassRules(t,u.validator.normalizeRule(t))},methods:{required:function(t,e,i){if(!this.depend(i,e))return"dependency-mismatch";if("select"!==e.nodeName.toLowerCase())return this.checkable(e)?0=i[0]&&n<=i[1]},min:function(t,e,i){return this.optional(e)||i<=t},max:function(t,e,i){return this.optional(e)||t<=i},range:function(t,e,i){return this.optional(e)||t>=i[0]&&t<=i[1]},step:function(t,e,i){var n,r=u(e).attr("type"),s="Step attribute on input type "+r+" is not supported.",a=new RegExp("\\b"+r+"\\b"),o=function(t){var e=(""+t).match(/(?:\.(\d+))?$/);return e&&e[1]?e[1].length:0},l=function(t){return Math.round(t*Math.pow(10,n))},h=!0;if(r&&!a.test(["text","number","range"].join()))throw new Error(s);return n=o(i),(o(t)>n||l(t)%l(i)!=0)&&(h=!1),this.optional(e)||h},equalTo:function(t,e,i){var n=u(i);return this.settings.onfocusout&&n.not(".validate-equalTo-blur").length&&n.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){u(e).valid()}),t===n.val()},remote:function(s,a,t,o){if(this.optional(a))return"dependency-mismatch";o="string"==typeof o&&o||"remote";var l,e,i,h=this.previousValue(a,o);return this.settings.messages[a.name]||(this.settings.messages[a.name]={}),h.originalMessage=h.originalMessage||this.settings.messages[a.name][o],this.settings.messages[a.name][o]=h.message,t="string"==typeof t&&{url:t}||t,i=u.param(u.extend({data:s},t.data)),h.old===i?h.valid:(h.old=i,(l=this).startRequest(a),(e={})[a.name]=s,u.ajax(u.extend(!0,{mode:"abort",port:"validate"+a.name,dataType:"json",data:e,context:l.currentForm,success:function(t){var e,i,n,r=!0===t||"true"===t;l.settings.messages[a.name][o]=h.originalMessage,r?(n=l.formSubmitted,l.resetInternals(),l.toHide=l.errorsFor(a),l.formSubmitted=n,l.successList.push(a),l.invalid[a.name]=!1,l.showErrors()):(e={},i=t||l.defaultMessage(a,{method:o,parameters:s}),e[a.name]=h.message=i,l.invalid[a.name]=!0,l.showErrors(e)),h.valid=r,l.stopRequest(a,r)}},t)),"pending")}}});var n,r={};return u.ajaxPrefilter?u.ajaxPrefilter(function(t,e,i){var n=t.port;"abort"===t.mode&&(r[n]&&r[n].abort(),r[n]=i)}):(n=u.ajax,u.ajax=function(t){var e=("mode"in t?t:u.ajaxSettings).mode,i=("port"in t?t:u.ajaxSettings).port;return"abort"===e?(r[i]&&r[i].abort(),r[i]=n.apply(this,arguments),r[i]):n.apply(this,arguments)}),u}),function(v){"use strict";v.event.special.destroyed||(v.event.special.destroyed={remove:function(t){t.handler&&t.handler()}}),v.fn.extend({maxlength:function(u,t){function h(t){var e=t.val();return e=u.twoCharLinebreak?e.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n"):e.replace(new RegExp("\r?\n","g"),"\n"),u.utf8?function(t){for(var e=0,i=0;ia&&(l=!1),l?d(e,n.removeClass(u.limitReachedClass).addClass(u.warningClass)):(r=e,n.css({display:"none"}),r.trigger("maxlength.hidden"))):d(e,n.removeClass(u.warningClass).addClass(u.limitReachedClass))),u.allowOverMax&&(t<0?e.addClass("overmax"):e.removeClass("overmax"))}function g(t,e){var i,n,r=(n=(i=t)[0],v.extend({},"function"==typeof n.getBoundingClientRect?n.getBoundingClientRect():{width:n.offsetWidth,height:n.offsetHeight},i.offset()));if("function"!==v.type(u.placement))if(v.isPlainObject(u.placement))!function(t,e){if(t&&e){var n={};v.each(["top","bottom","left","right","position"],function(t,e){var i=u.placement[e];void 0!==i&&(n[e]=i)}),e.css(n)}}(u.placement,e);else{var s=t.outerWidth(),a=e.outerWidth(),o=e.width(),l=e.height();switch(u.appendToParent&&(r.top-=t.parent().offset().top,r.left-=t.parent().offset().left),u.placement){case"bottom":e.css({top:r.top+r.height,left:r.left+r.width/2-o/2});break;case"top":e.css({top:r.top-l,left:r.left+r.width/2-o/2});break;case"left":e.css({top:r.top+r.height/2-l/2,left:r.left-o});break;case"right":e.css({top:r.top+r.height/2-l/2,left:r.left+r.width});break;case"bottom-right":e.css({top:r.top+r.height,left:r.left+r.width});break;case"top-right":e.css({top:r.top-l,left:r.left+s});break;case"top-left":e.css({top:r.top-l,left:r.left-a});break;case"bottom-left":e.css({top:r.top+t.outerHeight(),left:r.left-a});break;case"centered-right":e.css({top:r.top+l/2,left:r.left+s-a-3});break;case"bottom-right-inside":e.css({top:r.top+r.height,left:r.left+r.width-a});break;case"top-right-inside":e.css({top:r.top-l,left:r.left+s-a});break;case"top-left-inside":e.css({top:r.top-l,left:r.left});break;case"bottom-left-inside":e.css({top:r.top+t.outerHeight(),left:r.left})}}else u.placement(t,e,r)}function m(t){var e="maxlength";return u.allowOverMax&&(e="data-bs-mxl"),t.attr(e)||t.attr("size")}var e=v("body");return v.isFunction(u)&&!t&&(t=u,u={}),u=v.extend({showOnReady:!1,alwaysShow:!1,threshold:10,warningClass:"label label-success",limitReachedClass:"label label-important label-danger",separator:" / ",preText:"",postText:"",showMaxLength:!0,placement:"bottom",message:null,showCharsTyped:!0,validate:!1,utf8:!1,appendToParent:!1,twoCharLinebreak:!0,allowOverMax:!1},u),this.each(function(){function t(){var t=p(h.val(),o,"0");o=m(h),l||(l=v('').css({display:"none",position:"absolute",whiteSpace:"nowrap",zIndex:1099}).html(t)),h.is("textarea")&&(h.data("maxlenghtsizex",h.outerWidth()),h.data("maxlenghtsizey",h.outerHeight()),h.mouseup(function(){(h.outerWidth()!==h.data("maxlenghtsizex")||h.outerHeight()!==h.data("maxlenghtsizey"))&&g(h,l),h.data("maxlenghtsizex",h.outerWidth()),h.data("maxlenghtsizey",h.outerHeight())})),u.appendToParent?(h.parent().append(l),h.parent().css("position","relative")):e.append(l),f(c(h,m(h)),h,o,l),g(h,l)}var o,l,h=v(this);v(window).resize(function(){l&&g(h,l)}),u.allowOverMax&&(v(this).attr("data-bs-mxl",v(this).attr("maxlength")),v(this).removeAttr("maxlength")),u.showOnReady?h.ready(function(){t()}):h.focus(function(){t()}),h.on("maxlength.reposition",function(){g(h,l)}),h.on("destroyed",function(){l&&l.remove()}),h.on("blur",function(){l&&!u.showOnReady&&l.remove()}),h.on("input",function(){var t,e,i,n,r=m(h),s=c(h,r),a=!0;return u.validate&&s<0?(e=r,i=(t=h).val(),n=0,u.twoCharLinebreak&&"\n"===(i=i.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n")).substr(i.length-1)&&i.length%2==1&&(n=1),t.val(i.substr(0,e-n)),a=!1):f(s,h,o,l),("bottom-right-inside"===u.placement||"top-right-inside"===u.placement)&&g(h,l),a})})}})}(jQuery),function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(t){return i(t,window,document)}):"object"==typeof exports?module.exports=function(t,e){return t||(t=window),e||(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),i(e,t,t.document)}:i(jQuery,window,document)}(function($,M,y,W){"use strict";var f,b,e,t,T=function(S){this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new b(t?se(this[f.iApiIndex]):this)},this.fnAddData=function(t,e){var i=this.api(!0),n=$.isArray(t)&&($.isArray(t[0])||$.isPlainObject(t[0]))?i.rows.add(t):i.row.add(t);return(e===W||e)&&i.draw(),n.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),i=e.settings()[0],n=i.oScroll;t===W||t?e.draw(!1):""===n.sX&&""===n.sY||Bt(i)},this.fnClearTable=function(t){var e=this.api(!0).clear();(t===W||t)&&e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,i){var n=this.api(!0),r=n.rows(t),s=r.settings()[0],a=s.aoData[r[0][0]];return r.remove(),e&&e.call(this,s,a),(i===W||i)&&n.draw(),a},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,i,n,r,s){var a=this.api(!0);null===e||e===W?a.search(t,i,n,s):a.column(e).search(t,i,n,s),a.draw()},this.fnGetData=function(t,e){var i=this.api(!0);if(t===W)return i.data().toArray();var n=t.nodeName?t.nodeName.toLowerCase():"";return e!==W||"td"==n||"th"==n?i.cell(t,e).data():i.row(t).data()||null},this.fnGetNodes=function(t){var e=this.api(!0);return t!==W?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),i=t.nodeName.toUpperCase();if("TR"==i)return e.row(t).index();if("TD"!=i&&"TH"!=i)return null;var n=e.cell(t).index();return[n.row,n.columnVisible,n.column]},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,i){return this.api(!0).row(t).child(e,i).show().child()[0]},this.fnPageChange=function(t,e){var i=this.api(!0).page(t);(e===W||e)&&i.draw(!1)},this.fnSetColumnVis=function(t,e,i){var n=this.api(!0).column(t).visible(e);(i===W||i)&&n.columns.adjust().draw()},this.fnSettings=function(){return se(this[f.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,i){this.api(!0).order.listener(t,e,i)},this.fnUpdate=function(t,e,i,n,r){var s=this.api(!0);return i===W||null===i?s.row(e).data(t):s.cell(e,i).data(t),(r===W||r)&&s.columns.adjust(),(n===W||n)&&s.draw(),0},this.fnVersionCheck=f.fnVersionCheck;var C=this,k=S===W,D=this.length;for(var t in k&&(S={}),this.oApi=this.internal=f.internal,T.ext.internal)t&&(this[t]=Re(t));return this.each(function(){var s,a=1").appendTo(h)),c.nTHead=i[0];var n=h.children("tbody");0===n.length&&(n=$("").appendTo(h)),c.nTBody=n[0];var r=h.children("tfoot");if(0===r.length&&0").appendTo(h)),0===r.length||0===r.children().length?h.addClass(d.sNoFooter):0/g,s=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,a=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),o=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,l=function(t){return!t||!0===t||"-"===t},p=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},h=function(t,e){return i[e]||(i[e]=new RegExp(St(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(i[e],"."):t},u=function(t,e,i){var n="string"==typeof t;return!!l(t)||(e&&n&&(t=h(t,e)),i&&n&&(t=t.replace(o,"")),!isNaN(parseFloat(t))&&isFinite(t))},c=function(t,e,i){return!!l(t)||(l(n=t)||"string"==typeof n)&&!!u(d(t),e,i)||null;var n},U=function(t,e,i){var n=[],r=0,s=t.length;if(i!==W)for(;r").css({position:"fixed",top:0,left:-1*$(M).scrollLeft(),height:1,width:1,overflow:"hidden"}).append($("
      ").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append($("
      ").css({width:"100%",height:10}))).appendTo("body"),n=i.children(),r=n.children();e.barWidth=n[0].offsetWidth-n[0].clientWidth,e.bScrollOversize=100===r[0].offsetWidth&&100!==n[0].clientWidth,e.bScrollbarLeft=1!==Math.round(r.offset().left),e.bBounding=!!i[0].getBoundingClientRect().width,i.remove()}$.extend(t.oBrowser,T.__browser),t.oScroll.iBarWidth=T.__browser.barWidth}function S(t,e,i,n,r,s){var a,o=n,l=!1;for(i!==W&&(a=i,l=!0);o!==r;)t.hasOwnProperty(o)&&(a=l?e(a,t[o],o,t):t[o],l=!0,o+=s);return a}function R(t,e){var i=T.defaults.column,n=t.aoColumns.length,r=$.extend({},T.models.oColumn,i,{nTh:e||y.createElement("th"),sTitle:i.sTitle?i.sTitle:e?e.innerHTML:"",aDataSort:i.aDataSort?i.aDataSort:[n],mData:i.mData?i.mData:n,idx:n});t.aoColumns.push(r);var s=t.aoPreSearchCols;s[n]=$.extend({},T.models.oSearch,s[n]),I(t,n,$(e).data())}function I(t,e,i){var n=t.aoColumns[e],r=t.oClasses,s=$(n.nTh);if(!n.sWidthOrig){n.sWidthOrig=s.attr("width")||null;var a=(s.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);a&&(n.sWidthOrig=a[1])}i!==W&&null!==i&&(L(i),A(T.defaults.column,i),i.mDataProp===W||i.mData||(i.mData=i.mDataProp),i.sType&&(n._sManualType=i.sType),i.className&&!i.sClass&&(i.sClass=i.className),i.sClass&&s.addClass(i.sClass),$.extend(n,i),oe(n,i,"sWidth","sWidthOrig"),i.iDataSort!==W&&(n.aDataSort=[i.iDataSort]),oe(n,i,"aDataSort"));var o=n.mData,l=Z(o),h=n.mRender?Z(n.mRender):null,u=function(t){return"string"==typeof t&&-1!==t.indexOf("@")};n._bAttrSrc=$.isPlainObject(o)&&(u(o.sort)||u(o.type)||u(o.filter)),n._setter=null,n.fnGetData=function(t,e,i){var n=l(t,e,W,i);return h&&e?h(n,e,t,i):n},n.fnSetData=function(t,e,i){return Q(o)(t,e,i)},"number"!=typeof o&&(t._rowReadObject=!0),t.oFeatures.bSort||(n.bSortable=!1,s.addClass(r.sSortableNone));var c=-1!==$.inArray("asc",n.asSorting),d=-1!==$.inArray("desc",n.asSorting);n.bSortable&&(c||d)?n.sSortingClassJUI=c&&!d?(n.sSortingClass=r.sSortableAsc,r.sSortJUIAscAllowed):!c&&d?(n.sSortingClass=r.sSortableDesc,r.sSortJUIDescAllowed):(n.sSortingClass=r.sSortable,r.sSortJUI):(n.sSortingClass=r.sSortableNone,n.sSortingClassJUI="")}function Y(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;Ut(t);for(var i=0,n=e.length;ie&&t[r]--;-1!=n&&i===W&&t.splice(n,1)}function et(i,n,t,e){var r,s,a=i.aoData[n],o=function(t,e){for(;t.childNodes.length;)t.removeChild(t.firstChild);t.innerHTML=D(i,n,e,"display")};if("dom"!==t&&(t&&"auto"!==t||"dom"!==a.src)){var l=a.anCells;if(l)if(e!==W)o(l[e],e);else for(r=0,s=l.length;r").appendTo(a)),e=0,i=u.length;etr").attr("role","row"),$(a).find(">tr>th, >tr>td").addClass(h.sHeaderTH),$(o).find(">tr>th, >tr>td").addClass(h.sFooterTH),null!==o){var c=t.aoFooter[0];for(e=0,i=c.length;e=t.fnRecordsDisplay()?0:o,t.iInitDisplayStart=-1);var u=t._iDisplayStart,c=t.fnDisplayEnd();if(t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,Ht(t,!1);else if(l){if(!t.bDestroying&&!pt(t))return}else t.iDraw++;if(0!==h.length)for(var d=l?0:u,p=l?t.aoData.length:c,f=d;f",{class:s?r[0]:""}).append($("",{valign:"top",colSpan:F(t),class:t.oClasses.sRowEmpty}).html(b))[0]}ce(t,"aoHeaderCallback","header",[$(t.nTHead).children("tr")[0],J(t),u,c,h]),ce(t,"aoFooterCallback","footer",[$(t.nTFoot).children("tr")[0],J(t),u,c,h]);var x=$(t.nTBody);x.children().detach(),x.append($(i)),ce(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}else Ht(t,!1)}function lt(t,e){var i=t.oFeatures,n=i.bSort,r=i.bFilter;n&&Qt(t),r?yt(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,ot(t),t._drawHold=!1}function ht(t){var e=t.oClasses,i=$(t.nTable),n=$("
      ").insertBefore(i),r=t.oFeatures,s=$("
      ",{id:t.sTableId+"_wrapper",class:e.sWrapper+(t.nTFoot?"":" "+e.sNoFooter)});t.nHolding=n[0],t.nTableWrapper=s[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var a,o,l,h,u,c,d=t.sDom.split(""),p=0;p")[0],"'"==(h=d[p+1])||'"'==h){for(u="",c=2;d[p+c]!=h;)u+=d[p+c],c++;if("H"==u?u=e.sJUIHeader:"F"==u&&(u=e.sJUIFooter),-1!=u.indexOf(".")){var f=u.split(".");l.id=f[0].substr(1,f[0].length-1),l.className=f[1]}else"#"==u.charAt(0)?l.id=u.substr(1,u.length-1):l.className=u;p+=c}s.append(l),s=$(l)}else if(">"==o)s=s.parent();else if("l"==o&&r.bPaginate&&r.bLengthChange)a=It(t);else if("f"==o&&r.bFilter)a=vt(t);else if("r"==o&&r.bProcessing)a=Nt(t);else if("t"==o)a=zt(t);else if("i"==o&&r.bInfo)a=At(t);else if("p"==o&&r.bPaginate)a=Ft(t);else if(0!==T.ext.feature.length)for(var g=T.ext.feature,m=0,v=g.length;m',o=n.sSearch;o=o.match(/_INPUT_/)?o.replace("_INPUT_",a):o+a;var l=$("
      ",{id:s.f?null:e+"_filter",class:t.sFilter}).append($("
      ").addClass(t.sLength);return n.aanFeatures.l||(u[0].id=e+"_length"),u.children().append(n.oLanguage.sLengthMenu.replace("_MENU_",o[0].outerHTML)),$("select",u).val(n._iDisplayLength).on("change.DT",function(t){Rt(n,$(this).val()),ot(n)}),$(n.nTable).on("length.dt.DT",function(t,e,i){n===e&&$("select",u).val(i)}),u[0]}function Ft(t){var e=t.sPaginationType,u=T.ext.pager[e],c="function"==typeof u,d=function(t){ot(t)},i=$("
      ").addClass(t.oClasses.sPaging+e)[0],p=t.aanFeatures;return c||u.fnInit(t,i,d),p.p||(i.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(c){var e,i,n=t._iDisplayStart,r=t._iDisplayLength,s=t.fnRecordsDisplay(),a=-1===r,o=a?0:Math.ceil(n/r),l=a?1:Math.ceil(s/r),h=u(o,l);for(e=0,i=p.p.length;e",{id:t.aanFeatures.r?null:t.sTableId+"_processing",class:t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function Ht(t,e){t.oFeatures.bProcessing&&$(t.aanFeatures.r).css("display",e?"block":"none"),ce(t,null,"processing",[t,e])}function zt(t){var e=$(t.nTable);e.attr("role","grid");var i=t.oScroll;if(""===i.sX&&""===i.sY)return t.nTable;var n=i.sX,r=i.sY,s=t.oClasses,a=e.children("caption"),o=a.length?a[0]._captionSide:null,l=$(e[0].cloneNode(!1)),h=$(e[0].cloneNode(!1)),u=e.children("tfoot"),c="
      ",d=function(t){return t?Xt(t):null};u.length||(u=null);var p=$(c,{class:s.sScrollWrapper}).append($(c,{class:s.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:n?d(n):"100%"}).append($(c,{class:s.sScrollHeadInner}).css({"box-sizing":"content-box",width:i.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===o?a:null).append(e.children("thead"))))).append($(c,{class:s.sScrollBody}).css({position:"relative",overflow:"auto",width:d(n)}).append(e));u&&p.append($(c,{class:s.sScrollFoot}).css({overflow:"hidden",border:0,width:n?d(n):"100%"}).append($(c,{class:s.sScrollFootInner}).append(h.removeAttr("id").css("margin-left",0).append("bottom"===o?a:null).append(e.children("tfoot")))));var f=p.children(),g=f[0],m=f[1],v=u?f[2]:null;return n&&$(m).on("scroll.DT",function(t){var e=this.scrollLeft;g.scrollLeft=e,u&&(v.scrollLeft=e)}),$(m).css(r&&i.bCollapse?"max-height":"height",r),t.nScrollHead=g,t.nScrollBody=m,t.nScrollFoot=v,t.aoDrawCallback.push({fn:Bt,sName:"scrolling"}),p[0]}function Bt(i){var t,e,n,r,s,a,o,l,h,u=i.oScroll,c=u.sX,d=u.sXInner,p=u.sY,f=u.iBarWidth,g=$(i.nScrollHead),m=g[0].style,v=g.children("div"),y=v[0].style,b=v.children("table"),x=i.nScrollBody,w=$(x),_=x.style,S=$(i.nScrollFoot).children("div"),C=S.children("table"),k=$(i.nTHead),D=$(i.nTable),T=D[0],M=T.style,A=i.nTFoot?$(i.nTFoot):null,E=i.oBrowser,P=E.bScrollOversize,L=U(i.aoColumns,"nTh"),O=[],R=[],I=[],F=[],j=function(t){var e=t.style;e.paddingTop="0",e.paddingBottom="0",e.borderTopWidth="0",e.borderBottomWidth="0",e.height=0},N=x.scrollHeight>x.clientHeight;if(i.scrollBarVis!==N&&i.scrollBarVis!==W)return i.scrollBarVis=N,void Y(i);i.scrollBarVis=N,D.children("thead, tfoot").remove(),A&&(a=A.clone().prependTo(D),e=A.find("tr"),r=a.find("tr")),s=k.clone().prependTo(D),t=k.find("tr"),n=s.find("tr"),s.find("th, td").removeAttr("tabindex"),c||(_.width="100%",g[0].style.width="100%"),$.each(ct(i,s),function(t,e){o=q(i,t),e.style.width=i.aoColumns[o].sWidth}),A&&$t(function(t){t.style.width=""},r),h=D.outerWidth(),""===c?(M.width="100%",P&&(D.find("tbody").height()>x.offsetHeight||"scroll"==w.css("overflow-y"))&&(M.width=Xt(D.outerWidth()-f)),h=D.outerWidth()):""!==d&&(M.width=Xt(d),h=D.outerWidth()),$t(j,n),$t(function(t){I.push(t.innerHTML),O.push(Xt($(t).css("width")))},n),$t(function(t,e){-1!==$.inArray(t,L)&&(t.style.width=O[e])},t),$(n).height(0),A&&($t(j,r),$t(function(t){F.push(t.innerHTML),R.push(Xt($(t).css("width")))},r),$t(function(t,e){t.style.width=R[e]},e),$(r).height(0)),$t(function(t,e){t.innerHTML='
      '+I[e]+"
      ",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=O[e]},n),A&&$t(function(t,e){t.innerHTML='
      '+F[e]+"
      ",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=R[e]},r),D.outerWidth()x.offsetHeight||"scroll"==w.css("overflow-y")?h+f:h,P&&(x.scrollHeight>x.offsetHeight||"scroll"==w.css("overflow-y"))&&(M.width=Xt(l-f)),""!==c&&""===d||ae(i,1,"Possible column misalignment",6)):l="100%",_.width=Xt(l),m.width=Xt(l),A&&(i.nScrollFoot.style.width=Xt(l)),p||P&&(_.height=Xt(T.offsetHeight+f));var H=D.outerWidth();b[0].style.width=Xt(H),y.width=Xt(H);var z=D.height()>x.clientHeight||"scroll"==w.css("overflow-y"),B="padding"+(E.bScrollbarLeft?"Left":"Right");y[B]=z?f+"px":"0px",A&&(C[0].style.width=Xt(H),S[0].style.width=Xt(H),S[0].style[B]=z?f+"px":"0px"),D.children("colgroup").insertBefore(D.children("thead")),w.scroll(),!i.bSorted&&!i.bFiltered||i._drawHold||(x.scrollTop=0)}function $t(t,e,i){for(var n,r,s=0,a=0,o=e.length;a/g;function Ut(t){var e,i,n,r=t.nTable,s=t.aoColumns,a=t.oScroll,o=a.sY,l=a.sX,h=a.sXInner,u=s.length,c=j(t,"bVisible"),d=$("th",t.nTHead),p=r.getAttribute("width"),f=r.parentNode,g=!1,m=t.oBrowser,v=m.bScrollOversize,y=r.style.width;for(y&&-1!==y.indexOf("%")&&(p=y),e=0;e").appendTo(x.find("tbody"));for(x.find("thead, tfoot").remove(),x.append($(t.nTHead).clone()).append($(t.nTFoot).clone()),x.find("tfoot th, tfoot td").css("width",""),d=ct(t,x.find("thead")[0]),e=0;e").css({width:i.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(t.aoData.length)for(e=0;e").css(l||o?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(x).appendTo(f);l&&h?x.width(h):l?(x.css("width","auto"),x.removeAttr("width"),x.width()").css("width",Xt(t)).appendTo(e||y.body),n=i[0].offsetWidth;return i.remove(),n}function Vt(t,e){var i=Gt(t,e);if(i<0)return null;var n=t.aoData[i];return n.nTr?n.anCells[e]:$("").html(D(t,i,e,"display"))[0]}function Gt(t,e){for(var i,n=-1,r=-1,s=0,a=t.aoData.length;sn&&(n=i.length,r=s);return r}function Xt(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function Zt(t){var e,i,n,r,s,a,o,l=[],h=t.aoColumns,u=t.aaSortingFixed,c=$.isPlainObject(u),d=[],p=function(t){t.length&&!$.isArray(t[0])?d.push(t):$.merge(d,t)};for($.isArray(u)&&p(u),c&&u.pre&&p(u.pre),p(t.aaSorting),c&&u.post&&p(u.post),e=0;e/g,""),u=o.nTh;u.removeAttribute("aria-sort"),e=o.bSortable?h+("asc"===(0=l.length?[0,e[1]]:e)})),t.search!==W&&$.extend(r.oPreviousSearch,Mt(t.search)),t.columns)for(a=0,o=t.columns.length;at?new b(e[t],this[t]):null},filter:function(t){var e=[];if(me.filter)e=me.filter.call(this,t,this);else for(var i=0,n=this.length;i").addClass(e);$("td",r).addClass(e).html(t)[0].colSpan=F(s),a.push(r[0])}})(t,e),i._details&&i._details.detach(),i._details=$(a),i._detailsShow&&i._details.insertAfter(i.nTr)),this)}),e([ke+".show()",De+".show()"],function(t){return Se(this,!0),this}),e([ke+".hide()",De+".hide()"],function(){return Se(this,!1),this}),e([ke+".remove()",De+".remove()"],function(){return _e(this),this}),e(ke+".isShown()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1});var Te=/^([^:]+):(name|visIdx|visible)$/,Me=function(t,e,i,n,r){for(var s=[],a=0,o=r.length;a").appendTo(t);v(a,r)}else{switch(c=null,d="",r){case"ellipsis":t.append('');break;case"first":c=f.sFirst,d=r+(0",{class:p.sPageButton+" "+d,"aria-controls":o.sTableId,"aria-label":g[r],"data-dt-idx":m,tabindex:o.iTabIndex,id:0===l&&"string"==typeof r?o.sTableId+"_"+r:null}).html(c).appendTo(t),{action:r},s),m++)}};try{i=$(t).find(y.activeElement).data("dt-idx")}catch(t){}v($(t).empty(),e),i!==W&&$(t).find("[data-dt-idx="+i+"]").focus()}}}),$.extend(T.ext.type.detect,[function(t,e){var i=e.oLanguage.sDecimal;return u(t,i)?"num"+i:null},function(t,e){if(t&&!(t instanceof Date)&&!s.test(t))return null;var i=Date.parse(t);return null!==i&&!isNaN(i)||l(t)?"date":null},function(t,e){var i=e.oLanguage.sDecimal;return u(t,i,!0)?"num-fmt"+i:null},function(t,e){var i=e.oLanguage.sDecimal;return c(t,i)?"html-num"+i:null},function(t,e){var i=e.oLanguage.sDecimal;return c(t,i,!0)?"html-num-fmt"+i:null},function(t,e){return l(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),$.extend(T.ext.type.search,{html:function(t){return l(t)?t:"string"==typeof t?t.replace(n," ").replace(r,""):""},string:function(t){return l(t)?t:"string"==typeof t?t.replace(n," "):t}});var Pe=function(t,e,i,n){return 0===t||t&&"-"!==t?(e&&(t=h(t,e)),t.replace&&(i&&(t=t.replace(i,"")),n&&(t=t.replace(n,""))),1*t):-1/0};function Le(i){$.each({num:function(t){return Pe(t,i)},"num-fmt":function(t){return Pe(t,i,o)},"html-num":function(t){return Pe(t,i,r)},"html-num-fmt":function(t){return Pe(t,i,r,o)}},function(t,e){f.type.order[t+i+"-pre"]=e,t.match(/^html\-/)&&(f.type.search[t+i]=f.type.search.html)})}$.extend(f.type.order,{"date-pre":function(t){var e=Date.parse(t);return isNaN(e)?-1/0:e},"html-pre":function(t){return l(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return l(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return t").addClass(l.sSortJUIWrapper).append(a.contents()).append($("").addClass(l.sSortIcon+" "+o.sSortingClassJUI)).appendTo(a),$(s.nTable).on("order.dt.DT",function(t,e,i,n){if(s===e){var r=o.idx;a.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==n[r]?l.sSortAsc:"desc"==n[r]?l.sSortDesc:o.sSortingClass),a.find("span."+l.sSortIcon).removeClass(l.sSortJUIAsc+" "+l.sSortJUIDesc+" "+l.sSortJUI+" "+l.sSortJUIAscAllowed+" "+l.sSortJUIDescAllowed).addClass("asc"==n[r]?l.sSortJUIAsc:"desc"==n[r]?l.sSortJUIDesc:o.sSortingClassJUI)}})}}});var Oe=function(t){return"string"==typeof t?t.replace(//g,">").replace(/"/g,"""):t};function Re(e){return function(){var t=[se(this[T.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return T.ext.internal[e].apply(this,t)}}return T.render={number:function(s,a,o,l,h){return{display:function(t){if("number"!=typeof t&&"string"!=typeof t)return t;var e=t<0?"-":"",i=parseFloat(t);if(isNaN(i))return Oe(t);i=i.toFixed(o),t=Math.abs(i);var n=parseInt(t,10),r=o?a+(t-n).toFixed(o).substring(2):"";return e+(l||"")+n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,s)+r+(h||"")}}},text:function(){return{display:Oe,filter:Oe}}},$.extend(T.ext.internal,{_fnExternApiFunc:Re,_fnBuildAjax:dt,_fnAjaxUpdate:pt,_fnAjaxParameters:ft,_fnAjaxUpdateDraw:gt,_fnAjaxDataSrc:mt,_fnAddColumn:R,_fnColumnOptions:I,_fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:q,_fnColumnIndexToVisible:C,_fnVisbleColumns:F,_fnGetColumns:j,_fnColumnTypes:k,_fnApplyColumnDefs:N,_fnHungarianMap:v,_fnCamelToHungarian:A,_fnLanguageCompat:E,_fnBrowserDetect:O,_fnAddData:H,_fnAddTr:z,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==W?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(t,e,i){return $.inArray(i,t.aoData[e].anCells)},_fnGetCellData:D,_fnSetCellData:B,_fnSplitObjNotation:X,_fnGetObjectDataFn:Z,_fnSetObjectDataFn:Q,_fnGetDataMaster:J,_fnClearTable:K,_fnDeleteIndex:tt,_fnInvalidate:et,_fnGetRowElements:it,_fnCreateTr:nt,_fnBuildHead:st,_fnDrawHead:at,_fnDraw:ot,_fnReDraw:lt,_fnAddOptionsHtml:ht,_fnDetectHeader:ut,_fnGetUniqueThs:ct,_fnFeatureHtmlFilter:vt,_fnFilterComplete:yt,_fnFilterCustom:bt,_fnFilterColumn:xt,_fnFilter:wt,_fnFilterCreateSearch:_t,_fnEscapeRegex:St,_fnFilterData:Dt,_fnFeatureHtmlInfo:At,_fnUpdateInfo:Et,_fnInfoMacros:Pt,_fnInitialise:Lt,_fnInitComplete:Ot,_fnLengthChange:Rt,_fnFeatureHtmlLength:It,_fnFeatureHtmlPaginate:Ft,_fnPageChange:jt,_fnFeatureHtmlProcessing:Nt,_fnProcessingDisplay:Ht,_fnFeatureHtmlTable:zt,_fnScrollDraw:Bt,_fnApplyToChildren:$t,_fnCalculateColumnWidths:Ut,_fnThrottle:Yt,_fnConvertToWidth:qt,_fnGetWidestNode:Vt,_fnGetMaxLenString:Gt,_fnStringToCss:Xt,_fnSortFlatten:Zt,_fnSort:Qt,_fnSortAria:Jt,_fnSortListener:Kt,_fnSortAttachListener:te,_fnSortingClasses:ee,_fnSortData:ie,_fnSaveState:ne,_fnLoadState:re,_fnSettingsFromNode:se,_fnLog:ae,_fnMap:oe,_fnBindAction:he,_fnCallbackReg:ue,_fnCallbackFire:ce,_fnLengthOverflow:de,_fnRenderer:pe,_fnDataSource:fe,_fnRowAttributes:rt,_fnExtend:le,_fnCalculateEnd:function(){}}),(($.fn.dataTable=T).$=$).fn.dataTableSettings=T.settings,$.fn.dataTableExt=T.ext,$.fn.DataTable=function(t){return $(this).dataTable(t).api()},$.each(T,function(t,e){$.fn.DataTable[t]=e}),$.fn.dataTable}),function(i){"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(t){return i(t,window,document)}):"object"==typeof exports?module.exports=function(t,e){return t||(t=window),e&&e.fn.dataTable||(e=require("datatables.net")(t,e).$),i(e,t,t.document)}:i(jQuery,window,document)}(function(b,t,n,r){"use strict";var s=b.fn.dataTable;return b.extend(!0,s.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",renderer:"bootstrap"}),b.extend(s.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"}),s.ext.renderer.pageButton.bootstrap=function(o,t,l,e,h,u){var c,d,i,p=new s.Api(o),f=o.oClasses,g=o.oLanguage.oPaginate,m=o.oLanguage.oAria.paginate||{},v=0,y=function(t,e){var i,n,r,s,a=function(t){t.preventDefault(),b(t.currentTarget).hasClass("disabled")||p.page()==t.data.action||p.page(t.data.action).draw("page")};for(i=0,n=e.length;i",{class:f.sPageButton+" "+d,id:0===l&&"string"==typeof s?o.sTableId+"_"+s:null}).append(b("
      ",{href:"#","aria-controls":o.sTableId,"aria-label":m[s],"data-dt-idx":v,tabindex:o.iTabIndex,class:"page-link"}).html(c)).appendTo(t),o.oApi._fnBindAction(r,{action:s},a),v++)}};try{i=b(t).find(n.activeElement).data("dt-idx")}catch(t){}y(b(t).empty().html('
        ').children("ul"),e),i!==r&&b(t).find("[data-dt-idx="+i+"]").focus()},s}),"function"!=typeof Object.create&&(Object.create=function(t){function e(){}return e.prototype=t,new e}),function(n,e,t,i){"use strict";var r={_positionClasses:["bottom-left","bottom-right","top-right","top-left","bottom-center","top-center","mid-center"],_defaultIcons:["success","error","info","warning"],init:function(t,e){this.prepareOptions(t,n.toast.options),this.process()},prepareOptions:function(t,e){var i={};"string"==typeof t||t instanceof Array?i.text=t:i=t,this.options=n.extend({},e,i)},process:function(){this.setup(),this.addToDom(),this.position(),this.bindToast(),this.animate()},setup:function(){var t="";if(this._toastEl=this._toastEl||n("
        ",{class:"jq-toast-single"}),t+='',this.options.allowToastClose&&(t+='×'),this.options.text instanceof Array){this.options.heading&&(t+='

        '+this.options.heading+"

        "),t+='
          ';for(var e=0;e'+this.options.text[e]+"";t+="
        "}else this.options.heading&&(t+='

        '+this.options.heading+"

        "),t+=this.options.text;this._toastEl.html(t),!1!==this.options.bgColor&&this._toastEl.css("background-color",this.options.bgColor),!1!==this.options.textColor&&this._toastEl.css("color",this.options.textColor),this.options.textAlign&&this._toastEl.css("text-align",this.options.textAlign),!1!==this.options.icon&&(this._toastEl.addClass("jq-has-icon"),-1!==n.inArray(this.options.icon,this._defaultIcons)&&this._toastEl.addClass("jq-icon-"+this.options.icon)),!1!==this.options.class&&this._toastEl.addClass(this.options.class)},position:function(){"string"==typeof this.options.position&&-1!==n.inArray(this.options.position,this._positionClasses)?"bottom-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,bottom:20}):"top-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,top:20}):"mid-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,top:n(e).outerHeight()/2-this._container.outerHeight()/2}):this._container.addClass(this.options.position):"object"==typeof this.options.position?this._container.css({top:this.options.position.top?this.options.position.top:"auto",bottom:this.options.position.bottom?this.options.position.bottom:"auto",left:this.options.position.left?this.options.position.left:"auto",right:this.options.position.right?this.options.position.right:"auto"}):this._container.addClass("bottom-left")},bindToast:function(){var e=this;this._toastEl.on("afterShown",function(){e.processLoader()}),this._toastEl.find(".close-jq-toast-single").on("click",function(t){t.preventDefault(),"fade"===e.options.showHideTransition?(e._toastEl.trigger("beforeHide"),e._toastEl.fadeOut(function(){e._toastEl.trigger("afterHidden")})):"slide"===e.options.showHideTransition?(e._toastEl.trigger("beforeHide"),e._toastEl.slideUp(function(){e._toastEl.trigger("afterHidden")})):(e._toastEl.trigger("beforeHide"),e._toastEl.hide(function(){e._toastEl.trigger("afterHidden")}))}),"function"==typeof this.options.beforeShow&&this._toastEl.on("beforeShow",function(){e.options.beforeShow()}),"function"==typeof this.options.afterShown&&this._toastEl.on("afterShown",function(){e.options.afterShown()}),"function"==typeof this.options.beforeHide&&this._toastEl.on("beforeHide",function(){e.options.beforeHide()}),"function"==typeof this.options.afterHidden&&this._toastEl.on("afterHidden",function(){e.options.afterHidden()})},addToDom:function(){var t=n(".jq-toast-wrap");if(0===t.length?(t=n("
        ",{class:"jq-toast-wrap"}),n("body").append(t)):(!this.options.stack||isNaN(parseInt(this.options.stack,10)))&&t.empty(),t.find(".jq-toast-single:hidden").remove(),t.append(this._toastEl),this.options.stack&&!isNaN(parseInt(this.options.stack),10)){var e=t.find(".jq-toast-single").length-this.options.stack;0=e[i];)i+=1;return i}function s(t,e,i){var n;if("number"==typeof e&&(e=[e]),!Array.isArray(e))throw new Error("noUiSlider ("+V+"): 'range' contains invalid value.");if(!r(n="min"===t?0:"max"===t?100:parseFloat(t))||!r(e[0]))throw new Error("noUiSlider ("+V+"): 'range' value isn't numeric.");i.xPct.push(n),i.xVal.push(e[0]),n?i.xSteps.push(!isNaN(e[1])&&e[1]):isNaN(e[1])||(i.xSteps[0]=e[1]),i.xHighestCompleteStep.push(0)}function a(t,e,i){if(!e)return!0;i.xSteps[t]=c([i.xVal[t],i.xVal[t+1]],e)/u(i.xPct[t],i.xPct[t+1]);var n=(i.xVal[t+1]-i.xVal[t])/i.xNumSteps[t],r=Math.ceil(Number(n.toFixed(3))-1),s=i.xVal[t]+i.xNumSteps[t]*r;i.xHighestCompleteStep[t]=s}function i(t,e,i){var n;this.xPct=[],this.xVal=[],this.xSteps=[i||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=e;var r=[];for(n in t)t.hasOwnProperty(n)&&r.push([t[n],n]);for(r.length&&"object"==typeof r[0][0]?r.sort(function(t,e){return t[0][0]-e[0][0]}):r.sort(function(t,e){return t[0]-e[0]}),n=0;n=t.slice(-1)[0])return 100;var n,r,s=d(i,t),a=t[s-1],o=t[s],l=e[s-1],h=e[s];return l+(r=i,c(n=[a,o],n[0]<0?r+Math.abs(n[0]):r-n[0])/u(l,h))}(this.xVal,this.xPct,t)},i.prototype.fromStepping=function(t){return function(t,e,i){if(100<=i)return t.slice(-1)[0];var n,r=d(i,e),s=t[r-1],a=t[r],o=e[r-1];return n=[s,a],(i-o)*u(o,e[r])*(n[1]-n[0])/100+n[0]}(this.xVal,this.xPct,t)},i.prototype.getStep=function(t){return function(t,e,i,n){if(100===n)return n;var r,s,a=d(n,t),o=t[a-1],l=t[a];return i?(l-o)/2= 2) required for mode 'count'.");var n=e-1,r=100/n;for(e=[];n--;)e[n]=n*r;e.push(100),t="positions"}return"positions"===t?e.map(function(t){return S.fromStepping(i?S.getStep(t):t)}):"values"===t?i?e.map(function(t){return S.fromStepping(S.getStep(S.toStepping(t)))}):e:void 0}(n,t.values||!1,t.stepped||!1),o=(g=r,m=n,v=a,y={},e=S.xVal[0],i=S.xVal[S.xVal.length-1],x=b=!1,w=0,(v=v.slice().sort(function(t,e){return t-e}).filter(function(t){return!this[t]&&(this[t]=!0)},{}))[0]!==e&&(v.unshift(e),b=!0),v[v.length-1]!==i&&(v.push(i),x=!0),v.forEach(function(t,e){var i,n,r,s,a,o,l,h,u,c,d=t,p=v[e+1],f="steps"===m;if(f&&(i=S.xNumSteps[e]),i||(i=p-d),!1!==d&&void 0!==p)for(i=Math.max(i,1e-7),n=d;n<=p;n=(n+i).toFixed(7)/1){for(h=(a=(s=S.toStepping(n))-w)/g,c=a/(u=Math.round(h)),r=1;r<=u;r+=1)y[(o=w+r*c).toFixed(5)]=[S.fromStepping(o),0];l=-1i.stepAfter.startValue&&(r=i.stepAfter.startValue-n),s=n>i.thisStep.startValue?i.thisStep.step:!1!==i.stepBefore.step&&n-i.stepBefore.highestStep,100===t?r=null:0===t&&(s=null);var a=S.countStepDecimals();return null!==r&&!1!==r&&(r=Number(r.toFixed(a))),null!==s&&!1!==s&&(s=Number(s.toFixed(a))),[s,r]})},on:i,off:function(t){var n=t&&t.split(".")[0],r=n&&t.substring(n.length);Object.keys(b).forEach(function(t){var e=t.split(".")[0],i=t.substring(e.length);n&&n!==e||r&&r!==i||delete b[t]})},get:q,set:Y,setHandle:function(t,e,i){var n=[];if(!(0<=(t=Number(t))&&t● {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:W,nullColor:W,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:W,chartRangeMin:W,chartRangeClip:!1,colorMap:W,tooltipFormat:new v(' {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new v(' {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:W,thresholdValue:0,chartRangeMax:W,chartRangeMin:W,chartRangeClip:!1,tooltipFormat:new v("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:W,tooltipFormat:new v("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new v(' {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:W,targetColor:"#4a2",chartRangeMax:W,chartRangeMin:W,tooltipFormat:new v("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},e=function(){var t,e;return t=function(){this.init.apply(this,arguments)},1=t)return i[2];return W}}),I.range_map=function(t){return new z(t)},d=e({init:function(t,e){var i=I(t);this.$el=i,this.options=e,this.currentPageX=0,this.currentPageY=0,this.el=t,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!e.get("disableTooltips"),this.highlightEnabled=!e.get("disableHighlight")},registerSparkline:function(t){this.splist.push(t),this.over&&this.updateDisplay()},registerCanvas:function(t){var e=I(t.canvas);this.canvas=t,(this.$canvas=e).mouseenter(I.proxy(this.mouseenter,this)),e.mouseleave(I.proxy(this.mouseleave,this)),e.click(I.proxy(this.mouseclick,this))},reset:function(t){this.splist=[],this.tooltip&&t&&(this.tooltip.remove(),this.tooltip=W)},mouseclick:function(t){var e=I.Event("sparklineClick");e.originalEvent=t,e.sparklines=this.splist,this.$el.trigger(e)},mouseenter:function(t){I(C.body).unbind("mousemove.jqs"),I(C.body).bind("mousemove.jqs",I.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=t.pageX,this.currentPageY=t.pageY,this.currentEl=t.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new n(this.options),this.tooltip.updatePosition(t.pageX,t.pageY)),this.updateDisplay()},mouseleave:function(){I(C.body).unbind("mousemove.jqs");var t,e=this.splist,i=e.length,n=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),t=0;t
      '),this.$input=v('').appendTo(this.$container),this.$element.before(this.$container),this.build(e),this.isInit=!1}function s(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(t){return t[i]}}}function o(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(){return i}}}function y(t){return t?e.text(t).html():""}function h(t){var e=0;if(document.selection){t.focus();var i=document.selection.createRange();i.moveStart("character",-t.value.length),e=i.text.length}else(t.selectionStart||"0"==t.selectionStart)&&(e=t.selectionStart);return e}var u={tagClass:function(t){return"label label-info"},itemValue:function(t){return t?t.toString():t},itemText:function(t){return this.itemValue(t)},itemTitle:function(t){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!1,onTagExists:function(t,e){e.hide().fadeIn()},trimValue:!1,allowDuplicates:!1};a.prototype={constructor:a,add:function(t,e,i){var n=this;if(!(n.options.maxTags&&n.itemsArray.length>=n.options.maxTags)&&(!1===t||t)){if("string"==typeof t&&n.options.trimValue&&(t=v.trim(t)),"object"==typeof t&&!n.objectItems)throw"Can't add objects when itemValue option is not set";if(!t.toString().match(/^\s*$/)){if(n.isSelect&&!n.multiple&&0n.options.maxInputLength)){var d=v.Event("beforeItemAdd",{item:t,cancel:!1,options:i});if(n.$element.trigger(d),!d.cancel){n.itemsArray.push(t);var p=v(''+y(l)+'');p.data("item",t),n.findInputWrapper().before(p),p.after(" ");var f=v('option[value="'+encodeURIComponent(o)+'"]',n.$element).length||v('option[value="'+y(o)+'"]',n.$element).length;if(n.isSelect&&!f){var g=v("");g.data("item",t),g.attr("value",o),n.$element.append(g)}e||n.pushVal(),(n.options.maxTags===n.itemsArray.length||n.items().toString().length===n.options.maxInputLength)&&n.$container.addClass("bootstrap-tagsinput-max"),v(".typeahead, .twitter-typeahead",n.$container).length&&n.$input.typeahead("val",""),this.isInit?n.$element.trigger(v.Event("itemAddedOnInit",{item:t,options:i})):n.$element.trigger(v.Event("itemAdded",{item:t,options:i}))}}}else if(n.options.onTagExists){var m=v(".tag",n.$container).filter(function(){return v(this).data("item")===c});n.options.onTagExists(t,m)}}}},remove:function(e,t,i){var n=this;if(n.objectItems&&(e=(e="object"==typeof e?v.grep(n.itemsArray,function(t){return n.options.itemValue(t)==n.options.itemValue(e)}):v.grep(n.itemsArray,function(t){return n.options.itemValue(t)==e}))[e.length-1]),e){var r=v.Event("beforeItemRemove",{item:e,cancel:!1,options:i});if(n.$element.trigger(r),r.cancel)return;v(".tag",n.$container).filter(function(){return v(this).data("item")===e}).remove(),v("option",n.$element).filter(function(){return v(this).data("item")===e}).remove(),-1!==v.inArray(e,n.itemsArray)&&n.itemsArray.splice(v.inArray(e,n.itemsArray),1)}t||n.pushVal(),n.options.maxTags>n.itemsArray.length&&n.$container.removeClass("bootstrap-tagsinput-max"),n.$element.trigger(v.Event("itemRemoved",{item:e,options:i}))},removeAll:function(){for(v(".tag",this.$container).remove(),v("option",this.$element).remove();0$1")}}))}if(l.options.typeaheadjs){var i,e=null,r=l.options.typeaheadjs;i=v.isArray(r)?(e=r[0],r[1]):r,l.$input.typeahead(e,i).on("typeahead:selected",v.proxy(function(t,e){i.valueKey?l.add(e[i.valueKey]):l.add(e),l.$input.typeahead("val","")},l))}l.$container.on("click",v.proxy(function(t){l.$element.attr("disabled")||l.$input.removeAttr("disabled"),l.$input.focus()},l)),l.options.addOnBlur&&l.options.freeInput&&l.$input.on("focusout",v.proxy(function(t){0===v(".typeahead, .twitter-typeahead",l.$container).length&&(l.add(l.$input.val()),l.$input.val(""))},l)),l.$container.on("keydown","input",v.proxy(function(t){var e=v(t.target),i=l.findInputWrapper();if(l.$element.attr("disabled"))l.$input.attr("disabled","disabled");else{switch(t.which){case 8:if(0===h(e[0])){var n=i.prev();n.length&&l.remove(n.data("item"))}break;case 46:if(0===h(e[0])){var r=i.next();r.length&&l.remove(r.data("item"))}break;case 37:var s=i.prev();0===e.val().length&&s[0]&&(s.before(i),e.focus());break;case 39:var a=i.next();0===e.val().length&&a[0]&&(a.after(i),e.focus())}var o=e.val().length;Math.ceil(o/5),e.attr("size",Math.max(this.inputSize,e.val().length))}},l)),l.$container.on("keypress","input",v.proxy(function(t){var e=v(t.target);if(l.$element.attr("disabled"))l.$input.attr("disabled","disabled");else{var s,i,a,n=e.val(),r=l.options.maxChars&&n.length>=l.options.maxChars;l.options.freeInput&&(s=t,i=l.options.confirmKeys,a=!1,v.each(i,function(t,e){if("number"==typeof e&&s.which===e)return!(a=!0);if(s.which===e.which){var i=!e.hasOwnProperty("altKey")||s.altKey===e.altKey,n=!e.hasOwnProperty("shiftKey")||s.shiftKey===e.shiftKey,r=!e.hasOwnProperty("ctrlKey")||s.ctrlKey===e.ctrlKey;if(i&&n&&r)return!(a=!0)}}),a||r)&&(0!==n.length&&(l.add(r?n.substr(0,l.options.maxChars):n),e.val("")),!1===l.options.cancelConfirmKeysOnEmpty&&t.preventDefault());var o=e.val().length;Math.ceil(o/5),e.attr("size",Math.max(this.inputSize,e.val().length))}},l)),l.$container.on("click","[data-role=remove]",v.proxy(function(t){l.$element.attr("disabled")||l.remove(v(t.target).closest(".tag").data("item"))},l)),l.options.itemValue===u.itemValue&&("INPUT"===l.$element[0].tagName?l.add(l.$element.val()):v("option",l.$element).each(function(){l.add(v(this).attr("value"),!0)}))},destroy:function(){this.$container.off("keypress","input"),this.$container.off("click","[role=remove]"),this.$container.remove(),this.$element.removeData("tagsinput"),this.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var t=this.$input[0],e=this.$container[0];t&&t.parentNode!==e;)t=t.parentNode;return v(t)}},v.fn.tagsinput=function(i,n,r){var s=[];return this.each(function(){var t=v(this).data("tagsinput");if(t)if(i||n){if(void 0!==t[i]){if(3===t[i].length&&void 0!==r)var e=t[i](n,null,r);else e=t[i](n);void 0!==e&&s.push(e)}}else s.push(t);else t=new a(this,i),v(this).data("tagsinput",t),s.push(t),"SELECT"===this.tagName&&v("option",v(this)).attr("selected","selected"),v(this).val(v(this).val())}),"string"==typeof i?1");v(function(){v("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery);var $jscomp={scope:{},findInternal:function(t,e,i){t instanceof String&&(t=String(t));for(var n=t.length,r=0;r a",this.nav),this.container=this.main.children("div"),this.pages=this.container.children("div"),this.current_index=null,this.options.toolbarSettings.toolbarButtonPosition="right"===this.options.toolbarSettings.toolbarButtonPosition?"end":this.options.toolbarSettings.toolbarButtonPosition,this.options.toolbarSettings.toolbarButtonPosition="left"===this.options.toolbarSettings.toolbarButtonPosition?"start":this.options.toolbarSettings.toolbarButtonPosition,this.options.theme=null===this.options.theme||""===this.options.theme?"default":this.options.theme,this.init()}var i={selected:0,keyNavigation:!0,autoAdjustHeight:!0,cycleSteps:!1,backButtonSupport:!0,useURLhash:!0,showStepURLhash:!0,lang:{next:"Next",previous:"Previous"},toolbarSettings:{toolbarPosition:"bottom",toolbarButtonPosition:"end",showNextButton:!0,showPreviousButton:!0,toolbarExtraButtons:[]},anchorSettings:{anchorClickable:!0,enableAllAnchors:!1,markDoneStep:!0,markAllPreviousStepsAsDone:!0,removeDoneStepOnNavigateBack:!1,enableAnchorOnDoneStep:!0},contentURL:null,contentCache:!0,ajaxSettings:{},disabledSteps:[],errorSteps:[],hiddenSteps:[],theme:"default",transitionEffect:"none",transitionSpeed:"400"};l.extend(n.prototype,{init:function(){this._setElements(),this._setToolbar(),this._setEvents();var t=this.options.selected;if(this.options.useURLhash){var e=r.location.hash;if(e&&0").text(this.options.lang.next).addClass("btn btn-secondary sw-btn-next").attr("type","button"):null,n=!1!==this.options.toolbarSettings.showPreviousButton?l("").text(this.options.lang.previous).addClass("btn btn-secondary sw-btn-prev").attr("type","button"):null,r=l("
      ").addClass("btn-group mr-2 sw-btn-group").attr("role","group").append(n,i),s=null;switch(this.options.toolbarSettings.toolbarExtraButtons&&0
      ").addClass("btn-group mr-2 sw-btn-group-extra").attr("role","group"),l.each(this.options.toolbarSettings.toolbarExtraButtons,function(t,e){s.append(e.clone(!0))})),this.options.toolbarSettings.toolbarPosition){case"top":(t=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t);break;case"bottom":(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s):e.append(s),this.container.after(e);break;case"both":(t=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t),(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r.clone(!0)),null!==s&&("start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s.clone(!0)):e.append(s.clone(!0))),this.container.after(e);break;default:(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),this.options.toolbarSettings.toolbarButtonPosition,e.append(s),this.container.after(e)}return!0},_setEvents:function(){var i=this;return l(this.steps).on("click",function(t){if(t.preventDefault(),!1===i.options.anchorSettings.anchorClickable)return!0;var e=i.steps.index(this);if(!1===i.options.anchorSettings.enableAnchorOnDoneStep&&i.steps.eq(e).parent("li").hasClass("done"))return!0;e!==i.current_index&&(!1!==i.options.anchorSettings.enableAllAnchors&&!1!==i.options.anchorSettings.anchorClickable?i._showStep(e):i.steps.eq(e).parent("li").hasClass("done")&&i._showStep(e))}),l(".sw-btn-next",this.main).on("click",function(t){t.preventDefault(),i._showNext()}),l(".sw-btn-prev",this.main).on("click",function(t){t.preventDefault(),i._showPrevious()}),this.options.keyNavigation&&l(t).keyup(function(t){i._keyNav(t)}),this.options.backButtonSupport&&l(r).on("hashchange",function(t){if(!i.options.useURLhash)return!0;if(r.location.hash){var e=l("a[href*='"+r.location.hash+"']",i.nav);e&&0")["prepend"==this.insertMode?"prependTo":"appendTo"](this.el)[0]);var t=this.canvas;if(t.width=this.size,t.height=this.size,this.ctx=t.getContext("2d"),1")[0];t.width=i.size,t.height=i.size,t.getContext("2d").drawImage(e,0,0,s,s),i.arcFill=i.ctx.createPattern(t,"no-repeat"),i.drawFrame(i.lastFrameValue)}var e,i=this,n=this.fill,r=this.ctx,s=this.size;if(!n)throw Error("The fill is not specified!");if("string"==typeof n&&(n={color:n}),n.color&&(this.arcFill=n.color),n.gradient){var a=n.gradient;if(1==a.length)this.arcFill=a[0];else if(1n.oldScroll?n.forward:n.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var o=n.oldScroll=a.triggerPoint;(o&&l||!o&&!l)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var h in t)t[h].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?m.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?m.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,r=t.length;n=s.oldScroll,u=!l&&!h,!g&&l&&h?(c.queueTrigger(s.backward),n[c.group.id]=c.group):!g&&u?(c.queueTrigger(s.forward),n[c.group.id]=c.group):g&&s.oldScroll>=c.triggerPoint&&(c.queueTrigger(s.forward),n[c.group.id]=c.group)}}return m.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){t&&t(),e.refreshAll()},m.requestAnimationFrame=function(t){(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}).call(window,t)},m.Context=e}(),function(){"use strict";function a(t,e){return t.triggerPoint-e.triggerPoint}function o(t,e){return e.triggerPoint-t.triggerPoint}function e(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),i[this.axis][this.name]=this}var i={vertical:{},horizontal:{}},n=window.Waypoint;e.prototype.add=function(t){this.waypoints.push(t)},e.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},e.prototype.flushTriggers=function(){for(var t in this.triggerQueues){var e=this.triggerQueues[t],i="up"===t||"left"===t;e.sort(i?o:a);for(var n=0,r=e.length;n - - - - - - Gradido Login Server: Überprüfe Transaktion - - - - - - - -
      - - -
      - -
      -
      -

      Transaktion unterzeichnen

      -
      -

      Überweisung

      -
      -
      - Konto - Gradido -
      -
      - Normaler User <info@software-labor.de> - -10 GDD -
      -
      - dario frodo <dariofrodo@gmx.de> - 10 GDD -
      -
      -
      -
      - Aktives Konto -
      -
      - Normaler User <info@software-labor.de> -
      -
      -
      -
      - Verwendungszweck -
      -
      -   -
      -
      -
      - - -
      -
      -
      -
      -
      -
      - - -
      - 98.597 ms -
      -
      -

      Community Server in Entwicklung

      -

      Alpha 0.21.KW21.05

      -
      -
      - - - \ No newline at end of file diff --git a/community_server/websrc/gulpfile.js b/community_server/websrc/gulpfile.js deleted file mode 100644 index a1cd459f7..000000000 --- a/community_server/websrc/gulpfile.js +++ /dev/null @@ -1,58 +0,0 @@ -var gulp = require('gulp'); -var less = require('gulp-less'); -var concat = require('gulp-concat'); -var merge = require('merge-stream'); -var watch = require('gulp-watch'); -//var minify = require('gulp-minify'); -var cleanCSS = require('gulp-clean-css'); - -var bundleStyles = function() { - - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.css')) - //.pipe(minify()) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -var compressStyles = function() { - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.min.css')) - .pipe(cleanCSS({ - compatibility: 'ie8', - level: { - 1: { - all: true - }, - 2: { - all: true - } - } - })) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -gulp.task("bundleStyles", bundleStyles); -gulp.task("compressStyles", compressStyles); - -gulp.task('watchStyles', function() { - bundleStyles(); - watch("src/less/*.less", function() { - bundleStyles(); - }); -}); \ No newline at end of file diff --git a/community_server/websrc/package.json b/community_server/websrc/package.json deleted file mode 100644 index 8d456e83b..000000000 --- a/community_server/websrc/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "gradido_mithriljs_client", - "version": "0.0.1", - "description": "Webinterface Client for Gradido Websites written with mithrilJS", - "main": "app.js", - "scripts": { - "watch:js": "watchify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ../webroot/js/app.js -v", - "watch:css": "gulp watchStyles", - "bundle:css": "gulp bundleStyles", - "prebuild": "browserify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ./public/app.rl.js -v", - "build": "gulp compressStyles && browserify ./public/app.rl.js -g uglifyify -p bundle-collapser/plugin | uglifyjs --compress --mangle toplevel,eval > ../webroot/js/app.min.js" - }, - "author": "Dario Rekowski", - "license": "ISC", - "dependencies": { - "google-protobuf": "^3.10.0-rc.1", - "mithril": "github:StephanHoyer/mithril.js#rewrite" - }, - "devDependencies": { - "@babel/core": "^7.6.0", - "@babel/preset-env": "^7.6.0", - "babelify": "^10.0.0", - "browserify": "^16.5.0", - "bs58check": "^2.1.2", - "bundle-collapser": "^1.3.0", - "gulp": "^4.0.2", - "gulp-clean-css": "^4.3.0", - "gulp-concat": "^2.6.1", - "gulp-less": "^4.0.1", - "gulp-minify": "^3.1.0", - "gulp-watch": "^5.0.1", - "merge-stream": "^2.0.0", - "uglify-js": "^3.6.0", - "uglifyify": "^5.0.2" - } -} diff --git a/community_server/websrc/src/less/01-layout.less b/community_server/websrc/src/less/01-layout.less deleted file mode 100644 index 2aed60860..000000000 --- a/community_server/websrc/src/less/01-layout.less +++ /dev/null @@ -1,113 +0,0 @@ -/* ============================================================ - - Grid Layout Page - - Datei : layout.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -/*==================================== -= BREAK POINTS = -====================================*/ - -/* https://scotch.io/courses/getting-started-with-less/responsive-and-media-queries */ -@wide-screen-down: ~'(max-width:1199px)'; -@desktop-down: ~'(max-width:991px)'; -@tablet-down: ~'(max-width:767px)'; -@phone-down: ~'(max-width:480px)'; -@small-phone-down: ~'(max-width:320px)'; - -/* GRID */ -.layout { - display: grid; - grid-template-rows: [top] 8vh [line2] 86vh [footer1] 3vh [footer2] 5vh [end]; - grid-template-columns: [left1] auto [left2] 1fr [left3] 12fr [right3] 1fr [right2] auto [right1]; - grid-template-areas: "header header header header header" - "left . center center ." - "footer footer footer footer footer" - "bottom bottom bottom bottom bottom"; - margin: 0; - padding: 0; -} - -@media @wide-screen-down { - .layout { - grid-template-areas: "header header header header header" - "left . center center center" - "footer footer footer footer footer" - "bottom bottom bottom bottom bottom"; - } - -} - -@media @tablet-down { - .layout { - position: relative; - display: grid; - grid-template-rows: [top] 12vh [line2] 80vh [footer1] 3vh [footer2] 8vh [end]; - grid-template-columns: [left1] 100vw [right1]; - grid-template-areas: "header" - "center" - "footer" - "bottom"; - margin: 0; - padding: 0; - } - -} - -.header-notify { - grid-area: header; - grid-column-start: right3; - grid-column-end: right2; -} - -.header-user { - grid-area: header; - grid-column-start: right2; - grid-column-end: right1; -} - -.sidebar1 { - grid-area: left; - grid-row-start: top; - grid-row-end: end; -} - -@media @tablet-down { - .sidebar1 { - position: relative; - grid-area: header; - z-index: 2; - top: -300px; - right: 0px; - } - - .header-user, - .header-notify { - grid-area: header; - } - -} - -.center-form-single, -.content { - grid-area: center; - grid-row-start: line2; - grid-row-end: footer1; -} - -.footer { - grid-area: footer; - grid-row-start: footer1; - grid-row-end: footer2; -} - -.nav-bottom { - grid-area: bottom; - grid-row-start: footer2; - grid-row-end: end; -} diff --git a/community_server/websrc/src/less/02-colors.less b/community_server/websrc/src/less/02-colors.less deleted file mode 100644 index 90eff9346..000000000 --- a/community_server/websrc/src/less/02-colors.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - Generic Color Definitions - - Vars and some generic CSS rules. - - Datei : colors.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -/* MAIN */ -@main-background: #f9fafb; -@main-text: #212529; -@main-link-text: #000; - -/* MENU */ -@menu-background: #fff; -@menu-link-text: #4F4F4F; -@menu-link-selected: #047006; -@menu-border-color: #f2f4f5; - -/* CONTENT */ -@container-background: #fff; -@container-text: #212529; -@container-header: #21252969; -@container-shadow: rgba(183, 192, 206, .2); -@container-border: rgba(238, 238, 238, .75); - -/* CONTENT-NAV */ -@content-nav: #565656; - -/* CONTENT-ITEMS */ -@action-button-text: #fff; -@action-button-border: #047006; -@action-button-background1: #047006; -@action-button-background: #f9fafb; -@info-item-border: grey; -@form-header-border: #047006; -@form-header-background: #f9fafb; - -/* CONTENT-TABLE */ -@content-table-title: #313131; -@content-table-header: #101010; -@content-table-header-bg: #fafafa; -@content-table-header-border: #f2f4f9; -@content-row-bg: #f0f2f5; - -/* FORMS */ -@form-label: #212529; -@badge-color-warning: #fff; -@badge-background-warning: #00e093; -@badge-color-error: #fff; -@badge-background-error: #ff5f66; - -/* VARIOUS INDIVIDUAL */ -@orange: #ffa600; - -/* XXX TODO XXX */ -@dialog-background: #fff; - -/*rgba(0, 0, 0, 0.5) ??? */ -@dialog-text: #000; -@dialog-background-extra: rgba(0, 0, 0, 0.1); -@dialog-border: grey; -@form-text-background: rgba(0, 0, 0, 0.05); -@form-button-border: grey; -@form-button-text: #444; -@button-text: #000; -@button-border-color: #000; -@button-background-active: lightgray; -@print-background: #111; -@print-text: #000; -@print-link-text: #06c; -@gdt-text: #a27824; - -/* NOTIFICATION */ -@info: grey; -@info-border: gray; -@info-background: #80808026; -@info-background-icon: #80808026; -@error: red; -@error-border: rgba(255, 0, 0, 0.5); -@success: #047006; -@success-message: #1A1A1A; -@success-message-background: #06c50a; -@success-border: #04700675; -@success-background-icon: rgba(4, 112, 6, 0.2); -@success-background-hover: lightgreen; -@alert: #ff5f66; -@alert-color: #fff; -@alert-background: #ff5f669e; -@alert-background-icon: #ff5f662e; -@alert-blink: #ff5f669e; -@notify: #525c5d; -@notify-blink: #525c5d82; - -/* https://www.w3schools.com/colors/colors_shades.asp */ -@unobtrusive: grey; -@light: #F5F5F5; -@verylight: #fbfbfb; - -.info-color { - color: @info; -} - -.success-color { - color: @success; -} - -.alert-color { - color: @alert; -} - -.orange-color { - color: @orange -} - -.blue-color { - color: blue -} - -.unobtrusive { - color: @unobtrusive; -} - -.info-icon { - color: @info; - background-color: @info-background-icon; -} - -.success-icon { - color: @success; - background-color: @success-background-icon; -} - -.alert-icon { - color: @alert; - background-color: @alert-background-icon; -} - -/* ======================= - Gradido - =======================*/ - -/* Gradido */ -.grd-negative-currency { - color: red; -} - -/* Gradido Transform */ -.gdt-text-color { - color: @gdt-text; -} - -.grd_clickable { - cursor: pointer; -} diff --git a/community_server/websrc/src/less/03-typography.less b/community_server/websrc/src/less/03-typography.less deleted file mode 100644 index 06572c9ff..000000000 --- a/community_server/websrc/src/less/03-typography.less +++ /dev/null @@ -1,32 +0,0 @@ -/* ============================================================ - - Typography Definitions - - Datei : typography.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@body-fs: 100%; -@body-lh: 27px; -@content-lh: 1.75em; -@content-letter-spacing: .03rem; -@nav-fs: .8em; -@nav-bottom-fs: .9em; -@nav-bottom-fs-mobile: .8em; -@nav-btn-large-fs: 35px; -@nav-icon-fs: 1.2em; -@nav-icons-fs: 18px; -@nav-icon-main-fs: 32px; -@footer-fs: 70%; -@sidebar1-header-fs: .75em; -@sidebar1-lh: 2.5em; -@link-title-lh: normal; -@devinfo-fs: smaller; -@devinfo-fs-mobile: .7em; - -.small-font { - font-size: .75em; - font-weight: 300; -} diff --git a/community_server/websrc/src/less/05-screen.less b/community_server/websrc/src/less/05-screen.less deleted file mode 100644 index 975d57dc1..000000000 --- a/community_server/websrc/src/less/05-screen.less +++ /dev/null @@ -1,174 +0,0 @@ -/* ============================================================ - - Basic screen styles. - - Datei : screen.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@font-face { - font-family: 'Material Icons Outlined'; - font-style: normal; - font-weight: 400; - src: url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.eot); /* For IE6-8 */ - src: local('Material Icons Outlined'), local('Material-Icons-Outlined'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2) format('woff2'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff) format('woff'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf) format('truetype'); -} - -.material-icons-outlined { - font-family: 'Material Icons Outlined'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - vertical-align: middle; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} - -@media screen { - - /* ======================= - Basis - =======================*/ - html, - body { - font-family: 'Roboto', sans-serif; - font-size: @body-fs; - line-height: @body-lh; - color: @main-text; - background-color: @main-background; - margin: 0; - overflow: auto; - } - - div { - border-collapse: collapse; - box-sizing: border-box; - } - - /* ======================= - Kopfbereich - =======================*/ - .header { - display: flex; - justify-content: space-between; - align-items: center; - flex: flex-grow; - width: 100%; - padding: 1em; - background-color: @menu-background; - } - - /* ======================= - Fußbereich - =======================*/ - .footer { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - font-size: @footer-fs; - font-style: italic; - line-height: 0; - } - - .bottomright { - position: fixed; - bottom: 0; - right: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - line-height: .125em; - padding-right: .25em; - text-align: right; - } - - @media @tablet-down { - .bottomright { - font-size: @devinfo-fs-mobile; - font-weight: 300; - line-height: 1em; - width: 100px; - } - - .bottomright p { - margin-block-start: 0; - margin-block-end: 2px; - margin-inline-start: 0; - margin-inline-end: 0; - } - - } - - .bottomleft { - position: fixed; - bottom: 0; - left: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - line-height: 1.125em; - padding-left: 0.25em; - } - - /* ======================= - Sonstige - =======================*/ - - /* Hyperlinks */ - a { - text-decoration: none; - color: inherit; - } - - main a { - text-decoration: underline; - font-style: italic; - } - - a:link, - a:visited { - color: inherit; - } - - a:hover, - a:focus { - text-decoration: underline; - } - - a:active { - background-color: @menu-background; - color: @main-link-text; - } - - a:focus, - a:active { - outline: none; - } - - a.grd_invisible_link { - color: @main-link-text; - text-decoration: none; - } - - a.grd_invisible_link:hover { - color: @unobtrusive; - } - - [type=button]:not(:disabled), - [type=reset]:not(:disabled), - [type=submit]:not(:disabled), - button:not(:disabled) { - cursor: pointer - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/06-messages.less b/community_server/websrc/src/less/06-messages.less deleted file mode 100644 index 4c4d0fcb7..000000000 --- a/community_server/websrc/src/less/06-messages.less +++ /dev/null @@ -1,89 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for flash messages. - - Datei : messages.css - Datum : 30.10.2019, 16:04:16 - Autor : einhornimmond, Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .flash-messages { - width: 30%; - position: absolute; - top: 57px; - left: 241px; - text-align: center; - - .alert { - margin: 0; - padding: 1em; - vertical-align: middle; - border-radius: 5px; - } - - .alert-success { - color: @success-message !important; - background-color: @success-message-background; - border: 1px solid @success-border; - } - - .alert-error { - color: @alert-color !important; - background-color: @error; - border: 1px solid @error-border; - } - - .message { - padding: 5px; - } - - .success { - color: @success; - } - - .error { - color: @error; - } - - } - - .flash-messages.hidden { - display: none; - } - - @media @tablet-down { - .flash-messages { - width: 90%; - top: 0; - left: 0; - text-align: center; - } - - } - - /* messages, update flash */ - .grd-error { - color: @error; - border: 1px solid @error-border; - padding: 5px; - } - - .grd-info { - border: 1px dotted @info-border; - padding: 5px; - } - - .grd-success { - padding: 5px; - color: @success; - } - -} diff --git a/community_server/websrc/src/less/07-user.less b/community_server/websrc/src/less/07-user.less deleted file mode 100644 index 50270ff49..000000000 --- a/community_server/websrc/src/less/07-user.less +++ /dev/null @@ -1,134 +0,0 @@ -/* ============================================================ - - User Menu - - Datei : user.less - Datum : 2020-07-03 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-user { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-end; - align-content: flex-end; - position: relative; - width: 100%; - min-width: 12em; - height: 40px; - background-color: @container-background; - border: 1px solid @menu-border-color; - border-radius: 0 0 0 18px; - } - - .user-menu-container { - display: flex; - justify-content: flex-end; - align-items: center; - font-size: .8em; - font-weight: 300; - padding: .25em .5em; - z-index: 20; - height: 40px; - } - - .user-name, - .user-icon { - display: inline-block; - vertical-align: middle; - cursor: pointer; - } - - .user-name { - padding-right: .25em; - } - - .nav-vertical.user-menu { - display: none; - background-color: @container-background; - border-left: 1px solid @menu-border-color; - border-bottom: 1px solid @menu-border-color; - border-radius: 0 0 16px 16px; - z-index: 15; - font-size: .9em; - margin-top: 0 !important; - position: fixed; - top: 39px; - right: 0; - } - - .nav-vertical.user-menu.visible { - display: inherit; - } - - .nav-vertical.user-menu > ul { - padding: 2em; - padding-top: .5em; - padding-bottom: 1em; - margin-block-end: 0; - margin-block-start: 0; - } - - .nav-vertical.user-menu li { - padding: .0125em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - .material-icons-outlined.user-info { - color: @unobtrusive; - } - - .material-icons-outlined.user-info.success { - color: @success; - } - - @media @tablet-down { - .header-user { - position: relative; - min-width: 3em; - background-color: transparent; - justify-content: center; - height: 100%; - margin-top: -13px; - margin-left: -16px; - color: @action-button-background1; - } - - .user-menu-container { - margin: 0; - padding: 0; - } - - .user-icon { - - } - .user-name { - display: none; - } - - .nav-vertical { - margin-top: 55px; - } - - .nav-vertical.user-menu { - position: fixed; - top: 1px; - right: 0; - margin-top: 0; - } - - .nav-vertical.user-menu > ul { - padding: 1em 1em; - padding-top: 3em; - } - - } - -} diff --git a/community_server/websrc/src/less/08-navi.less b/community_server/websrc/src/less/08-navi.less deleted file mode 100644 index e71ce93a2..000000000 --- a/community_server/websrc/src/less/08-navi.less +++ /dev/null @@ -1,451 +0,0 @@ -/* ============================================================ - - Navigation - - Datei : navi.less - Datum : 2020-04-30 - Autor : einhornimmond / Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .logo { - display: none; - vertical-align: middle; - height: 30px; - padding: .5em; - } - - .logo.big.visible, - .logo.small.visible { - display: block !important; - } - - .logo.mobile { - display: none; - } - - .logo.small.visible { - padding-left: 41px; - } - - /* - SIDEBARS - */ - .sidebar1 { - background-color: @menu-background; - font-size: @nav-fs; - font-weight: 500; - line-height: @sidebar1-lh; - padding: 0; - border-right: 1px solid @menu-border-color; - } - - .sidebar2 { - padding: 1em; - background-color: @main-background; - } - - .sidebar1-header { - font-size: @sidebar1-header-fs; - font-style: italic; - color: @unobtrusive; - } - - /* set general icons size here! */ - .nav-icon { - font-size: @nav-icons-fs !important; - color: @menu-link-text; - vertical-align: middle; - padding-right: 1em; - } - - /* important! order matters! we need to overwrite the main button's size here */ - .nav-main-button { - font-size: @nav-icon-main-fs !important; - color: @unobtrusive; - margin: .3em; - } - - /* Hide mobile menu button! */ - .nav-main-button.mobile { - display: none; - } - - .nav-menu.nav-menu-maximized { - width: 280px; - height: 100%; - } - - .nav-menu.nav-menu-minimized { - width: 120px; - height: 100%; - } - - .nav-menu-maximized { - -webkit-animation: slide-out 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-out 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized .link-title { - display: none; - } - - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 72px; - } - - /** - * ---------------------------------------- - * animations slide-in / slide-out - * ---------------------------------------- - */ - - /* slide-in */ - @-webkit-keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - - } - - @keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - - } - - /* slide-out */ - @-webkit-keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - } - - @keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - } - - /* - NAVI MOBILE - */ - @media @tablet-down { - .logo.big, - .logo.small { - display: none; - } - - .logo.visible { - padding: 0 !important; - } - - .logo, - .logo.mobile, - .logo.mobile.visible { - display: block; - position: fixed; - top: 12px; - left: 12px; - } - - .logo.big, - .logo.big.visible { - display: none !important; - } - - .nav-main-button { - display: none; - } - - .nav-main-button.mobile { - display: block; - position: fixed; - top: 2px; - right: 46px; - z-index: 3; - } - - .nav-menu.nav-menu-minimized, - .nav-menu.nav-menu-maximized { - width: 280px; - height: 300px; - } - - /* .nav-menu-minimized .link-title { - display: inherit; - } - */ - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 0; - } - - /* Here we "revert' maximized / minimized and change the animation */ - .nav-menu-maximized { - -webkit-animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - /** - * ---------------------------------------- - * animations slide-down / slide-up - * ---------------------------------------- - */ - - /* slide-down */ - @-webkit-keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateY(300px); - transform: translateX(300px); - opacity: 1; - } - - } - - @keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateY(300px); - transform: translateY(300px); - opacity: 1; - } - - } - - /* slide-up */ - @-webkit-keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - - } - - @keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - - } - - } - - /* END navi mobile base */ - .selected { - color: @menu-link-selected; - } - - .link-title { - vertical-align: middle; - line-height: @link-title-lh; - background-color: transparent; - } - - .nav-horizontal { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: flex-end; - list-style-type: none; - gap: 5%; - padding: 1em; - } - - .footer .nav-horizontal { - gap: 0; - padding: 0 1em; - padding-inline-start: 0 !important; - } - - .nav-top-smaller { - margin: 0; - padding: 0; - } - - .nav-smaller { - justify-content: left; - align-items: flex-start; - gap: 0; - padding: 0; - } - - .nav-smaller li { - padding: 0 !important; - padding: .2em .5em !important; - border: 1px solid @action-button-border; - margin: .1em .3em; - border-radius: 12px; - } - - .nav-smaller .heading { - font-weight: bold; - } - - .nav-vertical { - margin-top: -2em; - } - - .nav-horizontal li { - padding: .5em; - } - - .nav-vertical > ul { - display: flex; - flex-direction: column; - list-style-type: none; - gap: 5%; - padding: 1em; - } - - .nav-vertical li { - padding: .5em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - @media @tablet-down { - .nav-vertical { - margin-top: 55px; - } - - } - - .nav-bottom { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - list-style-type: none; - margin-bottom: 20px; - } - - .nav-bottom p { - font-size: @nav-bottom-fs; - color: @unobtrusive; - margin: 0; - } - - @media @tablet-down { - .nav-bottom p { - font-size: @nav-bottom-fs-mobile; - margin-top: -10px; - } - - } - - nav { - &.grd-left-bar { - position: fixed; - top: 80.5px; - } - - .grd-nav-bn { - width: 100px; - } - - ul { - margin-top: 0; - padding-left: 0; - } - - } - - /* buttons */ - .grd-nav-bn:hover, - .grd-active { - background-color: @button-background-active; - border-color: @main-link-text; - } - - .grd-nav-bn { - padding: 10px; - border: 1px solid @unobtrusive; - display: table-cell; - text-align: center; - vertical-align: middle; - color: @unobtrusive; - } - - .grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: @nav-btn-large-fs; - } - - a.grd-nav-bn, - a.grd-nav-bn:visited { - color: @main-link-text; - text-decoration: none; - } - -} diff --git a/community_server/websrc/src/less/09-notification.less b/community_server/websrc/src/less/09-notification.less deleted file mode 100644 index a9bf74c0a..000000000 --- a/community_server/websrc/src/less/09-notification.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - Notification - - Datei : notification.css - Datum : 2020-06-10 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-notify { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; - z-index: 10; - } - - @media @tablet-down { - .header-notify { - justify-content: flex-end; - margin-right: 93px; - margin-top: 8px; - } - - } - - .notify { - display: block; - padding: .5rem .3rem; - color: @notify; - animation: blinkingNotifySymbol 1.2s infinite; - } - - .notify-alert { - color: @alert; - animation: blinkingAlertSymbol 1.2s infinite; - } - - @keyframes blinkingNotifySymbol { - 0% { - color: @notify; - } - - 49% { - color: @notify; - } - - 60% { - color: @notify-blink; - } - - 99% { - color: @notify-blink; - } - - 100% { - color: @notify; - } - - } - - @keyframes blinkingAlertSymbol { - 0% { - color: @alert; - } - - 49% { - color: @alert; - } - - 60% { - color: @alert-blink; - } - - 99% { - color: @alert-blink; - } - - 100% { - color: @alert; - } - - } - - /* - .notification-indicator-primary { - background: #047006; - } - - .notification-indicator-warning { - background: #f0825f - } - .notification-indicator-secondary { - background: grey - } - - .notification-indicator-secondary:before { - content: ""; - background: rgba(128, 128, 128, .5) - } - - .notification-indicator-success { - background: #00e093 - } - - .notification-indicator-success:before { - content: ""; - background: rgba(0, 224, 147, .5) - } - - .notification-indicator-info { - background: #6c61f6 - } - - .notification-indicator-info:before { - content: ""; - background: rgba(108, 97, 246, .5) - } - - - .notification-indicator-danger { - background: #ff5f66 - } - - .notification-indicator-danger:before { - content: ""; - background: rgba(255, 95, 102, .5) - } - - .notification-indicator-light { - background: #dfdfdf - } - - .notification-indicator-light:before { - content: ""; - background: rgba(223, 223, 223, .5) - } - - .notification-indicator-dark { - background: #74767b - } - - .notification-indicator-dark:before { - content: ""; - background: rgba(116, 118, 123, .5) - } - - .notification-indicator-white { - background: #fff - } - - .notification-indicator-white:before { - content: ""; - background: rgba(255, 255, 255, .5) - } - */ -} diff --git a/community_server/websrc/src/less/10-center.less b/community_server/websrc/src/less/10-center.less deleted file mode 100644 index 3163e566e..000000000 --- a/community_server/websrc/src/less/10-center.less +++ /dev/null @@ -1,224 +0,0 @@ -/* ============================================================ - - Screen styles for the regular center part. - - Datei : center.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - CONTENT - =========*/ - .content-default { - display: flex; - justify-content: center; - max-width: 90%; - } - - .content { - display: flex; - justify-content: flex-start; - flex-direction: column; - overflow: auto; - width: 100%; - background-color: @main-background; - line-height: @content-lh; - letter-spacing: @content-letter-spacing; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1rem; - padding-right: 5em; - } - - @media @tablet-down { - .content { - padding-right: 0; - } - - } - - /* Center Navigation Top */ - .nav-content { - position: relative; - color: @content-nav; - margin: 0 .25em; - } - - .nav-content-list { - display: flex; - list-style-type: none; - padding: 0; - margin-left: .25em; - } - - .nav-content-separator { - margin: 0 1em; - } - - @media @tablet-down { - .nav-content-list { - display: flex; - font-size: small; - margin-bottom: 0; - justify-content: center; - } - - } - - /* Center Content Container */ - .content-container { - background-color: @container-background; - color: @container-text; - border-radius: .5em; - box-shadow: 0 0 10px 0 @container-shadow; - border: 1px solid @container-border; - margin: 1em .25em; - } - - /* Block Container Above Main */ - .block-container { - width: 100%; - display: flex; - } - - /* Top Info Above Main */ - .info-container { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 70%; - padding: 1em 25px; - } - - @media @wide-screen-down { - .info-container { - flex-direction: column; - max-width: 90%; - line-height: .25em; - } - - } - - /* Main Container */ - .main-container { - width: 100%; - } - - @media @tablet-down { - .main-container { - max-width: 97%; - } - - } - - .default-container { - width: 90%; - margin: auto; - padding: 1em; - } - - /* Content Block */ - .content-block { - width: 170px; - padding: 20px 25px 20px; - border: 1px dashed grey; - border-radius: 16px; - margin: 1em; - display: flex; - flex-direction: column; - justify-content: center; - justify-items: center; - align-items: center; - } - - .block-img { - width: 40px; - height: 40px; - line-height: 20px; - font-size: 24px; - padding: 8px; - border-radius: 20px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - } - - /* Generic Content */ - .content-region h3 { - color: @container-header; - } - - .content-region { - border-bottom: 1px dashed @light; - padding: 0 25px; - padding-bottom: 2em; - margin: 1em .25em; - } - - .content-collection { - display: flex; - } - - .content-item { - margin: .5em 0; - margin-right: 5em; - width: 220px; - padding: 1em 2em; - } - - .action-button { - background: @action-button-background; - border-left: 3px solid @action-button-border; - } - - .info-item { - border-left: 2px solid @info-item-border; - } - - .inline-header { - display: inline; - } - - .show-profile-img { - display: block; - height: 100px; - vertical-align: middle; - border-radius: 10px; - border: 2px dotted @info-background; - } - - @media @tablet-down { - .content-region { - padding-left: 5px; - } - - .content-collection { - flex-direction: column; - align-items: center; - } - - .content-item { - margin: .5em 0; - margin-right: 0; - width: 160px; - padding: 1em 2em; - } - - } - - /* OTHER */ - .info-item i, - .info-item-link, - .action-button i, - .action-button-link { - vertical-align: middle; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/12-center-form-single.less b/community_server/websrc/src/less/12-center-form-single.less deleted file mode 100644 index 8179da087..000000000 --- a/community_server/websrc/src/less/12-center-form-single.less +++ /dev/null @@ -1,164 +0,0 @@ -/* ============================================================ - - Screen styles for the simple center form. (login etc) - - Datei : center-form-single.css - Datum : 2020-07-10 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .center-form-single { - width: 50%; - margin: auto; - } - - .center-form-header { - margin-bottom: 50px; - } - - .center-logo { - display: block; - margin: 0 auto; - width: 280px; - } - - .center-logo img { - width: 100%; - vertical-align: middle; - border-style: none; - } - - .center-form-container { - display: flex; - flex-direction: column; - padding: 2em 8em; - background-color: @container-background; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75); - } - - @media @tablet-down { - .center-form-header { - margin-bottom: 30px; - margin-top: -50px; - } - - .center-form-single { - width: 97%; - margin: auto; - } - - .center-form-container { - padding: 1em .5em; - } - - } - - .center-form-title h1 { - margin-block-start: 0; - } - - .center-form-selectors { - display: flex; - justify-content: flex-end; - align-items: center; - height: 38px; - padding: 5px 0; - margin-bottom: 2em; - } - - .center-form-form, - .center-form-form form { - display: flex; - flex-direction: column; - } - - .center-form-form .form-label { - text-align: left; - } - .center-form-form .form-control { - width: 100%; - margin: auto; - box-sizing: border-box; - margin-bottom: .5em; - } - - .center-form-submit { - width: 100%; - margin: 1em 0; - } - - .reset-pwd-link, - .signup-link { - padding: 0 20px; - - & a { - color: @action-button-background1; - } - - & p { - display: inline-block; - margin-block-start: 0; - margin-block-end: 0; - } - - } - - .center-bottom { - color: @unobtrusive; - text-align: center; - padding-top: 30px; - } - - .flag-btn { - text-align: center; - vertical-align: middle; - padding: 3px 11px; - } - - .flag { - display: block; - } - - .flag-germany { - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - width: 40px; - height: 10px; - } - - .flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - } - - .group { - padding-left: 10px; - padding-top: 10px; - padding-bottom: 10px; - } - - .group-is-invalid { - background-color: rgba(240, 130, 95, .2); - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) - } - - .group-is-invalid .radio label .input-frame::before { - border-color: red; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/15-facts.less b/community_server/websrc/src/less/15-facts.less deleted file mode 100644 index 3bac37ff7..000000000 --- a/community_server/websrc/src/less/15-facts.less +++ /dev/null @@ -1,62 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for plain facts. - - Datei : facts.css - Datum : 08.07.2020 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .fact-list { - display: flex; - flex-direction: column; - list-style-type: none; - width: 100%; - padding-inline-start: 0; - font-weight: 300; - } - - .fact { - display: inline-block; - padding-left: 1em; - } - - .label { - width: 150px; - text-align: right; - font-weight: bold; - } - - @media @tablet-down { - .fact-list { - margin-block-start: 0; - margin-block-end: 0; - } - - li.fact { - display: flex; - flex-direction: column; - } - - .fact { - padding-left: .5em; - } - - .label { - width: 250px; - text-align: left; - font-size: .9em; - font-weight: normal; - } - - } - -} diff --git a/community_server/websrc/src/less/20-list.less b/community_server/websrc/src/less/20-list.less deleted file mode 100644 index d09fe0594..000000000 --- a/community_server/websrc/src/less/20-list.less +++ /dev/null @@ -1,239 +0,0 @@ -/* ============================================================ - - Screen styles for lists. - - Datei : list.css - Datum : 2020-06-09 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - LISTS - =========*/ - - /* List Content */ - .content-list { - width: 100%; - } - - .content-list-title { - font-size: 1rem; - margin: 0; - padding: 20px 25px; - color: @content-table-title; - } - - .content-list-table { - display: flex; - flex-direction: column; - width: 100%; - overflow: auto; - font-size: 16px; - color: #212529; - } - - .row { - display: flex; - width: 100%; - border-top: 1px solid #f2f4f9; - -webkit-transition-duration: .5s; - transition-duration: .5s; - } - - @media @tablet-down { - .row { - flex-direction: column; - } - - } - - .row:hover { - background-color: #f6f7f9; - } - - .cell { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 1em 1.5em; - } - - .cell-dense { - padding: .1em .5em; - } - - .centered { - justify-content: center; - } - - .c0 { - flex-grow: 5; - min-width: 20%; - } - - .c1 { - min-width: 40px; - flex: 0 0 40px; - } - - .c2 { - min-width: 80px; - flex: 0 0 80px; - } - - .c3 { - min-width: 160px; - flex: 0 0 160px; - } - - .c4 { - min-width: 240px; - flex: 0 0 240px; - } - - .c5 { - min-width: 320px; - flex: 0 0 320px; - } - - .c6 { - min-width: 400px; - flex: 0 0 400px; - } - - @media @tablet-down { - .cell { - padding: .25em 1.5em; - } - - .c1 { - flex-basis: auto; - } - - .c2 { - flex-basis: auto; - } - - .c3 { - flex-basis: auto; - } - - .c4 { - flex-basis: auto; - } - - .c5 { - flex-basis: auto; - } - - .c6 { - flex-basis: auto; - } - - } - - .header-cell { - border-top: 1px solid @content-table-header-border; - background-color: @content-table-header-bg; - color: @content-table-header; - } - - .content-list-table img, - .content-list-table i { - vertical-align: middle; - } - - .content-list-table > span { - font-size: .8em; - padding: .5em 2em; - vertical-align: middle; - } - - /* Individual Tables XXX rm!! */ - .error-list { - grid-template-columns: 2fr 2fr 5fr 1fr; - } - - .transactions { - grid-template-columns: 1fr 4fr 2fr 2fr; - } - - .profile-img { - width: 30px; - height: 30px; - border-radius: 6px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - margin-right: 40px; - } - - .tx-email { - cursor: pointer; - display: block; - color: @content-table-header; - font-weight: 400; - } - - .small { - font-size: 80%; - font-weight: 400; - } - - /*, - .cell-icon .material-icons-outlined */ - .cell-icon { - - /*noch ungeklärt - icon ist nicht aligned */ - - /*font-size: 1.25em;*/ - vertical-align: middle; - } - - /* ===================================== - FORM TOP CONTENT (checkTransaction) - =====================================*/ - .form-content { - padding: 35px; - padding-top: 20px; - max-width: 80%; - margin: auto; - } - - .content-table { - border: 1px solid @content-table-header-border; - border-top: none; - margin-bottom: 1.5rem; - } - - .content-row { - display: flex; - justify-content: space-between; - font-weight: 400; - border-top: 1px solid @content-table-header-border; - } - - .content-row-header { - font-weight: 500; - color: @content-table-header; - } - - .content-row-bg { - background-color: @content-row-bg; - } - - .content-cell { - display: block; - border-collapse: collapse; - padding: 10px 15px; - } - - .form-button .material-icons-outlined { - font-size: 1.25em; - } - -} diff --git a/community_server/websrc/src/less/21-tabs.less b/community_server/websrc/src/less/21-tabs.less deleted file mode 100644 index 694dd1dab..000000000 --- a/community_server/websrc/src/less/21-tabs.less +++ /dev/null @@ -1,45 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 23.11.2020, 14:04:28 - Author : einhornimmond -*/ - - /* Style the tab */ -.tab { - overflow: hidden; - border: 1px solid #ccc; - background-color: #f1f1f1; -} - -/* Style the buttons that are used to open the tab content */ -.tab button { - background-color: inherit; - float: left; - border: none; - outline: none; - cursor: pointer; - padding: 14px 16px; - transition: 0.3s; -} - -/* Change background color of buttons on hover */ -.tab button:hover { - background-color: #ddd; -} - -/* Create an active/current tablink class */ -.tab button.active { - background-color: #ccc; -} - -/* Style the tab content */ -.tabcontent { - display: none; - padding: 6px 12px; - border: 1px solid #ccc; - border-top: none; -} \ No newline at end of file diff --git a/community_server/websrc/src/less/30-form.less b/community_server/websrc/src/less/30-form.less deleted file mode 100644 index df52a684e..000000000 --- a/community_server/websrc/src/less/30-form.less +++ /dev/null @@ -1,238 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for forms. - - Datei : form.css - Datum : 2020-06-07 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - FORMS - =========*/ - - /* Form Content */ - .action-form { - width: 100%; - } - - .form-header { - border-left: 3px solid @form-header-border; - background: @form-header-background; - padding: 15px 20px; - margin: 0; - margin-bottom: 15px; - border-radius: 0 6px 0 0; - } - - .form-label { - grid-column: 1 / 2; - font-weight: 400; - text-align: right; - padding-right: .5em; - } - - .form-control { - grid-column: 2 / 3; - display: block; - padding: .4em .75em; - padding-left: 20px; - padding-right: 20px; - margin: 0; - margin-right: .5em; - color: rgba(16, 16, 16, .8); - display: block; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - } - - .form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); - } - - textarea { - resize: vertical; - } - - .badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out - } - - .badge-warning { - color: @badge-color-warning; - background-color: @badge-background-warning; - } - - .badge-error { - color: @badge-color-error; - background-color: @badge-background-error; - } - - .form-full-width { - grid-column-start: 1; - grid-column-end: 3; - display: flex; - flex-direction: column; - } - - .form-button { - cursor: pointer; - font: 600 13.3333px Arial; - font-size: .875rem; - line-height: 1.5; - text-align: center; - vertical-align: middle; - color: @action-button-text; - background-color: @action-button-background1; - border-color: @action-button-border; - border: 1px solid transparent; - border-radius: .2rem; - height: 35px; - max-height: 35px; - padding: 4px 15px; - margin-right: .5em; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - } - - .form-button:hover { - background-color: #034b04; - border-color: #023f03; - } - - .button-cancel { - color: #fff !important; - background-color: #f0825f; - border-color: #f0825f; - } - - .button-cancel:hover { - background-color: #ec5e30; - border-color: #eb5425; - } - - .link-button { - display: inline-block; - background: @action-button-background; - color: @action-button-text; - height: 17px; - padding: 1em 2em; - line-height: 1em; - border-radius: 6px; - text-align: center; - vertical-align: middle; - } - - .action-link { - color: @action-button-background1 !important; - } - - .action-link-button { - background-color: @action-button-background1 !important; - color: @action-button-text !important; - margin-top: 1em; - padding: .5em 1em; - } - - .edit-profile-img { - width: 100px; - } - - .note-smaller { - font-size: smaller; - } - - .form-row, - .grid-row { - display: flex; - justify-content: flex-start; - align-items: center; - align-content: center; - width: 100%; - -webkit-transition-duration: .5s; - transition-duration: .5s; - } - - .justify-end { - justify-content: flex-end; - } - - @media @tablet-down { - .grid-row { - flex-direction: column; - } - - } - - .form-row { - border-top: 1px solid #f2f4f9; - } - - .form-row:hover { - background-color: #f6f7f9; - } - - /* CENTER FORM SPECIFICS */ - .form-body form { - display: grid; - grid-template-columns: 220px 1fr; - margin: 36px 75px; - grid-gap: 1em; - } - - .center-form { - width: 450px; - } - - .center-form .form-control { - width: 90%; - } - - .center-form fieldset { - margin-bottom: 1em; - } - - @media @tablet-down { - .form-body form { - grid-template-columns: 1fr; - margin: 20px; - grid-gap: .25em; - } - - .form-label { - text-align: left; - } - - } - -} diff --git a/configs/community_server/app.php b/configs/community_server/app.php deleted file mode 100644 index d56a43cc0..000000000 --- a/configs/community_server/app.php +++ /dev/null @@ -1,431 +0,0 @@ - filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. When set to false (default) - * CakePHP generates required value based on `HTTP_HOST` environment variable. - * However, you can define it manually to optimize performance or if you - * are concerned about people manipulating the `Host` header. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => env('APP_ENCODING', 'UTF-8'), - 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), - 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'), - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - //'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => env('SECURITY_SALT', '7ddf685a27d997ef36e51bdd626e7fc6b50a3abfb2971e8e59974d421116a150'), - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - //'timestamp' => true, - // 'cacheTime' => '+1 year' - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => FileEngine::class, - 'path' => CACHE, - 'url' => env('CACHE_DEFAULT_URL', null), - ], - - /** - * Configure the cache used for general framework caching. - * Translation cache files are stored with this configuration. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - * If you set 'className' => 'Null' core cache will be disabled. - */ - '_cake_core_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKECORE_URL', null), - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - */ - '_cake_model_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEMODEL_URL', null), - ], - - /** - * Configure the cache for routes. The cached routes collection is built the - * first time the routes are processed via `config/routes.php`. - * Duration will be set to '+2 seconds' in bootstrap.php when debug = true - */ - '_cake_routes_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_routes_', - 'path' => CACHE, - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEROUTES_URL', null), - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Http\Exception\NotFoundException', 'Cake\Http\Exception\UnauthorizedException']` - * - `extraFatalErrorMemory` - int - The number of megabytes to increase - * the memory limit by when a fatal error is encountered. This allows - * breathing room to complete logging or error handling. - */ - 'Error' => [ - 'errorLevel' => E_ALL, - 'exceptionRenderer' => ExceptionRenderer::class, - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Mailer/Transport. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => MailTransport::class, - /* - * The following keys are used in SMTP transports: - */ - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => null, - 'password' => null, - 'className' => 'Smtp', - 'tls' => true - ], - ], - - /** - * Email delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` - * for more information. - */ - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * - * ### Notes - * - Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - * - Do not use periods in database name - it may lead to error. - * See https://github.com/cakephp/cakephp/issues/6471 for details. - * - 'encoding' is recommended to be set to full UTF-8 4-Byte support. - * E.g set it to 'utf8mb4' in MariaDB and MySQL and 'utf8' for any - * other RDBMS. - */ - 'Datasources' => [ - 'default' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'mariadb', - /* - * CakePHP will use the default DB port based on the driver selected - * MySQL on MAMP uses port 8889, MAMP users will want to uncomment - * the following line and set the port accordingly - */ - //'port' => 'non_standard_port_number', - 'username' => 'root', - 'password' => '', - 'database' => 'gradido_community', - /* - * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). - */ - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'flags' => [], - 'cacheMetadata' => true, - 'log' => false, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - - 'url' => env('DATABASE_URL', null), - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'mariadb', - //'port' => 'non_standard_port_number', - 'username' => 'root', - 'password' => '', - 'database' => 'gradido_community_test', - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - 'log' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - 'url' => env('DATABASE_TEST_URL', null), - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'debug', - 'url' => env('LOG_DEBUG_URL', null), - 'scopes' => false, - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'error', - 'url' => env('LOG_ERROR_URL', null), - 'scopes' => false, - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - // To enable this dedicated query log, you need set your datasource's log flag to true - 'queries' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'queries', - 'url' => env('LOG_QUERIES_URL', null), - 'scopes' => ['queriesLog'], - ], - ], - - /** - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. Avoid using `.` in cookie names, - * as PHP will drop sessions from cookies with `.` in the name. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * Please note that php.ini's session.gc_maxlifetime must be equal to or greater - * than the largest Session['timeout'] in all served websites for it to have the - * desired effect. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], - // *************************************************** - // Gradido specific configuration - // *************************************************** - // Login Server ip and port - 'LoginServer' => [ - 'host' => 'http://login-server', - 'port' => 1201, - 'url' => 'http://localhost' - ], - - // login server for look up emails from other groups - // workaround for using multiple groups until every code is finished as planned - // normally node server are responsible for email look up from users from other groups - 'NeighborLoginServers' => [ - ['host' => 'login-server', 'port' => 1201] - ], - 'GradidoBlockchain' => [ - // type: - // - db: centralized blockchain in mysql db, no cross group transactions - // - hedera: send transaction over hedera - 'type' => 'db', - // gradido nodes with blockchain (if type != db) - 'nodes' => [ - ['host' => 'node', 'port' => 13702] - ] - ], - - 'GroupAlias' => 'docker', - 'GDTServer' => [ - 'host' => 'https://gdt.gradido.net' // staging - ], - 'API' => [ - 'allowedCaller' => ['login-server'] - ], - 'ServerAdminEmail' => 'info@gradido.net', - 'noReplyEmail' => 'no-reply@gradido.net', - 'disableEmail' => true - -]; diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 250b392db..3d63da9e3 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -78,23 +78,6 @@ services: # bind the local folder to the docker to allow live reload - ./database:/app - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - - external-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - ######################################################### ## MARIADB ############################################## ######################################################### diff --git a/docker-compose.test.yml b/docker-compose.test.yml index a719f8c36..221ecba20 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -35,24 +35,6 @@ services: volumes: - db_test_vol:/var/lib/mysql - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: test - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - - ./coverage/community:/var/www/cakephp/webroot/coverage - - ######################################################### ## PHPMYADMIN ########################################### ######################################################### diff --git a/docker-compose.yml b/docker-compose.yml index 9c92e19ea..213b200cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -145,25 +145,6 @@ services: ports: - 80:80 - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - environment: - - DB_PASSWORD='' - - DB_USER='root' - - DB_DATABASE='gradido_community' - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - networks: external-net: internal-net: diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile deleted file mode 100644 index d648fb564..000000000 --- a/php-fpm/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -From phpdockerio/php74-fpm as php-fpm - -# Install selected extensions and other stuff -RUN apt-get update \ - && apt-get -y --no-install-recommends install curl php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql\ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - - -WORKDIR "/var/www/cakephp" \ No newline at end of file