diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results index e4b280c..b478b2c 100644 --- a/.phpunit.cache/test-results +++ b/.phpunit.cache/test-results @@ -1 +1 @@ -{"version":"pest_2.35.1","defects":[],"times":{"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\VatPeriods\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.216,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.041,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\VatPeriods\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.638,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.037,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0.021,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0.463,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.092,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.145}} \ No newline at end of file +{"version":"pest_2.36.0","defects":[],"times":{"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.009,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateAnDefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.695,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.152,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.018,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":1.031,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.016,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.009,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.039,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004}} \ No newline at end of file diff --git a/README.md b/README.md index bc70040..f1f90ff 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ We provide enums for the following values: | Enum | Values | |----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Accounts: SearchFieldEnum | ACCOUNT_NO(), self FIBU_ACCOUNT_GROUP_ID(), NAME(), ACCOUNT_TYPE() | +| Accounts: AccountTypeEnum | EARNINGS(), EXPENDITURES(), ACTIVE_ACCOUNTS(), PASSIVE_ACCOUNTS(), COMPLETE_ACCOUNTS() | | AdditionalAddresses: AddSearchTypeEnum | ID(), ID_ASC(), ID_DESC(), NAME(), NAME_ASC(), NAME_DESC() | | CalendarYears: VatAccountingMethodEnum | EFFECTIVE(), NET_TAX() | | CalendarYears: VatAccountingTypeEnum | AGREED(), COLLECTED() | @@ -108,42 +109,58 @@ We provide enums for the following values: We provide DTOs for the following: -| DTO | -|-----------------------------| -| AccountGroupDTO | -| AccountDTO | -| BankAccountDTO | -| AdditionalAddressDTO | -| BankAccountDTO | -| BusinessYearDTO | -| CalendarYearDTO | -| CompanyProfileDTO | -| ContactAdditionalAddressDTO | -| ContactGroupDTO | -| ContactRelationDTO | -| ContactDTO | -| ContactSectorDTO | -| CurrencyDTO | -| ExchangeCurrencyDTO | -| FileDTO | -| FileUsageDTO | -| EntryDTO | -| ManualEntryDTO | -| FileDTO | -| NoteDTO | -| PaymentDTO | -| JournalDTO | -| SalutationDTO | -| TaxDTO | -| TitleDTO | -| VatPeriodDTO | +| DTO | +|---------------------------------------| +| AccountGroupDTO | +| AccountDTO | +| BankAccountDTO | +| AdditionalAddressDTO | +| BankAccountDTO | +| BusinessActivityDTO | +| BusinessYearDTO | +| CalendarYearDTO | +| CompanyProfileDTO | +| ContactAdditionalAddressDTO | +| ContactGroupDTO | +| ContactRelationDTO | +| ContactDTO | +| CreateEditContactDTO | +| ContactSectorDTO | +| CurrencyDTO | +| CreateCurrencyDTO | +| EditCurrencyDTO | +| ExchangeCurrencyDTO | +| DocumentSettingDTO | +| FileDTO | +| EditFileDTO | +| FileUsageDTO | +| InvoiceDTO | +| InvoicePositionDTO | +| InvoiceTaxDTO | +| PdfDTO | +| LanguageDTO | +| AddFileDTO | +| EntryDTO | +| FileDTO | +| ManualEntryDTO | +| NoteDTO | +| PaymentDTO | +| PaymentTypeDTO | +| ProjectDTO | +| JournalDTO | +| SalutationDTO | +| TaxDTO | +| TitleDTO | +| UnitDTO | +| UserDTO | +| VatPeriodDTO | In addition to the above, we also provide DTOs to be used for create and edit request for the following: | DTO | |---------------------------------------| -| CreateEditAdditionalAddressDTO | | CreateCalendarYearDTO | +| CreateEditAdditionalAddressDTO | | CreateEditContactAdditionalAddressDTO | | CreateEditContactGroupDTO | | CreateEditContactRelationDTO | @@ -876,6 +893,178 @@ $payment = $connector->send(new EditIbanPaymentRequest( ))->dto(); ``` +### Invoices +```php +/** + * Fetch A List Of Invoices + */ +$invoices = $connector->send(new FetchAListOfInvoicesRequest())->dto(); +``` + +```php +/** + * Fetch An Invoice + */ +$invoice = $connector->send(new FetchAnInvoiceRequest( + invoice_id: 1 +))->dto(); +``` + +```php +/** + * Create An Invoice + */ +$contacts = $connector->send(new FetchAListOfContactsRequest); +$user = $connector->send(new FetchAuthenticatedUserRequest); +$languages = $connector->send(new FetchAListOfLanguagesRequest); +$banks = $connector->send(new FetchAListOfBankAccountsRequest); +$currencies = $connector->send(new FetchAListOfCurrenciesRequest); +$paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest); +$units = $connector->send(new FetchAListOfUnitsRequest); +$accounts = $connector->send(new FetchAListOfAccountsRequest); +$taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax')); + +$newInvoice = InvoiceDTO::fromArray([ + 'title' => 'Test', + 'contact_id' => $contacts->dto()->first()->id, + 'user_id' => $user->dto()->id, + 'pr_project_id' => null, + 'language_id' => $languages->dto()->first()->id, + 'bank_account_id' => $banks->dto()->first()->id, + 'currency_id' => $currencies->dto()->first()->id, + 'payment_type_id' => $paymentTypes->dto()->first()->id, + 'mwst_type' => 1, + 'mwst_is_net' => true, + 'show_position_taxes' => true, + 'is_valid_from' => now()->format('Y-m-d h:m:s'), + 'is_valid_to' => now()->addDays(5)->format('Y-m-d h:m:s'), + 'api_reference' => Str::uuid(), + 'positions' => [ + InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionText', + 'show_pos_nr' => true, + 'text' => Str::uuid(), + ]), + InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionCustom', + 'amount' => 1, + 'unit_id' => $units->dto()->first()->id, + 'account_id' => $accounts->dto()->filter(fn ($account) => $account->account_type_enum === AccountTypeEnum::ACTIVE_ACCOUNTS())->first()->id, + 'tax_id' => $taxes->dto()->first()->id, + 'text' => Str::uuid(), + 'unit_price' => 100, + 'discount_in_percent' => '0', + ]), + ], +]); + +$invoice = $connector->send(new CreateAnInvoiceRequest(invoice: $newInvoice))->dto(); +``` + +```php +/** + * Edit An Invoice + */ +$editInvoice = $connector->send(new FetchAnInvoiceRequest(invoice_id: 1))->dto(); + +$editInvoice->title = 'Test Invoice'; + +$invoice = $connector->send(new EditAnInvoiceRequest(invoice_id: 1, invoice: $editInvoice)); +``` + +```php +/** + * Delete An Invoice + */ +$response = $connector->send(new DeleteAnInvoiceRequest( + invoice_id: 1 +)); +``` + +```php +/** + * Cancel An Invoice + */ +$response = $connector->send(new CancelAnInvoiceRequest( + invoice_id: 1 +)); +``` + +```php +/** + * Create A Default Position For An Invoice + */ +$units = $connector->send(new FetchAListOfUnitsRequest); +$accounts = $connector->send(new FetchAListOfAccountsRequest); +$taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax')); + +$position = InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionCustom', + 'amount' => 1, + 'unit_id' => $units->dto()->first()->id, + 'account_id' => $accounts->dto()->filter(fn ($account) => $account->account_type === 1)->first()->id, + 'tax_id' => $taxes->dto()->first()->id, + 'text' => Str::uuid(), + 'unit_price' => 100, + 'discount_in_percent' => '0', +]); + +$response = $connector->send(new CreateADefaultPositionRequest( + kb_document_type: 'kb_invoice', + invoice_id: 1, + position: $position, +)); +``` + +```php +/** + * Create A Sub Position For An Invoice + */ +$position = InvoicePositionDTO::fromArray([ + 'type' => 'KbSubPosition', + 'text' => Str::uuid(), + 'show_pos_nr' => true, +]); + +$response = $connector->send(new CreateASubPositionRequest( + kb_document_type: 'kb_invoice', + invoice_id: 1, + position: $position, +)); +``` + +```php +/** + * Show PDF + */ +$pdf = $connector->send(new ShowPdfRequest( + invoice_id: 1 +))->dto(); + +/** + * Saving PDF from response + */ +Storage::disk('local')->put('your/directory/'. $pdf->name, base64_decode($pdf->content)); + +/** + * Download PDF from response + */ +return response(base64_decode($pdf->content)) + ->header('Content-Type', $pdf->mime) + ->header('Content-Disposition', 'attachment; filename="'.$pdf->name.'"') + ->header('Content-Length', $pdf->size); +``` + + + +### Languages +```php +/** + * Fetch A List Of Languages + */ +$languages = $connector->send(new FetchAListOfLanguagesRequest())->dto(); +``` + ### Manual Entries ```php /** diff --git a/src/Dto/Accounts/AccountDTO.php b/src/Dto/Accounts/AccountDTO.php index 466e8d0..4b26e05 100644 --- a/src/Dto/Accounts/AccountDTO.php +++ b/src/Dto/Accounts/AccountDTO.php @@ -2,6 +2,7 @@ namespace CodebarAg\Bexio\Dto\Accounts; +use CodebarAg\Bexio\Enums\Accounts\AccountTypeEnum; use Exception; use Illuminate\Support\Arr; use Saloon\Http\Response; @@ -14,6 +15,7 @@ public function __construct( public string $account_no, public string $name, public int $account_type, + public AccountTypeEnum $account_type_enum, public bool $is_active, public bool $is_locked, public ?int $tax_id = null, @@ -42,6 +44,7 @@ public static function fromArray(array $data): self account_no: Arr::get($data, 'account_no'), name: Arr::get($data, 'name'), account_type: Arr::get($data, 'account_type'), + account_type_enum: AccountTypeEnum::from(Arr::get($data, 'account_type')), is_active: Arr::get($data, 'is_active'), is_locked: Arr::get($data, 'is_locked'), tax_id: Arr::get($data, 'tax_id'), diff --git a/src/Dto/Invoices/InvoiceDTO.php b/src/Dto/Invoices/InvoiceDTO.php index ebfb2f1..f2d2559 100644 --- a/src/Dto/Invoices/InvoiceDTO.php +++ b/src/Dto/Invoices/InvoiceDTO.php @@ -11,43 +11,43 @@ class InvoiceDTO extends Data { public function __construct( - public int $id, - public string $document_nr, + public ?int $id, + public ?string $document_nr, public ?string $title, public ?int $contact_id, public ?int $contact_sub_id, public int $user_id, - public ?int $project_id, + public ?int $pr_project_id, public ?int $logopaper_id, // Deprecated - public int $language_id, - public int $bank_account_id, - public int $currency_id, - public int $payment_type_id, - public string $header, - public string $footer, - public string $total_gross, - public string $total_net, - public string $total_taxes, - public string $total_received_payments, - public string $total_credit_vouchers, - public string $total_remaining_payments, - public string $total, - public int|float $total_rounding_difference, - public int $mwst_type, - public bool $mwst_is_net, - public bool $show_position_taxes, - public string $is_valid_from, - public string $is_valid_to, - public string $contact_address, - public int $kb_item_status_id, + public ?int $language_id, + public ?int $bank_account_id, + public ?int $currency_id, + public ?int $payment_type_id, + public ?string $header, + public ?string $footer, + public ?string $total_gross, + public ?string $total_net, + public ?string $total_taxes, + public ?string $total_received_payments, + public ?string $total_credit_vouchers, + public ?string $total_remaining_payments, + public ?string $total, + public null|int|float $total_rounding_difference, + public ?int $mwst_type, + public ?bool $mwst_is_net, + public ?bool $show_position_taxes, + public ?string $is_valid_from, + public ?string $is_valid_to, + public ?string $contact_address, + public ?int $kb_item_status_id, public ?string $reference, public ?string $api_reference, public ?string $viewed_by_client_at, - public string $updated_at, - public int $esr_id, - public int $qr_invoice_id, + public ?string $updated_at, + public ?int $esr_id, + public ?int $qr_invoice_id, public ?string $template_slug, - public Collection $taxs, + public ?Collection $taxs, public ?string $network_link, public ?Collection $positions, ) {} @@ -76,7 +76,7 @@ public static function fromArray(array $data): self contact_id: Arr::get($data, 'contact_id'), contact_sub_id: Arr::get($data, 'contact_sub_id'), user_id: Arr::get($data, 'user_id'), - project_id: Arr::get($data, 'project_id'), + pr_project_id: Arr::get($data, 'pr_project_id'), logopaper_id: Arr::get($data, 'logopaper_id'), language_id: Arr::get($data, 'language_id'), bank_account_id: Arr::get($data, 'bank_account_id'), @@ -108,7 +108,14 @@ public static function fromArray(array $data): self template_slug: Arr::get($data, 'template_slug'), taxs: collect(Arr::get($data, 'taxs', []))->map(fn (array $tax) => InvoiceTaxDTO::fromArray($tax)), network_link: Arr::get($data, 'network_link'), - positions: collect(Arr::get($data, 'positions', []))->map(fn (array $tax) => InvoicePositionDTO::fromArray($tax)), + positions: collect(Arr::get($data, 'positions', [])) + ->map(function (InvoicePositionDTO|array $tax) { + if ($tax instanceof InvoicePositionDTO) { + return $tax; + } + + return InvoicePositionDTO::fromArray($tax); + }), ); } } diff --git a/src/Enums/Accounts/AccountTypeEnum.php b/src/Enums/Accounts/AccountTypeEnum.php new file mode 100644 index 0000000..f0cb38b --- /dev/null +++ b/src/Enums/Accounts/AccountTypeEnum.php @@ -0,0 +1,37 @@ + 1, + 'EXPENDITURES' => 2, + 'ACTIVE_ACCOUNTS' => 3, + 'PASSIVE_ACCOUNTS' => 4, + 'COMPLETE_ACCOUNTS' => 5, + ]; + } + + protected static function labels(): array + { + return [ + 'EARNINGS' => 'Earnings', + 'EXPENDITURES' => 'Expenditures', + 'ACTIVE_ACCOUNTS' => 'Active Accounts', + 'PASSIVE_ACCOUNTS' => 'Passive Accounts', + 'COMPLETE_ACCOUNTS' => 'Complete Accounts (Diploma)', + ]; + } +} diff --git a/src/Enums/Accounts/SearchFieldEnum.php b/src/Enums/Accounts/SearchFieldEnum.php index 78306f5..1ee49fc 100644 --- a/src/Enums/Accounts/SearchFieldEnum.php +++ b/src/Enums/Accounts/SearchFieldEnum.php @@ -22,7 +22,7 @@ protected static function values(): array ]; } - protected static function labels() + protected static function labels(): array { return [ 'ACCOUNT_NO' => 'Account No', diff --git a/src/Requests/Invoices/CancelAnInvoiceRequest.php b/src/Requests/Invoices/CancelAnInvoiceRequest.php index 0476d4b..f7ee2ad 100644 --- a/src/Requests/Invoices/CancelAnInvoiceRequest.php +++ b/src/Requests/Invoices/CancelAnInvoiceRequest.php @@ -12,12 +12,12 @@ class CancelAnInvoiceRequest extends Request protected Method $method = Method::POST; public function __construct( - readonly int $invoiceId, + readonly int $invoice_id, ) {} public function resolveEndpoint(): string { - return '/2.0/kb_invoice/'.$this->invoiceId.'/cancel'; + return '/2.0/kb_invoice/'.$this->invoice_id.'/cancel'; } /** diff --git a/src/Requests/Invoices/CreateAnInvoiceRequest.php b/src/Requests/Invoices/CreateAnInvoiceRequest.php index e4f08d4..fa99bd1 100644 --- a/src/Requests/Invoices/CreateAnInvoiceRequest.php +++ b/src/Requests/Invoices/CreateAnInvoiceRequest.php @@ -3,7 +3,9 @@ namespace CodebarAg\Bexio\Requests\Invoices; use CodebarAg\Bexio\Dto\Invoices\InvoiceDTO; +use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO; use Exception; +use Illuminate\Support\Collection; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; @@ -16,13 +18,104 @@ class CreateAnInvoiceRequest extends Request implements HasBody protected Method $method = Method::POST; - public function __construct() {} + public function __construct( + readonly ?InvoiceDTO $invoice = null, + ) {} public function resolveEndpoint(): string { return '/2.0/kb_invoice'; } + public function defaultBody(): array + { + if ($this->invoice) { + $invoice = collect($this->invoice->toArray()); + + return $this->filterInvoice($invoice); + } + + return []; + } + + protected function filterInvoice(Collection $invoice): array + { + $filteredInvoice = $invoice->only(keys: [ + 'title', + 'contact_id', + 'contact_sub_id', + 'user_id', + 'pr_project_id', + 'logopaper_id', + 'language_id', + 'bank_account_id', + 'currency_id', + 'payment_type_id', + 'header', + 'footer', + 'mwst_type', + 'mwst_is_net', + 'show_position_taxes', + 'is_valid_from', + 'is_valid_to', + 'reference', + 'api_reference', + 'viewed_by_client_at', + 'template_slug', + 'positions', + ]); + + $filteredInvoice->put('positions', $this->filterPositions($invoice->get('positions'))); + + return $filteredInvoice->toArray(); + } + + protected function filterPositions(Collection $positions): Collection + { + $allowedKeys = [ + 'KbPositionCustom' => [ + 'amount', + 'unit_id', + 'account_id', + 'tax_id', + 'text', + 'unit_price', + 'discount_in_percent', + ], + 'KbPositionArticle' => [ + 'amount', + 'unit_id', + 'account_id', + 'tax_id', + 'text', + 'unit_price', + 'discount_in_percent', + 'article_id', + ], + 'KbPositionText' => [ + 'text', + 'show_pos_nr', + ], + 'KbPositionSubtotal' => [ + 'text', + ], + 'KbPositionPagebreak' => [ + 'pagebreak', + ], + 'KbPositionDiscount' => [ + 'text', + 'is_percentual', + 'value', + ], + ]; + + return $positions->map(function (InvoicePositionDTO $position) use ($allowedKeys) { + return collect($position->toArray())->only( + array_merge(['type'], $allowedKeys[$position->type]) + ); + }); + } + public function createDtoFromResponse(Response $response): InvoiceDTO { if (! $response->successful()) { diff --git a/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php b/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php index 1952447..5402946 100644 --- a/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php +++ b/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php @@ -4,6 +4,7 @@ use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO; use Exception; +use Illuminate\Support\Collection; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; @@ -19,6 +20,7 @@ class CreateADefaultPositionRequest extends Request implements HasBody public function __construct( protected string $kb_document_type, protected int $invoice_id, + protected ?InvoicePositionDTO $position = null, ) {} public function resolveEndpoint(): string @@ -26,6 +28,32 @@ public function resolveEndpoint(): string return sprintf('/2.0/%s/%s/kb_position_custom', $this->kb_document_type, $this->invoice_id); } + public function defaultBody(): array + { + if ($this->position) { + if ($this->position->type !== 'KbPositionCustom') { + throw new Exception('Position must be of type KbPositionCustom'); + } + + return $this->filterPosition($this->position)->toArray(); + } + + return []; + } + + protected function filterPosition(InvoicePositionDTO $position): Collection + { + return collect($position->toArray())->only([ + 'amount', + 'unit_id', + 'account_id', + 'tax_id', + 'text', + 'unit_price', + 'discount_in_percent', + ]); + } + public function createDtoFromResponse(Response $response): InvoicePositionDTO { if (! $response->successful()) { diff --git a/src/Requests/Invoices/DeleteAnInvoiceRequest.php b/src/Requests/Invoices/DeleteAnInvoiceRequest.php index f5a0a38..02dc7f8 100644 --- a/src/Requests/Invoices/DeleteAnInvoiceRequest.php +++ b/src/Requests/Invoices/DeleteAnInvoiceRequest.php @@ -12,12 +12,12 @@ class DeleteAnInvoiceRequest extends Request protected Method $method = Method::DELETE; public function __construct( - readonly int $invoiceId, + readonly int $invoice_id, ) {} public function resolveEndpoint(): string { - return '/2.0/kb_invoice/'.$this->invoiceId; + return '/2.0/kb_invoice/'.$this->invoice_id; } /** diff --git a/src/Requests/Invoices/EditAnInvoiceRequest.php b/src/Requests/Invoices/EditAnInvoiceRequest.php new file mode 100644 index 0000000..1c08cdc --- /dev/null +++ b/src/Requests/Invoices/EditAnInvoiceRequest.php @@ -0,0 +1,81 @@ +invoice_id; + } + + public function defaultBody(): array + { + if ($this->invoice) { + $invoice = collect($this->invoice->toArray()); + + return $this->filterInvoice($invoice); + } + + return []; + } + + protected function filterInvoice(Collection $invoice): array + { + $filteredInvoice = $invoice->only(keys: [ + 'id', + 'title', + 'contact_id', + 'contact_sub_id', + 'user_id', + 'pr_project_id', + 'logopaper_id', + 'language_id', + 'bank_account_id', + 'currency_id', + 'payment_type_id', + 'header', + 'footer', + 'mwst_type', + 'mwst_is_net', + 'show_position_taxes', + 'is_valid_from', + 'is_valid_to', + 'reference', + 'api_reference', + 'viewed_by_client_at', + 'template_slug', + ]); + + return $filteredInvoice->toArray(); + } + + public function createDtoFromResponse(Response $response): InvoiceDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + $res = $response->json(); + + return InvoiceDTO::fromArray($res); + } +} diff --git a/src/Requests/Invoices/FetchAnInvoiceRequest.php b/src/Requests/Invoices/FetchAnInvoiceRequest.php new file mode 100644 index 0000000..7651f37 --- /dev/null +++ b/src/Requests/Invoices/FetchAnInvoiceRequest.php @@ -0,0 +1,34 @@ +invoice_id; + } + + public function createDtoFromResponse(Response $response): InvoiceDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + $invoice = $response->json(); + + return InvoiceDTO::fromArray($invoice); + } +} diff --git a/src/Requests/Invoices/IssueAnInvoiceRequest.php b/src/Requests/Invoices/IssueAnInvoiceRequest.php index 1efa6da..4fef567 100644 --- a/src/Requests/Invoices/IssueAnInvoiceRequest.php +++ b/src/Requests/Invoices/IssueAnInvoiceRequest.php @@ -12,12 +12,12 @@ class IssueAnInvoiceRequest extends Request protected Method $method = Method::POST; public function __construct( - readonly int $invoiceId, + readonly int $invoice_id, ) {} public function resolveEndpoint(): string { - return '/2.0/kb_invoice/'.$this->invoiceId.'/issue'; + return '/2.0/kb_invoice/'.$this->invoice_id.'/issue'; } public function createDtoFromResponse(Response $response): mixed diff --git a/src/Requests/Invoices/SetIssuedInvoiceToDraftRequest.php b/src/Requests/Invoices/SetIssuedInvoiceToDraftRequest.php index e962cfe..a98ee1f 100644 --- a/src/Requests/Invoices/SetIssuedInvoiceToDraftRequest.php +++ b/src/Requests/Invoices/SetIssuedInvoiceToDraftRequest.php @@ -12,12 +12,12 @@ class SetIssuedInvoiceToDraftRequest extends Request protected Method $method = Method::POST; public function __construct( - readonly int $invoiceId, + readonly int $invoice_id, ) {} public function resolveEndpoint(): string { - return '/2.0/kb_invoice/'.$this->invoiceId.'/issue'; + return '/2.0/kb_invoice/'.$this->invoice_id.'/issue'; } public function createDtoFromResponse(Response $response): mixed diff --git a/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php b/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php index 7001a1d..64dde26 100644 --- a/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php +++ b/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php @@ -4,6 +4,7 @@ use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO; use Exception; +use Illuminate\Support\Collection; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; @@ -19,6 +20,7 @@ class CreateASubPositionRequest extends Request implements HasBody public function __construct( protected string $kb_document_type, protected int $invoice_id, + protected ?InvoicePositionDTO $position = null, ) {} public function resolveEndpoint(): string @@ -26,6 +28,27 @@ public function resolveEndpoint(): string return sprintf('/2.0/%s/%s/kb_position_subposition', $this->kb_document_type, $this->invoice_id); } + public function defaultBody(): array + { + if ($this->position) { + if ($this->position->type !== 'KbSubPosition') { + throw new Exception('Position must be of type KbSubPosition'); + } + + return $this->filterPosition($this->position)->toArray(); + } + + return []; + } + + protected function filterPosition(InvoicePositionDTO $position): Collection + { + return collect($position->toArray())->only([ + 'text', + 'show_pos_nr', + ]); + } + public function createDtoFromResponse(Response $response): InvoicePositionDTO { if (! $response->successful()) { diff --git a/tests/Fixtures/Saloon/Invoices/DefaultPositions/create-a-default-position.json b/tests/Fixtures/Saloon/Invoices/DefaultPositions/create-a-default-position.json new file mode 100644 index 0000000..e75cbb3 --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/DefaultPositions/create-a-default-position.json @@ -0,0 +1,24 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Mon, 28 Oct 2024 20:08:54 GMT", + "Content-Type": "application\/json", + "Content-Length": "303", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-limit": "1000", + "ratelimit-reset": "6", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d8f7dacb59526-LHR" + }, + "data": "{\"id\":65,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":95,\"unit_name\":\"Stk\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"52f336a0-47cd-4ae2-9653-9e4e207adcd4\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"3\",\"internal_pos\":3,\"parent_id\":null,\"is_optional\":false}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/SubPositions/create-a-sub-position.json b/tests/Fixtures/Saloon/Invoices/SubPositions/create-a-sub-position.json new file mode 100644 index 0000000..f6a39e8 --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/SubPositions/create-a-sub-position.json @@ -0,0 +1,24 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Mon, 28 Oct 2024 20:12:35 GMT", + "Content-Type": "application\/json", + "Content-Length": "208", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-limit": "1000", + "ratelimit-reset": "25", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d94df5e5acd9e-LHR" + }, + "data": "{\"id\":52,\"type\":\"KbPositionSubposition\",\"text\":\"5915df81-03de-4fc5-9080-c72a566b5f3f\",\"pos\":\"4\",\"internal_pos\":4,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0\",\"show_pos_prices\":true}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/create-an-invoice.json b/tests/Fixtures/Saloon/Invoices/create-an-invoice.json new file mode 100644 index 0000000..27df35a --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/create-an-invoice.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Mon, 28 Oct 2024 19:36:21 GMT", + "Content-Type": "application\/json", + "Content-Length": "1559", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "998", + "ratelimit-reset": "40", + "ratelimit-limit": "1000", + "x-ratelimit-remaining-minute": "998", + "etag": "e5f2d8126c4597811d8c8b2d3686a424", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d5fc9a80c4195-LHR" + }, + "data": "{\"id\":53,\"document_nr\":\"RE-00053\",\"title\":\"Test\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AGDanke f\\u00fcr Ihr Vertrauen. Ihre Rechnung setzt sich wie folgt zusammen:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.Freundliche Gr\\u00fcsseMoritz Bleibtreu\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total_received_payments\":\"0\",\"total_credit_vouchers\":\"0\",\"total_remaining_payments\":\"100.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2024-10-28\",\"is_valid_to\":\"2024-11-02\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":7,\"reference\":\"\",\"api_reference\":\"1a167f92-3fbd-4dab-9eb5-f3d58f4d6193\",\"viewed_by_client_at\":null,\"updated_at\":\"2024-10-28 20:36:21\",\"esr_id\":3,\"qr_invoice_id\":3,\"template_slug\":\"671cf7fbbc8c28f1cb036f10\",\"taxs\":[],\"positions\":[{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"845a03b4-12ec-42b5-876c-273e1d26656f\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false},{\"id\":64,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":95,\"unit_name\":\"Stk\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"bcc08db8-f711-4281-9467-028be21e75b2\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"2\",\"internal_pos\":2,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/edit-an-invoice.json b/tests/Fixtures/Saloon/Invoices/edit-an-invoice.json new file mode 100644 index 0000000..487749f --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/edit-an-invoice.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Mon, 28 Oct 2024 19:55:08 GMT", + "Content-Type": "application\/json", + "Content-Length": "1607", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "998", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "998", + "ratelimit-limit": "1000", + "ratelimit-reset": "53", + "etag": "bee9aaa66601123669d6f8ade60781a3", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d7b4d0ad663ba-LHR" + }, + "data": "{\"id\":53,\"document_nr\":\"RE-00053\",\"title\":\"Test Invoice\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AGDanke f\\u00fcr Ihr Vertrauen. Ihre Rechnung setzt sich wie folgt zusammen:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.Freundliche Gr\\u00fcsseMoritz Bleibtreu\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total_received_payments\":\"0.000000\",\"total_credit_vouchers\":\"0.000000\",\"total_remaining_payments\":\"100.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2024-10-28\",\"is_valid_to\":\"2024-11-02\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":7,\"reference\":\"\",\"api_reference\":\"1a167f92-3fbd-4dab-9eb5-f3d58f4d6193\",\"viewed_by_client_at\":null,\"updated_at\":\"2024-10-28 20:55:08\",\"esr_id\":3,\"qr_invoice_id\":3,\"template_slug\":\"671cf7fbbc8c28f1cb036f10\",\"taxs\":[],\"positions\":[{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"845a03b4-12ec-42b5-876c-273e1d26656f\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false},{\"id\":64,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":95,\"unit_name\":\"Stk\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"bcc08db8-f711-4281-9467-028be21e75b2\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"2\",\"internal_pos\":2,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/fetch-an-invoice-edit.json b/tests/Fixtures/Saloon/Invoices/fetch-an-invoice-edit.json new file mode 100644 index 0000000..f4b6771 --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/fetch-an-invoice-edit.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Mon, 28 Oct 2024 19:55:07 GMT", + "Content-Type": "application\/json", + "Content-Length": "1620", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-reset": "53", + "ratelimit-limit": "1000", + "x-ratelimit-remaining-minute": "999", + "etag": "6cdf75a8acb4556f0462f43c5fefb9a1", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d7b4b0fe563ba-LHR" + }, + "data": "{\"id\":53,\"document_nr\":\"RE-00053\",\"title\":\"Test\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AGDanke f\\u00fcr Ihr Vertrauen. Ihre Rechnung setzt sich wie folgt zusammen:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.Freundliche Gr\\u00fcsseMoritz Bleibtreu\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total_received_payments\":\"0.000000\",\"total_credit_vouchers\":\"0.000000\",\"total_remaining_payments\":\"100.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2024-10-28\",\"is_valid_to\":\"2024-11-02\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":7,\"reference\":\"\",\"api_reference\":\"1a167f92-3fbd-4dab-9eb5-f3d58f4d6193\",\"viewed_by_client_at\":null,\"updated_at\":\"2024-10-28 20:53:15\",\"esr_id\":3,\"qr_invoice_id\":3,\"template_slug\":\"671cf7fbbc8c28f1cb036f10\",\"taxs\":[],\"positions\":[{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"845a03b4-12ec-42b5-876c-273e1d26656f\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false},{\"id\":64,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":95,\"unit_name\":\"Stk\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"bcc08db8-f711-4281-9467-028be21e75b2\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"2\",\"internal_pos\":2,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/fetch-an-invoice.json b/tests/Fixtures/Saloon/Invoices/fetch-an-invoice.json new file mode 100644 index 0000000..36c2178 --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/fetch-an-invoice.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Mon, 28 Oct 2024 18:42:40 GMT", + "Content-Type": "application\/json", + "Content-Length": "1999", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-limit": "1000", + "ratelimit-reset": "20", + "etag": "7760680f4db0d1ad51fc5a3b07093809", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d1127bccb9502-LHR" + }, + "data": "{\"id\":52,\"document_nr\":\"RE-00052\",\"title\":\"[MW] Huonder (Feldstr. 33+35, 4123 Allschwil)\",\"contact_id\":2,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":4,\"header\":\"Hallo Laravel Inc.

Wir erlauben uns, nachfolgende Leistungen in Rechnung zu stellen.\",\"footer\":\"Bei Fragen oder Unklarheiten stehen wir jederzeit gerne zur Verf\\u00fcgung.

Freundliche Gr\\u00fcsse
Moritz Bleibtreu\",\"total_gross\":\"753.300000\",\"total_net\":\"753.300000\",\"total_taxes\":\"61.0173\",\"total_received_payments\":\"0.000000\",\"total_credit_vouchers\":\"0.000000\",\"total_remaining_payments\":\"814.3000\",\"total\":\"814.300000\",\"total_rounding_difference\":-0.02,\"mwst_type\":0,\"mwst_is_net\":true,\"show_position_taxes\":false,\"is_valid_from\":\"2024-09-30\",\"is_valid_to\":\"2024-10-14\",\"contact_address\":\"Laravel Inc.\\n\",\"kb_item_status_id\":7,\"reference\":\"\",\"api_reference\":\"9d587e1e-88ca-43fc-971d-0c568fb56fd7\",\"viewed_by_client_at\":null,\"updated_at\":\"2024-10-27 14:00:10\",\"esr_id\":2,\"qr_invoice_id\":2,\"template_slug\":\"671cf7fbbc8c28f1cb036f10\",\"taxs\":[{\"percentage\":\"8.10\",\"value\":\"61.0173\"}],\"positions\":[{\"id\":51,\"type\":\"KbPositionSubposition\",\"text\":\"Sebastian B\\u00fcrgin<\\\/b>\",\"pos\":\"1\",\"internal_pos\":1,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"753.300000\",\"show_pos_prices\":true},{\"id\":62,\"type\":\"KbPositionCustom\",\"amount\":\"6.340000\",\"unit_id\":2,\"account_id\":192,\"unit_name\":\"h\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"Programmieren\",\"unit_price\":\"90.000000\",\"discount_in_percent\":null,\"position_total\":\"570.600000\",\"pos\":\"1.1\",\"internal_pos\":2,\"parent_id\":51,\"is_optional\":false},{\"id\":63,\"type\":\"KbPositionCustom\",\"amount\":\"2.030000\",\"unit_id\":1,\"account_id\":190,\"unit_name\":\"Stk\",\"tax_id\":28,\"tax_value\":\"8.10\",\"text\":\"IT-Support\",\"unit_price\":\"90.000000\",\"discount_in_percent\":null,\"position_total\":\"182.700000\",\"pos\":\"1.2\",\"internal_pos\":3,\"parent_id\":51,\"is_optional\":false}],\"network_link\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Invoices/show-pdf.json b/tests/Fixtures/Saloon/Invoices/show-pdf.json new file mode 100644 index 0000000..a4889be --- /dev/null +++ b/tests/Fixtures/Saloon/Invoices/show-pdf.json @@ -0,0 +1,24 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Mon, 28 Oct 2024 19:56:59 GMT", + "Content-Type": "application\/json", + "Content-Length": "59325", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-limit": "1000", + "ratelimit-reset": "2", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d7e010c777773-LHR" + }, + "data": "{\"name\":\"re-00053.pdf\",\"size\":43738,\"mime\":\"application\\\/pdf\",\"content\":\"JVBERi0xLjUKJeLjz9MKCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKL091dGxpbmVzIDQgMCBSPj4KZW5kb2JqCgo1IDAgb2JqCjw8L0xlbmd0aCA4IDAgUgovRmlsdGVyIC9GbGF0ZURlY29kZQovVHlwZSAvT2JqU3RtCi9OIDMKL0ZpcnN0IDE1Pj4Kc3RyZWFtCnicjY09C8JAEET7\\\/RVbaiF7msvFIqTxAwTREFKowSKERQ\\\/CRXKXoP\\\/ei1qktJtheG8UCohwKUHiXAUQx5RrVzNOMq7upjM3zDYzIUQYTIHSsmXjUKLADGjN1mERDAXpdL74EEa+XoEO\\\/HQYDUuSjJz5QOxM3+iK\\\/9KF4qNLW+5RjXSvByMdO1drwxZoq1vPqq9nX9rfN9Cq6fzBwlNv9V48ZwplbmRzdHJlYW0KZW5kb2JqCgo4IDAgb2JqCjE2MgplbmRvYmoKCjIgMCBvYmoKPDwvVHlwZSAvUGFnZXMKL0tpZHMgWzMgMCBSXQovQ291bnQgMT4+CmVuZG9iagoKOSAwIG9iago8PC9MZW5ndGggMTAgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnichVbLcuM2ELzrK+aSKvogBG+Ae0mZjl\\\/rVWrLZiVV2c2BlCCLMQ25+Fhv6Wf2VzO0JQtQuLJuknowMz3TDWT5xFBitWagDSMmlRbyxeTXCwYpofiBfDlJSve9WsPp5Qnk\\\/07O80kWRGlK0m1Uclp3Dj6ufdF2TdG2DrgcC1GUsF2I1ZLCbfH05Jr2uarH4CIlYge\\\/m6+eXbUJYDLVxPBUgTGaaKPNa\\\/08rP9T0RTfXB10sDtcDbUwRUEaQYRVFijhViho3GS5R3FDtGDqOEpaS6S27DhKWENSK807KC1JShl\\\/ByUEYcbYd1CMEppK8Q6KGmKVTMdRWUgZkmERuOWZsT3Rt26+8r2\\\/h9vzKf6mxMg8lVCEUyRzmGfu2g6u\\\/bd1NXdjWIYNMiZHdvL3ousfPwQxDOlPjUqjoIRbgu1zGm3i0KtSaXx+cr1q4NS3Tw028VQ0nXdNeL7kimhtbRyU1a4qu8b1MFs3VbcZaUKmuMA7\\\/N\\\/Fqi6LBsqqHS0+AlOOiX5afAS96f3Ced8\\\/Pv6k6vjg4cPGasXhSmnpC+qy75yHvLiHIwYgcZx2G\\\/EFp+IfHCx\\\/NDCw+adr0Ah658nw1cHJZIr9CGkM7Feldd2mg7aar+C5wth1fd\\\/Bpm8LbMV\\\/OPkH8o8HKQVKXm1THij987olIa3UEmuVjkKSzLVzLKcqMX1ILPYuhBYxeOb8fbiakkmiBDtAnVd+42pcnaqNvIkSI1IbYz8PKKg8nF1djBAqUH9SSz2y82y0tQCfWKkKKko5ZdzNp5KXamqNnk+5EY4tuNZKL8dyog0Ky9irZEazhIhyPqd2Udrp0jCGWSybplKbKeW2dJw5o0oeEcuJZdbEhwy2AXfdQ8iXQG45pwdAiv5FI5gmVuBOC4nqsIrtqDKolS1VX5NB+L98PQniFBuuChk3c0jxYbI9A8wSrYwe2brM4Zrfg\\\/v+UBOY\\\/XWXjyYN4v+fZjcJbobexm7hL8kdymNVlKjJC0zn\\\/G8wczWqHoY\\\/XgRUuupFZBxvTCsh6T3KYURBXKEHb7MkF+heflFjvIPL5gfe22N1SUnkLuLV6uDN+0K6MLcxw8oP8xVvbJk9W7mr3XLtI\\\/uTeOcIqeIoFkZRKhne7pIzZVUQiu5IUmn0kYQZmlKYjaMn4pMhPZItK1pX14VfoFMUy+6VnJvCd\\\/i4Qf\\\/24daKoXhqxZEKbtYYWflheJE747sGtXu0klnfdq6Bq8JHzoI5meLyWNfXZ9FFgA81a7g+1vSnm+zsiofSxcXFsSsBfLhER\\\/NcZ6d\\\/ROzqlHBGTRwSJTq7Qj1RikPDZ4kCS1HyGqULbwb3H0PSc30KZW5kc3RyZWFtCmVuZG9iagoKMTAgMCBvYmoKMTAwMAplbmRvYmoKCjMgMCBvYmoKPDwvVHlwZSAvUGFnZQovUGFyZW50IDIgMCBSCi9NZWRpYUJveCBbMCAwIDU5NS4wMDAwIDg0Mi4wMDAwXQovQ29udGVudHMgOSAwIFIKL1Jlc291cmNlcyA8PC9Gb250IDw8L0YxIDExIDAgUgovRjIgMTIgMCBSPj4KL1Byb2NTZXQgWy9QREYgL1RleHRdPj4+PgplbmRvYmoKCjExIDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1RydWVUeXBlCi9CYXNlRm9udCAvUFhBQUFBK0FyaWFsTVQKL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nCi9GaXJzdENoYXIgMzIKL0xhc3RDaGFyIDI1NQovV2lkdGhzIFsyNzcgMCAwIDAgMCA4ODkgMCAwIDMzMyAzMzMgMCAwIDAgMzMzIDI3NyAwIDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiAyNzcgMCAwIDAgMCA1NTYgMCA2NjYgNjY2IDcyMiA3MjIgMCA2MTAgNzc3IDcyMiAyNzcgNTAwIDY2NiA1NTYgODMzIDAgMCAwIDAgNzIyIDY2NiA2MTAgMCA2NjYgMCAwIDAgNjEwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc3IDU1NiA1NTYgMjIyIDAgNTAwIDIyMiA4MzMgNTU2IDU1NiA1NTYgMCAzMzMgNTAwIDI3NyA1NTYgMCA3MjIgNTAwIDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMF0KL0ZvbnREZXNjcmlwdG9yIDEzIDAgUj4+CmVuZG9iagoKMTMgMCBvYmoKPDwvVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9BcmlhbE1UCi9Bc2NlbnQgOTA1Ci9EZXNjZW50IC0yMTEKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDAKL0NhcEhlaWdodCAwCi9GbGFncyAzMgovRm9udEJCb3ggWy02NjQgLTMyNCAyMDI4IDEwMzddCi9Gb250RmlsZTIgMTQgMCBSPj4KZW5kb2JqCgoxNCAwIG9iago8PC9MZW5ndGggMTUgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9MZW5ndGgxIDMwMzEyPj4Kc3RyZWFtCnicrHwJYFTV1f+9962zv1kyW7Y3mWSyQhKSECYGGYSALGEHCRJJSCYLZF9YFARUFhEVbUVFK6CooFICBAxIK1KqdSu0WrdWsS2uLZW2lLZCZv7n3jcJQft933+byXv3vrvfc37n3HPuuxOEEUJGtBZxKFTTXN128stDSyDlLYSwrWZZl7qt7dfLIP4pQmJeXVt98\\\/L0vf9ASFYQEnrqm1bWzX37D7MQMp1AKBTXEK6ufSN4aStC5R9AGyMbIMHWbPwpQtOgPEptaO5awbW5fg3PhfB8oam1phqJf3IjND0Vni82V69o4\\\/9g\\\/AFCMyANqS3VzeFXcH0pPI9CKN7U1trZFc1C2xBaeiPNb+sIt\\\/1pX\\\/sf4LkBIX0\\\/pGFE50NnhLCI\\\/scPK0wQ4ngIBRFJsk5vMJrMFsVKc2zI7ohzIpfb441PSEyiScmqD6VA6NcaSE0LpGdkZmXnoGHDc\\\/PyR6CCwqKRqHgUCv7PnSNU8r9T6P\\\/tIxxDHri8wrPIwwcQ0DX6BVxf0jDSGP2S5tOQfA2F+2IXQnvQPtyI9qGX0Ul8AWrtR0dRL\\\/oFcqHx6HG0Cv0QbUQiWgApd6NZ8BUg\\\/YfYE+1FuWgXYGkXehvK3oRuR8eQE7ujX6E1aD33DtRaj0xAwLFoBmpF9+Kp0W60EJ3l70TFaCpqQW14bXR+9L7og9Hd6Gl0lPtFtB8ZkBfVwPft6F+ED6K\\\/Q8OgxkPoUXQWP6g7jELQy1oo+SPUgbZzlTyO1ke\\\/hRH40HIYA4\\\/K0dv4BMmG1sPoC+zGq7hx0MpT0Z7oKSiVgCpRA9qOjuEiPJH4hIXR8ujbyAl9rIBWH0UH0RH49qGfoI+wUbgQ3R29gDwoB02C+fSiX+ITXKR\\\/XWQMJTRQKRPYPgnm9VP0GjqD\\\/fgV0ioYhRFCSLg1+i5yoHw0F0b7LNT8HP+T3A7fNdyr\\\/IToDcgMdHmAUhv9HP0ee3Euno7nkUzSSp7gOpAMPebDtxY1Ar0fgdY\\\/wdn4CDGS09xT\\\/PP8ZTEx8mnUDBwJoMfQj9Ar2AQzVXEnvgO\\\/h\\\/9IxpFF5DHyB+6H\\\/F7+11I1zPoW1IzuRc+jf2IbHoVn4ptxA16FN+IH8KP4bXwGf0nGkjlkKfmGa+DauZ\\\/wN8B3Nt\\\/J3ylsEO4Rv4zMj5yK\\\/Cryz+iI6AY0E\\\/CwDkb\\\/EHoCZnYUnUYfwvcs+gMWsAGb4atiH56Lb4Pv7fhe\\\/CTeg\\\/fiXujlDP4D\\\/gr\\\/Df8DXyYghkQk8cRHUuDrJx1kOfkheZychu8Z8mfyb87FpXDZXBFXylVwrTCqjdxW+B7mfs97+dN8FOg8Qtgm7BD2CM8LJ4ULolG6Q0byW1ee6s\\\/q\\\/ySCIpsi2yIHI73R36M44KEXqJCMSmH01fBdAvzeBojbj97BRqCdF2fh6\\\/FUoMwivAS34xVAybvwdvw0G\\\/uP8XGg0vv4GxiziSSwMQ8nReQGMh2+t5AwaSdbyYOkl7xHvuUkzsBZuDgui5vIVXJhrotbyW3jeri3uI+5P3CXuCvwjfJ6PplP4QN8Nj+RX8R380\\\/wX\\\/BfCAuFN4XPRL3YLG4Q+8S\\\/SiOl66UZ0kypUrpfOiK9K1cBOn+GDqMXh8o8\\\/pRbx5Vxh9F9pID3kF+SXwKeF6FarpwAUskevImsxr0kVVghXkeuw9PQBT4AtH6V7CCXyHVcOZ6CZ6MlJF9rTXTwz0FQyv8MneePw9x+CS2vEI34dvKNaEQHMSKg7PDPuTw+m3sTfcSdxRK\\\/C\\\/2W12MXPk+e5WYACn7CXy\\\/MRz7ucfRjrh2vRodJGWjsy\\\/IWwPE0\\\/BzohTl4BP4XF0UcmQYoKub+iO5ES8kH6DzI8Sb0MK7l69F9qACvQl+gZ0AqMoUWMUuMw6+TRn4zseNeRPi9MLsgTsWc4EB34Upuu\\\/gN+RB1o9O8Hn3CvQCjP01+zJXzF4RZuAEkYDXagNqj69BKYT7\\\/a1yPODwPpfGfgnZbxY3gfRCuAa2yEHTaEZDuY6AHxnLlkOIG5EwFXMwFDbEdvo+AnuABQY0g4zeBFvsl6hXnkD5UL5gxaB2E+Dcjs9CC6DPo0Wg9aok+iIaBPtgYXQUt7kGfofvRHrw+chtqQ0kgOZ\\\/gqcIEclqYEB1GNpMPyWyy7Vr+ArXTsBt9Dd8fownoeuEltJl\\\/H81GY6Jbor8BdGeAhn0ULUaT0TmY5V+ghxu5E6ggMo0ciE7g2mC+Z9HM6LPRZKxHDdEmNB0dR09LAqqWskNjx4bGXD+69LqS4KjiosKCEfl5ucOH5WRnZWakB9JS\\\/Sk+NTkpMSHe63G7nHEOu82qWMwmo0GvkyVR4DmCUU6Zf0KV2hOo6uED\\\/htvHEaf\\\/dWQUD0koapHhaQJ15bpUatYMfXakiEoWfedkiGtZGiwJFbUUlQ6LEct86s9b4\\\/3q314wcz5EL93vL9C7TnP4uUsvpXFTRD3+aCCWuZuGK\\\/24Cq1rGfCsobNZVXjobkDBv04\\\/7iwflgOOqA3QNQAsR6Xv+0Adl2PWYS4ykoOECSbYFA9Xv\\\/4sh6PfzwdQQ+XVlZd2zNj5vyy8fE+X8WwnB48rsa\\\/uAf5b+ixZLMiaBzrpkcc1yOxbtRGOht0j3og58TmLX0KWlyVbaz111YvnN\\\/DVVfQPqzZ0O\\\/4Htet59xXH6Fx27j5G4fmxnOby9yNKn3cvHmj2rNz5vyhuT56r6iANqAuSZtQtXkCdL0FiDhltgq9kfUV83vweuhSpTOhs9LmF\\\/aX0ZSqJWqPzn+Dv2HzkipgjXdzD5q10nfQ6w0djX6KvGXq5jnz\\\/b6eMfH+iurxCQccaPOslYc8IdVzbc6wnAOKVSPsAbMlFjGahkbCg3ksxorT2JRZg5TFdET+SQCIHrVGhZHM98OcRtFbeBTaXDMKisGnAkOtnlrgSGOPblzVZqWEptP6PUKa4lc3\\\/wMBAvzn\\\/3xtSnUsRUxT\\\/oFolOJkEGqQPxDvyc7uycqiEJHGAU9hjNez56JhOcv6iN\\\/fpqgQAPnQDKBtdUVJLpDf56MMvqcvhBbDQ8\\\/amfO1ZxUtjj+IQrnZFT2kiuacGMiJm0tz1g7kDFav8gOSe5k9G9cjBwb\\\/LIrTXtZQ0oOd\\\/012WMufMts\\\/ZeaC+WrZ5qoYbafMueZJyx81mBeL9djHzefiSSxG4jmWC6BcOFiYPsw39vBp8CcyUNf2STKgkqVgdUKPUnWjdq\\\/Q+3z\\\/m5X6ohdoLRZcrRYbZk9J9rXP113zfM3wjJs5GDAsglPmLNi8WX9NHkBN63BSLADEoznzfeq4HjQXJDMN\\\/vqiJ0bRqyK+JwQkG0cLAP60pNjjNQXjY\\\/EK+FB0DsuZAIpu8+YJfnXC5qrN1X3RtYv9quLffJScJCc3t5VVDQCnL3rsnvieCVsqgFYNuGQYIpgZnwI4MUhCN\\\/QSfE6U+sijITsS+HMc0kv8OYw8siicI9xxWNR1YOINR+5s5VJpf+k05WJpeX8pGgNx5Qrc8vN8Vp81DW4YlrQrKnfiSkhAl5HKn6DdLI++Ie4Q3gGb3IXiUTqsx1JIv9Wz1UsaZG98fB\\\/ZHrK4PQ632+OOj7N4vPnZtuNkB\\\/QZRkayI2TgvB4Ph+Pd7rQMmp4M6cPJjoNphoTjZDvKhrnkk+2HUl4oEulzHDxboEmdCtDtLrxpAR115fmL55VLcENjzvefV0qV0jFwKRDHVlswSK+Nw7NXK6fy89zjVoZm4YLMpOxkVKDmJ+NhAYjlpkLMRCzJyMXHJWOrHmJ2GWJZiRnJeIQPbjnpw5NRnh9uZmxMxk4BborBlowcEtxQduyDByLrcKW9cGTBCFgRRX9KAKeIcQ5nwYiRRYUBDhdg\\\/F\\\/kLX9i2+bDL25YfwAHx1UsuGE8XFzKg1d+jz974mHI2AgZJTSxrGIBv+BHv\\\/v5y8defxX\\\/vOuxezu7tt\\\/X+W2nqPv3P\\\/F9T\\\/yWZryGT3U9tqWLZgCxVkVmkirgk4JGh\\\/TpFowUmyQrSh8uOIR2mGUIQ1Zph\\\/kWxCmcynHcC9YfbWHE7b9EiQt4GANQwJU4QKyFxSOLC0QJvnEKxmcf+mX5guPrVqaP9sP8IzOP439h818+6r98pmLztpd+EkmOqN\\\/p35hBMhSi0ysY2XR0BPodHKYjsKAd3C0Wc7KZmF+w\\\/ef+7X5kLUwPwLfACfaGQvrXAdFTRqffuu74gvLTkZn4U\\\/z740e3bV7w68v9H\\\/0l8reIDL2PxX1kCWkGicgJedpIG0fKcTkh2I+IV2iDAh6+7V539jTlXKXyOcotP5+fh9qhsyJf3FiSifsOH6ZbA8fgthF8SA6lhdykFOlJ6SJw7taAk8DvhPyd\\\/K5H2JgrKRTz8wqKCuKOvf3223RHYW70C94qnID5J6LDvaLqURJATR0kquGnsEQ64bLBZYl+GlrMixvJJsMmy+tmQScZ3KTMPjVusmdc\\\/Bz7wriFnlnxS6Wlhhp7U9xST1X8SrJcXGa41bJRfETaprzu\\\/oi8J75n+K3F603iBUeSyeTq1IV8\\\/sI8HUY6RUd0W5OtnQg0TcgMqSo4ywRtTXrtHjbsbKB0ZXs2HTwdPq5sB2d4FP1guOyKjYLWaQOiA27TA3aFotaqBPwpkjh36Ts7lx3sumHJO7veXfnA0b2rVu3de\\\/uqyZXkHczj0S8sOhSJfhSJRH6275EX8Y8iD39zAfzLJX9p3EDpehYIdBloo0edIZULmayFS\\\/k15H7yqMy\\\/wGMdEgXC6QRsJPgNPRu7jc4IYYorr1EImSyFwsCU8gSsgntNBI\\\/hGC7F65HG1fbsbDY3TbeNcQWxNUhniCqzfX6rKEpFIwHT5HLv2HfmPPyH3C7+tutXJf944huL6PhKwV6XYHxJ6IvQyOuE68SXhJfFl6TX5NcTpEnGCuMc81JjrflW2632u23HbZ95P4u\\\/4DW+bHjRTuKVBCVRSVLEn0YvIAkYLEOoi14IeZP0iiyKbyR4HQkJXjnBy2EiexM4U5LSR3Yfmm7F1j7sPmxKcggoqY+8FLJgYtR3ut6B8VB+4pfIOqQiBY8KGa2Hx4A730rWEJ4cI6mgQ+8\\\/oDGU6sXsUoVqRtDkoB0rz1ltdO5w22genm0GpUh1JKB9gMujUCWu7EiL8wWKgSIjqVLyp4hS+siYwgKhFyVeulJMXGlPbf9mz6O33fE4Pmr\\\/16\\\/euXTjsyefXJi0b9\\\/Y0poTt5\\\/6rG7pDx7fbD\\\/94df75j93fPem6nyg5Lzo57wTKJmN3gllCCanqcy0wcSXWW+yLovnZjmblCWOWme3aaVjg2mz4+74p016QeX6QCgMdBOOl7DfZMSUQCFo7CVMN1hMuKjXaIzj3cfIbuQhDaHUuKQEgU\\\/KNNk6F6mtKlHXSp0BJgMBjAJKgAS2DnP34VEHPe\\\/gY3gUQoAcw1VhyOnDDx4YkIeLMYm4WKkJRT\\\/QL5h7XmGE1OgIKALKAZBwu73YGdPjIBHFg9EB6lHySfSOQOvP601+aOma\\\/U+uLpjqsBk6+zYsadzi6PV9\\\/eMVbyytq71ja+TL916J4jvdj27suWPVLscTZMXqmjvuuks9\\\/Fr9wdpFjw9P+sl9JyL\\\/+BxG7AV0KsIxkB4TuhgaaZtvbDBuN+41vm4UpnJTTT\\\/kORtgCxlFThL0Bk5CRqPJ9AbHOziO50yIGE28xL1EXkIymA47Q3rE81AEvaHn+0jdi4KgDyUmF+r7cHHIJIVS\\\/IXSWl+RtNVCqMSZTI5CRBSiEo4cNvfhLYxyf64E6mVnXwTofa4weQOj4lKpNRjEscWYB+BZLBagHVh0R5Ep+slBW9DUF303ZCgIcinDghyfmFhKF9IKoCyUCTmMIUPQuHZG0BgKBI0pCRAOC7KltgJMkyJcYC2I81s5Kybb+u8iP\\\/rBq6\\\/2Rorwoqe5I1cmPx3ZBaLxUP9SAA3Vwz7hGZDlr0OJU7wrEzcnbrM\\\/a\\\/+Z8T3jb+Nlnd1tzvJyujwhz3AMxJUD6Cl2fZzNbn\\\/DbHGY7Q6zxQT4C9nN+qS4kHknrFRmSygOx8Ul2EBMX7Tw+B2KTRDekJ9PSjBZFymtyhrlfoVXAIduhkM3Rm7FTdxbVdtxXIQs+CFA8aiD5sP\\\/CY\\\/J1+LxKiJLERPoMecBkZVWuJTzyrmN8vBsAYiLmFQzgcbtlUOBCWi0++J8HCASxTkkaoHM\\\/Unco0139O7bctOWjL33kQ\\\/7X5x+1wMnsNx178Vf9OO1yuZ7Tj25\\\/eD0MU7y1xciyxZGLv3qtQcOfkpXtXKgZhzIcyLKQgdD6Us9eLwUihvvGa8usM1Rl3K1Uq28xFardsndCevlDQnvye86rRIIdG+66ld9VLKtGUkh0wwTASjF43cWUdqBEOuEpHghJclhArtgVCgOHU7rVBjtwGZQFIUoW3P0lFhJOBjSj3EtcrW61rh4Vx9JPZQdW83OD1AqJrpMZHMrzw+QhYqsBIYEXb1EiUqojeo3fwqyKsVUXrFjCNW4y4fcOZOWzhs7dzEZe7y+t3\\\/5mbt+Hzn3o7u\\\/3Pdxf\\\/H0+6Z17H7ytluf42ebl+SV513\\\/l9\\\/VVEX++evN52\\\/HU\\\/AqvPeVPSevfFz5XEXfE4\\\/s30\\\/XlGqQWqfwLMhsW8h8yoR5+CMyrwOJpOo+j2BeZzR1chyh057OFDxHvBa5U\\\/cnNB0vwosINwaCVrwGFliPOYYSMN8r20vLL56fplyiq50Ck6e6P2gNaoqeogGsGhFxouQfabMVV3OHt0TOTxlpOcrd8fe7+W\\\/3bXkoYotc7vvtPvw1fu1x6kXMBi57gMsu5Ed56GyouMiJM52TnJMCnxu\\\/yhN0eXg1Wo1X8V1yu6HD2G261XUP2oy38BvkdYa7jBtM97resr5qt6UAuw8mqF4aqGouDYapAYqBpEzViJLcyBifNHzncDzc5ksShYwkmymp82Ud1vWR+pCS3WkJqQAAMF0tioVY+vADR0a4O3s4zEH+wdTOuEGrJi4UR+K25g9aNaC9KVmuqnFbsDL3fEwbxeCgQaKjHcy+QKBowDwfUNcIUuyOIWgYCg28pK3p85dPfL20eeO9kUsffhi59MDiDUsb1t9dV7+pZNLW2ev27LtjzbNcfOYjS3Z+dHZn3cOZOac2HY8ijE\\\/c\\\/wqe03DXnYtqNt51JVq+dfoza+94bk\\\/MWvQwiyML\\\/TRUWOKd6gz5b3be5K\\\/jmpzN3nr\\\/rd7VSVu89yRtd+71Hvd+7fxcvaTaRzufcO5zciWZtSJJp+rLD7R1+1RRzUiabl5EdVUCyJSA35mhiVkv1VDJx3AQGUDKrN\\\/RTjlU9nqp6FkHSWsNWYl1a\\\/Zr310gzw9VRgMihiqpDc10z\\\/WkqDCdCheECGhrszIjMoAZBTX\\\/p22fc1X17NUzRuKRLzUfuYKlV+8\\\/f9utf33yhY\\\/Im093rTi4d9XqXXi2cmvL1DUftBnd85Zi+YOzWNke+SNY+V9EDv34Za7wsSOnHt9CJYygoyBmG\\\/gA84JHhVReQKKkI2Ipz5VikQfbPReNQYTakLtkZrcDRKi0nFc0v5Fhww4mPAfXUTDjuYq3377yLJjzBC0A6TWCN5OEUtBdoVzgRDxZ5V0VTxZ7w\\\/FkqbHaTBaAWUhGmsebSbxHlnikpFutyJTpwElA+f0hvy\\\/FV5qsTy5NSVFLfb4kdEtSi\\\/4W15JU5RYVjL8l\\\/gHflnm21J0tVfqByKXgpTMqn7My26MSPqgS3LIi6pVRMl+1OHiKYDOR6ATwBzjJmZ\\\/60qjdyzu3u496\\\/vnm+xgtuHP+SC\\\/pexs3ptqWlJdcl\\\/304pLGHVsfdb790dfPVD3ZNW1yVVPkYTrjaD84+xVgZUjgACeFanKVPKVebtBVKZu4rcrrwqviCeWCYpCFCjyPzFAaDD3K341\\\/N\\\/3drOONvIk3cwa9TuB5MOJkUZKMEJdFowTevCoZHZBAOE7ljQ4ooUsSBDlJ5MQ+0hbSIdn4VYhgQo5hAwiMIWQzqigscbNm8Kf5szy3lcd8H8YhwwzjCemskdtqxEb6rFik0xJZI62ViPQDy3vva+z1wAV\\\/bmCx16MAaN1jSr3nx5xj1D2\\\/UWC7BBuHu7NjdjFozeBG5dQp86lTGwUtBJJP6THMntKTNHPB\\\/F7ewsnSMbDpUfRfFPEVuKO90g8Ovp\\\/zcXYfF0gXJY4U\\\/IrM\\\/\\\/j5\\\/sd2fYj\\\/+uiElIQC4di3E\\\/DxyHiyAG87uvzeewCj2wBRXwF9rWwtXReawfMT\\\/PP8df5O3V06sdHbLbTpOg13CncaxHSnjnOnZyU5E3U6uy0pKyszEyUkJgGVkpOSrEh2B8Q5aQGjNycxSWU+UmX2dQsZmNj+zqXy8wMOAVyAJABWaTDXSjdKsGbQAqIKrL4hFquZ+LFvhOYOBPxgcI3QoAbxbSSw583Ouvr199+09pUtkR\\\/g0etGTZ4y4Y4nIr\\\/FzbcExi0omfPQlsg+4VjF0fAtzxSkH19bf6Aqn5tlddaVT2rNvLxTMo5aOmHWyny6KtZFvxCWgVwlor5QVQ1ZkgjyOcJUg9pQV+JadFfiVrRdeJ572nSU6zW9ZjqDziX+PdFqtiVaExO5LDHDmpWgJk80zXPcFDfP0yAsTbzNdo9tO\\\/eoeXvCHryb7LH+xmxHDuRVHIqXBwP2k4MZQUx1W3pGULEgzMfbk4xcfBKvUwKWySigYoy9ya6AKmPZk1SzUFtfy+niWlk+YFhocpidXUndZdyBXSLvT0kF6thSQQRdUoAKJIlz2KiO43tPjo787LPzkfcf24\\\/Hnfwdzrnu5YKTP9j7x4XNn2946g+E5H9z+RXc8uvP8NwDn745bOeDT0a+eeClyFebj4PWeQJkcAFgxAL0uSsUUJPxOFljvFVJsiAZBgqrpTc5UYnxPekq36kqGWR6ft64laGRXLwki7Ig8zIvetxeNxENeqPepOfEOKfDaXdyYjzn8mGbGW5uOcGHnXqrD7FNriz4rMMMJC6nywmGEwGIpPlGxFxGsKp8T+B\\\/P7\\\/g9oquzmm3PvD2+sgBHHzg6fyy8oebpu2LvCUci0ucujhy+tSzkcje6hH7RuaXffXM5\\\/\\\/MSqIo2AOysB7mqUNTQlmikCTL90tYkhDH07kiWXocvDoDIV4Dr4vNVH9djDnUwWfsOacZPnQ9ogDPz4PBxvnYtYf7+MpnpKd\\\/hnBsX6RkX38dtNAMyDsKyEtDH4TK4h3xcaQqHd8i27GNS01FPpuLpCHoHYuuJDMH5okO40B6WqoKeouo6VVgm3WsTcfpiQFVj\\\/WeQM3NA1gpVyqBAeUwBGp+xsyP3FL2qPmQQWqXAUPG8\\\/74BG+CJ4ETjQElLS6QHJDT+IA\\\/zW1K9CGnxe6Dwg67KsFTipDmwwkG4IzDCrcknc+HUjm4odg2JN0GHdiMzKa8AmwWpVmvwabTJQ0nAE66keew8QDPYis3lTTfHzmz84PIjt5DeMZvd2D8YGC\\\/b\\\/GR1vUnl\\\/tGbcTkgdsvXE\\\/GvID7P+3oPIpv+eA93Nlb3\\\/fDvLa15TPvmr5px6nIv9ZWF2Mr5eRuQGwKcNKAGqiXB4JmjyvkuSSdfqf+jJ7oBUIMMkBQlSSxcq0Jm4hBYygVyjgoiyqNqgmr4CBUmdpM\\\/HUV7uzKdnAuGaQrL5Uy9xIwDQYdwzXOBkfQ6oPLD\\\/fdJ8m3J0\\\/2i8Kx\\\/mfIgm8nkEP95dD4yzC0dTAqDv3wMMUTobtHh0aNZrtIhwoKtXBYnhZmZGqhP00LE5O00O3Vdp1yTUqhKmwV9guABVjR7kc7UQ\\\/ic8F9m4HOogtIsKmQuBW6e5J\\\/r4IJJHi0B9fCelZZ0d5R2l85wCfqKlOgFlhfPknXCBhrcfQLrpqtC+UhJUzqxS7SLW4ybbKKOgL2mTfk45MsOl1Ar5cDhkrVjlV7yD7DXmXn7TiAptiOsA7PK5Xtl+gaB\\\/g7D12gAZdwZBF0xryewHX7pbaaSUsyTla8cscrb+Od7j2rxnXezv3tiqfvjSWfUG7CGiXMotzE60P5XEpxUNaVpOuLxJH6ifqbuA3c+5y0TP8h96GeyxC28JuF5\\\/ivZUHP4yL+PZ7oqKGvs\\\/kKOZXeQPkeMgZtNPUQPMuxkKdhIgtPHLI5afonodEe6CktbbSs83hGA1p1ep2sFzieVwW9QxDgCQAkghkh6vVIIDwmkkFGsp4jBoz4PlISsuQJeKfQI5wQPhV4YbJM0wx5ElbBQOiROKmPbAgZDCpTJcbr9jBrAezZ9vPUJqSiVEphVlpKL5BeainQvTMI3WwvQ5KVUrkULAM3WAbxYBkcRXz0g1EVbGFgH7qHYdWlwExyPEGeXinxQcDPJ0ecEHUGRTpRgy0opziCfMgRpBM\\\/nAbRuGD21U8FFW\\\/c3lGJ2gE0FCjYh+FPsm47ST7AUv+j5I4o6r90ARCfSd7v\\\/\\\/GVR8jnX0f4GPf4LOCegApCRkxACgUkq9R+Is+GzBLhYqpUHLJofF6prRkaKH1x0MuvAZh\\\/3wcFH0FItEB7Cu4OrUHEIjtIvMwvM24w\\\/sLI6YyTjJMsXCafZsoxz+du5peZVpg3mmQDEeSgaaR5OpnCjZdCcrnpBrP+EfIot03aJu\\\/hnpVEG7GYzXkCAcYS2Wgy5QkyRGXjLMssHAJDUKYn8gwmk9msIFlHqmxrbcR2jOxBJpx\\\/UFDlPpwf0ht1ejVkXGPAhmNkHlisBsghfWA+6sB9VC1tClb6yLwXVaFKWCtwQh\\\/Zc8hKdYsH+A5riBumzixEiHsHH85Vgr0ICFCGfL1gRVI0bFzN7EYIQLiuGog\\\/QcboZSRH3wML+j1mH07pMUJeBoOIKfqvA2Y9TY3tgr17xBc05\\\/jYTtiR4qB5RDGLHh4GqbHdruwKsDCB+2zxxU7XyGLsA12H\\\/dj6CE7FN+c5PUV4ERZeiszbH5kvHLv8twdunPEYd+XbCfybl4v4Ty+r1DfaBZIMJhlyoxQ8NWSxGczYNjJhQXKd3JzM2\\\/qifzhk8xZCeOFQSnqhlT4nphcqsdASCyH\\\/g0OJAS0fyiuxkOaHOiGSZp6cMFmdbViY0JzQoVthXmlZr99kedi019Jn+dL8hUUxG42q1eKwWi1Wi1Fniyc+r1Mvgm9oMgpunc7p8nqSXC7kS2HrvtttsZjlpID5cbFSTW1LXZvKpaa4Y6j1U6kdMABgZfCcc1N7R3sbyMwASAYzl21\\\/a7vfAnsliAe1b7a206iXQ5agRSmx2koouXE7Y44ZxNPrCVpBgm1wmUMJQQVEVUlJhmtQRiuGmM1gGNn93HACtpDfCsnaXrpvF9l86q1b33inPGPu1OjFk3Nbbhrmm\\\/J7vGv9tmkPPxXJE45N\\\/8XKx99LTEud1h1px\\\/l3bRllkPq7uYLilRMb2NuShdEv+D+BpZKHIqHHa7gavpPr4vm09CIumDCOmyRNTSxLHp86IX02VyEtTLwp4267OcMUSCWpXHraSEuhf3xaWe4CdZ5\\\/blqTYYlpqbnOEXavNNxqutWyWulO7UzbwG023G3abLlXWZ96Z9qDpm2WbXFJaalmk0HwgbUZL0sizxERp6WmQBqYZ\\\/HD7vdi73knGqZgFc\\\/AVbgNb8UirE49obRhSUlOTkgaposPeCfrAigTZ3pH+AI2HLDNoYzz5A+aSufALbvGsqbb7HBdpNvswDPqkGkOCttYaLcXJ5GCETF7MzWdbduwffaYzR3ncDl5F+MGrG+pgYUvmhb9YnXrc7NnLLwu0jSzsf72v\\\/3wqX9vEI5Z9u3t2RUchT+cv\\\/bWDZd\\\/9Frk74\\\/i95WWe2+6oXN8Wb3fVZ1d\\\/FS49ZXaxrfWme+5b93N0wsKlmZcd3hZ9+nOrq9gDnmgWY8x33h6yCSQJCAPYoefdH2k85CquagviiomuXS3CuPDWDNyIFc+8qimbSl0lf5zlZ9TyGq2K3v1XkQtVmKPJPKbI\\\/GCad++b\\\/9OUaADCZ7Adv3\\\/EboxV8BZKINL0+ca84xVxrvlu3VbjSeMF4wG1TjDSHgwsohep1NlwQHWFtgdKhEchAg6TISvVD3o0bCMw0Sm5owhIzhDxmvlrTI8gydtIqGM4CKC7yc7CCE0xaoKMwSSB7pzKyyoFwQB9OemQ4aqPZr+bKdv2+jlVs5Tg6PU6zkPfvZ3vGtNRzpADx5EFn1f9K8HdTZMA1hG+qJ\\\/0TbkqLrMgGIjmbpE9HwEey0JxqwPnGym\\\/QowGdv\\\/i1\\\/j1cOTU4bhLa\\\/2g+V0+f21bStW8JnMgsoE7vQApYzo8wM2M51iiclaeCOeKN+o4\\\/SyQUee5zEHpj2v0\\\/OyXh8A8yNDj\\\/8NdryKeQek6zMMCYWY3mSq8iAE8+SDkJ2mQhUhSRKJQZ9kBJPjJXwYuuTx4VA8kvLkEBBxsnEMrENeM0aCOBN5TJThgPfyi8BnCvfS8ovtpco55cqge1ZqDTKzgZIM6AiLihkIB9cp3MF2cJk1oSMpviB2+4I6aip4ggTUkqaDivDIYoobLPniMsk3M2688kvee+X1Cm5PL\\\/d87eR9+65I9ftgFZgc\\\/ZJP4K9HGagYJ4bu05l0WR6TNyvTlJUFa3RccXxJ1qSsSlNl1hJTY1ZV3mbThsztzse8e01xz3ieyzjieSnjlOd0xq\\\/jPs6QxztxsivZnZ2TVRjkgzmT+Btz5skV2XVyY\\\/Yy40bj68Z\\\/m\\\/6dbS0uNGNeyU0tdI3wOdyLMlszSWZCrnmM+X7zDnPULOww7zd\\\/Y+bM5gTO1UeeCzndDzkSEiRUlq4fkcAZMquVapTmS+0jN4eU9BB9macG8gL7A0IgP0gZm5zkL8wLngiSnUEcdKW5U3JTXxZPiyRZHCMSMX8U3auku2lAVHpqpLT\\\/s8+oojk38GIPcts1t2zg3R59rQfLbRqzkKl+KWbfosJ0bZvtesIUjjMuzuF0+QMc3W\\\/TdjOhEFdae3TJ\\\/uMTO28sWvpRPS4o27RmZWKPu+XM3Zuem6HoXCnHE1yLT7UuHNHc2PBkIPHOuROeXz9t3TSH2eRNTdO3DBtd0e5uv2dKqHry8BUXLq8fPQp\\\/nJGgZJTn3lh18\\\/TRy4GDG4CDydQGQ4novdALWDBaUoUioUwQxiT3JJPk5JSEgoQbEtqStyaLJfZSZ6l3qnOqt1KuNM23VDpv8S6Rm0wNlhZni\\\/dE8ofGj1wfef5g\\\/7Prz54\\\/Jn6aHE32qEKuJdeRJ4yxhISplhlCnfBR4j\\\/4bxWjEmfmRYLiE0QJ6+MSzAZ36hkDVgwhQ5VhrYE3dGFrASrg0gg5gWEt2Il78AXMJ+MxeDrmsCdpYnHsVUUH9YwvUi3fznQ+\\\/LGNKEZ5yEbtPj9YnqDWk0icgvwp6Rxo9atb78Oe7e04sHh\\\/eyjyt58cX0oK5z6w7IWnu5e9APbvP+6ffv8bnZFvIu\\\/9CG97ee49b7955tW3QThnRL\\\/kzgPqvejt0ESdEScnjLOPc822z3ZV2atcj5HHuO2m3cpur1E2efRLSCO3ROg2tpnWmp4xHtYd0R82Gp1g4\\\/6RcOaURZZWyxoLZ8EUrJPymMdXhdrA19uJPgXPT4csFgOoH1uCQXIn8IYEC7akmlPiYRSphuxkjEEV40kJcamnJZwsjZGIlB9feIqtB+10Y70jdlTtKMJU953vuHi+Y2AHwRrMVWB5rDw3sBxil\\\/byqpAd0xhcAymxuNIDid\\\/8+KPIPzu+unvf75L3e9Ys2PTc7ruW3IfXu148jROx\\\/gVM1u3fFb+06WfvvHfyDkDWBKDS2dh+5Huh5\\\/WEN6WZCk3jTUKRoyjhJjJHP8sxO6Ge1AphXY2jKuFE8rvCb+wfez6zf+b4xvUnz2cMQc7k5Gwvhd0UL8WgNJykmoY7S0iRaQopM01wTEq4ST\\\/PVG\\\/6TPzC+S2+aFZwHGc2KBZAlkGyIoAWZ3AXYJRmtaQpyhkrVqwha5V1rZW3dtlSX5ZOS2elqMRT2k0HN86TVDgjBqxy6r6B4a70l56jJCul11VoUaH2FVGhBqnWCEadqaGveEaFT635TfeSd++s2pZ7qF99oXvZ03tuW7FrwxNbLj+1A3ObZ44l5m8nENtbb7zy6kdvnQKaTQFpTAJkxQHNPgnVJqOEODKXqxQqdXMNYW6p0KoLG2QFHCaFpNs+FL51XPJK+bYST37CWFu5d2zCTNtCz6yEaluztzphhbgi7hK55FaQE1tMLtcMZ5Wzzck5EyxblZ0KURQ+PkEvIQo8HX7IDuByhUxUB+rSswp7TNjkTaYudFqgkIahRKoZk3Gys0BJlUKpWYVDSBaTxezy\\\/nPTlPbs7Evt2eXsfU7sdU5pf3tp7I2ItjcMDugA2BRUMAJZHZKP7SZgH3ufKnK3HMv5y9GvIt9gx+9+g834ypf6g+trtvR\\\/RGYaR827e9VePM\\\/1VC9OBl1gxBmRTyL\\\/VtT9xxrwQxvGNTxDrRs7OClrwcZ1oUOhJIcOWzy5njxPyNPmecz4uGmvSfaaMkw9nhMe3kNnl+FNLkyUTZzRkqDHcSTbYec5Eel3OLAjag\\\/xrjQeceRBzLaVDuWPKmTbS\\\/qE5MKt0NdTbs9xfAz50CWsR26YPjgEYI3B6gzmy\\\/lKaoqVstMzQau2T+dQrKJOEmVYUhRwWpBVtMTjbJydtW4dzgZgdRRY\\\/UUF9H0M4ArkkIphHD2dcHDHDrv3zmVTF8aPGjFr\\\/OnT3PYt7UsLJ9xk+5F+QtXiLVfqAEM3RGZyXwOG6Ju\\\/C6Eqg0Fw5BjSHFMNZQ5Rl+hJzDEEHDn+oGGkY7JhgmOeNN\\\/QYPhW\\\/48483B\\\/Tvr1\\\/uvTp6ZvzdmZI430jcwckzPBMMFXljnHNyezUarx1WRW5azN+Sj9S99f\\\/N+kW11OMa6PHOjNSLBLTIMpKpiyVH+tRSfQGUTRtTo0VkhIsOjLUhKMemdcQVqBPs3tPuPCiivkqnKtdfGuLgtOQynJqS9bTlvOWqIWPtkyxjIdtKInO6fLRwUyexoTyIvUoG+nRu4lenbhXOyN4TntYF87aDEX3Uxma2e69qqQSqaraGCHaugb2Lr9hhHjulZvcpvxsp7fXmj51b3Hb30m\\\/NudP\\\/360WdWr9qz79YVe+Z7Z6aNqF1Q3HMPLv34EYy3PLL2ypJ\\\/nV7xPJf1qxMvv\\\/WzV38G3N+IEEd\\\/8+ZAB44iJz3SEucqTOOLuDLumIlnZ49SXZ5Cl2w1Wh2cgJElQZAcBr0xTRcqGFkY1eETOqyb5qSIchWOLOxxXnCSNudOZ48z6uSdxJEW28yEwhfoeWsVKPsp4tG0uIkz3LFDadRjbc++qJ29K9XWQHB1NLiZRbOUZhaN8dgkA9AQ3d1dh7Irta1O7WCR1W9lVBHjrBt7bz+x7MdTeruXzri3FJbBvz1Yufvx\\\/kVk18bbZt+3uv8lwNgmELFStv8podWhyum6rbqduh7dCd1Z3QWdhHTJujbdWt2OWNKnuqhOn6yDtUriCacTudsxEgWR14tSmoD4HfxOvoc\\\/wX\\\/Kiyf4CzxBvMqfgSeenyYPzLCjlJ0CgpkNnsilLO9oZ69XYRabent7+T+dPn05jg9c\\\/ohqABgj9y+21\\\/hWyCuJ88QFOs5i+rtwSeTmcsv1xCaqdrZteOGQLb0QTOALvRDaBJbgYwmhuyBF5HmBF4t1E3khTRymn69fznXrP+L+KErPiNgvBqQ0OSiO0o0xTTdV8BXifKlCt5pfKTyqe1X8Nf+eeE78Svqn+G85zqbXCxzHE7r9qAMvQdDJcpq26ciB961tROqBOryMgQaCKMmywYD04PpZDgop4EpZQn6VrfHeraCeDWmIpIFthPAYNB144jGafu+bWBcTFnpwgzrD7QPecGwjA5YwV5C6BfzA7iPdhpQUuVQu5dhdO1IV0utyEoM6OTGxlG4sHkyk+4vvHlRZcMAXOzjF9pHaEducPIrE6ImDviAg\\\/sRBJw0+OaiwXUkI2JORBQcMA\\\/tQOLarafuYx7LDCb05HKXsBrUuHXTTyn8+EK8Vx5UVzKBjW5YFGPuxBEzHz30VWYJf\\\/iSya41w7Mpx3BNZ1l9Lkm+N3AwIuBNgUMxQuuUoEkBxF4\\\/SNt4Li7QwL18LU7SN+VAaSK5FSBZ2CGcFfjrcLghcstAmrBWiAg+SpyecJoy0JSaUXtDSOxA+AaYaGSKZ\\\/CBus7M15DIF1cFmQmdwZ29sdx60hxgAbe1Hrx5FOvAJxxpMoD3O8ed0v3d9pgq\\\/ES6pxCWrfp07XtVxnD8pQYxLMBjAbBb9Xo+iP5OGt6btTCNpLpfXnLaVHfusPOxO2xqP4yEW8iBS4E\\\/DZxCmNiVJRhQtHPKkpvXhFYd8Ewe0K9jR\\\/efopvXFyv5pZeHxn4PpzDasx2hQsrqGvmkyGx32gMNojcc2U9yASmGHYekxOraJ4mInYJheYQvYUA2za8QzS5Y9nHz7G088d8i\\\/8Pq2H\\\/bOr526roQPPDRt0eL5x\\\/Yf6U8nP2paVPLQ7v6HycEVK2Zsf6D\\\/w5iu\\\/Ryo5URvhewCJ9rJHqVP+SP3hf0Cd8ku8lRm84GAKxX8iHLG\\\/ak76uZV2WF2OG2gdLHoNOlNZqM51cA0rwHDn2GamzGSal73BTdpc+9097hPuHk3RwrinDHla\\\/ue8nUNKN6LpZo3CKqX7bsAxc5f1b1O0arTy3pJz4lKwCqa47FFb4sRjL5UA+FhmI4bGXMDhxBs45PdH1ftmqHoe7OW3tj5LB94eH9ZW\\\/mI1f2dZENL89gH3+qn73THg82YDjQxIQ96JVRpk\\\/Qe40TxRnmeWCHXi42yXKiU2EqcRe4yZYptirPMvVBYqJulVNoqnbPczUKzrlZptjU7a93LcZxOFEw3c3OEOfqbjU1cWAjrm4x6VwIvWQFyjlSJksKemlaYJ2EkKZIK5l\\\/+WQo0SPdQAxHi5lQUgiIUaATle6lxqJ0Mb8+uvFRZefVwOLWg2TbEbGG2brGwWMeDjNvZyTkUO0c3dL0ev\\\/vun\\\/8WO2\\\/70z1nI+ePHty44eCh9RsPEjtOv29Z5Pf9b\\\/\\\/pDpyETW+9+davfv7mG9D1xkgj7wO62MASOh162qgMU0YrUxR+jNqjkmQ10+hPHBE3IvGGxDZ1qyqXuEriJ7smx1fINxsXuhbGL5GXGhuVZtfS+BPqO46P3R9730k65ziX9KkaVZ1+PlvJjiviS5QJ\\\/GRlgfKZ4U+JEcVgNYN1TR1a0QkOLTJ7Us\\\/osaIP6av0a\\\/W8vgvbC0iBLQ2h\\\/+jSJoNLi\\\/+TT8ucWmtwqEtrHxAyZ5yDnYJKt3JDSLVxd8mDDZvOLOk+e9uC+4dbn1m24vlnuzoPRBqFn2yeOXNL9JGnIpfvmVrSf5nb\\\/fapN3\\\/z5hvvA7TXg8X8KtDLiu4MXZdrxwqP\\\/XwhP46fzdfxXbyos8o6WWeyW3UmxMnYwCaK9LqMrTKWU1Q7tpMU639pq9gmnhq0VcDnvNhB367TaQUHDvUi5fWNZvb2o7KDvpvQZqhZvxJIw\\\/onr28cc\\\/Mt199ww3W3OJL4wK72G0ueTZ84pqqj\\\/1263o8Bf\\\/MAjD8Pfxi6jU9xpJToJuvGp85LCaes0t2nuyv1GfvzOSc5k87ldbvypuS85xLiyVxClBFY714oL9Qt1C80LDQuNC2Rl+iW6JcYlhiXmHoDvekWujecmjkydYG+wlAbqM3o8nelrk39gf5x44MZD+c8lLdbv9f4VPrujEOBnwecifQ1nC0puEBOTzPqea8aiOMNwxO91DxOSPaM8Uz3LPLs95z2iBZPsqfVc9bDJ3vu9xDPS2Qu+H2IWtEKfU+l4DNgB2AFE3rA5JDDWcgOmiSZrYUYD1+Y2JRIEhPiJD5huCHZi72pnpDdXejpIzcflFKzoOSLCcEzWTjLO4LWCoBPVzXixAgyZsTaEWSEgjFORWqqJeXsoPmQP+DGtZeDnX2+YxpTa9STu5gd2zRoB2cuG\\\/RVB4Nmx7nBAwguTdmF0ocl+cHdCFgVm2JXODHFpMYjXYYUj4VhcEtywKPP7I9HKX6TUc7Ux+OMdJ1ezObjUbKSSNWiduyA3dgOZlb2unXUVm2nxt7VY8jpgfThYN2PLP7efj18k4imPgJjDlruvm3ViqK0H7z66PSxo7IemL36JwusPcbOxlVLnM7c+Ltefnhe46urT3+IRycs7QiPH+13p42YtG7axJUZydk33lbvnrVwVrE\\\/IdGuTy0Yu2rhgh03vUCRlhr9G8kSHgXfcu1RpKcv9gPUXDwRGguRtR6wc40mPeaQU9FlW\\\/SgDDiDRUlBKdhkSzPiqCSX6cqqpDZprbRV4hFo0Z1Sj3RCOiOJ0jGyBLnxyAN1mrCADjhPbftzF0vZFkR\\\/KdUD1oIC5XXtvVOaS9uBoP6itZidYGcHS4ninVq6uCnnrrsOHT5sz85I2rVDuT78JKnZgqWmyL1b+n9QnuOlc7kTpOZT9l88fnIUean3DzYQUe1O+hLuQijT5ijMtuNU2e40YrvTAAJvhemgAmea28UWURc+4cKuaV4m9nQR9V7wkjbvTm+PN+rlveDlDCoE+gsiVXcG\\\/AFeN80z6LycH1g\\\/QTOwHbzSYOyoMUDKyytmk8VERO2kEayivDEemWRrPKJraFbWOtCJgJPYVkx6gB1HcF09msCNWfWbW56arhh6DdaWmTPvu6738d4bm6cXdZIH+w\\\/dmz9x5uz7N5EguAzgkyAkvAi0sJEDIcXiwFl8pp5Mtt5svc\\\/KWSk1dMm+QiUhUfMWQvuSUwt50aizi\\\/E6j03gES8adAazbFOQnXNICXK8IREWwzQpS842F6IiqUS+zjyemyiGpHJ5imGcZaJ1su1myyzbUqlWrretFG+VuuSj4jHLEds\\\/xMu6DIM1A2WY0s0ZlnRbrmMUKrYtlzfIj3APG5\\\/Fe8gewzPGw+iIeMz8C\\\/AyPtR9yX9p+cJ2UfxWl2DjBAEIJgk6vV42GI16xWoFbk45JCCb2hedFKrTW8zqz6ySrEpWmy0b3FFBkMx6ozHNZHaYTGbZarFk62UHVEcCAS8DOTAoc4IlGy9brEazSW\\\/V85zNZDTKsiQRgkWbxWI2I73jkmLC9KDNWhNn6sPPhvTqdD1u1a\\\/RE30fmRvSTbfiVusaK7HSJ4Mi4CpmX3MCFD6ML9kv1TEl5Cm\\\/WFnpBiUDf15PP8Q\\\/H3RhBt6ca79DYsdsrey+sXzoa\\\/RrA\\\/oyxAyOjlkppdfG2PuQKT3Js+f3mlSjSo5HP0UYLnP0TC\\\/Ks6g28NwHD3ZXTOkpnA0ujhw9c0CiZ5MhwTd7Sk8B21uVo58ekFQt1RZ7cU9f+J45YlFp2+Bknjko5dEWD6JR5JjW02Djg\\\/VcrJ41+ukhvcqr9BdVFQM\\\/cDFH3z1iC6IcuKgDZg8y94t5FOxdvg8X2F0ji+1whxv2c+kcnhJ56djeMXzB3qM7ikYf2R\\\/pfWlv5vt8oP+xc9Y3SEv\\\/I2++Teouf0RWHb5yGtBvAdv6r4B+BS9\\\/0WLDlhSPdqTkiCe4wLKN3yY\\\/at5uOSGcEE9Ib1p0lpAz6OXsujiTVynCJYZ1+D6DnGu7ia+QKgzzzQ\\\/jR\\\/SPGF4kfcZfGN4wv6V8xP1G9yvTb5XP9DabKHKSrNNhUdQJPAe60QIibsIWi0kxgIYgJgNnVPSihVj0yqvoVR1R0pDOgZCOI6ZXwfFNM3IOo5HT68AdIqJiAhQi\\\/XQbtk0y3W5M0VuqRd3tIX0fjn8xJM4Q17KDwONCZpW7naRMh4lOsq46FftxG4VWv9d9XvlMuXieHVW5CjH27iwGoMrYD2KCFstGmQFHu0NA0TToNfea3YlBAzuIkxg0priCHFz0GfxihW0ZxgVxii+oCyUMHsqpYD4AdXDBqy1w0VeSxdS\\\/5dKxBd8VefT3Tw1PyEk79H7kAXzPxx+VRL4iGTjy74l5NxRcjhj7f4knV0QqqSbPAP69C\\\/wz400hk62PvC4TGx5hc9Etjl+GdBDB1yexDY+TockQySQZulwliIP6SXgCmSBP0k1XFuI5ZI68QDdDacI1pAYModtwl3yb7h68Xr5b9298kR5FD+BMOVsXlJ+W38cSndWLSlwhAWTq6M+v0sEgICU6PZH1+jRMQHEQTM9sk2ohWxJFfbUJmbLNetKHLb2gPASRvovLQVKKaacZI3PIXGVea75gFsxdSH87xvsRno5aUZS6rBaly0dZd3WDg+4GnmM7rbGj7Z\\\/BGvkZ26SPnalRzKeytTNU4G7EjlEdzsQBmVpVGllkSiR4OvkiJQ+lkXYEsr0CVzLZk4F\\\/FvaSVAu+fDE+qJOd8aPpMnDQRZP+FdI7g8QBl9d5lbMFReCka+9RRxb44jLI7s75kelcbf8rrSuX4D89yMnig8v7b7lN91g0qq3Ews9IAI0EdkroOvQ7hFBiyEJwG9gUnmSrdSwmRD1KUlAmXfsqi4rAbhvNXyItws\\\/YVtyNIT\\\/iiFQK6h+JksATDty0Un4Hx35lfD97qyQg+hMnWfux8sXK8v5L\\\/QMKlcKfWuTajxbob49HHz96nL\\\/0NvsFsvavzciv\\\/jx19KK9iyyl\\\/5DjZfafY578Y3oWDQ+PPviLb\\\/f31ysl8lR41A3+5zS4S9dHpqFxCvp2f6RAKYmlX\\\/2Uikj7nz9SIlpOnkOrYtdYSDvGd6K5cJ2FqxSueXB5Y2nlcFXDNZs+Q9mjEC4Q5kX7hXlom\\\/AaqoPrCf6PaI8YRM0Q3w1lXuYRKqb5UHab+Bx6BNJ3wfNCKJcHoQ7CTMibDNcGKDsDwglwTYG6dghvgGsjfg1tgrxNEN4JbWykaXCNpyGMez3kjYHyqfB8J7QvwrMFrgz6DPmjY\\\/Nu0i4C2o38EOTXBtd8uH5ITxyANTIDIXE7UOUvQM4EhPRLEDLsRsgI6aaT0CRYLJbFCClzELL2ImQ7hpD9A4QcJxCKK0TIuRkhlwrXWwi5oV2vE646hBJSAFifIJTcBtc5BCY5QimgP\\\/xfI5SWhFBgPELpK2C40EfmcTC0chDKgXZyTiE0\\\/FWEcmEceY8glA\\\/m8AhIK7iIUCH0Xwx1i6GNUZcQug7SRkPamC64nqf\\\/y49xvRRuY1ANwJAgBeWiG+jvYPT9AF8CuRO4aYj+Xox+IuzOMfzo8fWxOEFm4ZNYnEO3CCdicX5IGQG5hb\\\/E4iIyi0mxuIROiTmxuIwC0qpYXIc2m3bH4nr+JOuZxg1osXl4LG5EdeatsbhJ7BUvxOJmtNB8aRDPayyzBjEvWP4aixMk2cbG4hzKtY2IxfkhZQRktE2KxUUoXx2LS2ixrSEWl5HdrsTiOlTmTI3F9aTa8qtY3IDynY2D\\\/7GwwLk9FjdxC2xvxOJmNNxJ\\\/wcB5inVjc7LLM444jKwuEjTXfEsLrH0dBaXWbyYxXUxHmlxjUdaXOORFtd4pMX5IWU0HmlxjUdaXOORFtd4pMU1HmlxjUdaXOORFtd4pMU1HmlxjUc0rh8yXwOby0QWNw5JN7O538TiCp2Lq57F7RC3ubpZ3DGkfBxtJxZ3Dkn3sLobWTye9aW1mTikTPKQeCor\\\/xCLZ7H4Uyw+jMUP0Lg8ZPzykL6MQ9KNA3OZg1aiNhRGdaga5C2MVLQXrjmogcXLYUFogasrVkpF4+CpA+L0Xg3pjayECilNUH84xMaz9Or\\\/x5ZyB0emotmQ04S6B8t0QtokCLX+8lEQvnloWCw2gqWOhRpNEM6COvUwhi5Waxa01wlXB1oG91o2hhbIC6PmwZF0QL8qlKqO9aSVbwQKqVCD1qcttqAc1gvNqWY91cTaqoYUrWYza5HOoAFG38xabIScLla6gfVFqd4V66GTzbCG1e1i+S2sFRrSMbWyMTTG5tLG2qYjqmGj6mS90RxavpaF2vi7WW8q62HoqBpZ+12Q38Kel7O2G2K9h2NlW1lbWt8D6U2s7a4YRWrgSaPMd8t1QZthRpVGCLW2a2Ip3YzSlFdXUdLK+NLBKNrE6tORUnQ0x2oN9FDD6i+L9doYmynN06h5lQp1UJK2pqVepWtjjLqtsZk0svLd7OkqVzsZYpvY6P4zJgYkp3NwLjSvmbV3tY0O6GdpbLTVMfrXMEyrMdwP0KyW9V3PUrX6yyGnMcZDWqYJeK9hpBXu9ZC3LEZtrYWrslzNeKWhQ2U0rInNv5FxrYmVaWNypqGxhdXUZjIU3Y2DyFIhf0WMM81sNBSbGt86Y5LcNDiOZvZ0Fb1d39E3nd+ZX02sj8WshW5G6dprsBlG7ZA+QNlu9h9aB2ZYx7CtMgysYLTtZLjrYtyoH+Q6Hbsm71SWcgalqTOGsqv6SMttZhypRrey+tqoabs1LPcq0rTeaxm12piUrBycxUDftP5yll\\\/NKNER64PKkEbFLlZ\\\/YMQDrbcxDDUzHTowtuHf06sl13CN6rt6hn\\\/K3RI0L9bfgK6lunIU3FXwC8sZDzqYPGhylDmkrXLA9dWnHzOcd8Tkvpm1vnSQx\\\/+3Ol\\\/jS31ME4Zj+u2qntJanQvrgYpmsPoqCrD+yuE+HfquY8gdoBjFZiejdkOsteFoGpSbA6vHBLjGwYxofDqk0voT4D6VpZdBymy4UxmYCFQsg285S52DTOw\\\/oOjZLBtjcvjdNXQgXRuxxrm2GG+vysL36aOtea1Agw6GjgZWemA+A5p\\\/AE+LWe5KKN892GfNoA7VaNfN6l7VfeGYdFANdVVfa3qiMaabO2O6o561Eh7UvZS2FbHeqBZZFtPZiwdXPa3Prv+GMgPYWj6oBcMxyQ4Pyk4H01NdMb1RF8P9f6LXgLRTioWHtHJVW3y\\\/v9oYviiWFzMNrI16cYwzLbGW\\\/xOH0tmsrqWUpvm\\\/j4rv9zygQ6m2rGYWTTX02hSjdmdMV\\\/1XfQ9n2G8Zos9Xfo8X4Zg1M1RytFWimo2ojVGWrluNTN7+Z56rMSy2DNGhA\\\/1S6a9llG4cslp1DLG4cgZLdwzB7VUb4b+nFB1dM2t\\\/AFet17S3nPF\\\/KePmUG0yoIevlmyFspqe6WYUp+03DM5HG9dQdDfHNLdGf02q2mL4uKrhr8XQfzejq\\\/iYxOb+fc4N2Hh0bQvHLEFtNppdWcO42vIdHnR8h95XW6bza2WavzamV5cxG2w5GmrF\\\/c\\\/cH2hPk8lwzNa4dkUeaO\\\/7fNSoddUyrmFtfl+OBzhW\\\/R1a1\\\/0fjfYqlb\\\/fw7V2xbUjCses5S5YIQdaoKvMWEgdhujaOAoVomJYD1W458PTMPA3CuHKQ9TnnIumxErmsf+WXghfLV6MCuCitUaiIvBN6EVbb2A2SRv0lwvf5ew7nK3t10p8DdN8\\\/9U6QWPjmXQuH8SFtgo2xrQtHdMspqG1NXRazM5qjVnwVD61lbSD5TQyDsyG+9V1g6KKelbUTvg\\\/G3cuK98MfeXCvYtpCMqrXLb2LGIo0eyJ4YMl\\\/\\\/\\\/2sJzZAFrZ8P+XXgbycr+Dx8G256xsC9dV14TVveqchrBa3trS2gVJ6rjWjrbWjuquxtYWta2pZrg6vrqr+n8olEsbU2e3NnXTlE51UgvUyw8G84bBbcRwdWxTkzqrsb6hq1OdFe4MdywL145rbekKN9NGOlaqndVQCdIb69TacGdjfUuOOrajsbpJrYFS1Y2Q2dzaEVYbupurWxo7u9SahuqO6pouqNDZ1VjTqXY1VLeokLdSba1TG6GXto5wbbgm3NnZ2tGpVrfUqtXQfndNg9oYa6qxRe3qbgmryxu7GqB6GFJba2ltGm+qhj6gfjUMZiCta3m4pasxDKVrINLdsXK4ykjSuizcUQ3T6+oIV3c1QxatUNMNU+yknXW21sEw2RDqupuaIMrGCt03t0InjS213Z1dbKqdXSubwkMpQZnTSXsJdzQ3trASHa1LodlqGH9NN3TUwkZW21hd30rzlzc0wgwbwk1tQJFWtb5xWZgVYFyuVpuAHGpzGGjX0lgDxavb2sJAxpaaMHSikbuREksNr4DJNIebVqowt05gchNto7mxiZG3K4abzlh\\\/NVBjcVjt7gzXatQMt3fTwXbXUPqrda0wZWgRJtXV1dhST6feEQa+d3XmUDZ1AskYjuCxubq++tbGFmg63FWToxENqtc2drY1Va+kXdDaLeHlnW3VbTA0KFILQ+xq7KQN0+JtHa3Nray14QNYLdGmNitc391U3VEyD+pR1I4YPmqEmlHeWNPRSnmUyUqVz2HBHnVOB\\\/C+ubpjKZ3xf4d8mEs9gDAMeGOYgqJzZ6szqrvUgDqnXJ1eVzecDSzc1Ble3gDFhk+bPmfShEnjxs6ZNH2aOn2COnXSuLJps8vUsRNnlZWVl02bY9Kb9HMagBUDlKZsoQ3D5GDWXYwLg+MByWut76hua1jJ+qHgp3RavFJd2dpNa9ZQhMLoultqGfoAEwAohmvARCOgGYpX13eEwxS9w9UKqNZQDdBpXUxFD2p2XTMYSq3lFIJhYHaYcqcjXNMF2KgD2l8dF2V7a32YFWGwGKwH7ATEL+7ugqZhmK0ghUMmlN45MCgA\\\/yApBitThKrLqpu6qxcDKqs7AVVDaw9X57YwnK8cmAXMKcYcEIlqtbMtXNNY11jz\\\/ZmrQMUWhlBat7q2tpHyGJDTwRRXDk3uYLRlGuE7g2pqbG6kE4JOWLnlrR1LOzVgMwyzxNblgJnuxU2NnQ20H2hLI3czgBvGD6xqW6lqgI9R6NqOGD0m1V2dHNV47d3hTtYN6MqacEdLbAYdsXGzwp0Nrd1NtYDVZY3h5ZqK+970aTngZBi0Ru1VtTg4RxgWU8Y1XVd5TCdWHRt13X9ulg15sEJMV8Qagn6qu0pogbmzx6rD1IxRhcWZanH+qGF5hXl5Ot3cKZCYl59fWAj34oJitXhkUbAoaNI3dHW1leTmLl++fHjzAONrWpuHykRYHd9RvZzSAkQQBgUtzWpdDBI6DXRWKyj4HCqkHY01jf+rsauNaes6w+ec69oXKMF4qWHl4mvH+GbBaZy6tOYjwdeuPdJaEySwDGcsQIKlLE2WqIYgTVpyIy3Soq6haqVsy6SR9cdUrat6bU\\\/UQCuY2LqVdUu1ZUxKv5JuP5YfHU1\\\/rMsv7znnXmhQU6338rzve973OR\\\/33A+fy732GfX3j4pzI49PrPbo55QdOTJ+\\\/Fjk+DifcSlyPD88yq8TO7jzC2aYzB2DN\\\/f\\\/s\\\/BUxO5HwcZg6IS4DeYDkO+IgS5uAWktPsyPIn1TDAXW4v1isMiHRHzQMiZdkgrSa9ICMCvNSb+6o6xRMTBYS98QZec21JXbUJooz+FzPOjIOHocuyE7wB4Vt4hj9nDkCDXpzyUihnj8nzBPiuEZL2P9ORipbOW\\\/vPHZJREkdVIDWQUqgERUyAjQCwwDU8A04BQ87jkBnAEWgI9ERJcais8+pJehnhKqdPRYVCRHreTQt0Sy9I2spb+219Kpxyxap0V7sM1y70haeut2S3tCUYPr6troYsIreclbEn9wcRKSst+SOkqJSi5L9xETYJLT9uiSp9SiRacXJAehEn+OPUbUyqJEi7X10UQ1q7BV4iEq+zf70IqwD0ub6qPTicfZB+RlYAGQ2AdYb7Ab5Ay7zt9wgYwD08ACcAVYBZzsOtb3sb7H3gPrXRIB4sAwMA0sAKuAi70L6Wbv8CdpQnI7DjD2DqSbvY3Nehuyjl2DdY1dQ9P+Wox1RGeFEY7YhhqyjYYm2\\\/B4o2X2l+LtbWqZ\\\/aPkD6uXEzvZVWICDJVdReFXiR\\\/oA0aAk4AT1gqsFWIAzwCXARNwIs8K8qwgzzLwJrBCdgI60AfI7K0iqimzK0UtqSa87M\\\/s96QBnfon9geh32SvC\\\/1H9juh34D2QS+z14s+lSRqECfI44Z2Q0cQv4f9ptTiUSuJeraA7lEhI0Ac6AWGgSnAyRbYluKY6kEh82RZJmAWyU2hf0Gel4l+VNW1R3GM+bnQOnfDgpj2T2tM1y7+BEkutAvPwuJC+\\\/4PYXGhffcsLC60Y6dgcaGNHYXFhXZgGBYXWu8ALIgy+9krLVvVWO8T1J+oY5PopUn00iR6aZI42CRfyW0Hb9tPi62tKp+SILytVTXmqPEqNfZR43lq5KhxmhpnqbGLGgepEaaGQg0fNXRqzNN2dIVB9V9vSHbojdRYpsZL1MhTQ6NGiBot1PDTmF5mgeJjDwmVFqqU4OcV9O7uaB3aGECPBnBYB3DaL0BeASoipYPk32KRv+zjekupNW6ld3RGTyT2sCVkXMJuWCLvAw7soCUcRksohL9GUgcZB4aBRWAVqABOsLeg4VNC1kFGgDgwDJwBVgGnaM4qwMgJu4kvi4ZF7Eb38hRbwspn5QqwgN7sVtxh9x5pSqF1Ptrrq\\\/hYjHi9uMR56uX6Mq2d+aT2v5\\\/UkqpEFbvApkgzdsQztp4q3m5Wy\\\/THRW1eTdxHf0R8Dhx1tINoNATdTvIi\\\/TBRZK7biMJehI4Wlf0q\\\/2KVtl2do5t4rhn1tvJP9aZSZjD\\\/pcyrf\\\/eXHbSo\\\/g2eF2fUq8p59Y1IWYbnVa1Moeb8gjqrtKsvLQvqWQQuFdXTXM2o31N61CcUEchZgYN5pPQ6dZ92QN2D8lLKIVXPo8wZNa4cVHdZrId5nhl1J5oQtsxWNHabIioN+kSBX4+V6RF9u+uia9DV63rEFXVtdwVcqqvZ1eTaLHtkt7xJvleulmXZKTtkJhN5M\\\/8iYpi\\\/mLDZ6ebKKX7TySFsN+OSifcWCKMyI48T80tShmX6kzRjLh4mmUN+8z\\\/9wTKt3nvAvCeYpKYnQzIDSbM9nCm7KvvMWDhjuvq+OVig9EIWXpP9oEzJwGCZVrjrXBOfUmiWUFp\\\/7ukmrr9y7ulsljR6T8Ub457u+o6vpu4iRmx5xy9YNW6wm82Lmf5B85fNWTPKjUpzNmM+x+ccmqUf04\\\/SqVl6i6vs4KzUTT9O7+N+qTuVzWbKdL\\\/gET+9BR6OmFuCJ\\\/uIn\\\/OIX\\\/ZZvEsWL4T84LVwBV5VFQkJXqiqSvAclPMK+ZZ0qtDSIjgNfpIXnHyD\\\/07OcgicUEhwvAZZFpxlr8E5ZregKAooPkVQ6P1EERSF3i8o+z+lRGzK+XXKeVGTRD\\\/lKBan9voap\\\/Y6OOEvuuSS4TAtdWUPD\\\/H5mkaC6RwwYj516kijaRzy+wuHs\\\/ZETtrIIdzhQo\\\/mzGwwlzIPB1P+QtfQXcJDPNwVTBXIUHpgsDCk51LFLr0rHRxNZUs9fW2xDXWdX6+rre8uhfXxwtp4XT2xu4RjPNzD64rxumK8rh69R9RFxDHeN1iQSTL76JClS6ymGsfrSFMgm\\\/S6T3aLg7cr0Hi6aQ4DkhdITThr3htMmrUADz2QeCDBQzineGgTn5TLDjWe7go0zdEX7JAb7vpgkoTHJ\\\/ITpDH97ZT1l8cC1\\\/gE73BLhvOftyCWNvXRVH6ckIzZ2p8x43sPDBZcLnhH+CaZnWu+mpp0ubJoOXfA2cmdkrRO5L5d3FdVZRM\\\/u\\\/8nbC3ehjTYfInqPjpO8lnJ9GUGGC4FA\\\/bsR3MYLvGPh3wWG5inYZpfK0M0257mhvDtXcP4hG3Z\\\/TBuaysXsuTXumN9QR5cqv4HG0T+rwplbmRzdHJlYW0KZW5kb2JqCgoxNSAwIG9iagoyMDQ1MQplbmRvYmoKCjEyIDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1RydWVUeXBlCi9CYXNlRm9udCAvUFhBQUFCK0FyaWFsLUJvbGRNVAovRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKL0ZpcnN0Q2hhciAzMgovTGFzdENoYXIgMjU1Ci9XaWR0aHMgWzI3NyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAzMzMgMjc3IDAgNTU2IDU1NiAwIDU1NiAwIDU1NiAwIDAgMCAwIDMzMyAwIDAgMCAwIDAgMCA3MjIgNzIyIDcyMiAwIDY2NiA2MTAgNzc3IDcyMiAyNzcgMCA3MjIgNjEwIDgzMyA3MjIgMCA2NjYgMCA3MjIgNjY2IDYxMCAwIDAgOTQzIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA2MTAgNTU2IDAgNTU2IDMzMyA2MTAgNjEwIDI3NyAwIDU1NiAyNzcgMCA2MTAgNjEwIDYxMCAwIDM4OSA1NTYgMzMzIDYxMCA1NTYgMCA1NTYgMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMF0KL0ZvbnREZXNjcmlwdG9yIDE2IDAgUj4+CmVuZG9iagoKMTYgMCBvYmoKPDwvVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9BcmlhbC1Cb2xkTVQKL0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMQovSXRhbGljQW5nbGUgMAovU3RlbVYgMAovQ2FwSGVpZ2h0IDAKL0ZsYWdzIDMyCi9Gb250QkJveCBbLTYyNyAtMzc2IDIwMzMgMTA0N10KL0ZvbnRGaWxlMiAxNyAwIFI+PgplbmRvYmoKCjE3IDAgb2JqCjw8L0xlbmd0aCAxOCAwIFIKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aDEgMjkwODg+PgpzdHJlYW0KeJy9vQl8VcX1OD4zd3v3vv3l5W1JePflZSMve14IgWhuIIlABCIgJmokIXmQKCQhC4utElcEXLDuS0tqK1q15ZEoBoSvuNSl\\\/fYr1qVoa0tbrEul8u3XrUpe\\\/mfm3oREbfv\\\/\\\/n7\\\/zz+PmTl35pyZM+ecOXNm3k1AGCFkQYOIQ1rb+taemRbXb6HmPxHCrraN\\\/erfjt1O4eMISbPX9Kxd\\\/wD3NzdCsg8h4Zy167asKb7QtQIhWwtCpf0dsdb2X9xinoVQ9evQx6wOqHA9Z\\\/kvhOZZ4DmjY33\\\/5ldvT5oDz0XwPLquu60V8XPOhef34fnQ+tbNPZLT+QlC838Mz2pX6\\\/rYLzsTv4Pn5xFKW9rT3dc\\\/not+g1Crm7b39MZ6fuS5Ohmeowg51kEdRnQ+dEYIi+jf\\\/uCpD4RDvIBEJNEHk14nK2ZksdrsDuR0JblRMvJ4Yer+SZpASipKmxFUQyg9jDIys1B2zszcCMpD+f9+8P9ffoSDKJWlh1Aqn4VSERo\\\/MZESneMnaBstyYcgjTQ9GT\\\/D6DH0G5yDVTSCv0Re9AX242K0EPHoc7CWvWgM3YHcaAW6E7tQBvKg89FCzANOBN2I7xvfOP4BOgt9Dz0w\\\/iS+evwRaL8FvYC+AA5+z2NUjpYA\\\/vkohj7g3kVN4\\\/eCwLchM5qLlmEPakVvwudT4OE2dDv6D\\\/zd8S9gVDe6GvqrRNWoevyZ8dMoF93I7xKOyU+gW9FTWBxvG+9EM1A62kEi42+O\\\/wFloSb0I\\\/QY8BTBR\\\/gFKIQuQ9ehu7GfewGgO9CPUQJbSDM3X3gaRlqIVqIutAntQI+gX2AXbhCOCafGvzP+HlhEEsoBnjrRB7gMLyYP8pbxs8ffRhehA+glmC\\\/9HOEv4h8SLkpUjX9\\\/\\\/Fkwkyexgg\\\/hZ4QS4eaxq8Z\\\/OP4zsMgsVAwSWQLjrEbXoGfQy+i\\\/0d\\\/J1vGtaAFaDiP\\\/HKdhFWeBxN8kfnIluZJ7DRXAbJuB2wG0G8VBIwfRU+gwyOa36Dh6F7txCl6EV+Nb8d+JhbSTV7j7uMe513nM\\\/wTkHUaZIKN+9CDaD+v5V+gVLED\\\/RbgBX4q78V34+\\\/g4iZOPyOe8ib+G\\\/4ofE7ISxxNfjS8Z\\\/xT5UACdiy5HW0G2P0Ij6HH0X+gN9Hf0P+gz7MCzcQf+IY7j4\\\/gjIpN0spT0kDvJg+Sn3BLuVu4Zvoyfx1\\\/G\\\/4p\\\/W7he2Cm1SonTexK3JX6aeHX8yfFXwXZs0H8WqgOJXgVW8SB6Gr0Gvb+F3kF\\\/ovYD\\\/c\\\/FF+JLYJQ+fAO+Hf8U\\\/xy\\\/ij+EWSL2SSdzSQ2M2k16QU5Xk9vI7TD6K\\\/A5St4m75C\\\/kk85gUvnZnEbuB9ycW6UO8r9hXfwWXwBX8wv5S\\\/kx0EzJcI5wnLhYeFR4VnhlFgptos94vvS1dK1pv8cyx37fQIlOhLxxAjYrgks6XKQxA\\\/QA2D3j4MOfgES\\\/S\\\/g+Dj6BLQQwCGcDXxX4DpcjxfjC\\\/DFOIavxtvw9\\\/Dd+D78AP4ZzADmQCTgPUKqyXLSSmLkWrKN3EQeh89B8jJ5kxwjJ4FzLxfmIlwxt5C7kLuI64I59HNXcteCZG\\\/lHuFe4V7j3uPe506C1rz8DH6Av5y\\\/h3+If5x\\\/VThXWA+fB4SnhSPCq8Jp4bRIxICYKhaKl4oPi3+SRGmW1CBtl16X\\\/sfUg1NxLnCuTvUWxA9rcAZ5hLj5rfgkVKRhHtlh5hHQw3JYFf+DqrgE6MVG24G3ZOLnkyilqPFxoO\\\/HT6Ey\\\/HO0VSQcOFf+OBrGvyPH+efIWegN3IL9\\\/ENcl\\\/ALEkKPgjfaRQ6Rp\\\/A89DipJCvJ\\\/RzC7+KH0btg75vR7fgy3IcexSfxHHwFLsdb0evEwy3H16LK8QcIj2W8EJ9CwAG6im9Hl\\\/xrL4gr0O\\\/QB4kf8Fb+u+CfRtGdoNHH0B\\\/wT9CXWBj\\\/CLwbB94IdiN0I9j7dYh6vWZYZ1thPfrBg6wTX0GP0x1FKhfP5i9Hp9A\\\/0AfCQbCoeeBJ30t08j\\\/g\\\/zxePp4PKwxWGXoY1l0HOgdWzLtgJYfhmT5dDCtdAV9SAqu6AV2I2tEV4PVuHY+P3z9+zfiW8W70S6D9EufhL\\\/EQrIhRoKhEL8HnFvQW3gnr8Jz\\\/s10g0Y6OoA+xD2fiElgPJ4WNwi7hEeFx4T+EX4nFIO1r0X1g0X8Ca1ZgBm3oVfQh+hybQDd+2MyiwO9s4L0RrSNN3GE0HwdQD6zZHPDj84yZ9EEvV4P07of1fBjWxinwExej\\\/0DHMMFemFEbjG+CfupBzqsAew9o8Bo8AjXt4LVz0V9h3jY8m\\\/TDeBr0dCd4rSPA0+\\\/QX0Da44yvPPALNXgl9PU5ugC1wwizUAPeh+rG94OnWoJquP8EeWdgB5qH0\\\/GPga4FVqgNpaEK4c+YoLzEkvHZpJM7DHvMONQPwe6Vgs7CG4ALO8xjDCXjpagssQzlaZpWdfZZlXPnVMwuL4uWlhQXFRbk50VyZ+ZkZ2VmhNNDanBGWmpKwO\\\/zepLdSS6nw26zWsyKbJJEgecIRnm14boWNZ7VEuezwgsW5NPncCtUtE6paImrUFU3HSeutjA0dTqmBphrvoap6ZjaJCZ2qJWoMj9PrQ2r8V\\\/VhNVRfOF5jQDfVBNuUuMnGbyYwbsYbAU4FAICtdbXUaPGcYtaG6\\\/b2LGjtqUGuttnVuaH58eU\\\/Dy0TzEDaAYo7g337MPeszEDiLd2zj6CTFZgKh4I19TG\\\/eEaykGcy6xtbY83nNdYW5MSCjXl58Xx\\\/Lbw6jgKz4vbIwwFzWfDxMX5cYkNo3bS2aCd6r68IztuHHWg1S0RS3u4vfXixjjX2kTHcEZg3Jq49\\\/ITvjOP0LlrfuO2qa0p3I5aX6dKH3fs2KbGj5zXOLU1RPOmJugDaElmXcuOOhj6RhBi\\\/XIVRiPXNTXG8XUwpEpnQmelzy8WrqU1LZeqcTk8L9yx49IWUE1gRxwt2xIaDgS0A+PHUaBW3bGiMRyKV6WEm1prUve50Y5lW0b8muqf3pKft8\\\/h1AW7z2Y3AIt1KhCbbGMQQ6dQ\\\/bJJyWLKUXghGERcbVOBk8YwzGk2zWKz0Y622YAGP00YqOLtoJHOuDy\\\/ZYdjDq2n9HEh0xFWd3yKwALCJz+aXtNq1IiZjk8RBamdTJoatE\\\/A8UgknptLTUSaDzoFHs9mz2X5eRtHyaxwj0OFAsSHGkC2rU1zCkH8oRBV8M5RDa2Gh\\\/jgeY36s4pWpwwjrTDSFCcttOXIREvy+bRlcKJlkrwlDJb8OAvrk+OmrMl\\\/docnqbZjThx7\\\/kVzTG+vXx6uP+\\\/CRrV2R4sh2\\\/oV05709tmTbQYUT5rfyKUQAyIpHGsFo7x4Epk+NFrifCb8E5lRt8c5MEpWgdW6uKNlgZ43KaHQP6UZlUxTiEbHT1EqVpwhM7iMz4lMf5477Xkad5YdHPDLZ5H6FRfu2KFMa6sDB7RjR11YrdvRsqN1dHxwdVh1hHccIA+Rh3b01LZMKHR0\\\/ODOlHjdjU0wiQ48B05BhEpbgA\\\/ssBKa9zjBCVEaJVVaEhL4BIcUiU9g5DeJQoJwh3AWkiGw9CFfxPFZ5VjlEscnlYvHKlEVwI7TkBUXhZwhZyZkGDbr0yp35LQmoK+Qyh+hx7lqvI10kiEYq0QLFWENNp9yGNnBqVwRx3M1ggOpqAia\\\/fyD63yRJY4TzYsdf2lGhSebi4uSoOdqkgNhmz\\\/xHu3tNsgew35Az9CSyWykkCw7CrIeeOhh7UbawyfNi8dQ1eKTxUWlQH8bPQ5QaoJWjr\\\/H24QjsM+o6DatfrNyg\\\/IQfkR6RH7I9qT8kmxa6WzyNAVWBtc6OzwdgbVBUwWpEGfJs6wLyUKxVq6zPiT\\\/krwsPi8\\\/b32L\\\/FZ8XX7d6nT4VB\\\/xjY4f0TJdnqhvj8katBfaiV2DJ\\\/seJKQdWwrRfyDdfczsD732LONv8ckljs82LD6Jqk5GNtBUXISbUXMzLvF6nA5JDKcjp6N8ljddlESnw+MpLZlVPsvpyMoiJW9svmXXpjfeTHwJeWmDJy26tFQvhCN3P55YlWjZfyeEYXvwD\\\/bf+UH1ivUJ+HlGq16xDsROnqkGCT4Aws8CGchopSZfRr5DdhKO8KN45sgqAQuj5JInTbKAkUWGE1wjyAyTZs0qID7Iq3yc53m\\\/chA\\\/BLGQLujKxdQmwBiqKj9pPllRXISaQyGnKJXNyigv5bIS7937ahcmRSf48K7a8YyXr6c6XAxaSAEOZqJXtcKbPDd5X07mvpO6M5Xs4X4iPOTezx0U9rvf9r3jN3ncOKRYEY+9SZ5Q0OqwKKM4Q5M16y1WYrVizygmmj2YVJhEkqi4k\\\/akCHgUr3zCAbzCnEAnJVDN78m2xi1HLMRi8TiObQ3eEtwd3Bt8OigEj0vHlmbgjEDEc8y7CR9D\\\/txJBX1iqAhm5awobEZVY5ENJ1hGH09ip6vCWYFozv6BAjc0gwqTMpm2yqJZ4XSp3KMDopR5NiktoWGJ5IEMhdMzFmOHtfe8Czb1LptVH+zd3LhwwRpzYixl\\\/XNbXrli7WtX3pX4y69fTHyJrwt1dF3bc+l3k9\\\/lOi9Y1Njeknfd7ouuXXfDM30ph657JnHqXZDnRSDPMmEPnAwc2kyTTbWUu2pdC\\\/33WH9gu8v1tk12OZNcIWfYdZ0L1IitisVidTmdo2RI89isbpvN6lLc9BSqYa4B7wJDmSbCJ5kEU6yWUXKhZg0qhQpRqLCVPW4qYLPbE1XdRW7NzblH8aOa2+kMOgodpNBR5Vjq4BwU1UHHSrLbbbzdASI\\\/6sWaF3sDQdsoDmku6yZ86CjCGpyn91I3MOO1A\\\/gcw7yoAk6AIhhAzcwxFmneUAkVkUl9NG8A+W8TCiK2KxzP40mlMI1MU0d2EvgoaVZpCQI9wBrLuAj7LBsXN16+pXVLy4ld5L2xv+VdsvopzHfekvjlOMJb0lZ137Jr27bLQuSrxD\\\/+UZg49dYTNz\\\/7NqyJl8GM\\\/wSnJeo\\\/C7QUbjYWxdm8Iu\\\/lCBGzsCoUCUTYa\\\/rVo9RnNlNHWfkZrPWqk7pHw5Bepj4J+zkrLU\\\/\\\/z4SHop75aeEg9KvgkgNIGj+myeUVUTEHMonKW84pi4oaZPB0TGsIZUMbZDNRLp8r5CiFltmoXKiyXIouJTFujdBhWqu8z9kXiZiYZMwpssxLMoYjjeSGk5Mo87wqiG5BEE2KFkg7W2EqDaRFlUzCcSIvj+JDmk2UiMDzGJksXm8AjZJWzRzE7OJiEHN4lMCSDMq4SB6UiXyQZCAeMGQVvInffEnbhEP2gxJBob6xJbWxmr+AKkEoVZWLT4KqCivHIpFKqsJtVzy\\\/rcBHC8lRWbnt+edBi\\\/Vx8\\\/L6+AzYKg8gbjwxbOKVg+MJEM3pfSI\\\/m\\\/40gaYj7CcU4uCDQ0kcJzyd+I\\\/Bsf1bEi+Qubgi9xcv4MWJEeHg6R1EHTsOmrsTJL0aJJ0Ee0EeOqZVbcrFHbbNuX\\\/hP+N5OZQsizl5oUyPK5i8NJkUJe9NJsnJ7nB6pivJpLozMSIp2T3iIBzn63Oy91qwBSQ3IpujsExuhH2uQCtoKGgp6CkYLNhVMFRgUguKCkiBO11FalIRuKtRsnMkv3j5hBMdq1zsaN7wWUR3OGxvpYm6mg0QbBxAyeODw2kVyTDIcIAWg\\\/uSKmC+TYBEXRHSDV4XlR1EtU9RQSzUIYVKZpBkt8gcjwj7iRDCztKS8ll0UWRnhTlnyHjICt9JFv3s0W0Xdq+6flfzDzcuSrybsOKcZ3+ae+4F9YvyXn0Eu4Yi85ZrW34hHEy7+J5Vax+LZB\\\/a2n54g9VE+BcSPxXkC86pOV8Wxg4kNsuW5iXzLs6l3r51\\\/D3hEuE1FECva4uvl7e7t3t2o7vFF+XXudfNn3JyppxjybHOdM\\\/0DAgD8vWCSUqSvN4kr3cmyeUyBSlHqMJL8T3CXfLL3M\\\/NEl7moHffp2CtUIk7fVFWKlYo8YWa15fPm2yazRW11a+y46V2bNeSfVH7KM7R0l35Cmf\\\/2LYSfYygS4IDRak4NTl7SMJ2KSgVSRxEQTeOpFy5fNL5LHE0f9ZMNwPw\\\/5+A5zkRoSUF6E6Hm2HLFkQ+rMJ2jUKq1+MVsqi\\\/hz0bvA5fhYPzEr\\\/6KPG7xA34chzF1ofbSxK\\\/DTy48Ue\\\/fGlo4yMk5aJTH+Bb8IW4C9+x+5J4Xe+1Hya+THz40Z1UbncgxJ8C+zSjXdpZJoGXTJmiKyjgImEvOBdB5vhM2NIVOdOM4IBbz5EFCjJjc0C1Flk1K2flZRXTsAjkBLZmmWprbFaViz+p\\\/KTyW0xNABtLqxDAxsDUhGmmxgmwKllUlRwy0h181ekPyPExlSsVDn6ReOrzxIbPgfu7gPtrgXsZ9WpVwL0oZEqqqcj0tOkPJr7QtMtETCakT0EG\\\/qvEpbCSlnEQm5KAai4yE\\\/N0\\\/pVv479ZDzzGKl2U+W\\\/j7y7u5Nhc0j52P+XtwS\\\/GbqWSXQ0WeRgsUoVVXzd7Rv2MldJG00bLdaZrLdd5r02RRa+Y4vK6UnKcOb6cQM4M0wLzRfwK+ULzpfx3+Mt9\\\/YH9tv2OF60vOH7jeM9h41JFlZqgFgxUBKF3mBL2pOaLsotaoat+aRJOoiaYRE0w15Nv5xD4Tv8qqM52rSRBVeVgyulF6STdnz2kYLsSVIoUTqGmGLpy9zRTpJN3fHJyA\\\/OZukmCRdIApXJsQ6SSOQFmlrgMgjAetjhSFnWVzypVecMykx0uGkyWcVXkyubE7if+knjksSMHbvo1duLSvMTbwUcHn333\\\/UPNT80nKZ+PjV64\\\/Rm89rV3cfuqhe\\\/+onzdFZ\\\/9PfFV4quF0YMwT+o\\\/c5l9\\\/kjLlHlB4YisZPKuvRzmOCQKAqhSMpnAOgWTKr4iYVhcO7V0zdpgbbFyPdZBK6GmOmQ9YuWtxKwr+wg4Zt1cB6a7xt7Pmo1TB9s2IKM6Z\\\/bKMXvldNdIi6\\\/Z64RJTH7uxDmkBuckjo0dEg6OPU2qv6wjV41thTndCObxOMyJQ91sHYyURKMCdS\\\/hTFZqVW5vFAma0CAMCscFISi0CD3CKYEfFGh8zSET4d6C01UcwQ5zhDopOqmj8MSjLr54Qpm9xlSqKmncv6EXuKX83YhzhINf1gEf94Bsn6OyxVu0gEnELpeiCBzheHDgsiKbFEE2yYppFD+pRSTRLUkiRzdyBTZyRZFh41Y4mTOZARv2bWAMmc0mycSPkvZhYYEJCs0lMUdBJiU\\\/4SbazsjdT03Op3u\\\/SbH7Qe6w43grECTYsn0RHsIuBpgoYHJUmp7naA6TQ\\\/MbNX+WmC3v4u8Wh+D4cISXrhUf5t\\\/nPxMgthg\\\/PlK+LCpTwWYAkCmepfRz13P3cPfI9yqPcAe5lznlGe4od1rhzlLmcaQXtnkc2dDcxPQujr8\\\/4jJXiaPj70Nwaa7ii6weyCzuKl41u6rAEo6O2P16afPqJWCwEpBYaeAN25KqkB5BYJbD1kk1gkMY\\\/knOe8BiVuKbx46RusRVifXglscGyM6xn5++isQ\\\/TdSCxr4P\\\/u5B4WdwqD5LCzRI1Bp42L2QiRcCEuGmylgsPjDVlSWoJSweM4yB2Wny92G848LPvlr4OfVX4LREP1iDBT+mmc1clinLDAdnDIwPanLqnKiizpkbZdI0Su3HqQVQC5kItvJn+SMFIhpFSSKpvEMOKmGSx6tyobKWdPAx+VJlE9nM\\\/1h+RHlCPqh8Jn+peHbzu+Tdygvyy8pvyDH+Tfkt5T3yPv+u\\\/KFi3SRvVq4hN\\\/LXyDcqu4jUaI6RS\\\/m1coeykWzhpRpSz9fI9coFpgvkRkXyKYW2KJnDR+W5SpVN4oiFF2VZSSYB3itD\\\/DpXy4eIVOVNslzC8W6O44lZUUo4AiAxmzjOwhNiAYuWJVPQhuG4YB2hd7kH4eBPV+dFzfqq9C5fERVKJE3aasKmw1tBNIfNqtlCRslszQXLUQNEpAESKgnSSA26sVIH4\\\/hkw8lIxFH5N0dlwO8Y2zC2oTLggxNGBCocJzbQ4wYze93SpwSnERZrJS0HKzSNH99nVmkM2sx+2GqOILBSUCVYj25FzlvxU1jBEj6UOJl4J\\\/HnxO8hEvVx739Zx1\\\/91ZU0gZ7vhlUfpnsm3qPZZE40+TmviXeBTwFVI2rr1LvRWdNSy4UJcSWSCZa\\\/iTMRInEyiAtExfF0wjydMF8ivsJO9Ts1v2ZuMLeYuR7zoJkMmY+Yib7PmmSjU7YObcuXR+WSab5YmeKLIUwHbzzhjuGJeTEagYI\\\/qKjYVkAnDwIqLprPPPPgfnOZadBcxhg+K1AQNS2HTOA8XAmncXwddx2EAkOmYdMJTnyee8X0tolTuUJTlJtrWmr6HrfbNMTtNcW5p01m\\\/fBTWhYlWik7\\\/BzXrIUlUaLSTHKXQc1dmhwqiJIVkDHsuhkqPEFmIpLkI5xXyiPZ0lxSKi0hmnQxWSnJbpIiLSa10r3So9IvyVvkffKe9A9iziY50iJps3SD9BgRqYfujUz8oAkVNyGmYbpesfNurJJGnJT4zdg+UGw+99qXddyh0zX0REfjuC9Aq3aUgjZpmaJwwH3Ax50j4LXCmwJxOTOtNhtKcdBIyI5Mnuy9dKfUzxI0HNU8wbSitJa0nrTBNCHNYZ\\\/qSVKnHyD088OZkIjdzaHmDcyrQHBqHADCYT+BGMCI\\\/+\\\/Av8W2ZVc+svquJZe+\\\/MwDezfOv2RB2ZBw0BN6Z++20U5n8thv+GcTLQWrqxs6rAoMTPd92DdRMgqhL7SrK+wL7RdIl5ovtdBbtKHwftsxWRFNouI1eZRZtjpbnV0yOWSn2+a2ux2zbLPs59gHbFscrynmzfJm\\\/8a0G+Qb\\\/NenibLHLVvstuW2Adu1ttttP7IJNtVqcVutFrsl2er1ZCY53LjFPeQmbjdSQ1RcILhkZLLRI2o2sjpgM3s9JXtIjItHxKMiL27rCWM1XBQm4VDyVKmlT93j6Kmr2ThzsbV+JphkVg0W3TzlXoGFVxuaqUBLmDzhWOVNCnEFJBx2Os9IFY5S3X99Y\\\/DZZ1quuHQk8YM3e1dcsqbyt29cWrl0Qcbj7wkHl\\\/7i6gd\\\/kzr7+kcTf8JVjzaFxu7nlmQ0zlt0kUWgHn\\\/R+F\\\/4v0OEmofj2lkHnKNp+3NeyOPhYJQMB6NkXyQmxHL6xc3W\\\/py3LG+GLU3K+bbz05vCHZY1rrWhzpy1eZvSrk+7M2RxhemuMCMYpaUW8wei56WfF34m\\\/ZkwvyF9Q\\\/iq9KvCf0z\\\/Y1iMKLnWjPSMcIU1Gq5X6q016fPDl1pj4S3Wy9O3W3ek71Eesj6cngShh1VMF8N+xW\\\/1pEvpYcXKY+9Kn+ZXo90+3O3b7SO+gySGUmD1WSAcTsEp+W4OLcB0OS4MqFF6ydSAW\\\/AuPITj+Ag24b\\\/xWqDCwWM+P1f2fTzuxV4tyRv11kvZWYGCYPaQI+4gjnr8sVNXoD\\\/\\\/14bN1y9v3Ie02U3sxLzE8RmUkV56TtsQ+aQ5ckIveyMnwHnrS5YFDekgj5S0s8N089fLPw8nVaSDeKCAp5eHXfTpqGZ3VVhVV4XCkp3Wva\\\/ZLFBnrVB8NLEg88xPk7HUztw4ZbNPWXTWmfBbEpPdXg\\\/PLIeeGhdhNbB72y23nnVu9MDfWrZt\\\/fgn2I29UuJY0hVXXLWwMG82jr8ycOM4ejrxYeJN\\\/E7qrTdsOS+6MMVVMHfllp\\\/1PLfm77+wbmgrS6+IZhauWX9455W\\\/uwxjaj954HMOsFukXi1cKBfxRUKD3CMPyrtkScQCyeQ5IiGT7PUG+K10f8D5miJKKi5CW+kqgUcnZ2sgPWSQ7CI88ZvGHjOkfl7jPgJSZ6evsUrIamM1JwyfU8lCGHCIZfTshf+QWMzflFjCP\\\/vFF1+dDVxJCEk7WRzzI80V4SKiai4180jEZi0wJwpx3OAIlNyUcthfBrvSe5pMb6T8kFkmnhB9EqhVX+JJi\\\/IqZBKEFqIlgJLlmShTlj5Q3rN8Lv9D+dwivCi8rLxoeRu9DpHMm5YP0buy\\\/Cj\\\/I+FR5UHLU\\\/yI8JTyhOUlXi7g04VCRbXcx98m3KfcYTE9a+YFdXS8aESEIGV0vES7mEMWFXGEqBi5QdIKnHJKzIrbbFZkUYLzrew2mWTebLEY4YxZhBgGzrS8hRMUsySbRJMkCTQmB\\\/fFAhvwX6CEQohbRnGRpqjiYfNhrZAGd\\\/BoUekdG8F+68Q1WsC\\\/eKw54BsbC\\\/jHmn0TN2l6lOIwPsxvwT8ny5GTBi+Lp0Yv0wuwXao1GroYOxzNNjTTWzSIXJJCNAjGscQDuPAdbIG1i\\\/+IcxP3J15I\\\/C7xDmx2Tu7j03C8gUhmwVejYDwLx9\\\/nC\\\/izURiV4CVahxQwpQppnsCilAWpCzN\\\/6\\\/iDU57lr\\\/NfkLXGvzbr+qzv+W8L7AkcSHkx8FKKRRStyR7R78kWZyY3+TeR68ke8QnxBdHydPQtB0nLKCl25lkztEhBNENLz4HMnxbtzjidQTLq0qiHKbLZo2elYZTmSIun\\\/SONT0vLw6VIg1r6HRFB54e0VGdVSEtxQOYLREOjpP8JXrJYlTy640IbK6GZlYCRBxia5jbPKM4yzZRzrE1By24LgSByHOJIzeaJWgJLozjaAtZ9cxGIqXRmaJUX\\\/8GLl3pXebu9nNdf2lk9ceoDD7XhZDM9VEX0pxP0FAgRaASWDwRTzG+x3Sdykt5ngh45m0NfVRuaqXfJBl9C9x3O7fGGqHsRxXA6czHlcKZnXzVgusUnuz30iq98VhmOjUd+\\\/cqh0XouJTPxodkhcQt+3Pzjwyvv+97Pz23orl+BL5n1YUZ5Y825taUOM\\\/lTwb23N21\\\/MjF643Xnppb7TXV1wzdceFN9aqaael7t3MSvXSW+7Mq5K0uyyjNiNLbZBrq+ncU2qej7B5Br\\\/Aut2FxRnnJOCnGtFFcqKz0rfU2pn0tiGT\\\/XOjepLKWWr7fWJ9Wm3C7dIysWG9g2CoCIhwXJTSWdZDbbkeINmQI9M\\\/AMx0zCZdlH8UzNgnvQIPX+aVW6NDdULj45VvmXJRDz6BHPSfjQaGdDM26GQ6d5jbhGWeNZ4+tMFZohUmPna5Cdy+lAILHs5CTwwxNfDIjbsP\\\/q4WcTibEDF+3TXNGFW5qvuXZt7Ho45Z26PfFe4h+JU4m3L2q6n+Q+uLRn96P7f\\\/h96mPPh7lXgZ370R+18xrtTa4mT4e909XpucK3xX8XucvyguMF328cb\\\/o+ED8wfZD0QfIXYtLspNnJi1yLPHW+JkunRZrjKveU+7hNwib7NuF6+3b\\\/w66HPAdc+z2yjdlfSpSWT7jcUVupldb4Z0RZaXdGrQcxjxSQmctpRhqgIg3wUOkusMKD4Jt4aFK9Eqa1OIQKrRSwhpbCMSqQIoXc\\\/kBj9ZnvIpsXn4x8cjJCr5SaT0T0S84T1DFQqwOZGpdHbvZNpCDqX1AisEW+OPFXW9vSziu2XtawJhm7I5\\\/86oPEX7Hn5LPvko9Klq+49ZHD91\\\/UXfgfz+IszMP5J\\\/MhajfVILtskJ0bpeIfHUAOsJs6cwWc+q13Oh4WHlKekp+yjgZMJjdeQM4R65SlMx627hf3B15UXrK8qRyzfCF9brWm2lOTtZS0aLJmc0btyU8nv5LMJTPpzKhiJRz6k0fJTRqEla4GW4uN2HwuGons96dEcamL3Runqfr9cfpMvYzk66UvlZWaHZzHEH09wQFsr3K5wEpHeLPLR601wyyhEC5M1oVaOGPVjO4Zu2fwM+whk2a1R03+NGPtR6ZdJJ+EQERz+7Qcd5VPm2GHDByOj3omFkdUjbFAxQVMAIaLMgNILsMx0XJ4AvUTw2UzAgQNrgrK9LCXFvERWTmbPVaHqphTbzpBXUozG96mgZRsdFAbHd6mgbCY429iX8ZAuAT7SCm7noLVg6nKVQhmqM4RF2IhTpIe0XjJl9g364O9ib9e14ndr53ELnFM465unXdhNrd55cWVlRgvK7z3h0\\\/c+g5Ee5HEi4nDV+xcgNddvnX+\\\/D66jnxgEH+BWNeDRrWSWTzO5VWH6mziB32CiX\\\/aR5I9TuJ2eZy2JDty2JIwchC3bLKb8SrzOBxfqSIUETvtHjzuwR76OMMB\\\/Z6CrsUktyKXVsFRsgFOyDmOQucqJ3GOYl6z2pKyiHsVGvIc8RAPtQnZEvX4vZsPkE79q8cIuBj6dsPpZghy\\\/CeQD5wMPRZAqoKsosQOP4ZjTiplUV6JV2KrJLk0OQzuJuy7v+Kegc19WfPPPqvs179OvHc\\\/n9Vw\\\/bXLM553VJxX\\\/87pJ7mFdC2sSJzHt7D9shCXaC2b0ralEZfF2lN8vXWwmFcxnF+4IlxKSjkNzyfzuSZ7k7spc+XMlaCqL5xfJDnnWks9c3NK8yBs99Tn1OSdsox5lZthfzJbrOZcizXb5vEm51stEHj6Mqj9P8Hsn5m5zclMZMRs0cucXN38w5l6WRzVl4GcnMI2uVUC9dZBezYtbEo+Fbc5WfL5xdyZ5qyAjzpr2e8PBG4pxsV4FI9qCirNCLn8RY2VU75Y3\\\/AZHFdPOsZOTLjusU+ME\\\/aJiH65SGMYmuDsOOHWN4Bft3baO92dmWtnrol0ForUs3sFj3disysDv2QYqbcsBEdOElZhd0xyn3H1W3C1KS1nZVd5ZpL1yiNvXrEa46d\\\/Poils3ueuiXx9z+dvqZl7c03dMSuqcuenTwj5CkOX3LfY0\\\/c8gY248BP7zh9zqGDl1YeuNlGrvnJ93\\\/4gweHvg8i+R7E2k2wB3rQsBax4yCuoMpyzMPznL\\\/H\\\/8CyJHiEDNLo7HAKGJMkt9OVxLkJtlPRpXGSrCjuZMWDkFnJMsmamhHdK+NxGcsB9k6JJz0juss35CM9vlM+8rEP+5A7y5PMXBPgDiXjU8k42e+t0sUL5xzjCxKAPjOeWHROQ8STIFMviylMlfobJ5huijNIMphrlLl4kYL40RsOt96\\\/NC3xnnreWXVdpQk4sY69u3tBzw23jN1Kih+6sKxm+\\\/VjH8GkwX7ZGznszlxCmw4gmd6SO5UqTW6QyaAcl4\\\/IR+WPZSEot8hb5SGoEDhRQgLP2el3\\\/vRunEPNEAeIgijxCpFgn2AWF8qI8n6TMa8z86hiS\\\/DMxT4swN7IxJfqt+lfqvP7MZ84\\\/dUiPuurt0FD20FDq9g3FX+kd1LvjFid7CZNu8KfH5U4B5ckZstrxL3K08pL8i+VtxVlOdfCEavkk+vEC0wbRWG\\\/\\\/Af+JH+a\\\/1QUlkhLTGvEK\\\/gb+fv4+4V7xXule01KkHeJET4i5Iq5Uq6p0FrP1wvK5F29InMibxZ4kb54RW\\\/iFU5RzPwoWa8FhEJTRVDCUsxKzFl4EGH6FZLfUvUdI2hk9\\\/COzzb4YN3Q4H7imkK\\\/lKQ37roqIXpHvc369wgTt9bbsR8vxBcm7sDXJV5NfHoNBOuf4Y2J745dgt\\\/Znnhs4m0qprvl7PsObSbVnNAgkEEhLhwRjgof619ybBWGoEKACXAQdHBZGE3oCPn5b+jI0Irx8pXxncatdJ2An\\\/Og3ZpPSvImXWjqMPGjPI6aoo4aU439A4cgskXhlGxW0WI2wwGL4CwPYosC4XHo5J8tCsWcZbGB8xm2Wi2Ta8OCT4EXnL42qNf55vLQRXrSuN0JTVsMoWR9ifBNifcyzqtY2B8BExN2vtZ879IgmfFYbHbDtcOJIJ91\\\/+PzO679Dl0RyyC6uRdmaoXY8C5twfv4PdPnSZ8n8y+S9wXi8gt+mTQ5Viat9DT57iJ3i3eb7rKMym+Q3wq\\\/k9+wvCe8J75vdTxk+iX5T\\\/E50wsWYcC0XbzWxDmpy1XMXioiNy+5K6RAS0pPCkmxhdC0YE4PidnLJpN+U+50rHGt8XT6eEydJm5Oirr0F2Hou0hZmVM85LIdY\\\/f\\\/N44mXv7oe4nPd2D1zq6uO+7o6rqTpN+IxR2JFz\\\/+78Rz144\\\/\\\/IOHHx66\\\/+GH6Xx3Jtbxd8F8HXAKuFcrmJ20IIm4olyFtSIpmlLDLbQuTKpJ+UeKTE8ETS79TPCZ9I8UEyz6qdG\\\/x2x22G0T0b9zps1mz3I4MN1TzF+P\\\/xefrARFOk584wTAvBrdKegJoNOlnwHYTpEEmqRzNo4AzhCeMuudWCz92aUHMEmcPtB4y1JQsefmNauvvr5t7Q2g2ob2xO8TY4nPEm\\\/VnT\\\/2AXdg5NHvjzz0wG4wyG0IceVs7g9rOXcJWLbh5cIaYUDgCl2Ntg5bj4tXZLslaCG3WMYtpMqy1EIso2STNlOSwL45Iio5SHbIRXKPzMuBra7dLrLKtdW113XUxbscKIveBMD8CRnEQ\\\/QqwFl1AKeiiUPQpDl\\\/1uxfrAcpIAmw7ooSXRQbUH3cu7w+XsbeCSmZ3cTez9MloYcrohMPUYuef1lNS9MF55w1d1khn3XXZTVlnxZUP5L4b5hjEdizA+aYS7q0H4hOMWzK9jq94btdd7vvyr4jV5bcdW7iesp6wPZi6N3wF9bP0sWZ1vOtMesd5rtcD6UfsEjVYS2jJmttenvWNtc29\\\/Xp12TI5Vm1Yp15kXWpvS40L11Kz8jOKreUhcrSy8JlGZKoCE455LNmW9LT08NSRrqW12fZ7N6SvHHmQO4Nydfm3pt8R+7j6Y+HrYP4Fu+Nvntyf5IbzxPTR8d\\\/SWOYkFGms+vPDPp8fCSYoT\\\/7A+xZSwHgMiuelV6Xfrf19vTn019PF0PpFivPB5ARJaFSGi+NePOrsBFQs+f0zCi70UwLwCkB63eafAsexKcwh7CD3XDyDDPJA5gYaz2Ix6v4Uzzh63LMHg269pR6NejXq0GnXq2sPOql9xpeLXMmZNCv3RtkVwi89\\\/yABv7OHsANgfEACdQlSd6QRwuFox4tNRgNevAfIO4tNYUaMm\\\/JJJmaLy2aGchjX4uBM2\\\/Iw0V5uDAP580IFTmwoxTOguyMJFfp788oVborl63gyiObR6llnYZAjF1WGI6SvZZEr1Dp9Wozu181gjX6SN+L6dUfaeg2cY2kx8Yb4KdZ\\\/54+Y\\\/xlTTa7quw5kIEGPtpvrbC4LRUUHLbQG9YP95krkPElbBOaeHsPArtodlZ2BrtLhSPntKtU+k4lvQMpwgFXV9v68kx38sLEYxdd+fa7b7+ek\\\/jcuaqxu0hNzcLPNDV+8vFbY7gwsuz8nNRCNdntrD975T07Dt28s\\\/jseUFPeEZy6ppF9dd\\\/79dxsPjg+PvkVuH74L9\\\/pc1UEQThykz7HNsiW5Nd8icjH+dJRl5Xkht7XcSNfZwsKZLFRxVtR94hb9zLtUBxxMt54bAxDMdiemxEyfQt637NZjHLhUohgnh\\\/FXvZktdyfFyW13V+cpV7t3uvm2txD7p3uY+6T7kF5Ha46euVPBzYNw9N3CTVx8thTc9lr8S5x4\\\/Q69jT+m2s4xN2VjnJ3s4G1BP0ZchS46zSjOFg4mYy9VKh0etpZ7istCzTSS4\\\/Ys5OzV7kW\\\/3dcy+vMMtXXYUDfNbxxIqrI6kpb+eWnldbfAd+5fhrP05sB\\\/ncBB5hOZ8Fe\\\/n9mvcC51rnnQIni36xklQ660m98z0isfjWyZs9SEl2wzEMzmJZycmIOjObh+3o+oHtX+zosmlyKzfhUyZs+udhrr4dfG0nbw6VsfsxmGRIn\\\/asWRTklsw53HnZI+dif3BZ1YLeXOzfff7qSx65kwwlfMdjc5cOnMBHIHCEeZohZrkQ5mlGf9OShZxAYVSimUgzE80gjDw2AiULWdXAnOi9PBY5s8mkWMwQlxMXF5ADSjrKN79otsBCO6XlpKlRBQlmN\\\/KbM1GuOYrmmLch2YwU3qzIMiFYBFiuoPc8mi81J2q2BtkbXbzV6w04lCplKXs5qEgz86TCzFfxS3mOP0iKIEAa1OyWMoRV+iYv9lueB3vxU4OJ+BafbIadotnPbozZMwvUHOw9GgznLLpaI830qK+\\\/R4lDSV56qZgEseSTiRU4+6U5XtHm+AUOJUAgY396otaTn09msPjaAlJqoVLCg9rOHOklntwtHcC\\\/w29Ip6yCSQrwPjFHLEezTQtwE\\\/4uHpCULByRZuE5Uh1eJN1t\\\/kL8QpIz+SwpV4nyc5T5\\\/BLlOd50rrKCb1La+fXKZnyFcjt\\\/p3RQeYP\\\/nXJasXK8BKG1h1f5XKWUr1LqeDmZ9ytzlCXKZcpD\\\/JP8y8pnPH3B4NSIy0d1c2wk2UvL41qyxRnFvCLx9FYeChOSTfTr9eP7Z+ZHx9lLFcc1uycjymUR2U2ILIhms9F8yowpqHmh2ZyFBDdCgigIsIebZFAgHI3XD4ulMo3rzabYUutu63ErZ+VoNSk102rXKf0qSf91hdgZDW1gr9n4F0++cFM4+cINffMgsmHiwl6HJs7IXvqFZIS+j7ihF9OsFCL\\\/JKqzEMdZ8NbErfiCQy\\\/gRYm78fbEQ8feJmHCJX6HMxLy2Kt4YeJJauPpEMG8Cdpz4JzHXS\\\/zGPatca3Y4YwqGDIJmxTyOf5CIeXmc5RzLI24kXTiTrLVZfoDf9TyMX\\\/cwiuF\\\/A+lp0g\\\/MiEFr4CtRDaJuNDyQ+YC7A4HUm7hd8PWp2YVgBJw5HFZKXXYjV3Izn5zgm5DdoddtRfZNftWu2gPaC58BGIg4pJMpWjQsouGTSB7GfqQLF76hCPDGP+TzcwCm5lz83cmNjMaKDVHeh2fgMug7y7Qmk8qT0Z62Rvln56A\\\/CQtsfGLGLCFYf1lSAJLVjFXmB0WSFa2OzWh0jI8q1yUhLJQMpZmlYaS0\\\/HNqwuLGxLbua7EpbcMpOKR3+KXewo5TD54MZF3n\\\/Q5+wUn8upH9x+6\\\/PQqe+WnJr\\\/+1wwe+HMl++3+J84afuXLL0+POWpNqwFXnvyrCZBLZyeWoPkO9OWXifMctdP\\\/QAL8FIhQRSqg+0dQH5S38X1oJaQHIC2GdBHUvyy8CLb6IroTUquwEt3B\\\/xndJVag1bQOaG6E8h6o+774CLoV4LspDsNfiRZBfZ50E5Kgr4UAb4PyfEjV0K8PnldA+p4x7nZW\\\/hndCmkZpJ1cGsMvAtwgPN8EsBmShUfU7tjPOiMdhPQFTPg0zORKsMn\\\/Ao41SPeCBADdBDjyjxFSVkNKIGSpQcjqgzSEkH0ZpJ8h5LwToSTAc1cilAz13uMI+TYiFLgYodQFCKUBzYxBhNQbEQpBCp+LUAZNf0MoCxSS1Y9Q9iUI5SxBaOYihHILEMpXQcTAR2EOQkVQX2Khf1eDaaEA\\\/R1VojYkwMnEgQpRNULiYsc6OCLT9\\\/hX8Zcj+htW7Jd9Wc4xfSr4bAMmyCT83oA51CgcMWAeuYVfG7CAfML7Biwin+gzYAk9LxYZsAllSYMGLKMd1ocNWOGfZSNT2IxW20oM2ILW2G43YKv4uPiJAdvQxbYvJ+1rq33lpA0K9k8NmCDeNWGDHMpzzTJgHimuKgMWkMW1yIBFgFcbsIRWu7oM2ISSkjwGLKNaT64BK6TV\\\/oYBm1Gxp3vyr4eUeoYM2Mpd6DpqwDZU4HkNOME8lbrNazVgHgW8mMFUO4o324B55PGmMFiEetF7lgHzyOUtZrBE9eJdasCgC+98Bpug3uJtM2Ae+bwXMFg29KvDun51WNevDuv61WFdvzqs61eHdf3qsK5fHdb1q8O6fnVY168O6\\\/rVYV2\\\/OqzrV4d1\\\/VJYYbL6jgFTWXUz2Az1Lu8dBsyjGd7tDLYwmYwYMJXJQwy2Ucv3vmrAPEr1\\\/pzBDtbPiAHTfnT8JCbzkwZMZf5HBrsZP+MGTPn5HwYnQ73b5zdgHqk+Xb8eiu+rMGDA9+Uz2M\\\/wlxswxT+HwSnUBnx9Bgw24FvL4DTGz1IDpvzoug4y\\\/O0GTPGvYHAGtQHfbgMGG\\\/DdxuBcKh\\\/fkwYM8vE9yuB81s8vDZj28zSFTVPkb5oif9OUeZmmzMsyBd8yBd8yRS+WCb2sQFtQD4qhNagVfFMMYo2fQFqBOhi8GHWjLkj9BpaK5sNTL8A0b4X6ToahQs06oC8AqIbVt\\\/5f9lQ4yZmKlkPLOjQwidMHdQuh1McrRhXwKUL5BlTCaquBYh2Uy4BmLfDQz6iWQX99kHrRRsjbGQ9d0BZD6yc56YVxVcBqNUbS8TtBQipQUHraYxfKY6PQllY2UpvRF\\\/07MzrletYjnUEHcL+e9dgJLf0Mu4ONRaXeb4zQx2bYxmj7WXsX64WWlKduxkOnMZce1jflqI1x1cdGoy0Uv52VOv8DbDSVjTCVq07Wfz+0d7HnTazvDmP0mIHbzfrSx56oX8f67jck0gZPumS+jtcPfcaYVDqh1PtuM2oGmKSprs5YSTfTSy+T6DpGTzml1rHeoJoYoY3RbzRG7TRmStt0aZ6RwhrApL3ptWfk2mlIt9uYSSfDH2BPZ7Taxyx2HePu221iYuX0Tc6Ftq1n\\\/Z3poxfGuczgttWQfxuzadWw+wmZtbOx17JanX4TtHQaOqQ460D3uo10Q74W2jYa0tZ7OLOWW5mudOtQmQzbjPl3Mq2tYzg9bJ3p1tjFKPWZTLXuzknLUqF9s6GZ9Ywbapu63vqMlbxuko\\\/17OmM9fZ\\\/zd\\\/0fW1+bcYYq1kPA0zS7dNsM4Y2QP2EZKltt03OcA2zbZXZwGYm2z5md\\\/1MG2sntU5519c7XUt5k6upz7CyM\\\/5Ib13PNNKKLmf0Ote03zbWesbS9NHbmbR62CrZMjmLibEp\\\/SbW3sok0WuMQdeQLsV+Rj\\\/B8UTvPcyG1jMfOsFbwTf86pxpWpvHPGc71K40RprwstRLzoZcRTnQB5V+L1sJ+gqaOaWX\\\/MleFoNtn6n\\\/GbP1XmPtr2f2c9mknv9P\\\/b6um7WGN4wZPu6Mr9J7PR\\\/2BBU1MHoVZbHxFkO+FMZew6x3QmrUPvuYxDuM3grQEsBbATtIHaT5MCMKL4VaSl8H+bmsvhZqlkNO18E5sHPUwmcxq12BrEhhaQWz3L5vsWt1sl7nWNdej6HfM+vhm\\\/LR971ukEEvs5AOhj0xnwnvP2FTq1nrFsAfmByzbdKP6rIbYLRn\\\/F\\\/MWCHUS53x2bqv6DT8c5\\\/hP9ayXmKT\\\/pfKtskYjXqSjYbfXj258+lj9v8LyUxY2aZJTxgzVndscv30Ml\\\/Vb\\\/iONYbtf5u8JlY8lVhsSi9nPMY3x2s37Iva8mrmhXWuVxua6TJ6\\\/jYNZbNZTZeU7v2\\\/aRXfHHnCj1KP2cqimlYYdZ0h7T7DX\\\/2zsQuY7XdN8elbvqGLmBHRTF05+k7RyjjqYZKle1cnW2\\\/\\\/XueqYYtdU\\\/zoxLh09bczSXdO2bF6p0RdeZPYvVPs9kyc8K8lRblbz\\\/qfsKvuaf1tYvq\\\/jGlzqjeZ8MVnMLsBV\\\/czA0zitP+OyfnofE217vWG99blr6+qHsM+znj56Tb0r2Z0xj4Wsrl\\\/U3MTcR7d32JGNKjPRo8t25hWu76mg96vyftMz3R+3Sz6aTf86kYWh21CUyO5f6\\\/9if70NRkz4o3pu\\\/JEf9\\\/Uoy6tM9FxG+vzm+t4QmOtX5P1mv8Vt2ek\\\/M0RpscW0zmKGRFzP+yVEz3QXaYaavMR3SVnoygqh51RhbwYnvLhzBGFVIToOft8VG9gFkFrMbREDbgclUKiVLNQGZxPaKK9d7C4pAfGK4TPJvYpYPv79BXfxjzfP9snKFTDVuemSbvQd8FOw9tSnpYxD63voUuMWKvbiOLp+tR30l7W0sk0sBzyM\\\/sGtSp6uqIRw\\\/+O70KGvx7GKoS8n3kIqqtCtvesYlaixxMFk5j\\\/346wicUAOm7s\\\/5NRJtoKv2aPk32v2NITW9PaFlN\\\/oq7oiKmLu7u6+6FKnd\\\/d29Pd29rf2d2l9qxrK1BrWvtb\\\/w1SIe1MXd69boDW9KkLu4CuuKKiKB+ykgK1et06dVnn2o7+PnVZrC\\\/WuzHWPr+7qz+2nnbSu0XtawUiqO9co7bH+jrXduWp1b2drevUNsBq7YTG9d29MbVjYH1rV2dfv9rW0drb2tYPBH39nW19an9Ha5cKbVvU7jVqJ4zS0xtrj7XF+vq6e\\\/vU1q52tRX6H2jrUDuNrjq71P6Brpi6qbO\\\/A8hjUNvdTqkpvK4VxgD6VmBmoq5\\\/U6yrvzMG2G0ADPRuKVCZSLo3xnpbYXr9vbHW\\\/vXQRAnaBmCKfXSwvu41wCZjYc3AunUAMl5h+PXdMEhnV\\\/tAXz+bal\\\/\\\/lnWxqZKgyumjo8R613d2MYze7sug21bgv20ABupinLV3tq7tpu2bOjphhh2xdT0gkW51befGGENgWm5V14E41PUxkF1XZxugt\\\/b0xECMXW0xGEQXdycVlhrbDJNZH1u3RYW59YGS19E+1neuY+LtN+ymzxivDShWx9SBvli7Ls3YhgHK7EAblb+6phumDD3CpPr7O7vW0qn3xkDv\\\/X15VE19IDJmR\\\/C4vnVt6+WdXdB1rL8tTxcakLd39vWsa91Ch6DUXbFNfT2tPcAaoLQDi\\\/2dfbRjit7T272+m\\\/VWMGGrc\\\/Spzete1z5nJRBRky0pmF2i5izubOvtpgqayVDyKcriFQx+WF3RC9pf39p7GZ3zv7J9mM1aMMMYWByzKkA9f7na0NqvZqkrFqtL16wpYKzF1vXFNnUAWsGSpSsW1i2cX71i4dIl6tI69dyF82uXLK9Vq89ZVlu7uHbJCqtiVVZ0gDImZE0VQzuG6cG8+5keJvmBtde9tre1p2MLG4eaP5XU6i3qlu4BStlGbRS4G+hqZ\\\/YHVgEmxSwbrKIT7BnQW9f2xmLUfgvUJiDraAXj6V5NFx9Q9k9jhopsEzXCGKg7RvXTG2vrB+tYA9I\\\/wxdVfPfaGENhhjFJBwoFm1890A9dA5vdsA6nTCi7b4IpMP9JUUwSUxtVN7auG2hdDXbZ2gd2NZW6QD2\\\/i1n6lolZwJwM5cCiaFX7emJtnWs62745cxWk2MVslNK2trd3Uh2D7fQy15VHq3uZbJlP+BpT6zrXd9IJwSAMb1N372V9umkzK2aV3ZvAZgZWr+vs66DjQF+6uNeDeQP\\\/oKqeLapu8oaEpg\\\/E5LFwzZnJUZ+3YSDWx4YBb9kW6+0yZtBr8M2Q+zq6B9a1g61u7Ixt0p3cN6ZP8UCTMfAb7Wcc4+QcgS3mjtv6z+iYTqzV4HrNt3fLWJ4kMLyF0RGM09o\\\/hyKcv7xazVdzZkfLZ6rlxbPzi6JFRbJ8fj1UFhUXR6OQl5eWq+WzyirKKqxKR39\\\/z5zCwk2bNhWsn1B8W\\\/f6qWsiptb0tm6isoAlCExBT8u6V8MKXQJeqxtcfB5dpL2dbZ2t6vJWtjb6YM+aXfJP+i7s6F+\\\/rnB9P\\\/178YXr+1a1Uj9RQCv\\\/XxJsiq2D2ti\\\/J6FPhYYcGfa065Il7Oqhlx3BWqe19KMBbIVt\\\/oNptWtY2Di1ps64bppSx93AHeae556GfN+3jtb5jdHOBUg\\\/FnSz1oFpreewcG\\\/iqEgPRNM5+ADKy9BnQP0B1E9tW8koptYsYOVGNpPpLQ3GFcQACxy72dHkn3E\\\/jQM+yJ\\\/Nz+Xn87P42bzGn8XX8xXTKFd8qyzraYmLoX56rX5Vd9n0MbAT\\\/YkLQ6g1XWrdxuWp8T0qGs+m\\\/9fAN38Oc\\\/ciO6Yvbh3h7h5xuEu0Ue6eEXtSiVbt4O5ADZAIinOL0RFIBHVzt6KtkAig1w\\\/nF5ccoMCIYitxAP5OUPFONAiJQ0OQY\\\/asQaL4O0eSPLT7a4btTkb3neGiqA6MOHwlDdVubjPCXIzrQmEU5K6EcgaUbVCmQbmaa4fDAuVTG7E7SgZhvCpAr+KS4SQS5Ko5D0TkQa6GC6AUhjYwbNPHGRjOyS2pVrj5nI+h2DkrHEmCnImThkuC6lOcBpxq3A0jspnyd8OwI7nkMHcdJyE3YA0CljdoP8wpqBASncmKEdlasqvawq2Aaa4AsQQ5+vXsbpZrXNcwdATj1XKpyANtl3FpKBnKOm7GcHLwyFPcbQzte7QXGO\\\/sYVMpLUastpIj1TJHf+M3zt0MEr+ZjbZrJGt2CarO4nJQESQCQt0KEP19Ywe3A6AdoKYdoJodoJodwMUOJILet0PLdsAp5C5HPdwmtAvSboB56DJ5GCR4gAEZOSUHOD\\\/nA0k4ngLZYagNjMg2yplv2JXE0HwjFltJ1WGuDy2FRID5\\\/hGvr6T7KS6XTSVvxJdCCXqGZQuIzqvrAgg9VAeHuVRuBpNEGpNAvDoIzxjZuSDC5BfkKJUOeY28QfVL\\\/\\\/A9K39plL8yyv\\\/Sy\\\/Ej5OgIjKKNkl\\\/T8nh1KqF\\\/y3EVeQftBoiQp8hzcNoMkrfJKOWCvEUOoCooj8FzO5QHoCyF8uBw6KXgKBkdgQJ4v2\\\/Y6qGTJc8NRwoNIJhpAN4UA3B5SqozybPkGZQKXfwGygwonyFHUDqUT0Ppg\\\/II6UcvQfkEKUNzoXzcKJ8nh6hNkyfJfjhABsnIsI2yEB+WaLF3WKTFz4aR\\\/tRQGDxEfkYeRQFA\\\/elwVgBqHx7Jygjan4L+MHmQ9A+nBV3VCvkhbsSfANIQOkZL5CIPDJfTTnYNH1KDB8guskvzlWuZWr62hyvKLMov2sOpmbBXlat71GoHuRkJIDxYsGQn5HBEJ2A9kDRIu8j2Yb48Xj0Gc6LzImgQ8iEGtUDewyAEuWOy9RSDqsh1aCkkAn1cCWkrpEFIVyEe8sshfQfSdyFdwWr6IQ1A2gTuowcoeoCiByh6GEUPUPQARQ9Q9DCKHjb6ACRK0QIULUDRAhQtjKIFKFqAogUoWhgF5bcFKFoYRQNQNABFA1A0MIoGoGgAigagaGAUDUDRABQNjEIDCg0oNKDQGIUGFBpQaEChMQoNKDSg0BhFEVAUAUURUBQxiiKgKAKKIqAoYhRFQFEEFEWMQgUKFShUoFAZhQoUKlCoQKEyChUoVKBQGYUDKBxA4QAKB6NwAIUDKBxA4WAUDqafAUiU4jhQHAeK40BxnFEcB4rjQHEcKI4ziuNAcRwojpNN+7ij1T8HkqNAchRIjjKSo0ByFEiOAslRRnIUSI4CyVFj6v1MGATM5kpIWyENQqK0R4D2CNAeAdojjPYIM68BSJQ2DhRxoIgDRZxRxIEiDhRxoIgzijhQxIEiziiGgGIIKIaAYohRDAHFEFAMAcUQoxhihjsAiVL8743yf60achVuNMHmSgbxTFZuRR+x8kp0jJVXoH2s\\\/C7aw8rvoKtZeTkqZ+UmlMVK6I+V\\\/ShowsPBcnu1B1zAUkirIHVD2g1pL6SnIUkMegXSHyCNkzItnbdLS6Xd0l7paUnYKx2XiF1cKu4W94pPi8Je8bhI1OoUYmV+FFwLuoXlWyH\\\/GBJsIpBXMaiKRGHcKPjZMvhESVRznlQ\\\/zsWv5OKnc\\\/HeXHxLLq6WyTmYZ55OReUEGMeNmiXr7OAxSOVZ2WeDZ7p5\\\/0fe4HDWrOAoPqQXM7UIlB9B2gdpD6SrIZVDKoGUDykTUpDV5QJ+o5ZudHkIUjakECSVDoE8HohtXE6TdoBY8Z6Rn1sR\\\/YOsw9k5QPfUcHYRFKPD2UuheHI4e3WwWsb7UTYNg\\\/AToLlHodw7HDwBzT\\\/Vi8eGg09B8fBwMApF83B2ARQXDWf\\\/KlhtxeejIE9JVxjlcpg3LZcNB1cC2nnDwZlB+tJldhbFzoWBMqF1Jm5EJ6DMNKgy9JHCw8G5UKQPBysotgllU8VjEeUz9gRItORGgKGPD+BGHmvm4MngbcGPgPyvIFgwj7fUUR6KVzJH8UpNCR7K\\\/wEgVweHqxWKD\\\/vDPqOM0\\\/KJ4J7M7cH7oC+cuT94T7AgeHP+qAmqbwK+t7MhhoNXq6PkUS0pOBgsCvbnnwj2BRcFW4PLgs2ZUD8cvDh4iLKJmnAjeXR\\\/sAE6XAizyBwOnpM5ylisC24JasHsYIV6iMoXzdb7Lc8\\\/RCWASvTR80C+uZmj1MbPLx\\\/FTi1XOiXtki6S5klzpbCULs2Q0iS3yWVymGwmi0kxmUyiiTcREzK56VuuEfrSnVukv8eMRJ7mPIMdhOaEvZOHCDYRtAjFk7h6Ur98Hq6PH2lD9avV+GfLw6NYOe\\\/CuBCeh+OuelS\\\/Yl58dqR+VBpfFi+P1Melhosa92F8cxPUxskNoxitaBzF47TquhT6fzbsw+i6m1IOIIz9193U1IR8no1VvirX2c6KuppvyVqMfMqfw\\\/FNBdPid9Yvb4w\\\/ktYUL6HAeFpTffwq+j86HCB2Yq2tOUBstGhqPMD3EHvtMlrP99Q0AdoJhgbWbAM0lE0LQDPNQypFA38yj6KBjnS8LCAHvBAtAE+xoiyGl6VYGR6PKd6+Y2ptzT5VZTiZCB1jOMcy0RQcsBigrdmXlcWwwipupFi4MawyxmayjoJBQMkPMhQ4AwVZR0HMBosXnkHJNFDKJlHK2FgcPoMT1HHcORM47hzAifxf\\\/sTmRfBI8cCVz9H\\\/JKMlXBuD1BLfubHDFx9crar7rhww\\\/veMrJbVbR20bI3FB8KxmviV4Rp1X\\\/Fz39L8HG0uDtfsQ8\\\/Vrmjc95wWqxku1oprw601TSNVlY3V08baPjlWY+W3dFZJO2ukY1VVf0tzNW2uomNV07Gq6VhVWhUbq7aT2n1D4z4Tmkf\\\/KCQrR4hZARtuSQk1zfM4es6mBn1gbsh3ZcpBHuGHkTnSFLeE58WtkGhTfnV+NW2CdUabbPR\\\/QjGafFfODaUcxA8bTQ6odobnoQnRIopEf7euPh5afmEjNZW41vrtOuujP6zZh2o7a+AfPPezBJ+pmKjvW3\\\/6v+1nYGCgj2YDkT6E6uO5y+vjs+hv+kkSDNVS0wR1BRN1HMfq9sly7ej4EWiMABO4nw5HoQimf0dCU+h\\\/t0eGxCGJ0KNC\\\/0ggraT7MOzgWyHBOY5sGi5k52WyaSQ9k55f+kcKy\\\/QSzqe0HA6ESujr+OVASstMvdSc+QDsytyVv6t8KHMof6hcpH94YQ9UBvfQrXS4cA+H+iN9E4IAsL8J6X\\\/eAsb74XBqGht4iAKRSFOkj\\\/2yCvq6qCf+iCcIfVKwfUavfaz7\\\/gmF6PV9SEfWGyMDE0QDBglrHGAkAP4\\\/h77HWQplbmRzdHJlYW0KZW5kb2JqCgoxOCAwIG9iagoxODYzNwplbmRvYmoKCjE5IDAgb2JqCjw8L1Byb2R1Y2VyIChQcmluY2UgMTQuNCBcKHd3dy5wcmluY2V4bWwuY29tXCkpCi9UaXRsZSAocmUtMDAwNTMpPj4KZW5kb2JqCgoyMCAwIG9iago8PC9MZW5ndGggMTcKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL1R5cGUgL1hSZWYKL1NpemUgMjEKL0luZGV4IFs0IDEgNiAyXQovVyBbMSAxIDFdPj4Kc3RyZWFtCnicY2JlYmJlYGJlBAAAhwAZCmVuZHN0cmVhbQplbmRvYmoKCnhyZWYKMCA0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDAwMzY0IDAwMDAwIG4gCjAwMDAwMDE1MTYgMDAwMDAgbiAKNSAxCjAwMDAwMDAwODAgMDAwMDAgbiAKOCAxMwowMDAwMDAwMzQ0IDAwMDAwIG4gCjAwMDAwMDA0MjAgMDAwMDAgbiAKMDAwMDAwMTQ5NCAwMDAwMCBuIAowMDAwMDAxNjgxIDAwMDAwIG4gCjAwMDAwMjMxNjEgMDAwMDAgbiAKMDAwMDAwMjQxMiAwMDAwMCBuIAowMDAwMDAyNTk3IDAwMDAwIG4gCjAwMDAwMjMxMzggMDAwMDAgbiAKMDAwMDAyMzg3MSAwMDAwMCBuIAowMDAwMDI0MDYxIDAwMDAwIG4gCjAwMDAwNDI3ODggMDAwMDAgbiAKMDAwMDA0MjgxMSAwMDAwMCBuIAowMDAwMDQyODk2IDAwMDAwIG4gCgp0cmFpbGVyCjw8L0luZm8gMTkgMCBSCi9TaXplIDIxCi9Sb290IDEgMCBSCi9JRCBbPEJCQkFBODEzMTVBRTQ0RUJBOUY2Nzg3NUIzMkRFMjJEPiA8QkJCQUE4MTMxNUFFNDRFQkE5RjY3ODc1QjMyREUyMkQ+XT4+CnN0YXJ0eHJlZgo0MzAzMwolJUVPRgoKeHJlZgowIDAKCnRyYWlsZXIKPDwvWFJlZlN0bSA0Mjg5NgovUHJldiA0MzAzMwovSW5mbyAxOSAwIFIKL1NpemUgMjEKL1Jvb3QgMSAwIFIKL0lEIFs8QkJCQUE4MTMxNUFFNDRFQkE5RjY3ODc1QjMyREUyMkQ+IDxCQkJBQTgxMzE1QUU0NEVCQTlGNjc4NzVCMzJERTIyRD5dPj4Kc3RhcnR4cmVmCjQzNTU3CiUlRU9GCg==\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json new file mode 100644 index 0000000..c64f3ef --- /dev/null +++ b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Mon, 28 Oct 2024 19:36:03 GMT", + "Content-Type": "application\/json", + "Content-Length": "709", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-limit": "1000", + "ratelimit-reset": "57", + "x-total-count": "2", + "x-limit": "2000", + "x-offset": "0", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "CF-Cache-Status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "8d9d5f5b4a989405-LHR" + }, + "data": "[{\"id\":28,\"uuid\":\"82844dfe-4473-4d61-a638-fd26715c298f\",\"name\":\"lib.model.tax.ch.sales_tax_303.name\",\"code\":\"UN81\",\"digit\":\"303\",\"type\":\"sales_tax\",\"account_id\":105,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UN81 - Revenue (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":29,\"uuid\":\"5d89bc5a-c2a5-4f3d-8103-ad0410ed1174\",\"name\":\"lib.model.tax.ch.sales_tax_313.name\",\"code\":\"UR26\",\"digit\":\"313\",\"type\":\"sales_tax\",\"account_id\":105,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UR26 - Revenue (RS) 2.60%\",\"start_month\":7,\"end_month\":null}]" +} \ No newline at end of file diff --git a/tests/Requests/BusinessActivities/FetchAListOfBusinessActivitesRequestTest.php b/tests/Requests/BusinessActivities/FetchAListOfBusinessActivitesRequestTest.php index 4d087b6..c017b34 100644 --- a/tests/Requests/BusinessActivities/FetchAListOfBusinessActivitesRequestTest.php +++ b/tests/Requests/BusinessActivities/FetchAListOfBusinessActivitesRequestTest.php @@ -16,8 +16,6 @@ $response = $connector->send(new FetchAListOfBusinessActivitesRequest); - ray($response->json()); - $mockClient->assertSent(FetchAListOfBusinessActivitesRequest::class); expect($response->dto())->toBeInstanceOf(Collection::class) diff --git a/tests/Requests/Invoices/CancelAnInvoiceRequestTest.php b/tests/Requests/Invoices/CancelAnInvoiceRequestTest.php index 44d449b..0d1a267 100644 --- a/tests/Requests/Invoices/CancelAnInvoiceRequestTest.php +++ b/tests/Requests/Invoices/CancelAnInvoiceRequestTest.php @@ -14,8 +14,8 @@ $connector->withMockClient($mockClient); $response = $connector->send(new CancelAnInvoiceRequest( - invoiceId: 1, + invoice_id: 1, )); $mockClient->assertSent(CancelAnInvoiceRequest::class); -})->only(); +}); diff --git a/tests/Requests/Invoices/CreateAnInvoiceRequestTest.php b/tests/Requests/Invoices/CreateAnInvoiceRequestTest.php new file mode 100644 index 0000000..71771ff --- /dev/null +++ b/tests/Requests/Invoices/CreateAnInvoiceRequestTest.php @@ -0,0 +1,86 @@ + MockResponse::fixture('Invoices/create-an-invoice'), + FetchAListOfContactsRequest::class => MockResponse::fixture('Contacts/fetch-a-list-of-contacts'), + FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'), + FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'), + FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'), + FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'), + FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'), + FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'), + FetchAListOfAccountsRequest::class => MockResponse::fixture('Accounts/fetch-a-list-of-accounts'), + FetchAListOfTaxesRequest::class => MockResponse::fixture('Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $contacts = $connector->send(new FetchAListOfContactsRequest); + $user = $connector->send(new FetchAuthenticatedUserRequest); + $languages = $connector->send(new FetchAListOfLanguagesRequest); + $banks = $connector->send(new FetchAListOfBankAccountsRequest); + $currencies = $connector->send(new FetchAListOfCurrenciesRequest); + $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest); + $units = $connector->send(new FetchAListOfUnitsRequest); + $accounts = $connector->send(new FetchAListOfAccountsRequest); + $taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax')); + + $invoice = InvoiceDTO::fromArray([ + 'title' => 'Test', + 'contact_id' => $contacts->dto()->first()->id, + 'user_id' => $user->dto()->id, + 'pr_project_id' => null, + 'language_id' => $languages->dto()->first()->id, + 'bank_account_id' => $banks->dto()->first()->id, + 'currency_id' => $currencies->dto()->first()->id, + 'payment_type_id' => $paymentTypes->dto()->first()->id, + 'mwst_type' => 1, + 'mwst_is_net' => true, + 'show_position_taxes' => true, + 'is_valid_from' => now()->format('Y-m-d h:m:s'), + 'is_valid_to' => now()->addDays(5)->format('Y-m-d h:m:s'), + 'api_reference' => Str::uuid(), + 'positions' => [ + InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionText', + 'show_pos_nr' => true, + 'text' => Str::uuid(), + ]), + InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionCustom', + 'amount' => 1, + 'unit_id' => $units->dto()->first()->id, + 'account_id' => $accounts->dto()->filter(fn ($account) => $account->account_type_enum === AccountTypeEnum::ACTIVE_ACCOUNTS())->first()->id, + 'tax_id' => $taxes->dto()->first()->id, + 'text' => Str::uuid(), + 'unit_price' => 100, + 'discount_in_percent' => '0', + ]), + ], + ]); + + $response = $connector->send(new CreateAnInvoiceRequest(invoice: $invoice)); + + $mockClient->assertSent(CreateAnInvoiceRequest::class); + + expect($response->dto())->toBeInstanceOf(InvoiceDTO::class); +}); diff --git a/tests/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequestTest.php b/tests/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequestTest.php new file mode 100644 index 0000000..ea3531a --- /dev/null +++ b/tests/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequestTest.php @@ -0,0 +1,47 @@ + MockResponse::fixture('Invoices/DefaultPositions/create-a-default-position'), + FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'), + FetchAListOfAccountsRequest::class => MockResponse::fixture('Accounts/fetch-a-list-of-accounts'), + FetchAListOfTaxesRequest::class => MockResponse::fixture('Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $units = $connector->send(new FetchAListOfUnitsRequest); + $accounts = $connector->send(new FetchAListOfAccountsRequest); + $taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax')); + + $position = InvoicePositionDTO::fromArray([ + 'type' => 'KbPositionCustom', + 'amount' => 1, + 'unit_id' => $units->dto()->first()->id, + 'account_id' => $accounts->dto()->filter(fn ($account) => $account->account_type === 1)->first()->id, + 'tax_id' => $taxes->dto()->first()->id, + 'text' => Str::uuid(), + 'unit_price' => 100, + 'discount_in_percent' => '0', + ]); + + $response = $connector->send(new CreateADefaultPositionRequest( + kb_document_type: 'kb_invoice', + invoice_id: 53, + position: $position, + )); + + $mockClient->assertSent(CreateADefaultPositionRequest::class); + + expect($response->dto())->toBeInstanceOf(InvoicePositionDTO::class); +}); diff --git a/tests/Requests/Invoices/DeleteAnInvoiceRequestTest.php b/tests/Requests/Invoices/DeleteAnInvoiceRequestTest.php index c1b22e8..8a60af0 100644 --- a/tests/Requests/Invoices/DeleteAnInvoiceRequestTest.php +++ b/tests/Requests/Invoices/DeleteAnInvoiceRequestTest.php @@ -14,7 +14,7 @@ $connector->withMockClient($mockClient); $response = $connector->send(new DeleteAnInvoiceRequest( - invoiceId: 1, + invoice_id: 1, )); $mockClient->assertSent(DeleteAnInvoiceRequest::class); diff --git a/tests/Requests/Invoices/EditAnInvoiceRequestTest.php b/tests/Requests/Invoices/EditAnInvoiceRequestTest.php new file mode 100644 index 0000000..99b873d --- /dev/null +++ b/tests/Requests/Invoices/EditAnInvoiceRequestTest.php @@ -0,0 +1,32 @@ + MockResponse::fixture('Invoices/edit-an-invoice'), + FetchAnInvoiceRequest::class => MockResponse::fixture('Invoices/fetch-an-invoice-edit'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $invoice = $connector->send(new FetchAnInvoiceRequest(invoice_id: 53))->dto(); + + expect($invoice)->toBeInstanceOf(InvoiceDTO::class) + ->and($invoice->title)->toBe('Test'); + + $invoice->title = 'Test Invoice'; + + $response = $connector->send(new EditAnInvoiceRequest(invoice_id: 53, invoice: $invoice)); + + $mockClient->assertSent(EditAnInvoiceRequest::class); + + expect($response->dto())->toBeInstanceOf(InvoiceDTO::class) + ->and($response->dto()->title)->toBe('Test Invoice'); +}); diff --git a/tests/Requests/Invoices/FetchAnInvoiceRequestTest.php b/tests/Requests/Invoices/FetchAnInvoiceRequestTest.php new file mode 100644 index 0000000..db270f3 --- /dev/null +++ b/tests/Requests/Invoices/FetchAnInvoiceRequestTest.php @@ -0,0 +1,22 @@ + MockResponse::fixture('Invoices/fetch-an-invoice'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAnInvoiceRequest(52)); + + $mockClient->assertSent(FetchAnInvoiceRequest::class); + + expect($response->dto())->toBeInstanceOf(InvoiceDTO::class); +}); diff --git a/tests/Requests/Invoices/ShowPdfRequestTest.php b/tests/Requests/Invoices/ShowPdfRequestTest.php new file mode 100644 index 0000000..10e0a46 --- /dev/null +++ b/tests/Requests/Invoices/ShowPdfRequestTest.php @@ -0,0 +1,22 @@ + MockResponse::fixture('Invoices/show-pdf'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new ShowPdfRequest(53)); + + $mockClient->assertSent(ShowPdfRequest::class); + + expect($response->dto())->toBeInstanceOf(PdfDTO::class); +}); diff --git a/tests/Requests/Invoices/SubPositions/CreateASubPositionRequestTest.php b/tests/Requests/Invoices/SubPositions/CreateASubPositionRequestTest.php new file mode 100644 index 0000000..ac08ae6 --- /dev/null +++ b/tests/Requests/Invoices/SubPositions/CreateASubPositionRequestTest.php @@ -0,0 +1,32 @@ + MockResponse::fixture('Invoices/SubPositions/create-a-sub-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $position = InvoicePositionDTO::fromArray([ + 'type' => 'KbSubPosition', + 'text' => Str::uuid(), + 'show_pos_nr' => true, + ]); + + $response = $connector->send(new CreateASubPositionRequest( + kb_document_type: 'kb_invoice', + invoice_id: 53, + position: $position, + )); + + $mockClient->assertSent(CreateASubPositionRequest::class); + + expect($response->dto())->toBeInstanceOf(InvoicePositionDTO::class); +});