From 8e4468e5ad832e39a0bb308c8d659a23c0982e17 Mon Sep 17 00:00:00 2001 From: Kevin Cristiano <kcristiano@kcristiano.com> Date: Thu, 6 Feb 2020 07:35:22 -0500 Subject: [PATCH] civicrm release --- civicrm.php | 22 +- civicrm/CRM/ACL/BAO/ACL.php | 366 +-- civicrm/CRM/ACL/DAO/ACL.php | 2 +- civicrm/CRM/ACL/DAO/ACLCache.php | 10 +- civicrm/CRM/ACL/DAO/EntityRole.php | 2 +- .../CRM/ACL/Form/WordPress/Permissions.php | 2 +- civicrm/CRM/Activity/BAO/ICalendar.php | 3 +- civicrm/CRM/Activity/DAO/Activity.php | 2 +- civicrm/CRM/Activity/DAO/ActivityContact.php | 2 +- civicrm/CRM/Activity/Form/ActivityView.php | 2 +- civicrm/CRM/Activity/Form/Search.php | 19 +- civicrm/CRM/Admin/Form/Options.php | 2 +- civicrm/CRM/Admin/Page/ScheduleReminders.php | 4 +- civicrm/CRM/Api4/Services.php | 2 +- civicrm/CRM/Batch/DAO/Batch.php | 2 +- civicrm/CRM/Batch/DAO/EntityBatch.php | 2 +- civicrm/CRM/Campaign/DAO/Campaign.php | 2 +- civicrm/CRM/Campaign/DAO/CampaignGroup.php | 2 +- civicrm/CRM/Campaign/DAO/Survey.php | 2 +- .../CRM/Campaign/Form/Petition/Signature.php | 11 +- civicrm/CRM/Campaign/Form/Search.php | 18 +- civicrm/CRM/Campaign/Form/SurveyType.php | 4 +- civicrm/CRM/Case/BAO/Case.php | 7 +- civicrm/CRM/Case/DAO/Case.php | 2 +- civicrm/CRM/Case/DAO/CaseActivity.php | 2 +- civicrm/CRM/Case/DAO/CaseContact.php | 2 +- civicrm/CRM/Case/DAO/CaseType.php | 2 +- civicrm/CRM/Case/Form/ActivityView.php | 2 +- civicrm/CRM/Case/Form/Search.php | 3 +- civicrm/CRM/Case/Form/Task/Delete.php | 4 +- civicrm/CRM/Case/Page/DashBoard.php | 2 +- civicrm/CRM/Case/Page/Tab.php | 2 +- civicrm/CRM/Case/XMLRepository.php | 3 +- civicrm/CRM/Contact/BAO/Contact.php | 24 +- civicrm/CRM/Contact/BAO/Contact/Utils.php | 21 +- civicrm/CRM/Contact/BAO/Relationship.php | 26 +- civicrm/CRM/Contact/DAO/ACLContactCache.php | 2 +- civicrm/CRM/Contact/DAO/Contact.php | 19 +- civicrm/CRM/Contact/DAO/ContactType.php | 2 +- civicrm/CRM/Contact/DAO/DashboardContact.php | 2 +- civicrm/CRM/Contact/DAO/Group.php | 2 +- civicrm/CRM/Contact/DAO/GroupContact.php | 2 +- civicrm/CRM/Contact/DAO/GroupContactCache.php | 2 +- civicrm/CRM/Contact/DAO/GroupNesting.php | 2 +- civicrm/CRM/Contact/DAO/GroupOrganization.php | 2 +- civicrm/CRM/Contact/DAO/Relationship.php | 2 +- civicrm/CRM/Contact/DAO/RelationshipType.php | 2 +- civicrm/CRM/Contact/DAO/SavedSearch.php | 2 +- .../CRM/Contact/DAO/SubscriptionHistory.php | 2 +- civicrm/CRM/Contact/Form/Search.php | 16 +- civicrm/CRM/Contact/Form/Search/Advanced.php | 1 - .../CRM/Contact/Form/Search/Custom/Group.php | 20 +- civicrm/CRM/Contact/Form/Task/SaveSearch.php | 6 +- .../Contact/Form/Task/SaveSearch/Update.php | 9 + .../CRM/Contact/Page/View/UserDashBoard.php | 2 +- civicrm/CRM/Contact/Selector.php | 16 + civicrm/CRM/Contribute/BAO/Contribution.php | 7 +- civicrm/CRM/Contribute/DAO/Contribution.php | 2 +- .../CRM/Contribute/DAO/ContributionPage.php | 2 +- .../Contribute/DAO/ContributionProduct.php | 2 +- .../CRM/Contribute/DAO/ContributionRecur.php | 2 +- .../CRM/Contribute/DAO/ContributionSoft.php | 2 +- civicrm/CRM/Contribute/DAO/Premium.php | 2 +- .../CRM/Contribute/DAO/PremiumsProduct.php | 2 +- civicrm/CRM/Contribute/DAO/Product.php | 2 +- civicrm/CRM/Contribute/DAO/Widget.php | 2 +- .../Contribute/Form/CancelSubscription.php | 9 +- civicrm/CRM/Contribute/Form/Contribution.php | 7 +- .../Contribute/Form/Contribution/Confirm.php | 2 +- .../CRM/Contribute/Form/Contribution/Main.php | 8 +- .../CRM/Contribute/Form/ContributionBase.php | 31 +- .../CRM/Contribute/Form/ContributionPage.php | 2 +- .../Form/ContributionPage/Delete.php | 2 +- civicrm/CRM/Contribute/Form/Task/Delete.php | 2 +- .../Contribute/Form/UpdateSubscription.php | 8 +- civicrm/CRM/Core/BAO/CustomField.php | 6 +- civicrm/CRM/Core/BAO/CustomValueTable.php | 5 + civicrm/CRM/Core/BAO/Email.php | 12 +- civicrm/CRM/Core/BAO/Navigation.php | 9 +- civicrm/CRM/Core/BAO/Setting.php | 15 +- civicrm/CRM/Core/BAO/UFGroup.php | 7 +- civicrm/CRM/Core/BAO/UFMatch.php | 2 +- civicrm/CRM/Core/CodeGen/Specification.php | 2 + civicrm/CRM/Core/DAO/ActionLog.php | 2 +- civicrm/CRM/Core/DAO/ActionMapping.php | 2 +- civicrm/CRM/Core/DAO/ActionSchedule.php | 2 +- civicrm/CRM/Core/DAO/Address.php | 4 +- civicrm/CRM/Core/DAO/AddressFormat.php | 2 +- civicrm/CRM/Core/DAO/Cache.php | 2 +- civicrm/CRM/Core/DAO/Component.php | 2 +- civicrm/CRM/Core/DAO/Country.php | 2 +- civicrm/CRM/Core/DAO/County.php | 2 +- civicrm/CRM/Core/DAO/CustomField.php | 2 +- civicrm/CRM/Core/DAO/CustomGroup.php | 2 +- civicrm/CRM/Core/DAO/Dashboard.php | 2 +- civicrm/CRM/Core/DAO/Discount.php | 2 +- civicrm/CRM/Core/DAO/Domain.php | 2 +- civicrm/CRM/Core/DAO/Email.php | 2 +- civicrm/CRM/Core/DAO/EntityFile.php | 2 +- civicrm/CRM/Core/DAO/EntityTag.php | 2 +- civicrm/CRM/Core/DAO/Extension.php | 2 +- civicrm/CRM/Core/DAO/File.php | 2 +- civicrm/CRM/Core/DAO/IM.php | 2 +- civicrm/CRM/Core/DAO/Job.php | 2 +- civicrm/CRM/Core/DAO/JobLog.php | 2 +- civicrm/CRM/Core/DAO/LocBlock.php | 2 +- civicrm/CRM/Core/DAO/LocationType.php | 2 +- civicrm/CRM/Core/DAO/Log.php | 2 +- civicrm/CRM/Core/DAO/MailSettings.php | 2 +- civicrm/CRM/Core/DAO/Managed.php | 2 +- civicrm/CRM/Core/DAO/Mapping.php | 2 +- civicrm/CRM/Core/DAO/MappingField.php | 2 +- civicrm/CRM/Core/DAO/Menu.php | 2 +- civicrm/CRM/Core/DAO/MessageTemplate.php | 2 +- civicrm/CRM/Core/DAO/Navigation.php | 2 +- civicrm/CRM/Core/DAO/Note.php | 2 +- civicrm/CRM/Core/DAO/OpenID.php | 2 +- civicrm/CRM/Core/DAO/OptionGroup.php | 2 +- civicrm/CRM/Core/DAO/OptionValue.php | 2 +- civicrm/CRM/Core/DAO/Phone.php | 2 +- civicrm/CRM/Core/DAO/PreferencesDate.php | 2 +- civicrm/CRM/Core/DAO/PrevNextCache.php | 2 +- civicrm/CRM/Core/DAO/PrintLabel.php | 2 +- civicrm/CRM/Core/DAO/RecurringEntity.php | 2 +- civicrm/CRM/Core/DAO/Setting.php | 2 +- civicrm/CRM/Core/DAO/StateProvince.php | 2 +- civicrm/CRM/Core/DAO/StatusPreference.php | 2 +- civicrm/CRM/Core/DAO/SystemLog.php | 2 +- civicrm/CRM/Core/DAO/Tag.php | 2 +- civicrm/CRM/Core/DAO/Timezone.php | 2 +- civicrm/CRM/Core/DAO/UFField.php | 2 +- civicrm/CRM/Core/DAO/UFGroup.php | 2 +- civicrm/CRM/Core/DAO/UFJoin.php | 2 +- civicrm/CRM/Core/DAO/UFMatch.php | 2 +- civicrm/CRM/Core/DAO/Website.php | 2 +- civicrm/CRM/Core/DAO/WordReplacement.php | 2 +- civicrm/CRM/Core/DAO/Worldregion.php | 2 +- civicrm/CRM/Core/Form/Search.php | 14 + civicrm/CRM/Core/LegacyErrorHandler.php | 12 - civicrm/CRM/Core/ManagedEntities.php | 7 +- civicrm/CRM/Core/OptionGroup.php | 4 +- civicrm/CRM/Core/Page/Basic.php | 2 +- civicrm/CRM/Core/Payment/AuthorizeNet.php | 6 +- civicrm/CRM/Core/Payment/PayPalImpl.php | 65 +- civicrm/CRM/Cxn/DAO/Cxn.php | 2 +- civicrm/CRM/Dashlet/Page/AllCases.php | 2 +- civicrm/CRM/Dashlet/Page/CaseDashboard.php | 2 +- civicrm/CRM/Dashlet/Page/MyCases.php | 2 +- civicrm/CRM/Dedupe/DAO/Exception.php | 2 +- civicrm/CRM/Dedupe/DAO/Rule.php | 2 +- civicrm/CRM/Dedupe/DAO/RuleGroup.php | 2 +- civicrm/CRM/Event/Cart/DAO/Cart.php | 2 +- civicrm/CRM/Event/Cart/DAO/EventInCart.php | 2 +- civicrm/CRM/Event/DAO/Event.php | 2 +- civicrm/CRM/Event/DAO/Participant.php | 2 +- civicrm/CRM/Event/DAO/ParticipantPayment.php | 2 +- .../CRM/Event/DAO/ParticipantStatusType.php | 2 +- civicrm/CRM/Event/Form/ManageEvent/Delete.php | 5 +- civicrm/CRM/Event/Form/Registration.php | 2 +- .../CRM/Event/Form/Registration/Confirm.php | 3 + .../CRM/Event/Form/Registration/Register.php | 20 +- civicrm/CRM/Event/Form/Search.php | 46 +- civicrm/CRM/Event/Form/Task/Delete.php | 2 +- civicrm/CRM/Event/Page/ParticipantListing.php | 2 +- .../ParticipantListing/NameStatusAndDate.php | 2 +- civicrm/CRM/Export/BAO/ExportProcessor.php | 4 + civicrm/CRM/Extension/Container/Basic.php | 11 +- civicrm/CRM/Extension/Downloader.php | 6 +- civicrm/CRM/Extension/Mapper.php | 3 +- civicrm/CRM/Financial/DAO/Currency.php | 2 +- .../Financial/DAO/EntityFinancialAccount.php | 2 +- .../CRM/Financial/DAO/EntityFinancialTrxn.php | 2 +- .../CRM/Financial/DAO/FinancialAccount.php | 2 +- civicrm/CRM/Financial/DAO/FinancialItem.php | 2 +- civicrm/CRM/Financial/DAO/FinancialTrxn.php | 2 +- civicrm/CRM/Financial/DAO/FinancialType.php | 2 +- .../CRM/Financial/DAO/PaymentProcessor.php | 2 +- .../Financial/DAO/PaymentProcessorType.php | 2 +- civicrm/CRM/Financial/DAO/PaymentToken.php | 2 +- civicrm/CRM/Financial/Form/FinancialType.php | 4 +- civicrm/CRM/Financial/Page/FinancialType.php | 2 +- civicrm/CRM/Friend/DAO/Friend.php | 2 +- civicrm/CRM/Friend/Form.php | 4 +- civicrm/CRM/Grant/BAO/Grant.php | 4 +- civicrm/CRM/Grant/DAO/Grant.php | 2 +- civicrm/CRM/Grant/Form/Grant.php | 2 +- civicrm/CRM/Grant/Form/Search.php | 1 + civicrm/CRM/Grant/Form/Task/Delete.php | 2 +- civicrm/CRM/Grant/Form/Task/Update.php | 2 +- civicrm/CRM/Group/Form/Edit.php | 4 +- civicrm/CRM/Mailing/BAO/Recipients.php | 2 +- civicrm/CRM/Mailing/DAO/BouncePattern.php | 2 +- civicrm/CRM/Mailing/DAO/BounceType.php | 2 +- civicrm/CRM/Mailing/DAO/Mailing.php | 2 +- civicrm/CRM/Mailing/DAO/MailingAB.php | 2 +- civicrm/CRM/Mailing/DAO/MailingComponent.php | 2 +- civicrm/CRM/Mailing/DAO/MailingGroup.php | 2 +- civicrm/CRM/Mailing/DAO/MailingJob.php | 2 +- civicrm/CRM/Mailing/DAO/Recipients.php | 2 +- civicrm/CRM/Mailing/DAO/Spool.php | 2 +- civicrm/CRM/Mailing/DAO/TrackableURL.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Bounce.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Confirm.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Delivered.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Forward.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Opened.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Queue.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Reply.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Subscribe.php | 2 +- .../Mailing/Event/DAO/TrackableURLOpen.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php | 2 +- civicrm/CRM/Member/BAO/Membership.php | 38 +- civicrm/CRM/Member/DAO/Membership.php | 2 +- civicrm/CRM/Member/DAO/MembershipBlock.php | 2 +- civicrm/CRM/Member/DAO/MembershipLog.php | 2 +- civicrm/CRM/Member/DAO/MembershipPayment.php | 2 +- civicrm/CRM/Member/DAO/MembershipStatus.php | 2 +- civicrm/CRM/Member/DAO/MembershipType.php | 2 +- civicrm/CRM/Member/Form.php | 4 +- civicrm/CRM/Member/Form/Membership.php | 31 +- civicrm/CRM/Member/Form/MembershipRenewal.php | 2 +- civicrm/CRM/Member/Form/Task/Batch.php | 114 +- civicrm/CRM/Member/Form/Task/Delete.php | 2 +- civicrm/CRM/PCP/DAO/PCP.php | 2 +- civicrm/CRM/PCP/DAO/PCPBlock.php | 2 +- civicrm/CRM/Pledge/DAO/Pledge.php | 2 +- civicrm/CRM/Pledge/DAO/PledgeBlock.php | 2 +- civicrm/CRM/Pledge/DAO/PledgePayment.php | 2 +- civicrm/CRM/Pledge/Form/Payment.php | 4 +- civicrm/CRM/Pledge/Form/Pledge.php | 4 +- civicrm/CRM/Pledge/Form/Task/Delete.php | 2 +- civicrm/CRM/Price/BAO/LineItem.php | 24 +- civicrm/CRM/Price/BAO/PriceSet.php | 45 +- civicrm/CRM/Price/DAO/LineItem.php | 2 +- civicrm/CRM/Price/DAO/PriceField.php | 2 +- civicrm/CRM/Price/DAO/PriceFieldValue.php | 2 +- civicrm/CRM/Price/DAO/PriceSet.php | 2 +- civicrm/CRM/Price/DAO/PriceSetEntity.php | 2 +- civicrm/CRM/Price/Form/Field.php | 6 +- civicrm/CRM/Price/Form/Set.php | 10 +- civicrm/CRM/Profile/Form.php | 3 +- civicrm/CRM/Queue/DAO/QueueItem.php | 2 +- civicrm/CRM/Queue/Runner.php | 3 +- civicrm/CRM/Queue/Task.php | 8 +- civicrm/CRM/Report/BAO/Hook.php | 2 +- civicrm/CRM/Report/DAO/ReportInstance.php | 2 +- civicrm/CRM/Report/Form.php | 11 - civicrm/CRM/Report/Form/Activity.php | 184 +- civicrm/CRM/Report/Form/Case/Detail.php | 20 +- civicrm/CRM/Report/Form/Case/Summary.php | 21 +- civicrm/CRM/Report/Form/Instance.php | 49 +- civicrm/CRM/Report/Utils/Report.php | 4 + civicrm/CRM/SMS/DAO/Provider.php | 2 +- civicrm/CRM/UF/Form/Inline/Preview.php | 2 +- civicrm/CRM/UF/Form/Inline/PreviewById.php | 3 +- civicrm/CRM/Upgrade/Form.php | 2 + .../CRM/Upgrade/Incremental/SmartGroups.php | 2 +- .../Upgrade/Incremental/php/FiveTwenty.php | 2 +- .../Upgrade/Incremental/php/FiveTwentyTwo.php | 72 + .../Upgrade/Incremental/sql/5.21.0.mysql.tpl | 1 - .../Upgrade/Incremental/sql/5.21.1.mysql.tpl | 1 - .../Upgrade/Incremental/sql/5.21.2.mysql.tpl | 1 - .../Upgrade/Incremental/sql/5.22.0.mysql.tpl | 1 + .../Incremental/sql/5.22.alpha1.mysql.tpl | 1 + .../Incremental/sql/5.22.beta1.mysql.tpl | 1 + civicrm/CRM/Utils/Cache/Memcache.php | 2 +- civicrm/CRM/Utils/Cache/Memcached.php | 2 +- civicrm/CRM/Utils/Check/Component/Case.php | 2 +- civicrm/CRM/Utils/Check/Component/Schema.php | 5 +- civicrm/CRM/Utils/Hook.php | 13 +- civicrm/CRM/Utils/HttpClient.php | 6 +- civicrm/CRM/Utils/Mail.php | 6 +- civicrm/CRM/Utils/Mail/EmailProcessor.php | 11 +- civicrm/CRM/Utils/Migrate/Export.php | 6 +- civicrm/CRM/Utils/Migrate/Import.php | 4 +- civicrm/CRM/Utils/SQL/TempTable.php | 2 +- civicrm/CRM/Utils/System.php | 12 +- civicrm/CRM/Utils/System/WordPress.php | 10 +- civicrm/CRM/Utils/Type.php | 7 +- civicrm/CRM/Utils/Weight.php | 9 +- civicrm/CRM/Utils/Wrapper.php | 2 +- civicrm/Civi/API/Kernel.php | 18 +- civicrm/Civi/API/Provider/AdhocProvider.php | 6 +- .../API/Provider/MagicFunctionProvider.php | 6 +- .../Civi/API/Provider/ReflectionProvider.php | 6 +- .../API/Subscriber/DynamicFKAuthorization.php | 20 +- .../API/Subscriber/TransactionSubscriber.php | 14 +- .../Civi/API/Subscriber/WrapperAdapter.php | 2 +- civicrm/Civi/Angular/Manager.php | 4 +- civicrm/Civi/Angular/Page/Modules.php | 4 +- .../Api4/Action/CustomValue/GetFields.php | 2 +- civicrm/Civi/Api4/Country.php | 30 + .../Api4/Generic/BasicGetFieldsAction.php | 12 + .../Civi/Api4/Generic/DAOGetFieldsAction.php | 4 +- civicrm/Civi/Api4/Service/Spec/FieldSpec.php | 5 +- .../Provider/ContactCreationSpecProvider.php | 6 +- .../Civi/Api4/Service/Spec/SpecFormatter.php | 5 +- .../Civi/Api4/Service/Spec/SpecGatherer.php | 25 +- civicrm/Civi/Api4/StateProvince.php | 30 + civicrm/Civi/CCase/Analyzer.php | 15 +- civicrm/Civi/CCase/Events.php | 8 +- civicrm/Civi/Core/DAO/Event/PostDelete.php | 4 +- civicrm/Civi/Core/DAO/Event/PostUpdate.php | 2 +- civicrm/Civi/Core/DAO/Event/PreDelete.php | 2 +- civicrm/Civi/Core/Event/PostEvent.php | 4 +- civicrm/Civi/Core/Event/PreEvent.php | 4 +- .../Core/Event/UnhandledExceptionEvent.php | 4 +- civicrm/Civi/Core/Transaction/Frame.php | 12 +- civicrm/Civi/Core/Transaction/Manager.php | 4 +- civicrm/Civi/Payment/PropertyBag.php | 4 +- civicrm/Civi/Payment/System.php | 2 +- civicrm/Civi/Test/CiviTestListener.php | 2 +- civicrm/Civi/Test/Legacy/CiviTestListener.php | 2 +- civicrm/Civi/Test/Schema.php | 2 +- civicrm/ang/api4Explorer/Explorer.html | 2 +- civicrm/ang/api4Explorer/Explorer.js | 20 +- .../ang/crmCaseType/activityTypesTable.html | 2 +- civicrm/api/v3/System.php | 10 + civicrm/api/v3/utils.php | 99 +- civicrm/bin/ContributionProcessor.php | 6 +- civicrm/civicrm-version.php | 2 +- civicrm/composer.lock | 120 - .../CRM/Core/Payment/iATSService.php | 4 + .../CRM/Core/Payment/iATSServiceACHEFT.php | 4 + .../iatspayments/CRM/Iats/Form/Settings.php | 4 +- .../iatspayments/CRM/Iats/Page/iATSAdmin.php | 15 +- .../ext/iatspayments/CRM/Iats/Upgrader.php | 8 +- .../CRM/Iats/iATSServiceRequest.php | 4 +- civicrm/ext/iatspayments/README.md | 38 +- .../ext/iatspayments/api/v3/Job/Fapsquery.php | 6 +- .../api/v3/Job/Iatsrecurringcontributions.php | 2 +- .../iatspayments/api/v3/Job/Iatsreport.php | 6 +- .../iatspayments/api/v3/Job/Iatsverify.php | 6 +- civicrm/ext/iatspayments/iats.php | 6 +- civicrm/ext/iatspayments/info.xml | 10 +- .../ext/iatspayments/release-notes/1.7.1.md | 13 + civicrm/packages/DB.php | 13 +- civicrm/packages/DB/mysql.php | 2 + civicrm/packages/DB/mysqli.php | 2 + civicrm/packages/Net/UserAgent/Detect.php | 984 ------ civicrm/packages/Net/UserAgent/Detect/APC.php | 180 - civicrm/packages/Structures/Graph.php | 154 - .../Graph/Manipulator/AcyclicTest.php | 136 - .../Graph/Manipulator/TopologicalSorter.php | 153 - civicrm/packages/Structures/Graph/Node.php | 338 -- civicrm/packages/VERSIONS.php | 3 - civicrm/packages/remote-list.pear.php.net | 2 - civicrm/release-notes.md | 12 +- civicrm/release-notes/5.22.0.md | 447 +++ civicrm/sql/civicrm.mysql | 3 + civicrm/sql/civicrm_data.mysql | 2 +- civicrm/sql/civicrm_generated.mysql | 2 +- civicrm/templates/CRM/Group/Form/Edit.tpl | 10 +- .../templates/CRM/Member/Form/Membership.tpl | 8 +- civicrm/vendor/autoload.php | 2 +- civicrm/vendor/composer/autoload_psr4.php | 2 - civicrm/vendor/composer/autoload_real.php | 14 +- civicrm/vendor/composer/autoload_static.php | 22 +- civicrm/vendor/composer/installed.json | 124 - .../zendframework/zend-stdlib/.coveralls.yml | 3 - .../zendframework/zend-stdlib/CHANGELOG.md | 23 - .../zendframework/zend-stdlib/CONTRIBUTING.md | 229 -- .../zendframework/zend-stdlib/LICENSE.txt | 27 - .../zendframework/zend-stdlib/README.md | 15 - .../zendframework/zend-stdlib/composer.json | 44 - .../zend-stdlib/phpunit.xml.dist | 34 - .../zend-stdlib/phpunit.xml.travis | 34 - .../zend-stdlib/src/AbstractOptions.php | 176 - .../zend-stdlib/src/ArrayObject.php | 432 --- .../src/ArraySerializableInterface.php | 28 - .../zend-stdlib/src/ArrayStack.php | 33 - .../zend-stdlib/src/ArrayUtils.php | 335 -- .../src/ArrayUtils/MergeRemoveKey.php | 14 - .../src/ArrayUtils/MergeReplaceKey.php | 34 - .../ArrayUtils/MergeReplaceKeyInterface.php | 21 - .../zend-stdlib/src/CallbackHandler.php | 217 -- .../zend-stdlib/src/DateTime.php | 47 - .../zend-stdlib/src/DispatchableInterface.php | 22 - .../zend-stdlib/src/ErrorHandler.php | 115 - .../src/Exception/BadMethodCallException.php | 17 - .../src/Exception/DomainException.php | 17 - .../src/Exception/ExceptionInterface.php | 17 - .../Exception/ExtensionNotLoadedException.php | 17 - .../Exception/InvalidArgumentException.php | 17 - .../Exception/InvalidCallbackException.php | 17 - .../src/Exception/LogicException.php | 17 - .../src/Exception/RuntimeException.php | 17 - .../src/Extractor/ExtractionInterface.php | 21 - .../zendframework/zend-stdlib/src/Glob.php | 202 -- .../zend-stdlib/src/Guard/AllGuardsTrait.php | 20 - .../Guard/ArrayOrTraversableGuardTrait.php | 41 - .../zend-stdlib/src/Guard/EmptyGuardTrait.php | 35 - .../zend-stdlib/src/Guard/GuardUtils.php | 85 - .../zend-stdlib/src/Guard/NullGuardTrait.php | 35 - .../src/Hydrator/AbstractHydrator.php | 287 -- .../Hydrator/Aggregate/AggregateHydrator.php | 85 - .../src/Hydrator/Aggregate/ExtractEvent.php | 98 - .../src/Hydrator/Aggregate/HydrateEvent.php | 84 - .../Hydrator/Aggregate/HydratorListener.php | 80 - .../src/Hydrator/ArraySerializable.php | 83 - .../zend-stdlib/src/Hydrator/ClassMethods.php | 274 -- .../src/Hydrator/DelegatingHydrator.php | 57 - .../Hydrator/DelegatingHydratorFactory.php | 29 - .../src/Hydrator/Filter/FilterComposite.php | 196 -- .../src/Hydrator/Filter/FilterInterface.php | 21 - .../Filter/FilterProviderInterface.php | 19 - .../src/Hydrator/Filter/GetFilter.php | 27 - .../src/Hydrator/Filter/HasFilter.php | 27 - .../src/Hydrator/Filter/IsFilter.php | 27 - .../src/Hydrator/Filter/MethodMatchFilter.php | 48 - .../Filter/NumberOfParameterFilter.php | 49 - .../Filter/OptionalParametersFilter.php | 54 - .../src/Hydrator/FilterEnabledInterface.php | 63 - .../src/Hydrator/HydrationInterface.php | 22 - .../src/Hydrator/HydratorAwareInterface.php | 28 - .../src/Hydrator/HydratorAwareTrait.php | 47 - .../src/Hydrator/HydratorInterface.php | 16 - .../src/Hydrator/HydratorOptionsInterface.php | 19 - .../src/Hydrator/HydratorPluginManager.php | 74 - .../NamingStrategy/ArrayMapNamingStrategy.php | 51 - .../CompositeNamingStrategy.php | 64 - .../NamingStrategy/IdentityNamingStrategy.php | 29 - .../NamingStrategy/MapNamingStrategy.php | 89 - .../NamingStrategyInterface.php | 37 - .../UnderscoreNamingStrategy.php | 80 - .../NamingStrategyEnabledInterface.php | 44 - .../src/Hydrator/ObjectProperty.php | 110 - .../zend-stdlib/src/Hydrator/Reflection.php | 95 - .../src/Hydrator/Strategy/BooleanStrategy.php | 106 - .../src/Hydrator/Strategy/ClosureStrategy.php | 102 - .../Strategy/DateTimeFormatterStrategy.php | 80 - .../src/Hydrator/Strategy/DefaultStrategy.php | 35 - .../Strategy/Exception/ExceptionInterface.php | 14 - .../Exception/InvalidArgumentException.php | 14 - .../src/Hydrator/Strategy/ExplodeStrategy.php | 113 - .../Strategy/SerializableStrategy.php | 123 - .../src/Hydrator/Strategy/StrategyChain.php | 73 - .../Hydrator/Strategy/StrategyInterface.php | 34 - .../src/Hydrator/StrategyEnabledInterface.php | 48 - .../src/InitializableInterface.php | 23 - .../zend-stdlib/src/JsonSerializable.php | 28 - .../PhpLegacyCompatibility.php | 28 - .../zendframework/zend-stdlib/src/Message.php | 118 - .../zend-stdlib/src/MessageInterface.php | 44 - .../src/ParameterObjectInterface.php | 38 - .../zend-stdlib/src/Parameters.php | 115 - .../zend-stdlib/src/ParametersInterface.php | 86 - .../zend-stdlib/src/PriorityList.php | 274 -- .../zend-stdlib/src/PriorityQueue.php | 301 -- .../zendframework/zend-stdlib/src/Request.php | 15 - .../zend-stdlib/src/RequestInterface.php | 14 - .../zend-stdlib/src/Response.php | 15 - .../zend-stdlib/src/ResponseInterface.php | 14 - .../zend-stdlib/src/SplPriorityQueue.php | 91 - .../zend-stdlib/src/SplQueue.php | 55 - .../zend-stdlib/src/SplStack.php | 55 - .../zend-stdlib/src/StringUtils.php | 187 -- .../StringWrapper/AbstractStringWrapper.php | 269 -- .../zend-stdlib/src/StringWrapper/Iconv.php | 289 -- .../zend-stdlib/src/StringWrapper/Intl.php | 88 - .../src/StringWrapper/MbString.php | 121 - .../zend-stdlib/src/StringWrapper/Native.php | 134 - .../StringWrapper/StringWrapperInterface.php | 111 - .../src/compatibility/autoload.php | 14 - .../zend-validator/.coveralls.yml | 3 - .../zendframework/zend-validator/CHANGELOG.md | 27 - .../zend-validator/CONTRIBUTING.md | 229 -- .../zendframework/zend-validator/LICENSE.txt | 27 - .../zendframework/zend-validator/README.md | 9 - .../zend-validator/composer.json | 53 - .../zend-validator/phpunit.xml.dist | 35 - .../zend-validator/phpunit.xml.travis | 35 - .../zend-validator/src/AbstractValidator.php | 574 ---- .../zend-validator/src/Barcode.php | 183 -- .../src/Barcode/AbstractAdapter.php | 310 -- .../src/Barcode/AdapterInterface.php | 66 - .../zend-validator/src/Barcode/Codabar.php | 66 - .../zend-validator/src/Barcode/Code128.php | 448 --- .../zend-validator/src/Barcode/Code25.php | 24 - .../src/Barcode/Code25interleaved.php | 26 - .../zend-validator/src/Barcode/Code39.php | 60 - .../zend-validator/src/Barcode/Code39ext.php | 23 - .../zend-validator/src/Barcode/Code93.php | 80 - .../zend-validator/src/Barcode/Code93ext.php | 23 - .../zend-validator/src/Barcode/Ean12.php | 23 - .../zend-validator/src/Barcode/Ean13.php | 23 - .../zend-validator/src/Barcode/Ean14.php | 23 - .../zend-validator/src/Barcode/Ean18.php | 23 - .../zend-validator/src/Barcode/Ean2.php | 23 - .../zend-validator/src/Barcode/Ean5.php | 25 - .../zend-validator/src/Barcode/Ean8.php | 40 - .../zend-validator/src/Barcode/Gtin12.php | 23 - .../zend-validator/src/Barcode/Gtin13.php | 23 - .../zend-validator/src/Barcode/Gtin14.php | 23 - .../zend-validator/src/Barcode/Identcode.php | 41 - .../src/Barcode/Intelligentmail.php | 25 - .../zend-validator/src/Barcode/Issn.php | 90 - .../zend-validator/src/Barcode/Itf14.php | 23 - .../zend-validator/src/Barcode/Leitcode.php | 23 - .../zend-validator/src/Barcode/Planet.php | 23 - .../zend-validator/src/Barcode/Postnet.php | 23 - .../zend-validator/src/Barcode/Royalmail.php | 93 - .../zend-validator/src/Barcode/Sscc.php | 23 - .../zend-validator/src/Barcode/Upca.php | 23 - .../zend-validator/src/Barcode/Upce.php | 40 - .../zend-validator/src/Between.php | 181 - .../zend-validator/src/Bitwise.php | 192 -- .../zend-validator/src/Callback.php | 150 - .../zend-validator/src/CreditCard.php | 319 -- .../zendframework/zend-validator/src/Csrf.php | 374 --- .../zendframework/zend-validator/src/Date.php | 204 -- .../zend-validator/src/DateStep.php | 479 --- .../zend-validator/src/Db/AbstractDb.php | 330 -- .../zend-validator/src/Db/NoRecordExists.php | 39 - .../zend-validator/src/Db/RecordExists.php | 39 - .../zend-validator/src/Digits.php | 69 - .../zend-validator/src/EmailAddress.php | 549 ---- .../src/Exception/BadMethodCallException.php | 14 - .../src/Exception/ExceptionInterface.php | 14 - .../Exception/ExtensionNotLoadedException.php | 14 - .../Exception/InvalidArgumentException.php | 14 - .../InvalidMagicMimeFileException.php | 14 - .../src/Exception/RuntimeException.php | 14 - .../zend-validator/src/Explode.php | 210 -- .../zend-validator/src/File/Count.php | 251 -- .../zend-validator/src/File/Crc32.php | 128 - .../src/File/ExcludeExtension.php | 86 - .../src/File/ExcludeMimeType.php | 105 - .../zend-validator/src/File/Exists.php | 196 -- .../zend-validator/src/File/Extension.php | 220 -- .../zend-validator/src/File/FilesSize.php | 183 -- .../zend-validator/src/File/Hash.php | 175 - .../zend-validator/src/File/ImageSize.php | 392 --- .../zend-validator/src/File/IsCompressed.php | 93 - .../zend-validator/src/File/IsImage.php | 116 - .../zend-validator/src/File/Md5.php | 128 - .../zend-validator/src/File/MimeType.php | 422 --- .../zend-validator/src/File/NotExists.php | 89 - .../zend-validator/src/File/Sha1.php | 128 - .../zend-validator/src/File/Size.php | 368 --- .../zend-validator/src/File/Upload.php | 233 -- .../zend-validator/src/File/UploadFile.php | 123 - .../zend-validator/src/File/WordCount.php | 213 -- .../zend-validator/src/GreaterThan.php | 158 - .../zendframework/zend-validator/src/Hex.php | 48 - .../zend-validator/src/Hostname.php | 1585 --------- .../zend-validator/src/Hostname/Biz.php | 2903 ----------------- .../zend-validator/src/Hostname/Cn.php | 2185 ------------- .../zend-validator/src/Hostname/Com.php | 180 - .../zend-validator/src/Hostname/Jp.php | 725 ---- .../zendframework/zend-validator/src/Iban.php | 273 -- .../zend-validator/src/Identical.php | 202 -- .../zend-validator/src/InArray.php | 228 -- .../zendframework/zend-validator/src/Ip.php | 189 -- .../zend-validator/src/IsInstanceOf.php | 107 - .../zendframework/zend-validator/src/Isbn.php | 208 -- .../zend-validator/src/LessThan.php | 161 - .../zend-validator/src/NotEmpty.php | 301 -- .../zend-validator/src/Regex.php | 141 - .../zend-validator/src/Sitemap/Changefreq.php | 75 - .../zend-validator/src/Sitemap/Lastmod.php | 71 - .../zend-validator/src/Sitemap/Loc.php | 65 - .../zend-validator/src/Sitemap/Priority.php | 62 - .../zend-validator/src/StaticValidator.php | 60 - .../zendframework/zend-validator/src/Step.php | 155 - .../zend-validator/src/StringLength.php | 211 -- .../zend-validator/src/Timezone.php | 174 - .../Translator/TranslatorAwareInterface.php | 69 - .../src/Translator/TranslatorInterface.php | 21 - .../zendframework/zend-validator/src/Uri.php | 192 -- .../zend-validator/src/ValidatorChain.php | 324 -- .../zend-validator/src/ValidatorInterface.php | 38 - .../src/ValidatorPluginManager.php | 196 -- .../ValidatorPluginManagerAwareInterface.php | 27 - civicrm/xml/schema/ACL/Cache.xml | 5 + civicrm/xml/schema/Contact/Contact.xml | 17 + civicrm/xml/schema/Core/Address.xml | 2 + civicrm/xml/templates/dao.tpl | 4 +- civicrm/xml/version.xml | 2 +- includes/civicrm.basepage.php | 8 +- tests/phpunit/CiviWP/HookTest.php | 2 +- tests/phpunit/CiviWP/PhpVersionTest.php | 2 +- wp-rest/.editorconfig | 9 - wp-rest/Autoloader.php | 115 - wp-rest/Civi/Mailing-Hooks.php | 136 - wp-rest/Controller/AuthorizeIPN.php | 123 - wp-rest/Controller/Base.php | 107 - wp-rest/Controller/Cxn.php | 125 - wp-rest/Controller/Open.php | 129 - wp-rest/Controller/PayPalIPN.php | 134 - wp-rest/Controller/PxIPN.php | 139 - wp-rest/Controller/Rest.php | 522 --- wp-rest/Controller/Soap.php | 98 - wp-rest/Controller/Url.php | 214 -- wp-rest/Controller/Widget.php | 214 -- wp-rest/Endpoint/Endpoint-Interface.php | 35 - wp-rest/Plugin.php | 193 -- wp-rest/README.md | 59 - 598 files changed, 1890 insertions(+), 35207 deletions(-) create mode 100644 civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php delete mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl delete mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl delete mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl create mode 100644 civicrm/Civi/Api4/Country.php create mode 100644 civicrm/Civi/Api4/StateProvince.php create mode 100644 civicrm/ext/iatspayments/release-notes/1.7.1.md delete mode 100644 civicrm/packages/Net/UserAgent/Detect.php delete mode 100644 civicrm/packages/Net/UserAgent/Detect/APC.php delete mode 100644 civicrm/packages/Structures/Graph.php delete mode 100644 civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php delete mode 100644 civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php delete mode 100644 civicrm/packages/Structures/Graph/Node.php create mode 100644 civicrm/release-notes/5.22.0.md delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/README.md delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/composer.json delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Glob.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Message.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Request.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/Response.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/.coveralls.yml delete mode 100644 civicrm/vendor/zendframework/zend-validator/CHANGELOG.md delete mode 100644 civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md delete mode 100644 civicrm/vendor/zendframework/zend-validator/LICENSE.txt delete mode 100644 civicrm/vendor/zendframework/zend-validator/README.md delete mode 100644 civicrm/vendor/zendframework/zend-validator/composer.json delete mode 100644 civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist delete mode 100644 civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Between.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Bitwise.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Callback.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/CreditCard.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Csrf.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Date.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/DateStep.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Digits.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Explode.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Count.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Exists.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Extension.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Hash.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Md5.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Size.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/Upload.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hex.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hostname.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Iban.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Identical.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/InArray.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Ip.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Isbn.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/LessThan.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Regex.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Step.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/StringLength.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Timezone.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/Uri.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php delete mode 100644 civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php delete mode 100644 wp-rest/.editorconfig delete mode 100644 wp-rest/Autoloader.php delete mode 100644 wp-rest/Civi/Mailing-Hooks.php delete mode 100644 wp-rest/Controller/AuthorizeIPN.php delete mode 100644 wp-rest/Controller/Base.php delete mode 100644 wp-rest/Controller/Cxn.php delete mode 100644 wp-rest/Controller/Open.php delete mode 100644 wp-rest/Controller/PayPalIPN.php delete mode 100644 wp-rest/Controller/PxIPN.php delete mode 100644 wp-rest/Controller/Rest.php delete mode 100644 wp-rest/Controller/Soap.php delete mode 100644 wp-rest/Controller/Url.php delete mode 100644 wp-rest/Controller/Widget.php delete mode 100644 wp-rest/Endpoint/Endpoint-Interface.php delete mode 100644 wp-rest/Plugin.php delete mode 100644 wp-rest/README.md diff --git a/civicrm.php b/civicrm.php index 04988fc2fb..8df375a557 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /* Plugin Name: CiviCRM Description: CiviCRM - Growing and Sustaining Relationships -Version: 5.21.2 +Version: 5.22.0 Author: CiviCRM LLC Author URI: https://civicrm.org/ Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress @@ -121,17 +121,6 @@ if ( file_exists( CIVICRM_SETTINGS_PATH ) ) { // Prevent CiviCRM from rendering its own header define( 'CIVICRM_UF_HEAD', TRUE ); -/** - * Setting this to 'true' will replace all mailing URLs calls to 'extern/url.php' - * and 'extern/open.php' with their REST counterpart 'civicrm/v3/url' and 'civicrm/v3/open'. - * - * Use for test purposes, may affect mailing - * performance, see Plugin->replace_tracking_urls() method. - */ -if ( ! defined( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING' ) ) { - define( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING', false ); -} - /** * Define CiviCRM_For_WordPress Class. @@ -523,9 +512,6 @@ class CiviCRM_For_WordPress { include_once CIVICRM_PLUGIN_DIR . 'includes/civicrm.basepage.php'; $this->basepage = new CiviCRM_For_WordPress_Basepage; - // Include REST API autoloader class - require_once( CIVICRM_PLUGIN_DIR . 'wp-rest/Autoloader.php' ); - } @@ -650,12 +636,6 @@ class CiviCRM_For_WordPress { // Register hooks for clean URLs. $this->register_hooks_clean_urls(); - // Set up REST API. - CiviCRM_WP_REST\Autoloader::add_source( $source_path = trailingslashit( CIVICRM_PLUGIN_DIR . 'wp-rest' ) ); - - // Init REST API. - new CiviCRM_WP_REST\Plugin; - } diff --git a/civicrm/CRM/ACL/BAO/ACL.php b/civicrm/CRM/ACL/BAO/ACL.php index e55bf061d9..cee8e8869a 100644 --- a/civicrm/CRM/ACL/BAO/ACL.php +++ b/civicrm/CRM/ACL/BAO/ACL.php @@ -75,236 +75,6 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { return self::$_operation; } - /** - * Construct a WHERE clause to handle permissions to $object_* - * - * @deprecated - * - * @param array $tables - * Any tables that may be needed in the FROM. - * @param string $operation - * The operation being attempted. - * @param string $object_table - * The table of the object in question. - * @param int $object_id - * The ID of the object in question. - * @param int $acl_id - * If it's a grant/revoke operation, the ACL ID. - * @param bool $acl_role - * For grant operations, this flag determines if we're granting a single acl (false) or an entire group. - * - * @return string - * The WHERE clause, or 0 on failure - */ - public static function permissionClause( - &$tables, $operation, - $object_table = NULL, $object_id = NULL, - $acl_id = NULL, $acl_role = FALSE - ) { - CRM_Core_Error::deprecatedFunctionWarning('unknown - this is really old & not used in core'); - $dao = new CRM_ACL_DAO_ACL(); - - $t = [ - 'ACL' => self::getTableName(), - 'ACLRole' => 'civicrm_acl_role', - 'ACLEntityRole' => CRM_ACL_DAO_EntityRole::getTableName(), - 'Contact' => CRM_Contact_DAO_Contact::getTableName(), - 'Group' => CRM_Contact_DAO_Group::getTableName(), - 'GroupContact' => CRM_Contact_DAO_GroupContact::getTableName(), - ]; - - $contact_id = CRM_Core_Session::getLoggedInContactID(); - - $where = " {$t['ACL']}.operation = '" . CRM_Utils_Type::escape($operation, 'String') . "'"; - - /* Include clause if we're looking for a specific table/id permission */ - - if (!empty($object_table)) { - $where .= " AND ( {$t['ACL']}.object_table IS null - OR ({$t['ACL']}.object_table = '" . CRM_Utils_Type::escape($object_table, 'String') . "'"; - if (!empty($object_id)) { - $where .= " AND ({$t['ACL']}.object_id IS null - OR {$t['ACL']}.object_id = " . CRM_Utils_Type::escape($object_id, 'Integer') . ')'; - } - $where .= '))'; - } - - /* Include clause if we're granting an ACL or ACL Role */ - - if (!empty($acl_id)) { - $where .= " AND ({$t['ACL']}.acl_id IS null - OR {$t['ACL']}.acl_id = " . CRM_Utils_Type::escape($acl_id, 'Integer') . ')'; - if ($acl_role) { - $where .= " AND {$t['ACL']}.acl_table = '{$t['ACLRole']}'"; - } - else { - $where .= " AND {$t['ACL']}.acl_table = '{$t['ACL']}'"; - } - } - - $query = []; - - /* Query for permissions granted to all contacts in the domain */ - - $query[] = "SELECT {$t['ACL']}.*, 0 as override - FROM {$t['ACL']} - - WHERE {$t['ACL']}.entity_table = '{$t['Domain']}' - AND ($where)"; - - /* Query for permissions granted to all contacts through an ACL group */ - - $query[] = "SELECT {$t['ACL']}.*, 0 as override - FROM {$t['ACL']} - - INNER JOIN {$t['ACLEntityRole']} - ON ({$t['ACL']}.entity_table = '{$t['ACLRole']}' - AND {$t['ACL']}.entity_id = - {$t['ACLEntityRole']}.acl_role_id) - - INNER JOIN {$t['ACLRole']} - ON {$t['ACL']}.entity_id = - {$t['ACLRole']}.id - - WHERE {$t['ACLEntityRole']}.entity_table = - '{$t['Domain']}' - AND {$t['ACLRole']}.is_active = 1 - AND ($where)"; - - /* Query for permissions granted directly to the contact */ - - $query[] = "SELECT {$t['ACL']}.*, 1 as override - FROM {$t['ACL']} - - INNER JOIN {$t['Contact']} - ON ({$t['ACL']}.entity_table = '{$t['Contact']}' - AND {$t['ACL']}.entity_id = {$t['Contact']}.id) - - WHERE {$t['Contact']}.id = $contact_id - AND ($where)"; - - /* Query for permissions granted to the contact through an ACL group */ - - $query[] = "SELECT {$t['ACL']}.*, 1 as override - FROM {$t['ACL']} - - INNER JOIN {$t['ACLEntityRole']} - ON ({$t['ACL']}.entity_table = '{$t['ACLRole']}' - AND {$t['ACL']}.entity_id = - {$t['ACLEntityRole']}.acl_role_id) - - INNER JOIN {$t['ACLRole']} - ON {$t['ACL']}.entity_id = {$t['ACLRole']}.id - - WHERE {$t['ACLEntityRole']}.entity_table = - '{$t['Contact']}' - AND {$t['ACLRole']}.is_active = 1 - AND {$t['ACLEntityRole']}.entity_id = $contact_id - AND ($where)"; - - /* Query for permissions granted to the contact through a group */ - - $query[] = "SELECT {$t['ACL']}.*, 0 as override - FROM {$t['ACL']} - - INNER JOIN {$t['GroupContact']} - ON ({$t['ACL']}.entity_table = '{$t['Group']}' - AND {$t['ACL']}.entity_id = - {$t['GroupContact']}.group_id) - - WHERE ($where) - AND {$t['GroupContact']}.contact_id = $contact_id - AND {$t['GroupContact']}.status = 'Added')"; - - /* Query for permissions granted through an ACL group to a Contact - * group */ - - $query[] = "SELECT {$t['ACL']}.*, 0 as override - FROM {$t['ACL']} - - INNER JOIN {$t['ACLEntityRole']} - ON ({$t['ACL']}.entity_table = '{$t['ACLRole']}' - AND {$t['ACL']}.entity_id = - {$t['ACLEntityRole']}.acl_role_id) - - INNER JOIN {$t['ACLRole']} - ON {$t['ACL']}.entity_id = {$t['ACLRole']}.id - - INNER JOIN {$t['GroupContact']} - ON ({$t['ACLEntityRole']}.entity_table = - '{$t['Group']}' - AND {$t['ACLEntityRole']}.entity_id = - {$t['GroupContact']}.group_id) - - WHERE ($where) - AND {$t['ACLRole']}.is_active = 1 - AND {$t['GroupContact']}.contact_id = $contact_id - AND {$t['GroupContact']}.status = 'Added'"; - - $union = '(' . implode(') UNION DISTINCT (', $query) . ')'; - - $dao->query($union); - - $allow = [0]; - $deny = [0]; - $override = []; - - while ($dao->fetch()) { - /* Instant bypass for the following cases: - * 1) the rule governs all tables - * 2) the rule governs all objects in the table in question - * 3) the rule governs the specific object we want - */ - - if (empty($dao->object_table) || - ($dao->object_table == $object_table - && (empty($dao->object_id) - || $dao->object_id == $object_id - ) - ) - ) { - $clause = 1; - } - else { - /* Otherwise try to generate a clause for this rule */ - - $clause = self::getClause( - $dao->object_table, $dao->object_id, $tables - ); - - /* If the clause returned is null, then the rule is a blanket - * (id is null) on a table other than the one we're interested - * in. So skip it. */ - - if (empty($clause)) { - continue; - } - } - - /* Now we figure out if this is an allow or deny rule, and possibly - * a contact-level override */ - - if ($dao->deny) { - $deny[] = $clause; - } - else { - $allow[] = $clause; - - if ($dao->override) { - $override[] = $clause; - } - } - } - - $allows = '(' . implode(' OR ', $allow) . ')'; - $denies = '(' . implode(' OR ', $deny) . ')'; - if (!empty($override)) { - $denies = '(NOT (' . implode(' OR ', $override) . ") AND $denies)"; - } - - return "($allows AND NOT $denies)"; - } - /** * Given a table and id pair, return the filter clause * @@ -318,6 +88,8 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * @return string|null * WHERE-style clause to filter results, * or null if $table or $id is null + * + * @throws \CRM_Core_Exception */ public static function getClause($table, $id, &$tables) { $table = CRM_Utils_Type::escape($table, 'String'); @@ -372,15 +144,13 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * * @param int $contact_id * ID of a contact to search for. - * @param int $group_id - * ID of a group to search for. - * @param bool $aclRoles - * Should we include ACL Roles. * * @return array * Array of assoc. arrays of ACL rules + * + * @throws \CRM_Core_Exception */ - public static function &getACLs($contact_id = NULL, $group_id = NULL, $aclRoles = FALSE) { + public static function getACLs($contact_id = NULL) { $results = []; if (empty($contact_id)) { @@ -388,9 +158,6 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { } $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); - if ($group_id) { - $group_id = CRM_Utils_Type::escape($group_id, 'Integer'); - } $rule = new CRM_ACL_BAO_ACL(); @@ -399,26 +166,12 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { $c2g = CRM_Contact_BAO_GroupContact::getTableName(); $group = CRM_Contact_BAO_Group::getTableName(); - $query = " SELECT $acl.* - FROM $acl "; - - if (!empty($group_id)) { - $query .= " INNER JOIN $c2g - ON $acl.entity_id = $c2g.group_id - WHERE $acl.entity_table = '$group' - AND $acl.is_active = 1 - AND $c2g.group_id = $group_id"; + $query = " SELECT acl.* + FROM $acl acl"; - if (!empty($contact_id)) { - $query .= " AND $c2g.contact_id = $contact_id - AND $c2g.status = 'Added'"; - } - } - else { - if (!empty($contact_id)) { - $query .= " WHERE $acl.entity_table = '$contact' - AND $acl.entity_id = $contact_id"; - } + if (!empty($contact_id)) { + $query .= " WHERE acl.entity_table = '$contact' + AND acl.entity_id = $contact_id"; } $rule->query($query); @@ -427,9 +180,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { $results[$rule->id] = $rule->toArray(); } - if ($aclRoles) { - $results += self::getACLRoles($contact_id, $group_id); - } + $results += self::getACLRoles($contact_id); return $results; } @@ -439,17 +190,14 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * * @param int $contact_id * ID of a contact to search for. - * @param int $group_id - * ID of a group to search for. * * @return array * Array of assoc. arrays of ACL rules + * + * @throws \CRM_Core_Exception */ - public static function &getACLRoles($contact_id = NULL, $group_id = NULL) { + public static function getACLRoles($contact_id = NULL) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); - if ($group_id) { - $group_id = CRM_Utils_Type::escape($group_id, 'Integer'); - } $rule = new CRM_ACL_BAO_ACL(); @@ -457,36 +205,20 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { $aclRole = 'civicrm_acl_role'; $aclRoleJoin = CRM_ACL_DAO_EntityRole::getTableName(); $contact = CRM_Contact_BAO_Contact::getTableName(); - $c2g = CRM_Contact_BAO_GroupContact::getTableName(); - $group = CRM_Contact_BAO_Group::getTableName(); - $query = " SELECT $acl.* - FROM $acl + $query = " SELECT acl.* + FROM $acl acl INNER JOIN civicrm_option_group og ON og.name = 'acl_role' INNER JOIN civicrm_option_value ov - ON $acl.entity_table = '$aclRole' + ON acl.entity_table = '$aclRole' AND ov.option_group_id = og.id - AND $acl.entity_id = ov.value"; - - if (!empty($group_id)) { - $query .= " INNER JOIN $c2g - ON $acl.entity_id = $c2g.group_id - WHERE $acl.entity_table = '$group' - AND $acl.is_active = 1 - AND $c2g.group_id = $group_id"; - - if (!empty($contact_id)) { - $query .= " AND $c2g.contact_id = $contact_id - AND $c2g.status = 'Added'"; - } - } - else { - if (!empty($contact_id)) { - $query .= " WHERE $acl.entity_table = '$contact' - AND $acl.is_active = 1 - AND $acl.entity_id = $contact_id"; - } + AND acl.entity_id = ov.value"; + + if (!empty($contact_id)) { + $query .= " WHERE acl.entity_table = '$contact' + AND acl.is_active = 1 + AND acl.entity_id = $contact_id"; } $results = []; @@ -510,8 +242,9 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * * @return array * Assoc array of ACL rules + * @throws \CRM_Core_Exception */ - public static function &getGroupACLs($contact_id, $aclRoles = FALSE) { + public static function getGroupACLs($contact_id, $aclRoles = FALSE) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $rule = new CRM_ACL_BAO_ACL(); @@ -523,13 +256,13 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { if ($contact_id) { $query = " -SELECT $acl.* - FROM $acl - INNER JOIN $c2g - ON $acl.entity_id = $c2g.group_id - WHERE $acl.entity_table = '$group' - AND $c2g.contact_id = $contact_id - AND $c2g.status = 'Added'"; +SELECT acl.* + FROM $acl acl + INNER JOIN $c2g group_contact + ON acl.entity_id = group_contact.group_id + WHERE acl.entity_table = '$group' + AND group_contact.contact_id = $contact_id + AND group_contact.status = 'Added'"; $rule->query($query); @@ -554,8 +287,9 @@ SELECT $acl.* * * @return array * Array of assoc. arrays of ACL rules + * @throws \CRM_Core_Exception */ - public static function &getGroupACLRoles($contact_id) { + public static function getGroupACLRoles($contact_id) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $rule = new CRM_ACL_BAO_ACL(); @@ -567,23 +301,23 @@ SELECT $acl.* $c2g = CRM_Contact_BAO_GroupContact::getTableName(); $group = CRM_Contact_BAO_Group::getTableName(); - $query = " SELECT $acl.* - FROM $acl + $query = " SELECT acl.* + FROM $acl acl INNER JOIN civicrm_option_group og ON og.name = 'acl_role' INNER JOIN civicrm_option_value ov - ON $acl.entity_table = '$aclRole' + ON acl.entity_table = '$aclRole' AND ov.option_group_id = og.id - AND $acl.entity_id = ov.value + AND acl.entity_id = ov.value AND ov.is_active = 1 INNER JOIN $aclER - ON $aclER.acl_role_id = $acl.entity_id + ON $aclER.acl_role_id = acl.entity_id AND $aclER.is_active = 1 INNER JOIN $c2g ON $aclER.entity_id = $c2g.group_id AND $aclER.entity_table = 'civicrm_group' - WHERE $acl.entity_table = '$aclRole' - AND $acl.is_active = 1 + WHERE acl.entity_table = '$aclRole' + AND acl.is_active = 1 AND $c2g.contact_id = $contact_id AND $c2g.status = 'Added'"; @@ -604,10 +338,10 @@ SELECT $acl.* } $query = " -SELECT $acl.* - FROM $acl - WHERE $acl.entity_id IN ( $roles ) - AND $acl.entity_table = 'civicrm_acl_role' +SELECT acl.* + FROM $acl acl + WHERE acl.entity_id IN ( $roles ) + AND acl.entity_table = 'civicrm_acl_role' "; $rule->query($query); @@ -626,12 +360,14 @@ SELECT $acl.* * * @return array * Assoc array of ACL rules + * + * @throws \CRM_Core_Exception */ - public static function &getAllByContact($contact_id) { + public static function getAllByContact($contact_id) { $result = []; /* First, the contact-specific ACLs, including ACL Roles */ - $result += self::getACLs($contact_id, NULL, TRUE); + $result += self::getACLs($contact_id); /* Then, all ACLs granted through group membership */ $result += self::getGroupACLs($contact_id, TRUE); @@ -644,7 +380,7 @@ SELECT $acl.* * * @return CRM_ACL_DAO_ACL */ - public static function create(&$params) { + public static function create($params) { $dao = new CRM_ACL_DAO_ACL(); $dao->copyValues($params); $dao->save(); @@ -653,7 +389,7 @@ SELECT $acl.* /** * @param array $params - * @param $defaults + * @param array $defaults */ public static function retrieve(&$params, &$defaults) { CRM_Core_DAO::commonRetrieve('CRM_ACL_DAO_ACL', $params, $defaults); diff --git a/civicrm/CRM/ACL/DAO/ACL.php b/civicrm/CRM/ACL/DAO/ACL.php index d762919f44..e9b76b01d3 100644 --- a/civicrm/CRM/ACL/DAO/ACL.php +++ b/civicrm/CRM/ACL/DAO/ACL.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/ACL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5dae38d9d5e128062b634a01ccfad2b0) + * (GenCodeChecksum:3b22e42a53e4863614014323e5b98526) */ /** diff --git a/civicrm/CRM/ACL/DAO/ACLCache.php b/civicrm/CRM/ACL/DAO/ACLCache.php index e18812036f..49daef0619 100644 --- a/civicrm/CRM/ACL/DAO/ACLCache.php +++ b/civicrm/CRM/ACL/DAO/ACLCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/ACLCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a7bccfc35714fdcf0fdb6f4cd24842bd) + * (GenCodeChecksum:6c22da308c28e1b6766087c3073112a0) */ /** @@ -215,6 +215,14 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO { 'localizable' => FALSE, 'sig' => 'civicrm_acl_cache::0::acl_id', ], + 'index_modified_date' => [ + 'name' => 'index_modified_date', + 'field' => [ + 0 => 'modified_date', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_acl_cache::0::modified_date', + ], ]; return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; } diff --git a/civicrm/CRM/ACL/DAO/EntityRole.php b/civicrm/CRM/ACL/DAO/EntityRole.php index 01de96bcf2..151848107d 100644 --- a/civicrm/CRM/ACL/DAO/EntityRole.php +++ b/civicrm/CRM/ACL/DAO/EntityRole.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/EntityRole.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0dc853871318ba5645e0f8f12aac58f6) + * (GenCodeChecksum:72c64ec6e3120ef60450b00939325d62) */ /** diff --git a/civicrm/CRM/ACL/Form/WordPress/Permissions.php b/civicrm/CRM/ACL/Form/WordPress/Permissions.php index f0a449d245..f19ff16c6a 100644 --- a/civicrm/CRM/ACL/Form/WordPress/Permissions.php +++ b/civicrm/CRM/ACL/Form/WordPress/Permissions.php @@ -38,7 +38,7 @@ class CRM_ACL_Form_WordPress_Permissions extends CRM_Core_Form { } foreach ($wp_roles->role_names as $role => $name) { // Don't show the permissions options for administrator, as they have all permissions - if ( is_multisite() OR $role !== 'administrator') { + if ($role !== 'administrator') { $roleObj = $wp_roles->get_role($role); if (!empty($roleObj->capabilities)) { foreach ($roleObj->capabilities as $ckey => $cname) { diff --git a/civicrm/CRM/Activity/BAO/ICalendar.php b/civicrm/CRM/Activity/BAO/ICalendar.php index 8874bd6ebe..88b7676e1d 100644 --- a/civicrm/CRM/Activity/BAO/ICalendar.php +++ b/civicrm/CRM/Activity/BAO/ICalendar.php @@ -21,7 +21,8 @@ class CRM_Activity_BAO_ICalendar { /** - * @var object The activity for which we're generating ical. + * @var \CRM_Activity_BAO_ICalendar + * The activity for which we're generating ical. */ protected $activity; diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php index e787d04427..042eb4cb04 100644 --- a/civicrm/CRM/Activity/DAO/Activity.php +++ b/civicrm/CRM/Activity/DAO/Activity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/Activity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8bb645a4017aea0b392b1ff3f3050137) + * (GenCodeChecksum:a6494c64eb7395b2221ab118a480c951) */ /** diff --git a/civicrm/CRM/Activity/DAO/ActivityContact.php b/civicrm/CRM/Activity/DAO/ActivityContact.php index 79dd2a1827..71039019af 100644 --- a/civicrm/CRM/Activity/DAO/ActivityContact.php +++ b/civicrm/CRM/Activity/DAO/ActivityContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/ActivityContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ba1318187b6445db9a639c8476eb683e) + * (GenCodeChecksum:51894f9aa59e1fed6591b4aa3632e6a6) */ /** diff --git a/civicrm/CRM/Activity/Form/ActivityView.php b/civicrm/CRM/Activity/Form/ActivityView.php index f87b928126..422e30eef3 100644 --- a/civicrm/CRM/Activity/Form/ActivityView.php +++ b/civicrm/CRM/Activity/Form/ActivityView.php @@ -33,7 +33,7 @@ class CRM_Activity_Form_ActivityView extends CRM_Core_Form { if ($activityId && !CRM_Activity_BAO_Activity::checkPermission($activityId, CRM_Core_Action::VIEW) ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $session = CRM_Core_Session::singleton(); diff --git a/civicrm/CRM/Activity/Form/Search.php b/civicrm/CRM/Activity/Form/Search.php index 7239fca7fb..57a35aef82 100644 --- a/civicrm/CRM/Activity/Form/Search.php +++ b/civicrm/CRM/Activity/Form/Search.php @@ -75,6 +75,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; + $this->sortNameOnly = TRUE; parent::preProcess(); @@ -84,13 +85,6 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { } } - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } - $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues); $selector = new CRM_Activity_Selector_Search($this->_queryParams, $this->_action, @@ -109,7 +103,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $controller = new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::TRANSFER, @@ -205,13 +199,6 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { return; } - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } - $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues); $selector = new CRM_Activity_Selector_Search($this->_queryParams, @@ -230,7 +217,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $controller = new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::SESSION, diff --git a/civicrm/CRM/Admin/Form/Options.php b/civicrm/CRM/Admin/Form/Options.php index 0f7db78109..48f0d9ac87 100644 --- a/civicrm/CRM/Admin/Form/Options.php +++ b/civicrm/CRM/Admin/Form/Options.php @@ -94,7 +94,7 @@ class CRM_Admin_Form_Options extends CRM_Admin_Form { if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) { $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id'); if (CRM_Core_Config::domainID() != $domainID) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } } diff --git a/civicrm/CRM/Admin/Page/ScheduleReminders.php b/civicrm/CRM/Admin/Page/ScheduleReminders.php index dc25733ccc..524031760e 100644 --- a/civicrm/CRM/Admin/Page/ScheduleReminders.php +++ b/civicrm/CRM/Admin/Page/ScheduleReminders.php @@ -113,12 +113,14 @@ class CRM_Admin_Page_ScheduleReminders extends CRM_Core_Page_Basic { * Browse all Scheduled Reminders settings. * * @param null $action + * + * @throws \CRM_Core_Exception */ public function browse($action = NULL) { //CRM-16777: Do not permit access to user, for page 'Administer->Communication->Schedule Reminder', //when do not have 'administer CiviCRM' permission. if (!CRM_Core_Permission::check('administer CiviCRM')) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } // Get list of configured reminders diff --git a/civicrm/CRM/Api4/Services.php b/civicrm/CRM/Api4/Services.php index 95fd4a2202..ec8190348c 100644 --- a/civicrm/CRM/Api4/Services.php +++ b/civicrm/CRM/Api4/Services.php @@ -86,7 +86,7 @@ class CRM_Api4_Services { $container->addResource($resource); foreach (glob("$path*.php") as $file) { $matches = []; - preg_match('/(\w*).php/', $file, $matches); + preg_match('/(\w*)\.php$/', $file, $matches); $serviceName = $namespace . array_pop($matches); $serviceClass = new \ReflectionClass($serviceName); if ($serviceClass->isInstantiable()) { diff --git a/civicrm/CRM/Batch/DAO/Batch.php b/civicrm/CRM/Batch/DAO/Batch.php index 9d6876ece1..cfd39dc2c0 100644 --- a/civicrm/CRM/Batch/DAO/Batch.php +++ b/civicrm/CRM/Batch/DAO/Batch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Batch/Batch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d0986aaf599e8243517d4a2912a67f94) + * (GenCodeChecksum:ec065dd0aaa794ee44d5fb2216deac3d) */ /** diff --git a/civicrm/CRM/Batch/DAO/EntityBatch.php b/civicrm/CRM/Batch/DAO/EntityBatch.php index 900e79ae7b..39a106071a 100644 --- a/civicrm/CRM/Batch/DAO/EntityBatch.php +++ b/civicrm/CRM/Batch/DAO/EntityBatch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Batch/EntityBatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cf1316450cf80689399a7f55bb3b4261) + * (GenCodeChecksum:d086b52bbce9c11d89087feea79f1bf0) */ /** diff --git a/civicrm/CRM/Campaign/DAO/Campaign.php b/civicrm/CRM/Campaign/DAO/Campaign.php index ee9d956c32..a4679965b7 100644 --- a/civicrm/CRM/Campaign/DAO/Campaign.php +++ b/civicrm/CRM/Campaign/DAO/Campaign.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Campaign.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ab19aa73d01b529988c178673fc38d58) + * (GenCodeChecksum:f69a15a0b3ca2db78b4981c73b7d1757) */ /** diff --git a/civicrm/CRM/Campaign/DAO/CampaignGroup.php b/civicrm/CRM/Campaign/DAO/CampaignGroup.php index d6ec30117c..3f3e3a5a53 100644 --- a/civicrm/CRM/Campaign/DAO/CampaignGroup.php +++ b/civicrm/CRM/Campaign/DAO/CampaignGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/CampaignGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a31197c38f4456b239242d274d38a148) + * (GenCodeChecksum:5b64d5b0724ee405d4ec21c7a1ce7372) */ /** diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php index 7b555d9b7a..fc324d9cce 100644 --- a/civicrm/CRM/Campaign/DAO/Survey.php +++ b/civicrm/CRM/Campaign/DAO/Survey.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Survey.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:66d74656d01b2d56d4d4861203ef2fdd) + * (GenCodeChecksum:f7cedbe0c777cf7b99c543e80ff5cf0b) */ /** diff --git a/civicrm/CRM/Campaign/Form/Petition/Signature.php b/civicrm/CRM/Campaign/Form/Petition/Signature.php index eed5321e93..4e72b62cf9 100644 --- a/civicrm/CRM/Campaign/Form/Petition/Signature.php +++ b/civicrm/CRM/Campaign/Form/Petition/Signature.php @@ -40,7 +40,8 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form { /** * The contact type * - * @var string ("Individual"/"Household"/"Organization"). Never been tested for something else than Individual + * @var string + * ("Individual"/"Household"/"Organization"). Never been tested for something else than Individual */ protected $_ctype = 'Individual'; @@ -160,7 +161,7 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form { //some sanity checks if (!$this->_surveyId) { - CRM_Core_Error::fatal('Petition id is not valid. (it needs a "sid" in the url).'); + CRM_Core_Error::statusBounce('Petition id is not valid. (it needs a "sid" in the url).'); return; } //check petition is valid and active @@ -168,10 +169,10 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form { $this->petition = []; CRM_Campaign_BAO_Survey::retrieve($params, $this->petition); if (empty($this->petition)) { - CRM_Core_Error::fatal('Petition doesn\'t exist.'); + CRM_Core_Error::statusBounce('Petition doesn\'t exist.'); } if ($this->petition['is_active'] == 0) { - CRM_Core_Error::fatal('Petition is no longer active.'); + CRM_Core_Error::statusBounce('Petition is no longer active.'); } //get userID from session @@ -197,7 +198,7 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form { $this->_contactProfileFields = CRM_Core_BAO_UFGroup::getFields($this->_contactProfileId, FALSE, CRM_Core_Action::ADD); } if (!isset($this->_contactProfileFields['email-Primary'])) { - CRM_Core_Error::fatal('The contact profile needs to contain the primary email address field'); + CRM_Core_Error::statusBounce('The contact profile needs to contain the primary email address field'); } $ufJoinParams['weight'] = 1; diff --git a/civicrm/CRM/Campaign/Form/Search.php b/civicrm/CRM/Campaign/Form/Search.php index e8d5237bca..0ec2990d54 100644 --- a/civicrm/CRM/Campaign/Form/Search.php +++ b/civicrm/CRM/Campaign/Form/Search.php @@ -106,13 +106,6 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { $this->set('force', 0); } - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } - //get the voter clause. $voterClause = $this->voterClause(); @@ -135,7 +128,7 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { $controller = new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::TRANSFER, @@ -260,13 +253,6 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { return; } - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } - //get the voter clause. $voterClause = $this->voterClause(); @@ -288,7 +274,7 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { $controller = new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::SESSION, diff --git a/civicrm/CRM/Campaign/Form/SurveyType.php b/civicrm/CRM/Campaign/Form/SurveyType.php index f6b37abe46..85a3ff3ba3 100644 --- a/civicrm/CRM/Campaign/Form/SurveyType.php +++ b/civicrm/CRM/Campaign/Form/SurveyType.php @@ -44,6 +44,8 @@ class CRM_Campaign_Form_SurveyType extends CRM_Admin_Form { /** * Set variables up before form is built. + * + * @throws \CRM_Core_Exception */ public function preProcess() { $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this); @@ -66,7 +68,7 @@ class CRM_Campaign_Form_SurveyType extends CRM_Admin_Form { if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) { $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id'); if (CRM_Core_Config::domainID() != $domainID) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } } diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index 76f74d496d..4e1615e9ef 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -1141,7 +1141,7 @@ SELECT civicrm_case.id, case_status.label AS case_status, status_id, civicrm_cas $values = []; $query = <<<HERESQL - SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_b_a as role, crt.name_b_a as role_name, ce.email, cp.phone + SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_b_a as role, crt.name_b_a as role_name, crt.name_a_b as role_name_reverse, ce.email, cp.phone FROM civicrm_relationship cr JOIN civicrm_relationship_type crt ON crt.id = cr.relationship_type_id @@ -1158,7 +1158,7 @@ SELECT civicrm_case.id, case_status.label AS case_status, status_id, civicrm_cas AND cr.is_active AND cc.id NOT IN (%2) UNION - SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_a_b as role, crt.name_a_b as role_name, ce.email, cp.phone + SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_a_b as role, crt.name_a_b as role_name, crt.name_b_a as role_name_reverse, ce.email, cp.phone FROM civicrm_relationship cr JOIN civicrm_relationship_type crt ON crt.id = cr.relationship_type_id @@ -1196,7 +1196,8 @@ HERESQL; 'phone' => $dao->phone, ]; // Add more info about the role (creator, manager) - $role = CRM_Utils_Array::value($dao->role_name, $caseRoles); + // The XML historically has the reverse direction, so look up reverse. + $role = CRM_Utils_Array::value($dao->role_name_reverse, $caseRoles); if ($role) { unset($role['name']); $details += $role; diff --git a/civicrm/CRM/Case/DAO/Case.php b/civicrm/CRM/Case/DAO/Case.php index 65127b31a5..9fa6b5aaf2 100644 --- a/civicrm/CRM/Case/DAO/Case.php +++ b/civicrm/CRM/Case/DAO/Case.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/Case.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4fa22b57b48574c5e6643b13964140d4) + * (GenCodeChecksum:0ff4c2d50e9ecac06f6bae975fb64aba) */ /** diff --git a/civicrm/CRM/Case/DAO/CaseActivity.php b/civicrm/CRM/Case/DAO/CaseActivity.php index 8a06ae47e9..c2a0755fb6 100644 --- a/civicrm/CRM/Case/DAO/CaseActivity.php +++ b/civicrm/CRM/Case/DAO/CaseActivity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseActivity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:57e9c421eca2efb62ee2eed396c19cd6) + * (GenCodeChecksum:555cd1b20eead1100aa77725a7dd2057) */ /** diff --git a/civicrm/CRM/Case/DAO/CaseContact.php b/civicrm/CRM/Case/DAO/CaseContact.php index ec1a9eb29d..b9050ee694 100644 --- a/civicrm/CRM/Case/DAO/CaseContact.php +++ b/civicrm/CRM/Case/DAO/CaseContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:57c510f7c1c0eb55f8452035a5ecc472) + * (GenCodeChecksum:882177c38c507306b2a456e4cf0303fa) */ /** diff --git a/civicrm/CRM/Case/DAO/CaseType.php b/civicrm/CRM/Case/DAO/CaseType.php index ffd67bb122..990d3337cb 100644 --- a/civicrm/CRM/Case/DAO/CaseType.php +++ b/civicrm/CRM/Case/DAO/CaseType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a1c00e097da3683e7bb131894bf1aa6d) + * (GenCodeChecksum:dfde3b4da5d2f8fd1d41d48398c86e46) */ /** diff --git a/civicrm/CRM/Case/Form/ActivityView.php b/civicrm/CRM/Case/Form/ActivityView.php index 9d4da77198..6193357e08 100644 --- a/civicrm/CRM/Case/Form/ActivityView.php +++ b/civicrm/CRM/Case/Form/ActivityView.php @@ -37,7 +37,7 @@ class CRM_Case_Form_ActivityView extends CRM_Core_Form { if ($activityID && !CRM_Activity_BAO_Activity::checkPermission($activityID, CRM_Core_Action::VIEW) ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->assign('contactID', $contactID); diff --git a/civicrm/CRM/Case/Form/Search.php b/civicrm/CRM/Case/Form/Search.php index ffad397c9f..e682068121 100644 --- a/civicrm/CRM/Case/Form/Search.php +++ b/civicrm/CRM/Case/Form/Search.php @@ -62,7 +62,7 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { //check for civicase access. if (!CRM_Case_BAO_Case::accessCiviCase()) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } //validate case configuration. @@ -79,6 +79,7 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; + $this->sortNameOnly = TRUE; parent::preProcess(); diff --git a/civicrm/CRM/Case/Form/Task/Delete.php b/civicrm/CRM/Case/Form/Task/Delete.php index 5b82fd731e..93909b58eb 100644 --- a/civicrm/CRM/Case/Form/Task/Delete.php +++ b/civicrm/CRM/Case/Form/Task/Delete.php @@ -37,10 +37,12 @@ class CRM_Case_Form_Task_Delete extends CRM_Case_Form_Task { /** * Build all the data structures needed to build the form. + * + * @throws \CRM_Core_Exception */ public function preProcess() { if (!CRM_Core_Permission::checkActionPermission('CiviCase', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); } diff --git a/civicrm/CRM/Case/Page/DashBoard.php b/civicrm/CRM/Case/Page/DashBoard.php index 5a2d22c304..856837855a 100644 --- a/civicrm/CRM/Case/Page/DashBoard.php +++ b/civicrm/CRM/Case/Page/DashBoard.php @@ -30,7 +30,7 @@ class CRM_Case_Page_DashBoard extends CRM_Core_Page { public function preProcess() { //check for civicase access. if (!CRM_Case_BAO_Case::accessCiviCase()) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } //validate case configuration. diff --git a/civicrm/CRM/Case/Page/Tab.php b/civicrm/CRM/Case/Page/Tab.php index bcecfe10e1..e89132c3de 100644 --- a/civicrm/CRM/Case/Page/Tab.php +++ b/civicrm/CRM/Case/Page/Tab.php @@ -53,7 +53,7 @@ class CRM_Case_Page_Tab extends CRM_Core_Page { if (!CRM_Core_Permission::check('access all cases and activities')) { $userCases = CRM_Case_BAO_Case::getCases(FALSE, ['type' => 'any']); if (!array_key_exists($this->_id, $userCases)) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } } } diff --git a/civicrm/CRM/Case/XMLRepository.php b/civicrm/CRM/Case/XMLRepository.php index 61006f1699..19ed92f2d0 100644 --- a/civicrm/CRM/Case/XMLRepository.php +++ b/civicrm/CRM/Case/XMLRepository.php @@ -22,7 +22,8 @@ class CRM_Case_XMLRepository { private static $singleton; /** - * @var array<String,SimpleXMLElement> + * @var array + * <String,SimpleXMLElement> */ protected $xml = []; diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index 51e8334a05..a392f89ac9 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -98,14 +98,14 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { * @param array $params * (reference) an assoc array of name/value pairs. * - * @return CRM_Contact_BAO_Contact|CRM_Core_Error|NULL + * @return CRM_Contact_DAO_Contact|CRM_Core_Error|NULL * Created or updated contact object or error object. * (error objects are being phased out in favour of exceptions) * @throws \Exception */ public static function add(&$params) { $contact = new CRM_Contact_DAO_Contact(); - + $contactID = CRM_Utils_Array::value('contact_id', $params); if (empty($params)) { return NULL; } @@ -147,7 +147,7 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { $allNull = $contact->copyValues($params); - $contact->id = CRM_Utils_Array::value('contact_id', $params); + $contact->id = $contactID; if ($contact->contact_type === 'Individual') { $allNull = FALSE; @@ -186,7 +186,7 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { // Even if we don't need $employerId, it's important to call getFieldValue() before // the contact is saved because we want the existing value to be cached. // createCurrentEmployerRelationship() needs the old value not the updated one. CRM-10788 - $employerId = empty($contact->id) ? NULL : CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contact->id, 'employer_id'); + $employerId = (!$contactID || $contact->contact_type !== 'Individual') ? NULL : CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contact->id, 'employer_id'); if (!$allNull) { $contact->save(); @@ -215,8 +215,8 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { } } - // Update cached employer name. - if ($contact->contact_type === 'Organization') { + // Update cached employer name if the name of an existing organization is being updated. + if ($contact->contact_type === 'Organization' && !empty($params['organization_name']) && $contactID) { CRM_Contact_BAO_Contact_Utils::updateCurrentEmployer($contact->id); } @@ -393,16 +393,6 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_contact', $contact->id); } - // make a civicrm_subscription_history entry only on contact create (CRM-777) - if (empty($params['contact_id'])) { - $subscriptionParams = [ - 'contact_id' => $contact->id, - 'status' => 'Added', - 'method' => 'Admin', - ]; - CRM_Contact_BAO_SubscriptionHistory::create($subscriptionParams); - } - $transaction->commit(); // CRM-6367: fetch the right label for contact type’s display @@ -1781,7 +1771,7 @@ WHERE civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer'); * A hierarchical property tree if appropriate */ public static function &makeHierReturnProperties($fields, $contactId = NULL) { - $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); + $locationTypes = CRM_Core_BAO_Address::buildOptions('location_type_id', 'validate'); $returnProperties = []; diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index b7176c4837..5f3a499953 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -29,6 +29,7 @@ class CRM_Contact_BAO_Contact_Utils { * If profile overlay class should be added. * * @return string + * @throws \CRM_Core_Exception */ public static function getImage($contactType, $urlOnly = FALSE, $contactId = NULL, $addProfileOverlay = TRUE) { static $imageInfo = []; @@ -136,6 +137,7 @@ WHERE id IN ( $idString ) * * @return array * ( $cs, $ts, $live ) + * @throws \CRM_Core_Exception */ public static function generateChecksum($entityId, $ts = NULL, $live = NULL, $hash = NULL, $entityType = 'contact', $hashSize = NULL) { // return a warning message if we dont get a entityId @@ -200,6 +202,8 @@ WHERE id IN ( $idString ) * * @return bool * true if valid, else false + * + * @throws \CRM_Core_Exception */ public static function validChecksum($contactID, $inputCheck) { @@ -236,6 +240,8 @@ WHERE id IN ( $idString ) * @param int $previousEmployerID * @param bool $newContact * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function createCurrentEmployerRelationship($contactID, $organization, $previousEmployerID = NULL, $newContact = FALSE) { //if organization name is passed. CRM-15368,CRM-15547 @@ -266,7 +272,7 @@ WHERE id IN ( $idString ) // get the relationship type id of "Employee of" $relTypeId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', 'Employee of', 'id', 'name_a_b'); if (!$relTypeId) { - CRM_Core_Error::fatal(ts("You seem to have deleted the relationship type 'Employee of'")); + throw new CRM_Core_Exception(ts("You seem to have deleted the relationship type 'Employee of'")); } // create employee of relationship @@ -312,6 +318,7 @@ WHERE id IN ( $idString ) * @param int $previousEmpID * * @throws CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public static function currentEmployerRelatedMembership($contactID, $employerID, $relationshipParams, $duplicate = FALSE, $previousEmpID = NULL) { $ids = []; @@ -364,7 +371,7 @@ WHERE contact_a.id ={$contactId} AND contact_b.id={$orgId}; "; SET contact_a.organization_name=contact_b.organization_name WHERE contact_a.employer_id=contact_b.id AND contact_b.id={$organizationId}; "; - $dao = CRM_Core_DAO::executeQuery($query); + CRM_Core_DAO::executeQuery($query); } /** @@ -374,6 +381,9 @@ WHERE contact_a.employer_id=contact_b.id AND contact_b.id={$organizationId}; "; * Contact id ( mostly individual contact id). * @param int $employerId * Contact id ( mostly organization contact id). + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function clearCurrentEmployer($contactId, $employerId = NULL) { $query = "UPDATE civicrm_contact @@ -390,7 +400,7 @@ WHERE id={$contactId}; "; //get the relationship type id of "Employee of" $relTypeId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', 'Employee of', 'id', 'name_a_b'); if (!$relTypeId) { - CRM_Core_Error::fatal(ts("You seem to have deleted the relationship type 'Employee of'")); + throw new CRM_Core_Exception(ts("You seem to have deleted the relationship type 'Employee of'")); } $relMembershipParams['relationship_type_id'] = $relTypeId . '_a_b'; $relMembershipParams['contact_check'][$employerId] = 1; @@ -424,6 +434,7 @@ WHERE id={$contactId}; "; * @param string $title * fieldset title. * + * @throws \CiviCRM_API3_Exception */ public static function buildOnBehalfForm(&$form, $contactType, $countryID, $stateID, $title) { $form->assign('contact_type', $contactType); @@ -902,7 +913,7 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i $allGreetings = CRM_Core_PseudoConstant::greeting($filter); $originalGreetingString = $greetingString = CRM_Utils_Array::value($valueID, $allGreetings); if (!$greetingString) { - CRM_Core_Error::fatal(ts('Incorrect greeting value id %1, or no default greeting for this contact type and greeting type.', [1 => $valueID])); + throw new CRM_Core_Exception(ts('Incorrect greeting value id %1, or no default greeting for this contact type and greeting type.', [1 => $valueID])); } // build return properties based on tokens @@ -1119,7 +1130,9 @@ WHERE id IN (" . implode(',', $contactIds) . ")"; * * @param int $contactId * The hypothetical contact ID + * * @return bool + * @throws \CRM_Core_Exception */ public static function isContactId($contactId) { if ($contactId) { diff --git a/civicrm/CRM/Contact/BAO/Relationship.php b/civicrm/CRM/Contact/BAO/Relationship.php index 12b23f5242..325ce00de6 100644 --- a/civicrm/CRM/Contact/BAO/Relationship.php +++ b/civicrm/CRM/Contact/BAO/Relationship.php @@ -1124,14 +1124,16 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); * * @return array * [select, from, where] - * @throws \Exception + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function makeURLClause($contactId, $status, $numRelationship, $count, $relationshipId, $direction, $params = []) { $select = $from = $where = ''; $select = '( '; if ($count) { - if ($direction == 'a_b') { + if ($direction === 'a_b') { $select .= ' SELECT count(DISTINCT civicrm_relationship.id) as cnt1, 0 as cnt2 '; } else { @@ -1166,7 +1168,7 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); civicrm_relationship.is_permission_b_a as is_permission_b_a, civicrm_relationship.case_id as case_id'; - if ($direction == 'a_b') { + if ($direction === 'a_b') { $select .= ', civicrm_relationship_type.label_a_b as label_a_b, civicrm_relationship_type.label_b_a as relation '; } @@ -1176,11 +1178,11 @@ WHERE relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer'); } } - $from = " + $from = ' FROM civicrm_relationship INNER JOIN civicrm_relationship_type ON ( civicrm_relationship.relationship_type_id = civicrm_relationship_type.id ) -INNER JOIN civicrm_contact "; - if ($direction == 'a_b') { +INNER JOIN civicrm_contact '; + if ($direction === 'a_b') { $from .= 'ON ( civicrm_contact.id = civicrm_relationship.contact_id_a ) '; } else { @@ -1188,18 +1190,18 @@ INNER JOIN civicrm_contact "; } if (!$count) { - $from .= " + $from .= ' LEFT JOIN civicrm_address ON (civicrm_address.contact_id = civicrm_contact.id AND civicrm_address.is_primary = 1) LEFT JOIN civicrm_phone ON (civicrm_phone.contact_id = civicrm_contact.id AND civicrm_phone.is_primary = 1) LEFT JOIN civicrm_email ON (civicrm_email.contact_id = civicrm_contact.id AND civicrm_email.is_primary = 1) LEFT JOIN civicrm_state_province ON (civicrm_address.state_province_id = civicrm_state_province.id) LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) -"; +'; } $where = 'WHERE ( 1 )'; if ($contactId) { - if ($direction == 'a_b') { + if ($direction === 'a_b') { $where .= ' AND civicrm_relationship.contact_id_b = ' . CRM_Utils_Type::escape($contactId, 'Positive'); } else { @@ -1245,7 +1247,7 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) $where .= ' AND relationship_type_id = ' . CRM_Utils_Type::escape($params['relationship_type_id'], 'Positive'); } } - if ($direction == 'a_b') { + if ($direction === 'a_b') { $where .= ' ) UNION '; } else { @@ -1279,7 +1281,9 @@ LEFT JOIN civicrm_country ON (civicrm_address.country_id = civicrm_country.id) * * @return array|int * relationship records - * @throws \Exception + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function getRelationship( $contactId = NULL, diff --git a/civicrm/CRM/Contact/DAO/ACLContactCache.php b/civicrm/CRM/Contact/DAO/ACLContactCache.php index b13d0555fa..f415342513 100644 --- a/civicrm/CRM/Contact/DAO/ACLContactCache.php +++ b/civicrm/CRM/Contact/DAO/ACLContactCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/ACLContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ae8316157b30548661674486dac78c39) + * (GenCodeChecksum:74b0413eb512bbd0ecddcb1391ce3c3b) */ /** diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 3c14834a79..99405af76c 100644 --- a/civicrm/CRM/Contact/DAO/Contact.php +++ b/civicrm/CRM/Contact/DAO/Contact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b72765d873639076299753a8c4e676d5) + * (GenCodeChecksum:773bf2fc16c1af3c283f6ecc7098e927) */ /** @@ -434,6 +434,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'size' => CRM_Utils_Type::BIG, 'where' => 'civicrm_contact.contact_type', 'export' => TRUE, + 'contactType' => NULL, 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -847,6 +848,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^first|(f(irst\s)?name)$/i', 'dataPattern' => '/^\w+$/', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -867,6 +869,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^middle|(m(iddle\s)?name)$/i', 'dataPattern' => '/^\w+$/', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -887,6 +890,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^last|(l(ast\s)?name)$/i', 'dataPattern' => '/^\w+(\s\w+)?+$/', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -905,6 +909,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^(prefix|title)/i', 'dataPattern' => '/^(mr|ms|mrs|sir|dr)\.?$/i', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -927,6 +932,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^suffix$/i', 'dataPattern' => '/^(sr|jr)\.?|i{2,}$/', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -950,6 +956,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.formal_title', 'headerPattern' => '/^title/i', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1141,6 +1148,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^job|(j(ob\s)?title)$/i', 'dataPattern' => '//', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1158,6 +1166,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.gender_id', 'headerPattern' => '/^gender$/i', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1180,6 +1189,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^birth|(b(irth\s)?date)|D(\W*)O(\W*)B(\W*)$/i', 'dataPattern' => '/\d{4}-?\d{2}-?\d{2}/', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1197,6 +1207,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.is_deceased', 'headerPattern' => '/i(s\s)?d(eceased)$/i', 'export' => TRUE, + 'contactType' => 'Individual', 'default' => '0', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', @@ -1215,6 +1226,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.deceased_date', 'headerPattern' => '/^deceased|(d(eceased\s)?date)$/i', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1236,6 +1248,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^household|(h(ousehold\s)?name)$/i', 'dataPattern' => '/^\w+$/', 'export' => TRUE, + 'contactType' => 'Household', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1250,6 +1263,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'title' => ts('Household Primary Contact ID'), 'description' => ts('Optional FK to Primary Contact for this household.'), 'where' => 'civicrm_contact.primary_contact_id', + 'contactType' => 'Household', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1268,6 +1282,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'headerPattern' => '/^organization|(o(rganization\s)?name)$/i', 'dataPattern' => '/^\w+$/', 'export' => TRUE, + 'contactType' => 'Organization', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1287,6 +1302,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.sic_code', 'headerPattern' => '/^sic|(s(ic\s)?code)$/i', 'export' => TRUE, + 'contactType' => 'Organization', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', @@ -1323,6 +1339,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'description' => ts('OPTIONAL FK to civicrm_contact record.'), 'where' => 'civicrm_contact.employer_id', 'export' => TRUE, + 'contactType' => 'Individual', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', diff --git a/civicrm/CRM/Contact/DAO/ContactType.php b/civicrm/CRM/Contact/DAO/ContactType.php index a2eb023c7e..b8fbb30568 100644 --- a/civicrm/CRM/Contact/DAO/ContactType.php +++ b/civicrm/CRM/Contact/DAO/ContactType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/ContactType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d96dfa7e002831e18c602df130626dbb) + * (GenCodeChecksum:3ad338181596a9b5e3a9f6549fd381c9) */ /** diff --git a/civicrm/CRM/Contact/DAO/DashboardContact.php b/civicrm/CRM/Contact/DAO/DashboardContact.php index 2711365db8..9870459a87 100644 --- a/civicrm/CRM/Contact/DAO/DashboardContact.php +++ b/civicrm/CRM/Contact/DAO/DashboardContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/DashboardContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c1c463648cc70fd1f1d023aefe4eed76) + * (GenCodeChecksum:e2e825929c6c5404e7649fdde3162597) */ /** diff --git a/civicrm/CRM/Contact/DAO/Group.php b/civicrm/CRM/Contact/DAO/Group.php index ce6481ef17..ac08331c79 100644 --- a/civicrm/CRM/Contact/DAO/Group.php +++ b/civicrm/CRM/Contact/DAO/Group.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Group.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fbbb4f322f030f3dab859acf2b47276a) + * (GenCodeChecksum:d166e1dc365b62901602a50d4fb8b727) */ /** diff --git a/civicrm/CRM/Contact/DAO/GroupContact.php b/civicrm/CRM/Contact/DAO/GroupContact.php index e60843a924..6eac2f5d0f 100644 --- a/civicrm/CRM/Contact/DAO/GroupContact.php +++ b/civicrm/CRM/Contact/DAO/GroupContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2c54dc849ac565362f938a8145f5f0fb) + * (GenCodeChecksum:dcc7fe36954bd34340026bb6af5235ef) */ /** diff --git a/civicrm/CRM/Contact/DAO/GroupContactCache.php b/civicrm/CRM/Contact/DAO/GroupContactCache.php index 462f4c66ff..621584fd56 100644 --- a/civicrm/CRM/Contact/DAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/DAO/GroupContactCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9cfbab3bf59940215b561454a69a9656) + * (GenCodeChecksum:e0978847d01b9b3f7819759f8171344c) */ /** diff --git a/civicrm/CRM/Contact/DAO/GroupNesting.php b/civicrm/CRM/Contact/DAO/GroupNesting.php index 65748237f7..ffa4501a3b 100644 --- a/civicrm/CRM/Contact/DAO/GroupNesting.php +++ b/civicrm/CRM/Contact/DAO/GroupNesting.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupNesting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:11d9e300c63cb3bae2af0077456cce0b) + * (GenCodeChecksum:3dbfee8b12a7e1edeaaf4ead4e48db7e) */ /** diff --git a/civicrm/CRM/Contact/DAO/GroupOrganization.php b/civicrm/CRM/Contact/DAO/GroupOrganization.php index 869c4c2d5f..712628dc3b 100644 --- a/civicrm/CRM/Contact/DAO/GroupOrganization.php +++ b/civicrm/CRM/Contact/DAO/GroupOrganization.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupOrganization.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c921c7d49f23f8d8afa07773da5b5da3) + * (GenCodeChecksum:fad51ea5930a191661af5319a25e99c7) */ /** diff --git a/civicrm/CRM/Contact/DAO/Relationship.php b/civicrm/CRM/Contact/DAO/Relationship.php index 1ebc97a6c6..3602e3afd1 100644 --- a/civicrm/CRM/Contact/DAO/Relationship.php +++ b/civicrm/CRM/Contact/DAO/Relationship.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Relationship.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:38f9835d4c6a217b4550124bd39cbbf1) + * (GenCodeChecksum:376227269d8c1c224c357387d0862a9f) */ /** diff --git a/civicrm/CRM/Contact/DAO/RelationshipType.php b/civicrm/CRM/Contact/DAO/RelationshipType.php index 655ba0a46a..b0b7bb8300 100644 --- a/civicrm/CRM/Contact/DAO/RelationshipType.php +++ b/civicrm/CRM/Contact/DAO/RelationshipType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/RelationshipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:6442ad1ae7850007792bbbfa0226cb4a) + * (GenCodeChecksum:727adcb362121a8c027992f37aa8e7f6) */ /** diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index cb59414b15..ce0af2a050 100644 --- a/civicrm/CRM/Contact/DAO/SavedSearch.php +++ b/civicrm/CRM/Contact/DAO/SavedSearch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SavedSearch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:88f2f400312a1ae04a4cfde200d64c8d) + * (GenCodeChecksum:c0d6f65e0f3115ac3349b5fb1ad0baac) */ /** diff --git a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php index 34dfdd2bbb..29f6238d9f 100644 --- a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php +++ b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SubscriptionHistory.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:161f6ed400e9511cd2e5751941634cc4) + * (GenCodeChecksum:28bbce4d536484d73c7ade80e3ec9448) */ /** diff --git a/civicrm/CRM/Contact/Form/Search.php b/civicrm/CRM/Contact/Form/Search.php index ade94bddf1..eca29eb4d4 100644 --- a/civicrm/CRM/Contact/Form/Search.php +++ b/civicrm/CRM/Contact/Form/Search.php @@ -727,15 +727,9 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { * values that potentially change the controller behavior. i.e. things * like totalCount etc */ - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } $controller = new CRM_Contact_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::TRANSFER ); $controller->setEmbedded(TRUE); @@ -855,15 +849,9 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { } } - $sortID = NULL; - if ($this->get(CRM_Utils_Sort::SORT_ID)) { - $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), - $this->get(CRM_Utils_Sort::SORT_DIRECTION) - ); - } $controller = new CRM_Contact_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), - $sortID, + $this->getSortID(), CRM_Core_Action::VIEW, $this, $output diff --git a/civicrm/CRM/Contact/Form/Search/Advanced.php b/civicrm/CRM/Contact/Form/Search/Advanced.php index 74479bfeff..6a4127b25a 100644 --- a/civicrm/CRM/Contact/Form/Search/Advanced.php +++ b/civicrm/CRM/Contact/Form/Search/Advanced.php @@ -318,7 +318,6 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search { 'contribution_soft_credit_type_id', 'contribution_status', 'contribution_status_id', - 'contribution_source', 'membership_status_id', 'participant_status_id', 'contribution_trxn_id', diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Group.php b/civicrm/CRM/Contact/Form/Search/Custom/Group.php index 6069b16722..4dcb40dceb 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Group.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Group.php @@ -19,42 +19,46 @@ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custo protected $_formValues; /** - * @var CRM_Utils_SQL_TemTable Object + * @var \CRM_Utils_SQL_TemTable */ protected $_xGTable = NULL; /** - * @var CRM_Utils_SQL_TempTable object + * @var \CRM_Utils_SQL_TempTable */ protected $_iGTable = NULL; /** - * @var string Table Name for xclude Groups + * @var string + * Table Name for xclude Groups */ protected $_xGTableName = NULL; /** - * @var string Table Name for Inclue Groups + * @var string + * Table Name for Inclue Groups */ protected $_iGTableName = NULL; /** - * @var CRM_Utils_SQL_TemTable Object + * @var \CRM_Utils_SQL_TempTable */ protected $_xTTable = NULL; /** - * @var CRM_Utils_SQL_TempTable object + * @var \CRM_Utils_SQL_TempTable */ protected $_iTTable = NULL; /** - * @var string Table Name for xclude Groups + * @var string + * Table Name for xclude Groups */ protected $_xTTableName = NULL; /** - * @var string Table Name for Inclue Groups + * @var string + * Table Name for Inclue Groups */ protected $_iTTableName = NULL; diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch.php b/civicrm/CRM/Contact/Form/Task/SaveSearch.php index 35d16a3d53..f8114ce8d1 100644 --- a/civicrm/CRM/Contact/Form/Task/SaveSearch.php +++ b/civicrm/CRM/Contact/Form/Task/SaveSearch.php @@ -74,11 +74,11 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task { $formValues = $this->controller->exportValues(); // the name and description are actually stored with the group and not the saved search - $this->add('text', 'title', ts('Name'), + $this->add('text', 'title', ts('Group Title'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Group', 'title'), TRUE ); - $this->addElement('textarea', 'description', ts('Description'), + $this->addElement('textarea', 'description', ts('Group Description'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Group', 'description') ); @@ -121,7 +121,7 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task { $this->addDefaultButtons(ts('Save Smart Group')); $this->assign('partiallySelected', $formValues['radio_ts'] != 'ts_all'); } - $this->addRule('title', ts('Name already exists in Database.'), + $this->addRule('title', ts('Group Title already exists in Database.'), 'objectExists', ['CRM_Contact_DAO_Group', $groupID, 'title'] ); } diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php index 00f543cc06..72a4b81dcd 100644 --- a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php +++ b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php @@ -47,6 +47,15 @@ class CRM_Contact_Form_Task_SaveSearch_Update extends CRM_Contact_Form_Task_Save $params = ['saved_search_id' => $this->_id]; CRM_Contact_BAO_Group::retrieve($params, $defaults); + if (!empty($defaults['group_type'])) { + $types = explode(CRM_Core_DAO::VALUE_SEPARATOR, + substr($defaults['group_type'], 1, -1) + ); + $defaults['group_type'] = array(); + foreach ($types as $type) { + $defaults['group_type'][$type] = 1; + } + } return $defaults; } diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard.php b/civicrm/CRM/Contact/Page/View/UserDashBoard.php index c7938aff49..538dbd9bf1 100644 --- a/civicrm/CRM/Contact/Page/View/UserDashBoard.php +++ b/civicrm/CRM/Contact/Page/View/UserDashBoard.php @@ -62,7 +62,7 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page { } elseif ($this->_contactId != $userID && !$validUser) { if (!CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::VIEW)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this contact.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this contact.')); } if (!CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::EDIT)) { $this->_edit = FALSE; diff --git a/civicrm/CRM/Contact/Selector.php b/civicrm/CRM/Contact/Selector.php index 45a5b7afd1..f9ddd8e954 100644 --- a/civicrm/CRM/Contact/Selector.php +++ b/civicrm/CRM/Contact/Selector.php @@ -195,6 +195,13 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $this->_returnProperties['contact_type'] = 1; $this->_returnProperties['contact_sub_type'] = 1; $this->_returnProperties['sort_name'] = 1; + if (!empty($this->_returnProperties['location']) && is_array($this->_returnProperties['location'])) { + foreach ($this->_returnProperties['location'] as $key => $property) { + if (!empty($property['email'])) { + $this->_returnProperties['location'][$key]['on_hold'] = 1; + } + } + } } $displayRelationshipType = CRM_Utils_Array::value('display_relationship_type', $this->_formValues); @@ -708,6 +715,15 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } $row[$property] = $websiteUrl; } + elseif (strpos($property, '-email') !== FALSE) { + list($locType) = explode("-email", $property); + $onholdProperty = "{$locType}-on_hold"; + + $row[$property] = isset($result->$property) ? $result->$property : NULL; + if (!empty($row[$property]) && !empty($result->$onholdProperty)) { + $row[$property] .= " (On Hold)"; + } + } else { $row[$property] = isset($result->$property) ? $result->$property : NULL; } diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 1d20266e82..fb1ad57ab9 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -50,7 +50,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * This is used for composing messages because they have dependency on the * contribution_page or event page - although over time we may eliminate that * - * @var "contribution"\"event" + * @var string + * "contribution"\"event" */ public $_component = NULL; @@ -1992,7 +1993,9 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ * @param bool $processContributionObject * * @return array - * @throws \Exception + * + * @throws CRM_Core_Exception + * @throws \CiviCRM_API3_Exception * @deprecated * * Use api contribute.completetransaction diff --git a/civicrm/CRM/Contribute/DAO/Contribution.php b/civicrm/CRM/Contribute/DAO/Contribution.php index 0d5576c51a..d56ce8b8c6 100644 --- a/civicrm/CRM/Contribute/DAO/Contribution.php +++ b/civicrm/CRM/Contribute/DAO/Contribution.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Contribution.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a9f83aa612e82ee87ace74e75fe23466) + * (GenCodeChecksum:389ae44affe94e52a14c9c6daa79be1d) */ /** diff --git a/civicrm/CRM/Contribute/DAO/ContributionPage.php b/civicrm/CRM/Contribute/DAO/ContributionPage.php index 299345b8a7..7f73b6daa3 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/DAO/ContributionPage.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionPage.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:35e26556fcbed13acc434279f2ebaee5) + * (GenCodeChecksum:382259aca3342191a285c0984cab168b) */ /** diff --git a/civicrm/CRM/Contribute/DAO/ContributionProduct.php b/civicrm/CRM/Contribute/DAO/ContributionProduct.php index f2e804722b..b938f4a6e9 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionProduct.php +++ b/civicrm/CRM/Contribute/DAO/ContributionProduct.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ff8ff52e402d36b2d488ec5cda68ff12) + * (GenCodeChecksum:559257fd322f405c912fe7507fcb1cb3) */ /** diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php index 368ef101c9..060a304ed0 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f88b64f09ed0362f6d630038f0a47686) + * (GenCodeChecksum:d0c493bb1a98e2b75ebaceb330a40fb4) */ /** diff --git a/civicrm/CRM/Contribute/DAO/ContributionSoft.php b/civicrm/CRM/Contribute/DAO/ContributionSoft.php index 3bb58a2dd0..47e60a3f44 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionSoft.php +++ b/civicrm/CRM/Contribute/DAO/ContributionSoft.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionSoft.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4b5e273fabfbab2591c227fed3d0214a) + * (GenCodeChecksum:7fbb150189946e587cb80c075945e5ba) */ /** diff --git a/civicrm/CRM/Contribute/DAO/Premium.php b/civicrm/CRM/Contribute/DAO/Premium.php index f740ab0302..48741f75d7 100644 --- a/civicrm/CRM/Contribute/DAO/Premium.php +++ b/civicrm/CRM/Contribute/DAO/Premium.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Premium.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:58eb4aacd3084c54c8c6847bdc7c0b0e) + * (GenCodeChecksum:cd90a0aedd51eaf91e1977705e80071f) */ /** diff --git a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php index 19df461ef5..1b03fc00d8 100644 --- a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php +++ b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/PremiumsProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c165125a7d8f92c40a68bdad3715d28d) + * (GenCodeChecksum:444f1def563a1e986ddf0ac56f5b2e84) */ /** diff --git a/civicrm/CRM/Contribute/DAO/Product.php b/civicrm/CRM/Contribute/DAO/Product.php index 29659121b2..f474e3a793 100644 --- a/civicrm/CRM/Contribute/DAO/Product.php +++ b/civicrm/CRM/Contribute/DAO/Product.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Product.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8036ec1084e88e8fcd65e69072592388) + * (GenCodeChecksum:0af317e71745b39afb378570922fab90) */ /** diff --git a/civicrm/CRM/Contribute/DAO/Widget.php b/civicrm/CRM/Contribute/DAO/Widget.php index db6cd27933..5591ae497d 100644 --- a/civicrm/CRM/Contribute/DAO/Widget.php +++ b/civicrm/CRM/Contribute/DAO/Widget.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Widget.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a1f9bf066d659e32e32cd324aeb7a286) + * (GenCodeChecksum:4a3f77ad3185fba0d0c083a1000336b7) */ /** diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php index 407bf0d5cd..e02ae64bb5 100644 --- a/civicrm/CRM/Contribute/Form/CancelSubscription.php +++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php @@ -203,8 +203,15 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib } if (CRM_Utils_Array::value('send_cancel_request', $params) == 1) { + // Note the 'subscriptionId' here is the value stored in + // civicrm_contribution_recur.processor_id $cancelParams = ['subscriptionId' => $this->_subscriptionDetails->subscription_id]; - $cancelSubscription = $this->_paymentProcessorObj->cancelSubscription($message, $cancelParams); + try { + $cancelSubscription = $this->_paymentProcessorObj->cancelSubscription($message, $cancelParams); + } + catch (\Civi\Payment\Exception\PaymentProcessorException $e) { + CRM_Core_Error::statusBounce($e->getMessage()); + } } if (is_a($cancelSubscription, 'CRM_Core_Error')) { diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php index c9fe216744..04fa3e074a 100644 --- a/civicrm/CRM/Contribute/Form/Contribution.php +++ b/civicrm/CRM/Contribute/Form/Contribution.php @@ -215,8 +215,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP public function preProcess() { // Check permission for action. if (!CRM_Core_Permission::checkActionPermission('CiviContribute', $this->_action)) { - // @todo replace with throw new CRM_Core_Exception(). - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); @@ -481,7 +480,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $financialTypeID = CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']); CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($this->_id, 'edit'); if (!CRM_Core_Permission::check('edit contributions of type ' . $financialTypeID)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } $allPanes = []; @@ -1380,7 +1379,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // as a point of fragility rather than a logical 'if' clause. if ($priceSetId) { CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'], - $submittedValues, $lineItem[$priceSetId], NULL, $priceSetId); + $submittedValues, $lineItem[$priceSetId], $priceSetId); // Unset tax amount for offline 'is_quick_config' contribution. // @todo WHY - quick config was conceived as a quick way to configure contribution forms. // this is an example of 'other' functionality being hung off it. diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index dbb5e45ca4..4d9534b811 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -1967,7 +1967,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } $priceFields = $priceFields[$priceSetID]['fields']; $lineItems = []; - CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution', $priceSetID); + $form->processAmountAndGetAutoRenew($priceFields, $paramsProcessedForForm, $lineItems, $priceSetID); $form->_lineItem = [$priceSetID => $lineItems]; $membershipPriceFieldIDs = []; foreach ((array) $lineItems as $lineItem) { diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index 2e102f83ee..6f7d403abc 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -1124,12 +1124,14 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu } } } - $component = ''; + if ($this->_membershipBlock) { - $component = 'membership'; + $this->processAmountAndGetAutoRenew($this->_values['fee'], $params, $lineItem[$priceSetId], $priceSetId); + } + else { + CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $priceSetId); } - CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $component, $priceSetId); if ($params['tax_amount']) { $this->set('tax_amount', $params['tax_amount']); } diff --git a/civicrm/CRM/Contribute/Form/ContributionBase.php b/civicrm/CRM/Contribute/Form/ContributionBase.php index 5dc6a299ff..59670755be 100644 --- a/civicrm/CRM/Contribute/Form/ContributionBase.php +++ b/civicrm/CRM/Contribute/Form/ContributionBase.php @@ -296,7 +296,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && !CRM_Core_Permission::check('add contributions of type ' . CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id'])) ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } if (empty($this->_values['is_active'])) { throw new CRM_Contribute_Exception_InactiveContributionPageException(ts('The page you requested is currently unavailable.'), $this->_id); @@ -1403,4 +1403,33 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { return $params['amount'] ?? 0; } + /** + * Wrapper for processAmount that also sets autorenew. + * + * @param $fields + * This is the output of the function CRM_Price_BAO_PriceSet::getSetDetail($priceSetID, FALSE, FALSE); + * And, it would make sense to introduce caching into that function and call it from here rather than + * require the $fields array which is passed from pillar to post around the form in order to pass it in here. + * @param array $params + * Params reflecting form input e.g with fields 'price_5' => 7, 'price_8' => array(7, 8) + * @param $lineItems + * Line item array to be altered. + * @param int $priceSetID + */ + public function processAmountAndGetAutoRenew($fields, &$params, &$lineItems, $priceSetID = NULL) { + CRM_Price_BAO_PriceSet::processAmount($fields, $params, $lineItems, $priceSetID); + $autoRenew = []; + $autoRenew[0] = $autoRenew[1] = $autoRenew[2] = 0; + foreach ($lineItems as $lineItem) { + if (!empty($lineItem['auto_renew']) && + is_numeric($lineItem['auto_renew']) + ) { + $autoRenew[$lineItem['auto_renew']] += $lineItem['line_total']; + } + } + if (count($autoRenew) > 1) { + $params['autoRenew'] = $autoRenew; + } + } + } diff --git a/civicrm/CRM/Contribute/Form/ContributionPage.php b/civicrm/CRM/Contribute/Form/ContributionPage.php index 95132b675c..1373abedca 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage.php @@ -136,7 +136,7 @@ class CRM_Contribute_Form_ContributionPage extends CRM_Core_Form { if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && $this->_action & CRM_Core_Action::UPDATE) { $financialTypeID = CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']); if (!CRM_Core_Permission::check('edit contributions of type ' . $financialTypeID)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php index 7a3182b140..89c0f16c04 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php @@ -43,7 +43,7 @@ class CRM_Contribute_Form_ContributionPage_Delete extends CRM_Contribute_Form_Co //check for delete if (!CRM_Core_Permission::checkActionPermission('CiviContribute', $this->_action)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $dao = new CRM_Contribute_DAO_Contribution(); diff --git a/civicrm/CRM/Contribute/Form/Task/Delete.php b/civicrm/CRM/Contribute/Form/Task/Delete.php index e9d5b0dc71..1b8aa33f98 100644 --- a/civicrm/CRM/Contribute/Form/Task/Delete.php +++ b/civicrm/CRM/Contribute/Form/Task/Delete.php @@ -36,7 +36,7 @@ class CRM_Contribute_Form_Task_Delete extends CRM_Contribute_Form_Task { public function preProcess() { //check for delete if (!CRM_Core_Permission::checkActionPermission('CiviContribute', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); } diff --git a/civicrm/CRM/Contribute/Form/UpdateSubscription.php b/civicrm/CRM/Contribute/Form/UpdateSubscription.php index a83eb16256..308d9dd3a4 100644 --- a/civicrm/CRM/Contribute/Form/UpdateSubscription.php +++ b/civicrm/CRM/Contribute/Form/UpdateSubscription.php @@ -14,6 +14,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ + /** * This class generates form components generic to recurring contributions. * @@ -208,7 +209,12 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib $params['subscriptionId'] = $this->_subscriptionDetails->subscription_id; $updateSubscription = TRUE; if ($this->_paymentProcessorObj->supports('changeSubscriptionAmount')) { - $updateSubscription = $this->_paymentProcessorObj->changeSubscriptionAmount($message, $params); + try { + $updateSubscription = $this->_paymentProcessorObj->changeSubscriptionAmount($message, $params); + } + catch (\Civi\Payment\Exception\PaymentProcessorException $e) { + CRM_Core_Error::statusBounce($e->getMessage()); + } } if (is_a($updateSubscription, 'CRM_Core_Error')) { CRM_Core_Error::displaySessionError($updateSubscription); diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index 0607531c1b..25bd3c1e9a 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -2595,15 +2595,15 @@ WHERE cf.id = %1 AND cg.is_multiple = 1"; /** * Does this field store a serialized string? * - * @param array $field + * @param array|object $field * * @return bool */ public static function isSerialized($field) { // Fields retrieved via api are an array, or from the dao are an object. We'll accept either. - $field = (array) $field; + $html_type = is_object($field) ? $field->html_type : $field['html_type']; // FIXME: Currently the only way to know if data is serialized is by looking at the html_type. It would be cleaner to decouple this. - return ($field['html_type'] == 'CheckBox' || strpos($field['html_type'], 'Multi') !== FALSE); + return ($html_type === 'CheckBox' || strpos($html_type, 'Multi') !== FALSE); } /** diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index de1f8613ee..0b352b4c09 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -573,6 +573,7 @@ SELECT cg.table_name as table_name , cg.extends as extends, cf.column_name as column_name, cf.id as cf_id , + cf.html_type as html_type , cf.data_type as data_type FROM civicrm_custom_group cg, civicrm_custom_field cf @@ -586,6 +587,10 @@ AND cf.id IN ( $fieldIDList ) while ($dao->fetch()) { $dataType = $dao->data_type == 'Date' ? 'Timestamp' : $dao->data_type; foreach ($fieldValues[$dao->cf_id] as $fieldValue) { + // Serialize array values + if (is_array($fieldValue['value']) && CRM_Core_BAO_CustomField::isSerialized($dao)) { + $fieldValue['value'] = CRM_Utils_Array::implodePadded($fieldValue['value']); + } // Format null values correctly if ($fieldValue['value'] === NULL || $fieldValue['value'] === '') { switch ($dataType) { diff --git a/civicrm/CRM/Core/BAO/Email.php b/civicrm/CRM/Core/BAO/Email.php index f2441a740f..c8bcb650cf 100644 --- a/civicrm/CRM/Core/BAO/Email.php +++ b/civicrm/CRM/Core/BAO/Email.php @@ -54,6 +54,10 @@ class CRM_Core_BAO_Email extends CRM_Core_DAO_Email { $hook = empty($params['id']) ? 'create' : 'edit'; CRM_Utils_Hook::pre($hook, 'Email', CRM_Utils_Array::value('id', $params), $params); + if (isset($params['is_bulkmail']) && $params['is_bulkmail'] === 'null') { + CRM_Core_Error::deprecatedFunctionWarning('It is not valid to set bulkmail to null, it is boolean'); + $params['bulkmail'] = 0; + } $email = new CRM_Core_DAO_Email(); $email->copyValues($params); if (!empty($email->email)) { @@ -64,17 +68,17 @@ class CRM_Core_BAO_Email extends CRM_Core_DAO_Email { /* * since we're setting bulkmail for 1 of this contact's emails, first reset all their other emails to is_bulkmail false - * We shouldn't not set the current email to false even though we - * are about to reset it to avoid contaminating the changelog if logging is enabled + * We shouldn't set the current email to false even though we + * are about to reset it to avoid contaminating the changelog if logging is enabled. * (only 1 email address can have is_bulkmail = true) */ - if ($email->is_bulkmail != 'null' && !empty($params['contact_id']) && !self::isMultipleBulkMail()) { + if ($email->is_bulkmail && !empty($params['contact_id']) && !self::isMultipleBulkMail()) { $sql = " UPDATE civicrm_email SET is_bulkmail = 0 WHERE contact_id = {$params['contact_id']} "; - if ($hook == 'edit') { + if ($hook === 'edit') { $sql .= " AND id <> {$params['id']}"; } CRM_Core_DAO::executeQuery($sql); diff --git a/civicrm/CRM/Core/BAO/Navigation.php b/civicrm/CRM/Core/BAO/Navigation.php index c5d8300697..755d708267 100644 --- a/civicrm/CRM/Core/BAO/Navigation.php +++ b/civicrm/CRM/Core/BAO/Navigation.php @@ -468,14 +468,7 @@ FROM civicrm_navigation WHERE domain_id = $domainID"; $contact = new CRM_Contact_DAO_Contact(); $contact->id = $contactID; if ($contact->find(TRUE)) { - CRM_Core_BAO_Setting::setItem( - $newKey, - CRM_Core_BAO_Setting::PERSONAL_PREFERENCES_NAME, - 'navigation', - NULL, - $contactID, - $contactID - ); + Civi::contactSettings($contactID)->set('navigation', $newKey); } } diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php index 4fa3e5d041..50cc7dc064 100644 --- a/civicrm/CRM/Core/BAO/Setting.php +++ b/civicrm/CRM/Core/BAO/Setting.php @@ -125,8 +125,6 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { /** * Store an item in the setting table. * - * _setItem() is the common logic shared by setItem() and setItems(). - * * @param $value * (required) The value that will be serialized and stored. * @param string $group @@ -140,6 +138,10 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * An optional ID to assign the creator to. If not set, retrieved from session. * * @param int $domainID + * + * @throws \CRM_Core_Exception + * + * @deprecated - refer docs https://docs.civicrm.org/dev/en/latest/framework/setting/ */ public static function setItem( $value, @@ -150,6 +152,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { $createdID = NULL, $domainID = NULL ) { + CRM_Core_Error::deprecatedFunctionWarning('refer docs for correct methods https://docs.civicrm.org/dev/en/latest/framework/setting/'); + /** @var \Civi\Core\SettingsManager $manager */ $manager = \Civi::service('settings_manager'); $settings = ($contactID === NULL) ? $manager->getBagByDomain($domainID) : $manager->getBagByContact($domainID, $contactID); @@ -163,8 +167,6 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * 'config_key' = the config key is different to the settings key - e.g. debug where there was a conflict * 'legacy_key' = rename from config or setting with this name * - * _setItem() is the common logic shared by setItem() and setItems(). - * * @param array $params * (required) An api formatted array of keys and values. * @param null $domains @@ -421,6 +423,10 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * @param bool $system * @param int $userID * @param string $keyField + * + * @throws \CRM_Core_Exception + * + * @deprecated */ public static function setValueOption( $group, @@ -430,6 +436,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { $userID = NULL, $keyField = 'name' ) { + CRM_Core_Error::deprecatedFunctionWarning('refer docs for correct methods https://docs.civicrm.org/dev/en/latest/framework/setting/'); if (empty($value)) { $optionValue = NULL; } diff --git a/civicrm/CRM/Core/BAO/UFGroup.php b/civicrm/CRM/Core/BAO/UFGroup.php index 0e22975832..ea56ed7935 100644 --- a/civicrm/CRM/Core/BAO/UFGroup.php +++ b/civicrm/CRM/Core/BAO/UFGroup.php @@ -989,11 +989,10 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { } } $query->convertToPseudoNames($details); - $config = CRM_Core_Config::singleton(); - $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); - $imProviders = CRM_Core_PseudoConstant::get('CRM_Core_DAO_IM', 'provider_id'); - $websiteTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Website', 'website_type_id'); + $locationTypes = CRM_Core_BAO_Address::buildOptions('location_type_id', 'validate'); + $imProviders = CRM_Core_DAO_IM::buildOptions('provider_id'); + $websiteTypes = CRM_Core_DAO_Website::buildOptions('website_type_id'); $multipleFields = ['url']; diff --git a/civicrm/CRM/Core/BAO/UFMatch.php b/civicrm/CRM/Core/BAO/UFMatch.php index 23dbf6e4ff..58996fd30a 100644 --- a/civicrm/CRM/Core/BAO/UFMatch.php +++ b/civicrm/CRM/Core/BAO/UFMatch.php @@ -430,7 +430,7 @@ AND domain_id = %4 'email' => $emailAddress, 'is_primary' => 1, ]); - $emailID = $result->id; + $emailID = $result['id']; } CRM_Core_BAO_Log::register($contactId, diff --git a/civicrm/CRM/Core/CodeGen/Specification.php b/civicrm/CRM/Core/CodeGen/Specification.php index 17bfc45a55..00e3d74a06 100644 --- a/civicrm/CRM/Core/CodeGen/Specification.php +++ b/civicrm/CRM/Core/CodeGen/Specification.php @@ -371,6 +371,7 @@ class CRM_Core_CodeGen_Specification { $field['uniqueTitle'] = $this->value('uniqueTitle', $fieldXML); $field['serialize'] = $this->value('serialize', $fieldXML); $field['html'] = $this->value('html', $fieldXML); + $field['contactType'] = $this->value('contactType', $fieldXML); if (isset($fieldXML->permission)) { $field['permission'] = trim($this->value('permission', $fieldXML)); $field['permission'] = $field['permission'] ? array_filter(array_map('trim', explode(',', $field['permission']))) : []; @@ -383,6 +384,7 @@ class CRM_Core_CodeGen_Specification { 'type', 'formatType', 'label', + 'controlField', /* Fixme: prior to CRM-13497 these were in a flat structure // CRM-13497 moved them to be nested within 'html' but there's no point // making that change in the DAOs right now since we are in the process of diff --git a/civicrm/CRM/Core/DAO/ActionLog.php b/civicrm/CRM/Core/DAO/ActionLog.php index 058ebbda68..447410dc3a 100644 --- a/civicrm/CRM/Core/DAO/ActionLog.php +++ b/civicrm/CRM/Core/DAO/ActionLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b3c1b04d503947b5ec42a671bb4f0f6d) + * (GenCodeChecksum:e23a4eda4386716e3553aeb30bf1f255) */ /** diff --git a/civicrm/CRM/Core/DAO/ActionMapping.php b/civicrm/CRM/Core/DAO/ActionMapping.php index b04131c94a..38d40f4614 100644 --- a/civicrm/CRM/Core/DAO/ActionMapping.php +++ b/civicrm/CRM/Core/DAO/ActionMapping.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionMapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4642b2b6da658a34c8dda7c46a93e059) + * (GenCodeChecksum:b597d359bb254799b8756ee555156dc3) */ /** diff --git a/civicrm/CRM/Core/DAO/ActionSchedule.php b/civicrm/CRM/Core/DAO/ActionSchedule.php index d5d6e5ffd7..e67d25c8b2 100644 --- a/civicrm/CRM/Core/DAO/ActionSchedule.php +++ b/civicrm/CRM/Core/DAO/ActionSchedule.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionSchedule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:aee88e50a306c0ae2d2aa373ec6c0af5) + * (GenCodeChecksum:480f98c7f38407759f99648abdd78368) */ /** diff --git a/civicrm/CRM/Core/DAO/Address.php b/civicrm/CRM/Core/DAO/Address.php index 8afdc271b8..0354340602 100644 --- a/civicrm/CRM/Core/DAO/Address.php +++ b/civicrm/CRM/Core/DAO/Address.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Address.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4e3b66ed828527539c525b2ffc71e606) + * (GenCodeChecksum:c53b9ecace9b92f598172ccd17620489) */ /** @@ -568,6 +568,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { 'FKClassName' => 'CRM_Core_DAO_County', 'html' => [ 'type' => 'ChainSelect', + 'controlField' => 'state_province_id', ], 'pseudoconstant' => [ 'table' => 'civicrm_county', @@ -589,6 +590,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { 'FKClassName' => 'CRM_Core_DAO_StateProvince', 'html' => [ 'type' => 'ChainSelect', + 'controlField' => 'country_id', ], 'pseudoconstant' => [ 'table' => 'civicrm_state_province', diff --git a/civicrm/CRM/Core/DAO/AddressFormat.php b/civicrm/CRM/Core/DAO/AddressFormat.php index d2e10e6ef2..0a07ed0985 100644 --- a/civicrm/CRM/Core/DAO/AddressFormat.php +++ b/civicrm/CRM/Core/DAO/AddressFormat.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/AddressFormat.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5cf75b7bfd496cdc343cb8a9766d546c) + * (GenCodeChecksum:a9ea837c3e5896b5e2b0b62052a5fdaf) */ /** diff --git a/civicrm/CRM/Core/DAO/Cache.php b/civicrm/CRM/Core/DAO/Cache.php index ea1d0d67a0..2a37d8efb3 100644 --- a/civicrm/CRM/Core/DAO/Cache.php +++ b/civicrm/CRM/Core/DAO/Cache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Cache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4d3ccecb7d91aa67b8c78c3c39933ae8) + * (GenCodeChecksum:2639f5b19898adf08f19b9f2713d5e76) */ /** diff --git a/civicrm/CRM/Core/DAO/Component.php b/civicrm/CRM/Core/DAO/Component.php index 93ea40193f..69039b9975 100644 --- a/civicrm/CRM/Core/DAO/Component.php +++ b/civicrm/CRM/Core/DAO/Component.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Component.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4f8734bbe3e7935ef6943a95a9bbdf28) + * (GenCodeChecksum:7df1b2e6e35d3bbd5ae6d71f559cf8cb) */ /** diff --git a/civicrm/CRM/Core/DAO/Country.php b/civicrm/CRM/Core/DAO/Country.php index 448d3e3513..e6a2aac9dc 100644 --- a/civicrm/CRM/Core/DAO/Country.php +++ b/civicrm/CRM/Core/DAO/Country.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Country.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:31c11db045e03911b14a7661d5e8eb12) + * (GenCodeChecksum:e91ee1ac50cda49d3d228fe953d1ab34) */ /** diff --git a/civicrm/CRM/Core/DAO/County.php b/civicrm/CRM/Core/DAO/County.php index 4453f13965..7c183f5de0 100644 --- a/civicrm/CRM/Core/DAO/County.php +++ b/civicrm/CRM/Core/DAO/County.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/County.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4ba037c52adafa1cf164bc0a3dca2102) + * (GenCodeChecksum:9af9ee85c4e413dda6398cc51e9e4f82) */ /** diff --git a/civicrm/CRM/Core/DAO/CustomField.php b/civicrm/CRM/Core/DAO/CustomField.php index 4888c4c07f..7b8ded42ab 100644 --- a/civicrm/CRM/Core/DAO/CustomField.php +++ b/civicrm/CRM/Core/DAO/CustomField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0b9f63d0d81091b921012b627182f11b) + * (GenCodeChecksum:492b1be45dc41c15b35371410a074393) */ /** diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index 3cfe89c1ef..27a55dc1b1 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:711e3216e2d56bb62d276bb12b606631) + * (GenCodeChecksum:1e40fdbcc363c9b5e4c880a6838c7375) */ /** diff --git a/civicrm/CRM/Core/DAO/Dashboard.php b/civicrm/CRM/Core/DAO/Dashboard.php index eea43477fa..13fbdbf5d1 100644 --- a/civicrm/CRM/Core/DAO/Dashboard.php +++ b/civicrm/CRM/Core/DAO/Dashboard.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Dashboard.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:6fd1bfbecace855a159025ad31e37fb0) + * (GenCodeChecksum:6b9dee0261c55c757550983c4fbd9aea) */ /** diff --git a/civicrm/CRM/Core/DAO/Discount.php b/civicrm/CRM/Core/DAO/Discount.php index 4265b70fe8..416cfc9903 100644 --- a/civicrm/CRM/Core/DAO/Discount.php +++ b/civicrm/CRM/Core/DAO/Discount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Discount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:71bcd9deb96abf18da4c7c7769b6a2dd) + * (GenCodeChecksum:65e21ec2893577e8026e3194864cdad3) */ /** diff --git a/civicrm/CRM/Core/DAO/Domain.php b/civicrm/CRM/Core/DAO/Domain.php index e3200405e8..42569bdbc7 100644 --- a/civicrm/CRM/Core/DAO/Domain.php +++ b/civicrm/CRM/Core/DAO/Domain.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Domain.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a5a1c028e1412c00cd141f50e566799a) + * (GenCodeChecksum:63a7b29cbea5066fe2605191bd41226a) */ /** diff --git a/civicrm/CRM/Core/DAO/Email.php b/civicrm/CRM/Core/DAO/Email.php index f7bfe44daf..12b8173e49 100644 --- a/civicrm/CRM/Core/DAO/Email.php +++ b/civicrm/CRM/Core/DAO/Email.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Email.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7f8d7665fad5c2691c46de7cff8d9149) + * (GenCodeChecksum:68301f75314731f6ee2ec37298fe49fe) */ /** diff --git a/civicrm/CRM/Core/DAO/EntityFile.php b/civicrm/CRM/Core/DAO/EntityFile.php index de1cadeee6..957ad0507c 100644 --- a/civicrm/CRM/Core/DAO/EntityFile.php +++ b/civicrm/CRM/Core/DAO/EntityFile.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/EntityFile.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0ee94b59f5506957ac9bbfbc9d9533c2) + * (GenCodeChecksum:ed68159183f272ac4669f1a708bbebd7) */ /** diff --git a/civicrm/CRM/Core/DAO/EntityTag.php b/civicrm/CRM/Core/DAO/EntityTag.php index 4bed3e4cfd..ae16002b14 100644 --- a/civicrm/CRM/Core/DAO/EntityTag.php +++ b/civicrm/CRM/Core/DAO/EntityTag.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/EntityTag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:16be4e438f52797d8001b5cbe508c615) + * (GenCodeChecksum:af7c604a97027819d9c6316fb84d25bc) */ /** diff --git a/civicrm/CRM/Core/DAO/Extension.php b/civicrm/CRM/Core/DAO/Extension.php index b4d50e6d34..e233011934 100644 --- a/civicrm/CRM/Core/DAO/Extension.php +++ b/civicrm/CRM/Core/DAO/Extension.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Extension.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3c88066844dbbf70b8ee5593eafe65a4) + * (GenCodeChecksum:13eeed42541ea3b610faa3bc99f6d9cb) */ /** diff --git a/civicrm/CRM/Core/DAO/File.php b/civicrm/CRM/Core/DAO/File.php index c67c30dc09..6b5380a404 100644 --- a/civicrm/CRM/Core/DAO/File.php +++ b/civicrm/CRM/Core/DAO/File.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/File.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1ecf5010cac38b5778d7b448b50e7c01) + * (GenCodeChecksum:1e39b61dad16348293a20264602193ad) */ /** diff --git a/civicrm/CRM/Core/DAO/IM.php b/civicrm/CRM/Core/DAO/IM.php index 323457dcaf..bb07bee65b 100644 --- a/civicrm/CRM/Core/DAO/IM.php +++ b/civicrm/CRM/Core/DAO/IM.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/IM.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cbd52493a36bc7a76440673085467442) + * (GenCodeChecksum:e09b9168fc001341138686c827deba1f) */ /** diff --git a/civicrm/CRM/Core/DAO/Job.php b/civicrm/CRM/Core/DAO/Job.php index 402ecf95ba..ead7c9687d 100644 --- a/civicrm/CRM/Core/DAO/Job.php +++ b/civicrm/CRM/Core/DAO/Job.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Job.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:143980edb0346c065249ee860efe6b41) + * (GenCodeChecksum:b8624f719151185db79cd04810c2c2bf) */ /** diff --git a/civicrm/CRM/Core/DAO/JobLog.php b/civicrm/CRM/Core/DAO/JobLog.php index cd4056d425..2eafcf0807 100644 --- a/civicrm/CRM/Core/DAO/JobLog.php +++ b/civicrm/CRM/Core/DAO/JobLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/JobLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2bcfc373a7ce0958aea907823720c3c0) + * (GenCodeChecksum:3456b559213c3916aad90a0db8789757) */ /** diff --git a/civicrm/CRM/Core/DAO/LocBlock.php b/civicrm/CRM/Core/DAO/LocBlock.php index 2a5aa70929..9e8ff2b964 100644 --- a/civicrm/CRM/Core/DAO/LocBlock.php +++ b/civicrm/CRM/Core/DAO/LocBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/LocBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b3cd6cc4298a1df379876cc9c96a4a6b) + * (GenCodeChecksum:a9b4f279ec52aa2e142cd26ae8beffd5) */ /** diff --git a/civicrm/CRM/Core/DAO/LocationType.php b/civicrm/CRM/Core/DAO/LocationType.php index e74f694f25..cdee58eb23 100644 --- a/civicrm/CRM/Core/DAO/LocationType.php +++ b/civicrm/CRM/Core/DAO/LocationType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/LocationType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c3560b71c6b732aaa7febb2567fc1b9c) + * (GenCodeChecksum:260be4cdbe3a79363c3ada3137125c4a) */ /** diff --git a/civicrm/CRM/Core/DAO/Log.php b/civicrm/CRM/Core/DAO/Log.php index d013037be5..fcf63b7e2b 100644 --- a/civicrm/CRM/Core/DAO/Log.php +++ b/civicrm/CRM/Core/DAO/Log.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Log.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f7870f1117022484520fe4ef9c015edc) + * (GenCodeChecksum:0a82a165e8054985acc0f57feebc65ff) */ /** diff --git a/civicrm/CRM/Core/DAO/MailSettings.php b/civicrm/CRM/Core/DAO/MailSettings.php index 8351ea1500..70d5468446 100644 --- a/civicrm/CRM/Core/DAO/MailSettings.php +++ b/civicrm/CRM/Core/DAO/MailSettings.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MailSettings.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:55eb307722a559ed1b6413a38520d635) + * (GenCodeChecksum:05dd0edd89684132a6caf6b165665737) */ /** diff --git a/civicrm/CRM/Core/DAO/Managed.php b/civicrm/CRM/Core/DAO/Managed.php index 3141c37a4d..db3505cdf7 100644 --- a/civicrm/CRM/Core/DAO/Managed.php +++ b/civicrm/CRM/Core/DAO/Managed.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Managed.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0a67162f8af5911b1a6a0f5a03a1b329) + * (GenCodeChecksum:7063a28b0e93d12d335eaad9de5f2aa7) */ /** diff --git a/civicrm/CRM/Core/DAO/Mapping.php b/civicrm/CRM/Core/DAO/Mapping.php index 5c61cec13c..d2150301d9 100644 --- a/civicrm/CRM/Core/DAO/Mapping.php +++ b/civicrm/CRM/Core/DAO/Mapping.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Mapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a1f0faf7e338aa60dfb0243ee1543f28) + * (GenCodeChecksum:3f02847e736fe72f375e4ff32c2a61c5) */ /** diff --git a/civicrm/CRM/Core/DAO/MappingField.php b/civicrm/CRM/Core/DAO/MappingField.php index 65734ac0c8..d6f81beed4 100644 --- a/civicrm/CRM/Core/DAO/MappingField.php +++ b/civicrm/CRM/Core/DAO/MappingField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MappingField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:11ff525a557ec58ebfa4fed22af699ea) + * (GenCodeChecksum:77ca1e64609d29de090d71311dc0e7ac) */ /** diff --git a/civicrm/CRM/Core/DAO/Menu.php b/civicrm/CRM/Core/DAO/Menu.php index 82c8617dfa..b6e000e03b 100644 --- a/civicrm/CRM/Core/DAO/Menu.php +++ b/civicrm/CRM/Core/DAO/Menu.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Menu.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:42fee92ca199cddbfabfac15b1f3d641) + * (GenCodeChecksum:96c64cb8e13a36f16745aefaff64440a) */ /** diff --git a/civicrm/CRM/Core/DAO/MessageTemplate.php b/civicrm/CRM/Core/DAO/MessageTemplate.php index 529cb4da0a..71fa8870ef 100644 --- a/civicrm/CRM/Core/DAO/MessageTemplate.php +++ b/civicrm/CRM/Core/DAO/MessageTemplate.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MessageTemplate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cd30af196b1fc606a1fdccc6d7cfb096) + * (GenCodeChecksum:41d8acdc31465a852930f88cf1604224) */ /** diff --git a/civicrm/CRM/Core/DAO/Navigation.php b/civicrm/CRM/Core/DAO/Navigation.php index 2a4aded44a..9563a84181 100644 --- a/civicrm/CRM/Core/DAO/Navigation.php +++ b/civicrm/CRM/Core/DAO/Navigation.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Navigation.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ab8ed383a2b4fe3120d6ea52b18b4e6d) + * (GenCodeChecksum:aeeb917df8c32ff97102c2c710d41d19) */ /** diff --git a/civicrm/CRM/Core/DAO/Note.php b/civicrm/CRM/Core/DAO/Note.php index 9bcec945de..d47f7d40c0 100644 --- a/civicrm/CRM/Core/DAO/Note.php +++ b/civicrm/CRM/Core/DAO/Note.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Note.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e1249165b22b38a9aee6bd558181ef9d) + * (GenCodeChecksum:1a545c1e601969ae689d9577a3c14389) */ /** diff --git a/civicrm/CRM/Core/DAO/OpenID.php b/civicrm/CRM/Core/DAO/OpenID.php index 8513bef4ed..4b85ea7148 100644 --- a/civicrm/CRM/Core/DAO/OpenID.php +++ b/civicrm/CRM/Core/DAO/OpenID.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OpenID.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:6d4dbdfba0d15a3cdaeb82395ad9b8fc) + * (GenCodeChecksum:4ff4afe262a2f93f500559f17f096ae8) */ /** diff --git a/civicrm/CRM/Core/DAO/OptionGroup.php b/civicrm/CRM/Core/DAO/OptionGroup.php index ea3ae4debe..5b8b744b54 100644 --- a/civicrm/CRM/Core/DAO/OptionGroup.php +++ b/civicrm/CRM/Core/DAO/OptionGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OptionGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a2caf8a64fc70eef9478a1d879ab6784) + * (GenCodeChecksum:54d95c919472473c234b6747d668bf85) */ /** diff --git a/civicrm/CRM/Core/DAO/OptionValue.php b/civicrm/CRM/Core/DAO/OptionValue.php index fed0364fe8..a8dccef83a 100644 --- a/civicrm/CRM/Core/DAO/OptionValue.php +++ b/civicrm/CRM/Core/DAO/OptionValue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OptionValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:156637c23fd657e633b36dc8d410d4ab) + * (GenCodeChecksum:b07a5bf40414e7b7c35fe49a1900df68) */ /** diff --git a/civicrm/CRM/Core/DAO/Phone.php b/civicrm/CRM/Core/DAO/Phone.php index dc437525fb..d2c869ffc9 100644 --- a/civicrm/CRM/Core/DAO/Phone.php +++ b/civicrm/CRM/Core/DAO/Phone.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Phone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a6e9de26d34f355e2365c6d4336f734f) + * (GenCodeChecksum:8298e3f0ae875f23de4b0c6a737e94c6) */ /** diff --git a/civicrm/CRM/Core/DAO/PreferencesDate.php b/civicrm/CRM/Core/DAO/PreferencesDate.php index 044d160ff5..25a2e2b969 100644 --- a/civicrm/CRM/Core/DAO/PreferencesDate.php +++ b/civicrm/CRM/Core/DAO/PreferencesDate.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PreferencesDate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e24b6513a0604a340a896973ce8d2db2) + * (GenCodeChecksum:ae20ee814de4f0fe71ac45d4a392fba9) */ /** diff --git a/civicrm/CRM/Core/DAO/PrevNextCache.php b/civicrm/CRM/Core/DAO/PrevNextCache.php index 66faef2a09..69baeea85f 100644 --- a/civicrm/CRM/Core/DAO/PrevNextCache.php +++ b/civicrm/CRM/Core/DAO/PrevNextCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PrevNextCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ddd681f365e2e377c23188cf3563c522) + * (GenCodeChecksum:b3e9aecea5100250d4b6ce9a4f6ca036) */ /** diff --git a/civicrm/CRM/Core/DAO/PrintLabel.php b/civicrm/CRM/Core/DAO/PrintLabel.php index a15518cc6e..a131268c36 100644 --- a/civicrm/CRM/Core/DAO/PrintLabel.php +++ b/civicrm/CRM/Core/DAO/PrintLabel.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PrintLabel.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:dff1181c7ca564844b6fed3b5eb2e37e) + * (GenCodeChecksum:2fb53845aa61d793ae0981a2481bbb79) */ /** diff --git a/civicrm/CRM/Core/DAO/RecurringEntity.php b/civicrm/CRM/Core/DAO/RecurringEntity.php index ece6741870..c785d99070 100644 --- a/civicrm/CRM/Core/DAO/RecurringEntity.php +++ b/civicrm/CRM/Core/DAO/RecurringEntity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/RecurringEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1f197a5848ca641233a99582e055dfb2) + * (GenCodeChecksum:f1f931c974eaf11d7540549468feae59) */ /** diff --git a/civicrm/CRM/Core/DAO/Setting.php b/civicrm/CRM/Core/DAO/Setting.php index a7368b696a..272b4cbfa2 100644 --- a/civicrm/CRM/Core/DAO/Setting.php +++ b/civicrm/CRM/Core/DAO/Setting.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Setting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9fa60718e4fb92cc6b3e7f9563671b00) + * (GenCodeChecksum:b4d9feaf199010473cdf5b2d0a0d2f5e) */ /** diff --git a/civicrm/CRM/Core/DAO/StateProvince.php b/civicrm/CRM/Core/DAO/StateProvince.php index 03d241ac3a..94162e8ac2 100644 --- a/civicrm/CRM/Core/DAO/StateProvince.php +++ b/civicrm/CRM/Core/DAO/StateProvince.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/StateProvince.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f7cd096f67c28ef937992bb61ba60544) + * (GenCodeChecksum:4e9d53ba801682110c3839eb703aa052) */ /** diff --git a/civicrm/CRM/Core/DAO/StatusPreference.php b/civicrm/CRM/Core/DAO/StatusPreference.php index c3bc29c8ce..996cd9c8d1 100644 --- a/civicrm/CRM/Core/DAO/StatusPreference.php +++ b/civicrm/CRM/Core/DAO/StatusPreference.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/StatusPreference.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ce861431549af8024fdbfe418607202f) + * (GenCodeChecksum:58684eb3e6d1e474bae8449f4a84ef63) */ /** diff --git a/civicrm/CRM/Core/DAO/SystemLog.php b/civicrm/CRM/Core/DAO/SystemLog.php index fe4caee743..17f4c25652 100644 --- a/civicrm/CRM/Core/DAO/SystemLog.php +++ b/civicrm/CRM/Core/DAO/SystemLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/SystemLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f74efcf0420fc093c103adf67384fd4e) + * (GenCodeChecksum:53db5a26709c3b0d4cad8e38b28aef18) */ /** diff --git a/civicrm/CRM/Core/DAO/Tag.php b/civicrm/CRM/Core/DAO/Tag.php index 9cdacdc38f..f1578b2624 100644 --- a/civicrm/CRM/Core/DAO/Tag.php +++ b/civicrm/CRM/Core/DAO/Tag.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Tag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9f26fdcff51afe66519e1c06518dccca) + * (GenCodeChecksum:7267e5b21f5bc822a58ffffc23b6dec1) */ /** diff --git a/civicrm/CRM/Core/DAO/Timezone.php b/civicrm/CRM/Core/DAO/Timezone.php index b1592995d6..0c5979ad40 100644 --- a/civicrm/CRM/Core/DAO/Timezone.php +++ b/civicrm/CRM/Core/DAO/Timezone.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Timezone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:23841252d8f5bba890c26b1b7c21ab9a) + * (GenCodeChecksum:a48a49afa56a0c510fb1c05a41a62435) */ /** diff --git a/civicrm/CRM/Core/DAO/UFField.php b/civicrm/CRM/Core/DAO/UFField.php index fef206fed4..2d788af933 100644 --- a/civicrm/CRM/Core/DAO/UFField.php +++ b/civicrm/CRM/Core/DAO/UFField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:100fb17dc7c4289eab137e5d7dc4e71c) + * (GenCodeChecksum:e0ae6fe5adeee3c32d64c87272d090b6) */ /** diff --git a/civicrm/CRM/Core/DAO/UFGroup.php b/civicrm/CRM/Core/DAO/UFGroup.php index af79ab59c5..dca75ebaf8 100644 --- a/civicrm/CRM/Core/DAO/UFGroup.php +++ b/civicrm/CRM/Core/DAO/UFGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a146a779e1515bd1edbcd00682c0439a) + * (GenCodeChecksum:17f8c18034495ef7294802e4597b06f3) */ /** diff --git a/civicrm/CRM/Core/DAO/UFJoin.php b/civicrm/CRM/Core/DAO/UFJoin.php index c634c1a1ee..a9e201e3b5 100644 --- a/civicrm/CRM/Core/DAO/UFJoin.php +++ b/civicrm/CRM/Core/DAO/UFJoin.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFJoin.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:89f24a136166b937d33c10856bbdbcde) + * (GenCodeChecksum:d8e9800524a344006c80c158e722f6cd) */ /** diff --git a/civicrm/CRM/Core/DAO/UFMatch.php b/civicrm/CRM/Core/DAO/UFMatch.php index ab35e1884b..e2a2171e44 100644 --- a/civicrm/CRM/Core/DAO/UFMatch.php +++ b/civicrm/CRM/Core/DAO/UFMatch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFMatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1e97a23a30709e3dccfe0cb1952e71b4) + * (GenCodeChecksum:d732d7f3bfb8cec86d292b888e12a93c) */ /** diff --git a/civicrm/CRM/Core/DAO/Website.php b/civicrm/CRM/Core/DAO/Website.php index b21f74f4f6..126d768c94 100644 --- a/civicrm/CRM/Core/DAO/Website.php +++ b/civicrm/CRM/Core/DAO/Website.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Website.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7647474e15e7b7f66a4c57a64303e68d) + * (GenCodeChecksum:b71c21e94fb523fd92a2579cb36ccc9b) */ /** diff --git a/civicrm/CRM/Core/DAO/WordReplacement.php b/civicrm/CRM/Core/DAO/WordReplacement.php index e38bc0afef..078dbc9fd7 100644 --- a/civicrm/CRM/Core/DAO/WordReplacement.php +++ b/civicrm/CRM/Core/DAO/WordReplacement.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/WordReplacement.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f423838740b39ae0935ac1282d9c5734) + * (GenCodeChecksum:0e956a44911169933aabb2bfdc266e32) */ /** diff --git a/civicrm/CRM/Core/DAO/Worldregion.php b/civicrm/CRM/Core/DAO/Worldregion.php index 11cc3ed329..d1bc1f586d 100644 --- a/civicrm/CRM/Core/DAO/Worldregion.php +++ b/civicrm/CRM/Core/DAO/Worldregion.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Worldregion.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d0738f13dd1c212ec0af5fc031a9c32f) + * (GenCodeChecksum:ec8ef1b1bc0640dbc48b47a34ea197ed) */ /** diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php index 855ab66045..4dc1b95db3 100644 --- a/civicrm/CRM/Core/Form/Search.php +++ b/civicrm/CRM/Core/Form/Search.php @@ -85,6 +85,13 @@ class CRM_Core_Form_Search extends CRM_Core_Form { return $this->_taskList; } + /** + * Should we be adding all the metadata for contact search fields or just for the sort name. + * + * @var bool + */ + protected $sortNameOnly = FALSE; + /** * Metadata for fields on the search form. * @@ -424,6 +431,9 @@ class CRM_Core_Form_Search extends CRM_Core_Form { return; } $this->addSortNameField(); + if ($this->sortNameOnly) { + return; + } $this->_group = CRM_Core_PseudoConstant::nestedGroup(); if ($this->_group) { @@ -434,6 +444,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form { 'class' => 'crm-select2', ] ); + $this->searchFieldMetadata['Contact']['group'] = ['name' => 'group', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Select']]; } $contactTags = CRM_Core_BAO_Tag::getTags(); @@ -446,10 +457,13 @@ class CRM_Core_Form_Search extends CRM_Core_Form { ] ); } + $this->searchFieldMetadata['Contact']['contact_tags'] = ['name' => 'contact_tags', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Select']]; $this->addField('contact_type', ['entity' => 'Contact']); + $this->searchFieldMetadata['Contact']['contact_type'] = CRM_Contact_DAO_Contact::fields()['contact_type']; if (CRM_Core_Permission::check('access deleted contacts') && Civi::settings()->get('contact_undelete')) { $this->addElement('checkbox', 'deleted_contacts', ts('Search in Trash') . '<br />' . ts('(deleted contacts)')); + $this->searchFieldMetadata['Contact']['deleted_contacts'] = ['name' => 'deleted_contacts', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Checkbox']]; } } diff --git a/civicrm/CRM/Core/LegacyErrorHandler.php b/civicrm/CRM/Core/LegacyErrorHandler.php index ae0f1f9859..f82b3ce6d3 100644 --- a/civicrm/CRM/Core/LegacyErrorHandler.php +++ b/civicrm/CRM/Core/LegacyErrorHandler.php @@ -20,18 +20,6 @@ class CRM_Core_LegacyErrorHandler { CRM_Utils_Array::value('message_title', $params), CRM_Utils_Array::value('message_type', $params, 'error') ); - - // @todo remove this code - legacy redirect path is an interim measure for moving redirects out of BAO - // to somewhere slightly more acceptable. they should not be part of the exception class & should - // be managed @ the form level - if you find a form that is triggering this piece of code - // you should log a ticket for it to be removed with details about the form you were on. - if (!empty($params['legacy_redirect_path'])) { - if (CRM_Utils_System::isDevelopment()) { - $intentionalENotice = "How did you get HERE?! - Please log in JIRA"; - // here we could set a message telling devs to log it per above - } - CRM_Utils_System::redirect($params['legacy_redirect_path'], $params['legacy_redirect_query']); - } } } diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php index a388328696..cf47fa6918 100644 --- a/civicrm/CRM/Core/ManagedEntities.php +++ b/civicrm/CRM/Core/ManagedEntities.php @@ -112,10 +112,15 @@ class CRM_Core_ManagedEntities { /** * Identify any enabled/disabled modules. Add new entities, update * existing entities, and remove orphaned (stale) entities. + * @param bool $ignoreUpgradeMode * * @throws Exception */ - public function reconcile() { + public function reconcile($ignoreUpgradeMode = FALSE) { + // Do not reconcile whilst we are in upgrade mode + if (CRM_Core_Config::singleton()->isUpgradeMode() && !$ignoreUpgradeMode) { + return; + } if ($error = $this->validate($this->getDeclarations())) { throw new Exception($error); } diff --git a/civicrm/CRM/Core/OptionGroup.php b/civicrm/CRM/Core/OptionGroup.php index 145a07fced..97af275ded 100644 --- a/civicrm/CRM/Core/OptionGroup.php +++ b/civicrm/CRM/Core/OptionGroup.php @@ -121,7 +121,7 @@ class CRM_Core_OptionGroup { } $query = " -SELECT v.{$labelColumnName} as {$labelColumnName} ,v.{$keyColumnName} as value, v.grouping as grouping +SELECT v.{$labelColumnName} as {$labelColumnName} ,v.{$keyColumnName} as value, v.grouping as `grouping` FROM civicrm_option_value v, civicrm_option_group g WHERE v.option_group_id = g.id @@ -225,7 +225,7 @@ WHERE v.option_group_id = g.id } } $query = " -SELECT v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as grouping +SELECT v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as `grouping` FROM civicrm_option_value v, civicrm_option_group g WHERE v.option_group_id = g.id diff --git a/civicrm/CRM/Core/Page/Basic.php b/civicrm/CRM/Core/Page/Basic.php index 3c4b9089b9..0b784e25cd 100644 --- a/civicrm/CRM/Core/Page/Basic.php +++ b/civicrm/CRM/Core/Page/Basic.php @@ -170,7 +170,7 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { if ($id) { if (!$this->checkPermission($id, NULL)) { - CRM_Core_Error::fatal(ts('You do not have permission to make changes to the record')); + CRM_Core_Error::statusBounce(ts('You do not have permission to make changes to the record')); } } diff --git a/civicrm/CRM/Core/Payment/AuthorizeNet.php b/civicrm/CRM/Core/Payment/AuthorizeNet.php index dbdcdcbcac..52657cf221 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNet.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNet.php @@ -13,6 +13,8 @@ * @author Marshal Newrock <marshal@idealso.com> */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * NOTE: * When looking up response codes in the Authorize.Net API, they @@ -762,7 +764,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { // submit to authorize.net $submit = curl_init($this->_paymentProcessor['url_recur']); if (!$submit) { - return self::error(9002, 'Could not initiate connection to payment gateway'); + throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9002); } curl_setopt($submit, CURLOPT_RETURNTRANSFER, 1); @@ -784,7 +786,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $message = "{$responseFields['code']}: {$responseFields['text']}"; if ($responseFields['resultCode'] == 'Error') { - return self::error($responseFields['code'], $responseFields['text']); + throw new PaymentProcessorException($responseFields['text'], $responseFields['code']); } return TRUE; } diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php index 21803cd8ac..2b971e5156 100644 --- a/civicrm/CRM/Core/Payment/PayPalImpl.php +++ b/civicrm/CRM/Core/Payment/PayPalImpl.php @@ -256,10 +256,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - throw new PaymentProcessorException($result->message); - } - /* Success */ return $result['token']; @@ -302,10 +298,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - throw new PaymentProcessorException(CRM_Core_Error::getMessages($result)); - } - /* Success */ $fieldMap = [ 'token' => 'token', @@ -358,10 +350,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - throw new PaymentProcessorException(CRM_Core_Error::getMessages($result)); - } - /* Success */ $params['trxn_id'] = $result['transactionid']; $params['gross_amount'] = $result['amt']; @@ -425,10 +413,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } - /* Success - result looks like" * array ( * 'profileid' => 'I-CP1U0PLG91R2', @@ -562,11 +546,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); - // WAG - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } - $params['recurr_profile_id'] = NULL; if (CRM_Utils_Array::value('is_recur', $params) == 1) { @@ -698,7 +677,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * @param string $message * @param array $params * - * @return array|bool|object + * @return bool * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function cancelSubscription(&$message = '', $params = []) { @@ -711,9 +690,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['NOTE'] = CRM_Utils_Array::value('reason', $params); $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } + $message = "{$result['ack']}: profileid={$result['profileid']}"; return TRUE; } @@ -793,9 +770,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['ZIP'] = $params['country']; $result = $this->invokeAPI($args); - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } + $message = "{$result['ack']}: profileid={$result['profileid']}"; return TRUE; } @@ -806,7 +781,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * @param string $message * @param array $params * - * @return array|bool|object + * @return bool * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function changeSubscriptionAmount(&$message = '', $params = []) { @@ -822,9 +797,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->invokeAPI($args); CRM_Core_Error::debug_var('$result', $result); - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } + $message = "{$result['ack']}: profileid={$result['profileid']}"; return TRUE; } @@ -1013,21 +986,18 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * returns an associative array containing the response from the server. * * @param array $args - * @param null $url * * @return array|object - * @throws \Exception + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function invokeAPI($args, $url = NULL) { - - if ($url === NULL) { - if (empty($this->_paymentProcessor['url_api'])) { - CRM_Core_Error::fatal(ts('Please set the API URL. Please refer to the documentation for more details')); - } + public function invokeAPI($args) { - $url = $this->_paymentProcessor['url_api'] . 'nvp'; + if (empty($this->_paymentProcessor['url_api'])) { + throw new PaymentProcessorException(ts('Please set the API URL. Please refer to the documentation for more details')); } + $url = $this->_paymentProcessor['url_api'] . 'nvp'; + $p = []; foreach ($args as $n => $v) { $p[] = "$n=" . urlencode($v); @@ -1037,7 +1007,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $nvpreq = implode('&', $p); if (!function_exists('curl_init')) { - CRM_Core_Error::fatal("curl functions NOT available."); + throw new PaymentProcessorException('curl functions NOT available.'); } //setting the curl parameters. @@ -1062,16 +1032,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = self::deformat($response); if (curl_errno($ch)) { - $e = CRM_Core_Error::singleton(); - $e->push(curl_errno($ch), - 0, NULL, - curl_error($ch) - ); - return $e; - } - else { - curl_close($ch); + throw new PaymentProcessorException(ts('Network error') . ' ' . curl_error($ch) . curl_errno($ch), curl_errno($ch)); } + curl_close($ch); $outcome = strtolower(CRM_Utils_Array::value('ack', $result)); diff --git a/civicrm/CRM/Cxn/DAO/Cxn.php b/civicrm/CRM/Cxn/DAO/Cxn.php index 5a07016659..2565343336 100644 --- a/civicrm/CRM/Cxn/DAO/Cxn.php +++ b/civicrm/CRM/Cxn/DAO/Cxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Cxn/Cxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f61b008692885b08cacabc147424ba52) + * (GenCodeChecksum:dbdc69652244ce9a681d85cd39ab2ba8) */ /** diff --git a/civicrm/CRM/Dashlet/Page/AllCases.php b/civicrm/CRM/Dashlet/Page/AllCases.php index 91f3c74054..b321c67c2c 100644 --- a/civicrm/CRM/Dashlet/Page/AllCases.php +++ b/civicrm/CRM/Dashlet/Page/AllCases.php @@ -34,7 +34,7 @@ class CRM_Dashlet_Page_AllCases extends CRM_Core_Page { //check for civicase access. if (!CRM_Case_BAO_Case::accessCiviCase()) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } $controller = new CRM_Core_Controller_Simple('CRM_Case_Form_Search', diff --git a/civicrm/CRM/Dashlet/Page/CaseDashboard.php b/civicrm/CRM/Dashlet/Page/CaseDashboard.php index 85a21d2f62..3428e2e447 100644 --- a/civicrm/CRM/Dashlet/Page/CaseDashboard.php +++ b/civicrm/CRM/Dashlet/Page/CaseDashboard.php @@ -31,7 +31,7 @@ class CRM_Dashlet_Page_CaseDashboard extends CRM_Core_Page { public function run() { //check for civicase access. if (!CRM_Case_BAO_Case::accessCiviCase()) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } $summary = CRM_Case_BAO_Case::getCasesSummary(TRUE); diff --git a/civicrm/CRM/Dashlet/Page/MyCases.php b/civicrm/CRM/Dashlet/Page/MyCases.php index 5d5420e1fc..1b643ff72d 100644 --- a/civicrm/CRM/Dashlet/Page/MyCases.php +++ b/civicrm/CRM/Dashlet/Page/MyCases.php @@ -34,7 +34,7 @@ class CRM_Dashlet_Page_MyCases extends CRM_Core_Page { //check for civicase access. if (!CRM_Case_BAO_Case::accessCiviCase()) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } $controller = new CRM_Core_Controller_Simple('CRM_Case_Form_Search', diff --git a/civicrm/CRM/Dedupe/DAO/Exception.php b/civicrm/CRM/Dedupe/DAO/Exception.php index 3236cb1774..7c10c69603 100644 --- a/civicrm/CRM/Dedupe/DAO/Exception.php +++ b/civicrm/CRM/Dedupe/DAO/Exception.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/Exception.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1df7735bf1c4199f7b7ec94b1d406c14) + * (GenCodeChecksum:bc7e5282c75e16acace7b9d8555f6ef7) */ /** diff --git a/civicrm/CRM/Dedupe/DAO/Rule.php b/civicrm/CRM/Dedupe/DAO/Rule.php index 5f8af8cad1..90b39affc7 100644 --- a/civicrm/CRM/Dedupe/DAO/Rule.php +++ b/civicrm/CRM/Dedupe/DAO/Rule.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/Rule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:30ac1f4265b98b426df72998fe049025) + * (GenCodeChecksum:9d3a0a3213757c341f051bf258b5c67f) */ /** diff --git a/civicrm/CRM/Dedupe/DAO/RuleGroup.php b/civicrm/CRM/Dedupe/DAO/RuleGroup.php index 75e44bd049..fbf8ceae8a 100644 --- a/civicrm/CRM/Dedupe/DAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/DAO/RuleGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/RuleGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2e17168197c3a81d0280c153b668dc6e) + * (GenCodeChecksum:16caaddab6049c5559c418b140d03fa8) */ /** diff --git a/civicrm/CRM/Event/Cart/DAO/Cart.php b/civicrm/CRM/Event/Cart/DAO/Cart.php index ed2b6a86ea..23b95293ac 100644 --- a/civicrm/CRM/Event/Cart/DAO/Cart.php +++ b/civicrm/CRM/Event/Cart/DAO/Cart.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Cart/Cart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7b08194ffb923d40298dfa67886a3be2) + * (GenCodeChecksum:57220a9c79c8b801d23ed0c31cb18a63) */ /** diff --git a/civicrm/CRM/Event/Cart/DAO/EventInCart.php b/civicrm/CRM/Event/Cart/DAO/EventInCart.php index 1c85134645..8afcdcbdf8 100644 --- a/civicrm/CRM/Event/Cart/DAO/EventInCart.php +++ b/civicrm/CRM/Event/Cart/DAO/EventInCart.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Cart/EventInCart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:810abc7e3ff25bad4a4a0ef82c8158c7) + * (GenCodeChecksum:a3cddf6fa66ed1294fb6a2736449ac3f) */ /** diff --git a/civicrm/CRM/Event/DAO/Event.php b/civicrm/CRM/Event/DAO/Event.php index 9f29222c7c..53ce1f60c4 100644 --- a/civicrm/CRM/Event/DAO/Event.php +++ b/civicrm/CRM/Event/DAO/Event.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Event.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:839408d0d122c558757ad2855021733d) + * (GenCodeChecksum:700e3666bce40a962c06c970790fb599) */ /** diff --git a/civicrm/CRM/Event/DAO/Participant.php b/civicrm/CRM/Event/DAO/Participant.php index c292222633..2bf5d85243 100644 --- a/civicrm/CRM/Event/DAO/Participant.php +++ b/civicrm/CRM/Event/DAO/Participant.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Participant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:eb8c441daf90abc9313b39ef6033320b) + * (GenCodeChecksum:bc3da50711791a21ca2aff845977efbb) */ /** diff --git a/civicrm/CRM/Event/DAO/ParticipantPayment.php b/civicrm/CRM/Event/DAO/ParticipantPayment.php index 37c9c9d4b0..9b7c5a4867 100644 --- a/civicrm/CRM/Event/DAO/ParticipantPayment.php +++ b/civicrm/CRM/Event/DAO/ParticipantPayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/ParticipantPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a439bb3f9e139078684c158e8c47748b) + * (GenCodeChecksum:2bf1d538625b84200c82b914ea043e90) */ /** diff --git a/civicrm/CRM/Event/DAO/ParticipantStatusType.php b/civicrm/CRM/Event/DAO/ParticipantStatusType.php index f61dc724ce..85cc8e419f 100644 --- a/civicrm/CRM/Event/DAO/ParticipantStatusType.php +++ b/civicrm/CRM/Event/DAO/ParticipantStatusType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/ParticipantStatusType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ff67f80115b20f29d4237edbfff9fe83) + * (GenCodeChecksum:d87b49cf752d4ffb3ff346c30506e170) */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/Delete.php b/civicrm/CRM/Event/Form/ManageEvent/Delete.php index 30dc58e441..376800f00c 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Delete.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Delete.php @@ -29,6 +29,9 @@ class CRM_Event_Form_ManageEvent_Delete extends CRM_Event_Form_ManageEvent { /** * Set variables up before form is built. + * + * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public function preProcess() { parent::preProcess(); @@ -41,7 +44,7 @@ class CRM_Event_Form_ManageEvent_Delete extends CRM_Event_Form_ManageEvent { } if (!CRM_Event_BAO_Event::checkPermission($this->_id, CRM_Core_Permission::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 0b0ee041a4..69a3d54a61 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -244,7 +244,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { && CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && !CRM_Core_Permission::check('add contributions of type ' . CRM_Contribute_PseudoConstant::financialType($this->_values['event']['financial_type_id'])) ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->checkValidEvent($infoUrl); diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php index ae9fa34134..230001b9b6 100644 --- a/civicrm/CRM/Event/Form/Registration/Confirm.php +++ b/civicrm/CRM/Event/Form/Registration/Confirm.php @@ -365,6 +365,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { /** * Process the form submission. + * + * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public function postProcess() { $now = date('YmdHis'); diff --git a/civicrm/CRM/Event/Form/Registration/Register.php b/civicrm/CRM/Event/Form/Registration/Register.php index e44d2e3f72..4065bed5db 100644 --- a/civicrm/CRM/Event/Form/Registration/Register.php +++ b/civicrm/CRM/Event/Form/Registration/Register.php @@ -807,10 +807,16 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { $errors['additional_participants'] = ts("There is only enough space left on this event for %1 participant(s).", [1 => $form->_availableRegistrations]); } + $numberAdditionalParticipants = $fields['additional_participants'] ?? 0; + + if ($numberAdditionalParticipants && !CRM_Utils_Rule::positiveInteger($fields['additional_participants'])) { + $errors['additional_participants'] = ts('Please enter a whole number for Number of additional people.'); + } + // during confirmation don't allow to increase additional participants, CRM-4320 - if ($form->_allowConfirmation && !empty($fields['additional_participants']) && + if ($form->_allowConfirmation && $numberAdditionalParticipants && is_array($form->_additionalParticipantIds) && - $fields['additional_participants'] > count($form->_additionalParticipantIds) + $numberAdditionalParticipants > count($form->_additionalParticipantIds) ) { $errors['additional_participants'] = ts("Oops. It looks like you are trying to increase the number of additional people you are registering for. You can confirm registration for a maximum of %1 additional people.", [1 => count($form->_additionalParticipantIds)]); } @@ -824,12 +830,6 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { } } - if (!empty($fields['additional_participants']) && - !CRM_Utils_Rule::positiveInteger($fields['additional_participants']) - ) { - $errors['additional_participants'] = ts('Please enter a whole number for Number of additional people.'); - } - // priceset validations if (!empty($fields['priceSetId']) && !$form->_requireApproval && !$form->_allowWaitlist @@ -844,8 +844,8 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { $errors = array_merge($errors, CRM_Utils_Array::value(0, $priceSetErrors, [])); $totalParticipants = $primaryParticipantCount; - if (!empty($fields['additional_participants'])) { - $totalParticipants += $fields['additional_participants']; + if ($numberAdditionalParticipants) { + $totalParticipants += $numberAdditionalParticipants; } if (empty($fields['bypass_payment']) && diff --git a/civicrm/CRM/Event/Form/Search.php b/civicrm/CRM/Event/Form/Search.php index c69dacf54d..6c2c7534b4 100644 --- a/civicrm/CRM/Event/Form/Search.php +++ b/civicrm/CRM/Event/Form/Search.php @@ -289,7 +289,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues, 0, FALSE, NULL, ['event_id']); - $this->set('formValues', $this->_formValues); $this->set('queryParams', $this->_queryParams); $buttonName = $this->controller->getButtonName(); @@ -382,29 +381,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { // if this search has been forced // then see if there are any get values, and if so over-ride the post values // note that this means that GET over-rides POST :) - $event = CRM_Utils_Request::retrieve('event', 'Positive'); - if ($event) { - $this->_formValues['event_id'] = $event; - $this->_formValues['event_name'] = CRM_Event_PseudoConstant::event($event, TRUE); - } - - $status = CRM_Utils_Request::retrieve('status', 'String'); - - if (isset($status)) { - if ($status === 'true') { - $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 1"); - } - elseif ($status === 'false') { - $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 0"); - } - elseif (is_numeric($status)) { - $statusTypes = (int) $status; - } - elseif (is_array($status) && !array_key_exists('IN', $status)) { - $statusTypes = array_keys($status); - } - $this->_formValues['participant_status_id'] = is_array($statusTypes) ? ['IN' => array_keys($statusTypes)] : $statusTypes; - } $role = CRM_Utils_Request::retrieve('role', 'String'); @@ -466,6 +442,28 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { */ public function setDefaultValues() { $this->_defaults = array_merge(parent::setDefaultValues(), (array) $this->_formValues); + $event = CRM_Utils_Request::retrieve('event', 'Positive'); + if ($event) { + $this->_defaults['event_id'] = $event; + $this->_defaults['event_name'] = CRM_Event_PseudoConstant::event($event, TRUE); + } + + $status = CRM_Utils_Request::retrieve('status', 'String'); + if (isset($status)) { + if ($status === 'true') { + $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 1"); + } + elseif ($status === 'false') { + $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 0"); + } + elseif (is_numeric($status)) { + $statusTypes = (int) $status; + } + elseif (is_array($status) && !array_key_exists('IN', $status)) { + $statusTypes = array_keys($status); + } + $this->_defaults['participant_status_id'] = is_array($statusTypes) ? array_keys($statusTypes) : $statusTypes; + } return $this->_defaults; } diff --git a/civicrm/CRM/Event/Form/Task/Delete.php b/civicrm/CRM/Event/Form/Task/Delete.php index 3c5413becf..d84c977c2f 100644 --- a/civicrm/CRM/Event/Form/Task/Delete.php +++ b/civicrm/CRM/Event/Form/Task/Delete.php @@ -41,7 +41,7 @@ class CRM_Event_Form_Task_Delete extends CRM_Event_Form_Task { //check for delete if (!CRM_Core_Permission::checkActionPermission('CiviEvent', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); foreach ($this->_participantIds as $participantId) { diff --git a/civicrm/CRM/Event/Page/ParticipantListing.php b/civicrm/CRM/Event/Page/ParticipantListing.php index 1b8540312a..a9f718ca61 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing.php +++ b/civicrm/CRM/Event/Page/ParticipantListing.php @@ -35,7 +35,7 @@ class CRM_Event_Page_ParticipantListing extends CRM_Core_Page { 'participant_listing_id' ); if (!$this->_participantListingID) { - CRM_Core_Error::fatal(ts('The Participant Listing feature is not currently enabled for this event.')); + CRM_Core_Error::statusBounce(ts('The Participant Listing feature is not currently enabled for this event.')); } // retrieve Event Title and include it in page title diff --git a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php index a15c5928e8..fef5ae7b12 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php @@ -35,7 +35,7 @@ class CRM_Event_Page_ParticipantListing_NameStatusAndDate extends CRM_Core_Page 'participant_listing_id' ); if (!$this->_participantListingID) { - CRM_Core_Error::fatal(ts("The Participant Listing feature is not currently enabled for this event.")); + CRM_Core_Error::statusBounce(ts("The Participant Listing feature is not currently enabled for this event.")); } // retrieve Event Title and include it in page title diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php index 2cb0f6a7b6..bffb062de0 100644 --- a/civicrm/CRM/Export/BAO/ExportProcessor.php +++ b/civicrm/CRM/Export/BAO/ExportProcessor.php @@ -2374,6 +2374,10 @@ LIMIT $offset, $limit 'csv', FALSE ); + // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as + // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31) + // and it continues to work on Libre Office, Numbers, Notes etc. + echo "\xEF\xBB\xBF"; CRM_Core_Report_Excel::makeCSVTable($headerRows, [], NULL, TRUE); } diff --git a/civicrm/CRM/Extension/Container/Basic.php b/civicrm/CRM/Extension/Container/Basic.php index 69123ac94a..0588c5eeb1 100644 --- a/civicrm/CRM/Extension/Container/Basic.php +++ b/civicrm/CRM/Extension/Container/Basic.php @@ -35,28 +35,31 @@ class CRM_Extension_Container_Basic implements CRM_Extension_Container_Interface public $baseUrl; /** - * @var CRM_Utils_Cache_Interface|NULL + * @var CRM_Utils_Cache_Interface|null * * Note: Treat as private. This is only public to facilitate debugging. */ public $cache; /** - * @var string the cache key used for any data stored by this container + * @var string + * The cache key used for any data stored by this container * * Note: Treat as private. This is only public to facilitate debugging. */ public $cacheKey; /** - * @var array($key => $relPath) + * @var array + * ($key => $relPath) * * Note: Treat as private. This is only public to facilitate debugging. */ public $relPaths = FALSE; /** - * @var array($key => $relUrl) + * @var array + * ($key => $relUrl) * * Derived from $relPaths. On Unix systems (where file-paths and * URL-paths both use '/' separator), this isn't necessary. On Windows diff --git a/civicrm/CRM/Extension/Downloader.php b/civicrm/CRM/Extension/Downloader.php index a092a88e46..cc43c8be6e 100644 --- a/civicrm/CRM/Extension/Downloader.php +++ b/civicrm/CRM/Extension/Downloader.php @@ -17,12 +17,14 @@ */ class CRM_Extension_Downloader { /** - * @var CRM_Extension_Container_Basic the place where downloaded extensions are ultimately stored + * @var CRM_Extension_Container_Basic + * The place where downloaded extensions are ultimately stored */ public $container; /** - * @var string local path to a temporary data directory + * @var string + * Local path to a temporary data directory */ public $tmpDir; diff --git a/civicrm/CRM/Extension/Mapper.php b/civicrm/CRM/Extension/Mapper.php index 3078e0eb39..a21af4d43b 100644 --- a/civicrm/CRM/Extension/Mapper.php +++ b/civicrm/CRM/Extension/Mapper.php @@ -45,7 +45,8 @@ class CRM_Extension_Mapper { protected $container; /** - * @var array (key => CRM_Extension_Info) + * @var \CRM_Extension_Info[] + * (key => CRM_Extension_Info) */ protected $infos = []; diff --git a/civicrm/CRM/Financial/DAO/Currency.php b/civicrm/CRM/Financial/DAO/Currency.php index bb7191133a..5d087d5571 100644 --- a/civicrm/CRM/Financial/DAO/Currency.php +++ b/civicrm/CRM/Financial/DAO/Currency.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/Currency.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:210360337389e12e2b94d9b69542e2b5) + * (GenCodeChecksum:deb271a4217800d258244eab0eec2af5) */ /** diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php index 582f0e5466..d0316067bb 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9d665341d7a4293411adf33acafdae1d) + * (GenCodeChecksum:677acfd2e16083ab88abbeb3051dd616) */ /** diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php index c8eb22da4c..8a57c1b2ab 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d1f8caf14eed45d30b99be154c7f3650) + * (GenCodeChecksum:a2a7ed7efce5731cde1127d2ca874fb6) */ /** diff --git a/civicrm/CRM/Financial/DAO/FinancialAccount.php b/civicrm/CRM/Financial/DAO/FinancialAccount.php index 262539007a..af9a1c8713 100644 --- a/civicrm/CRM/Financial/DAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/FinancialAccount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:05c251d7bf5f98a35b4a25abb98b70c8) + * (GenCodeChecksum:ccca91d77f1c8f2639bf0d81bd484b9c) */ /** diff --git a/civicrm/CRM/Financial/DAO/FinancialItem.php b/civicrm/CRM/Financial/DAO/FinancialItem.php index c9972d7c4e..728acc9447 100644 --- a/civicrm/CRM/Financial/DAO/FinancialItem.php +++ b/civicrm/CRM/Financial/DAO/FinancialItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:02ec1490ebc665316bc38da19b07cb60) + * (GenCodeChecksum:955fb837c150c2f16f165f8a03610769) */ /** diff --git a/civicrm/CRM/Financial/DAO/FinancialTrxn.php b/civicrm/CRM/Financial/DAO/FinancialTrxn.php index 410811ca91..4c664b179a 100644 --- a/civicrm/CRM/Financial/DAO/FinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/FinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:30dff7f6f16ef7cd997187a202a59173) + * (GenCodeChecksum:b4a9dceaf91c13ea192a11b7cb8805ca) */ /** diff --git a/civicrm/CRM/Financial/DAO/FinancialType.php b/civicrm/CRM/Financial/DAO/FinancialType.php index 343c912fc9..d6a2a5fdbd 100644 --- a/civicrm/CRM/Financial/DAO/FinancialType.php +++ b/civicrm/CRM/Financial/DAO/FinancialType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fbe9cc9ddab4b7f1be7a502240854437) + * (GenCodeChecksum:2b85a903889dbaebc8fd1dc4994ef11d) */ /** diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessor.php b/civicrm/CRM/Financial/DAO/PaymentProcessor.php index 58167b99ef..5fda60987d 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessor.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentProcessor.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:55a55af34cd25ec8d69f4145d3fa2870) + * (GenCodeChecksum:cf330d3d3e18960b1e32a3001d8cd038) */ /** diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php index 732ec4b539..1ec35e96d7 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentProcessorType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ea2020b03d32e0c0f1a2d4915f2a14b1) + * (GenCodeChecksum:5c1b8ad9b5ebf8ee399cf5d5268349bc) */ /** diff --git a/civicrm/CRM/Financial/DAO/PaymentToken.php b/civicrm/CRM/Financial/DAO/PaymentToken.php index c4ba2ff780..6042a126ad 100644 --- a/civicrm/CRM/Financial/DAO/PaymentToken.php +++ b/civicrm/CRM/Financial/DAO/PaymentToken.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentToken.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:078a57c5d0afbe495e82999ab197e12b) + * (GenCodeChecksum:13544efb93b23abff9ec2bf420fcd15a) */ /** diff --git a/civicrm/CRM/Financial/Form/FinancialType.php b/civicrm/CRM/Financial/Form/FinancialType.php index d9e223f8e3..9dd624538c 100644 --- a/civicrm/CRM/Financial/Form/FinancialType.php +++ b/civicrm/CRM/Financial/Form/FinancialType.php @@ -38,13 +38,15 @@ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form { /** * Set variables up before form is built. + * + * @throws \CRM_Core_Exception */ public function preProcess() { // Check permission for Financial Type when ACL-FT is enabled if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && !CRM_Core_Permission::check('administer CiviCRM Financial Types') ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); parent::preProcess(); diff --git a/civicrm/CRM/Financial/Page/FinancialType.php b/civicrm/CRM/Financial/Page/FinancialType.php index 6a999cecfb..7a1480d524 100644 --- a/civicrm/CRM/Financial/Page/FinancialType.php +++ b/civicrm/CRM/Financial/Page/FinancialType.php @@ -88,7 +88,7 @@ class CRM_Financial_Page_FinancialType extends CRM_Core_Page_Basic { if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && !CRM_Core_Permission::check('administer CiviCRM Financial Types') ) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } // get all financial types sorted by weight $financialType = []; diff --git a/civicrm/CRM/Friend/DAO/Friend.php b/civicrm/CRM/Friend/DAO/Friend.php index 1596351ed7..bb66fa7ff3 100644 --- a/civicrm/CRM/Friend/DAO/Friend.php +++ b/civicrm/CRM/Friend/DAO/Friend.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Friend/Friend.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8218c3da1a68f90b534e4724bd0b89b1) + * (GenCodeChecksum:1800a70ee75e0958cd01c250085ab793) */ /** diff --git a/civicrm/CRM/Friend/Form.php b/civicrm/CRM/Friend/Form.php index ce38a42d3f..e1e03c3576 100644 --- a/civicrm/CRM/Friend/Form.php +++ b/civicrm/CRM/Friend/Form.php @@ -97,7 +97,7 @@ class CRM_Friend_Form extends CRM_Core_Form { ); if (empty($values['is_tellfriend_enabled'])) { - CRM_Core_Error::fatal(ts('Tell Friend is disable for this Personal Campaign Page')); + CRM_Core_Error::statusBounce(ts('Tell Friend is disable for this Personal Campaign Page')); } $this->_mailLimit = $values['tellfriend_limit']; @@ -118,7 +118,7 @@ class CRM_Friend_Form extends CRM_Core_Form { $this->assign('pcpTitle', $this->_title); } else { - CRM_Core_Error::fatal(ts('page argument missing or invalid')); + CRM_Core_Error::statusBounce(ts('page argument missing or invalid')); } $this->assign('context', $pcomponent); diff --git a/civicrm/CRM/Grant/BAO/Grant.php b/civicrm/CRM/Grant/BAO/Grant.php index 12147c190e..baf098c4fc 100644 --- a/civicrm/CRM/Grant/BAO/Grant.php +++ b/civicrm/CRM/Grant/BAO/Grant.php @@ -71,6 +71,8 @@ class CRM_Grant_BAO_Grant extends CRM_Grant_DAO_Grant { * * @return array * Array of event summary values + * + * @throws CRM_Core_Exception */ public static function getGrantStatusOptGroup() { @@ -81,7 +83,7 @@ class CRM_Grant_BAO_Grant extends CRM_Grant_DAO_Grant { $og = CRM_Core_BAO_OptionGroup::retrieve($params, $defaults); if (!$og) { - CRM_Core_Error::fatal('No option group for grant statuses - database discrepancy! Make sure you loaded civicrm_data.mysql'); + throw new CRM_Core_Exception('No option group for grant statuses - database discrepancy! Make sure you loaded civicrm_data.mysql'); } return $og; diff --git a/civicrm/CRM/Grant/DAO/Grant.php b/civicrm/CRM/Grant/DAO/Grant.php index b4bad996bc..6b4e2030fa 100644 --- a/civicrm/CRM/Grant/DAO/Grant.php +++ b/civicrm/CRM/Grant/DAO/Grant.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Grant/Grant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:03885f41aa2d1f7299c66134ddd19ec2) + * (GenCodeChecksum:e3991ac7947eba1455b363a55b1064eb) */ /** diff --git a/civicrm/CRM/Grant/Form/Grant.php b/civicrm/CRM/Grant/Form/Grant.php index 787a8b86ca..7f81aceb68 100644 --- a/civicrm/CRM/Grant/Form/Grant.php +++ b/civicrm/CRM/Grant/Form/Grant.php @@ -66,7 +66,7 @@ class CRM_Grant_Form_Grant extends CRM_Core_Form { //check permission for action. if (!CRM_Core_Permission::checkActionPermission('CiviGrant', $this->_action)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->setPageTitle(ts('Grant')); diff --git a/civicrm/CRM/Grant/Form/Search.php b/civicrm/CRM/Grant/Form/Search.php index 70ad5f1066..4c54877d07 100644 --- a/civicrm/CRM/Grant/Form/Search.php +++ b/civicrm/CRM/Grant/Form/Search.php @@ -76,6 +76,7 @@ class CRM_Grant_Form_Search extends CRM_Core_Form_Search { $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; + $this->sortNameOnly = TRUE; parent::preProcess(); diff --git a/civicrm/CRM/Grant/Form/Task/Delete.php b/civicrm/CRM/Grant/Form/Task/Delete.php index f0392f38e6..155fe0e584 100644 --- a/civicrm/CRM/Grant/Form/Task/Delete.php +++ b/civicrm/CRM/Grant/Form/Task/Delete.php @@ -42,7 +42,7 @@ class CRM_Grant_Form_Task_Delete extends CRM_Grant_Form_Task { //check permission for delete. if (!CRM_Core_Permission::checkActionPermission('CiviGrant', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } diff --git a/civicrm/CRM/Grant/Form/Task/Update.php b/civicrm/CRM/Grant/Form/Task/Update.php index 6290caafd7..ba62dda100 100644 --- a/civicrm/CRM/Grant/Form/Task/Update.php +++ b/civicrm/CRM/Grant/Form/Task/Update.php @@ -34,7 +34,7 @@ class CRM_Grant_Form_Task_Update extends CRM_Grant_Form_Task { //check permission for update. if (!CRM_Core_Permission::checkActionPermission('CiviGrant', CRM_Core_Action::UPDATE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php index fba3ec951c..10a7fb61fe 100644 --- a/civicrm/CRM/Group/Form/Edit.php +++ b/civicrm/CRM/Group/Form/Edit.php @@ -208,10 +208,10 @@ class CRM_Group_Form_Edit extends CRM_Core_Form { ) { $groupTypes = CRM_Core_OptionGroup::values('group_type', TRUE); if ($defaults['group_type'][$groupTypes['Mailing List']] == 1) { - $this->assign('freezeMailignList', $groupTypes['Mailing List']); + $this->assign('freezeMailingList', $groupTypes['Mailing List']); } else { - $this->assign('hideMailignList', $groupTypes['Mailing List']); + $this->assign('hideMailingList', $groupTypes['Mailing List']); } } diff --git a/civicrm/CRM/Mailing/BAO/Recipients.php b/civicrm/CRM/Mailing/BAO/Recipients.php index 5c60de45d1..14820ed84c 100644 --- a/civicrm/CRM/Mailing/BAO/Recipients.php +++ b/civicrm/CRM/Mailing/BAO/Recipients.php @@ -100,7 +100,7 @@ WHERE r.mailing_id = %1 $limitString = "LIMIT 0, $totalLimit"; } $temporaryTable = CRM_Utils_SQL_TempTable::build() - ->setCategory('srcmailing' . $sourceMailingId) + ->setCategory('sr' . $sourceMailingId) ->setMemory() ->createWithColumns("mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id)"); $temporaryTableName = $temporaryTable->getName(); diff --git a/civicrm/CRM/Mailing/DAO/BouncePattern.php b/civicrm/CRM/Mailing/DAO/BouncePattern.php index 2512c08eec..c90182607a 100644 --- a/civicrm/CRM/Mailing/DAO/BouncePattern.php +++ b/civicrm/CRM/Mailing/DAO/BouncePattern.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/BouncePattern.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8b252d99f9392e578512acadd28b09ee) + * (GenCodeChecksum:5b77be40f02d6350d3a973ae6e090883) */ /** diff --git a/civicrm/CRM/Mailing/DAO/BounceType.php b/civicrm/CRM/Mailing/DAO/BounceType.php index 8cd5814eba..fa39ecc35d 100644 --- a/civicrm/CRM/Mailing/DAO/BounceType.php +++ b/civicrm/CRM/Mailing/DAO/BounceType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/BounceType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9b56dea1b4b84d786209fd4af84a3e09) + * (GenCodeChecksum:9a10baee53da12eee58e5b229fadf6d9) */ /** diff --git a/civicrm/CRM/Mailing/DAO/Mailing.php b/civicrm/CRM/Mailing/DAO/Mailing.php index 768e66bfed..27bf406064 100644 --- a/civicrm/CRM/Mailing/DAO/Mailing.php +++ b/civicrm/CRM/Mailing/DAO/Mailing.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Mailing.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e25bcafe5fd213c6f8204585b2d8f6c1) + * (GenCodeChecksum:222c7a4f7e002c8829fc415baf214dbc) */ /** diff --git a/civicrm/CRM/Mailing/DAO/MailingAB.php b/civicrm/CRM/Mailing/DAO/MailingAB.php index 694c215389..64aec05fb1 100644 --- a/civicrm/CRM/Mailing/DAO/MailingAB.php +++ b/civicrm/CRM/Mailing/DAO/MailingAB.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingAB.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2ddb755cd73dfcc880467c192d4f4b6c) + * (GenCodeChecksum:74ff2df50144a54a2c5a740187f6a8ca) */ /** diff --git a/civicrm/CRM/Mailing/DAO/MailingComponent.php b/civicrm/CRM/Mailing/DAO/MailingComponent.php index b76e925895..3740b74ee3 100644 --- a/civicrm/CRM/Mailing/DAO/MailingComponent.php +++ b/civicrm/CRM/Mailing/DAO/MailingComponent.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingComponent.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:935e7f9a3718032018ccb082a6c4500c) + * (GenCodeChecksum:5f490a6a53497465a1dcb603a9eba297) */ /** diff --git a/civicrm/CRM/Mailing/DAO/MailingGroup.php b/civicrm/CRM/Mailing/DAO/MailingGroup.php index 619e1e8a0a..54b3fc4c5e 100644 --- a/civicrm/CRM/Mailing/DAO/MailingGroup.php +++ b/civicrm/CRM/Mailing/DAO/MailingGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c4fc1c2b7ccba1f63edbf40993dae6ea) + * (GenCodeChecksum:c36d380f7c8e1c66c5bb3e721ebb2586) */ /** diff --git a/civicrm/CRM/Mailing/DAO/MailingJob.php b/civicrm/CRM/Mailing/DAO/MailingJob.php index 895cbcd5f4..e379066565 100644 --- a/civicrm/CRM/Mailing/DAO/MailingJob.php +++ b/civicrm/CRM/Mailing/DAO/MailingJob.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingJob.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4c28192656647449d061e22dda8d8deb) + * (GenCodeChecksum:91fa15df43a9b86ba6cd53f1cc9783eb) */ /** diff --git a/civicrm/CRM/Mailing/DAO/Recipients.php b/civicrm/CRM/Mailing/DAO/Recipients.php index f11c134473..82319af800 100644 --- a/civicrm/CRM/Mailing/DAO/Recipients.php +++ b/civicrm/CRM/Mailing/DAO/Recipients.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Recipients.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0792d1ac654c050dfc735f63f20fe0cd) + * (GenCodeChecksum:75cd62ee31977e5f17025529a8b00a77) */ /** diff --git a/civicrm/CRM/Mailing/DAO/Spool.php b/civicrm/CRM/Mailing/DAO/Spool.php index 4a548bd625..3305ea5fad 100644 --- a/civicrm/CRM/Mailing/DAO/Spool.php +++ b/civicrm/CRM/Mailing/DAO/Spool.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Spool.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5b1d2a1cce94c7b2c330b62f3b76e2e1) + * (GenCodeChecksum:02a2772d9f468c566718c382d86373c6) */ /** diff --git a/civicrm/CRM/Mailing/DAO/TrackableURL.php b/civicrm/CRM/Mailing/DAO/TrackableURL.php index 8c739d8e6d..4370552b21 100644 --- a/civicrm/CRM/Mailing/DAO/TrackableURL.php +++ b/civicrm/CRM/Mailing/DAO/TrackableURL.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/TrackableURL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4e58345d210aa786e7653982fc998c37) + * (GenCodeChecksum:af4238980ab67199493caf43c6ce2f35) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Bounce.php b/civicrm/CRM/Mailing/Event/DAO/Bounce.php index 7383695c90..9fe63e56af 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Bounce.php +++ b/civicrm/CRM/Mailing/Event/DAO/Bounce.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Bounce.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ba4d55bd1a33a5d0fc17b22a3be114f7) + * (GenCodeChecksum:3ac099332818c43f2dca066c6e73149c) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Confirm.php b/civicrm/CRM/Mailing/Event/DAO/Confirm.php index b55aa1ceed..51f90ce2f0 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/DAO/Confirm.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Confirm.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fa4cd94c6068f7729b05ba10ab255b05) + * (GenCodeChecksum:a7b8a7cbbffc3c2ad56f4a27a5fe0d47) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Delivered.php b/civicrm/CRM/Mailing/Event/DAO/Delivered.php index 41131fffb2..84304d2c44 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Delivered.php +++ b/civicrm/CRM/Mailing/Event/DAO/Delivered.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Delivered.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5791e88cffd626e36daaddcccbc687a0) + * (GenCodeChecksum:868d8d539be2f960708c791e77142cf7) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Forward.php b/civicrm/CRM/Mailing/Event/DAO/Forward.php index 4831cb920b..64758453c1 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Forward.php +++ b/civicrm/CRM/Mailing/Event/DAO/Forward.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Forward.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b96d36e0d04a4a6039a8e9a3b782a35e) + * (GenCodeChecksum:2d80815845585711db7a4ceaa9d54187) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Opened.php b/civicrm/CRM/Mailing/Event/DAO/Opened.php index ea4f740899..ece08f0027 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Opened.php +++ b/civicrm/CRM/Mailing/Event/DAO/Opened.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Opened.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:09dbc5750f23402fe8ffe9ca0cffd0ba) + * (GenCodeChecksum:1e7b766df9d29ea2c12eca943ce3c6d3) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Queue.php b/civicrm/CRM/Mailing/Event/DAO/Queue.php index 90de6df6df..0501531c2b 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Queue.php +++ b/civicrm/CRM/Mailing/Event/DAO/Queue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Queue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8099f8e634a052f6641abaa2e0f3dae6) + * (GenCodeChecksum:c13b7d1f71aa2aaba32558fe215efb3c) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Reply.php b/civicrm/CRM/Mailing/Event/DAO/Reply.php index 1cd7be8af3..3a1d8f0691 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Reply.php +++ b/civicrm/CRM/Mailing/Event/DAO/Reply.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Reply.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:bfd8c0c2ed7f32539508ddf2fe6d27b2) + * (GenCodeChecksum:bb0b422177a50b7c27241338317f4f77) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php index d0880400c8..3a9069b0b3 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Subscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:081be4da95465c1f28e13d936b372345) + * (GenCodeChecksum:f6605e240579a1d1911cd7fa1fa535df) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php index 13c897b6be..72a07fbb40 100644 --- a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php +++ b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/TrackableURLOpen.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:eb4907c60fad19559fe6dcc069445590) + * (GenCodeChecksum:e3972b32e62b53916079913b418785d9) */ /** diff --git a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php index d7102bdbef..2e13adc781 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Unsubscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0d53b8194940aab51adb66b6abb11fc3) + * (GenCodeChecksum:b94d81304a2444e6200faad7c2703a87) */ /** diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index 7794deef0c..3fff6f955f 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -51,7 +51,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { */ public static function add(&$params, $ids = []) { $oldStatus = $oldType = NULL; - $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids)); if ($params['id']) { CRM_Utils_Hook::pre('edit', 'Membership', $params['id'], $params); } @@ -269,16 +268,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { 'today', $excludeIsAdmin, CRM_Utils_Array::value('membership_type_id', $params), $params ); if (empty($calcStatus)) { - // Redirect the form in case of error - // @todo this redirect in the BAO layer is really bad & should be moved to the form layer - // however since we have no idea how (if) this is triggered we can't safely move / remove it - // NB I tried really hard to trigger this error from backoffice membership form in order to test it - // and am convinced form validation is complete on that form WRT this error. - $errorParams = [ - 'message_title' => ts('No valid membership status for given dates.'), - 'legacy_redirect_path' => 'civicrm/contact/view', - 'legacy_redirect_query' => "reset=1&force=1&cid={$params['contact_id']}&selectedChild=member", - ]; throw new CRM_Core_Exception(ts( "The membership cannot be saved because the status cannot be calculated for start_date: $start_date end_date $end_date join_date $join_date as at " . date('Y-m-d H:i:s')), 0, @@ -306,7 +295,8 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { $transaction = new CRM_Core_Transaction(); - // @todo remove $ids from here - $ids['contribution'] is not used or set by add. $ids['userId'] is used. $ids['membership'] is used if $params['id'] is not set + // @todo remove $ids from here $ids['userId'] is still used + $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids)); $membership = self::add($params, $ids); if (is_a($membership, 'CRM_Core_Error')) { @@ -447,6 +437,9 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { * * @return array * array of contact_id of all related contacts. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function checkMembershipRelationship($membershipTypeID, $contactId, $action = CRM_Core_Action::ADD) { $contacts = []; @@ -1331,13 +1324,15 @@ WHERE civicrm_membership.contact_id = civicrm_contact.id */ public static function createRelatedMemberships(&$params, &$dao, $reset = FALSE) { // CRM-4213 check for loops, using static variable to record contacts already processed. - static $relatedContactIds = []; + if (!isset(\Civi::$statics[__CLASS__]['related_contacts'])) { + \Civi::$statics[__CLASS__]['related_contacts'] = []; + } if ($reset) { - // We need a way to reset this static variable from the test suite. - // @todo consider replacing with Civi::$statics but note reset now used elsewhere: CRM-17723. - $relatedContactIds = []; + // CRM-17723. + unset(\Civi::$statics[__CLASS__]['related_contacts']); return FALSE; } + $relatedContactIds = &\Civi::$statics[__CLASS__]['related_contacts']; $membership = new CRM_Member_DAO_Membership(); $membership->id = $dao->id; @@ -1367,14 +1362,11 @@ WHERE civicrm_membership.contact_id = civicrm_contact.id $expiredStatusId = array_search('Expired', CRM_Member_PseudoConstant::membershipStatus()); } - $allRelatedContacts = []; $relatedContacts = []; - if (!is_a($membership, 'CRM_Core_Error')) { - $allRelatedContacts = CRM_Member_BAO_Membership::checkMembershipRelationship($membership->membership_type_id, - $membership->contact_id, - CRM_Utils_Array::value('action', $params) - ); - } + $allRelatedContacts = CRM_Member_BAO_Membership::checkMembershipRelationship($membership->membership_type_id, + $membership->contact_id, + CRM_Utils_Array::value('action', $params) + ); // CRM-4213, CRM-19735 check for loops, using static variable to record contacts already processed. // Remove repeated related contacts, which already inherited membership of this type. diff --git a/civicrm/CRM/Member/DAO/Membership.php b/civicrm/CRM/Member/DAO/Membership.php index f8bd802e1d..a4b79fffec 100644 --- a/civicrm/CRM/Member/DAO/Membership.php +++ b/civicrm/CRM/Member/DAO/Membership.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/Membership.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:97d01bc13256a1dd315a86fb5faea1dc) + * (GenCodeChecksum:15846e936cabb40c951fc8bc37c6f79a) */ /** diff --git a/civicrm/CRM/Member/DAO/MembershipBlock.php b/civicrm/CRM/Member/DAO/MembershipBlock.php index 4501ad1eed..7d1b12db5a 100644 --- a/civicrm/CRM/Member/DAO/MembershipBlock.php +++ b/civicrm/CRM/Member/DAO/MembershipBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:46b23c9cb5e0d22669e4f9a63966e6df) + * (GenCodeChecksum:09fae8131ecad39069914c10f9f7ccf4) */ /** diff --git a/civicrm/CRM/Member/DAO/MembershipLog.php b/civicrm/CRM/Member/DAO/MembershipLog.php index f5cbdffd79..8400057831 100644 --- a/civicrm/CRM/Member/DAO/MembershipLog.php +++ b/civicrm/CRM/Member/DAO/MembershipLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7e7992e145cb104f8fddaac2a7f60c99) + * (GenCodeChecksum:68b899f9c0d2eabcc19b070cb6d92a25) */ /** diff --git a/civicrm/CRM/Member/DAO/MembershipPayment.php b/civicrm/CRM/Member/DAO/MembershipPayment.php index 773ebfbe7a..da5f31561e 100644 --- a/civicrm/CRM/Member/DAO/MembershipPayment.php +++ b/civicrm/CRM/Member/DAO/MembershipPayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:63ca9fcae0a4e6bffb8423ccdf019cdc) + * (GenCodeChecksum:4bff4dffec3c3a766c34f49eb96ece19) */ /** diff --git a/civicrm/CRM/Member/DAO/MembershipStatus.php b/civicrm/CRM/Member/DAO/MembershipStatus.php index 0bcd6b244e..0a4a53ea1d 100644 --- a/civicrm/CRM/Member/DAO/MembershipStatus.php +++ b/civicrm/CRM/Member/DAO/MembershipStatus.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipStatus.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d292d809591c784c47942f54aba6765f) + * (GenCodeChecksum:37fdd036d0cc453eeb5cbfa14b7b27d2) */ /** diff --git a/civicrm/CRM/Member/DAO/MembershipType.php b/civicrm/CRM/Member/DAO/MembershipType.php index 5d0a989a0d..58c07d9bd7 100644 --- a/civicrm/CRM/Member/DAO/MembershipType.php +++ b/civicrm/CRM/Member/DAO/MembershipType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f0aee394cff9d0c7eee0245021a4a3e1) + * (GenCodeChecksum:c188b3772bd7ba843454e591a1fb0fd6) */ /** diff --git a/civicrm/CRM/Member/Form.php b/civicrm/CRM/Member/Form.php index 8337202264..40e66ca63f 100644 --- a/civicrm/CRM/Member/Form.php +++ b/civicrm/CRM/Member/Form.php @@ -127,7 +127,7 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { public function preProcess() { // Check for edit permission. if (!CRM_Core_Permission::checkActionPermission('CiviMember', $this->_action)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } if (!CRM_Member_BAO_Membership::statusAvailabilty()) { // all possible statuses are disabled - redirect back to contact form @@ -219,6 +219,7 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { $this->addPaymentProcessorSelect(TRUE, FALSE, TRUE); CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->getDefaultPaymentInstrumentId()); + $this->assign('recurProcessor', json_encode($this->_recurPaymentProcessors)); // Build the form for auto renew. This is displayed when in credit card mode or update mode. // The reason for showing it in update mode is not that clear. if ($this->_mode || ($this->_action & CRM_Core_Action::UPDATE)) { @@ -233,7 +234,6 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { $autoRenewElement->freeze(); } - $this->assign('recurProcessor', json_encode($this->_recurPaymentProcessors)); $this->addElement('checkbox', 'auto_renew', ts('Membership renewed automatically') diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index 963dada1ce..b9f272b126 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -60,10 +60,11 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { protected $_contributorDisplayName = NULL; /** - * email of the person paying for the membership (used for receipts) + * Email of the person paying for the membership (used for receipts). + * * @var string */ - protected $_contributorEmail = NULL; + protected $_contributorEmail; /** * email of the person paying for the membership (used for receipts) @@ -114,9 +115,9 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { */ public function setDeleteMessage() { $this->deleteMessage = '<span class="font-red bold">' - . ts("WARNING: Deleting this membership will also delete any related payment (contribution) records." . ts("This action cannot be undone.") + . ts('WARNING: Deleting this membership will also delete any related payment (contribution) records.' . ts('This action cannot be undone.') . '</span><p>' - . ts("Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.") + . ts('Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.') . '</p><p>' . ts("Click 'Delete' if you want to continue.") . '</p>'); } @@ -142,6 +143,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { * @param array $params * * @return array + * @throws \CRM_Core_Exception */ public static function getSelectedMemberships($priceSet, $params) { $memTypeSelected = []; @@ -190,6 +192,8 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { /** * Form preProcess function. + * + * @throws \CRM_Core_Exception */ public function preProcess() { // This string makes up part of the class names, differentiating them (not sure why) from the membership fields. @@ -324,7 +328,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } //set Soft Credit Type to Gift by default - $scTypes = CRM_Core_OptionGroup::values("soft_credit_type"); + $scTypes = CRM_Core_OptionGroup::values('soft_credit_type'); $defaults['soft_credit_type_id'] = CRM_Utils_Array::value(ts('Gift'), array_flip($scTypes)); //CRM-13420 @@ -382,6 +386,8 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { /** * Build the form object. + * + * @throws \CRM_Core_Exception */ public function buildQuickForm() { @@ -462,7 +468,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } $contactField = $this->addEntityRef('contact_id', ts('Member'), ['create' => TRUE, 'api' => ['extra' => ['email']]], TRUE); - if ($this->_context != 'standalone') { + if ($this->_context !== 'standalone') { $contactField->freeze(); } @@ -766,14 +772,14 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $membershipDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($memType); - if ($startDate && CRM_Utils_Array::value('period_type', $membershipDetails) == 'rolling') { + if ($startDate && CRM_Utils_Array::value('period_type', $membershipDetails) === 'rolling') { if ($startDate < $joinDate) { $errors['start_date'] = ts('Start date must be the same or later than Member since.'); } } if ($endDate) { - if ($membershipDetails['duration_unit'] == 'lifetime') { + if ($membershipDetails['duration_unit'] === 'lifetime') { // Check if status is NOT cancelled or similar. For lifetime memberships, there is no automated // process to update status based on end-date. The user must change the status now. $result = civicrm_api3('MembershipStatus', 'get', [ @@ -1054,9 +1060,12 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { * Submit function. * * This is also accessed by unit tests. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function submit() { - $isTest = ($this->_mode == 'test') ? 1 : 0; + $isTest = ($this->_mode === 'test') ? 1 : 0; $this->storeContactFields($this->_params); $this->beginPostProcess(); $joinDate = $startDate = $endDate = NULL; @@ -1136,7 +1145,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { // END Fix for dev/core/issues/860 CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'], - $formValues, $lineItem[$this->_priceSetId], NULL, $this->_priceSetId); + $formValues, $lineItem[$this->_priceSetId], $this->_priceSetId); if (!empty($formValues['tax_amount'])) { $params['tax_amount'] = $formValues['tax_amount']; @@ -1448,7 +1457,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { ); $params['source'] = $formValues['source'] ? $formValues['source'] : $params['contribution_source']; $params['trxn_id'] = CRM_Utils_Array::value('trxn_id', $result); - $params['is_test'] = ($this->_mode == 'live') ? 0 : 1; + $params['is_test'] = ($this->_mode === 'live') ? 0 : 1; if (!empty($formValues['send_receipt'])) { $params['receipt_date'] = $now; } diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php index b715227ee5..f6e50c2d87 100644 --- a/civicrm/CRM/Member/Form/MembershipRenewal.php +++ b/civicrm/CRM/Member/Form/MembershipRenewal.php @@ -598,7 +598,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { $lineItem = []; $this->_params = $this->setPriceSetParameters($this->_params); CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'], - $this->_params, $lineItem[$this->_priceSetId], NULL, $this->_priceSetId + $this->_params, $lineItem[$this->_priceSetId], $this->_priceSetId ); //CRM-11529 for quick config backoffice transactions //when financial_type_id is passed in form, update the diff --git a/civicrm/CRM/Member/Form/Task/Batch.php b/civicrm/CRM/Member/Form/Task/Batch.php index 68eed49247..04c7bbb0c7 100644 --- a/civicrm/CRM/Member/Form/Task/Batch.php +++ b/civicrm/CRM/Member/Form/Task/Batch.php @@ -187,78 +187,86 @@ class CRM_Member_Form_Task_Batch extends CRM_Member_Form_Task { /** * Process the form after the input has been submitted and validated. * - * - * @return void + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function postProcess() { $params = $this->exportValues(); - // @todo extract submit functions & - // extend CRM_Event_Form_Task_BatchTest::testSubmit with a data provider to test - // handling of custom data, specifically checkbox fields. + if (isset($params['field'])) { + $this->submit($params); + CRM_Core_Session::setStatus(ts('Your updates have been saved.'), ts('Saved'), 'success'); + } + else { + CRM_Core_Session::setStatus(ts('No updates have been saved.'), ts('Not Saved'), 'alert'); + } + } + + /** + * @param array $params + * + * @return mixed + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public function submit(array $params) { $dates = [ 'membership_join_date', 'membership_start_date', 'membership_end_date', ]; - if (isset($params['field'])) { - $customFields = []; - foreach ($params['field'] as $key => $value) { - $ids['membership'] = $key; - if (!empty($value['membership_source'])) { - $value['source'] = $value['membership_source']; - } + $customFields = []; + foreach ($params['field'] as $key => $value) { + $value['id'] = $key; + if (!empty($value['membership_source'])) { + $value['source'] = $value['membership_source']; + } - if (!empty($value['membership_type'])) { - $membershipTypeId = $value['membership_type_id'] = $value['membership_type'][1]; - } + if (!empty($value['membership_type'])) { + $membershipTypeId = $value['membership_type_id'] = $value['membership_type'][1]; + } - unset($value['membership_source']); - unset($value['membership_type']); + unset($value['membership_source']); + unset($value['membership_type']); - //Get the membership status - $value['status_id'] = (CRM_Utils_Array::value('membership_status', $value)) ? $value['membership_status'] : CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'status_id'); - unset($value['membership_status']); - foreach ($dates as $val) { - if (isset($value[$val])) { - $value[$val] = CRM_Utils_Date::processDate($value[$val]); - } + //Get the membership status + $value['status_id'] = (CRM_Utils_Array::value('membership_status', $value)) ? $value['membership_status'] : CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'status_id'); + unset($value['membership_status']); + foreach ($dates as $val) { + if (isset($value[$val])) { + $value[$val] = CRM_Utils_Date::processDate($value[$val]); + } + } + if (empty($customFields)) { + if (empty($value['membership_type_id'])) { + $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'membership_type_id'); } - if (empty($customFields)) { - if (empty($value['membership_type_id'])) { - $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'membership_type_id'); - } - // membership type custom data - $customFields = CRM_Core_BAO_CustomField::getFields('Membership', FALSE, FALSE, $membershipTypeId); + // membership type custom data + $customFields = CRM_Core_BAO_CustomField::getFields('Membership', FALSE, FALSE, $membershipTypeId); - $customFields = CRM_Utils_Array::crmArrayMerge($customFields, - CRM_Core_BAO_CustomField::getFields('Membership', - FALSE, FALSE, NULL, NULL, TRUE - ) - ); - } - //check for custom data - $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key], - $key, - 'Membership', - $membershipTypeId + $customFields = CRM_Utils_Array::crmArrayMerge($customFields, + CRM_Core_BAO_CustomField::getFields('Membership', + FALSE, FALSE, NULL, NULL, TRUE + ) ); + } + //check for custom data + $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key], + $key, + 'Membership', + $membershipTypeId + ); - $membership = CRM_Member_BAO_Membership::add($value, $ids); + $membership = CRM_Member_BAO_Membership::add($value); - // add custom field values - if (!empty($value['custom']) && - is_array($value['custom']) - ) { - CRM_Core_BAO_CustomValueTable::store($value['custom'], 'civicrm_membership', $membership->id); - } + // add custom field values + if (!empty($value['custom']) && + is_array($value['custom']) + ) { + CRM_Core_BAO_CustomValueTable::store($value['custom'], 'civicrm_membership', $membership->id); } - - CRM_Core_Session::setStatus(ts("Your updates have been saved."), ts('Saved'), 'success'); - } - else { - CRM_Core_Session::setStatus(ts("No updates have been saved."), ts('Not Saved'), 'alert'); } + return $value; } } diff --git a/civicrm/CRM/Member/Form/Task/Delete.php b/civicrm/CRM/Member/Form/Task/Delete.php index fdeb718a4c..3f613b1334 100644 --- a/civicrm/CRM/Member/Form/Task/Delete.php +++ b/civicrm/CRM/Member/Form/Task/Delete.php @@ -40,7 +40,7 @@ class CRM_Member_Form_Task_Delete extends CRM_Member_Form_Task { public function preProcess() { //check for delete if (!CRM_Core_Permission::checkActionPermission('CiviMember', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); } diff --git a/civicrm/CRM/PCP/DAO/PCP.php b/civicrm/CRM/PCP/DAO/PCP.php index 8cc890deac..b67f820548 100644 --- a/civicrm/CRM/PCP/DAO/PCP.php +++ b/civicrm/CRM/PCP/DAO/PCP.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/PCP/PCP.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:381499ae9c76477eb8aa0693c45456c6) + * (GenCodeChecksum:c12e9747f9f51dba37cbb4dc80fb36ef) */ /** diff --git a/civicrm/CRM/PCP/DAO/PCPBlock.php b/civicrm/CRM/PCP/DAO/PCPBlock.php index 1c44ac9a35..6034545412 100644 --- a/civicrm/CRM/PCP/DAO/PCPBlock.php +++ b/civicrm/CRM/PCP/DAO/PCPBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/PCP/PCPBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:42d329d90e59aac0c5480ba2a50aec83) + * (GenCodeChecksum:dd013e9f20918e34e96caa5728dd5047) */ /** diff --git a/civicrm/CRM/Pledge/DAO/Pledge.php b/civicrm/CRM/Pledge/DAO/Pledge.php index 282649f15e..52d159115a 100644 --- a/civicrm/CRM/Pledge/DAO/Pledge.php +++ b/civicrm/CRM/Pledge/DAO/Pledge.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/Pledge.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a25cc68d8392b1d60d7179ca484b604a) + * (GenCodeChecksum:482a699f087b9ed0250d60f0663727f4) */ /** diff --git a/civicrm/CRM/Pledge/DAO/PledgeBlock.php b/civicrm/CRM/Pledge/DAO/PledgeBlock.php index c237c1251a..db14795b2a 100644 --- a/civicrm/CRM/Pledge/DAO/PledgeBlock.php +++ b/civicrm/CRM/Pledge/DAO/PledgeBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/PledgeBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:dd1489be32b1ac4cf012b93cb68afb10) + * (GenCodeChecksum:748faa657d316e3de8124c5a1ecb7095) */ /** diff --git a/civicrm/CRM/Pledge/DAO/PledgePayment.php b/civicrm/CRM/Pledge/DAO/PledgePayment.php index 71ba8e24f0..8183490607 100644 --- a/civicrm/CRM/Pledge/DAO/PledgePayment.php +++ b/civicrm/CRM/Pledge/DAO/PledgePayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/PledgePayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:563e2926d00b9fe0c4919bfd9a0a05e7) + * (GenCodeChecksum:cfecdde34ba28e4860662441f0f234f5) */ /** diff --git a/civicrm/CRM/Pledge/Form/Payment.php b/civicrm/CRM/Pledge/Form/Payment.php index 35b8580cbb..119533b567 100644 --- a/civicrm/CRM/Pledge/Form/Payment.php +++ b/civicrm/CRM/Pledge/Form/Payment.php @@ -43,11 +43,13 @@ class CRM_Pledge_Form_Payment extends CRM_Core_Form { /** * Set variables up before form is built. + * + * @throws \CRM_Core_Exception */ public function preProcess() { // check for edit permission if (!CRM_Core_Permission::check('edit pledges')) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->_id = CRM_Utils_Request::retrieve('ppId', 'Positive', $this); diff --git a/civicrm/CRM/Pledge/Form/Pledge.php b/civicrm/CRM/Pledge/Form/Pledge.php index 4fdba82a5b..010335cddd 100644 --- a/civicrm/CRM/Pledge/Form/Pledge.php +++ b/civicrm/CRM/Pledge/Form/Pledge.php @@ -55,6 +55,8 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { /** * Set variables up before form is built. + * + * @throws \CRM_Core_Exception */ public function preProcess() { $this->_contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this); @@ -66,7 +68,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form { // check for action permissions. if (!CRM_Core_Permission::checkActionPermission('CiviPledge', $this->_action)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $this->assign('action', $this->_action); diff --git a/civicrm/CRM/Pledge/Form/Task/Delete.php b/civicrm/CRM/Pledge/Form/Task/Delete.php index 33e15f916f..2a1ed9c349 100644 --- a/civicrm/CRM/Pledge/Form/Task/Delete.php +++ b/civicrm/CRM/Pledge/Form/Task/Delete.php @@ -36,7 +36,7 @@ class CRM_Pledge_Form_Task_Delete extends CRM_Pledge_Form_Task { public function preProcess() { //check for delete if (!CRM_Core_Permission::checkActionPermission('CiviPledge', CRM_Core_Action::DELETE)) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } parent::preProcess(); } diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php index 02002d7a93..efa24b312b 100644 --- a/civicrm/CRM/Price/BAO/LineItem.php +++ b/civicrm/CRM/Price/BAO/LineItem.php @@ -410,7 +410,8 @@ WHERE li.contribution_id = %1"; * * @param bool $update * - * @return void + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function processPriceSet($entityId, $lineItem, $contributionDetails = NULL, $entityTable = 'civicrm_contribution', $update = FALSE) { if (!$entityId || !is_array($lineItem) @@ -1172,7 +1173,7 @@ WHERE li.contribution_id = %1"; * @return bool|\CRM_Core_BAO_FinancialTrxn */ protected function _recordAdjustedAmt($updatedAmount, $contributionId, $taxAmount = NULL, $updateAmountLevel = NULL) { - $paidAmount = CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId); + $paidAmount = (float) CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId); $balanceAmt = $updatedAmount - $paidAmount; $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); @@ -1181,26 +1182,21 @@ WHERE li.contribution_id = %1"; $completedStatusId = array_search('Completed', $contributionStatuses); $updatedContributionDAO = new CRM_Contribute_BAO_Contribution(); - $adjustedTrxn = $skip = FALSE; + $adjustedTrxn = FALSE; if ($balanceAmt) { - if ($balanceAmt > 0 && $paidAmount != 0) { - $contributionStatusVal = $partiallyPaidStatusId; - } - elseif ($balanceAmt < 0 && $paidAmount != 0) { - $contributionStatusVal = $pendingRefundStatusId; - } - elseif ($paidAmount == 0) { + if ($paidAmount === 0.0) { //skip updating the contribution status if no payment is made - $skip = TRUE; $updatedContributionDAO->cancel_date = 'null'; $updatedContributionDAO->cancel_reason = NULL; } + else { + $updatedContributionDAO->contribution_status_id = $balanceAmt > 0 ? $partiallyPaidStatusId : $pendingRefundStatusId; + } + // update contribution status and total amount without trigger financial code // as this is handled in current BAO function used for change selection $updatedContributionDAO->id = $contributionId; - if (!$skip) { - $updatedContributionDAO->contribution_status_id = $contributionStatusVal; - } + $updatedContributionDAO->total_amount = $updatedContributionDAO->net_amount = $updatedAmount; $updatedContributionDAO->fee_amount = 0; $updatedContributionDAO->tax_amount = $taxAmount; diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index ec54607426..5ac93721fd 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -660,12 +660,9 @@ WHERE id = %1"; * Params reflecting form input e.g with fields 'price_5' => 7, 'price_8' => array(7, 8) * @param $lineItem * Line item array to be altered. - * @param string $component - * This parameter appears to only be relevant to determining whether memberships should be auto-renewed. - * (and is effectively a boolean for 'is_membership' which could be calculated from the line items.) * @param int $priceSetID */ - public static function processAmount($fields, &$params, &$lineItem, $component = '', $priceSetID = NULL) { + public static function processAmount($fields, &$params, &$lineItem, $priceSetID = NULL) { // using price set $totalPrice = $totalTax = 0; // CRM-18701 Sometimes the amount in the price set is overridden by the amount on the form. @@ -675,10 +672,6 @@ WHERE id = %1"; // set up (which allows a free form field). $amount_override = NULL; - if ($component) { - $autoRenew = []; - $autoRenew[0] = $autoRenew[1] = $autoRenew[2] = 0; - } if ($priceSetID) { $priceFields = self::filterPriceFieldsFromParams($priceSetID, $params); if (count($priceFields) == 1) { @@ -730,15 +723,6 @@ WHERE id = %1"; } } $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); - if ( - $component && - // auto_renew exists and is empty in some workflows, which php treat as a 0 - // and hence we explicitly check to see if auto_renew is numeric - isset($lineItem[$optionValueId]['auto_renew']) && - is_numeric($lineItem[$optionValueId]['auto_renew']) - ) { - $autoRenew[$lineItem[$optionValueId]['auto_renew']] += $lineItem[$optionValueId]['line_total']; - } break; case 'Select': @@ -750,13 +734,6 @@ WHERE id = %1"; $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); } $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); - if ( - $component && - isset($lineItem[$optionValueId]['auto_renew']) && - is_numeric($lineItem[$optionValueId]['auto_renew']) - ) { - $autoRenew[$lineItem[$optionValueId]['auto_renew']] += $lineItem[$optionValueId]['line_total']; - } break; case 'CheckBox': @@ -767,13 +744,6 @@ WHERE id = %1"; $lineItem = self::setLineItem($field, $lineItem, $optionId, $totalTax); } $totalPrice += $lineItem[$optionId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionId]); - if ( - $component && - isset($lineItem[$optionId]['auto_renew']) && - is_numeric($lineItem[$optionId]['auto_renew']) - ) { - $autoRenew[$lineItem[$optionId]['auto_renew']] += $lineItem[$optionId]['line_total']; - } } break; } @@ -819,16 +789,6 @@ WHERE id = %1"; $params['amount'] = $totalPrice; $params['tax_amount'] = $totalTax; - if ($component) { - foreach ($autoRenew as $dontCare => $eachAmount) { - if (!$eachAmount) { - unset($autoRenew[$dontCare]); - } - } - if (count($autoRenew) > 1) { - $params['autoRenew'] = $autoRenew; - } - } } /** @@ -1291,12 +1251,13 @@ WHERE id = %1"; * The price set id. * * @return bool + * @throws \CRM_Core_Exception */ public static function checkPermission($sid) { if ($sid && self::eventPriceSetDomainID()) { $domain_id = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $sid, 'domain_id', 'id'); if (CRM_Core_Config::domainID() != $domain_id) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } } return TRUE; diff --git a/civicrm/CRM/Price/DAO/LineItem.php b/civicrm/CRM/Price/DAO/LineItem.php index 6074cfafa8..bd41cfae79 100644 --- a/civicrm/CRM/Price/DAO/LineItem.php +++ b/civicrm/CRM/Price/DAO/LineItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/LineItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:90fb6a08063f00282825bb1c567eea1a) + * (GenCodeChecksum:6a272dce6bb5be6d82e1da572bfd4189) */ /** diff --git a/civicrm/CRM/Price/DAO/PriceField.php b/civicrm/CRM/Price/DAO/PriceField.php index 3fdeb1bc93..0b988900fa 100644 --- a/civicrm/CRM/Price/DAO/PriceField.php +++ b/civicrm/CRM/Price/DAO/PriceField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f96f9517fa4009fff3275da63195efd3) + * (GenCodeChecksum:60b0dde8a1e8d4933abc6df200d99809) */ /** diff --git a/civicrm/CRM/Price/DAO/PriceFieldValue.php b/civicrm/CRM/Price/DAO/PriceFieldValue.php index c1fdd81209..15ab9471e6 100644 --- a/civicrm/CRM/Price/DAO/PriceFieldValue.php +++ b/civicrm/CRM/Price/DAO/PriceFieldValue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceFieldValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ba3d9fa454b710c09e18299d8531a9b2) + * (GenCodeChecksum:a5371a5b399a3e0730bc216886ce5efe) */ /** diff --git a/civicrm/CRM/Price/DAO/PriceSet.php b/civicrm/CRM/Price/DAO/PriceSet.php index 116ba49f6e..c7bfebc251 100644 --- a/civicrm/CRM/Price/DAO/PriceSet.php +++ b/civicrm/CRM/Price/DAO/PriceSet.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceSet.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2465848603f66c170842a63e347ab3e7) + * (GenCodeChecksum:1d3d7fd9d32dd7cd257c4f5a7468db29) */ /** diff --git a/civicrm/CRM/Price/DAO/PriceSetEntity.php b/civicrm/CRM/Price/DAO/PriceSetEntity.php index d3bd3350bd..a21ddf5bce 100644 --- a/civicrm/CRM/Price/DAO/PriceSetEntity.php +++ b/civicrm/CRM/Price/DAO/PriceSetEntity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceSetEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2af9002085aaf369b570094e32bff851) + * (GenCodeChecksum:84d5fcf5379a96e8a9bf767f7162d947) */ /** diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php index 422385a613..5e4a5c4e8d 100644 --- a/civicrm/CRM/Price/Form/Field.php +++ b/civicrm/CRM/Price/Form/Field.php @@ -608,10 +608,14 @@ class CRM_Price_Form_Field extends CRM_Core_Form { /** * Process the form. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function postProcess() { // store the submitted values in an array $params = $this->controller->exportValues('Field'); + $params['price'] = CRM_Utils_Rule::cleanMoney($params['price']); $params['is_display_amounts'] = CRM_Utils_Array::value('is_display_amounts', $params, FALSE); $params['is_required'] = CRM_Utils_Array::value('is_required', $params, FALSE); @@ -638,7 +642,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form { } $params['is_enter_qty'] = CRM_Utils_Array::value('is_enter_qty', $params, FALSE); - if ($params['html_type'] == 'Text') { + if ($params['html_type'] === 'Text') { // if html type is Text, force is_enter_qty on $params['is_enter_qty'] = 1; // modify params values as per the option group and option diff --git a/civicrm/CRM/Price/Form/Set.php b/civicrm/CRM/Price/Form/Set.php index 41a0d624de..47f45516f2 100644 --- a/civicrm/CRM/Price/Form/Set.php +++ b/civicrm/CRM/Price/Form/Set.php @@ -135,16 +135,14 @@ class CRM_Price_Form_Set extends CRM_Core_Form { */ public static function formRule($fields, $files, $options) { $errors = []; - $count = count(CRM_Utils_Array::value('extends', $fields)); + $count = count(CRM_Utils_Array::value('extends', $fields, [])); //price sets configured for membership - if ($count && array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $fields['extends'])) { - if ($count > 1) { - $errors['extends'] = ts('If you plan on using this price set for membership signup and renewal, you can not also use it for Events or Contributions. However, a membership price set may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription).'); - } + if ($count > 1 && array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $fields['extends'])) { + $errors['extends'] = ts('If you plan on using this price set for membership signup and renewal, you can not also use it for Events or Contributions. However, a membership price set may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription).'); } // Checks the given price set does not start with a digit if (strlen($fields['title']) && is_numeric($fields['title'][0])) { - $errors['title'] = ts("Name cannot not start with a digit"); + $errors['title'] = ts('Name cannot not start with a digit'); } return empty($errors) ? TRUE : $errors; } diff --git a/civicrm/CRM/Profile/Form.php b/civicrm/CRM/Profile/Form.php index 4ab59bf808..bbd5210e37 100644 --- a/civicrm/CRM/Profile/Form.php +++ b/civicrm/CRM/Profile/Form.php @@ -50,7 +50,8 @@ class CRM_Profile_Form extends CRM_Core_Form { protected $_gid; /** - * @var array details of the UFGroup used on this page + * @var array + * Details of the UFGroup used on this page */ protected $_ufGroup = ['name' => 'unknown']; diff --git a/civicrm/CRM/Queue/DAO/QueueItem.php b/civicrm/CRM/Queue/DAO/QueueItem.php index e20bde25d1..935b3b8578 100644 --- a/civicrm/CRM/Queue/DAO/QueueItem.php +++ b/civicrm/CRM/Queue/DAO/QueueItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Queue/QueueItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ab2c0a25c3fd72fd4911003d325dbcb6) + * (GenCodeChecksum:2a3cbbf88c75557fad0418a96b051160) */ /** diff --git a/civicrm/CRM/Queue/Runner.php b/civicrm/CRM/Queue/Runner.php index c4db418766..d44a073b52 100644 --- a/civicrm/CRM/Queue/Runner.php +++ b/civicrm/CRM/Queue/Runner.php @@ -50,7 +50,8 @@ class CRM_Queue_Runner { public $qrid; /** - * @var array whether to display buttons, eg ('retry' => TRUE, 'skip' => FALSE) + * @var array + * Whether to display buttons, eg ('retry' => TRUE, 'skip' => FALSE) */ public $buttons; diff --git a/civicrm/CRM/Queue/Task.php b/civicrm/CRM/Queue/Task.php index 11fc6797f4..b2d74b393a 100644 --- a/civicrm/CRM/Queue/Task.php +++ b/civicrm/CRM/Queue/Task.php @@ -25,17 +25,19 @@ class CRM_Queue_Task { const TASK_FAIL = 2; /** - * @var mixed, serializable + * @var mixed + * serializable */ public $callback; /** - * @var array, serializable + * @var array + * serializable */ public $arguments; /** - * @var string, NULL-able + * @var string|null */ public $title; diff --git a/civicrm/CRM/Report/BAO/Hook.php b/civicrm/CRM/Report/BAO/Hook.php index 829d4f8e4d..b2be39e2c6 100644 --- a/civicrm/CRM/Report/BAO/Hook.php +++ b/civicrm/CRM/Report/BAO/Hook.php @@ -24,7 +24,7 @@ class CRM_Report_BAO_Hook { /** - * @var array of CRM_Report_BAO_HookInterface objects + * @var \CRM_Report_BAO_HookInterface[] */ protected $_queryObjects = NULL; diff --git a/civicrm/CRM/Report/DAO/ReportInstance.php b/civicrm/CRM/Report/DAO/ReportInstance.php index c182895663..0bdead7770 100644 --- a/civicrm/CRM/Report/DAO/ReportInstance.php +++ b/civicrm/CRM/Report/DAO/ReportInstance.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Report/ReportInstance.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3d5de82ad4a99a689201d8d5a35268a4) + * (GenCodeChecksum:4e7df5b68b3cb5f69c91c4da8613c053) */ /** diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 2d521ec8a8..c07f760b50 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -139,9 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form { */ protected $_groupFilter = FALSE; - // [ML] Required for civiexportexcel - public $supportsExportExcel = TRUE; - /** * Has the report been optimised for group filtering. * @@ -2831,11 +2828,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $this->_absoluteUrl = TRUE; $this->addPaging = FALSE; } - elseif ($this->_outputMode == 'excel2007') { - $printOnly = TRUE; - $this->_absoluteUrl = TRUE; - $this->addPaging = FALSE; - } elseif ($this->_outputMode == 'group') { $this->assign('outputMode', 'group'); } @@ -3478,9 +3470,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND elseif ($this->_outputMode == 'csv') { CRM_Report_Utils_Report::export2csv($this, $rows); } - elseif ($this->_outputMode == 'excel2007') { - CRM_CiviExportExcel_Utils_Report::export2excel2007($this, $rows); - } elseif ($this->_outputMode == 'group') { $group = $this->_params['groups']; $this->add2group($group); diff --git a/civicrm/CRM/Report/Form/Activity.php b/civicrm/CRM/Report/Form/Activity.php index 232d094150..fa43ee5f26 100644 --- a/civicrm/CRM/Report/Form/Activity.php +++ b/civicrm/CRM/Report/Form/Activity.php @@ -345,9 +345,28 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { $this->_groupFilter = TRUE; $this->_tagFilter = TRUE; $this->_tagFilterTable = 'civicrm_activity'; + parent::__construct(); } + public function preProcess() { + // Is "Include Case Activities" selected? If yes, include the case_id as a hidden column + $formToUse = $this->noController ? NULL : $this; + $includeCaseActivities = CRM_Utils_Request::retrieve('include_case_activities_value', 'Boolean', $formToUse); + if (!empty($includeCaseActivities)) { + $this->_columns['civicrm_case_activity'] = [ + 'dao' => 'CRM_Case_DAO_CaseActivity', + 'fields' => [ + 'case_id' => [ + 'no_display' => TRUE, + 'required' => TRUE, + ], + ], + ]; + } + parent::preProcess(); + } + /** * Adding address fields with dbAlias for order clause. * @@ -486,34 +505,7 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { * @todo remove this function & declare the 3 contact tables separately */ public function from() { - $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); - $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); - - $this->_from = " - FROM civicrm_activity {$this->_aliases['civicrm_activity']} - INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} - ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND - {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$targetID} - INNER JOIN civicrm_contact civicrm_contact_target - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_target.id - {$this->_aclFrom}"; - - if ($this->isTableSelected('civicrm_email')) { - $this->_from .= " - LEFT JOIN civicrm_email civicrm_email_target - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_target.contact_id AND - civicrm_email_target.is_primary = 1"; - } - - if ($this->isTableSelected('civicrm_phone')) { - $this->_from .= " - LEFT JOIN civicrm_phone civicrm_phone_target - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_target.contact_id AND - civicrm_phone_target.is_primary = 1 "; - } - $this->_aliases['civicrm_contact'] = 'civicrm_contact_target'; - - $this->joinAddressFromContact(); + $this->buildFrom('target'); } /** @@ -818,12 +810,18 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}"; $this->_where .= " AND {$this->_aclWhere} "; } + $caseJoin = ''; + if (!empty($this->_params['include_case_activities_value'])) { + $caseJoin = "LEFT JOIN civicrm_case_activity {$this->_aliases['civicrm_case_activity']} ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_case_activity']}.activity_id"; + } + $sql = "{$this->_select} FROM $tempTableName tar INNER JOIN civicrm_activity {$this->_aliases['civicrm_activity']} ON {$this->_aliases['civicrm_activity']}.id = tar.civicrm_activity_id INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} ON {$this->_aliases['civicrm_activity_contact']}.activity_id = {$this->_aliases['civicrm_activity']}.id AND {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$sourceID} LEFT JOIN civicrm_contact contact_civireport ON contact_civireport.id = {$this->_aliases['civicrm_activity_contact']}.contact_id + {$caseJoin} {$this->_where} {$groupByFromSelect} {$this->_having} {$this->_orderBy} {$this->_limit}"; CRM_Utils_Hook::alterReportVar('sql', $this, $this); @@ -893,20 +891,36 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}"; $cid = $rows[$rowNum]['civicrm_contact_contact_source_id']; } - $actActionLinks = CRM_Activity_Selector_Activity::actionLinks($row['civicrm_activity_activity_type_id'], - CRM_Utils_Array::value('civicrm_activity_source_record_id', $rows[$rowNum]), - FALSE, - $rows[$rowNum]['civicrm_activity_id'] - ); - - $actLinkValues = [ - 'id' => $rows[$rowNum]['civicrm_activity_id'], - 'cid' => $cid, - 'cxt' => $context, - ]; - $actUrl = CRM_Utils_System::url($actActionLinks[CRM_Core_Action::VIEW]['url'], - CRM_Core_Action::replace($actActionLinks[CRM_Core_Action::VIEW]['qs'], $actLinkValues), TRUE - ); + if (empty($this->_params['include_case_activities_value']) || empty($rows[$rowNum]['civicrm_case_activity_case_id'])) { + // Generate a "view activity" link + $actActionLinks = CRM_Activity_Selector_Activity::actionLinks($row['civicrm_activity_activity_type_id'], + CRM_Utils_Array::value('civicrm_activity_source_record_id', $rows[$rowNum]), + FALSE, + $rows[$rowNum]['civicrm_activity_id'] + ); + + $actLinkValues = [ + 'id' => $rows[$rowNum]['civicrm_activity_id'], + 'cid' => $cid, + 'cxt' => $context, + ]; + $actUrl = CRM_Utils_System::url($actActionLinks[CRM_Core_Action::VIEW]['url'], + CRM_Core_Action::replace($actActionLinks[CRM_Core_Action::VIEW]['qs'], $actLinkValues), TRUE + ); + } + else { + // Generate a "view case activity" link + $caseActionLinks = CRM_Case_Selector_Search::actionLinks(); + $caseLinkValues = [ + 'aid' => $rows[$rowNum]['civicrm_activity_id'], + 'caseid' => $rows[$rowNum]['civicrm_case_activity_case_id'], + 'cid' => $cid, + 'cxt' => $context, + ]; + $actUrl = CRM_Utils_System::url($caseActionLinks[CRM_Core_Action::VIEW]['url'], + CRM_Core_Action::replace($caseActionLinks[CRM_Core_Action::VIEW]['qs'], $caseLinkValues), TRUE + ); + } } if (array_key_exists('civicrm_contact_contact_source', $row)) { @@ -1094,31 +1108,7 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}"; * refactor in order to get this under ReportTemplateTests) */ protected function buildAssigneeFrom() { - $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); - $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); - $this->_from = " - FROM civicrm_activity {$this->_aliases['civicrm_activity']} - INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} - ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND - {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$assigneeID} - INNER JOIN civicrm_contact civicrm_contact_assignee - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_assignee.id - {$this->_aclFrom}"; - - if ($this->isTableSelected('civicrm_email')) { - $this->_from .= " - LEFT JOIN civicrm_email civicrm_email_assignee - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_assignee.contact_id AND - civicrm_email_assignee.is_primary = 1"; - } - if ($this->isTableSelected('civicrm_phone')) { - $this->_from .= " - LEFT JOIN civicrm_phone civicrm_phone_assignee - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_assignee.contact_id AND - civicrm_phone_assignee.is_primary = 1 "; - } - $this->_aliases['civicrm_contact'] = 'civicrm_contact_assignee'; - $this->joinAddressFromContact(); + $this->buildFrom('assignee'); } /** @@ -1128,30 +1118,60 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}"; * refactor in order to get this under ReportTemplateTests) */ protected function buildSourceFrom() { + $this->buildFrom('source'); + } + + /** + * Shared function to build the from clause + * + * @param string $recordType (one of 'source', 'activity', 'target') + */ + protected function buildFrom($recordType) { $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); - $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts); + switch ($recordType) { + case 'target': + $recordTypeID = CRM_Utils_Array::key('Activity Targets', $activityContacts); + break; + + case 'source': + $recordTypeID = CRM_Utils_Array::key('Activity Source', $activityContacts); + break; + + case 'assignee': + $recordTypeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); + break; + + } + $this->_from = " - FROM civicrm_activity {$this->_aliases['civicrm_activity']} - INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} - ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND - {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$sourceID} - INNER JOIN civicrm_contact civicrm_contact_source - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_source.id - {$this->_aclFrom}"; + FROM civicrm_activity {$this->_aliases['civicrm_activity']} + INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} + ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND + {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$recordTypeID} + INNER JOIN civicrm_contact civicrm_contact_{$recordType} + ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_{$recordType}.id + {$this->_aclFrom}"; + if (!empty($this->_params['include_case_activities_value'])) { + $this->_from .= " + LEFT JOIN civicrm_case_activity {$this->_aliases['civicrm_case_activity']} + ON {$this->_aliases['civicrm_case_activity']}.activity_id = {$this->_aliases['civicrm_activity']}.id"; + } if ($this->isTableSelected('civicrm_email')) { $this->_from .= " - LEFT JOIN civicrm_email civicrm_email_source - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_source.contact_id AND - civicrm_email_source.is_primary = 1"; + LEFT JOIN civicrm_email civicrm_email_{$recordType} + ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_{$recordType}.contact_id AND + civicrm_email_{$recordType}.is_primary = 1"; } + if ($this->isTableSelected('civicrm_phone')) { $this->_from .= " - LEFT JOIN civicrm_phone civicrm_phone_source - ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_source.contact_id AND - civicrm_phone_source.is_primary = 1 "; + LEFT JOIN civicrm_phone civicrm_phone_{$recordType} + ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_{$recordType}.contact_id AND + civicrm_phone_{$recordType}.is_primary = 1 "; } - $this->_aliases['civicrm_contact'] = 'civicrm_contact_source'; + $this->_aliases['civicrm_contact'] = "civicrm_contact_{$recordType}"; + $this->joinAddressFromContact(); } diff --git a/civicrm/CRM/Report/Form/Case/Detail.php b/civicrm/CRM/Report/Form/Case/Detail.php index 69f29006b2..1f7d6cc381 100644 --- a/civicrm/CRM/Report/Form/Case/Detail.php +++ b/civicrm/CRM/Report/Form/Case/Detail.php @@ -44,12 +44,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { $this->rel_types[$relid] = $v['label_b_a']; } - $this->deleted_labels = [ - '' => ts('- select -'), - 0 => ts('No'), - 1 => ts('Yes'), - ]; - $this->caseActivityTypes = []; foreach (CRM_Case_PseudoConstant::caseActivityType() as $typeDetail) { $this->caseActivityTypes[$typeDetail['id']] = $typeDetail['label']; @@ -81,7 +75,7 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { 'is_deleted' => [ 'title' => ts('Deleted?'), 'default' => FALSE, - 'type' => CRM_Utils_Type::T_INT, + 'type' => CRM_Utils_Type::T_BOOLEAN, ], ], 'filters' => [ @@ -109,9 +103,7 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { ], 'is_deleted' => [ 'title' => ts('Deleted?'), - 'type' => CRM_Utils_Type::T_INT, - 'operatorType' => CRM_Report_Form::OP_SELECT, - 'options' => $this->deleted_labels, + 'type' => CRM_Utils_Type::T_BOOLEAN, 'default' => 0, ], ], @@ -173,8 +165,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { 'is_active' => [ 'title' => ts('Active Role?'), 'type' => CRM_Utils_Type::T_BOOLEAN, - 'default' => TRUE, - 'options' => CRM_Core_SelectValues::boolean(), ], ], ], @@ -675,12 +665,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { $entryFound = TRUE; } - if (array_key_exists('civicrm_case_is_deleted', $row)) { - $value = $row['civicrm_case_is_deleted']; - $rows[$rowNum]['civicrm_case_is_deleted'] = $this->deleted_labels[$value]; - $entryFound = TRUE; - } - $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound; if (!$entryFound) { break; diff --git a/civicrm/CRM/Report/Form/Case/Summary.php b/civicrm/CRM/Report/Form/Case/Summary.php index fb559e015a..ab089194bb 100644 --- a/civicrm/CRM/Report/Form/Case/Summary.php +++ b/civicrm/CRM/Report/Form/Case/Summary.php @@ -33,12 +33,6 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form { $this->rel_types[$relid] = $v['label_b_a']; } - $this->deleted_labels = [ - '' => ts('- select -'), - 0 => ts('No'), - 1 => ts('Yes'), - ]; - $this->_columns = [ 'civicrm_c2' => [ 'dao' => 'CRM_Contact_DAO_Contact', @@ -97,7 +91,7 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form { 'is_deleted' => [ 'title' => ts('Deleted?'), 'default' => FALSE, - 'type' => CRM_Utils_Type::T_INT, + 'type' => CRM_Utils_Type::T_BOOLEAN, ], ], 'filters' => [ @@ -125,9 +119,7 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form { ], 'is_deleted' => [ 'title' => ts('Deleted?'), - 'type' => CRM_Report_Form::OP_INT, - 'operatorType' => CRM_Report_Form::OP_SELECT, - 'options' => $this->deleted_labels, + 'type' => CRM_Utils_Type::T_BOOLEAN, 'default' => 0, ], ], @@ -170,9 +162,6 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form { 'is_active' => [ 'title' => ts('Active Relationship?'), 'type' => CRM_Utils_Type::T_BOOLEAN, - //MV dev/core#603, not set default values Yes/No, this cause issue when relationship fields are not selected - // 'default' => TRUE, - 'options' => ['' => ts('- Select -')] + CRM_Core_SelectValues::boolean(), ], ], ], @@ -379,12 +368,6 @@ inner join civicrm_contact $c2 on ${c2}.id=${ccc}.contact_id $entryFound = TRUE; } - if (array_key_exists('civicrm_case_is_deleted', $row)) { - $value = $row['civicrm_case_is_deleted']; - $rows[$rowNum]['civicrm_case_is_deleted'] = $this->deleted_labels[$value]; - $entryFound = TRUE; - } - if (!$entryFound) { break; } diff --git a/civicrm/CRM/Report/Form/Instance.php b/civicrm/CRM/Report/Form/Instance.php index 2de70663ff..8f00408a17 100644 --- a/civicrm/CRM/Report/Form/Instance.php +++ b/civicrm/CRM/Report/Form/Instance.php @@ -102,35 +102,30 @@ class CRM_Report_Form_Instance { $form->freeze('is_reserved'); } - $config = CRM_Core_Config::singleton(); - if ($config->userFramework != 'Joomla' || - $config->userFramework != 'WordPress' - ) { - $form->addElement('select', - 'permission', - ts('Permission'), - ['0' => ts('Everyone (includes anonymous)')] + CRM_Core_Permission::basicPermissions() - ); + $form->addElement('select', + 'permission', + ts('Permission'), + ['0' => ts('Everyone (includes anonymous)')] + CRM_Core_Permission::basicPermissions() + ); - // prepare user_roles to save as names not as ids - if (function_exists('user_roles')) { - $user_roles_array = user_roles(); - foreach ($user_roles_array as $key => $value) { - $user_roles[$value] = $value; - } - $grouprole = &$form->addElement('advmultiselect', - 'grouprole', - ts('ACL Group/Role'), - $user_roles, - [ - 'size' => 5, - 'style' => 'width:240px', - 'class' => 'advmultiselect', - ] - ); - $grouprole->setButtonAttributes('add', ['value' => ts('Add >>')]); - $grouprole->setButtonAttributes('remove', ['value' => ts('<< Remove')]); + // prepare user_roles to save as names not as ids + if (function_exists('user_roles')) { + $user_roles_array = user_roles(); + foreach ($user_roles_array as $key => $value) { + $user_roles[$value] = $value; } + $grouprole = $form->addElement('advmultiselect', + 'grouprole', + ts('ACL Group/Role'), + $user_roles, + [ + 'size' => 5, + 'style' => 'width:240px', + 'class' => 'advmultiselect', + ] + ); + $grouprole->setButtonAttributes('add', ['value' => ts('Add >>')]); + $grouprole->setButtonAttributes('remove', ['value' => ts('<< Remove')]); } // navigation field diff --git a/civicrm/CRM/Report/Utils/Report.php b/civicrm/CRM/Report/Utils/Report.php index f575d1f063..276ef7fe6b 100644 --- a/civicrm/CRM/Report/Utils/Report.php +++ b/civicrm/CRM/Report/Utils/Report.php @@ -212,6 +212,10 @@ WHERE inst.report_id = %1"; //Force a download and name the file using the current timestamp. $datetime = date('Ymd-Gi', $_SERVER['REQUEST_TIME']); CRM_Utils_System::setHttpHeader('Content-Disposition', 'attachment; filename=Report_' . $datetime . '.csv'); + // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as + // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31) + // and it continues to work on Libre Office, Numbers, Notes etc. + echo "\xEF\xBB\xBF"; echo self::makeCsv($form, $rows); CRM_Utils_System::civiExit(); } diff --git a/civicrm/CRM/SMS/DAO/Provider.php b/civicrm/CRM/SMS/DAO/Provider.php index ae391aaf20..7cf055cb87 100644 --- a/civicrm/CRM/SMS/DAO/Provider.php +++ b/civicrm/CRM/SMS/DAO/Provider.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/SMS/Provider.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ce82211615815557cb6ac33f445b6898) + * (GenCodeChecksum:12dc41bf4f9c0eef63e616eec8cf6113) */ /** diff --git a/civicrm/CRM/UF/Form/Inline/Preview.php b/civicrm/CRM/UF/Form/Inline/Preview.php index 0b64ba6f3e..afb81c278c 100644 --- a/civicrm/CRM/UF/Form/Inline/Preview.php +++ b/civicrm/CRM/UF/Form/Inline/Preview.php @@ -40,7 +40,7 @@ class CRM_UF_Form_Inline_Preview extends CRM_UF_Form_AbstractPreview { ], ]; if (!CRM_Core_Permission::check($checkPermission)) { - CRM_Core_Error::fatal(ts('Permission Denied')); + CRM_Core_Error::statusBounce(ts('Permission Denied')); } $content = json_decode($_REQUEST['ufData'], TRUE); foreach (['ufGroup', 'ufFieldCollection'] as $key) { diff --git a/civicrm/CRM/UF/Form/Inline/PreviewById.php b/civicrm/CRM/UF/Form/Inline/PreviewById.php index bc306ea537..599ea7af8c 100644 --- a/civicrm/CRM/UF/Form/Inline/PreviewById.php +++ b/civicrm/CRM/UF/Form/Inline/PreviewById.php @@ -32,11 +32,12 @@ class CRM_UF_Form_Inline_PreviewById extends CRM_UF_Form_AbstractPreview { * @param * * @return void + * @throws \CRM_Core_Exception */ public function preProcess() { // Inline forms don't get menu-level permission checks if (!CRM_Core_Permission::check('access CiviCRM')) { - CRM_Core_Error::fatal(ts('Permission Denied')); + CRM_Core_Error::statusBounce(ts('Permission Denied')); } $gid = CRM_Utils_Request::retrieve('id', 'Positive'); $fields = CRM_Core_BAO_UFGroup::getFields($gid, FALSE, NULL, NULL, NULL, FALSE, NULL, FALSE, NULL, CRM_Core_Permission::CREATE, 'field_name', NULL, TRUE); diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index 8c23bbbb03..4d9f5ea5f5 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -794,6 +794,8 @@ SET version = '$version' // Rebuild all triggers and re-enable logging if needed $logging = new CRM_Logging_Schema(); $logging->fixSchemaDifferences(); + + CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(TRUE); } /** diff --git a/civicrm/CRM/Upgrade/Incremental/SmartGroups.php b/civicrm/CRM/Upgrade/Incremental/SmartGroups.php index 322f09252d..011c75a4cd 100644 --- a/civicrm/CRM/Upgrade/Incremental/SmartGroups.php +++ b/civicrm/CRM/Upgrade/Incremental/SmartGroups.php @@ -287,7 +287,7 @@ class CRM_Upgrade_Incremental_SmartGroups { foreach ($savedSearches as $savedSearch) { $form_values = $savedSearch['form_values']; foreach ($form_values as $index => $formValues) { - if ($formValues[0] === 'custom_' . $custom_date_fields->id && is_array($formValues[2])) { + if (isset($formValues[0]) && $formValues[0] === 'custom_' . $custom_date_fields->id && is_array($formValues[2])) { if (isset($formValues[2]['BETWEEN'])) { $form_values[] = ['custom_' . $custom_date_fields->id . '_low', '=', $this->getConvertedDateValue($formValues[2]['BETWEEN'][0], FALSE)]; $form_values[] = ['custom_' . $custom_date_fields->id . '_high', '=', $this->getConvertedDateValue($formValues[2]['BETWEEN'][1], TRUE)]; diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php index c5f384ed78..4087b44135 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php @@ -14,7 +14,7 @@ class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Base { /** - * @var $relationshipTypes array + * @var array * api call result keyed on relationship_type.id */ protected static $relationshipTypes; diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php new file mode 100644 index 0000000000..ae5cf56a48 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php @@ -0,0 +1,72 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for FiveTwentyTwo */ +class CRM_Upgrade_Incremental_php_FiveTwentyTwo extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each upcoming + * revision to the database. + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + // Example: Generate a pre-upgrade message. + // if ($rev == '5.12.34') { + // $preUpgradeMessage .= '<p>' . ts('A new permission, "%1", has been added. This permission is now used to control access to the Manage Tags screen.', array(1 => ts('manage tags'))) . '</p>'; + // } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + // Example: Generate a post-upgrade message. + // if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + // } + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + // /** + // * Upgrade function. + // * + // * @param string $rev + // */ + // public function upgrade_5_0_x($rev) { + // $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + // $this->addTask('Do the foo change', 'taskFoo', ...); + // // Additional tasks here... + // // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. + // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. + // } + + // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) { + // return TRUE; + // } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl deleted file mode 100644 index 917601c37d..0000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.21.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl deleted file mode 100644 index eddd7af8f2..0000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.21.1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl deleted file mode 100644 index 69fc3392e8..0000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.21.2 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl new file mode 100644 index 0000000000..2326708b08 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.22.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl new file mode 100644 index 0000000000..1885f7e76c --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.22.alpha1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl new file mode 100644 index 0000000000..dfa1f812b9 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.22.beta1 during upgrade *} diff --git a/civicrm/CRM/Utils/Cache/Memcache.php b/civicrm/CRM/Utils/Cache/Memcache.php index aa8917d3e1..415eca989f 100644 --- a/civicrm/CRM/Utils/Cache/Memcache.php +++ b/civicrm/CRM/Utils/Cache/Memcache.php @@ -69,7 +69,7 @@ class CRM_Utils_Cache_Memcache implements CRM_Utils_Cache_Interface { protected $_cache; /** - * @var NULL|array + * @var null|array * * This is the effective prefix. It may be bumped up whenever the dataset is flushed. * diff --git a/civicrm/CRM/Utils/Cache/Memcached.php b/civicrm/CRM/Utils/Cache/Memcached.php index dd9482090c..53bfd39281 100644 --- a/civicrm/CRM/Utils/Cache/Memcached.php +++ b/civicrm/CRM/Utils/Cache/Memcached.php @@ -70,7 +70,7 @@ class CRM_Utils_Cache_Memcached implements CRM_Utils_Cache_Interface { protected $_cache; /** - * @var NULL|array + * @var null|array * * This is the effective prefix. It may be bumped up whenever the dataset is flushed. * diff --git a/civicrm/CRM/Utils/Check/Component/Case.php b/civicrm/CRM/Utils/Check/Component/Case.php index aedeba3a6f..4931f9f37f 100644 --- a/civicrm/CRM/Utils/Check/Component/Case.php +++ b/civicrm/CRM/Utils/Check/Component/Case.php @@ -24,7 +24,7 @@ class CRM_Utils_Check_Component_Case extends CRM_Utils_Check_Component { protected $xmlRepo; /** - * @var array<string> + * @var string[] */ protected $caseTypeNames; diff --git a/civicrm/CRM/Utils/Check/Component/Schema.php b/civicrm/CRM/Utils/Check/Component/Schema.php index fe67d9b944..8486a18bc8 100644 --- a/civicrm/CRM/Utils/Check/Component/Schema.php +++ b/civicrm/CRM/Utils/Check/Component/Schema.php @@ -17,7 +17,10 @@ class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component { /** + * Check defined indices exist. + * * @return array + * @throws \CiviCRM_API3_Exception */ public function checkIndices() { $messages = []; @@ -26,7 +29,7 @@ class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component { // unreliable. Bypass this check until CRM-20817 and CRM-20533 are resolved. return $messages; - $missingIndices = CRM_Core_BAO_SchemaHandler::getMissingIndices(); + $missingIndices = civicrm_api3('System', 'getmissingindices', [])['values']; if ($missingIndices) { $html = ''; foreach ($missingIndices as $tableName => $indices) { diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index 656238fc12..1491da33e2 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -57,7 +57,7 @@ abstract class CRM_Utils_Hook { private $commonIncluded = FALSE; /** - * @var array(string) + * @var array|string */ private $commonCiviModules = []; @@ -160,7 +160,7 @@ abstract class CRM_Utils_Hook { // Instead of not calling any hooks we only call those we know to be frequently important - if a particular extension wanted // to avoid this they could do an early return on CRM_Core_Config::singleton()->isUpgradeMode // Futther discussion is happening at https://lab.civicrm.org/dev/core/issues/1460 - $upgradeFriendlyHooks = ['civicrm_alterSettingsFolders', 'civicrm_alterSettingsMetaData', 'civicrm_triggerInfo', 'civicrm_alterLogTables', 'civicrm_container']; + $upgradeFriendlyHooks = ['civicrm_alterSettingsFolders', 'civicrm_alterSettingsMetaData', 'civicrm_triggerInfo', 'civicrm_alterLogTables', 'civicrm_container', 'civicrm_permission']; if (CRM_Core_Config::singleton()->isUpgradeMode() && !in_array($fnSuffix, $upgradeFriendlyHooks)) { return; } @@ -249,7 +249,7 @@ abstract class CRM_Utils_Hook { * @param mixed $arg6 * * @return array|bool - * @throws \Exception + * @throws \CRM_Core_Exception */ public function runHooks( $civiModules, $fnSuffix, $numParams, @@ -307,8 +307,7 @@ abstract class CRM_Utils_Hook { break; default: - CRM_Core_Error::fatal(ts('Invalid hook invocation')); - break; + throw new CRM_Core_Exception(ts('Invalid hook invocation')); } if (!empty($fResult) && @@ -2244,6 +2243,10 @@ abstract class CRM_Utils_Hook { * - js: array, list of JS files or globs. * - css: array, list of CSS files or globs. * - partials: array, list of base-dirs containing HTML. + * - partialsCallback: mixed, a callback function which generates a list of HTML + * function(string $moduleName, array $moduleDefn) => array(string $file => string $html) + * For future-proofing, use a serializable callback (e.g. string/array). + * See also: Civi\Core\Resolver. * - requires: array, list of required Angular modules. * - basePages: array, uncondtionally load this module onto the given Angular pages. [v4.7.21+] * If omitted, default to "array('civicrm/a')" for backward compat. diff --git a/civicrm/CRM/Utils/HttpClient.php b/civicrm/CRM/Utils/HttpClient.php index 4bab3001ea..c7989ec626 100644 --- a/civicrm/CRM/Utils/HttpClient.php +++ b/civicrm/CRM/Utils/HttpClient.php @@ -62,16 +62,18 @@ class CRM_Utils_HttpClient { * @param string $localFile * Path at which to store the .zip file. * @return STATUS_OK|STATUS_WRITE_ERROR|STATUS_DL_ERROR + * + * @throws CRM_Core_Exception */ public function fetch($remoteFile, $localFile) { // Download extension zip file ... if (!function_exists('curl_init')) { - CRM_Core_Error::fatal('Cannot install this extension - curl is not installed!'); + throw new CRM_Core_Exception('Cannot install this extension - curl is not installed!'); } list($ch, $caConfig) = $this->createCurl($remoteFile); if (preg_match('/^https:/', $remoteFile) && !$caConfig->isEnableSSL()) { - CRM_Core_Error::fatal('Cannot install this extension - does not support SSL'); + throw new CRM_Core_Exception('Cannot install this extension - does not support SSL'); } $fp = @fopen($localFile, "w"); diff --git a/civicrm/CRM/Utils/Mail.php b/civicrm/CRM/Utils/Mail.php index 6e7cc0c6cc..b9aa6ef617 100644 --- a/civicrm/CRM/Utils/Mail.php +++ b/civicrm/CRM/Utils/Mail.php @@ -25,6 +25,8 @@ class CRM_Utils_Mail { * to the mailer through the container. * * @return Mail + * + * @throws CRM_Core_Exception */ public static function createMailer() { $mailingInfo = Civi::settings()->get('mailing_backend'); @@ -37,7 +39,7 @@ class CRM_Utils_Mail { elseif ($mailingInfo['outBound_option'] == CRM_Mailing_Config::OUTBOUND_OPTION_SMTP) { if ($mailingInfo['smtpServer'] == '' || !$mailingInfo['smtpServer']) { CRM_Core_Error::debug_log_message(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); - CRM_Core_Error::fatal(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); + throw new CRM_Core_Exception(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); } $params['host'] = $mailingInfo['smtpServer'] ? $mailingInfo['smtpServer'] : 'localhost'; @@ -81,7 +83,7 @@ class CRM_Utils_Mail { !$mailingInfo['sendmail_path'] ) { CRM_Core_Error::debug_log_message(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); - CRM_Core_Error::fatal(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); + throw new CRM_Core_Exception(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')])); } $params['sendmail_path'] = $mailingInfo['sendmail_path']; $params['sendmail_args'] = $mailingInfo['sendmail_args']; diff --git a/civicrm/CRM/Utils/Mail/EmailProcessor.php b/civicrm/CRM/Utils/Mail/EmailProcessor.php index 90b65cdc04..9d68310b9d 100644 --- a/civicrm/CRM/Utils/Mail/EmailProcessor.php +++ b/civicrm/CRM/Utils/Mail/EmailProcessor.php @@ -75,6 +75,10 @@ class CRM_Utils_Mail_EmailProcessor { /** * Process the mailboxes that aren't default (ie. that aren't used by civiMail for the bounce). + * + * @return bool + * + * @throws CRM_Core_Exception. */ public static function processActivities() { $dao = new CRM_Core_DAO_MailSettings(); @@ -87,7 +91,7 @@ class CRM_Utils_Mail_EmailProcessor { self::_process(FALSE, $dao, TRUE); } if (!$found) { - CRM_Core_Error::fatal(ts('No mailboxes have been configured for Email to Activity Processing')); + throw new CRM_Core_Exception(ts('No mailboxes have been configured for Email to Activity Processing')); } return $found; } @@ -114,6 +118,7 @@ class CRM_Utils_Mail_EmailProcessor { * Create activities. * * @throws Exception + * @throws CRM_Core_Exception */ public static function _process($civiMail, $dao, $is_create_activities) { // 0 = activities; 1 = bounce; @@ -125,7 +130,7 @@ class CRM_Utils_Mail_EmailProcessor { : CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Inbound Email'); if (!$emailActivityTypeId) { - CRM_Core_Error::fatal(ts('Could not find a valid Activity Type ID for Inbound Email')); + throw new CRM_Core_Exception(ts('Could not find a valid Activity Type ID for Inbound Email')); } $config = CRM_Core_Config::singleton(); @@ -156,7 +161,7 @@ class CRM_Utils_Mail_EmailProcessor { $message = ts('Could not connect to MailStore for ') . $dao->username . '@' . $dao->server . '<p>'; $message .= ts('Error message: '); $message .= '<pre>' . $e->getMessage() . '</pre><p>'; - CRM_Core_Error::fatal($message); + throw new CRM_Core_Exception($message); } // process fifty at a time, CRM-4002 diff --git a/civicrm/CRM/Utils/Migrate/Export.php b/civicrm/CRM/Utils/Migrate/Export.php index e8f5c00951..73469e553f 100644 --- a/civicrm/CRM/Utils/Migrate/Export.php +++ b/civicrm/CRM/Utils/Migrate/Export.php @@ -19,7 +19,8 @@ class CRM_Utils_Migrate_Export { const XML_VALUE_SEPARATOR = ":;:;:;"; /** - * @var array description of export field mapping + * @var array + * Description of export field mapping * * @code * 'exampleEntityMappingName' => array( @@ -343,6 +344,7 @@ class CRM_Utils_Migrate_Export { * * @return string * XML + * @throws CRM_Core_Exception */ public function toXML() { $buffer = '<?xml version="1.0" encoding="iso-8859-1" ?>'; @@ -356,7 +358,7 @@ class CRM_Utils_Migrate_Export { $buffer .= " </{$this->_xml[$key]['scope']}>\n"; } elseif ($this->_xml[$key]['required']) { - CRM_Core_Error::fatal("No records in DB for $key"); + throw new CRM_Core_Exception("No records in DB for $key"); } } $buffer .= "</CustomData>\n"; diff --git a/civicrm/CRM/Utils/Migrate/Import.php b/civicrm/CRM/Utils/Migrate/Import.php index 0f5d0443a8..420198d791 100644 --- a/civicrm/CRM/Utils/Migrate/Import.php +++ b/civicrm/CRM/Utils/Migrate/Import.php @@ -398,7 +398,7 @@ AND v.name = %1 * @param $xml * @param $idMap * - * @throws Exception + * @throws CRM_Core_Exception */ public function profileFields(&$xml, &$idMap) { foreach ($xml->ProfileFields as $profileFieldsXML) { @@ -423,7 +423,7 @@ AND f.column_name = %2 ]; $cfID = CRM_Core_DAO::singleValueQuery($sql, $params); if (!$cfID) { - CRM_Core_Error::fatal(ts("Could not find custom field for %1, %2, %3", + throw new CRM_Core_Exception(ts("Could not find custom field for %1, %2, %3", [ 1 => $profileField->field_name, 2 => $tableName, diff --git a/civicrm/CRM/Utils/SQL/TempTable.php b/civicrm/CRM/Utils/SQL/TempTable.php index 6ca62379c6..0681978495 100644 --- a/civicrm/CRM/Utils/SQL/TempTable.php +++ b/civicrm/CRM/Utils/SQL/TempTable.php @@ -252,7 +252,7 @@ class CRM_Utils_SQL_TempTable { */ public function setCategory($category) { if ($category && !preg_match(self::CATEGORY_REGEXP, $category) || strlen($category) > self::CATEGORY_LENGTH) { - throw new \RuntimeException("Malformed temp table category"); + throw new \RuntimeException("Malformed temp table category $category"); } $this->category = $category; return $this; diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index 28f9e9ba9e..21cfda96a1 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -980,6 +980,8 @@ class CRM_Utils_System { * Returns TRUE if the requirement is met, FALSE if the requirement is not * met and we're not aborting due to the failed requirement. If $abort is * TRUE and the requirement fails, this function does not return. + * + * @throws CRM_Core_Exception */ public static function checkPHPVersion($ver = 5, $abort = TRUE) { $phpVersion = substr(PHP_VERSION, 0, 1); @@ -988,7 +990,7 @@ class CRM_Utils_System { } if ($abort) { - CRM_Core_Error::fatal(ts('This feature requires PHP Version %1 or greater', + throw new CRM_Core_Exception(ts('This feature requires PHP Version %1 or greater', [1 => $ver] )); } @@ -1059,6 +1061,8 @@ class CRM_Utils_System { * * @return string * civicrm version + * + * @throws CRM_Core_Exception */ public static function version() { static $version; @@ -1075,7 +1079,7 @@ class CRM_Utils_System { // pattern check if (!CRM_Utils_System::isVersionFormatValid($version)) { - CRM_Core_Error::fatal('Unknown codebase version.'); + throw new CRM_Core_Exception('Unknown codebase version.'); } } @@ -1161,7 +1165,7 @@ class CRM_Utils_System { * * @param bool|FALSE $abort * - * @throws \Exception + * @throws \CRM_Core_Exception */ public static function redirectToSSL($abort = FALSE) { $config = CRM_Core_Config::singleton(); @@ -1177,7 +1181,7 @@ class CRM_Utils_System { Civi::log()->warning('CiviCRM thinks site is not SSL, redirecting to {url}', ['url' => $url]); if (!self::checkURL($url, TRUE)) { if ($abort) { - CRM_Core_Error::fatal('HTTPS is not set up on this machine'); + throw new CRM_Core_Exception('HTTPS is not set up on this machine'); } else { CRM_Core_Session::setStatus(ts('HTTPS is not set up on this machine'), ts('Warning'), 'alert'); diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index f83c1f3c7b..595ad9ff2c 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -835,13 +835,11 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { $contactCreated = 0; $contactMatching = 0; - // previously used $wpdb - which means WordPress *must* be bootstrapped - $wpUsers = get_users(array( - 'blog_id' => get_current_blog_id(), - 'number' => -1, - )); + global $wpdb; + $wpUserIds = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users"); - foreach ($wpUsers as $wpUserData) { + foreach ($wpUserIds as $wpUserId) { + $wpUserData = get_userdata($wpUserId); $contactCount++; if ($match = CRM_Core_BAO_UFMatch::synchronizeUFMatch($wpUserData, $wpUserData->$id, diff --git a/civicrm/CRM/Utils/Type.php b/civicrm/CRM/Utils/Type.php index b57ea91540..54abc84763 100644 --- a/civicrm/CRM/Utils/Type.php +++ b/civicrm/CRM/Utils/Type.php @@ -213,7 +213,7 @@ class CRM_Utils_Type { * @param string $type * The type to verify against. * @param bool $abort - * If TRUE, the operation will CRM_Core_Error::fatal() on invalid data. + * If TRUE, the operation will throw an CRM_Core_Exception on invalid data. * * @return mixed * The data, escaped if necessary. @@ -326,17 +326,16 @@ class CRM_Utils_Type { break; default: - CRM_Core_Error::fatal( + throw new CRM_Core_Exception( $type . " is not a recognised (camel cased) data type." ); - break; } // @todo Use exceptions instead of CRM_Core_Error::fatal(). if ($abort) { $data = htmlentities($data); - CRM_Core_Error::fatal("$data is not of the type $type"); + throw new CRM_Core_Exception("$data is not of the type $type"); } return NULL; } diff --git a/civicrm/CRM/Utils/Weight.php b/civicrm/CRM/Utils/Weight.php index 6df6d5bddd..47154d1f4d 100644 --- a/civicrm/CRM/Utils/Weight.php +++ b/civicrm/CRM/Utils/Weight.php @@ -14,12 +14,13 @@ */ class CRM_Utils_Weight { /** - * @var array, list of GET fields which must be validated + * List of GET fields which must be validated * * To reduce the size of this patch, we only sign the exploitable fields * which make up "$baseURL" in addOrder() (eg 'filter' or 'dao'). * Less-exploitable fields (eg 'dir') are left unsigned. * 'id','src','dst','dir' + * @var array */ public static $SIGNABLE_FIELDS = ['reset', 'dao', 'idName', 'url', 'filter']; @@ -418,13 +419,17 @@ class CRM_Utils_Weight { } } + /** + * + * @throws CRM_Core_Exception + */ public static function fixOrder() { $signature = CRM_Utils_Request::retrieve('_sgn', 'String'); $signer = new CRM_Utils_Signer(CRM_Core_Key::privateKey(), self::$SIGNABLE_FIELDS); // Validate $_GET values b/c subsequent code reads $_GET (via CRM_Utils_Request::retrieve) if (!$signer->validate($signature, $_GET)) { - CRM_Core_Error::fatal('Request signature is invalid'); + throw new CRM_Core_Exception('Request signature is invalid'); } // Note: Ensure this list matches self::$SIGNABLE_FIELDS diff --git a/civicrm/CRM/Utils/Wrapper.php b/civicrm/CRM/Utils/Wrapper.php index f1e864c5c5..4c3a41c680 100644 --- a/civicrm/CRM/Utils/Wrapper.php +++ b/civicrm/CRM/Utils/Wrapper.php @@ -25,7 +25,7 @@ class CRM_Utils_Wrapper { * Simple Controller. * * The controller which will handle the display and processing of this page. - * @var \CRM_Core_Controller_Simple object + * @var \CRM_Core_Controller_Simple */ protected $_controller; diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php index 1dee2a9590..c23658b952 100644 --- a/civicrm/Civi/API/Kernel.php +++ b/civicrm/Civi/API/Kernel.php @@ -28,7 +28,7 @@ class Kernel { protected $dispatcher; /** - * @var array<ProviderInterface> + * @var \Civi\API\Provider\ProviderInterface[] */ protected $apiProviders; @@ -167,7 +167,6 @@ class Kernel { throw new \API_Exception('Input variable `params` is not an array', 2000); } switch ($apiRequest['version']) { - case 2: case 3: require_once 'api/v3/utils.php'; _civicrm_api3_initialize(); @@ -304,8 +303,10 @@ class Kernel { * An unhandled exception. * @param array $apiRequest * The full description of the API request. + * * @return array * API response. + * @throws \API_Exception */ public function formatException($e, $apiRequest) { $data = []; @@ -320,8 +321,10 @@ class Kernel { * An unhandled exception. * @param array $apiRequest * The full description of the API request. + * * @return array * (API response) + * @throws \API_Exception */ public function formatApiException($e, $apiRequest) { $data = $e->getExtraParams(); @@ -343,15 +346,18 @@ class Kernel { * An unhandled exception. * @param array $apiRequest * The full description of the API request. + * * @return array * API response. + * + * @throws \API_Exception */ public function formatPearException($e, $apiRequest) { $data = []; $error = $e->getCause(); if ($error instanceof \DB_Error) { - $data["error_code"] = \DB::errorMessage($error->getCode()); - $data["sql"] = $error->getDebugInfo(); + $data['error_code'] = \DB::errorMessage($error->getCode()); + $data['sql'] = $error->getDebugInfo(); } if (!empty($apiRequest['params']['debug'])) { if (method_exists($e, 'getUserInfo')) { @@ -363,7 +369,7 @@ class Kernel { $data['trace'] = $e->getTraceAsString(); } else { - $data['tip'] = "add debug=1 to your API call to have more info about the error"; + $data['tip'] = 'add debug=1 to your API call to have more info about the error'; } return $this->createError($e->getMessage(), $data, $apiRequest); @@ -385,7 +391,7 @@ class Kernel { */ public function createError($msg, $data, $apiRequest, $code = NULL) { // FIXME what to do with $code? - if ($msg == 'DB Error: constraint violation' || substr($msg, 0, 9) == 'DB Error:' || $msg == 'DB Error: already exists') { + if ($msg === 'DB Error: constraint violation' || substr($msg, 0, 9) == 'DB Error:' || $msg == 'DB Error: already exists') { try { $fields = _civicrm_api3_api_getfields($apiRequest); _civicrm_api3_validate_foreign_keys($apiRequest['entity'], $apiRequest['action'], $apiRequest['params'], $fields); diff --git a/civicrm/Civi/API/Provider/AdhocProvider.php b/civicrm/Civi/API/Provider/AdhocProvider.php index aad4255c92..fcab72e182 100644 --- a/civicrm/Civi/API/Provider/AdhocProvider.php +++ b/civicrm/Civi/API/Provider/AdhocProvider.php @@ -37,7 +37,11 @@ class AdhocProvider implements EventSubscriberInterface, ProviderInterface { } /** - * @var array (string $name => array('perm' => string, 'callback' => callable)) + * List of adhoc actions + * + * array(string $ame => array('perm' => string, 'callback' => callable)) + * + * @var array */ protected $actions = []; diff --git a/civicrm/Civi/API/Provider/MagicFunctionProvider.php b/civicrm/Civi/API/Provider/MagicFunctionProvider.php index cdeaab339f..8fab3ff19c 100644 --- a/civicrm/Civi/API/Provider/MagicFunctionProvider.php +++ b/civicrm/Civi/API/Provider/MagicFunctionProvider.php @@ -32,7 +32,11 @@ class MagicFunctionProvider implements EventSubscriberInterface, ProviderInterfa } /** - * @var array (string $cachekey => array('function' => string, 'is_generic' => bool)) + * Local cache of function-mappings. + * + * array(string $cacheKey => array('function' => string, 'is_generic' => bool)) + * + * @var array */ private $cache; diff --git a/civicrm/Civi/API/Provider/ReflectionProvider.php b/civicrm/Civi/API/Provider/ReflectionProvider.php index 3d8e8eed72..514b846931 100644 --- a/civicrm/Civi/API/Provider/ReflectionProvider.php +++ b/civicrm/Civi/API/Provider/ReflectionProvider.php @@ -41,7 +41,11 @@ class ReflectionProvider implements EventSubscriberInterface, ProviderInterface private $apiKernel; /** - * @var array (string $entityName => array(string $actionName)) + * List of all entities and their supported actions + * + * array(string $entityName => string[] $actionNames). + * + * @var array */ private $actions; diff --git a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php index 29374172ff..7747d0a628 100644 --- a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php +++ b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php @@ -50,17 +50,21 @@ class DynamicFKAuthorization implements EventSubscriberInterface { public $kernel; /** - * @var string, the entity for which we want to manage permissions + * The entity for which we want to manage permissions. + * + * @var string */ protected $entityName; /** - * @var array <string> the actions for which we want to manage permissions + * The actions for which we want to manage permissions + * + * @var string[] */ protected $actions; /** - * @var string, SQL. Given a file ID, determine the entity+table it's attached to. + * SQL SELECT query - Given a file ID, determine the entity+table it's attached to. * * ex: "SELECT if(cf.id,1,0) as is_valid, cef.entity_table, cef.entity_id * FROM civicrm_file cf @@ -72,14 +76,18 @@ class DynamicFKAuthorization implements EventSubscriberInterface { * - is_valid: "1" if %1 identifies an actual record; otherwise "0" * - entity_table: NULL or the name of a related table * - entity_id: NULL or the ID of a row in the related table + * + * @var string */ protected $lookupDelegateSql; /** - * @var string, SQL. Get a list of (field_name, table_name, extends) tuples. + * SQL SELECT query. Get a list of (field_name, table_name, extends) tuples. * * For example, one tuple might be ("custom_123", "civicrm_value_mygroup_4", * "Activity"). + * + * @var string */ protected $lookupCustomFieldSql; @@ -91,7 +99,9 @@ class DynamicFKAuthorization implements EventSubscriberInterface { protected $lookupCustomFieldCache; /** - * @var array list of related tables for which FKs are allowed + * List of related tables for which FKs are allowed. + * + * @var array */ protected $allowedDelegates; diff --git a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php index 5680beec22..8e7ff6a31b 100644 --- a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php +++ b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php @@ -41,15 +41,21 @@ class TransactionSubscriber implements EventSubscriberInterface { } /** - * @var array (scalar $apiRequestId => CRM_Core_Transaction $tx) + * List of active transaction objects. + * + * array(scalar $apiRequestId => CRM_Core_Transaction $tx) + * + * @var array */ private $transactions = []; /** - * @var array (scalar $apiRequestId => bool) - * - * A list of requests which should be forcibly rolled back to + * (Unused?) A list of requests which should be forcibly rolled back to * their save points. + * + * array (scalar $apiRequestId => bool) + * + * @var array */ private $forceRollback = []; diff --git a/civicrm/Civi/API/Subscriber/WrapperAdapter.php b/civicrm/Civi/API/Subscriber/WrapperAdapter.php index 6a57a5c541..6b90161e91 100644 --- a/civicrm/Civi/API/Subscriber/WrapperAdapter.php +++ b/civicrm/Civi/API/Subscriber/WrapperAdapter.php @@ -32,7 +32,7 @@ class WrapperAdapter implements EventSubscriberInterface { } /** - * @var array(\API_Wrapper) + * @var \API_Wrapper[] */ protected $defaults; diff --git a/civicrm/Civi/Angular/Manager.php b/civicrm/Civi/Angular/Manager.php index cb4c4c86d2..e5f169a385 100644 --- a/civicrm/Civi/Angular/Manager.php +++ b/civicrm/Civi/Angular/Manager.php @@ -226,7 +226,9 @@ class Manager { */ public function getRawPartials($name) { $module = $this->getModule($name); - $result = []; + $result = !empty($module['partialsCallback']) + ? \Civi\Core\Resolver::singleton()->call($module['partialsCallback'], [$name, $module]) + : []; if (isset($module['partials'])) { foreach ($module['partials'] as $partialDir) { $partialDir = $this->res->getPath($module['ext']) . '/' . $partialDir; diff --git a/civicrm/Civi/Angular/Page/Modules.php b/civicrm/Civi/Angular/Page/Modules.php index 3b6b5a75ba..aa3655b8c7 100644 --- a/civicrm/Civi/Angular/Page/Modules.php +++ b/civicrm/Civi/Angular/Page/Modules.php @@ -24,6 +24,8 @@ class Modules extends \CRM_Core_Page { * "civicrm/ajax/anulgar-modules" route). * * @deprecated + * + * @throws \CRM_Core_Exception */ public function run() { /** @@ -56,7 +58,7 @@ class Modules extends \CRM_Core_Page { break; default: - \CRM_Core_Error::fatal("Unrecognized format"); + throw new \CRM_Core_Exception("Unrecognized format"); } \CRM_Utils_System::civiExit(); diff --git a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php index e063f7982f..c2ca32a1a8 100644 --- a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php +++ b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php @@ -32,7 +32,7 @@ class GetFields extends \Civi\Api4\Generic\DAOGetFieldsAction { $fields = $this->_itemsToGet('name'); /** @var \Civi\Api4\Service\Spec\SpecGatherer $gatherer */ $gatherer = \Civi::container()->get('spec_gatherer'); - $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), $this->includeCustom); + $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), $this->includeCustom, $this->values); return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions); } diff --git a/civicrm/Civi/Api4/Country.php b/civicrm/Civi/Api4/Country.php new file mode 100644 index 0000000000..619cc6c360 --- /dev/null +++ b/civicrm/Civi/Api4/Country.php @@ -0,0 +1,30 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * $Id$ + * + */ + +namespace Civi\Api4; + +/** + * Country entity. + * + * @package Civi\Api4 + */ +class Country extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php index c0c851661b..5c2b0ccb11 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php @@ -30,6 +30,9 @@ use Civi\Api4\Utils\ActionUtil; * @method $this setLoadOptions(bool $value) * @method bool getLoadOptions() * @method $this setAction(string $value) + * @method $this addValue(string $value) + * @method $this setValues(array $values) + * @method array getValues() */ class BasicGetFieldsAction extends BasicGetAction { @@ -41,10 +44,19 @@ class BasicGetFieldsAction extends BasicGetAction { protected $loadOptions = FALSE; /** + * Fields will be returned appropriate to the specified action (get, create, delete, etc.) + * * @var string */ protected $action = 'get'; + /** + * Fields will be returned appropriate to the specified values (e.g. ['contact_type' => 'Individual']) + * + * @var array + */ + protected $values = []; + /** * To implement getFields for your own entity: * diff --git a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php index e3a510b470..d64155fd0b 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php @@ -51,8 +51,8 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { if ($fields) { $this->includeCustom = strpos(implode('', $fields), '.') !== FALSE; } - $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom); - return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions); + $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom, $this->values); + return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions, $this->values); } public function fields() { diff --git a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php index 84f29f1d63..90a6844036 100644 --- a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php @@ -376,9 +376,10 @@ class FieldSpec { } /** + * @param array $values * @return array */ - public function getOptions() { + public function getOptions($values = []) { if (!isset($this->options) || $this->options === TRUE) { $fieldName = $this->getName(); @@ -388,7 +389,7 @@ class FieldSpec { } $bao = CoreUtil::getBAOFromApiName($this->getEntity()); - $options = $bao::buildOptions($fieldName); + $options = $bao::buildOptions($fieldName, NULL, $values); if (!is_array($options) || !$options) { $options = FALSE; diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php index 4810d03d05..1f77f16d2d 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php @@ -29,8 +29,10 @@ class ContactCreationSpecProvider implements Generic\SpecProviderInterface { * @param \Civi\Api4\Service\Spec\RequestSpec $spec */ public function modifySpec(RequestSpec $spec) { - $spec->getFieldByName('contact_type') - ->setDefaultValue('Individual'); + $contactTypeField = $spec->getFieldByName('contact_type'); + if ($contactTypeField) { + $contactTypeField->setDefaultValue('Individual'); + } $spec->getFieldByName('is_opt_out')->setRequired(FALSE); $spec->getFieldByName('is_deleted')->setRequired(FALSE); diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index 379caf8a03..8c63e66228 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -29,15 +29,16 @@ class SpecFormatter { /** * @param FieldSpec[] $fields * @param bool $includeFieldOptions + * @param array $values * * @return array */ - public static function specToArray($fields, $includeFieldOptions = FALSE) { + public static function specToArray($fields, $includeFieldOptions = FALSE, $values = []) { $fieldArray = []; foreach ($fields as $field) { if ($includeFieldOptions) { - $field->getOptions(); + $field->getOptions($values); } $fieldArray[$field->getName()] = $field->toArray(); } diff --git a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php index 8a91d09e90..0edb4e8c6a 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php @@ -46,18 +46,19 @@ class SpecGatherer { * * @param string $entity * @param string $action - * @param $includeCustom + * @param bool $includeCustom + * @param array $values * * @return \Civi\Api4\Service\Spec\RequestSpec */ - public function getSpec($entity, $action, $includeCustom) { + public function getSpec($entity, $action, $includeCustom, $values = []) { $specification = new RequestSpec($entity, $action); // Real entities if (strpos($entity, 'Custom_') !== 0) { - $this->addDAOFields($entity, $action, $specification); + $this->addDAOFields($entity, $action, $specification, $values); if ($includeCustom && array_key_exists($entity, \CRM_Core_SelectValues::customGroupExtends())) { - $this->addCustomFields($entity, $specification); + $this->addCustomFields($entity, $specification, $values); } } // Custom pseudo-entities @@ -92,14 +93,18 @@ class SpecGatherer { * @param string $entity * @param string $action * @param \Civi\Api4\Service\Spec\RequestSpec $specification + * @param array $values */ - private function addDAOFields($entity, $action, RequestSpec $specification) { + private function addDAOFields($entity, $action, RequestSpec $specification, $values = []) { $DAOFields = $this->getDAOFields($entity); foreach ($DAOFields as $DAOField) { if ($DAOField['name'] == 'id' && $action == 'create') { continue; } + if (array_key_exists('contactType', $DAOField) && !empty($values['contact_type']) && $DAOField['contactType'] != $values['contact_type']) { + continue; + } if ($action !== 'create' || isset($DAOField['default'])) { $DAOField['required'] = FALSE; } @@ -114,12 +119,18 @@ class SpecGatherer { /** * @param string $entity * @param \Civi\Api4\Service\Spec\RequestSpec $specification + * @param array $values + * @throws \API_Exception */ - private function addCustomFields($entity, RequestSpec $specification) { - $extends = ($entity == 'Contact') ? ['Contact', 'Individual', 'Organization', 'Household'] : [$entity]; + private function addCustomFields($entity, RequestSpec $specification, $values = []) { + $extends = [$entity]; + if ($entity === 'Contact') { + $extends = !empty($values['contact_type']) ? [$values['contact_type'], 'Contact'] : ['Contact', 'Individual', 'Organization', 'Household']; + } $customFields = CustomField::get() ->setCheckPermissions(FALSE) ->addWhere('custom_group.extends', 'IN', $extends) + ->addWhere('custom_group.is_multiple', '=', '0') ->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value', 'date_format', 'time_format', 'start_date_years', 'end_date_years', 'help_pre', 'help_post']) ->execute(); diff --git a/civicrm/Civi/Api4/StateProvince.php b/civicrm/Civi/Api4/StateProvince.php new file mode 100644 index 0000000000..b63c3ea3a2 --- /dev/null +++ b/civicrm/Civi/Api4/StateProvince.php @@ -0,0 +1,30 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * $Id$ + * + */ + +namespace Civi\Api4; + +/** + * StateProvince entity. + * + * @package Civi\Api4 + */ +class StateProvince extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/CCase/Analyzer.php b/civicrm/Civi/CCase/Analyzer.php index 64c3303aea..d167b6b6a2 100644 --- a/civicrm/Civi/CCase/Analyzer.php +++ b/civicrm/Civi/CCase/Analyzer.php @@ -22,7 +22,9 @@ class Analyzer { private $caseId; /** - * @var array per APIv3 + * The "Case" data, formatted per APIv3. + * + * @var array */ private $case; @@ -32,7 +34,9 @@ class Analyzer { private $caseType; /** - * @var array per APIv3 + * List of activities, formatted per APIv3. + * + * @var array */ private $activities; @@ -42,7 +46,12 @@ class Analyzer { private $xml; /** - * @var array<string,array> + * A list of activity indices, which sort the various activities by some set of keys. + * + * Each index is identified by its key-set - e.g. "activity_type_id;source_contact_id" would be a + * two-dimensional index listing activities by their type ID and their source. + * + * @var array */ private $indices; diff --git a/civicrm/Civi/CCase/Events.php b/civicrm/Civi/CCase/Events.php index 89ce8c6d30..114875f17e 100644 --- a/civicrm/Civi/CCase/Events.php +++ b/civicrm/Civi/CCase/Events.php @@ -16,10 +16,14 @@ namespace Civi\CCase; * @package Civi\CCase */ class Events { + /** - * @var array (int $caseId => bool $active) list of cases for which we are actively firing case-change event - * + * List of cases for which we are actively firing case-change event * We do not want to fire case-change events recursively. + * + * array (int $caseId => bool $active) + * + * @var array */ public static $isActive = []; diff --git a/civicrm/Civi/Core/DAO/Event/PostDelete.php b/civicrm/Civi/Core/DAO/Event/PostDelete.php index f631513947..ade776ebc9 100644 --- a/civicrm/Civi/Core/DAO/Event/PostDelete.php +++ b/civicrm/Civi/Core/DAO/Event/PostDelete.php @@ -18,12 +18,12 @@ namespace Civi\Core\DAO\Event; class PostDelete extends \Symfony\Component\EventDispatcher\Event { /** - * @var DAO Object + * @var \CRM_Core_DAO */ public $object; /** - * @var DAO delete result + * @var mixed */ public $result; diff --git a/civicrm/Civi/Core/DAO/Event/PostUpdate.php b/civicrm/Civi/Core/DAO/Event/PostUpdate.php index e436127083..8f07957e38 100644 --- a/civicrm/Civi/Core/DAO/Event/PostUpdate.php +++ b/civicrm/Civi/Core/DAO/Event/PostUpdate.php @@ -18,7 +18,7 @@ namespace Civi\Core\DAO\Event; class PostUpdate extends \Symfony\Component\EventDispatcher\Event { /** - * @var DAO Object + * @var \CRM_Core_DAO */ public $object; diff --git a/civicrm/Civi/Core/DAO/Event/PreDelete.php b/civicrm/Civi/Core/DAO/Event/PreDelete.php index b1e3bb75b0..ca28673208 100644 --- a/civicrm/Civi/Core/DAO/Event/PreDelete.php +++ b/civicrm/Civi/Core/DAO/Event/PreDelete.php @@ -18,7 +18,7 @@ namespace Civi\Core\DAO\Event; class PreDelete extends \Symfony\Component\EventDispatcher\Event { /** - * @var DAO Object + * @var \CRM_Core_DAO */ public $object; diff --git a/civicrm/Civi/Core/Event/PostEvent.php b/civicrm/Civi/Core/Event/PostEvent.php index 3c028b4cc0..1123752758 100644 --- a/civicrm/Civi/Core/Event/PostEvent.php +++ b/civicrm/Civi/Core/Event/PostEvent.php @@ -29,7 +29,9 @@ class PostEvent extends GenericHookEvent { } /** - * @var string 'create'|'edit'|'delete' etc + * One of: 'create'|'edit'|'delete' + * + * @var string */ public $action; diff --git a/civicrm/Civi/Core/Event/PreEvent.php b/civicrm/Civi/Core/Event/PreEvent.php index 4dc5f1c7cf..3382e9dbe7 100644 --- a/civicrm/Civi/Core/Event/PreEvent.php +++ b/civicrm/Civi/Core/Event/PreEvent.php @@ -29,7 +29,9 @@ class PreEvent extends GenericHookEvent { } /** - * @var string 'create'|'edit'|'delete' etc + * One of: 'create'|'edit'|'delete' + * + * @var string */ public $action; diff --git a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php index 32d83151c0..5e5993f74f 100644 --- a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php +++ b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php @@ -23,7 +23,9 @@ class UnhandledExceptionEvent extends GenericHookEvent { public $exception; /** - * @var mixed reserved for future use + * Reserved for future use. + * + * @var mixed */ public $request; diff --git a/civicrm/Civi/Core/Transaction/Frame.php b/civicrm/Civi/Core/Transaction/Frame.php index acb0c3fb89..7dbe7e4a50 100644 --- a/civicrm/Civi/Core/Transaction/Frame.php +++ b/civicrm/Civi/Core/Transaction/Frame.php @@ -29,17 +29,23 @@ class Frame { private $dao; /** - * @var string|null e.g. "BEGIN" or "SAVEPOINT foo" + * The statement used to start this transaction - e.g. "BEGIN" or "SAVEPOINT foo" + * + * @var string|null */ private $beginStmt; /** - * @var string|null e.g. "COMMIT" + * The statement used to commit this transaction - e.g. "COMMIT" + * + * @var string|null */ private $commitStmt; /** - * @var string|null e.g. "ROLLBACK" or "ROLLBACK TO SAVEPOINT foo" + * The statement used to rollback this transaction - e.g. "ROLLBACK" or "ROLLBACK TO SAVEPOINT foo" + * + * @var string|null */ private $rollbackStmt; diff --git a/civicrm/Civi/Core/Transaction/Manager.php b/civicrm/Civi/Core/Transaction/Manager.php index eb830c8850..bfa8130d39 100644 --- a/civicrm/Civi/Core/Transaction/Manager.php +++ b/civicrm/Civi/Core/Transaction/Manager.php @@ -26,7 +26,9 @@ class Manager { private $dao; /** - * @var array<Frame> stack of SQL transactions/savepoints + * Stack of SQL transactions/savepoints. + * + * @var \Civi\Core\Transaction\Frame[] */ private $frames = []; diff --git a/civicrm/Civi/Payment/PropertyBag.php b/civicrm/Civi/Payment/PropertyBag.php index c27e0af4dc..c8db414571 100644 --- a/civicrm/Civi/Payment/PropertyBag.php +++ b/civicrm/Civi/Payment/PropertyBag.php @@ -87,7 +87,9 @@ class PropertyBag implements \ArrayAccess { } /** - * @var string Just for unit testing. + * Just for unit testing. + * + * @var string */ public $lastWarning; diff --git a/civicrm/Civi/Payment/System.php b/civicrm/Civi/Payment/System.php index d7b6f0e2c0..fbbfc7d146 100644 --- a/civicrm/Civi/Payment/System.php +++ b/civicrm/Civi/Payment/System.php @@ -14,7 +14,7 @@ class System { private static $singleton; /** - * @var array cache + * @var array */ private $cache = []; diff --git a/civicrm/Civi/Test/CiviTestListener.php b/civicrm/Civi/Test/CiviTestListener.php index 35a8a0c728..e32d9b45d2 100644 --- a/civicrm/Civi/Test/CiviTestListener.php +++ b/civicrm/Civi/Test/CiviTestListener.php @@ -35,7 +35,7 @@ else { private $cache = []; /** - * @var \CRM_Core_Transaction|NULL + * @var \CRM_Core_Transaction|null */ private $tx; diff --git a/civicrm/Civi/Test/Legacy/CiviTestListener.php b/civicrm/Civi/Test/Legacy/CiviTestListener.php index 015f1af208..eb85e8906e 100644 --- a/civicrm/Civi/Test/Legacy/CiviTestListener.php +++ b/civicrm/Civi/Test/Legacy/CiviTestListener.php @@ -28,7 +28,7 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { private $cache = []; /** - * @var \CRM_Core_Transaction|NULL + * @var \CRM_Core_Transaction|null */ private $tx; diff --git a/civicrm/Civi/Test/Schema.php b/civicrm/Civi/Test/Schema.php index b5a9aa525c..40da4389a9 100644 --- a/civicrm/Civi/Test/Schema.php +++ b/civicrm/Civi/Test/Schema.php @@ -27,7 +27,7 @@ class Schema { $tables = $pdo->query($query); $result = []; foreach ($tables as $table) { - $result[] = $table['table_name']; + $result[] = isset($table['TABLE_NAME']) ? $table['TABLE_NAME'] : $table['table_name']; } return $result; } diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index bbfd35b959..927513a5b9 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -74,7 +74,7 @@ <legend>values<span class="crm-marker" ng-if="availableParams.values.required"> *</span></legend> <div class="api4-input form-inline" ng-repeat="clause in params.values" ng-mouseenter="help('value: ' + clause[0], fieldHelp(clause[0]))" ng-mouseleave="help('values', availableParams.values)"> <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields, allowClear: true, placeholder: 'Field'}" /> - <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0]}" /> + <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0], action: action === 'getFields' ? params.action || 'get' : action}" /> </div> <div class="api4-input form-inline"> <input class="collapsible-optgroups form-control" ng-model="controls.values" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields}" placeholder="Add value" /> diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 15245f4a2c..982f618d3f 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -105,9 +105,9 @@ return container; } - function getFieldList(source) { + function getFieldList(action) { var fields = [], - fieldInfo = _.findWhere(getEntity().actions, {name: $scope.action}).fields; + fieldInfo = _.findWhere(getEntity().actions, {name: action}).fields; formatForSelect2(fieldInfo, fields, 'name', ['description', 'required', 'default_value']); return fields; } @@ -159,7 +159,7 @@ }; $scope.valuesFields = function() { - var fields = _.cloneDeep($scope.fields); + var fields = _.cloneDeep($scope.action === 'getFields' ? getFieldList($scope.params.action || 'get') : $scope.fields); // Disable fields that are already in use _.each($scope.params.values || [], function(val) { (_.findWhere(fields, {id: val[0]}) || {}).disabled = true; @@ -265,7 +265,7 @@ } if ($scope.action) { var actionInfo = _.findWhere(actions, {id: $scope.action}); - $scope.fields = getFieldList(); + $scope.fields = getFieldList($scope.action); if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) { $scope.fieldsAndJoins = addJoins($scope.fields); } else { @@ -400,7 +400,7 @@ code.php += ', ' + phpFormat(index); } code.php += ");"; - + // Write oop code if (entity.substr(0, 7) !== 'Custom_') { code.oop = '$' + results + " = \\Civi\\Api4\\" + entity + '::' + action + '()'; @@ -445,7 +445,7 @@ code.cli = 'cv api4 ' + entity + '.' + action + " '" + stringify(params) + "'"; } _.each(code, function(val, type) { - $scope.code[type] = prettyPrintOne(val); + $scope.code[type] = prettyPrintOne(_.escape(val)); }); } @@ -466,7 +466,7 @@ ret += (ret.length ? ', ' : '') + key + ': ' + (_.isArray(val) ? '[' + val + ']' : val); } }); - return prettyPrintOne(ret); + return prettyPrintOne(_.escape(ret)); } $scope.execute = function() { @@ -482,11 +482,11 @@ }).then(function(resp) { $scope.loading = false; $scope.status = 'success'; - $scope.result = [formatMeta(resp.data), prettyPrintOne(JSON.stringify(resp.data.values, null, 2), 'js', 1)]; + $scope.result = [formatMeta(resp.data), prettyPrintOne(_.escape(JSON.stringify(resp.data.values, null, 2)), 'js', 1)]; }, function(resp) { $scope.loading = false; $scope.status = 'danger'; - $scope.result = [formatMeta(resp), prettyPrintOne(JSON.stringify(resp.data, null, 2))]; + $scope.result = [formatMeta(resp), prettyPrintOne(_.escape(JSON.stringify(resp.data, null, 2)))]; }); }; @@ -658,7 +658,7 @@ var ts = scope.ts = CRM.ts(), multi = _.includes(['IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'], scope.data.op), entity = $routeParams.api4entity, - action = $routeParams.api4action; + action = scope.data.action || $routeParams.api4action; function destroyWidget() { var $el = $(element); diff --git a/civicrm/ang/crmCaseType/activityTypesTable.html b/civicrm/ang/crmCaseType/activityTypesTable.html index a324f895f7..0b39092e0c 100644 --- a/civicrm/ang/crmCaseType/activityTypesTable.html +++ b/civicrm/ang/crmCaseType/activityTypesTable.html @@ -19,7 +19,7 @@ Required vars: caseType </td> <td> <i class="crm-i {{ activityTypes[activityType.name].icon }}"></i> - {{ activityType.name }} + {{ activityTypes[activityType.name].label }} </td> <td> <input class="crm-form-text number" type="text" ng-pattern="/^[1-9][0-9]*$/" ng-model="activityType.max_instances"> diff --git a/civicrm/api/v3/System.php b/civicrm/api/v3/System.php index 6b593546a6..c91583fc0f 100644 --- a/civicrm/api/v3/System.php +++ b/civicrm/api/v3/System.php @@ -417,6 +417,16 @@ function civicrm_api3_system_updateindexes() { return civicrm_api3_create_success(1); } +/** + * Get an array of indices that should be defined but are not. + * + * @return array + */ +function civicrm_api3_system_getmissingindices() { + $indices = CRM_Core_BAO_SchemaHandler::getMissingIndices(FALSE); + return civicrm_api3_create_success($indices); +} + /** * Creates missing log tables. * diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index 9e6350d202..dd90088fe6 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -33,6 +33,8 @@ function _civicrm_api3_initialize() { * String DAO to check for required fields (create functions only). * @param array $keyoptions * List of required fields options. One of the options is required. + * + * @throws \API_Exception */ function civicrm_api3_verify_one_mandatory($params, $daoName = NULL, $keyoptions = []) { $keys = [[]]; @@ -93,7 +95,7 @@ function civicrm_api3_verify_mandatory($params, $daoName = NULL, $keys = [], $ve } } if (!empty($unmatched)) { - throw new API_Exception("Mandatory key(s) missing from params array: " . implode(", ", $unmatched), "mandatory_missing", ["fields" => $unmatched]); + throw new API_Exception('Mandatory key(s) missing from params array: ' . implode(", ", $unmatched), 'mandatory_missing', ["fields" => $unmatched]); } } @@ -112,7 +114,7 @@ function civicrm_api3_create_error($msg, $data = []) { // we will show sql to privileged user only (not sure of a specific // security hole here but seems sensible - perhaps should apply to the trace as well?) if (isset($data['sql'])) { - if (CRM_Core_Permission::check('Administer CiviCRM') || CIVICRM_UF == 'UnitTests') { + if (CRM_Core_Permission::check('Administer CiviCRM') || CIVICRM_UF === 'UnitTests') { // Isn't this redundant? $data['debug_information'] = $data['sql']; } @@ -140,6 +142,7 @@ function civicrm_api3_create_error($msg, $data = []) { * - this param is currently used for legacy behaviour support * * @return array + * @throws \CiviCRM_API3_Exception */ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, $action = NULL, &$dao = NULL, $extraReturnValues = []) { $result = []; @@ -148,10 +151,10 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, $entity = _civicrm_api_get_camel_name($entity); $result['is_error'] = 0; //lets set the ['id'] field if it's not set & we know what the entity is - if (is_array($values) && $entity && $action != 'getfields') { + if (is_array($values) && $entity && $action !== 'getfields') { foreach ($values as $key => $item) { - if (empty($item['id']) && !empty($item[$lowercase_entity . "_id"])) { - $values[$key]['id'] = $item[$lowercase_entity . "_id"]; + if (empty($item['id']) && !empty($item[$lowercase_entity . '_id'])) { + $values[$key]['id'] = $item[$lowercase_entity . '_id']; } if (!empty($item['financial_type_id'])) { // 4.3 legacy handling. @@ -169,10 +172,10 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, } if (is_array($params) && !empty($params['debug'])) { - if (is_string($action) && $action != 'getfields') { + if (is_string($action) && $action !== 'getfields') { $apiFields = civicrm_api($entity, 'getfields', ['version' => 3, 'action' => $action] + $params); } - elseif ($action != 'getfields') { + elseif ($action !== 'getfields') { $apiFields = civicrm_api($entity, 'getfields', ['version' => 3] + $params); } else { @@ -180,7 +183,7 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, } $allFields = []; - if ($action != 'getfields' && is_array($apiFields) && is_array(CRM_Utils_Array::value('values', $apiFields))) { + if ($action !== 'getfields' && is_array($apiFields) && is_array(CRM_Utils_Array::value('values', $apiFields))) { $allFields = array_keys($apiFields['values']); } $paramFields = array_keys($params); @@ -212,7 +215,7 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, $result['count'] = (int) count($values); // Convert value-separated strings to array - if ($action != 'getfields') { + if ($action !== 'getfields') { _civicrm_api3_separate_values($values); } @@ -247,16 +250,16 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, // Report deprecations. $deprecated = _civicrm_api3_deprecation_check($entity, $result); // Always report "setvalue" action as deprecated. - if (!is_string($deprecated) && ($action == 'getactions' || $action == 'setvalue')) { + if (!is_string($deprecated) && ($action === 'getactions' || $action === 'setvalue')) { $deprecated = ((array) $deprecated) + ['setvalue' => 'The "setvalue" action is deprecated. Use "create" with an id instead.']; } // Always report "update" action as deprecated. - if (!is_string($deprecated) && ($action == 'getactions' || $action == 'update')) { + if (!is_string($deprecated) && ($action === 'getactions' || $action === 'update')) { $deprecated = ((array) $deprecated) + ['update' => 'The "update" action is deprecated. Use "create" with an id instead.']; } if ($deprecated) { // Metadata-level deprecations or wholesale entity deprecations. - if ($entity == 'Entity' || $action == 'getactions' || is_string($deprecated)) { + if ($entity === 'Entity' || $action === 'getactions' || is_string($deprecated)) { $result['deprecated'] = $deprecated; } // Action-specific deprecations @@ -302,33 +305,33 @@ function _civicrm_api3_get_DAO($name) { $name = _civicrm_api_get_camel_name($name); - if ($name == 'Individual' || $name == 'Household' || $name == 'Organization') { + if ($name === 'Individual' || $name === 'Household' || $name === 'Organization') { $name = 'Contact'; } // hack to deal with incorrectly named BAO/DAO - see CRM-10859 // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingEventQueue - if ($name == 'MailingEventQueue') { + if ($name === 'MailingEventQueue') { return 'CRM_Mailing_Event_DAO_Queue'; } // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingRecipients // but am not confident mailing_recipients is tested so have not tackled. - if ($name == 'MailingRecipients') { + if ($name === 'MailingRecipients') { return 'CRM_Mailing_DAO_Recipients'; } // FIXME: DAO should be renamed CRM_ACL_DAO_AclRole - if ($name == 'AclRole') { + if ($name === 'AclRole') { return 'CRM_ACL_DAO_EntityRole'; } // FIXME: DAO should be renamed CRM_SMS_DAO_SmsProvider // But this would impact SMS extensions so need to coordinate // Probably best approach is to migrate them to use the api and decouple them from core BAOs - if ($name == 'SmsProvider') { + if ($name === 'SmsProvider') { return 'CRM_SMS_DAO_Provider'; } // FIXME: DAO names should follow CamelCase convention - if ($name == 'Im' || $name == 'Acl' || $name == 'Pcp') { + if ($name === 'Im' || $name === 'Acl' || $name === 'Pcp') { $name = strtoupper($name); } $dao = CRM_Core_DAO_AllCoreTables::getFullName($name); @@ -341,7 +344,7 @@ function _civicrm_api3_get_DAO($name) { include_once "api/v3/$name.php"; } - $daoFn = "_civicrm_api3_" . _civicrm_api_get_entity_name_from_camel($name) . "_DAO"; + $daoFn = '_civicrm_api3_' . _civicrm_api_get_entity_name_from_camel($name) . '_DAO'; if (function_exists($daoFn)) { return $daoFn(); } @@ -361,7 +364,7 @@ function _civicrm_api3_get_DAO($name) { */ function _civicrm_api3_get_BAO($name) { // FIXME: DAO should be renamed CRM_Badge_DAO_BadgeLayout - if ($name == 'PrintLabel') { + if ($name === 'PrintLabel') { return 'CRM_Badge_BAO_Layout'; } if ($name === 'Order') { @@ -400,7 +403,7 @@ function _civicrm_api3_separate_values(&$values) { } elseif (is_string($value)) { // This is to honor the way case API was originally written. - if ($key == 'case_type_id') { + if ($key === 'case_type_id') { $value = trim(str_replace($sp, ',', $value), ','); } elseif (strpos($value, $sp) !== FALSE) { @@ -826,8 +829,8 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e $sort = array_map('trim', explode(',', $sort)); } foreach ($sort as $s) { - if ($s == '(1)' || CRM_Utils_Rule::mysqlOrderBy($s)) { - if ($entity && $action == 'get') { + if ($s === '(1)' || CRM_Utils_Rule::mysqlOrderBy($s)) { + if ($entity && $action === 'get') { switch (trim(strtolower($s))) { case 'id': case 'id desc': @@ -860,10 +863,10 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e 'version', 'prettyprint', 'check_permissions', 'sequential', ]; foreach ($params as $n => $v) { - if (substr($n, 0, 7) == 'return.') { + if (substr($n, 0, 7) === 'return.') { $legacyreturnProperties[substr($n, 7)] = $v; } - elseif ($n == 'id') { + elseif ($n === 'id') { $inputParams[$lowercase_entity . '_id'] = $v; } elseif (in_array($n, $otherVars)) { @@ -888,6 +891,9 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e * @param object $dao * DAO object. * @param $entity + * + * @throws \API_Exception + * @throws \CRM_Core_Exception */ function _civicrm_api3_apply_options_to_dao(&$params, &$dao, $entity) { @@ -954,8 +960,6 @@ function _civicrm_api3_get_unique_name_array(&$bao) { /** * Converts an DAO object to an array. * - * @deprecated - DAO based retrieval is being phased out. - * * @param CRM_Core_DAO $dao * Object to convert. * @param array $params @@ -964,6 +968,11 @@ function _civicrm_api3_get_unique_name_array(&$bao) { * @param bool $autoFind * * @return array + * + * @throws \API_Exception + * + * @deprecated - DAO based retrieval is being phased out. + * */ function _civicrm_api3_dao_to_array($dao, $params = NULL, $uniqueFields = TRUE, $entity = "", $autoFind = TRUE) { $result = []; @@ -1007,13 +1016,15 @@ function _civicrm_api3_dao_to_array($dao, $params = NULL, $uniqueFields = TRUE, * * We currently retrieve all custom fields or none at this level so if we know the entity * && it can take custom fields & there is the string 'custom' in their return request we get them all, they are filtered on the way out - * @todo filter so only required fields are queried * * @param string $entity * Entity name in CamelCase. * @param array $params * * @return bool + * @throws \API_Exception + * + * @todo filter so only required fields are queried */ function _civicrm_api3_custom_fields_are_required($entity, $params) { if (!array_key_exists($entity, CRM_Core_BAO_CustomQuery::$extendsMap)) { @@ -1363,13 +1374,15 @@ function _civicrm_api3_basic_create_fallback($bao_name, &$params) { * * @return array * API result array + * * @throws API_Exception * @throws \Civi\API\Exception\UnauthorizedException + * @throws \CiviCRM_API3_Exception */ function _civicrm_api3_basic_delete($bao_name, &$params) { civicrm_api3_verify_mandatory($params, NULL, ['id']); _civicrm_api3_check_edit_permissions($bao_name, ['id' => $params['id']]); - $args = array(&$params['id']); + $args = [&$params['id']]; if (method_exists($bao_name, 'del')) { $dao = new $bao_name(); $dao->id = $params['id']; @@ -1418,6 +1431,8 @@ function _civicrm_api3_basic_delete($bao_name, &$params) { * E.g. membership_type_id where custom data doesn't apply to all membership types. * @param string $subName * Subtype of entity. + * + * @throws \CRM_Core_Exception */ function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity, $entity_id, $groupID = NULL, $subType = NULL, $subName = NULL) { $groupTree = CRM_Core_BAO_CustomGroup::getTree($entity, @@ -1448,7 +1463,7 @@ function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity, $returnArray[$key] = $val; // Shim to restore legacy behavior of ContactReference custom fields - if (!empty($fieldInfo[$id]) && $fieldInfo[$id]['data_type'] == 'ContactReference') { + if (!empty($fieldInfo[$id]) && $fieldInfo[$id]['data_type'] === 'ContactReference') { $returnArray['custom_' . $id . '_id'] = $returnArray[$key . '_id'] = $val; $returnArray['custom_' . $id] = $returnArray[$key] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $val, 'sort_name'); } @@ -1458,11 +1473,13 @@ function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity, /** * Used by the Validate API. + * * @param string $entity * @param string $action * @param array $params * * @return array $errors + * @throws \CiviCRM_API3_Exception */ function _civicrm_api3_validate($entity, $action, $params) { $errors = []; @@ -1473,8 +1490,8 @@ function _civicrm_api3_validate($entity, $action, $params) { foreach ($fields as $values) { if (!empty($values['api.required']) && empty($params[$values['name']])) { $errors[$values['name']] = [ - 'message' => "Mandatory key(s) missing from params array: " . $values['name'], - 'code' => "mandatory_missing", + 'message' => 'Mandatory key(s) missing from params array: ' . $values['name'], + 'code' => 'mandatory_missing', ]; } } @@ -1539,7 +1556,7 @@ function _civicrm_api3_validate_switch_cases($fieldName, $fieldInfo, $entity, $p foreach ((array) $fieldValue as $fieldvalue) { if (!CRM_Utils_Rule::money($fieldvalue) && !empty($fieldvalue)) { - throw new Exception($fieldName . " is not a valid amount: " . $params[$fieldName]); + throw new Exception($fieldName . ' is not a valid amount: ' . $params[$fieldName]); } } break; @@ -1639,7 +1656,7 @@ function _civicrm_api3_validate_foreign_keys($entity, $action, &$params, $fields if (!empty($fieldInfo['FKClassName'])) { if (!empty($params[$fieldName])) { foreach ((array) $params[$fieldName] as $fieldValue) { - _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo); + _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo, $entity); } } elseif (!empty($fieldInfo['required'])) { @@ -1731,16 +1748,21 @@ function _civicrm_api3_getValidDate($dateValue, $fieldName, $fieldType) { * * @param mixed $fieldValue * @param string $fieldName - * Uniquename of field being checked. + * Unique name of field being checked. * @param array $fieldInfo * Array of fields from getfields function. + * @param string $entity * * @throws \API_Exception */ -function _civicrm_api3_validate_constraint(&$fieldValue, &$fieldName, &$fieldInfo) { +function _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo, $entity) { $daoName = $fieldInfo['FKClassName']; + $fieldInfo = [$fieldName => $fieldInfo]; + $params = [$fieldName => $fieldValue]; + _civicrm_api3_validate_fields($entity, NULL, $params, $fieldInfo); + /* @var CRM_Core_DAO $dao*/ $dao = new $daoName(); - $dao->id = $fieldValue; + $dao->id = $params[$fieldName]; $dao->selectAdd(); $dao->selectAdd('id'); if (!$dao->find()) { @@ -2546,10 +2568,13 @@ function _civicrm_api3_check_edit_permissions($bao_name, $params) { /** * Check if an entity has been modified since the last known modified_date + * * @param string $modifiedDate Last knowm modified_date * @param int $id Id of record to check * @param string $entity API Entity + * * @return bool + * @throws \CiviCRM_API3_Exception */ function _civicrm_api3_compare_timestamps($modifiedDate, $id, $entity) { $currentDbInfo = civicrm_api3($entity, 'getsingle', ['id' => $id]); diff --git a/civicrm/bin/ContributionProcessor.php b/civicrm/bin/ContributionProcessor.php index 3434316ac5..cf3323b5c1 100644 --- a/civicrm/bin/ContributionProcessor.php +++ b/civicrm/bin/ContributionProcessor.php @@ -204,7 +204,7 @@ class CiviContributeProcessor { $handle = fopen($csvFile, "r"); if (!$handle) { - CRM_Core_Error::fatal("Can't locate csv file."); + throw new CRM_Core_Exception("Can't locate csv file."); } require_once "CRM/Contribute/BAO/Contribution/Utils.php"; @@ -231,7 +231,7 @@ class CiviContributeProcessor { CRM_Core_Error::debug_log_message("Considering first row ( line $row ) as HEADER ..<p>", TRUE); if (empty($header)) { - CRM_Core_Error::fatal("Header is empty."); + throw new CRM_Core_Exception("Header is empty."); } } $row++; @@ -254,7 +254,7 @@ class CiviContributeProcessor { CRM_Core_DAO::$_nullObject, FALSE, 0, 'REQUEST' ); if ($start < $end) { - CRM_Core_Error::fatal("Start offset can't be less than End offset."); + throw new CRM_Core_Exception("Start offset can't be less than End offset."); } $start = date('Y-m-d', time() - $start * 24 * 60 * 60) . 'T00:00:00.00Z'; diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 7f9d65742b..ef57c43a08 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.21.2', + return array( 'version' => '5.22.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.lock b/civicrm/composer.lock index dddf62bd33..9dfa4335a4 100644 --- a/civicrm/composer.lock +++ b/civicrm/composer.lock @@ -2682,126 +2682,6 @@ "psr-6" ], "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "zendframework/zend-stdlib", - "version": "2.4.13", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Stdlib\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zend-stdlib", - "keywords": [ - "stdlib", - "zf2" - ], - "time": "2015-07-21T13:55:46+00:00" - }, - { - "name": "zendframework/zend-validator", - "version": "2.4.13", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "81415511fe729e6de19a61936313cef43c80d337" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337", - "reference": "81415511fe729e6de19a61936313cef43c80d337", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "~2.4.0" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "~2.4.0", - "zendframework/zend-db": "~2.4.0", - "zendframework/zend-filter": "~2.4.0", - "zendframework/zend-i18n": "~2.4.0", - "zendframework/zend-math": "~2.4.0", - "zendframework/zend-servicemanager": "~2.4.0", - "zendframework/zend-session": "~2.4.0", - "zendframework/zend-uri": "~2.4.0" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", - "keywords": [ - "validator", - "zf2" - ], - "time": "2015-09-08T21:04:17+00:00" } ], "aliases": [], diff --git a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php index 28263f72bb..432467df74 100644 --- a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php +++ b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php @@ -388,6 +388,10 @@ class CRM_Core_Payment_iATSService extends CRM_Core_Payment { $request[$r] = htmlspecialchars($params[$p]); } } + // The "&" character is badly handled by the processor, + // so we sanitize it to "and" + $request['firstName'] = str_replace('&', ts('and'), $request['firstName']); + $request['lastName'] = str_replace('&', ts('and'), $request['lastName']); $request['creditCardExpiry'] = sprintf('%02d/%02d', $params['month'], ($params['year'] % 100)); $request['total'] = sprintf('%01.2f', CRM_Utils_Rule::cleanMoney($params['amount'])); // Place for ugly hacks. diff --git a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php index 657ca95a29..09ae7b50a0 100644 --- a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php +++ b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php @@ -462,6 +462,10 @@ class CRM_Core_Payment_iATSServiceACHEFT extends CRM_Core_Payment_iATSService { $request[$r] = $params[$p]; } } + // The "&" character is badly handled by the processor, + // so we sanitize it to "and" + $request['firstName'] = str_replace('&', ts('and'), $request['firstName']); + $request['lastName'] = str_replace('&', ts('and'), $request['lastName']); $request['total'] = sprintf('%01.2f', CRM_Utils_Rule::cleanMoney($params['amount'])); // Place for ugly hacks. switch ($method) { diff --git a/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php b/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php index f36087fdee..f46a9bd231 100644 --- a/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php +++ b/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php @@ -109,7 +109,7 @@ class CRM_Iats_Form_Settings extends CRM_Core_Form { ), )); - $result = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $result = Civi::settings()->get('iats_settings'); $defaults = (empty($result)) ? array() : $result; if (empty($defaults['recurring_failure_threshhold'])) { $defaults['recurring_failure_threshhold'] = 3; @@ -139,7 +139,7 @@ class CRM_Iats_Form_Settings extends CRM_Core_Form { unset($values[$key]); } } - CRM_Core_BAO_Setting::setItem($values, 'iATS Payments Extension', 'iats_settings'); + Civi::settings()->set('iats_settings', $values); parent::postProcess(); } diff --git a/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php b/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php index 787573e9db..860e0e8a93 100644 --- a/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php +++ b/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php @@ -22,17 +22,16 @@ class CRM_Iats_Page_iATSAdmin extends CRM_Core_Page { $this->assign('currentTime', date('Y-m-d H:i:s')); $this->assign('jobLastRunWarning', '0'); // Check if I've got any recurring contributions setup. In theory I should only worry about iATS, but it's a problem regardless .. - $params = array('version' => 3, 'sequential' => 1); - $result = civicrm_api('ContributionRecur', 'getcount', $params); + $result = civicrm_api3('ContributionRecur', 'getcount'); if (!empty($result)) { $this->assign('jobLastRunWarning', '1'); - $params['api_action'] = 'Iatsrecurringcontributions'; - $job = civicrm_api('Job', 'getSingle', $params); - $last_run = isset($job['last_run']) ? strtotime($job['last_run']) : ''; - $this->assign('jobLastRun', $job['last_run']); + $params = ['api_action' => 'Iatsrecurringcontributions', 'is_active' => 1, 'sequential' => 1, 'options' => ['sort' => 'last_run']]; + $jobs = civicrm_api3('Job', 'get', $params); + $job_last_run = count($jobs['values']) > 0 ? strtotime($jobs['values'][0]['last_run']) : 0; + $this->assign('jobLastRun', ($job_last_run ? date('Y-m-d H:i:s', $job_last_run) : '')); $this->assign('jobOverdue', ''); - $overdueHours = (time() - $last_run) / (60 * 60); - if (24 < $overdueHours) { + $overdueHours = (time() - $job_last_run) / (60 * 60); + if (36 < $overdueHours) { $this->assign('jobOverdue', $overdueHours); } } diff --git a/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php b/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php index b6843bc577..fd9e8417a0 100644 --- a/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php +++ b/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php @@ -13,8 +13,8 @@ class CRM_Iats_Upgrader extends CRM_Iats_Upgrader_Base { try { $xmlfile = CRM_Core_Resources::singleton()->getPath('com.iatspayments.civicrm','info.xml'); $myxml = simplexml_load_file($xmlfile); - $version = (string)$myxml->version; - CRM_Core_BAO_Setting::setItem($version, 'iATS Payments Extension', 'iats_extension_version'); + $version = (string) $myxml->version; + Civi::settings()->set('iats_extension_version', $version); } catch (Exception $e) { // ignore @@ -75,13 +75,13 @@ class CRM_Iats_Upgrader extends CRM_Iats_Upgrader_Base { public function upgrade_1_4_001() { // reset iATS Extension Version in the civicrm_setting table - CRM_Core_BAO_Setting::setItem(NULL, 'iATS Payments Extension', 'iats_extension_version'); + Civi::settings()->set('iats_extension_version', NULL); return TRUE; } public function upgrade_1_5_000() { // reset iATS Extension Version in the civicrm_setting table - CRM_Core_BAO_Setting::setItem(NULL, 'iATS Payments Extension', 'iats_extension_version'); + Civi::settings()->set('iats_extension_version', NULL); return TRUE; } diff --git a/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php b/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php index ace24b8f78..3b61d73b5c 100644 --- a/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php +++ b/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php @@ -858,12 +858,12 @@ class CRM_Iats_iATSServiceRequest { * */ public static function iats_extension_version($reset = 0) { - $version = $reset ? '' : CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_extension_version'); + $version = $reset ? '' : Civi::settings()->get('iats_extension_version'); if (empty($version)) { $xmlfile = CRM_Core_Resources::singleton()->getPath('com.iatspayments.civicrm', 'info.xml'); $myxml = simplexml_load_file($xmlfile); $version = (string) $myxml->version; - CRM_Core_BAO_Setting::setItem($version, 'iATS Payments Extension', 'iats_extension_version'); + Civi::settings()->set('iats_extension_version', $version); } return $version; } diff --git a/civicrm/ext/iatspayments/README.md b/civicrm/ext/iatspayments/README.md index 7324fe4810..1573668c1a 100644 --- a/civicrm/ext/iatspayments/README.md +++ b/civicrm/ext/iatspayments/README.md @@ -1,22 +1,22 @@ com.iatspayments.civicrm =============== -CiviCRM Extension for iATS Web Services Payment Processor - Date: Oct 17, 2017. -Version 1.5.3 for 4.6.x and below. -Version 1.6.1 for 4.7.x. +CiviCRM Extension for iATS Web Services Payment Processor This README.md contains information specific to system administrators/developers. Information for users/implementors can be found in the Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation Requirements ------------ -1. CiviCRM 4.6.x or 4.7.x. We strongly recommend that you keep up with the most recent version of each branch. +1. CiviCRM 5.x. Tested on the latest ESR and officially supported recent releases. -2. Your PHP needs to include the SOAP extension (php.net/manual/en/soap.setup.php), recommended that you use at least PHP 5.6 but 5.3 and above should work if it supports TLS1.1/1.2 and SHA-256. +2. When using the 'legacy' processor, your PHP needs to include the SOAP extension (php.net/manual/en/soap.setup.php). -3. To use this extension in production, You must have an iATS Payments Account - and have configured it to accept payment though WebServices. You can use the shared iATS test account credentials for initial setup and testing. For details please see the Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation +3. To use this extension in production, you must have an iATS Payments Account. The extension supports both the 'legacy' and '1st Pay' gateways. -4. To handle ACH/EFT Contributions (verification of them) and to handle Recurring Contributions (of any type) you must configure cron for your CiviCRM install. Information about how to do this can be found in: http://wiki.civicrm.org/confluence/display/CRMDOC/Managing+Scheduled+Jobs +4. Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation + +4. To handle ACH/EFT Contributions (verification of them) and to handle Recurring Contributions (of any type) you must configure cron for your CiviCRM install. Information about how to do this can be found in: https://docs.civicrm.org/sysadmin/en/latest/setup/jobs/ Installation @@ -26,7 +26,7 @@ This extension follows the standard installation method - if you've got a suppor As of CiviCRM 5.x, the iATS extension is distributed with the CiviCRM download. This is generally the right version to install. See https://github.com/iATSPayments/com.iatspayments.civicrm/issues/242 for notes on converting from a previous manual install. -If you need help with installing extensions, try: https://wiki.civicrm.org/confluence/display/CRMDOC/Extensions +If you need help with installing extensions, try: https://docs.civicrm.org/sysadmin/en/latest/customize/extensions/ If you want to try out a particular version directly from github, you probably already know how to do that. @@ -34,19 +34,25 @@ Once the extension is installed, you need to add the payment processor(s) and in 1. Administer -> System Settings -> Payment Processors -> + Add Payment Processor -2. Select iATS Payments Credit Card, iATS Payments ACH/EFT, or iATS Payments SWIPE, they are all provided by this extension (the instructions differ only slightly for each one). You can create multiple payment processor entries using the same credentials for the different types. +2. If you are using a 'legacy' iATS account, select one or more of: iATS Payments Credit Card, iATS Payments ACH/EFT, or iATS Payments SWIPE. They are all provided by this extension, the instructions differ only slightly for each one. You can create multiple payment processor entries using the same credentials for the different types. + +3. If you are using a new '1stPay' iATS account, select one or more of: iATS Payments 1stPay Credit Card or iATS Payments 1stPay ACH. ACH must be specifically enabled on your account, check with iATS Payments if you're not sure. + +4. The "Payment Processor Title" of the payment processor is what your site visitors will see when they select a payment method, so typically use "Credit Card" here, or "Credit Card C$" (or US$) if there's any doubt about the currency. Your iATS Payments Account is configured for a single currency, so when you set up the payment page, you'll have to manually ensure you set the right currency (not an issue if you're only handling one currency). -3. The "Name" of the payment processor is what your site visitors will see when they select a payment method, so typically use "Credit Card" here, or "Credit Card C$" (or US$) if there's any doubt about the currency. Your iATS Payments Account is configured for a single currency, so when you set up the payment page, you'll have to manually ensure you set the right currency (not an issue if you're only handling one currency). +5. For the legacy processor, you can use a shared test account with Agent Code = TEST88 and Password = TEST88. This is a shared test account, so don't put in any private information. -4. The test account uses Agent Code = TEST88 and Password = TEST88. This is a shared test account, so don't put in any private information. +6. For the 1stPay processor, you should be able to use the same credentials with the different site URL as pre-populated. -5. If you'd like to test using live workflows, you can just temporarily use the test account credentials in your live processor fields. +7. If you'd like to test using live workflows, you can just temporarily use the test account credentials in your live processor fields. -6. Create a Contribution Page (or go to an existing one) -> Under Configure -> Contribution Amounts -> select your newly installed/configured Payment Processor(s), and Save. +8. Create a Contribution Page (or go to an existing one) -> Under Configure -> Contribution Amounts -> select your newly installed/configured Payment Processor(s), and Save. Extension Testing Notes ----------------------- +The notes below were written for the legacy processor, 1stPay testing notes still to be added here. + 1. Our test matrix includes 21 type of transactions at the moment. View a summary of the results here: https://cloud.githubusercontent.com/assets/5340555/5616064/2459a9b8-94be-11e4-84c7-2ef0c83cc744.png 2. Manage Contribution Pages -> Links -> Live Page. @@ -103,17 +109,13 @@ Some issues may be related to core CiviCRM issues, and may not have an immediate Below is a list of some of the most common issues: -'Backend' ACH/EFT is not supported by CiviCRM core. Having an enabled ACH/EFT payment processor broke the backend live credit card payment page in core (until it was fixed here https://issues.civicrm.org/jira/browse/CRM-14442), so this module fixes that if it's an issue, and also provides links to easily allow administrators to input ACH/EFT on behalf of constituents. A similar problem existings for backend membership and event payments, and this has only been fixed in core for 4.6. - 9002 Error - if you get this when trying to make a contribution, then you're getting that error back from the iATS server due to an account misconfiguration. One source is due to some special characters in your passwd. CiviCRM core assigns Membership status (=new) and extends Membership End date as well as Event status (=registered) as soon as ACH/EFT is submitted (so while payment is still pending - this could be several days for ACH/EFT). If the contribution receives a Ok:BankAccept -> the extension will mark the contribution in CiviCRM as completed. If the contribution does NOT receive a Ok:BankAccept -> the extension will mark the contribution in CiviCRM as rejected - however - associated existing Membership and Event records may need to be updated manually. -For 4.6, recurring ACH/EFT memberships contributions are automatically approved by CiviCRM due to a bug in CiviCRM Core, but which should be fixed in the near future. - Please note that ACH Returns require manually processing. iATS Payments will notify an organization by Email in case such ACH Returns occur - the reason (e.g. NSF) is included. It is up to CiviCRM administrators to handle this in CiviCRM according to your organization's procedures (e.g. if these were monies re: Event registration -> should that registration be canceled as well or will you ask participant to bring cash; if NSF fees should be charged to the participant etc). -Caution on the use of Pricesets in recurring contributions. This extension will try to use the original transactions' line items. But there are two separate issues here. First, CiviCRM API does an incomplete job with the bookkeeping of line items, so if you need detailed bookkeeping of line items in recurring contributions, you may be disappointed. Separately, if the total amount of the recurring contribution has changed, then there's no machine way of reliably re-allocating it into the original line items, so in that case, they are not used at all. Though not always ideal, a workaround might be to do different transactions for different types of CiviCRM payments instead. +Caution on the use of Pricesets in recurring contributions. The CiviCRM API does an incomplete job with the bookkeeping of line items, so if you need detailed bookkeeping of line items in recurring contributions, you may be disappointed. Separately, if the total amount of the recurring contribution is changed, then there's no machine way of reliably re-allocating it into the original line items, so in that case, they are not used at all. Though not always ideal, a workaround might be to do different transactions for different types of CiviCRM payments instead. Please post an issue to the github repository if you have any questions. ======= diff --git a/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php b/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php index a583ae22c3..adcfe6ab4d 100644 --- a/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php +++ b/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php @@ -65,9 +65,9 @@ function civicrm_api3_job_fapsquery($params) { } // CRM_Core_Error::debug_var('Payment Processors', $payment_processors); // get the settings: TODO allow more detailed configuration of which transactions to import? - $iats_settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $iats_settings = Civi::settings()->get('iats_settings'); // I also use the settings to keep track of the last time I imported journal data from iATS/FAPS. - $iats_faps_journal = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_faps_journal'); + $iats_faps_journal = Civi::settings()->get('iats_faps_journal'); /* initialize some values so I can report at the end */ // count the number of records from each iats account analysed, and the number of each kind found ('action') $processed = array(); @@ -132,7 +132,7 @@ function civicrm_api3_job_fapsquery($params) { } // record the current date into the settings for next time. $iats_faps_journal = date('c'); // ISO 8601 - CRM_Core_BAO_Setting::setItem($iats_faps_journal, 'iATS Payments Extension', 'iats_faps_journal'); + Civi::settings()->set('iats_faps_journal', $iats_faps_journal); $message = ''; foreach ($processed as $user_name => $p) { foreach ($p as $type_id => $count) { diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php index 72b8948821..1854835249 100644 --- a/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php +++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php @@ -105,7 +105,7 @@ function civicrm_api3_job_Iatsrecurringcontributions($params) { $counter = 0; $error_count = 0; $output = []; - $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $settings = Civi::settings()->get('iats_settings'); $receipt_recurring = $settings['receipt_recurring']; $email_failure_report = empty($settings['email_recurring_failure_report']) ? '' : $settings['email_recurring_failure_report']; // By default, after 3 failures move the next scheduled contribution date forward. diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php index 00be93662e..a86648b1fe 100644 --- a/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php +++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php @@ -65,9 +65,9 @@ function civicrm_api3_job_iatsreport($params) { } // CRM_Core_Error::debug_var('Payment Processors', $payment_processors); // get the settings: TODO allow more detailed configuration of which transactions to import? - $iats_settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $iats_settings = Civi::settings()->get('iats_settings'); // I also use the setttings to keep track of the last time I imported journal data from iATS. - $iats_journal = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_journal'); + $iats_journal = Civi::settings()->get('iats_journal'); foreach (array('quick', 'recur', 'series') as $setting) { $import[$setting] = empty($iats_settings['import_' . $setting]) ? 0 : 1; } @@ -186,7 +186,7 @@ function civicrm_api3_job_iatsreport($params) { } } } - CRM_Core_BAO_Setting::setItem($iats_journal, 'iATS Payments Extension', 'iats_journal'); + Civi::settings()->set('iats_journal', $iats_journal); // watchdog('civicrm_iatspayments_com', 'found: <pre>!found</pre>', array('!found' => print_r($processed,TRUE)), WATCHDOG_NOTICE); $message = ''; foreach ($processed as $user_name => $p) { diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php index c986a7c1a0..61346f1f1b 100644 --- a/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php +++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php @@ -68,7 +68,7 @@ function _civicrm_api3_job_iatsverify_spec(&$spec) { */ function civicrm_api3_job_iatsverify($params) { - $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $settings = Civi::settings()->get('iats_settings'); $receipt_recurring = $settings['receipt_recurring']; define('IATS_VERIFY_DAYS', 30); // I've added an extra 2 days when getting candidates from CiviCRM to be sure i've got them all. @@ -107,8 +107,8 @@ function civicrm_api3_job_iatsverify($params) { } // use these two settings to see if it's worth checking their respective // journal tables. - $iats_journal_date = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_journal'); - $iats_faps_journal_date = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_faps_journal'); + $iats_journal_date = Civi::settings()->get('iats_journal'); + $iats_faps_journal_date = Civi::settings()->get('iats_faps_journal'); $message = ''; try { $contributions = civicrm_api3('Contribution', 'get', $select_params); diff --git a/civicrm/ext/iatspayments/iats.php b/civicrm/ext/iatspayments/iats.php index 91a2feb147..9cedcdb18d 100644 --- a/civicrm/ext/iatspayments/iats.php +++ b/civicrm/ext/iatspayments/iats.php @@ -354,7 +354,7 @@ function iats_civicrm_buildForm_CRM_Financial_Form_Payment(&$form) { // If enabled provide a way to set future contribution dates. // Uses javascript to hide/reset unless they have recurring contributions checked. - $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $settings = Civi::settings()->get('iats_settings'); if (!empty($settings['enable_public_future_recurring_start']) && $form->_paymentObject->supportsFutureRecurStartDate() ) { @@ -478,7 +478,7 @@ function iats_civicrm_pre($op, $objectName, $objectId, &$params) { if (('ContributionRecur' == $objectName) && ('create' == $op || 'edit' == $op) && !empty($params['payment_processor_id'])) { if ($type = _iats_civicrm_is_iats($params['payment_processor_id'])) { if (!empty($params['next_sched_contribution_date'])) { - $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $settings = Civi::settings()->get('iats_settings'); $allow_days = empty($settings['days']) ? array('-1') : $settings['days']; // Force one of the fixed days, and set the cycle_day at the same time. if (0 < max($allow_days)) { @@ -500,7 +500,7 @@ function iats_civicrm_pre($op, $objectName, $objectId, &$params) { function iats_get_setting($key = NULL) { static $settings; if (empty($settings)) { - $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings'); + $settings = Civi::settings()->get('iats_settings'); } return empty($key) ? $settings : (isset($settings[$key]) ? $settings[$key] : ''); } diff --git a/civicrm/ext/iatspayments/info.xml b/civicrm/ext/iatspayments/info.xml index bfab31caec..ca30065b58 100644 --- a/civicrm/ext/iatspayments/info.xml +++ b/civicrm/ext/iatspayments/info.xml @@ -9,7 +9,7 @@ <url desc="Support">https://github.com/iATSPayments/com.iatspayments.civicrm/issues?state=open</url> <url desc="Installation Instructions">https://github.com/iATSPayments/com.iatspayments.civicrm</url> <url desc="Documentation">https://github.com/iATSPayments/com.iatspayments.civicrm</url> - <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.0.md</url> + <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.1.md</url> <url desc="Getting Started">https://www.semper-it.com/civicamp-iats-payments-slides</url> </urls> <license>AGPL-3.0</license> @@ -17,13 +17,13 @@ <author>Alan Dixon</author> <email>iats@blackflysolutions.ca</email> </maintainer> - <releaseDate>2019-11-18</releaseDate> - <version>1.7.0</version> + <releaseDate>2020-02-05</releaseDate> + <version>1.7.1</version> <develStage>stable</develStage> <compatibility> - <ver>5.0</ver> + <ver>5.13</ver> </compatibility> - <comments>This release adds new functionality for the iATS Payments 1stPay processors, refactors a lot of code, and improves error handling.</comments> + <comments>A non-critical but recommended 1.7.x maintenance release, see release notes above for details.</comments> <civix> <namespace>CRM/Iats</namespace> </civix> diff --git a/civicrm/ext/iatspayments/release-notes/1.7.1.md b/civicrm/ext/iatspayments/release-notes/1.7.1.md new file mode 100644 index 0000000000..5a5a457c48 --- /dev/null +++ b/civicrm/ext/iatspayments/release-notes/1.7.1.md @@ -0,0 +1,13 @@ +# iATS CiviCRM Extension 1.7.1 + +Feb 5, 2020 + +This release is a maintenance release for the 1.7 series. +It is recommended, but not urgently, for all CiviCRM installs on 5.x and above. + +It: +1. Sanitizes '&' out of names when using the legacy processor. A '&' in the name field will generate errors in the processor. +2. Updates the "settings" functions to use standard non deprecated Civi::settings facade (i.e. avoid deprecation notices). Thanks Seamus! +3. Fixes a false warning about your civi cron on the admin console page. + +If you are currently on the 1.6.x series, please also read the 1.7.0 release notes. diff --git a/civicrm/packages/DB.php b/civicrm/packages/DB.php index 648d60dcbf..90f9d63622 100644 --- a/civicrm/packages/DB.php +++ b/civicrm/packages/DB.php @@ -187,8 +187,17 @@ define('DB_ERROR_CONSTRAINT_NOT_NULL',-29); * Invalid view or no permissions */ define('DB_ERROR_INVALID_VIEW', -100); -/**#@-*/ +/** + * Database lock timeout exceeded. + */ +define('DB_ERROR_LOCK_TIMEOUT', -30); + +/** + * Database deadlock encountered. + */ +define('DB_ERROR_DEADLOCK', -31); +/**#@-*/ // }}} // {{{ prepared statement-related @@ -694,6 +703,8 @@ class DB DB_ERROR_TRUNCATED => 'truncated', DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', DB_OK => 'no error', + DB_ERROR_DEADLOCK => 'deadlock', + DB_ERROR_LOCK_TIMEOUT => 'database lock timeout', ); } diff --git a/civicrm/packages/DB/mysql.php b/civicrm/packages/DB/mysql.php index 23a85c7fc0..9ab82dbba2 100644 --- a/civicrm/packages/DB/mysql.php +++ b/civicrm/packages/DB/mysql.php @@ -109,6 +109,8 @@ class DB_mysql extends DB_common 1136 => DB_ERROR_VALUE_COUNT_ON_ROW, 1142 => DB_ERROR_ACCESS_VIOLATION, 1146 => DB_ERROR_NOSUCHTABLE, + 1205 => DB_ERROR_LOCK_TIMEOUT, + 1213 => DB_ERROR_DEADLOCK, 1216 => DB_ERROR_CONSTRAINT, 1217 => DB_ERROR_CONSTRAINT, 1356 => DB_ERROR_INVALID_VIEW, diff --git a/civicrm/packages/DB/mysqli.php b/civicrm/packages/DB/mysqli.php index fab72ad4cb..0b383eeb12 100644 --- a/civicrm/packages/DB/mysqli.php +++ b/civicrm/packages/DB/mysqli.php @@ -112,6 +112,8 @@ class DB_mysqli extends DB_common 1136 => DB_ERROR_VALUE_COUNT_ON_ROW, 1142 => DB_ERROR_ACCESS_VIOLATION, 1146 => DB_ERROR_NOSUCHTABLE, + 1205 => DB_ERROR_LOCK_TIMEOUT, + 1213 => DB_ERROR_DEADLOCK, 1216 => DB_ERROR_CONSTRAINT, 1217 => DB_ERROR_CONSTRAINT, 1356 => DB_ERROR_INVALID_VIEW, diff --git a/civicrm/packages/Net/UserAgent/Detect.php b/civicrm/packages/Net/UserAgent/Detect.php deleted file mode 100644 index 571e274d45..0000000000 --- a/civicrm/packages/Net/UserAgent/Detect.php +++ /dev/null @@ -1,984 +0,0 @@ -<?php -// {{{ license - -// +----------------------------------------------------------------------+ -// | PHP version 4.2 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2007 The PHP Group | -// +----------------------------------------------------------------------+ -// | This source file is subject to version 2.0 of the PHP license, | -// | that is bundled with this package in the file LICENSE, and is | -// | available at through the world-wide-web at | -// | http://www.php.net/license/2_02.txt. | -// | If you did not receive a copy of the PHP license and are unable to | -// | obtain it through the world-wide-web, please send a note to | -// | license@php.net so we can mail you a copy immediately. | -// +----------------------------------------------------------------------+ -// | Authors: Dan Allen <dan@mojavelinux.com> | -// | Jason Rust <jrust@php.net> | -// +----------------------------------------------------------------------+ - -// $Id: Detect.php,v 1.28 2009/06/09 04:07:00 clockwerx Exp $ - -// }}} -// {{{ constants - -define('NET_USERAGENT_DETECT_BROWSER', 'browser'); -define('NET_USERAGENT_DETECT_OS', 'os'); -define('NET_USERAGENT_DETECT_FEATURES', 'features'); -define('NET_USERAGENT_DETECT_QUIRKS', 'quirks'); -define('NET_USERAGENT_DETECT_ACCEPT', 'accept'); -define('NET_USERAGENT_DETECT_ALL', 'all'); - -// }}} -// {{{ class Net_UserAgent_Detect - -/** - * The Net_UserAgent_Detect object does a number of tests on an HTTP user - * agent string. The results of these tests are available via methods of - * the object. Note that all methods in this class can be called - * statically. The constructor and singleton methods are only retained - * for BC. - * - * This module is based upon the JavaScript browser detection code - * available at http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html. - * This module had many influences from the lib/Browser.php code in - * version 1.3 of Horde. - * - * @author Jason Rust <jrust@php.net> - * @author Dan Allen <dan@mojavelinux.com> - * @author Chuck Hagenbuch <chuck@horde.org> - * @author Jon Parise <jon@horde.org> - * @package Net_UserAgent - */ - -// }}} -class Net_UserAgent_Detect { - // {{{ constructor - - function __construct($in_userAgent = null, $in_detect = null) - { - $this->detect($in_userAgent, $in_detect); - } - - // }}} - // {{{ singleton - - /** - * To be used in place of the contructor to return only open instance. - * - * @access public - * @return object Net_UserAgent_Detect instance - */ - function &singleton($in_userAgent = null, $in_detect = null) - { - static $instance; - - if (!isset($instance)) { - $instance = new Net_UserAgent_Detect($in_userAgent, $in_detect); - } - - return $instance; - } - - // }}} - // {{{ detect() - - /** - * Detect the user agent and prepare flags, features and quirks - * based on what is found - * - * This is the core of the Net_UserAgent_Detect class. It moves its - * way through the user agent string setting up the flags based on - * the vendors and versions of the browsers, determining the OS and - * setting up the features and quirks owned by each of the relevant - * clients. Note that if you are going to be calling methods of - * this class statically then set all the parameters using th - * setOption() - * - * @param string $in_userAgent (optional) User agent override. - * @param mixed $in_detect (optional) The level of checking to do. - * - * @access public - * @return void - */ - function detect($in_userAgent = null, $in_detect = null) - { - static $hasRun; - $options = Net_UserAgent_Detect::_getStaticProperty('options'); - if (!empty($hasRun) && empty($options['re-evaluate'])) { - return; - } - - $hasRun = true; - // {{{ set up static properties - - $in_userAgent = isset($options['userAgent']) && is_null($in_userAgent) ? $options['userAgent'] : $in_userAgent; - $in_detect = isset($options['detectOptions']) && is_null($in_detect) ? $options['detectOptions'] : $in_detect; - - // User agent string that is being analyzed - $userAgent = Net_UserAgent_Detect::_getStaticProperty('userAgent'); - - // Array that stores all of the flags for the vendor and version - // of the different browsers - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - $browser = array_flip(array('ns', 'ns2', 'ns3', 'ns4', 'ns4up', 'nav', 'ns6', 'belowns6', 'ns6up', 'firefox', 'firefox0.x', 'firefox1.x', 'firefox1.5', 'firefox2.x', 'firefox3.x', 'gecko', 'ie', 'ie3', 'ie4', 'ie4up', 'ie5', 'ie5_5', 'ie5up', 'ie6', 'belowie6', 'ie6up', 'ie7', 'ie7up', 'ie8', 'ie8tr', 'ie8up', 'opera', 'opera2', 'opera3', 'opera4', 'opera5', 'opera6', 'opera7', 'opera8', 'opera9', 'opera5up', 'opera6up', 'opera7up', 'belowopera8', 'opera8up', 'opera9up', 'aol', 'aol3', 'aol4', 'aol5', 'aol6', 'aol7', 'aol8', 'webtv', 'aoltv', 'tvnavigator', 'hotjava', 'hotjava3', 'hotjava3up', 'konq', 'safari', 'safari_mobile', 'chrome', 'netgem', 'webdav', 'icab')); - - // Array that stores all of the flags for the operating systems, - // and in some cases the versions of those operating systems (windows) - $os = Net_UserAgent_Detect::_getStaticProperty('os'); - $os = array_flip(array('win', 'win95', 'win16', 'win31', 'win9x', 'win98', 'wince', 'winme', 'win2k', 'winxp', 'winnt', 'win2003', 'vista', 'win7', 'os2', 'mac', 'mac68k', 'macppc', 'linux', 'unix', 'vms', 'sun', 'sun4', 'sun5', 'suni86', 'irix', 'irix5', 'irix6', 'hpux', 'hpux9', 'hpux10', 'aix', 'aix1', 'aix2', 'aix3', 'aix4', 'sco', 'unixware', 'mpras', 'reliant', 'dec', 'sinix', 'freebsd', 'bsd')); - - // Array which stores known issues with the given client that can - // be used for on the fly tweaking so that the client may recieve - // the proper handling of this quirk. - $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks'); - $quirks = array( - 'must_cache_forms' => false, - 'popups_disabled' => false, - 'empty_file_input_value' => false, - 'cache_ssl_downloads' => false, - 'scrollbar_in_way' => false, - 'break_disposition_header' => false, - 'nested_table_render_bug' => false); - - // Array that stores credentials for each of the browser/os - // combinations. These allow quick access to determine if the - // current client has a feature that is going to be implemented - // in the script. - $features = Net_UserAgent_Detect::_getStaticProperty('features'); - $features = array( - 'javascript' => false, - 'dhtml' => false, - 'dom' => false, - 'sidebar' => false, - 'gecko' => false, - 'svg' => false, - 'css2' => false, - 'ajax' => false); - - // The leading identifier is the very first term in the user - // agent string, which is used to identify clients which are not - // Mosaic-based browsers. - $leadingIdentifier = Net_UserAgent_Detect::_getStaticProperty('leadingIdentifier'); - - // The full version of the client as supplied by the very first - // numbers in the user agent - $version = Net_UserAgent_Detect::_getStaticProperty('version'); - $version = 0; - - // The major part of the client version, which is the integer - // value of the version. - $majorVersion = Net_UserAgent_Detect::_getStaticProperty('majorVersion'); - $majorVersion = 0; - - // The minor part of the client version, which is the decimal - // parts of the version - $subVersion = Net_UserAgent_Detect::_getStaticProperty('subVersion'); - $subVersion = 0; - - // }}} - // detemine what user agent we are using - if (is_null($in_userAgent)) { - if (isset($_SERVER['HTTP_USER_AGENT'])) { - $userAgent = $_SERVER['HTTP_USER_AGENT']; - } - elseif (isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT'])) { - $userAgent = $GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT']; - } - else { - $userAgent = ''; - } - } - else { - $userAgent = $in_userAgent; - } - - // get the lowercase version for case-insensitive searching - $agt = strtolower($userAgent); - - // figure out what we need to look for - $detectOptions = array(NET_USERAGENT_DETECT_BROWSER, - NET_USERAGENT_DETECT_OS, NET_USERAGENT_DETECT_FEATURES, - NET_USERAGENT_DETECT_QUIRKS, NET_USERAGENT_DETECT_ACCEPT, - NET_USERAGENT_DETECT_ALL); - $detect = is_null($in_detect) ? NET_USERAGENT_DETECT_ALL : $in_detect; - settype($detect, 'array'); - foreach($detectOptions as $option) { - if (in_array($option, $detect)) { - $detectFlags[$option] = true; - } - else { - $detectFlags[$option] = false; - } - } - - // initialize the arrays of browsers and operating systems - - // Get the type and version of the client - if (preg_match(";^([[:alnum:]]+)[ /\(]*[[:alpha:]]*([\d]*)(\.[\d\.]*);", $agt, $matches)) { - list(, $leadingIdentifier, $majorVersion, $subVersion) = $matches; - } - - if (empty($leadingIdentifier)) { - $leadingIdentifier = 'Unknown'; - } - - $version = $majorVersion . $subVersion; - - // Browser type - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_BROWSER]) { - $browser['webdav'] = ($agt == 'microsoft data access internet publishing provider dav' || $agt == 'microsoft data access internet publishing provider protocol discovery'); - $browser['konq'] = (strpos($agt, 'konqueror') !== false || strpos($agt, 'safari') !== false ); - $browser['safari'] = (strpos($agt, 'safari') !== false); - $browser['chrome'] = (strpos($agt, 'chrome') !== false); - $browser['safari_mobile'] = (strpos($agt, 'safari') !== false && strpos($agt, 'mobile') !== false ); - $browser['text'] = strpos($agt, 'links') !== false || strpos($agt, 'lynx') !== false || strpos($agt, 'w3m') !== false; - $browser['ns'] = strpos($agt, 'mozilla') !== false && !(strpos($agt, 'spoofer') !== false) && !(strpos($agt, 'compatible') !== false) && !(strpos($agt, 'hotjava') !== false) && !(strpos($agt, 'opera') !== false) && !(strpos($agt, 'webtv') !== false) ? 1 : 0; - $browser['netgem'] = strpos($agt, 'netgem') !== false; - $browser['icab'] = strpos($agt, 'icab') !== false; - $browser['ns2'] = $browser['ns'] && $majorVersion == 2; - $browser['ns3'] = $browser['ns'] && $majorVersion == 3; - $browser['ns4'] = $browser['ns'] && $majorVersion == 4; - $browser['ns4up'] = $browser['ns'] && $majorVersion >= 4; - // determine if this is a Netscape Navigator - $browser['nav'] = $browser['belowns6'] = $browser['ns'] && $majorVersion < 5; - $browser['ns6'] = !$browser['konq'] && $browser['ns'] && $majorVersion == 5; - $browser['ns6up'] = $browser['ns6'] && $majorVersion >= 5; - $browser['gecko'] = strpos($agt, 'gecko') !== false && !$browser['konq']; - $browser['firefox'] = $browser['gecko'] && strpos($agt, 'firefox') !== false; - $browser['firefox0.x'] = $browser['firefox'] && strpos($agt, 'firefox/0.') !== false; - $browser['firefox1.x'] = $browser['firefox'] && strpos($agt, 'firefox/1.') !== false; - $browser['firefox1.5'] = $browser['firefox'] && strpos($agt, 'firefox/1.5') !== false; - $browser['firefox2.x'] = $browser['firefox'] && strpos($agt, 'firefox/2.') !== false; - $browser['firefox3.x'] = $browser['firefox'] && strpos($agt, 'firefox/3.') !== false; - $browser['ie'] = strpos($agt, 'msie') !== false && !(strpos($agt, 'opera') !== false); - $browser['ie3'] = $browser['ie'] && $majorVersion < 4; - $browser['ie4'] = $browser['ie'] && $majorVersion == 4 && (strpos($agt, 'msie 4') !== false); - $browser['ie4up'] = $browser['ie'] && !$browser['ie3']; - $browser['ie5'] = $browser['ie4up'] && (strpos($agt, 'msie 5') !== false); - $browser['ie5_5'] = $browser['ie4up'] && (strpos($agt, 'msie 5.5') !== false); - $browser['ie5up'] = $browser['ie4up'] && !$browser['ie3'] && !$browser['ie4']; - $browser['ie5_5up'] = $browser['ie5up'] && !$browser['ie5']; - $browser['ie6'] = strpos($agt, 'msie 6') !== false; - $browser['ie6up'] = $browser['ie5up'] && !$browser['ie5'] && !$browser['ie5_5']; - $browser['ie7'] = strpos($agt, 'msie 7') && !strpos($agt,'trident/4'); - $browser['ie7up'] = $browser['ie6up'] && !$browser['ie6']; - $browser['ie8tr'] = strpos($agt, 'msie 7') && strpos($agt,'trident/4') !== false; - $browser['ie8'] = strpos($agt, 'msie 8') !== false; - $browser['ie8up'] = $browser['ie7up'] && !$browser['ie7']; - $browser['belowie6']= $browser['ie'] && !$browser['ie6up']; - $browser['opera'] = strpos($agt, 'opera') !== false; - $browser['opera2'] = strpos($agt, 'opera 2') !== false || strpos($agt, 'opera/2') !== false; - $browser['opera3'] = strpos($agt, 'opera 3') !== false || strpos($agt, 'opera/3') !== false; - $browser['opera4'] = strpos($agt, 'opera 4') !== false || strpos($agt, 'opera/4') !== false; - $browser['opera5'] = strpos($agt, 'opera 5') !== false || strpos($agt, 'opera/5') !== false; - $browser['opera6'] = strpos($agt, 'opera 6') !== false || strpos($agt, 'opera/6') !== false; - $browser['opera7'] = strpos($agt, 'opera 7') !== false || strpos($agt, 'opera/7') !== false; - $browser['opera8'] = strpos($agt, 'opera 8') !== false || strpos($agt, 'opera/8') !== false; - $browser['opera9'] = strpos($agt, 'opera 9') !== false || strpos($agt, 'opera/9') !== false; - $browser['opera5up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4']; - $browser['opera6up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5']; - $browser['opera7up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6']; - $browser['opera8up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'] && !$browser['opera7']; - $browser['opera9up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'] && !$browser['opera7'] && !$browser['opera8']; - $browser['belowopera8'] = $browser['opera'] && !$browser['opera8up']; - $browser['aol'] = strpos($agt, 'aol') !== false; - $browser['aol3'] = $browser['aol'] && $browser['ie3']; - $browser['aol4'] = $browser['aol'] && $browser['ie4']; - $browser['aol5'] = strpos($agt, 'aol 5') !== false; - $browser['aol6'] = strpos($agt, 'aol 6') !== false; - $browser['aol7'] = strpos($agt, 'aol 7') !== false || strpos($agt, 'aol7') !== false; - $browser['aol8'] = strpos($agt, 'aol 8') !== false || strpos($agt, 'aol8') !== false; - $browser['webtv'] = strpos($agt, 'webtv') !== false; - $browser['aoltv'] = $browser['tvnavigator'] = strpos($agt, 'navio') !== false || strpos($agt, 'navio_aoltv') !== false; - $browser['hotjava'] = strpos($agt, 'hotjava') !== false; - $browser['hotjava3'] = $browser['hotjava'] && $majorVersion == 3; - $browser['hotjava3up'] = $browser['hotjava'] && $majorVersion >= 3; - $browser['iemobile'] = strpos($agt, 'iemobile') !== false || strpos($agt, 'windows ce') !== false && (strpos($agt, 'ppc') !== false || strpos($agt, 'smartphone') !== false); - } - - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || - ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_FEATURES])) { - // Javascript Check - if ($browser['ns2'] || $browser['ie3']) { - Net_UserAgent_Detect::setFeature('javascript', 1.0); - } - elseif ($browser['iemobile']) { - // no javascript - } - elseif ($browser['opera5up']) { - Net_UserAgent_Detect::setFeature('javascript', 1.3); - } - elseif ($browser['opera'] || $browser['ns3']) { - Net_UserAgent_Detect::setFeature('javascript', 1.1); - } - elseif (($browser['ns4'] && ($version <= 4.05)) || $browser['ie4']) { - Net_UserAgent_Detect::setFeature('javascript', 1.2); - } - elseif (($browser['ie5up'] && strpos($agt, 'mac') !== false) || $browser['konq']) { - Net_UserAgent_Detect::setFeature('javascript', 1.4); - } - // I can't believe IE6 still has javascript 1.3, what a shitty browser - elseif (($browser['ns4'] && ($version > 4.05)) || $browser['ie5up'] || $browser['hotjava3up']) { - Net_UserAgent_Detect::setFeature('javascript', 1.3); - } - elseif ($browser['ns6up'] || $browser['gecko'] || $browser['netgem']) { - Net_UserAgent_Detect::setFeature('javascript', 1.5); - } - } - - /** OS Check **/ - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_OS]) { - $os['win'] = strpos($agt, 'win') !== false || strpos($agt, '16bit') !== false; - $os['win95'] = strpos($agt, 'win95') !== false || strpos($agt, 'windows 95') !== false; - $os['win16'] = strpos($agt, 'win16') !== false || strpos($agt, '16bit') !== false || strpos($agt, 'windows 3.1') !== false || strpos($agt, 'windows 16-bit') !== false; - $os['win31'] = strpos($agt, 'windows 3.1') !== false || strpos($agt, 'win16') !== false || strpos($agt, 'windows 16-bit') !== false; - $os['winme'] = strpos($agt, 'win 9x 4.90') !== false; - $os['wince'] = strpos($agt, 'windows ce') !== false; - $os['win2k'] = strpos($agt, 'windows nt 5.0') !== false; - $os['winxp'] = strpos($agt, 'windows nt 5.1') !== false; - $os['win2003'] = strpos($agt, 'windows nt 5.2') !== false; - $os['win98'] = strpos($agt, 'win98') !== false || strpos($agt, 'windows 98') !== false; - $os['win9x'] = $os['win95'] || $os['win98']; - $os['winnt'] = (strpos($agt, 'winnt') !== false || strpos($agt, 'windows nt') !== false) && strpos($agt, 'windows nt 5') === false; - $os['win32'] = $os['win95'] || $os['winnt'] || $os['win98'] || $majorVersion >= 4 && strpos($agt, 'win32') !== false || strpos($agt, '32bit') !== false; - $os['vista'] = strpos($agt, 'windows nt 6.0') !== false; - $os['win7'] = strpos($agt, 'windows nt 6.1') !== false; - $os['os2'] = strpos($agt, 'os/2') !== false || strpos($agt, 'ibm-webexplorer') !== false; - $os['mac'] = strpos($agt, 'mac') !== false; - $os['mac68k'] = $os['mac'] && (strpos($agt, '68k') !== false || strpos($agt, '68000') !== false); - $os['macppc'] = $os['mac'] && (strpos($agt, 'ppc') !== false || strpos($agt, 'powerpc') !== false); - $os['sun'] = strpos($agt, 'sunos') !== false; - $os['sun4'] = strpos($agt, 'sunos 4') !== false; - $os['sun5'] = strpos($agt, 'sunos 5') !== false; - $os['suni86'] = $os['sun'] && strpos($agt, 'i86') !== false; - $os['irix'] = strpos($agt, 'irix') !== false; - $os['irix5'] = strpos($agt, 'irix 5') !== false; - $os['irix6'] = strpos($agt, 'irix 6') !== false || strpos($agt, 'irix6') !== false; - $os['hpux'] = strpos($agt, 'hp-ux') !== false; - $os['hpux9'] = $os['hpux'] && strpos($agt, '09.') !== false; - $os['hpux10'] = $os['hpux'] && strpos($agt, '10.') !== false; - $os['aix'] = strpos($agt, 'aix') !== false; - $os['aix1'] = strpos($agt, 'aix 1') !== false; - $os['aix2'] = strpos($agt, 'aix 2') !== false; - $os['aix3'] = strpos($agt, 'aix 3') !== false; - $os['aix4'] = strpos($agt, 'aix 4') !== false; - $os['linux'] = strpos($agt, 'inux') !== false; - $os['sco'] = strpos($agt, 'sco') !== false || strpos($agt, 'unix_sv') !== false; - $os['unixware'] = strpos($agt, 'unix_system_v') !== false; - $os['mpras'] = strpos($agt, 'ncr') !== false; - $os['reliant'] = strpos($agt, 'reliant') !== false; - $os['dec'] = strpos($agt, 'dec') !== false || strpos($agt, 'osf1') !== false || strpos($agt, 'dec_alpha') !== false || strpos($agt, 'alphaserver') !== false || strpos($agt, 'ultrix') !== false || strpos($agt, 'alphastation') !== false; - $os['sinix'] = strpos($agt, 'sinix') !== false; - $os['freebsd'] = strpos($agt, 'freebsd') !== false; - $os['bsd'] = strpos($agt, 'bsd') !== false; - $os['unix'] = strpos($agt, 'x11') !== false || strpos($agt, 'unix') !== false || $os['sun'] || $os['irix'] || $os['hpux'] || $os['sco'] || $os['unixware'] || $os['mpras'] || $os['reliant'] || $os['dec'] || $os['sinix'] || $os['aix'] || $os['linux'] || $os['bsd'] || $os['freebsd']; - $os['vms'] = strpos($agt, 'vax') !== false || strpos($agt, 'openvms') !== false; - } - - // Setup the quirks - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || - ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_QUIRKS])) { - if ($browser['konq']) { - Net_UserAgent_Detect::setQuirk('empty_file_input_value'); - } - - if ($browser['ie']) { - Net_UserAgent_Detect::setQuirk('cache_ssl_downloads'); - } - - if ($browser['ie6']) { - Net_UserAgent_Detect::setQuirk('scrollbar_in_way'); - } - - if ($browser['ie5']) { - Net_UserAgent_Detect::setQuirk('break_disposition_header'); - } - - if ($browser['ie7']) { - Net_UserAgent_Detect::setQuirk('popups_disabled'); - } - - if ($browser['ns6']) { - Net_UserAgent_Detect::setQuirk('popups_disabled'); - Net_UserAgent_Detect::setQuirk('must_cache_forms'); - } - - if ($browser['nav'] && $subVersion < .79) { - Net_UserAgent_Detect::setQuirk('nested_table_render_bug'); - } - } - - // Set features - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || - ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_FEATURES])) { - if ($browser['gecko']) { - preg_match(';gecko/([\d]+)\b;i', $agt, $matches); - Net_UserAgent_Detect::setFeature('gecko', $matches[1]); - } - - if ($browser['gecko'] || ($browser['ie5up'] && !$browser['iemobile']) || $browser['konq'] || $browser['opera8up'] && !$os['wince']) { - Net_UserAgent_Detect::setFeature('ajax'); - } - - if ($browser['ns6up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem']) { - Net_UserAgent_Detect::setFeature('dom'); - } - - if ($browser['ie4up'] || $browser['ns4up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem']) { - Net_UserAgent_Detect::setFeature('dhtml'); - } - - if ($browser['firefox1.5'] || $browser['firefox2.x'] || $browser['opera9up']) { - Net_UserAgent_Detect::setFeature('svg'); - } - - if ($browser['gecko'] || $browser['ns6up'] || $browser['ie5up'] || $browser['konq'] || $browser['opera7up']) { - Net_UserAgent_Detect::setFeature('css2'); - } - } - - if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_ACCEPT]) { - $mimetypes = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT'), 0, strpos(getenv('HTTP_ACCEPT') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY); - Net_UserAgent_Detect::setAcceptType((array) $mimetypes, 'mimetype'); - - $languages = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_LANGUAGE'), 0, strpos(getenv('HTTP_ACCEPT_LANGUAGE') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY); - if (empty($languages)) { - $languages = 'en'; - } - - Net_UserAgent_Detect::setAcceptType((array) $languages, 'language'); - - $encodings = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_ENCODING'), 0, strpos(getenv('HTTP_ACCEPT_ENCODING') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY); - Net_UserAgent_Detect::setAcceptType((array) $encodings, 'encoding'); - - $charsets = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_CHARSET'), 0, strpos(getenv('HTTP_ACCEPT_CHARSET') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY); - Net_UserAgent_Detect::setAcceptType((array) $charsets, 'charset'); - } - } - - // }}} - // {{{ setOption() - - /** - * Sets a class option. The available settings are: - * o 'userAgent' => The user agent string to detect (useful for - * checking a string manually). - * o 'detectOptions' => The level of checking to do. A single level - * or an array of options. Default is NET_USERAGENT_DETECT_ALL. - * - * @param string $in_field The option field (userAgent or detectOptions) - * @param mixed $in_value The value for the field - */ - function setOption($in_field, $in_value) - { - $options = Net_UserAgent_Detect::_getStaticProperty('options'); - $options[$in_field] = $in_value; - } - - // }}} - // {{{ isBrowser() - - /** - * Look up the provide browser flag and return a boolean value - * - * Given one of the flags listed in the properties, this function will return - * the value associated with that flag. - * - * @param string $in_match flag to lookup - * - * @access public - * @return boolean whether or not the browser satisfies this flag - */ - function isBrowser($in_match) - { - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - return isset($browser[strtolower($in_match)]) ? $browser[strtolower($in_match)] : false; - } - - // }}} - // {{{ getBrowser() - - /** - * Since simply returning the "browser" is somewhat ambiguous since there - * are different ways to classify the browser, this function works by taking - * an expect list and returning the string of the first match, so put the important - * ones first in the array. - * - * @param array $in_expectList the browser flags to search for - * - * @access public - * @return string first flag that matches - */ - function getBrowser($in_expectList) - { - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - foreach((array) $in_expectList as $brwsr) { - if (!empty($browser[strtolower($brwsr)])) { - return $brwsr; - } - } - } - - // }}} - // {{{ getBrowserString() - - /** - * This function returns the vendor string corresponding to the flag. - * - * Either use the default matches or pass in an associative array of - * flags and corresponding vendor strings. This function will find - * the highest version flag and return the vendor string corresponding - * to the appropriate flag. Be sure to pass in the flags in ascending order - * if you want a basic matches first, followed by more detailed matches. - * - * @param array $in_vendorStrings (optional) array of flags matched with vendor strings - * - * @access public - * @return string vendor string matches appropriate flag - */ - function getBrowserString($in_vendorStrings = null) - { - if (is_null($in_vendorStrings)) { - $in_vendorStrings = array ( - 'ie' => 'Microsoft Internet Explorer', - 'ie4up' => 'Microsoft Internet Explorer 4.x', - 'ie5up' => 'Microsoft Internet Explorer 5.x', - 'ie6up' => 'Microsoft Internet Explorer 6.x', - 'ie7up' => 'Microsoft Internet Explorer 7.x', - 'ie8up' => 'Microsoft Internet Explorer 8.x', - 'ie8tr' => 'Microsoft Internet Explorer 8.x (Compatibility View)', - 'opera4' => 'Opera 4.x', - 'opera5up' => 'Opera 5.x', - 'nav' => 'Netscape Navigator', - 'ns4' => 'Netscape 4.x', - 'ns6up' => 'Mozilla/Netscape 6.x', - 'firefox0.x' => 'Firefox 0.x', - 'firefox1.x' => 'Firefox 1.x', - 'firefox1.5' => 'Firefox 1.5', - 'firefox2.x' => 'Firefox 2.x', - 'firefox3.x' => 'Firefox 3.x', - 'konq' => 'Konqueror', - 'safari' => 'Safari', - 'safari_mobile' => 'Safari Mobile', - 'chrome' => 'Google Chrome', - 'netgem' => 'Netgem/iPlayer'); - } - - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - foreach((array) $in_vendorStrings as $flag => $string) { - if (!empty($browser[$flag])) { - $vendorString = $string; - } - } - - // if there are no matches just use the user agent leading idendifier (usually Mozilla) - if (!isset($vendorString)) { - $leadingIdentifier = Net_UserAgent_Detect::_getStaticProperty('leadingIdentifier'); - $vendorString = $leadingIdentifier; - } - - return $vendorString; - } - - // }}} - // {{{ isIE() - - /** - * Determine if the browser is an Internet Explorer browser - * - * @access public - * @return bool whether or not this browser is an ie browser - */ - function isIE() - { - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - return !empty($browser['ie']); - } - - // }}} - // {{{ isNavigator() - - /** - * Determine if the browser is a Netscape Navigator browser - * - * @access public - * @return bool whether or not this browser is a Netscape Navigator browser - */ - function isNavigator() - { - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - return !empty($browser['nav']); - } - - // }}} - // {{{ isNetscape() - - /** - * Determine if the browser is a Netscape or Mozilla browser - * - * Note that this function is not the same as isNavigator, since the - * new Mozilla browsers are still sponsered by Netscape, and hence are - * Netscape products, but not the original Navigators - * - * @access public - * @return bool whether or not this browser is a Netscape product - */ - function isNetscape() - { - Net_UserAgent_Detect::detect(); - $browser = Net_UserAgent_Detect::_getStaticProperty('browser'); - return !empty($browser['ns4up']); - } - - // }}} - // {{{ isOS() - - /** - * Look up the provide OS flag and return a boolean value - * - * Given one of the flags listed in the properties, this function will return - * the value associated with that flag for the operating system. - * - * @param string $in_match flag to lookup - * - * @access public - * @return boolean whether or not the OS satisfies this flag - */ - function isOS($in_match) - { - Net_UserAgent_Detect::detect(); - $os = Net_UserAgent_Detect::_getStaticProperty('os'); - return isset($os[strtolower($in_match)]) ? $os[strtolower($in_match)] : false; - } - - // }}} - // {{{ getOS() - - /** - * Since simply returning the "os" is somewhat ambiguous since there - * are different ways to classify the browser, this function works by taking - * an expect list and returning the string of the first match, so put the important - * ones first in the array. - * - * @access public - * @return string first flag that matches - */ - function getOS($in_expectList) - { - Net_UserAgent_Detect::detect(); - $os = Net_UserAgent_Detect::_getStaticProperty('os'); - foreach((array) $in_expectList as $expectOs) { - if (!empty($os[strtolower($expectOs)])) { - return $expectOs; - } - } - } - - // }}} - // {{{ getOSString() - - /** - * This function returns the os string corresponding to the flag. - * - * Either use the default matches or pass in an associative array of - * flags and corresponding os strings. This function will find - * the highest version flag and return the os string corresponding - * to the appropriate flag. Be sure to pass in the flags in ascending order - * if you want a basic matches first, followed by more detailed matches. - * - * @param array $in_osStrings (optional) array of flags matched with os strings - * - * @access public - * @return string os string matches appropriate flag - */ - function getOSString($in_osStrings = null) - { - if (is_null($in_osStrings)) { - $in_osStrings = array( - 'win' => 'Microsoft Windows', - 'wince' => 'Microsoft Windows CE', - 'win9x' => 'Microsoft Windows 9x', - 'winme' => 'Microsoft Windows Millenium', - 'win2k' => 'Microsoft Windows 2000', - 'winnt' => 'Microsoft Windows NT', - 'winxp' => 'Microsoft Windows XP', - 'win2003' => 'Microsoft Windows 2003', - 'vista' => 'Microsoft Windows Vista', - 'win7' => 'Microsoft Windows 7', - 'mac' => 'Macintosh', - 'unix' => 'Linux/Unix'); - } - - Net_UserAgent_Detect::detect(); - $osString = 'Unknown'; - - $os = Net_UserAgent_Detect::_getStaticProperty('os'); - foreach((array) $in_osStrings as $flag => $string) { - if (!empty($os[$flag])) { - $osString = $string; - } - } - - return $osString; - } - - // }}} - // {{{ setQuirk() - - /** - * Set a unique behavior for the current browser. - * - * Many client browsers do some really funky things, and this - * mechanism allows the coder to determine if an excepetion must - * be made with the current client. - * - * @param string $in_quirk The quirk to set - * @param string $in_hasQuirk (optional) Does the browser have the quirk? - * - * @access public - * @return void - */ - function setQuirk($in_quirk, $in_hasQuirk = true) - { - $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks'); - $hasQuirk = !empty($in_hasQuirk); - $quirks[strtolower($in_quirk)] = $hasQuirk; - } - - // }}} - // {{{ hasQuirk() - - /** - * Check a unique behavior for the current browser. - * - * Many client browsers do some really funky things, and this - * mechanism allows the coder to determine if an excepetion must - * be made with the current client. - * - * @param string $in_quirk The quirk to detect - * - * @access public - * @return bool whether or not browser has this quirk - */ - function hasQuirk($in_quirk) - { - return (bool) Net_UserAgent_Detect::getQuirk($in_quirk); - } - - // }}} - // {{{ getQuirk() - - /** - * Get the unique behavior for the current browser. - * - * Many client browsers do some really funky things, and this - * mechanism allows the coder to determine if an excepetion must - * be made with the current client. - * - * @param string $in_quirk The quirk to detect - * - * @access public - * @return string value of the quirk, in this case usually a boolean - */ - function getQuirk($in_quirk) - { - Net_UserAgent_Detect::detect(); - $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks'); - return isset($quirks[strtolower($in_quirk)]) ? $quirks[strtolower($in_quirk)] : null; - } - - // }}} - // {{{ setFeature() - - /** - * Set capabilities for the current browser. - * - * Since the capabilities of client browsers vary widly, this interface - * helps keep track of the core features of a client, such as if the client - * supports dhtml, dom, javascript, etc. - * - * @param string $in_feature The feature to set - * @param string $in_hasFeature (optional) Does the browser have the feature? - * - * @access public - * @return void - */ - function setFeature($in_feature, $in_hasFeature = true) - { - $features = Net_UserAgent_Detect::_getStaticProperty('features'); - $features[strtolower($in_feature)] = $in_hasFeature; - } - - // }}} - // {{{ hasFeature() - - /** - * Check the capabilities for the current browser. - * - * Since the capabilities of client browsers vary widly, this interface - * helps keep track of the core features of a client, such as if the client - * supports dhtml, dom, javascript, etc. - * - * @param string $in_feature The feature to detect - * - * @access public - * @return bool whether or not the current client has this feature - */ - function hasFeature($in_feature) - { - return (bool) Net_UserAgent_Detect::getFeature($in_feature); - } - - // }}} - // {{{ getFeature() - - /** - * Get the capabilities for the current browser. - * - * Since the capabilities of client browsers vary widly, this interface - * helps keep track of the core features of a client, such as if the client - * supports dhtml, dom, javascript, etc. - * - * @param string $in_feature The feature to detect - * - * @access public - * @return string value of the feature requested - */ - function getFeature($in_feature) - { - Net_UserAgent_Detect::detect(); - $features = Net_UserAgent_Detect::_getStaticProperty('features'); - return isset($features[strtolower($in_feature)]) ? $features[strtolower($in_feature)] : null; - } - - // }}} - // {{{ getAcceptType() - - /** - * Retrive the accept type for the current browser. - * - * To keep track of the mime-types, languages, charsets and encodings - * that each browser accepts we use associative arrays for each type. - * This function works like getBrowser() as it takes an expect list - * and returns the first match. For instance, to find the language - * you would pass in your allowed languages and see if any of the - * languages set in the browser match. - * - * @param string $in_expectList values to check - * @param string $in_type type of accept - * - * @access public - * @return string the first matched value - */ - function getAcceptType($in_expectList, $in_type) - { - Net_UserAgent_Detect::detect(); - $type = strtolower($in_type); - - if ($type == 'mimetype' || $type == 'language' || $type == 'charset' || $type == 'encoding') { - $typeArray = Net_UserAgent_Detect::_getStaticProperty($type); - foreach((array) $in_expectList as $match) { - if (!empty($typeArray[$match])) { - return $match; - } - } - } - - return null; - } - - // }}} - // {{{ setAcceptType() - - /** - * Set the accept types for the current browser. - * - * To keep track of the mime-types, languages, charsets and encodings - * that each browser accepts we use associative arrays for each type. - * This function takes and array of accepted values for the type and - * records them for retrieval. - * - * @param array $in_values values of the accept type - * @param string $in_type type of accept - * - * @access public - * @return void - */ - function setAcceptType($in_values, $in_type) - { - $type = strtolower($in_type); - - if ($type == 'mimetype' || $type == 'language' || $type == 'charset' || $type == 'encoding') { - $typeArray = Net_UserAgent_Detect::_getStaticProperty($type); - foreach((array) $in_values as $value) { - $typeArray[$value] = true; - } - } - } - - // }}} - // {{{ hasAcceptType() - - /** - * Check the accept types for the current browser. - * - * To keep track of the mime-types, languages, charsets and encodings - * that each browser accepts we use associative arrays for each type. - * This function checks the array for the given type and determines if - * the browser accepts it. - * - * @param string $in_value values to check - * @param string $in_type type of accept - * - * @access public - * @return bool whether or not the value is accept for this type - */ - function hasAcceptType($in_value, $in_type) - { - return (bool) Net_UserAgent_Detect::getAcceptType((array) $in_value, $in_type); - } - - // }}} - // {{{ getUserAgent() - - /** - * Return the user agent string that is being worked on - * - * @access public - * @return string user agent - */ - function getUserAgent() - { - Net_UserAgent_Detect::detect(); - $userAgent = Net_UserAgent_Detect::_getStaticProperty('userAgent'); - return $userAgent; - } - - // }}} - // {{{ _getStaticProperty() - - /** - * Copy of getStaticProperty() from PEAR.php to avoid having to - * include PEAR.php - * - * @access private - * @param string $var The variable to retrieve. - * @return mixed A reference to the variable. If not set it will be - * auto initialised to NULL. - */ - function &_getStaticProperty($var) - { - static $properties; - return $properties[$var]; - } - - // }}} -} -?> diff --git a/civicrm/packages/Net/UserAgent/Detect/APC.php b/civicrm/packages/Net/UserAgent/Detect/APC.php deleted file mode 100644 index 2844fe338a..0000000000 --- a/civicrm/packages/Net/UserAgent/Detect/APC.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php -/** - * Net_UserAgent_Detect_APC.php - * - * PHP version 4.2 - * - * Copyright (c) 1997-2003 The PHP Group - * - * This source file is subject to version 2.0 of the PHP license, - * that is bundled with this package in the file LICENSE, and is - * available at through the world-wide-web at - * http://www.php.net/license/2_02.txt. - * If you did not receive a copy of the PHP license and are unable to - * obtain it through the world-wide-web, please send a note to - * license@php.net so we can mail you a copy immediately. - * - * @category Net - * @package Net_UserAgent - * @author Lucas Nealan <lucas@facebook.com> - * @license http://www.php.net/license/2_02.txt PHP 2.0 Licence - * @version CVS: $Id: APC.php,v 1.3 2009/06/08 04:49:23 clockwerx Exp $ - * @link http://pear.php.net/package/Net_UserAgent_Detect - */ - -require_once 'Net/UserAgent/Detect.php'; - -/** - * Net_UserAgent_Detect_APC - * - * PHP version 4.2 - * - * Copyright (c) 1997-2003 The PHP Group - * - * This source file is subject to version 2.0 of the PHP license, - * that is bundled with this package in the file LICENSE, and is - * available at through the world-wide-web at - * http://www.php.net/license/2_02.txt. - * If you did not receive a copy of the PHP license and are unable to - * obtain it through the world-wide-web, please send a note to - * license@php.net so we can mail you a copy immediately. - * - * @category Net - * @package Net_UserAgent - * @author Lucas Nealan <lucas@facebook.com> - * @license http://www.php.net/license/2_02.txt PHP 2.0 Licence - * @link http://pear.php.net/package/Net_UserAgent_Detect - */ -class Net_UserAgent_Detect_APC extends Net_UserAgent_Detect -{ - var $key = ''; - - /** - * Class constructor - * - * @param string $in_userAgent (optional) User agent override. - * @param mixed $in_detect (optional) The level of checking to do. - * @param mixed $ua_cache_window Unknown - */ - function __construct($in_userAgent = null, $in_detect = null, - $ua_cache_window = 600) - { - $data = ''; - $restored = false; - - // don't cache after time period - $ua_cache_timeout = apc_fetch('useragent:cache_timeout'); - - if ($ua_cache_window > 0) { - if (!$ua_cache_timeout) { - // check apc uptime and disable after x mins - $apc_data = apc_cache_info('file', true); - - if (isset($apc_data['start_time'])) { - $uptime = $apc_data['start_time']; - - // timeout and disable after 10 minutes of uptime - if (time() - $uptime > $ua_cache_window) { - apc_store('useragent:cache_timeout', true); - $ua_cache_timeout = true; // don't cache this one either - } - } - } - - if (!$this->key) { - $key_flags = ''; - if ($in_detect !== null) { - $key_flags = implode('-', $in_detect); - } - $this->key = 'useragent:'.md5($in_userAgent.$key_flags); - } - - if ($data = apc_fetch($this->key)) { - $success = null; - $data = unserialize($data); - - if ($data) { - $restored = $this->cacheRestore($data); - } - } - } - - if (!$data) { - $this->detect($in_userAgent, $in_detect); - - if ($ua_cache_window > 0 && !$ua_cache_timeout) { - $this->cacheSave(); - } - } - } - - /** - * To be used in place of the contructor to return only open instance. - * - * @param string $in_userAgent (optional) User agent override. - * @param mixed $in_detect (optional) The level of checking to do. - * - * @access public - * @return object Net_UserAgent_Detect instance - */ - function &singleton($in_userAgent = null, $in_detect = null) - { - static $instance; - - if (!isset($instance)) { - $instance = new Net_UserAgent_Detect_APC($in_userAgent, $in_detect); - } - - return $instance; - } - - /** - * Restore cached items - * - * @param mixed[] $cache An array of items to restore - * - * @return bool - */ - function cacheRestore($cache) - { - if (is_array($cache)) { - foreach ($cache as $prop => $value) { - $ptr = Net_UserAgent_Detect::_getStaticProperty($prop); - $ptr = $value; - } - - return true; - } - - return false; - } - - /** - * Store items in APC - * - * @return void - */ - function cacheSave() - { - if ($this->key) { - $items = array('browser', - 'features', - 'leadingIdentifier', - 'majorVersion', - 'options', - 'os', - 'quirks', - 'subVersion', - 'userAgent', - 'version'); - - $data = array(); - foreach ($items as $item) { - $data[$item] = Net_UserAgent_Detect::_getStaticProperty($item); - } - - apc_store($this->key, serialize($data)); - } - } -} -?> diff --git a/civicrm/packages/Structures/Graph.php b/civicrm/packages/Structures/Graph.php deleted file mode 100644 index 2d3ff92834..0000000000 --- a/civicrm/packages/Structures/Graph.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ -// +-----------------------------------------------------------------------------+ -// | Copyright (c) 2003 Sérgio Gonçalves Carvalho | -// +-----------------------------------------------------------------------------+ -// | This file is part of Structures_Graph. | -// | | -// | Structures_Graph is free software; you can redistribute it and/or modify | -// | it under the terms of the GNU Lesser General Public License as published by | -// | the Free Software Foundation; either version 2.1 of the License, or | -// | (at your option) any later version. | -// | | -// | Structures_Graph is distributed in the hope that it will be useful, | -// | but WITHOUT ANY WARRANTY; without even the implied warranty of | -// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -// | GNU Lesser General Public License for more details. | -// | | -// | You should have received a copy of the GNU Lesser General Public License | -// | along with Structures_Graph; if not, write to the Free Software | -// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | -// | 02111-1307 USA | -// +-----------------------------------------------------------------------------+ -// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com> | -// +-----------------------------------------------------------------------------+ -// -/** - * The Graph.php file contains the definition of the Structures_Graph class - * - * @see Structures_Graph - * @package Structures_Graph - */ - -/* dependencies {{{ */ -/** PEAR base classes */ -require_once 'PEAR.php'; -/** Graph Node */ -require_once 'Structures/Graph/Node.php'; -/* }}} */ - -define('STRUCTURES_GRAPH_ERROR_GENERIC', 100); - -/* class Structures_Graph {{{ */ -/** - * The Structures_Graph class represents a graph data structure. - * - * A Graph is a data structure composed by a set of nodes, connected by arcs. - * Graphs may either be directed or undirected. In a directed graph, arcs are - * directional, and can be traveled only one way. In an undirected graph, arcs - * are bidirectional, and can be traveled both ways. - * - * @author Sérgio Carvalho <sergio.carvalho@portugalmail.com> - * @copyright (c) 2004 by Sérgio Carvalho - * @package Structures_Graph - */ -/* }}} */ -class Structures_Graph { - /* fields {{{ */ - /** - * @access private - */ - var $_nodes = array(); - /** - * @access private - */ - var $_directed = false; - /* }}} */ - - /* Constructor {{{ */ - /** - * - * Constructor - * - * @param boolean Set to true if the graph is directed. Set to false if it is not directed. (Optional, defaults to true) - * @access public - */ - function __construct($directed = true) { - $this->_directed = $directed; - } - /* }}} */ - - /* isDirected {{{ */ - /** - * - * Return true if a graph is directed - * - * @return boolean true if the graph is directed - * @access public - */ - function isDirected() { - return (boolean) $this->_directed; - } - /* }}} */ - - /* addNode {{{ */ - /** - * - * Add a Node to the Graph - * - * @param Structures_Graph_Node The node to be added. - * @access public - */ - function addNode(&$newNode) { - // We only add nodes - if (!is_a($newNode, 'Structures_Graph_Node')) return Pear::raiseError('Structures_Graph::addNode received an object that is not a Structures_Graph_Node', STRUCTURES_GRAPH_ERROR_GENERIC); - // Graphs are node *sets*, so duplicates are forbidden. We allow nodes that are exactly equal, but disallow equal references. - foreach($this->_nodes as $key => $node) { - /* - ZE1 equality operators choke on the recursive cycle introduced by the _graph field in the Node object. - So, we'll check references the hard way (change $this->_nodes[$key] and check if the change reflects in - $node) - */ - $savedData = $this->_nodes[$key]; - $referenceIsEqualFlag = false; - $this->_nodes[$key] = true; - if ($node === true) { - $this->_nodes[$key] = false; - if ($node === false) $referenceIsEqualFlag = true; - } - $this->_nodes[$key] = $savedData; - if ($referenceIsEqualFlag) return Pear::raiseError('Structures_Graph::addNode received an object that is a duplicate for this dataset', STRUCTURES_GRAPH_ERROR_GENERIC); - } - $this->_nodes[] =& $newNode; - $newNode->setGraph($this); - } - /* }}} */ - - /* removeNode (unimplemented) {{{ */ - /** - * - * Remove a Node from the Graph - * - * @todo This is unimplemented - * @param Structures_Graph_Node The node to be removed from the graph - * @access public - */ - function removeNode(&$node) { - } - /* }}} */ - - /* getNodes {{{ */ - /** - * - * Return the node set, in no particular order. For ordered node sets, use a Graph Manipulator insted. - * - * @access public - * @see Structures_Graph_Manipulator_TopologicalSorter - * @return array The set of nodes in this graph - */ - function &getNodes() { - return $this->_nodes; - } - /* }}} */ -} -?> diff --git a/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php b/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php deleted file mode 100644 index fc1ba92f6a..0000000000 --- a/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php +++ /dev/null @@ -1,136 +0,0 @@ -<?php -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ -// +-----------------------------------------------------------------------------+ -// | Copyright (c) 2003 Sérgio Gonçalves Carvalho | -// +-----------------------------------------------------------------------------+ -// | This file is part of Structures_Graph. | -// | | -// | Structures_Graph is free software; you can redistribute it and/or modify | -// | it under the terms of the GNU Lesser General Public License as published by | -// | the Free Software Foundation; either version 2.1 of the License, or | -// | (at your option) any later version. | -// | | -// | Structures_Graph is distributed in the hope that it will be useful, | -// | but WITHOUT ANY WARRANTY; without even the implied warranty of | -// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -// | GNU Lesser General Public License for more details. | -// | | -// | You should have received a copy of the GNU Lesser General Public License | -// | along with Structures_Graph; if not, write to the Free Software | -// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | -// | 02111-1307 USA | -// +-----------------------------------------------------------------------------+ -// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com> | -// +-----------------------------------------------------------------------------+ -// -/** - * This file contains the definition of the Structures_Graph_Manipulator_AcyclicTest graph manipulator. - * - * @see Structures_Graph_Manipulator_AcyclicTest - * @package Structures_Graph - */ - -/* dependencies {{{ */ -/** */ -require_once 'PEAR.php'; -/** */ -require_once 'Structures/Graph.php'; -/** */ -require_once 'Structures/Graph/Node.php'; -/* }}} */ - -/* class Structures_Graph_Manipulator_AcyclicTest {{{ */ -/** - * The Structures_Graph_Manipulator_AcyclicTest is a graph manipulator - * which tests whether a graph contains a cycle. - * - * The definition of an acyclic graph used in this manipulator is that of a - * DAG. The graph must be directed, or else it is considered cyclic, even when - * there are no arcs. - * - * @author Sérgio Carvalho <sergio.carvalho@portugalmail.com> - * @copyright (c) 2004 by Sérgio Carvalho - * @package Structures_Graph - */ -class Structures_Graph_Manipulator_AcyclicTest { - /* _nonVisitedInDegree {{{ */ - /** - * - * This is a variant of Structures_Graph::inDegree which does - * not count nodes marked as visited. - * - * @access private - * @return integer Number of non-visited nodes that link to this one - */ - function _nonVisitedInDegree(&$node) { - $result = 0; - $graphNodes =& $node->_graph->getNodes(); - foreach (array_keys($graphNodes) as $key) { - if ((!$graphNodes[$key]->getMetadata('acyclic-test-visited')) && $graphNodes[$key]->connectsTo($node)) $result++; - } - return $result; - - } - /* }}} */ - - /* _isAcyclic {{{ */ - /** - * @access private - */ - function _isAcyclic(&$graph) { - // Mark every node as not visited - $nodes =& $graph->getNodes(); - $nodeKeys = array_keys($nodes); - $refGenerator = array(); - foreach($nodeKeys as $key) { - $refGenerator[] = false; - $nodes[$key]->setMetadata('acyclic-test-visited', $refGenerator[sizeof($refGenerator) - 1]); - } - - // Iteratively peel off leaf nodes - do { - // Find out which nodes are leafs (excluding visited nodes) - $leafNodes = array(); - foreach($nodeKeys as $key) { - if ((!$nodes[$key]->getMetadata('acyclic-test-visited')) && Structures_Graph_Manipulator_AcyclicTest::_nonVisitedInDegree($nodes[$key]) == 0) { - $leafNodes[] =& $nodes[$key]; - } - } - // Mark leafs as visited - for ($i=sizeof($leafNodes) - 1; $i>=0; $i--) { - $visited =& $leafNodes[$i]->getMetadata('acyclic-test-visited'); - $visited = true; - $leafNodes[$i]->setMetadata('acyclic-test-visited', $visited); - } - } while (sizeof($leafNodes) > 0); - - // If graph is a DAG, there should be no non-visited nodes. Let's try to prove otherwise - $result = true; - foreach($nodeKeys as $key) if (!$nodes[$key]->getMetadata('acyclic-test-visited')) $result = false; - - // Cleanup visited marks - foreach($nodeKeys as $key) $nodes[$key]->unsetMetadata('acyclic-test-visited'); - - return $result; - } - /* }}} */ - - /* isAcyclic {{{ */ - /** - * - * isAcyclic returns true if a graph contains no cycles, false otherwise. - * - * @return boolean true iff graph is acyclic - * @access public - */ - function isAcyclic(&$graph) { - // We only test graphs - if (!is_a($graph, 'Structures_Graph')) return Pear::raiseError('Structures_Graph_Manipulator_AcyclicTest::isAcyclic received an object that is not a Structures_Graph', STRUCTURES_GRAPH_ERROR_GENERIC); - if (!$graph->isDirected()) return false; // Only directed graphs may be acyclic - - return Structures_Graph_Manipulator_AcyclicTest::_isAcyclic($graph); - } - /* }}} */ -} -/* }}} */ -?> diff --git a/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php b/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php deleted file mode 100644 index 98a9fa0b60..0000000000 --- a/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php +++ /dev/null @@ -1,153 +0,0 @@ -<?php -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ -// +-----------------------------------------------------------------------------+ -// | Copyright (c) 2003 Sérgio Gonçalves Carvalho | -// +-----------------------------------------------------------------------------+ -// | This file is part of Structures_Graph. | -// | | -// | Structures_Graph is free software; you can redistribute it and/or modify | -// | it under the terms of the GNU Lesser General Public License as published by | -// | the Free Software Foundation; either version 2.1 of the License, or | -// | (at your option) any later version. | -// | | -// | Structures_Graph is distributed in the hope that it will be useful, | -// | but WITHOUT ANY WARRANTY; without even the implied warranty of | -// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -// | GNU Lesser General Public License for more details. | -// | | -// | You should have received a copy of the GNU Lesser General Public License | -// | along with Structures_Graph; if not, write to the Free Software | -// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | -// | 02111-1307 USA | -// +-----------------------------------------------------------------------------+ -// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com> | -// +-----------------------------------------------------------------------------+ -// -/** - * This file contains the definition of the Structures_Graph_Manipulator_TopologicalSorter class. - * - * @see Structures_Graph_Manipulator_TopologicalSorter - * @package Structures_Graph - */ - -/* dependencies {{{ */ -/** */ -require_once 'PEAR.php'; -/** */ -require_once 'Structures/Graph.php'; -/** */ -require_once 'Structures/Graph/Node.php'; -/** */ -require_once 'Structures/Graph/Manipulator/AcyclicTest.php'; -/* }}} */ - -/* class Structures_Graph_Manipulator_TopologicalSorter {{{ */ -/** - * The Structures_Graph_Manipulator_TopologicalSorter is a manipulator - * which is able to return the set of nodes in a graph, sorted by topological - * order. - * - * A graph may only be sorted topologically iff it's a DAG. You can test it - * with the Structures_Graph_Manipulator_AcyclicTest. - * - * @author Sérgio Carvalho <sergio.carvalho@portugalmail.com> - * @copyright (c) 2004 by Sérgio Carvalho - * @see Structures_Graph_Manipulator_AcyclicTest - * @package Structures_Graph - */ -class Structures_Graph_Manipulator_TopologicalSorter { - /* _nonVisitedInDegree {{{ */ - /** - * - * This is a variant of Structures_Graph::inDegree which does - * not count nodes marked as visited. - * - * @access private - * @return integer Number of non-visited nodes that link to this one - */ - function _nonVisitedInDegree(&$node) { - $result = 0; - $graphNodes =& $node->_graph->getNodes(); - foreach (array_keys($graphNodes) as $key) { - if ((!$graphNodes[$key]->getMetadata('topological-sort-visited')) && $graphNodes[$key]->connectsTo($node)) $result++; - } - return $result; - - } - /* }}} */ - - /* _sort {{{ */ - /** - * @access private - */ - function _sort(&$graph) { - // Mark every node as not visited - $nodes =& $graph->getNodes(); - $nodeKeys = array_keys($nodes); - $refGenerator = array(); - foreach($nodeKeys as $key) { - $refGenerator[] = false; - $nodes[$key]->setMetadata('topological-sort-visited', $refGenerator[sizeof($refGenerator) - 1]); - } - - // Iteratively peel off leaf nodes - $topologicalLevel = 0; - do { - // Find out which nodes are leafs (excluding visited nodes) - $leafNodes = array(); - foreach($nodeKeys as $key) { - if ((!$nodes[$key]->getMetadata('topological-sort-visited')) && Structures_Graph_Manipulator_TopologicalSorter::_nonVisitedInDegree($nodes[$key]) == 0) { - $leafNodes[] =& $nodes[$key]; - } - } - // Mark leafs as visited - $refGenerator[] = $topologicalLevel; - for ($i=sizeof($leafNodes) - 1; $i>=0; $i--) { - $visited =& $leafNodes[$i]->getMetadata('topological-sort-visited'); - $visited = true; - $leafNodes[$i]->setMetadata('topological-sort-visited', $visited); - $leafNodes[$i]->setMetadata('topological-sort-level', $refGenerator[sizeof($refGenerator) - 1]); - } - $topologicalLevel++; - } while (sizeof($leafNodes) > 0); - - // Cleanup visited marks - foreach($nodeKeys as $key) $nodes[$key]->unsetMetadata('topological-sort-visited'); - } - /* }}} */ - - /* sort {{{ */ - /** - * - * sort returns the graph's nodes, sorted by topological order. - * - * The result is an array with - * as many entries as topological levels. Each entry in this array is an array of nodes within - * the given topological level. - * - * @return array The graph's nodes, sorted by topological order. - * @access public - */ - function sort(&$graph) { - // We only sort graphs - if (!is_a($graph, 'Structures_Graph')) return Pear::raiseError('Structures_Graph_Manipulator_TopologicalSorter::sort received an object that is not a Structures_Graph', STRUCTURES_GRAPH_ERROR_GENERIC); - if (!Structures_Graph_Manipulator_AcyclicTest::isAcyclic($graph)) return Pear::raiseError('Structures_Graph_Manipulator_TopologicalSorter::sort received an graph that has cycles', STRUCTURES_GRAPH_ERROR_GENERIC); - - Structures_Graph_Manipulator_TopologicalSorter::_sort($graph); - $result = array(); - - // Fill out result array - $nodes =& $graph->getNodes(); - $nodeKeys = array_keys($nodes); - foreach($nodeKeys as $key) { - if (!array_key_exists($nodes[$key]->getMetadata('topological-sort-level'), $result)) $result[$nodes[$key]->getMetadata('topological-sort-level')] = array(); - $result[$nodes[$key]->getMetadata('topological-sort-level')][] =& $nodes[$key]; - $nodes[$key]->unsetMetadata('topological-sort-level'); - } - - return $result; - } - /* }}} */ -} -/* }}} */ -?> diff --git a/civicrm/packages/Structures/Graph/Node.php b/civicrm/packages/Structures/Graph/Node.php deleted file mode 100644 index e754175d76..0000000000 --- a/civicrm/packages/Structures/Graph/Node.php +++ /dev/null @@ -1,338 +0,0 @@ -<?php -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ -// +-----------------------------------------------------------------------------+ -// | Copyright (c) 2003 Sérgio Gonçalves Carvalho | -// +-----------------------------------------------------------------------------+ -// | This file is part of Structures_Graph. | -// | | -// | Structures_Graph is free software; you can redistribute it and/or modify | -// | it under the terms of the GNU Lesser General Public License as published by | -// | the Free Software Foundation; either version 2.1 of the License, or | -// | (at your option) any later version. | -// | | -// | Structures_Graph is distributed in the hope that it will be useful, | -// | but WITHOUT ANY WARRANTY; without even the implied warranty of | -// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -// | GNU Lesser General Public License for more details. | -// | | -// | You should have received a copy of the GNU Lesser General Public License | -// | along with Structures_Graph; if not, write to the Free Software | -// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | -// | 02111-1307 USA | -// +-----------------------------------------------------------------------------+ -// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com> | -// +-----------------------------------------------------------------------------+ -// -/** - * This file contains the definition of the Structures_Graph_Node class - * - * @see Structures_Graph_Node - * @package Structures_Graph - */ - -/* dependencies {{{ */ -/** */ -require_once 'PEAR.php'; -/** */ -require_once 'Structures/Graph.php'; -/* }}} */ - -/* class Structures_Graph_Node {{{ */ -/** - * The Structures_Graph_Node class represents a Node that can be member of a - * graph node set. - * - * A graph node can contain data. Under this API, the node contains default data, - * and key index data. It behaves, thus, both as a regular data node, and as a - * dictionary (or associative array) node. - * - * Regular data is accessed via getData and setData. Key indexed data is accessed - * via getMetadata and setMetadata. - * - * @author Sérgio Carvalho <sergio.carvalho@portugalmail.com> - * @copyright (c) 2004 by Sérgio Carvalho - * @package Structures_Graph - */ -/* }}} */ -class Structures_Graph_Node { - /* fields {{{ */ - /** - * @access private - */ - var $_data = null; - /** @access private */ - var $_metadata = array(); - /** @access private */ - var $_arcs = array(); - /** @access private */ - var $_graph = null; - /* }}} */ - - /* Constructor {{{ */ - /** - * - * Constructor - * - * @access public - */ - function __construct() { - } - /* }}} */ - - /* getGraph {{{ */ - /** - * - * Node graph getter - * - * @return Structures_Graph Graph where node is stored - * @access public - */ - function &getGraph() { - return $this->_graph; - } - /* }}} */ - - /* setGraph {{{ */ - /** - * - * Node graph setter. This method should not be called directly. Use Graph::addNode instead. - * - * @param Structures_Graph Set the graph for this node. - * @see Structures_Graph::addNode() - * @access public - */ - function setGraph(&$graph) { - $this->_graph =& $graph; - } - /* }}} */ - - /* getData {{{ */ - /** - * - * Node data getter. - * - * Each graph node can contain a reference to one variable. This is the getter for that reference. - * - * @return mixed Data stored in node - * @access public - */ - function &getData() { - return $this->_data; - } - /* }}} */ - - /* setData {{{ */ - /** - * - * Node data setter - * - * Each graph node can contain a reference to one variable. This is the setter for that reference. - * - * @return mixed Data to store in node - * @access public - */ - function setData($data) { - $this->_data =& $data; - } - /* }}} */ - - /* metadataKeyExists {{{ */ - /** - * - * Test for existence of metadata under a given key. - * - * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an - * associative array or in a dictionary. This method tests whether a given metadata key exists for this node. - * - * @param string Key to test - * @return boolean - * @access public - */ - function metadataKeyExists($key) { - return array_key_exists($key, $this->_metadata); - } - /* }}} */ - - /* getMetadata {{{ */ - /** - * - * Node metadata getter - * - * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an - * associative array or in a dictionary. This method gets the data under the given key. If the key does - * not exist, an error will be thrown, so testing using metadataKeyExists might be needed. - * - * @param string Key - * @param boolean nullIfNonexistent (defaults to false). - * @return mixed Metadata Data stored in node under given key - * @see metadataKeyExists - * @access public - */ - function &getMetadata($key, $nullIfNonexistent = false) { - if (array_key_exists($key, $this->_metadata)) { - return $this->_metadata[$key]; - } else { - if ($nullIfNonexistent) { - $a = null; - return $a; - } else { - $a = Pear::raiseError('Structures_Graph_Node::getMetadata: Requested key does not exist', STRUCTURES_GRAPH_ERROR_GENERIC); - return $a; - } - } - } - /* }}} */ - - /* unsetMetadata {{{ */ - /** - * - * Delete metadata by key - * - * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an - * associative array or in a dictionary. This method removes any data that might be stored under the provided key. - * If the key does not exist, no error is thrown, so it is safe using this method without testing for key existence. - * - * @param string Key - * @access public - */ - function unsetMetadata($key) { - if (array_key_exists($key, $this->_metadata)) unset($this->_metadata[$key]); - } - /* }}} */ - - /* setMetadata {{{ */ - /** - * - * Node metadata setter - * - * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an - * associative array or in a dictionary. This method stores data under the given key. If the key already exists, - * previously stored data is discarded. - * - * @param string Key - * @param mixed Data - * @access public - */ - function setMetadata($key, $data) { - $this->_metadata[$key] =& $data; - } - /* }}} */ - - /* _connectTo {{{ */ - /** @access private */ - function _connectTo(&$destinationNode) { - $this->_arcs[] =& $destinationNode; - } - /* }}} */ - - /* connectTo {{{ */ - /** - * - * Connect this node to another one. - * - * If the graph is not directed, the reverse arc, connecting $destinationNode to $this is also created. - * - * @param Structures_Graph Node to connect to - * @access public - */ - function connectTo(&$destinationNode) { - // We only connect to nodes - if (!is_a($destinationNode, 'Structures_Graph_Node')) return Pear::raiseError('Structures_Graph_Node::connectTo received an object that is not a Structures_Graph_Node', STRUCTURES_GRAPH_ERROR_GENERIC); - // Nodes must already be in graphs to be connected - if ($this->_graph == null) return Pear::raiseError('Structures_Graph_Node::connectTo Tried to connect a node that is not in a graph', STRUCTURES_GRAPH_ERROR_GENERIC); - if ($destinationNode->getGraph() == null) return Pear::raiseError('Structures_Graph_Node::connectTo Tried to connect to a node that is not in a graph', STRUCTURES_GRAPH_ERROR_GENERIC); - // Connect here - $this->_connectTo($destinationNode); - // If graph is undirected, connect back - if (!$this->_graph->isDirected()) { - $destinationNode->_connectTo($this); - } - } - /* }}} */ - - /* getNeighbours {{{ */ - /** - * - * Return nodes connected to this one. - * - * @return array Array of nodes - * @access public - */ - function getNeighbours() { - return $this->_arcs; - } - /* }}} */ - - /* connectsTo {{{ */ - /** - * - * Test wether this node has an arc to the target node - * - * @return boolean True if the two nodes are connected - * @access public - */ - function connectsTo(&$target) { - $copy = $target; - $arcKeys = array_keys($this->_arcs); - foreach($arcKeys as $key) { - /* ZE1 chokes on this expression: - if ($target === $arc) return true; - so, we'll use more convoluted stuff - */ - $arc =& $this->_arcs[$key]; - $target = true; - if ($arc === true) { - $target = false; - if ($arc === false) { - $target = $copy; - return true; - } - } - } - $target = $copy; - return false; - } - /* }}} */ - - /* inDegree {{{ */ - /** - * - * Calculate the in degree of the node. - * - * The indegree for a node is the number of arcs entering the node. For non directed graphs, - * the indegree is equal to the outdegree. - * - * @return integer In degree of the node - * @access public - */ - function inDegree() { - if ($this->_graph == null) return 0; - if (!$this->_graph->isDirected()) return $this->outDegree(); - $result = 0; - $graphNodes =& $this->_graph->getNodes(); - foreach (array_keys($graphNodes) as $key) { - if ($graphNodes[$key]->connectsTo($this)) $result++; - } - return $result; - - } - /* }}} */ - - /* outDegree {{{ */ - /** - * - * Calculate the out degree of the node. - * - * The outdegree for a node is the number of arcs exiting the node. For non directed graphs, - * the outdegree is always equal to the indegree. - * - * @return integer Out degree of the node - * @access public - */ - function outDegree() { - if ($this->_graph == null) return 0; - return sizeof($this->_arcs); - } - /* }}} */ -} -?> diff --git a/civicrm/packages/VERSIONS.php b/civicrm/packages/VERSIONS.php index 27691c9d10..0b97f38fef 100644 --- a/civicrm/packages/VERSIONS.php +++ b/civicrm/packages/VERSIONS.php @@ -123,16 +123,13 @@ * Net_Curl 1.2.5 BSD 3-cl. * Net_DIME 1.0.1 BSD 3-cl. * Net_URL 1.0.15 BSD 3-cl. - * Net_UserAgent_Detect 2.5.1 PHP 2 * Pager 2.4.8 BSD 3-cl. * PEAR 1.9.0 PHP 3.0 * PHP_Beautifier 0.1.14 PHP 3.0 * Services_Twilio 3.10.0 MIT - * Structures_Graph 1.0.2 LGPL 2.1+ * System_Command 1.0.6 PHP 2 * Validate 0.8.2 BSD 3-cl. * Validate_Finance 0.5.4 BSD 3-cl. - * Validate_Finance_CreditCard 0.5.3 BSD 3-cl. local changes * XML_RPC 1.5.3 PHP 3 * XML_Util 1.2.1 BSD 3-cl. * diff --git a/civicrm/packages/remote-list.pear.php.net b/civicrm/packages/remote-list.pear.php.net index 9a875aa563..584e04beeb 100644 --- a/civicrm/packages/remote-list.pear.php.net +++ b/civicrm/packages/remote-list.pear.php.net @@ -236,8 +236,6 @@ Net_SMTP 1.2.8 Net_Socket 1.0.6 Net_Traceroute 0.21 Net_URL 1.0.14 -Net_UserAgent_Detect 2.2.0 -Net_UserAgent_Mobile 0.28.0 Net_Whois 1.0 Net_Wifi 0.1.0 Numbers_Roman 1.0.1 diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index df93785059..d758264623 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,6 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.22.0 + +Released February 5, 2020 + +- **[Synopsis](release-notes/5.22.0.md#synopsis)** +- **[Features](release-notes/5.22.0.md#features)** +- **[Bugs resolved](release-notes/5.22.0.md#bugs)** +- **[Miscellany](release-notes/5.22.0.md#misc)** +- **[Credits](release-notes/5.22.0.md#credits)** +- **[Feedback](release-notes/5.22.0.md#feedback)** + ## CiviCRM 5.21.2 Released January 23, 2020 @@ -38,7 +49,6 @@ Released January 10, 2020 Released January 1, 2020 - **[Synopsis](release-notes/5.21.0.md#synopsis)** -- **[Security advisories](release-notes/5.21.0.md#security)** - **[Features](release-notes/5.21.0.md#features)** - **[Bugs resolved](release-notes/5.21.0.md#bugs)** - **[Miscellany](release-notes/5.21.0.md#misc)** diff --git a/civicrm/release-notes/5.22.0.md b/civicrm/release-notes/5.22.0.md new file mode 100644 index 0000000000..8ae714c4ca --- /dev/null +++ b/civicrm/release-notes/5.22.0.md @@ -0,0 +1,447 @@ +# CiviCRM 5.22.0 + +Released February 5, 2020 + +- **[Synopsis](#synopsis)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | no | +| **Change the database schema?** | **yes** | +| **Alter the API?** | **yes** | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Field Names now Reserved Words in MySQL8 + ([dev/core#1143](https://lab.civicrm.org/dev/core/issues/1143), + [dev/core#1144](https://lab.civicrm.org/dev/core/issues/1144) and + [dev/core#1480](https://lab.civicrm.org/dev/core/issues/1480): + [16179](https://github.com/civicrm/civicrm-core/pull/16179) and + [16182](https://github.com/civicrm/civicrm-core/pull/16182))** + + Allows CiviCRM installations to run on MySQL8 and updates the test + infastructure to support MySQL8. + +- **Add controlField metadata for ChainSelect fields + ([16164](https://github.com/civicrm/civicrm-core/pull/16164))** + + Adds additional field metadata for state/province and county address fields + for the sake of autogenerated forms (afform). + +- **Allow Angular modules to provide dynamic HTML snippets + ([16078](https://github.com/civicrm/civicrm-core/pull/16078))** + + Supports afforms dynamic templates by allowing angular partials to be passed + as strings not just file paths. + +- **Allow values to be passed to api4 GetFields + ([16154](https://github.com/civicrm/civicrm-core/pull/16154) and + [16162](https://github.com/civicrm/civicrm-core/pull/16162))** + + Makes it possible to filter api4 `getFields` calls by contact + type, only returning custom fields appropriate to certain contact types. + +- **Pass api4 getFields values through to getOptions + ([16168](https://github.com/civicrm/civicrm-core/pull/16168))** + + Allows option filtering in api4, similar to how it works in api3. + +- **Add api to check for missing indices + ([16145](https://github.com/civicrm/civicrm-core/pull/16145))** + + Adds an api to check for missing mysql indices. + +- **Add in Country and StateProvince APIv4 Entities + ([16110](https://github.com/civicrm/civicrm-core/pull/16110))** + + Adds Country and StateProvince APIv4 Entities. + +- **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception + (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/issues/560): + [16141](https://github.com/civicrm/civicrm-core/pull/16141) and + [16067](https://github.com/civicrm/civicrm-core/pull/16067))** + + Work towards throwing exceptions (instead of fatal errors). + +- **Deadlocked queries cause an instant error for end-users, but are retried in + other circumstances (Work Towards + [dev/core#395](https://lab.civicrm.org/dev/core/issues/395): + [275](https://github.com/civicrm/civicrm-packages/pull/275) and + [16143](https://github.com/civicrm/civicrm-core/pull/16143))** + + Improves logging from deadlocks specifically, before this change an error + recorded because of a deadlock query was recorded as "DBError::Unknown Error" + now they are recorded as "DBError::deadlock". + +### CiviContribute + +- **We should give user feedback in case of a Payment Processor Exception + ([15676](https://github.com/civicrm/civicrm-core/pull/15676))** + + Improves user experience when updating or canceling a recurring payment by + displaying any error message sent from the payment processor to the user. + +- **Code cleanup Update Paypal invokeApi to only throw exceptions. + ([16072](https://github.com/civicrm/civicrm-core/pull/16072))** + + Standardizes and improves error handling within PayPal. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **CIVI-SA-2019-21 may lead to regressions when following typehints on + CRM_Core_BAO_Setting::setItem() + ([dev/core#1425](https://lab.civicrm.org/dev/core/issues/1425): + [15975](https://github.com/civicrm/civicrm-core/pull/15975))** + + Deprecates old setItem & setOptionValue functions on + BAO_Setting to prevent regressions. + +- **Deadlocks on acl_cache (Work Towards + [dev/core#1486](https://lab.civicrm.org/dev/core/issues/1486): + [16144](https://github.com/civicrm/civicrm-core/pull/16144))** + + Adds an index to the `civicrm_acl_cache.modified_date` column to reduce + deadlocks when running the ACL Cache. + +- **Port "+options" for constant-parameters to APIv4-PHP (Work Towards + [dev/core#1489](https://lab.civicrm.org/dev/core/issues/1489): + [16149](https://github.com/civicrm/civicrm-core/pull/16149))** + + Ensures managed entities are not reconciled during upgrades. + +- **Api4 - Fix auto serialize array input for CheckBox/MultiSelect fields + ([16152](https://github.com/civicrm/civicrm-core/pull/16152))** + + In Api4, serialized fields should input/output as array data. This wasn't + working on the input side for custom entities. This fixes array input handling + and adds test coverage. + +- **Fix output display in api4 explorer + ([16130](https://github.com/civicrm/civicrm-core/pull/16130))** + + Ensures api4 explorer displays output with html entities properly. + +- **Add in searchFieldMetadata for contact_tags, contact_type, group and + deleted_contacts fields for contribute, pledge searches + ([15942](https://github.com/civicrm/civicrm-core/pull/15942))** + + Adds url support on search forms (other than the search builder) for the + following fields: `contact_tags`, `contact_type`, `group` and + `deleted_contacts`. + +- **Update Smart Group form uses different labels for Group Title and Group + Description ([16042](https://github.com/civicrm/civicrm-core/pull/16042))** + + Improves user experience by making the Smart Group field labels on the + Advanced Search from match the labels used on the Smart Group edit form. + +- **Update Smart Group form unsets the existing Group Types + ([16043](https://github.com/civicrm/civicrm-core/pull/16043))** + + Ensures the Mailing List group type remains set on the Update Smart Group + form. + +- **loadServices: tighten up file match regex + ([16377](https://github.com/civicrm/civicrm-core/pull/16377))** + + Ensures that CiviCRM code living under a path containing the characters 'php' + does not crash when loading services. + +- **Activity type listing shows name instead label + ([dev/core#1470](https://lab.civicrm.org/dev/core/issues/1470): + [16094](https://github.com/civicrm/civicrm-core/pull/16094))** + +- **Export doesn't work in Excel with diacritic chars + ([dev/core#1424](https://lab.civicrm.org/dev/core/issues/1424): + [16117](https://github.com/civicrm/civicrm-core/pull/16117) and + [15968](https://github.com/civicrm/civicrm-core/pull/15968))** + +- **text missing from email column when custom search profile is used + in Advanced Search + ([dev/core#1474](https://lab.civicrm.org/dev/core/issues/1474): + [16101](https://github.com/civicrm/civicrm-core/pull/16101))** + +- **Undefined offset and uninitialized string offset notices on upgrade to 5.21 + ([dev/core#1555](https://lab.civicrm.org/dev/core/issues/1555): + [16417](https://github.com/civicrm/civicrm-core/pull/16417))** + +### CiviCase + +- **Add case activity action links to activity report + ([15135](https://github.com/civicrm/civicrm-core/pull/15135))** + + Ensures if an activity is linked to a case the "case activity" actions are + displayed instead of the standard activity actions (eg. move/copy to case + instead of file on case). + +- **Activity Details CiviReport gives network error when paging to next page if + choose filter to include case activities + ([dev/core#1552](https://lab.civicrm.org/dev/core/issues/1552): + [16393](https://github.com/civicrm/civicrm-core/pull/16393))** + +- **Case Detail 'Active Role?' filter excludes cases without relationships + ([dev/report#24](https://lab.civicrm.org/dev/report/issues/24): + [15972](https://github.com/civicrm/civicrm-core/pull/15972))** + +- **Manager/Creator Information not being returned for case related contacts + when fetching Case Details + ([dev/core#1426](https://lab.civicrm.org/dev/core/issues/1426): + [16006](https://github.com/civicrm/civicrm-core/pull/16006))** + +### CiviContribute + +- **Thousands-separator corrupts price field values (comma) + ([dev/core#1472](https://lab.civicrm.org/dev/core/issues/1472): + [16111](https://github.com/civicrm/civicrm-core/pull/16111))** + + Fixes a bug where price options with thousands operators didn't submit + correctly. + +- **E notice fix on Price set form + ([16096](https://github.com/civicrm/civicrm-core/pull/16096))** + + Removes an e notice when submitting the price set form. + +- **Advanced search fails to properly search for contribution source + ([dev/core#1468](https://lab.civicrm.org/dev/core/issues/1468): + [16083](https://github.com/civicrm/civicrm-core/pull/16083))** + +### CiviEvent + +- **Event Participants actions (Print Name Badges, Export...) ignores search + criteria ([dev/core#1422](https://lab.civicrm.org/dev/core/issues/1422): + [16038](https://github.com/civicrm/civicrm-core/pull/16038))** + + Ensures that the actions menu on the participant search form respects search + criteria. + +### CiviMail + +- **Exception Malformed temp table category on New A/B Test + ([dev/core#1564](https://lab.civicrm.org/dev/core/issues/1564): + [16464](https://github.com/civicrm/civicrm-core/pull/16464))** + + Fixes a regression in 5.21.2 where creating a new A/B Test resulted in a + session status Exception Malformed temp table. + +### CiviMember + +- **Fix js error on choosing membership type + ([16058](https://github.com/civicrm/civicrm-core/pull/16058))** + + Fixes a javascript error "Uncaught ReferenceError" when choosing a membership + type from the backend membership signup form. + +### Drupal Integration + +- **Error when creating user record for Civi contact + ([dev/drupal#99](https://lab.civicrm.org/dev/drupal/issues/99): + [16157](https://github.com/civicrm/civicrm-core/pull/16157))** + + Fixes an E-notice "Notice: Trying to get property 'id' of non-object in + CRM_Core_BAO_UFMatch::updateContactEmail() (line 449 of + /var/www/sitename/vendor/civicrm/civicrm-core/CRM/Core/BAO/UFMatch.php)." when + submitting the "Create User Record" form which can be found from the "Actions" + menu-button while viewing a CRM contact. + +- **Missing address on `/user` when location type label differs from its name + ([dev/core#1473](https://lab.civicrm.org/dev/core/issues/1473): + [16100](https://github.com/civicrm/civicrm-core/pull/16100))** + +### Wordpress Integration + +- **Fix basepage title for Yoast SEO when theme declares "title-tag" support + ([174](https://github.com/civicrm/civicrm-wordpress/pull/174))** + + Fixes a bug for sites with the Yoast SEO plugin where the CiviCRM page title + was not being displayed properly. Specifically the Yoast SEO plugin + short-circuits the code in `wp_get_document_title()` by filtering via + `pre_get_document_title`. This means that the CiviCRM code to apply the + CiviCRM basepage title via the document_title_parts filter is never reached + and the basepage title does not reflect the CiviCRM content. + +## <a name="misc"></a>Miscellany + +- **Fix typo, Mailign should be Mailing + ([16031](https://github.com/civicrm/civicrm-core/pull/16031))** + +- **Switch static var to using Civi::statics + ([16138](https://github.com/civicrm/civicrm-core/pull/16138))** + +- **Remove code to create a subscription history entry when a contact is created + ([dev/core#1482](https://lab.civicrm.org/dev/core/issues/1482): + [16125](https://github.com/civicrm/civicrm-core/pull/16125))** + +- **Remove unnecessary query when updating org, if no name update. + ([16080](https://github.com/civicrm/civicrm-core/pull/16080))** + +- **Remove unnecessary, and possibly incorrect query from email update + ([16079](https://github.com/civicrm/civicrm-core/pull/16079))** + +- **Remove unneeded zendframwork/zend-validator and zendframwork/zend-stdlib + packages as not required by any other package + ([16112](https://github.com/civicrm/civicrm-core/pull/16112))** + +- **Remove legacy_redirect_path handling + ([16134](https://github.com/civicrm/civicrm-core/pull/16134))** + +- **Remove function marked as deprecated & unused by core nearly a year ago + ([16124](https://github.com/civicrm/civicrm-core/pull/16124))** + +- **Remove vestige of apiv2 + ([16115](https://github.com/civicrm/civicrm-core/pull/16115))** + +- **Remove PEAR package Structures_Graph as there appears to be no use for it + ([279](https://github.com/civicrm/civicrm-packages/pull/279))** + +- **Remove Net_UserAgent_Detect package + ([272](https://github.com/civicrm/civicrm-packages/pull/272))** + +- **Paypal class cleanup + ([16088](https://github.com/civicrm/civicrm-core/pull/16088))** + +- **2020 test fixes. + ([16172](https://github.com/civicrm/civicrm-core/pull/16172))** + +- **Unit test for https://github.com/civicrm/civicrm-core/pull/16120 + ([16127](https://github.com/civicrm/civicrm-core/pull/16127))** + +- **Update unit tests to use name spaced format of phpunit test classes for + phpunit6 compatability + ([594](https://github.com/civicrm/civicrm-drupal/pull/594))** + +- **Update to use the namespaced version of the PHPUnit test classes as this + will work for phpunit6 going forward as well as phpunit5 + ([175](https://github.com/civicrm/civicrm-wordpress/pull/175))** + +- **Update PHPUnit Test class declarations to use namespaced format for phpunit6 + compatability ([108](https://github.com/civicrm/civicrm-backdrop/pull/108))** + +- **[REF] Minor cleanup - declare exceptions, use single quotes, strict + comparison ([16137](https://github.com/civicrm/civicrm-core/pull/16137))** + +- **[REF] remove CRM_Core_Error check + ([16136](https://github.com/civicrm/civicrm-core/pull/16136))** + +- **[REF] Convert more petition signature fatals to status bounce + ([16075](https://github.com/civicrm/civicrm-core/pull/16075))** + +- **[REF] Switch CRM_Utils_Error::fatal calls for CRM_Core_Exception in Grant. + utils, bin/ and Civi/Angular/ folders + ([16109](https://github.com/civicrm/civicrm-core/pull/16109))** + +- **[REF] Minor simplification on additional_participants checks + ([16056](https://github.com/civicrm/civicrm-core/pull/16056))** + +- **[REF] Refactor Contact Search form to use standardised getSortID function + ([16054](https://github.com/civicrm/civicrm-core/pull/16054))** + +- **[REF] Refactor Activity Search to use parent getSortID function + ([16053](https://github.com/civicrm/civicrm-core/pull/16053))** + +- **[REF] Refactor Campaign Search form to use standardised getSortID function + ([16055](https://github.com/civicrm/civicrm-core/pull/16055))** + +- **[REF] Move wrangling of Front end form contribution param for autoRenew back + to form ([15927](https://github.com/civicrm/civicrm-core/pull/15927))** + +- **[REF] Replace Deprecated function CRM_Core_BAO_Setting::setItem with the + relevant Civi::contactSettings function + ([16044](https://github.com/civicrm/civicrm-core/pull/16044))** + +- **[REF] remove unused from getACLRoles + ([16180](https://github.com/civicrm/civicrm-core/pull/16180))** + +- **[REF] simplify recordAdjustedAmt function + ([16135](https://github.com/civicrm/civicrm-core/pull/16135))** + +- **[REF] extract member form batch update & add test + ([16151](https://github.com/civicrm/civicrm-core/pull/16151))** + +- **[REF] Remove unused params from function signature for getACLs + ([16175](https://github.com/civicrm/civicrm-core/pull/16175))** + +- **[REF] step towards wiping out $ids array in membership bao functions + ([16132](https://github.com/civicrm/civicrm-core/pull/16132))** + +- **[Ref] improve readability of acl code + ([16131](https://github.com/civicrm/civicrm-core/pull/16131))** + +- **[Ref] Remove php4 support from BAO_Acl class + ([16119](https://github.com/civicrm/civicrm-core/pull/16119))** + +- **(NFC) Civi, CRM, tests - Update for + Drupal.Commenting.VariableComment.IncorrectVarType + ([16384](https://github.com/civicrm/civicrm-core/pull/16384))** + +- **[NFC] Test clean up. + ([16133](https://github.com/civicrm/civicrm-core/pull/16133))** + +- **[NFC] cleanup to declared exceptions, quotes, strict mode. + ([16114](https://github.com/civicrm/civicrm-core/pull/16114))** + +- **[NFC] Declare exceptions, use single quotes where possible, use strict + comparison ([16142](https://github.com/civicrm/civicrm-core/pull/16142))** + +- **[NFC] Add in unit test for dev/core#1460 + ([16063](https://github.com/civicrm/civicrm-core/pull/16063))** + +- **[NFC] code cleanup + ([16050](https://github.com/civicrm/civicrm-core/pull/16050))** + +- **[NFC] Add in a unit test of passing an array into the Civi::settings set + facade and getting it back + ([16045](https://github.com/civicrm/civicrm-core/pull/16045))** + +- **[NFC] Add test on buildMembershipTypeValues & cleanup class + ([16167](https://github.com/civicrm/civicrm-core/pull/16167))** + +- **[NFC] Re-generate DAOs + ([16178](https://github.com/civicrm/civicrm-core/pull/16178))** + +- **[NFC] Extract duplicated code lines in test + ([16165](https://github.com/civicrm/civicrm-core/pull/16165))** + +- **[NFC] Clean up unit test + ([16163](https://github.com/civicrm/civicrm-core/pull/16163))** + +- **[NFC] If statement is always true + ([16122](https://github.com/civicrm/civicrm-core/pull/16122))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Andrew Hunt; Agileware - Justin Freeman; Australian Greens - +Seamus Lee; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM - +Coleman Watts, Tim Otten; Coop SymbioTIC - Mathieu Lutfy; Dave D; Fuzion - +Jitendra Purohit; MJW Consulting - Matthew Wire; Squiffle Consulting - Aidan +Saunders; Wikimedia Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +AGH Strategies - Alice Frumin; Artful Robot - Rich Lott; CiviDesk - Yashodha +Chaku; Joinery - Allen Shaw; Megaphone Technology Consulting - Jon Goldberg; +Tadpole Collective - Kevin Cristiano; + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index e12b758ec0..b29d90718f 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -2585,6 +2585,9 @@ CREATE TABLE `civicrm_acl_cache` ( , INDEX `index_acl_id`( acl_id ) + , INDEX `index_modified_date`( + modified_date + ) , CONSTRAINT FK_civicrm_acl_cache_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_acl_cache_acl_id FOREIGN KEY (`acl_id`) REFERENCES `civicrm_acl`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ; diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index e45dcbe87b..5a6e1a8679 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -23927,4 +23927,4 @@ INSERT INTO `civicrm_report_instance` ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) VALUES ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); -UPDATE civicrm_domain SET version = '5.21.2'; +UPDATE civicrm_domain SET version = '5.22.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 2639f5f827..bfc97dec69 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -399,7 +399,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.21.2',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.22.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; diff --git a/civicrm/templates/CRM/Group/Form/Edit.tpl b/civicrm/templates/CRM/Group/Form/Edit.tpl index 7c18956644..2598bf54fc 100644 --- a/civicrm/templates/CRM/Group/Form/Edit.tpl +++ b/civicrm/templates/CRM/Group/Form/Edit.tpl @@ -99,12 +99,12 @@ {literal} <script type="text/javascript"> - {/literal}{if $freezeMailignList}{literal} - cj('input[type=checkbox][name="group_type[{/literal}{$freezeMailignList}{literal}]"]').prop('disabled',true); + {/literal}{if $freezeMailingList}{literal} + cj('input[type=checkbox][name="group_type[{/literal}{$freezeMailingList}{literal}]"]').prop('disabled',true); {/literal}{/if}{literal} - {/literal}{if $hideMailignList}{literal} - cj('input[type=checkbox][name="group_type[{/literal}{$hideMailignList}{literal}]"]').hide(); - cj('label[for="group_type[{/literal}{$hideMailignList}{literal}]"]').hide(); + {/literal}{if $hideMailingList}{literal} + cj('input[type=checkbox][name="group_type[{/literal}{$hideMailingList}{literal}]"]').hide(); + cj('label[for="group_type[{/literal}{$hideMailingList}{literal}]"]').hide(); {/literal}{/if}{literal} </script> {/literal} diff --git a/civicrm/templates/CRM/Member/Form/Membership.tpl b/civicrm/templates/CRM/Member/Form/Membership.tpl index 64ef92a7fe..8dd6f42ab5 100644 --- a/civicrm/templates/CRM/Member/Form/Membership.tpl +++ b/civicrm/templates/CRM/Member/Form/Membership.tpl @@ -510,8 +510,8 @@ {/literal} {if $membershipMode or $action eq 2} - - buildAutoRenew( null, null, '{$membershipMode}'); + buildAutoRenew( null, null, '{$membershipMode}'); + {/if} {literal} function buildAutoRenew( membershipType, processorId, mode ) { var action = {/literal}'{$action}'{literal}; @@ -574,10 +574,6 @@ } showEmailOptions(); } - {/literal} - {/if} - - {literal} var customDataType = {/literal}{$customDataType|@json_encode}{literal}; diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index dc331756fa..3b7a106d02 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc::getLoader(); +return ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a::getLoader(); diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php index 03784b5433..ca888cd1ec 100644 --- a/civicrm/vendor/composer/autoload_psr4.php +++ b/civicrm/vendor/composer/autoload_psr4.php @@ -8,8 +8,6 @@ $baseDir = dirname($vendorDir); return array( 'xKerman\\Restricted\\' => array($vendorDir . '/xkerman/restricted-unserialize/src'), 'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'), - 'Zend\\Validator\\' => array($vendorDir . '/zendframework/zend-validator/src'), - 'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib/src'), 'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'), 'When\\' => array($vendorDir . '/tplaner/when/src'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index bab3e6dd6e..16c3a3aa39 100644 --- a/civicrm/vendor/composer/autoload_real.php +++ b/civicrm/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc +class ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire2cf64571cacb0a44db1bde8e898cafcc($fileIdentifier, $file); + composerRequire0d2dd6066a4e109cf7c12ce2f1dc013a($fileIdentifier, $file); } return $loader; } } -function composerRequire2cf64571cacb0a44db1bde8e898cafcc($fileIdentifier, $file) +function composerRequire0d2dd6066a4e109cf7c12ce2f1dc013a($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 1e0f0c76b9..6a0d8bd70e 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc +class ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -30,8 +30,6 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc ), 'Z' => array ( - 'Zend\\Validator\\' => 15, - 'Zend\\Stdlib\\' => 12, 'Zend\\Escaper\\' => 13, ), 'W' => @@ -101,14 +99,6 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc array ( 0 => __DIR__ . '/..' . '/cweagans/composer-patches/src', ), - 'Zend\\Validator\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zend-validator/src', - ), - 'Zend\\Stdlib\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zend-stdlib/src', - ), 'Zend\\Escaper\\' => array ( 0 => __DIR__ . '/..' . '/zendframework/zend-escaper/src', @@ -486,11 +476,11 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index a262d864d9..48b3529d7d 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -2626,130 +2626,6 @@ "zf2" ] }, - { - "name": "zendframework/zend-stdlib", - "version": "2.4.13", - "version_normalized": "2.4.13.0", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" - }, - "time": "2015-07-21T13:55:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Zend\\Stdlib\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zend-stdlib", - "keywords": [ - "stdlib", - "zf2" - ] - }, - { - "name": "zendframework/zend-validator", - "version": "2.4.13", - "version_normalized": "2.4.13.0", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "81415511fe729e6de19a61936313cef43c80d337" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337", - "reference": "81415511fe729e6de19a61936313cef43c80d337", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "~2.4.0" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "~2.4.0", - "zendframework/zend-db": "~2.4.0", - "zendframework/zend-filter": "~2.4.0", - "zendframework/zend-i18n": "~2.4.0", - "zendframework/zend-math": "~2.4.0", - "zendframework/zend-servicemanager": "~2.4.0", - "zendframework/zend-session": "~2.4.0", - "zendframework/zend-uri": "~2.4.0" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" - }, - "time": "2015-09-08T21:04:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", - "keywords": [ - "validator", - "zf2" - ] - }, { "name": "zetacomponents/base", "version": "1.9.1", diff --git a/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml b/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml deleted file mode 100644 index 53bda829c8..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage_clover: clover.xml -json_path: coveralls-upload.json -src_dir: src diff --git a/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md b/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md deleted file mode 100644 index 068587e78b..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md +++ /dev/null @@ -1,23 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 2.4.4 - 2015-07-21 - -### Added - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- [#9](https://github.com/zendframework/zend-stdlib/pull/9) fixes an issue with - count incrementation during insert in PriorityList, ensuring that incrementation only - occurs when the item inserted was not previously present in the list. diff --git a/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md b/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md deleted file mode 100644 index b87ecf0393..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md +++ /dev/null @@ -1,229 +0,0 @@ -# CONTRIBUTING - -## RESOURCES - -If you wish to contribute to Zend Framework, please be sure to -read/subscribe to the following resources: - - - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards) - - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide) - - ZF Contributor's mailing list: - Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html - Subscribe: zf-contributors-subscribe@lists.zend.com - - ZF Contributor's IRC channel: - #zftalk.dev on Freenode.net - -If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-stdlib/issues/new). - -## Reporting Potential Security Issues - -If you have encountered a potential security vulnerability, please **DO NOT** report it on the public -issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead. -We will work with you to verify the vulnerability and patch it as soon as possible. - -When reporting issues, please provide the following information: - -- Component(s) affected -- A description indicating how to reproduce the issue -- A summary of the security vulnerability and impact - -We request that you contact us via the email address above and give the project -contributors a chance to resolve the vulnerability and issue a new release prior -to any public exposure; this helps protect users and provides them with a chance -to upgrade and/or update in order to protect their applications. - -For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc). - -## RUNNING TESTS - -> ### Note: testing versions prior to 2.4 -> -> This component originates with Zend Framework 2. During the lifetime of ZF2, -> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no -> changes were necessary. However, due to the migration, tests may not run on -> versions < 2.4. As such, you may need to change the PHPUnit dependency if -> attempting a fix on such a version. - -To run tests: - -- Clone the repository: - - ```console - $ git clone git@github.com:zendframework/zend-stdlib.git - $ cd - ``` - -- Install dependencies via composer: - - ```console - $ curl -sS https://getcomposer.org/installer | php -- - $ ./composer.phar install - ``` - - If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/ - -- Run the tests via `phpunit` and the provided PHPUnit config, like in this example: - - ```console - $ ./vendor/bin/phpunit - ``` - -You can turn on conditional tests with the phpunit.xml file. -To do so: - - - Copy `phpunit.xml.dist` file to `phpunit.xml` - - Edit `phpunit.xml` to enable any specific functionality you - want to test, as well as to provide test values to utilize. - -## Running Coding Standards Checks - -This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding -standards checks, and provides configuration for our selected checks. -`php-cs-fixer` is installed by default via Composer. - -To run checks only: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs -``` - -To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run` -flag: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs -``` - -If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure -they pass, and make sure you add and commit the changes after verification. - -## Recommended Workflow for Contributions - -Your first step is to establish a public repository from which we can -pull your work into the master repository. We recommend using -[GitHub](https://github.com), as that is where the component is already hosted. - -1. Setup a [GitHub account](http://github.com/), if you haven't yet -2. Fork the repository (http://github.com/zendframework/zend-stdlib) -3. Clone the canonical repository locally and enter it. - - ```console - $ git clone git://github.com:zendframework/zend-stdlib.git - $ cd zend-stdlib - ``` - -4. Add a remote to your fork; substitute your GitHub username in the command - below. - - ```console - $ git remote add {username} git@github.com:{username}/zend-stdlib.git - $ git fetch {username} - ``` - -### Keeping Up-to-Date - -Periodically, you should update your fork or personal repository to -match the canonical ZF repository. Assuming you have setup your local repository -per the instructions above, you can do the following: - - -```console -$ git checkout master -$ git fetch origin -$ git rebase origin/master -# OPTIONALLY, to keep your remote up-to-date - -$ git push {username} master:master -``` - -If you're tracking other branches -- for example, the "develop" branch, where -new feature development occurs -- you'll want to do the same operations for that -branch; simply substitute "develop" for "master". - -### Working on a patch - -We recommend you do each new feature or bugfix in a new branch. This simplifies -the task of code review as well as the task of merging your changes into the -canonical repository. - -A typical workflow will then consist of the following: - -1. Create a new local branch based off either your master or develop branch. -2. Switch to your new local branch. (This step can be combined with the - previous step with the use of `git checkout -b`.) -3. Do some work, commit, repeat as necessary. -4. Push the local branch to your remote repository. -5. Send a pull request. - -The mechanics of this process are actually quite trivial. Below, we will -create a branch for fixing an issue in the tracker. - -```console -$ git checkout -b hotfix/9295 -Switched to a new branch 'hotfix/9295' -``` - -... do some work ... - - -```console -$ git commit -``` - -... write your log message ... - - -```console -$ git push {username} hotfix/9295:hotfix/9295 -Counting objects: 38, done. -Delta compression using up to 2 threads. -Compression objects: 100% (18/18), done. -Writing objects: 100% (20/20), 8.19KiB, done. -Total 20 (delta 12), reused 0 (delta 0) -To ssh://git@github.com/{username}/zend-stdlib.git - b5583aa..4f51698 HEAD -> master -``` - -To send a pull request, you have two options. - -If using GitHub, you can do the pull request from there. Navigate to -your repository, select the branch you just created, and then select the -"Pull Request" button in the upper right. Select the user/organization -"zendframework" as the recipient. - -If using your own repository - or even if using GitHub - you can use `git -format-patch` to create a patchset for us to apply; in fact, this is -**recommended** for security-related patches. If you use `format-patch`, please -send the patches as attachments to: - -- zf-devteam@zend.com for patches without security implications -- zf-security@zend.com for security patches - -#### What branch to issue the pull request against? - -Which branch should you issue a pull request against? - -- For fixes against the stable release, issue the pull request against the - "master" branch. -- For new features, or fixes that introduce new elements to the public API (such - as new public methods or properties), issue the pull request against the - "develop" branch. - -### Branch Cleanup - -As you might imagine, if you are a frequent contributor, you'll start to -get a ton of branches both locally and on your remote. - -Once you know that your changes have been accepted to the master -repository, we suggest doing some cleanup of these branches. - -- Local branch cleanup - - ```console - $ git branch -d <branchname> - ``` - -- Remote branch removal - - ```console - $ git push {username} :<branchname> - ``` diff --git a/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt b/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt deleted file mode 100644 index 6eab5aa14f..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2005-2015, Zend Technologies USA, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of Zend Technologies USA, Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/civicrm/vendor/zendframework/zend-stdlib/README.md b/civicrm/vendor/zendframework/zend-stdlib/README.md deleted file mode 100644 index c065e86e32..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# zend-stdlib - -`Zend\Stdlib` is a set of components that implements general purpose utility -class for different scopes like: - -- array utilities functions; -- hydrators; -- json serialazible interfaces; -- general messaging systems; -- strin wrappers; -- etc - - -- File issues at https://github.com/zendframework/zend-stdlib/issues -- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-stdlib diff --git a/civicrm/vendor/zendframework/zend-stdlib/composer.json b/civicrm/vendor/zendframework/zend-stdlib/composer.json deleted file mode 100644 index 0247c5578c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "zendframework/zend-stdlib", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "stdlib" - ], - "homepage": "https://github.com/zendframework/zend-stdlib", - "autoload": { - "psr-4": { - "Zend\\Stdlib\\": "src/" - } - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-filter": "self.version", - "fabpot/php-cs-fixer": "1.7.*", - "satooshi/php-coveralls": "dev-master", - "phpunit/PHPUnit": "~4.0" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage" - }, - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "autoload-dev": { - "psr-4": { - "ZendTest\\Stdlib\\": "test/" - } - } -} \ No newline at end of file diff --git a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist b/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist deleted file mode 100644 index 2d77d4b782..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-stdlib Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis b/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis deleted file mode 100644 index 2d77d4b782..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-stdlib Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php b/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php deleted file mode 100644 index aaa1dd2995..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php +++ /dev/null @@ -1,176 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Traversable; - -abstract class AbstractOptions implements ParameterObjectInterface -{ - /** - * We use the __ prefix to avoid collisions with properties in - * user-implementations. - * - * @var bool - */ - protected $__strictMode__ = true; - - /** - * Constructor - * - * @param array|Traversable|null $options - */ - public function __construct($options = null) - { - if (null !== $options) { - $this->setFromArray($options); - } - } - - /** - * Set one or more configuration properties - * - * @param array|Traversable|AbstractOptions $options - * @throws Exception\InvalidArgumentException - * @return AbstractOptions Provides fluent interface - */ - public function setFromArray($options) - { - if ($options instanceof self) { - $options = $options->toArray(); - } - - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException( - sprintf( - 'Parameter provided to %s must be an %s, %s or %s', - __METHOD__, - 'array', - 'Traversable', - 'Zend\Stdlib\AbstractOptions' - ) - ); - } - - foreach ($options as $key => $value) { - $this->__set($key, $value); - } - - return $this; - } - - /** - * Cast to array - * - * @return array - */ - public function toArray() - { - $array = array(); - $transform = function ($letters) { - $letter = array_shift($letters); - return '_' . strtolower($letter); - }; - foreach ($this as $key => $value) { - if ($key === '__strictMode__') { - continue; - } - $normalizedKey = preg_replace_callback('/([A-Z])/', $transform, $key); - $array[$normalizedKey] = $value; - } - return $array; - } - - /** - * Set a configuration property - * - * @see ParameterObject::__set() - * @param string $key - * @param mixed $value - * @throws Exception\BadMethodCallException - * @return void - */ - public function __set($key, $value) - { - $setter = 'set' . str_replace('_', '', $key); - - if (is_callable(array($this, $setter))) { - $this->{$setter}($value); - - return; - } - - if ($this->__strictMode__) { - throw new Exception\BadMethodCallException(sprintf( - 'The option "%s" does not have a callable "%s" ("%s") setter method which must be defined', - $key, - 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))), - $setter - )); - } - } - - /** - * Get a configuration property - * - * @see ParameterObject::__get() - * @param string $key - * @throws Exception\BadMethodCallException - * @return mixed - */ - public function __get($key) - { - $getter = 'get' . str_replace('_', '', $key); - - if (is_callable(array($this, $getter))) { - return $this->{$getter}(); - } - - throw new Exception\BadMethodCallException(sprintf( - 'The option "%s" does not have a callable "%s" getter method which must be defined', - $key, - 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))) - )); - } - - /** - * Test if a configuration property is null - * @see ParameterObject::__isset() - * @param string $key - * @return bool - */ - public function __isset($key) - { - $getter = 'get' . str_replace('_', '', $key); - - return method_exists($this, $getter) && null !== $this->__get($key); - } - - /** - * Set a configuration property to NULL - * - * @see ParameterObject::__unset() - * @param string $key - * @throws Exception\InvalidArgumentException - * @return void - */ - public function __unset($key) - { - try { - $this->__set($key, null); - } catch (Exception\BadMethodCallException $e) { - throw new Exception\InvalidArgumentException( - 'The class property $' . $key . ' cannot be unset as' - . ' NULL is an invalid value for it', - 0, - $e - ); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php deleted file mode 100644 index 44145c8554..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php +++ /dev/null @@ -1,432 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ArrayAccess; -use Countable; -use IteratorAggregate; -use Serializable; - -/** - * Custom framework ArrayObject implementation - * - * Extends version-specific "abstract" implementation. - */ -class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable -{ - /** - * Properties of the object have their normal functionality - * when accessed as list (var_dump, foreach, etc.). - */ - const STD_PROP_LIST = 1; - - /** - * Entries can be accessed as properties (read and write). - */ - const ARRAY_AS_PROPS = 2; - - /** - * @var array - */ - protected $storage; - - /** - * @var int - */ - protected $flag; - - /** - * @var string - */ - protected $iteratorClass; - - /** - * @var array - */ - protected $protectedProperties; - - /** - * Constructor - * - * @param array $input - * @param int $flags - * @param string $iteratorClass - */ - public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator') - { - $this->setFlags($flags); - $this->storage = $input; - $this->setIteratorClass($iteratorClass); - $this->protectedProperties = array_keys(get_object_vars($this)); - } - - /** - * Returns whether the requested key exists - * - * @param mixed $key - * @return bool - */ - public function __isset($key) - { - if ($this->flag == self::ARRAY_AS_PROPS) { - return $this->offsetExists($key); - } - if (in_array($key, $this->protectedProperties)) { - throw new Exception\InvalidArgumentException('$key is a protected property, use a different key'); - } - - return isset($this->$key); - } - - /** - * Sets the value at the specified key to value - * - * @param mixed $key - * @param mixed $value - * @return void - */ - public function __set($key, $value) - { - if ($this->flag == self::ARRAY_AS_PROPS) { - return $this->offsetSet($key, $value); - } - if (in_array($key, $this->protectedProperties)) { - throw new Exception\InvalidArgumentException('$key is a protected property, use a different key'); - } - $this->$key = $value; - } - - /** - * Unsets the value at the specified key - * - * @param mixed $key - * @return void - */ - public function __unset($key) - { - if ($this->flag == self::ARRAY_AS_PROPS) { - return $this->offsetUnset($key); - } - if (in_array($key, $this->protectedProperties)) { - throw new Exception\InvalidArgumentException('$key is a protected property, use a different key'); - } - unset($this->$key); - } - - /** - * Returns the value at the specified key by reference - * - * @param mixed $key - * @return mixed - */ - public function &__get($key) - { - $ret = null; - if ($this->flag == self::ARRAY_AS_PROPS) { - $ret =& $this->offsetGet($key); - - return $ret; - } - if (in_array($key, $this->protectedProperties)) { - throw new Exception\InvalidArgumentException('$key is a protected property, use a different key'); - } - - return $this->$key; - } - - /** - * Appends the value - * - * @param mixed $value - * @return void - */ - public function append($value) - { - $this->storage[] = $value; - } - - /** - * Sort the entries by value - * - * @return void - */ - public function asort() - { - asort($this->storage); - } - - /** - * Get the number of public properties in the ArrayObject - * - * @return int - */ - public function count() - { - return count($this->storage); - } - - /** - * Exchange the array for another one. - * - * @param array|ArrayObject $data - * @return array - */ - public function exchangeArray($data) - { - if (!is_array($data) && !is_object($data)) { - throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead'); - } - - if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) { - $data = $data->getArrayCopy(); - } - if (!is_array($data)) { - $data = (array) $data; - } - - $storage = $this->storage; - - $this->storage = $data; - - return $storage; - } - - /** - * Creates a copy of the ArrayObject. - * - * @return array - */ - public function getArrayCopy() - { - return $this->storage; - } - - /** - * Gets the behavior flags. - * - * @return int - */ - public function getFlags() - { - return $this->flag; - } - - /** - * Create a new iterator from an ArrayObject instance - * - * @return \Iterator - */ - public function getIterator() - { - $class = $this->iteratorClass; - - return new $class($this->storage); - } - - /** - * Gets the iterator classname for the ArrayObject. - * - * @return string - */ - public function getIteratorClass() - { - return $this->iteratorClass; - } - - /** - * Sort the entries by key - * - * @return void - */ - public function ksort() - { - ksort($this->storage); - } - - /** - * Sort an array using a case insensitive "natural order" algorithm - * - * @return void - */ - public function natcasesort() - { - natcasesort($this->storage); - } - - /** - * Sort entries using a "natural order" algorithm - * - * @return void - */ - public function natsort() - { - natsort($this->storage); - } - - /** - * Returns whether the requested key exists - * - * @param mixed $key - * @return bool - */ - public function offsetExists($key) - { - return isset($this->storage[$key]); - } - - /** - * Returns the value at the specified key - * - * @param mixed $key - * @return mixed - */ - public function &offsetGet($key) - { - $ret = null; - if (!$this->offsetExists($key)) { - return $ret; - } - $ret =& $this->storage[$key]; - - return $ret; - } - - /** - * Sets the value at the specified key to value - * - * @param mixed $key - * @param mixed $value - * @return void - */ - public function offsetSet($key, $value) - { - $this->storage[$key] = $value; - } - - /** - * Unsets the value at the specified key - * - * @param mixed $key - * @return void - */ - public function offsetUnset($key) - { - if ($this->offsetExists($key)) { - unset($this->storage[$key]); - } - } - - /** - * Serialize an ArrayObject - * - * @return string - */ - public function serialize() - { - return serialize(get_object_vars($this)); - } - - /** - * Sets the behavior flags - * - * @param int $flags - * @return void - */ - public function setFlags($flags) - { - $this->flag = $flags; - } - - /** - * Sets the iterator classname for the ArrayObject - * - * @param string $class - * @return void - */ - public function setIteratorClass($class) - { - if (class_exists($class)) { - $this->iteratorClass = $class; - - return ; - } - - if (strpos($class, '\\') === 0) { - $class = '\\' . $class; - if (class_exists($class)) { - $this->iteratorClass = $class; - - return ; - } - } - - throw new Exception\InvalidArgumentException('The iterator class does not exist'); - } - - /** - * Sort the entries with a user-defined comparison function and maintain key association - * - * @param callable $function - * @return void - */ - public function uasort($function) - { - if (is_callable($function)) { - uasort($this->storage, $function); - } - } - - /** - * Sort the entries by keys using a user-defined comparison function - * - * @param callable $function - * @return void - */ - public function uksort($function) - { - if (is_callable($function)) { - uksort($this->storage, $function); - } - } - - /** - * Unserialize an ArrayObject - * - * @param string $data - * @return void - */ - public function unserialize($data) - { - $ar = unserialize($data); - $this->protectedProperties = array_keys(get_object_vars($this)); - - $this->setFlags($ar['flag']); - $this->exchangeArray($ar['storage']); - $this->setIteratorClass($ar['iteratorClass']); - - foreach ($ar as $k => $v) { - switch ($k) { - case 'flag': - $this->setFlags($v); - break; - case 'storage': - $this->exchangeArray($v); - break; - case 'iteratorClass': - $this->setIteratorClass($v); - break; - case 'protectedProperties': - continue; - default: - $this->__set($k, $v); - } - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php deleted file mode 100644 index dcf8471952..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface ArraySerializableInterface -{ - /** - * Exchange internal values from provided array - * - * @param array $array - * @return void - */ - public function exchangeArray(array $array); - - /** - * Return an array representation of the object - * - * @return array - */ - public function getArrayCopy(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php deleted file mode 100644 index 39d02aacac..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ArrayIterator; -use ArrayObject as PhpArrayObject; - -/** - * ArrayObject that acts as a stack with regards to iteration - */ -class ArrayStack extends PhpArrayObject -{ - /** - * Retrieve iterator - * - * Retrieve an array copy of the object, reverse its order, and return an - * ArrayIterator with that reversed array. - * - * @return ArrayIterator - */ - public function getIterator() - { - $array = $this->getArrayCopy(); - return new ArrayIterator(array_reverse($array)); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php deleted file mode 100644 index 3545054ed8..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php +++ /dev/null @@ -1,335 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Traversable; -use Zend\Stdlib\ArrayUtils\MergeRemoveKey; -use Zend\Stdlib\ArrayUtils\MergeReplaceKeyInterface; - -/** - * Utility class for testing and manipulation of PHP arrays. - * - * Declared abstract, as we have no need for instantiation. - */ -abstract class ArrayUtils -{ - /** - * Compatibility Flag for ArrayUtils::filter - */ - const ARRAY_FILTER_USE_BOTH = 1; - - /** - * Compatibility Flag for ArrayUtils::filter - */ - const ARRAY_FILTER_USE_KEY = 2; - - /** - * Test whether an array contains one or more string keys - * - * @param mixed $value - * @param bool $allowEmpty Should an empty array() return true - * @return bool - */ - public static function hasStringKeys($value, $allowEmpty = false) - { - if (!is_array($value)) { - return false; - } - - if (!$value) { - return $allowEmpty; - } - - return count(array_filter(array_keys($value), 'is_string')) > 0; - } - - /** - * Test whether an array contains one or more integer keys - * - * @param mixed $value - * @param bool $allowEmpty Should an empty array() return true - * @return bool - */ - public static function hasIntegerKeys($value, $allowEmpty = false) - { - if (!is_array($value)) { - return false; - } - - if (!$value) { - return $allowEmpty; - } - - return count(array_filter(array_keys($value), 'is_int')) > 0; - } - - /** - * Test whether an array contains one or more numeric keys. - * - * A numeric key can be one of the following: - * - an integer 1, - * - a string with a number '20' - * - a string with negative number: '-1000' - * - a float: 2.2120, -78.150999 - * - a string with float: '4000.99999', '-10.10' - * - * @param mixed $value - * @param bool $allowEmpty Should an empty array() return true - * @return bool - */ - public static function hasNumericKeys($value, $allowEmpty = false) - { - if (!is_array($value)) { - return false; - } - - if (!$value) { - return $allowEmpty; - } - - return count(array_filter(array_keys($value), 'is_numeric')) > 0; - } - - /** - * Test whether an array is a list - * - * A list is a collection of values assigned to continuous integer keys - * starting at 0 and ending at count() - 1. - * - * For example: - * <code> - * $list = array('a', 'b', 'c', 'd'); - * $list = array( - * 0 => 'foo', - * 1 => 'bar', - * 2 => array('foo' => 'baz'), - * ); - * </code> - * - * @param mixed $value - * @param bool $allowEmpty Is an empty list a valid list? - * @return bool - */ - public static function isList($value, $allowEmpty = false) - { - if (!is_array($value)) { - return false; - } - - if (!$value) { - return $allowEmpty; - } - - return (array_values($value) === $value); - } - - /** - * Test whether an array is a hash table. - * - * An array is a hash table if: - * - * 1. Contains one or more non-integer keys, or - * 2. Integer keys are non-continuous or misaligned (not starting with 0) - * - * For example: - * <code> - * $hash = array( - * 'foo' => 15, - * 'bar' => false, - * ); - * $hash = array( - * 1995 => 'Birth of PHP', - * 2009 => 'PHP 5.3.0', - * 2012 => 'PHP 5.4.0', - * ); - * $hash = array( - * 'formElement, - * 'options' => array( 'debug' => true ), - * ); - * </code> - * - * @param mixed $value - * @param bool $allowEmpty Is an empty array() a valid hash table? - * @return bool - */ - public static function isHashTable($value, $allowEmpty = false) - { - if (!is_array($value)) { - return false; - } - - if (!$value) { - return $allowEmpty; - } - - return (array_values($value) !== $value); - } - - /** - * Checks if a value exists in an array. - * - * Due to "foo" == 0 === TRUE with in_array when strict = false, an option - * has been added to prevent this. When $strict = 0/false, the most secure - * non-strict check is implemented. if $strict = -1, the default in_array - * non-strict behaviour is used. - * - * @param mixed $needle - * @param array $haystack - * @param int|bool $strict - * @return bool - */ - public static function inArray($needle, array $haystack, $strict = false) - { - if (!$strict) { - if (is_int($needle) || is_float($needle)) { - $needle = (string) $needle; - } - if (is_string($needle)) { - foreach ($haystack as &$h) { - if (is_int($h) || is_float($h)) { - $h = (string) $h; - } - } - } - } - return in_array($needle, $haystack, $strict); - } - - /** - * Convert an iterator to an array. - * - * Converts an iterator to an array. The $recursive flag, on by default, - * hints whether or not you want to do so recursively. - * - * @param array|Traversable $iterator The array or Traversable object to convert - * @param bool $recursive Recursively check all nested structures - * @throws Exception\InvalidArgumentException if $iterator is not an array or a Traversable object - * @return array - */ - public static function iteratorToArray($iterator, $recursive = true) - { - if (!is_array($iterator) && !$iterator instanceof Traversable) { - throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable object'); - } - - if (!$recursive) { - if (is_array($iterator)) { - return $iterator; - } - - return iterator_to_array($iterator); - } - - if (method_exists($iterator, 'toArray')) { - return $iterator->toArray(); - } - - $array = array(); - foreach ($iterator as $key => $value) { - if (is_scalar($value)) { - $array[$key] = $value; - continue; - } - - if ($value instanceof Traversable) { - $array[$key] = static::iteratorToArray($value, $recursive); - continue; - } - - if (is_array($value)) { - $array[$key] = static::iteratorToArray($value, $recursive); - continue; - } - - $array[$key] = $value; - } - - return $array; - } - - /** - * Merge two arrays together. - * - * If an integer key exists in both arrays and preserveNumericKeys is false, the value - * from the second array will be appended to the first array. If both values are arrays, they - * are merged together, else the value of the second array overwrites the one of the first array. - * - * @param array $a - * @param array $b - * @param bool $preserveNumericKeys - * @return array - */ - public static function merge(array $a, array $b, $preserveNumericKeys = false) - { - foreach ($b as $key => $value) { - if ($value instanceof MergeReplaceKeyInterface) { - $a[$key] = $value->getData(); - } elseif (isset($a[$key]) || array_key_exists($key, $a)) { - if ($value instanceof MergeRemoveKey) { - unset($a[$key]); - } elseif (!$preserveNumericKeys && is_int($key)) { - $a[] = $value; - } elseif (is_array($value) && is_array($a[$key])) { - $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys); - } else { - $a[$key] = $value; - } - } else { - if (!$value instanceof MergeRemoveKey) { - $a[$key] = $value; - } - } - } - - return $a; - } - - /** - * Compatibility Method for array_filter on <5.6 systems - * - * @param array $data - * @param callable $callback - * @param null|int $flag - * @return array - */ - public static function filter(array $data, $callback, $flag = null) - { - if (! is_callable($callback)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Second parameter of %s must be callable', - __METHOD__ - )); - } - - if (version_compare(PHP_VERSION, '5.6.0') >= 0) { - return array_filter($data, $callback, $flag); - } - - $output = array(); - foreach ($data as $key => $value) { - $params = array($value); - - if ($flag === static::ARRAY_FILTER_USE_BOTH) { - $params[] = $key; - } - - if ($flag === static::ARRAY_FILTER_USE_KEY) { - $params = array($key); - } - - $response = call_user_func_array($callback, $params); - if ($response) { - $output[$key] = $value; - } - } - - return $output; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php deleted file mode 100644 index 7c4d097d92..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\ArrayUtils; - -final class MergeRemoveKey -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php deleted file mode 100644 index 24c1df4d7a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\ArrayUtils; - -final class MergeReplaceKey implements MergeReplaceKeyInterface -{ - /** - * @var mixed - */ - protected $data; - - /** - * @param mixed $data - */ - public function __construct($data) - { - $this->data = $data; - } - - /** - * {@inheritDoc} - */ - public function getData() - { - return $this->data; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php deleted file mode 100644 index 725cf11bc7..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\ArrayUtils; - -/** - * Marker interface: can be used to replace keys completely in {@see ArrayUtils::merge()} operations - */ -interface MergeReplaceKeyInterface -{ - /** - * @return mixed - */ - public function getData(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php b/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php deleted file mode 100644 index 158b0c7d64..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php +++ /dev/null @@ -1,217 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ReflectionClass; - -/** - * CallbackHandler - * - * A handler for an event, event, filterchain, etc. Abstracts PHP callbacks, - * primarily to allow for lazy-loading and ensuring availability of default - * arguments (currying). - */ -class CallbackHandler -{ - /** - * @var string|array|callable PHP callback to invoke - */ - protected $callback; - - /** - * Callback metadata, if any - * @var array - */ - protected $metadata; - - /** - * PHP version is greater as 5.4rc1? - * @var bool - */ - protected static $isPhp54; - - /** - * Constructor - * - * @param string|array|object|callable $callback PHP callback - * @param array $metadata Callback metadata - */ - public function __construct($callback, array $metadata = array()) - { - $this->metadata = $metadata; - $this->registerCallback($callback); - } - - /** - * Registers the callback provided in the constructor - * - * @param callable $callback - * @throws Exception\InvalidCallbackException - * @return void - */ - protected function registerCallback($callback) - { - if (!is_callable($callback)) { - throw new Exception\InvalidCallbackException('Invalid callback provided; not callable'); - } - - $this->callback = $callback; - } - - /** - * Retrieve registered callback - * - * @return callable - */ - public function getCallback() - { - return $this->callback; - } - - /** - * Invoke handler - * - * @param array $args Arguments to pass to callback - * @return mixed - */ - public function call(array $args = array()) - { - $callback = $this->getCallback(); - - // Minor performance tweak, if the callback gets called more than once - if (!isset(static::$isPhp54)) { - static::$isPhp54 = version_compare(PHP_VERSION, '5.4.0rc1', '>='); - } - - $argCount = count($args); - - if (static::$isPhp54 && is_string($callback)) { - $result = $this->validateStringCallbackFor54($callback); - - if ($result !== true && $argCount <= 3) { - $callback = $result; - // Minor performance tweak, if the callback gets called more - // than once - $this->callback = $result; - } - } - - // Minor performance tweak; use call_user_func() until > 3 arguments - // reached - switch ($argCount) { - case 0: - if (static::$isPhp54) { - return $callback(); - } - return call_user_func($callback); - case 1: - if (static::$isPhp54) { - return $callback(array_shift($args)); - } - return call_user_func($callback, array_shift($args)); - case 2: - $arg1 = array_shift($args); - $arg2 = array_shift($args); - if (static::$isPhp54) { - return $callback($arg1, $arg2); - } - return call_user_func($callback, $arg1, $arg2); - case 3: - $arg1 = array_shift($args); - $arg2 = array_shift($args); - $arg3 = array_shift($args); - if (static::$isPhp54) { - return $callback($arg1, $arg2, $arg3); - } - return call_user_func($callback, $arg1, $arg2, $arg3); - default: - return call_user_func_array($callback, $args); - } - } - - /** - * Invoke as functor - * - * @return mixed - */ - public function __invoke() - { - return $this->call(func_get_args()); - } - - /** - * Get all callback metadata - * - * @return array - */ - public function getMetadata() - { - return $this->metadata; - } - - /** - * Retrieve a single metadatum - * - * @param string $name - * @return mixed - */ - public function getMetadatum($name) - { - if (array_key_exists($name, $this->metadata)) { - return $this->metadata[$name]; - } - return; - } - - /** - * Validate a static method call - * - * Validates that a static method call in PHP 5.4 will actually work - * - * @param string $callback - * @return true|array - * @throws Exception\InvalidCallbackException if invalid - */ - protected function validateStringCallbackFor54($callback) - { - if (!strstr($callback, '::')) { - return true; - } - - list($class, $method) = explode('::', $callback, 2); - - if (!class_exists($class)) { - throw new Exception\InvalidCallbackException(sprintf( - 'Static method call "%s" refers to a class that does not exist', - $callback - )); - } - - $r = new ReflectionClass($class); - if (!$r->hasMethod($method)) { - throw new Exception\InvalidCallbackException(sprintf( - 'Static method call "%s" refers to a method that does not exist', - $callback - )); - } - $m = $r->getMethod($method); - if (!$m->isStatic()) { - throw new Exception\InvalidCallbackException(sprintf( - 'Static method call "%s" refers to a method that is not static', - $callback - )); - } - - // returning a non boolean value may not be nice for a validate method, - // but that allows the usage of a static string callback without using - // the call_user_func function. - return array($class, $method); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php b/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php deleted file mode 100644 index cdab67d6e8..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use DateTimeZone; - -trigger_error('DateTime extension deprecated as of ZF 2.1.4; use the \DateTime constructor to parse extended ISO8601 dates instead', E_USER_DEPRECATED); - -/** - * DateTime - * - * An extension of the \DateTime object. - * - * @deprecated - */ -class DateTime extends \DateTime -{ - /** - * The DateTime::ISO8601 constant used by php's native DateTime object does - * not allow for fractions of a second. This function better handles ISO8601 - * formatted date strings. - * - * @param string $time - * @param DateTimeZone $timezone - * @return mixed - */ - public static function createFromISO8601($time, DateTimeZone $timezone = null) - { - $format = self::ISO8601; - if (isset($time[19]) && $time[19] === '.') { - $format = 'Y-m-d\TH:i:s.uO'; - } - - if ($timezone !== null) { - return self::createFromFormat($format, $time, $timezone); - } - - return self::createFromFormat($format, $time); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php deleted file mode 100644 index 4f74d1e8af..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface DispatchableInterface -{ - /** - * Dispatch a request - * - * @param RequestInterface $request - * @param null|ResponseInterface $response - * @return Response|mixed - */ - public function dispatch(RequestInterface $request, ResponseInterface $response = null); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php b/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php deleted file mode 100644 index 01949d1efe..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ErrorException; - -/** - * ErrorHandler that can be used to catch internal PHP errors - * and convert to an ErrorException instance. - */ -abstract class ErrorHandler -{ - /** - * Active stack - * - * @var array - */ - protected static $stack = array(); - - /** - * Check if this error handler is active - * - * @return bool - */ - public static function started() - { - return (bool) static::getNestedLevel(); - } - - /** - * Get the current nested level - * - * @return int - */ - public static function getNestedLevel() - { - return count(static::$stack); - } - - /** - * Starting the error handler - * - * @param int $errorLevel - */ - public static function start($errorLevel = \E_WARNING) - { - if (!static::$stack) { - set_error_handler(array(get_called_class(), 'addError'), $errorLevel); - } - - static::$stack[] = null; - } - - /** - * Stopping the error handler - * - * @param bool $throw Throw the ErrorException if any - * @return null|ErrorException - * @throws ErrorException If an error has been catched and $throw is true - */ - public static function stop($throw = false) - { - $errorException = null; - - if (static::$stack) { - $errorException = array_pop(static::$stack); - - if (!static::$stack) { - restore_error_handler(); - } - - if ($errorException && $throw) { - throw $errorException; - } - } - - return $errorException; - } - - /** - * Stop all active handler - * - * @return void - */ - public static function clean() - { - if (static::$stack) { - restore_error_handler(); - } - - static::$stack = array(); - } - - /** - * Add an error to the stack - * - * @param int $errno - * @param string $errstr - * @param string $errfile - * @param int $errline - * @return void - */ - public static function addError($errno, $errstr = '', $errfile = '', $errline = 0) - { - $stack = & static::$stack[count(static::$stack) - 1]; - $stack = new ErrorException($errstr, 0, $errno, $errfile, $errline, $stack); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php deleted file mode 100644 index 0254e45bff..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Bad method call exception - */ -class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php deleted file mode 100644 index 6d2ac714a1..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Domain exception - */ -class DomainException extends \DomainException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php deleted file mode 100644 index 60b795f8dd..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Exception marker interface - */ -interface ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php deleted file mode 100644 index 4b51475f24..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Extension not loaded exception - */ -class ExtensionNotLoadedException extends RuntimeException -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php deleted file mode 100644 index 8028c47175..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Invalid Argument Exception - */ -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php deleted file mode 100644 index aa36f98632..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Invalid callback exception - */ -class InvalidCallbackException extends DomainException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php deleted file mode 100644 index 087ac0e83f..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Logic exception - */ -class LogicException extends \LogicException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php deleted file mode 100644 index f3891d64b6..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Exception; - -/** - * Runtime exception - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php deleted file mode 100644 index 297d557746..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Extractor; - -interface ExtractionInterface -{ - /** - * Extract values from an object - * - * @param object $object - * @return array - */ - public function extract($object); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php b/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php deleted file mode 100644 index a4d0068a09..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php +++ /dev/null @@ -1,202 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -/** - * Wrapper for glob with fallback if GLOB_BRACE is not available. - */ -abstract class Glob -{ - /**#@+ - * Glob constants. - */ - const GLOB_MARK = 0x01; - const GLOB_NOSORT = 0x02; - const GLOB_NOCHECK = 0x04; - const GLOB_NOESCAPE = 0x08; - const GLOB_BRACE = 0x10; - const GLOB_ONLYDIR = 0x20; - const GLOB_ERR = 0x40; - /**#@-*/ - - /** - * Find pathnames matching a pattern. - * - * @see http://docs.php.net/glob - * @param string $pattern - * @param int $flags - * @param bool $forceFallback - * @return array - * @throws Exception\RuntimeException - */ - public static function glob($pattern, $flags = 0, $forceFallback = false) - { - if (!defined('GLOB_BRACE') || $forceFallback) { - return static::fallbackGlob($pattern, $flags); - } - - return static::systemGlob($pattern, $flags); - } - - /** - * Use the glob function provided by the system. - * - * @param string $pattern - * @param int $flags - * @return array - * @throws Exception\RuntimeException - */ - protected static function systemGlob($pattern, $flags) - { - if ($flags) { - $flagMap = array( - self::GLOB_MARK => GLOB_MARK, - self::GLOB_NOSORT => GLOB_NOSORT, - self::GLOB_NOCHECK => GLOB_NOCHECK, - self::GLOB_NOESCAPE => GLOB_NOESCAPE, - self::GLOB_BRACE => GLOB_BRACE, - self::GLOB_ONLYDIR => GLOB_ONLYDIR, - self::GLOB_ERR => GLOB_ERR, - ); - - $globFlags = 0; - - foreach ($flagMap as $internalFlag => $globFlag) { - if ($flags & $internalFlag) { - $globFlags |= $globFlag; - } - } - } else { - $globFlags = 0; - } - - ErrorHandler::start(); - $res = glob($pattern, $globFlags); - $err = ErrorHandler::stop(); - if ($res === false) { - throw new Exception\RuntimeException("glob('{$pattern}', {$globFlags}) failed", 0, $err); - } - return $res; - } - - /** - * Expand braces manually, then use the system glob. - * - * @param string $pattern - * @param int $flags - * @return array - * @throws Exception\RuntimeException - */ - protected static function fallbackGlob($pattern, $flags) - { - if (!$flags & self::GLOB_BRACE) { - return static::systemGlob($pattern, $flags); - } - - $flags &= ~self::GLOB_BRACE; - $length = strlen($pattern); - $paths = array(); - - if ($flags & self::GLOB_NOESCAPE) { - $begin = strpos($pattern, '{'); - } else { - $begin = 0; - - while (true) { - if ($begin === $length) { - $begin = false; - break; - } elseif ($pattern[$begin] === '\\' && ($begin + 1) < $length) { - $begin++; - } elseif ($pattern[$begin] === '{') { - break; - } - - $begin++; - } - } - - if ($begin === false) { - return static::systemGlob($pattern, $flags); - } - - $next = static::nextBraceSub($pattern, $begin + 1, $flags); - - if ($next === null) { - return static::systemGlob($pattern, $flags); - } - - $rest = $next; - - while ($pattern[$rest] !== '}') { - $rest = static::nextBraceSub($pattern, $rest + 1, $flags); - - if ($rest === null) { - return static::systemGlob($pattern, $flags); - } - } - - $p = $begin + 1; - - while (true) { - $subPattern = substr($pattern, 0, $begin) - . substr($pattern, $p, $next - $p) - . substr($pattern, $rest + 1); - - $result = static::fallbackGlob($subPattern, $flags | self::GLOB_BRACE); - - if ($result) { - $paths = array_merge($paths, $result); - } - - if ($pattern[$next] === '}') { - break; - } - - $p = $next + 1; - $next = static::nextBraceSub($pattern, $p, $flags); - } - - return array_unique($paths); - } - - /** - * Find the end of the sub-pattern in a brace expression. - * - * @param string $pattern - * @param int $begin - * @param int $flags - * @return int|null - */ - protected static function nextBraceSub($pattern, $begin, $flags) - { - $length = strlen($pattern); - $depth = 0; - $current = $begin; - - while ($current < $length) { - if (!$flags & self::GLOB_NOESCAPE && $pattern[$current] === '\\') { - if (++$current === $length) { - break; - } - - $current++; - } else { - if (($pattern[$current] === '}' && $depth-- === 0) || ($pattern[$current] === ',' && $depth === 0)) { - break; - } elseif ($pattern[$current++] === '{') { - $depth++; - } - } - } - - return ($current < $length ? $current : null); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php deleted file mode 100644 index 95bc5162d3..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Guard; - -/** - * An aggregate for all guard traits - */ -trait AllGuardsTrait -{ - use ArrayOrTraversableGuardTrait; - use EmptyGuardTrait; - use NullGuardTrait; -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php deleted file mode 100644 index e6959a5ef4..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Guard; - -use Traversable; - -/** - * Provide a guard method for array or Traversable data - */ -trait ArrayOrTraversableGuardTrait -{ - /** - * Verifies that the data is an array or Traversable - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - protected function guardForArrayOrTraversable( - $data, - $dataName = 'Argument', - $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException' - ) { - if (!is_array($data) && !($data instanceof Traversable)) { - $message = sprintf( - "%s must be an array or Traversable, [%s] given", - $dataName, - is_object($data) ? get_class($data) : gettype($data) - ); - throw new $exceptionClass($message); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php deleted file mode 100644 index c6751cc35a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Guard; - -/** - * Provide a guard method against empty data - */ -trait EmptyGuardTrait -{ - /** - * Verify that the data is not empty - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - protected function guardAgainstEmpty( - $data, - $dataName = 'Argument', - $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException' - ) { - if (empty($data)) { - $message = sprintf('%s cannot be empty', $dataName); - throw new $exceptionClass($message); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php deleted file mode 100644 index 4fe4ccacb9..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php +++ /dev/null @@ -1,85 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Guard; - -use Traversable; - -/** - * Static guard helper class - * - * Bridges the gap for allowing refactoring until traits can be used by default. - * - * @deprecated - */ -abstract class GuardUtils -{ - const DEFAULT_EXCEPTION_CLASS = 'Zend\Stdlib\Exception\InvalidArgumentException'; - - /** - * Verifies that the data is an array or Traversable - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - public static function guardForArrayOrTraversable( - $data, - $dataName = 'Argument', - $exceptionClass = self::DEFAULT_EXCEPTION_CLASS - ) { - if (!is_array($data) && !($data instanceof Traversable)) { - $message = sprintf( - '%s must be an array or Traversable, [%s] given', - $dataName, - is_object($data) ? get_class($data) : gettype($data) - ); - throw new $exceptionClass($message); - } - } - - /** - * Verify that the data is not empty - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - public static function guardAgainstEmpty( - $data, - $dataName = 'Argument', - $exceptionClass = self::DEFAULT_EXCEPTION_CLASS - ) { - if (empty($data)) { - $message = sprintf('%s cannot be empty', $dataName); - throw new $exceptionClass($message); - } - } - - /** - * Verify that the data is not null - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - public static function guardAgainstNull( - $data, - $dataName = 'Argument', - $exceptionClass = self::DEFAULT_EXCEPTION_CLASS - ) { - if (null === $data) { - $message = sprintf('%s cannot be null', $dataName); - throw new $exceptionClass($message); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php deleted file mode 100644 index eac716281c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Guard; - -/** - * Provide a guard method against null data - */ -trait NullGuardTrait -{ - /** - * Verify that the data is not null - * - * @param mixed $data the data to verify - * @param string $dataName the data name - * @param string $exceptionClass FQCN for the exception - * @throws \Exception - */ - protected function guardAgainstNull( - $data, - $dataName = 'Argument', - $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException' - ) { - if (null === $data) { - $message = sprintf('%s cannot be null', $dataName); - throw new $exceptionClass($message); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php deleted file mode 100644 index 338ed80442..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php +++ /dev/null @@ -1,287 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use ArrayObject; -use Zend\Stdlib\Exception; -use Zend\Stdlib\Hydrator\Filter\FilterComposite; -use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface; -use Zend\Stdlib\Hydrator\Strategy\StrategyInterface; - -abstract class AbstractHydrator implements - HydratorInterface, - StrategyEnabledInterface, - FilterEnabledInterface, - NamingStrategyEnabledInterface -{ - /** - * The list with strategies that this hydrator has. - * - * @var ArrayObject - */ - protected $strategies; - - /** - * An instance of NamingStrategyInterface - * - * @var NamingStrategyInterface - */ - protected $namingStrategy; - - /** - * Composite to filter the methods, that need to be hydrated - * - * @var Filter\FilterComposite - */ - protected $filterComposite; - - /** - * Initializes a new instance of this class. - */ - public function __construct() - { - $this->strategies = new ArrayObject(); - $this->filterComposite = new FilterComposite(); - } - - /** - * Gets the strategy with the given name. - * - * @param string $name The name of the strategy to get. - * - * @throws \Zend\Stdlib\Exception\InvalidArgumentException - * @return StrategyInterface - */ - public function getStrategy($name) - { - if (isset($this->strategies[$name])) { - return $this->strategies[$name]; - } - - if (!isset($this->strategies['*'])) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: no strategy by name of "%s", and no wildcard strategy present', - __METHOD__, - $name - )); - } - - return $this->strategies['*']; - } - - /** - * Checks if the strategy with the given name exists. - * - * @param string $name The name of the strategy to check for. - * @return bool - */ - public function hasStrategy($name) - { - return array_key_exists($name, $this->strategies) - || array_key_exists('*', $this->strategies); - } - - /** - * Adds the given strategy under the given name. - * - * @param string $name The name of the strategy to register. - * @param StrategyInterface $strategy The strategy to register. - * @return HydratorInterface - */ - public function addStrategy($name, StrategyInterface $strategy) - { - $this->strategies[$name] = $strategy; - return $this; - } - - /** - * Removes the strategy with the given name. - * - * @param string $name The name of the strategy to remove. - * @return HydratorInterface - */ - public function removeStrategy($name) - { - unset($this->strategies[$name]); - return $this; - } - - /** - * Converts a value for extraction. If no strategy exists the plain value is returned. - * - * @param string $name The name of the strategy to use. - * @param mixed $value The value that should be converted. - * @param mixed $object The object is optionally provided as context. - * @return mixed - */ - public function extractValue($name, $value, $object = null) - { - if ($this->hasStrategy($name)) { - $strategy = $this->getStrategy($name); - $value = $strategy->extract($value, $object); - } - return $value; - } - - /** - * Converts a value for hydration. If no strategy exists the plain value is returned. - * - * @param string $name The name of the strategy to use. - * @param mixed $value The value that should be converted. - * @param array $data The whole data is optionally provided as context. - * @return mixed - */ - public function hydrateValue($name, $value, $data = null) - { - if ($this->hasStrategy($name)) { - $strategy = $this->getStrategy($name); - $value = $strategy->hydrate($value, $data); - } - return $value; - } - - /** - * Convert a name for extraction. If no naming strategy exists, the plain value is returned. - * - * @param string $name The name to convert. - * @param null $object The object is optionally provided as context. - * @return mixed - */ - public function extractName($name, $object = null) - { - if ($this->hasNamingStrategy()) { - $name = $this->getNamingStrategy()->extract($name, $object); - } - return $name; - } - - /** - * Converts a value for hydration. If no naming strategy exists, the plain value is returned. - * - * @param string $name The name to convert. - * @param array $data The whole data is optionally provided as context. - * @return mixed - */ - public function hydrateName($name, $data = null) - { - if ($this->hasNamingStrategy()) { - $name = $this->getNamingStrategy()->hydrate($name, $data); - } - return $name; - } - - /** - * Get the filter instance - * - * @return Filter\FilterComposite - */ - public function getFilter() - { - return $this->filterComposite; - } - - /** - * Add a new filter to take care of what needs to be hydrated. - * To exclude e.g. the method getServiceLocator: - * - * <code> - * $composite->addFilter("servicelocator", - * function ($property) { - * list($class, $method) = explode('::', $property); - * if ($method === 'getServiceLocator') { - * return false; - * } - * return true; - * }, FilterComposite::CONDITION_AND - * ); - * </code> - * - * @param string $name Index in the composite - * @param callable|Filter\FilterInterface $filter - * @param int $condition - * @return Filter\FilterComposite - */ - public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR) - { - return $this->filterComposite->addFilter($name, $filter, $condition); - } - - /** - * Check whether a specific filter exists at key $name or not - * - * @param string $name Index in the composite - * @return bool - */ - public function hasFilter($name) - { - return $this->filterComposite->hasFilter($name); - } - - /** - * Remove a filter from the composition. - * To not extract "has" methods, you simply need to unregister it - * - * <code> - * $filterComposite->removeFilter('has'); - * </code> - * - * @param $name - * @return Filter\FilterComposite - */ - public function removeFilter($name) - { - return $this->filterComposite->removeFilter($name); - } - - /** - * Adds the given naming strategy - * - * @param NamingStrategyInterface $strategy The naming to register. - * @return self - */ - public function setNamingStrategy(NamingStrategyInterface $strategy) - { - $this->namingStrategy = $strategy; - - return $this; - } - - /** - * Gets the naming strategy. - * - * @return NamingStrategyInterface - */ - public function getNamingStrategy() - { - return $this->namingStrategy; - } - - /** - * Checks if a naming strategy exists. - * - * @return bool - */ - public function hasNamingStrategy() - { - return isset($this->namingStrategy); - } - - /** - * Removes the naming strategy - * - * @return self - */ - public function removeNamingStrategy() - { - $this->namingStrategy = null; - - return $this; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php deleted file mode 100644 index 38a868e022..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php +++ /dev/null @@ -1,85 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Aggregate; - -use Zend\EventManager\EventManager; -use Zend\EventManager\EventManagerAwareInterface; -use Zend\EventManager\EventManagerInterface; -use Zend\Stdlib\Hydrator\HydratorInterface; - -/** - * Aggregate hydrator that composes multiple hydrators via events - */ -class AggregateHydrator implements HydratorInterface, EventManagerAwareInterface -{ - const DEFAULT_PRIORITY = 1; - - /** - * @var \Zend\EventManager\EventManagerInterface|null - */ - protected $eventManager; - - /** - * Attaches the provided hydrator to the list of hydrators to be used while hydrating/extracting data - * - * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator - * @param int $priority - */ - public function add(HydratorInterface $hydrator, $priority = self::DEFAULT_PRIORITY) - { - $this->getEventManager()->attachAggregate(new HydratorListener($hydrator), $priority); - } - - /** - * {@inheritDoc} - */ - public function extract($object) - { - $event = new ExtractEvent($this, $object); - - $this->getEventManager()->trigger($event); - - return $event->getExtractedData(); - } - - /** - * {@inheritDoc} - */ - public function hydrate(array $data, $object) - { - $event = new HydrateEvent($this, $object, $data); - - $this->getEventManager()->trigger($event); - - return $event->getHydratedObject(); - } - - /** - * {@inheritDoc} - */ - public function setEventManager(EventManagerInterface $eventManager) - { - $eventManager->setIdentifiers(array(__CLASS__, get_class($this))); - - $this->eventManager = $eventManager; - } - - /** - * {@inheritDoc} - */ - public function getEventManager() - { - if (null === $this->eventManager) { - $this->setEventManager(new EventManager()); - } - - return $this->eventManager; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php deleted file mode 100644 index b13bc5c70b..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Aggregate; - -use Zend\EventManager\Event; - -/** - * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} extracts - * data from an object - */ -class ExtractEvent extends Event -{ - const EVENT_EXTRACT = 'extract'; - - /** - * {@inheritDoc} - */ - protected $name = self::EVENT_EXTRACT; - - /** - * @var object - */ - protected $extractionObject; - - /** - * @var array - */ - protected $extractedData = array(); - - /** - * @param object $target - * @param object $extractionObject - */ - public function __construct($target, $extractionObject) - { - $this->target = $target; - $this->extractionObject = $extractionObject; - } - - /** - * Retrieves the object from which data is extracted - * - * @return object - */ - public function getExtractionObject() - { - return $this->extractionObject; - } - - /** - * @param object $extractionObject - * - * @return void - */ - public function setExtractionObject($extractionObject) - { - $this->extractionObject = $extractionObject; - } - - /** - * Retrieves the data that has been extracted - * - * @return array - */ - public function getExtractedData() - { - return $this->extractedData; - } - - /** - * @param array $extractedData - * - * @return void - */ - public function setExtractedData(array $extractedData) - { - $this->extractedData = $extractedData; - } - - /** - * Merge provided data with the extracted data - * - * @param array $additionalData - * - * @return void - */ - public function mergeExtractedData(array $additionalData) - { - $this->extractedData = array_merge($this->extractedData, $additionalData); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php deleted file mode 100644 index a7c91eec26..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Aggregate; - -use Zend\EventManager\Event; - -/** - * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} hydrates - * data into an object - */ -class HydrateEvent extends Event -{ - const EVENT_HYDRATE = 'hydrate'; - - /** - * {@inheritDoc} - */ - protected $name = self::EVENT_HYDRATE; - - /** - * @var object - */ - protected $hydratedObject; - - /** - * @var array - */ - protected $hydrationData; - - /** - * @param object $target - * @param object $hydratedObject - * @param array $hydrationData - */ - public function __construct($target, $hydratedObject, array $hydrationData) - { - $this->target = $target; - $this->hydratedObject = $hydratedObject; - $this->hydrationData = $hydrationData; - } - - /** - * Retrieves the object that is being hydrated - * - * @return object - */ - public function getHydratedObject() - { - return $this->hydratedObject; - } - - /** - * @param object $hydratedObject - */ - public function setHydratedObject($hydratedObject) - { - $this->hydratedObject = $hydratedObject; - } - - /** - * Retrieves the data that is being used for hydration - * - * @return array - */ - public function getHydrationData() - { - return $this->hydrationData; - } - - /** - * @param array $hydrationData - */ - public function setHydrationData(array $hydrationData) - { - $this->hydrationData = $hydrationData; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php deleted file mode 100644 index 1c25ff3c46..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Aggregate; - -use Zend\EventManager\AbstractListenerAggregate; -use Zend\EventManager\EventManagerInterface; -use Zend\Stdlib\Hydrator\HydratorInterface; - -/** - * Aggregate listener wrapping around a hydrator. Listens - * to {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_HYDRATE} and - * {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_EXTRACT} - */ -class HydratorListener extends AbstractListenerAggregate -{ - /** - * @var \Zend\Stdlib\Hydrator\HydratorInterface - */ - protected $hydrator; - - /** - * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator - */ - public function __construct(HydratorInterface $hydrator) - { - $this->hydrator = $hydrator; - } - - /** - * {@inheritDoc} - */ - public function attach(EventManagerInterface $events, $priority = 1) - { - $this->listeners[] = $events->attach(HydrateEvent::EVENT_HYDRATE, array($this, 'onHydrate'), $priority); - $this->listeners[] = $events->attach(ExtractEvent::EVENT_EXTRACT, array($this, 'onExtract'), $priority); - } - - /** - * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent::EVENT_HYDRATE} is triggered - * - * @param \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent $event - * - * @return object - * - * @internal - */ - public function onHydrate(HydrateEvent $event) - { - $object = $this->hydrator->hydrate($event->getHydrationData(), $event->getHydratedObject()); - - $event->setHydratedObject($object); - - return $object; - } - - /** - * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent::EVENT_EXTRACT} is triggered - * - * @param \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent $event - * - * @return array - * - * @internal - */ - public function onExtract(ExtractEvent $event) - { - $data = $this->hydrator->extract($event->getExtractionObject()); - - $event->mergeExtractedData($data); - - return $data; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php deleted file mode 100644 index 4f4ab2a133..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Exception; - -class ArraySerializable extends AbstractHydrator -{ - /** - * Extract values from the provided object - * - * Extracts values via the object's getArrayCopy() method. - * - * @param object $object - * @return array - * @throws Exception\BadMethodCallException for an $object not implementing getArrayCopy() - */ - public function extract($object) - { - if (!is_callable(array($object, 'getArrayCopy'))) { - throw new Exception\BadMethodCallException( - sprintf('%s expects the provided object to implement getArrayCopy()', __METHOD__) - ); - } - - $data = $object->getArrayCopy(); - $filter = $this->getFilter(); - - foreach ($data as $name => $value) { - if (!$filter->filter($name)) { - unset($data[$name]); - continue; - } - $extractedName = $this->extractName($name, $object); - // replace the original key with extracted, if differ - if ($extractedName !== $name) { - unset($data[$name]); - $name = $extractedName; - } - $data[$name] = $this->extractValue($name, $value, $object); - } - - return $data; - } - - /** - * Hydrate an object - * - * Hydrates an object by passing $data to either its exchangeArray() or - * populate() method. - * - * @param array $data - * @param object $object - * @return object - * @throws Exception\BadMethodCallException for an $object not implementing exchangeArray() or populate() - */ - public function hydrate(array $data, $object) - { - $replacement = array(); - foreach ($data as $key => $value) { - $name = $this->hydrateName($key, $data); - $replacement[$name] = $this->hydrateValue($name, $value, $data); - } - - if (is_callable(array($object, 'exchangeArray'))) { - $object->exchangeArray($replacement); - } elseif (is_callable(array($object, 'populate'))) { - $object->populate($replacement); - } else { - throw new Exception\BadMethodCallException( - sprintf('%s expects the provided object to implement exchangeArray() or populate()', __METHOD__) - ); - } - return $object; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php deleted file mode 100644 index 4edb1f4dcd..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php +++ /dev/null @@ -1,274 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Traversable; -use Zend\Stdlib\Exception; -use Zend\Stdlib\ArrayUtils; -use Zend\Stdlib\Hydrator\Filter\FilterComposite; -use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface; -use Zend\Stdlib\Hydrator\Filter\GetFilter; -use Zend\Stdlib\Hydrator\Filter\HasFilter; -use Zend\Stdlib\Hydrator\Filter\IsFilter; -use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter; -use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter; -use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface; -use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy; - -class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface -{ - /** - * Holds the names of the methods used for hydration, indexed by class::property name, - * false if the hydration method is not callable/usable for hydration purposes - * - * @var string[]|bool[] - */ - private $hydrationMethodsCache = array(); - - /** - * A map of extraction methods to property name to be used during extraction, indexed - * by class name and method name - * - * @var string[][] - */ - private $extractionMethodsCache = array(); - - /** - * Flag defining whether array keys are underscore-separated (true) or camel case (false) - * - * @var bool - */ - protected $underscoreSeparatedKeys = true; - - /** - * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface - */ - private $callableMethodFilter; - - /** - * Define if extract values will use camel case or name with underscore - * @param bool|array $underscoreSeparatedKeys - */ - public function __construct($underscoreSeparatedKeys = true) - { - parent::__construct(); - $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys); - - $this->callableMethodFilter = new OptionalParametersFilter(); - - $this->filterComposite->addFilter('is', new IsFilter()); - $this->filterComposite->addFilter('has', new HasFilter()); - $this->filterComposite->addFilter('get', new GetFilter()); - $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND); - } - - /** - * @param array|Traversable $options - * @return ClassMethods - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException( - 'The options parameter must be an array or a Traversable' - ); - } - if (isset($options['underscoreSeparatedKeys'])) { - $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']); - } - - return $this; - } - - /** - * @param bool $underscoreSeparatedKeys - * @return ClassMethods - */ - public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys) - { - $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys; - - if ($this->underscoreSeparatedKeys) { - $this->setNamingStrategy(new UnderscoreNamingStrategy); - } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) { - $this->removeNamingStrategy(); - } - - return $this; - } - - /** - * @return bool - */ - public function getUnderscoreSeparatedKeys() - { - return $this->underscoreSeparatedKeys; - } - - /** - * Extract values from an object with class methods - * - * Extracts the getter/setter of the given $object. - * - * @param object $object - * @return array - * @throws Exception\BadMethodCallException for a non-object $object - */ - public function extract($object) - { - if (!is_object($object)) { - throw new Exception\BadMethodCallException(sprintf( - '%s expects the provided $object to be a PHP object)', - __METHOD__ - )); - } - - $objectClass = get_class($object); - - // reset the hydrator's hydrator's cache for this object, as the filter may be per-instance - if ($object instanceof FilterProviderInterface) { - $this->extractionMethodsCache[$objectClass] = null; - } - - // pass 1 - finding out which properties can be extracted, with which methods (populate hydration cache) - if (! isset($this->extractionMethodsCache[$objectClass])) { - $this->extractionMethodsCache[$objectClass] = array(); - $filter = $this->filterComposite; - $methods = get_class_methods($object); - - if ($object instanceof FilterProviderInterface) { - $filter = new FilterComposite( - array($object->getFilter()), - array(new MethodMatchFilter('getFilter')) - ); - } - - foreach ($methods as $method) { - $methodFqn = $objectClass . '::' . $method; - - if (! ($filter->filter($methodFqn) && $this->callableMethodFilter->filter($methodFqn))) { - continue; - } - - $attribute = $method; - - if (strpos($method, 'get') === 0) { - $attribute = substr($method, 3); - if (!property_exists($object, $attribute)) { - $attribute = lcfirst($attribute); - } - } - - $this->extractionMethodsCache[$objectClass][$method] = $attribute; - } - } - - $values = array(); - - // pass 2 - actually extract data - foreach ($this->extractionMethodsCache[$objectClass] as $methodName => $attributeName) { - $realAttributeName = $this->extractName($attributeName, $object); - $values[$realAttributeName] = $this->extractValue($realAttributeName, $object->$methodName(), $object); - } - - return $values; - } - - /** - * Hydrate an object by populating getter/setter methods - * - * Hydrates an object by getter/setter methods of the object. - * - * @param array $data - * @param object $object - * @return object - * @throws Exception\BadMethodCallException for a non-object $object - */ - public function hydrate(array $data, $object) - { - if (!is_object($object)) { - throw new Exception\BadMethodCallException(sprintf( - '%s expects the provided $object to be a PHP object)', - __METHOD__ - )); - } - - $objectClass = get_class($object); - - foreach ($data as $property => $value) { - $propertyFqn = $objectClass . '::$' . $property; - - if (! isset($this->hydrationMethodsCache[$propertyFqn])) { - $setterName = 'set' . ucfirst($this->hydrateName($property, $data)); - - $this->hydrationMethodsCache[$propertyFqn] = is_callable(array($object, $setterName)) - ? $setterName - : false; - } - - if ($this->hydrationMethodsCache[$propertyFqn]) { - $object->{$this->hydrationMethodsCache[$propertyFqn]}($this->hydrateValue($property, $value, $data)); - } - } - - return $object; - } - - /** - * {@inheritDoc} - */ - public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR) - { - $this->resetCaches(); - - return parent::addFilter($name, $filter, $condition); - } - - /** - * {@inheritDoc} - */ - public function removeFilter($name) - { - $this->resetCaches(); - - return parent::removeFilter($name); - } - - /** - * {@inheritDoc} - */ - public function setNamingStrategy(NamingStrategyInterface $strategy) - { - $this->resetCaches(); - - return parent::setNamingStrategy($strategy); - } - - /** - * {@inheritDoc} - */ - public function removeNamingStrategy() - { - $this->resetCaches(); - - return parent::removeNamingStrategy(); - } - - /** - * Reset all local hydration/extraction caches - */ - private function resetCaches() - { - $this->hydrationMethodsCache = $this->extractionMethodsCache = array(); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php deleted file mode 100644 index db234d38ad..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\ServiceManager\ServiceLocatorInterface; - -class DelegatingHydrator implements HydratorInterface -{ - /** - * @var ServiceLocatorInterface - */ - protected $hydrators; - - /** - * Constructor - * - * @param ServiceLocatorInterface $hydrators - */ - public function __construct(ServiceLocatorInterface $hydrators) - { - $this->hydrators = $hydrators; - } - - /** - * {@inheritdoc} - */ - public function hydrate(array $data, $object) - { - return $this->getHydrator($object)->hydrate($data, $object); - } - - /** - * {@inheritdoc} - */ - public function extract($object) - { - return $this->getHydrator($object)->extract($object); - } - - /** - * Gets hydrator of an object - * - * @param object $object - * @return HydratorInterface - */ - protected function getHydrator($object) - { - return $this->hydrators->get(get_class($object)); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php deleted file mode 100644 index c3a0da25e7..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; - -class DelegatingHydratorFactory implements FactoryInterface -{ - /** - * Creates DelegatingHydrator - * - * @param ServiceLocatorInterface $serviceLocator - * @return DelegatingHydrator - */ - public function createService(ServiceLocatorInterface $serviceLocator) - { - // Assume that this factory is registered with the HydratorManager, - // and just pass it directly on. - return new DelegatingHydrator($serviceLocator); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php deleted file mode 100644 index 060034bb93..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php +++ /dev/null @@ -1,196 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -use ArrayObject; -use Zend\Stdlib\Exception\InvalidArgumentException; - -class FilterComposite implements FilterInterface -{ - /** - * @var ArrayObject - */ - protected $orFilter; - - /** - * @var ArrayObject - */ - protected $andFilter; - - /** - * Constant to add with "or" conditition - */ - const CONDITION_OR = 1; - - /** - * Constant to add with "and" conditition - */ - const CONDITION_AND = 2; - - /** - * Define default Filter - * - * @param array $orFilter - * @param array $andFilter - * @throws InvalidArgumentException - */ - public function __construct($orFilter = array(), $andFilter = array()) - { - array_walk( - $orFilter, - function ($value, $key) { - if (!is_callable($value) && !$value instanceof FilterInterface) { - throw new InvalidArgumentException( - 'The value of ' . $key . ' should be either a callable or ' . - 'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface' - ); - } - } - ); - - array_walk( - $andFilter, - function ($value, $key) { - if (!is_callable($value) && !$value instanceof FilterInterface) { - throw new InvalidArgumentException( - 'The value of ' . $key . ' should be either a callable or ' . - 'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface' - ); - } - } - ); - - $this->orFilter = new ArrayObject($orFilter); - $this->andFilter = new ArrayObject($andFilter); - } - - /** - * Add a filter to the composite. Has to be indexed with $name in - * order to identify a specific filter. - * - * This example will exclude all methods from the hydration, that starts with 'getService' - * <code> - * $composite->addFilter('exclude', - * function ($method) { - * if (preg_match('/^getService/', $method) { - * return false; - * } - * return true; - * }, FilterComposite::CONDITION_AND - * ); - * </code> - * - * @param string $name - * @param callable|FilterInterface $filter - * @param int $condition Can be either FilterComposite::CONDITION_OR or FilterComposite::CONDITION_AND - * @throws InvalidArgumentException - * @return FilterComposite - */ - public function addFilter($name, $filter, $condition = self::CONDITION_OR) - { - if (!is_callable($filter) && !($filter instanceof FilterInterface)) { - throw new InvalidArgumentException( - 'The value of ' . $name . ' should be either a callable or ' . - 'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface' - ); - } - - if ($condition === self::CONDITION_OR) { - $this->orFilter[$name] = $filter; - } elseif ($condition === self::CONDITION_AND) { - $this->andFilter[$name] = $filter; - } - - return $this; - } - - /** - * Remove a filter from the composition - * - * @param $name string Identifier for the filter - * @return FilterComposite - */ - public function removeFilter($name) - { - if (isset($this->orFilter[$name])) { - unset($this->orFilter[$name]); - } - - if (isset($this->andFilter[$name])) { - unset($this->andFilter[$name]); - } - - return $this; - } - - /** - * Check if $name has a filter registered - * - * @param $name string Identifier for the filter - * @return bool - */ - public function hasFilter($name) - { - return isset($this->orFilter[$name]) || isset($this->andFilter[$name]); - } - - /** - * Filter the composite based on the AND and OR condition - * Will return true if one from the "or conditions" and all from - * the "and condition" returns true. Otherwise false - * - * @param $property string Parameter will be e.g. Parent\Namespace\Class::method - * @return bool - */ - public function filter($property) - { - $andCount = count($this->andFilter); - $orCount = count($this->orFilter); - // return true if no filters are registered - if ($orCount === 0 && $andCount === 0) { - return true; - } elseif ($orCount === 0 && $andCount !== 0) { - $returnValue = true; - } else { - $returnValue = false; - } - - // Check if 1 from the or filters return true - foreach ($this->orFilter as $filter) { - if (is_callable($filter)) { - if ($filter($property) === true) { - $returnValue = true; - break; - } - continue; - } else { - if ($filter->filter($property) === true) { - $returnValue = true; - break; - } - } - } - - // Check if all of the and condition return true - foreach ($this->andFilter as $filter) { - if (is_callable($filter)) { - if ($filter($property) === false) { - return false; - } - continue; - } else { - if ($filter->filter($property) === false) { - return false; - } - } - } - - return $returnValue; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php deleted file mode 100644 index 16df098f56..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -interface FilterInterface -{ - /** - * Should return true, if the given filter - * does not match - * - * @param string $property The name of the property - * @return bool - */ - public function filter($property); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php deleted file mode 100644 index c2e978877a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -interface FilterProviderInterface -{ - /** - * Provides a filter for hydration - * - * @return FilterInterface - */ - public function getFilter(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php deleted file mode 100644 index b4d898dc22..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -class GetFilter implements FilterInterface -{ - public function filter($property) - { - $pos = strpos($property, '::'); - if ($pos !== false) { - $pos += 2; - } else { - $pos = 0; - } - - if (substr($property, $pos, 3) === 'get') { - return true; - } - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php deleted file mode 100644 index 0cf57f95e1..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -class HasFilter implements FilterInterface -{ - public function filter($property) - { - $pos = strpos($property, '::'); - if ($pos !== false) { - $pos += 2; - } else { - $pos = 0; - } - - if (substr($property, $pos, 3) === 'has') { - return true; - } - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php deleted file mode 100644 index 3b6e376374..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -class IsFilter implements FilterInterface -{ - public function filter($property) - { - $pos = strpos($property, '::'); - if ($pos !== false) { - $pos += 2; - } else { - $pos = 0; - } - - if (substr($property, $pos, 2) === 'is') { - return true; - } - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php deleted file mode 100644 index 2601a6fb31..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -class MethodMatchFilter implements FilterInterface -{ - /** - * The method to exclude - * @var string - */ - protected $method = null; - - /** - * Either an exclude or an include - * @var bool - */ - protected $exclude = null; - - /** - * @param string $method The method to exclude or include - * @param bool $exclude If the method should be excluded - */ - public function __construct($method, $exclude = true) - { - $this->method = $method; - $this->exclude = $exclude; - } - - public function filter($property) - { - $pos = strpos($property, '::'); - if ($pos !== false) { - $pos += 2; - } else { - $pos = 0; - } - if (substr($property, $pos) === $this->method) { - return !$this->exclude; - } - return $this->exclude; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php deleted file mode 100644 index 1254b63b35..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Filter; - -use ReflectionException; -use ReflectionMethod; -use Zend\Stdlib\Exception\InvalidArgumentException; - -class NumberOfParameterFilter implements FilterInterface -{ - /** - * The number of parameters beeing accepted - * @var int - */ - protected $numberOfParameters = null; - - /** - * @param int $numberOfParameters Number of accepted parameters - */ - public function __construct($numberOfParameters = 0) - { - $this->numberOfParameters = (int) $numberOfParameters; - } - - /** - * @param string $property the name of the property - * @return bool - * @throws InvalidArgumentException - */ - public function filter($property) - { - try { - $reflectionMethod = new ReflectionMethod($property); - } catch (ReflectionException $exception) { - throw new InvalidArgumentException( - "Method $property doesn't exist" - ); - } - - return $reflectionMethod->getNumberOfParameters() === $this->numberOfParameters; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php deleted file mode 100644 index ccd67ca54a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Stdlib\Hydrator\Filter; - -use InvalidArgumentException; -use ReflectionException; -use ReflectionMethod; -use ReflectionParameter; - -/** - * Filter that includes methods which have no parameters or only optional parameters - */ -class OptionalParametersFilter implements FilterInterface -{ - /** - * Map of methods already analyzed - * by {@see \Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter::filter()}, - * cached for performance reasons - * - * @var bool[] - */ - protected static $propertiesCache = array(); - - /** - * {@inheritDoc} - */ - public function filter($property) - { - if (isset(static::$propertiesCache[$property])) { - return static::$propertiesCache[$property]; - } - - try { - $reflectionMethod = new ReflectionMethod($property); - } catch (ReflectionException $exception) { - throw new InvalidArgumentException(sprintf('Method %s doesn\'t exist', $property)); - } - - $mandatoryParameters = array_filter( - $reflectionMethod->getParameters(), - function (ReflectionParameter $parameter) { - return ! $parameter->isOptional(); - } - ); - - return static::$propertiesCache[$property] = empty($mandatoryParameters); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php deleted file mode 100644 index 380aade050..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Hydrator\Filter\FilterInterface; -use Zend\Stdlib\Hydrator\Filter\FilterComposite; -use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface; - -interface FilterEnabledInterface extends FilterProviderInterface -{ - /** - * Add a new filter to take care of what needs to be hydrated. - * To exclude e.g. the method getServiceLocator: - * - * <code> - * $composite->addFilter( - * "servicelocator", - * function ($property) { - * list($class, $method) = explode('::', $property); - * if ($method === 'getServiceLocator') { - * return false; - * } - * return true; - * }, - * FilterComposite::CONDITION_AND - * ); - * </code> - * - * @param string $name Index in the composite - * @param callable|FilterInterface $filter - * @param int $condition - * @return FilterComposite - */ - public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR); - - /** - * Check whether a specific filter exists at key $name or not - * - * @param string $name Index in the composite - * @return bool - */ - public function hasFilter($name); - - /** - * Remove a filter from the composition. - * To not extract "has" methods, you simply need to unregister it - * - * <code> - * $filterComposite->removeFilter('has'); - * </code> - * - * @param $name - * @return FilterComposite - */ - public function removeFilter($name); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php deleted file mode 100644 index e7deff491a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -interface HydrationInterface -{ - /** - * Hydrate $object with the provided $data. - * - * @param array $data - * @param object $object - * @return object - */ - public function hydrate(array $data, $object); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php deleted file mode 100644 index d64782ea41..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -interface HydratorAwareInterface -{ - /** - * Set hydrator - * - * @param HydratorInterface $hydrator - * @return HydratorAwareInterface - */ - public function setHydrator(HydratorInterface $hydrator); - - /** - * Retrieve hydrator - * - * @return HydratorInterface - */ - public function getHydrator(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php deleted file mode 100644 index 9c772c277a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -trait HydratorAwareTrait -{ - /** - * Hydrator instance - * - * @var HydratorInterface - * @access protected - */ - protected $hydrator = null; - - /** - * Set hydrator - * - * @param HydratorInterface $hydrator - * @return self - * @access public - */ - public function setHydrator(HydratorInterface $hydrator) - { - $this->hydrator = $hydrator; - - return $this; - } - - /** - * Retrieve hydrator - * - * @param void - * @return null|HydratorInterface - * @access public - */ - public function getHydrator() - { - return $this->hydrator; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php deleted file mode 100644 index bc9983d9a5..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Extractor\ExtractionInterface; - -interface HydratorInterface extends HydrationInterface, ExtractionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php deleted file mode 100644 index 44610f7c1e..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -interface HydratorOptionsInterface -{ - /** - * @param array|\Traversable $options - * @return HydratorOptionsInterface - */ - public function setOptions($options); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php deleted file mode 100644 index 1b238e7ccb..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\ServiceManager\AbstractPluginManager; -use Zend\Stdlib\Exception; - -/** - * Plugin manager implementation for hydrators. - * - * Enforces that adapters retrieved are instances of HydratorInterface - */ -class HydratorPluginManager extends AbstractPluginManager -{ - /** - * Whether or not to share by default - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Default aliases - * - * @var array - */ - protected $aliases = array( - 'delegatinghydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydrator', - ); - - /** - * Default set of adapters - * - * @var array - */ - protected $invokableClasses = array( - 'arrayserializable' => 'Zend\Stdlib\Hydrator\ArraySerializable', - 'classmethods' => 'Zend\Stdlib\Hydrator\ClassMethods', - 'objectproperty' => 'Zend\Stdlib\Hydrator\ObjectProperty', - 'reflection' => 'Zend\Stdlib\Hydrator\Reflection' - ); - - /** - * Default factory-based adapters - * - * @var array - */ - protected $factories = array( - 'Zend\Stdlib\Hydrator\DelegatingHydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydratorFactory', - ); - - /** - * {@inheritDoc} - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof HydratorInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement Zend\Stdlib\Hydrator\HydratorInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)) - )); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php deleted file mode 100644 index 962303ae15..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -final class ArrayMapNamingStrategy implements NamingStrategyInterface -{ - /** - * @var string[] - */ - private $extractionMap = array(); - - /** - * @var string[] - */ - private $hydrationMap = array(); - - /** - * Constructor - * - * @param array $extractionMap A map of string keys and values for symmetric translation of hydrated - * and extracted field names - */ - public function __construct(array $extractionMap) - { - $this->extractionMap = $extractionMap; - $this->hydrationMap = array_flip($extractionMap); - } - - /** - * {@inheritDoc} - */ - public function hydrate($name) - { - return isset($this->hydrationMap[$name]) ? $this->hydrationMap[$name] : $name; - } - - /** - * {@inheritDoc} - */ - public function extract($name) - { - return isset($this->extractionMap[$name]) ? $this->extractionMap[$name] : $name; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php deleted file mode 100644 index 0887e9288b..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -final class CompositeNamingStrategy implements NamingStrategyInterface -{ - /** - * @var array - */ - private $namingStrategies = array(); - - /** - * @var NamingStrategyInterface - */ - private $defaultNamingStrategy; - - /** - * @param NamingStrategyInterface[] $strategies indexed by the name they translate - * @param NamingStrategyInterface|null $defaultNamingStrategy - */ - public function __construct(array $strategies, NamingStrategyInterface $defaultNamingStrategy = null) - { - $this->namingStrategies = array_map( - function (NamingStrategyInterface $strategy) { - // this callback is here only to ensure type-safety - return $strategy; - }, - $strategies - ); - - $this->defaultNamingStrategy = $defaultNamingStrategy ?: new IdentityNamingStrategy(); - } - - /** - * {@inheritDoc} - */ - public function extract($name) - { - $strategy = isset($this->namingStrategies[$name]) - ? $this->namingStrategies[$name] - : $this->defaultNamingStrategy; - - return $strategy->extract($name); - } - - /** - * {@inheritDoc} - */ - public function hydrate($name) - { - $strategy = isset($this->namingStrategies[$name]) - ? $this->namingStrategies[$name] - : $this->defaultNamingStrategy; - - return $strategy->hydrate($name); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php deleted file mode 100644 index ee4b328d34..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -final class IdentityNamingStrategy implements NamingStrategyInterface -{ - /** - * {@inheritDoc} - */ - public function hydrate($name) - { - return $name; - } - - /** - * {@inheritDoc} - */ - public function extract($name) - { - return $name; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php deleted file mode 100644 index 27fbf32187..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -use Zend\Stdlib\Exception\InvalidArgumentException; - -class MapNamingStrategy implements NamingStrategyInterface -{ - /** - * Map for hydrate name conversion. - * - * @var array - */ - protected $mapping = array(); - - /** - * Reversed map for extract name conversion. - * - * @var array - */ - protected $reverse = array(); - - /** - * Initialize. - * - * @param array $mapping Map for name conversion on hydration - * @param array $reverse Reverse map for name conversion on extraction - */ - public function __construct(array $mapping, array $reverse = null) - { - $this->mapping = $mapping; - $this->reverse = $reverse ?: $this->flipMapping($mapping); - } - - /** - * Safelly flip mapping array. - * - * @param array $array Array to flip - * @return array Flipped array - * @throws InvalidArgumentException - */ - protected function flipMapping(array $array) - { - array_walk($array, function ($value) { - if (!is_string($value) && !is_int($value)) { - throw new InvalidArgumentException('Mapping array can\'t be flipped because of invalid value'); - } - }); - - return array_flip($array); - } - - /** - * Converts the given name so that it can be extracted by the hydrator. - * - * @param string $name The original name - * @return mixed The hydrated name - */ - public function hydrate($name) - { - if (array_key_exists($name, $this->mapping)) { - return $this->mapping[$name]; - } - - return $name; - } - - /** - * Converts the given name so that it can be hydrated by the hydrator. - * - * @param string $name The original name - * @return mixed The extracted name - */ - public function extract($name) - { - if (array_key_exists($name, $this->reverse)) { - return $this->reverse[$name]; - } - - return $name; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php deleted file mode 100644 index ff99385c19..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -/** - * Allow property extraction / hydration for hydrator - * - * Interface PropertyStrategyInterface - * @package Zend\Stdlib\Hydrator\NamingStrategy - */ -interface NamingStrategyInterface -{ - /** - * Converts the given name so that it can be extracted by the hydrator. - * - * @param string $name The original name - * @param object $object (optional) The original object for context. - * @return mixed The hydrated name - */ - public function hydrate($name); - - /** - * Converts the given name so that it can be hydrated by the hydrator. - * - * @param string $name The original name - * @param array $data (optional) The original data for context. - * @return mixed The extracted name - */ - public function extract($name); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php deleted file mode 100644 index 023b4eec76..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\NamingStrategy; - -use Zend\Filter\FilterChain; - -class UnderscoreNamingStrategy implements NamingStrategyInterface -{ - /** - * @var FilterChain|null - */ - protected static $camelCaseToUnderscoreFilter; - - /** - * @var FilterChain|null - */ - protected static $underscoreToStudlyCaseFilter; - - /** - * Remove underscores and capitalize letters - * - * @param string $name - * @return string - */ - public function hydrate($name) - { - return $this->getUnderscoreToStudlyCaseFilter()->filter($name); - } - - /** - * Remove capitalized letters and prepend underscores. - * - * @param string $name - * @return string - */ - public function extract($name) - { - return $this->getCamelCaseToUnderscoreFilter()->filter($name); - } - - /** - * @return FilterChain - */ - protected function getUnderscoreToStudlyCaseFilter() - { - if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) { - return static::$underscoreToStudlyCaseFilter; - } - - $filter = new FilterChain(); - - $filter->attachByName('WordUnderscoreToStudlyCase'); - - return static::$underscoreToStudlyCaseFilter = $filter; - } - - /** - * @return FilterChain - */ - protected function getCamelCaseToUnderscoreFilter() - { - if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) { - return static::$camelCaseToUnderscoreFilter; - } - - $filter = new FilterChain(); - - $filter->attachByName('WordCamelCaseToUnderscore'); - $filter->attachByName('StringToLower'); - - return static::$camelCaseToUnderscoreFilter = $filter; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php deleted file mode 100644 index f9c6288a76..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface; - -interface NamingStrategyEnabledInterface -{ - /** - * Adds the given naming strategy - * - * @param NamingStrategyInterface $strategy The naming to register. - * @return NamingStrategyEnabledInterface - */ - public function setNamingStrategy(NamingStrategyInterface $strategy); - - /** - * Gets the naming strategy. - * - * @return NamingStrategyInterface - */ - public function getNamingStrategy(); - - /** - * Checks if a naming strategy exists. - * - * @return bool - */ - public function hasNamingStrategy(); - - /** - * Removes the naming with the given name. - * - * @return NamingStrategyEnabledInterface - */ - public function removeNamingStrategy(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php deleted file mode 100644 index c9f5260a5e..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Exception; -use ReflectionClass; -use ReflectionProperty; - -class ObjectProperty extends AbstractHydrator -{ - /** - * @var array[] indexed by class name and then property name - */ - private static $skippedPropertiesCache = array(); - - /** - * {@inheritDoc} - * - * Extracts the accessible non-static properties of the given $object. - * - * @throws Exception\BadMethodCallException for a non-object $object - */ - public function extract($object) - { - if (!is_object($object)) { - throw new Exception\BadMethodCallException( - sprintf('%s expects the provided $object to be a PHP object)', __METHOD__) - ); - } - - $data = get_object_vars($object); - $filter = $this->getFilter(); - - foreach ($data as $name => $value) { - // Filter keys, removing any we don't want - if (! $filter->filter($name)) { - unset($data[$name]); - continue; - } - - // Replace name if extracted differ - $extracted = $this->extractName($name, $object); - - if ($extracted !== $name) { - unset($data[$name]); - $name = $extracted; - } - - $data[$name] = $this->extractValue($name, $value, $object); - } - - return $data; - } - - /** - * {@inheritDoc} - * - * Hydrate an object by populating public properties - * - * Hydrates an object by setting public properties of the object. - * - * @throws Exception\BadMethodCallException for a non-object $object - */ - public function hydrate(array $data, $object) - { - if (!is_object($object)) { - throw new Exception\BadMethodCallException( - sprintf('%s expects the provided $object to be a PHP object)', __METHOD__) - ); - } - - $properties = & self::$skippedPropertiesCache[get_class($object)]; - - if (! isset($properties)) { - $reflection = new ReflectionClass($object); - $properties = array_fill_keys( - array_map( - function (ReflectionProperty $property) { - return $property->getName(); - }, - $reflection->getProperties( - ReflectionProperty::IS_PRIVATE - + ReflectionProperty::IS_PROTECTED - + ReflectionProperty::IS_STATIC - ) - ), - true - ); - } - - foreach ($data as $name => $value) { - $property = $this->hydrateName($name, $data); - - if (isset($properties[$property])) { - continue; - } - - $object->$property = $this->hydrateValue($property, $value, $data); - } - - return $object; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php deleted file mode 100644 index ea8e2d2153..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php +++ /dev/null @@ -1,95 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use ReflectionClass; -use Zend\Stdlib\Exception; - -class Reflection extends AbstractHydrator -{ - /** - * Simple in-memory array cache of ReflectionProperties used. - * @var \ReflectionProperty[] - */ - protected static $reflProperties = array(); - - /** - * Extract values from an object - * - * @param object $object - * @return array - */ - public function extract($object) - { - $result = array(); - foreach (self::getReflProperties($object) as $property) { - $propertyName = $this->extractName($property->getName(), $object); - if (!$this->filterComposite->filter($propertyName)) { - continue; - } - - $value = $property->getValue($object); - $result[$propertyName] = $this->extractValue($propertyName, $value, $object); - } - - return $result; - } - - /** - * Hydrate $object with the provided $data. - * - * @param array $data - * @param object $object - * @return object - */ - public function hydrate(array $data, $object) - { - $reflProperties = self::getReflProperties($object); - foreach ($data as $key => $value) { - $name = $this->hydrateName($key, $data); - if (isset($reflProperties[$name])) { - $reflProperties[$name]->setValue($object, $this->hydrateValue($name, $value, $data)); - } - } - return $object; - } - - /** - * Get a reflection properties from in-memory cache and lazy-load if - * class has not been loaded. - * - * @param string|object $input - * @throws Exception\InvalidArgumentException - * @return \ReflectionProperty[] - */ - protected static function getReflProperties($input) - { - if (is_object($input)) { - $input = get_class($input); - } elseif (!is_string($input)) { - throw new Exception\InvalidArgumentException('Input must be a string or an object.'); - } - - if (isset(static::$reflProperties[$input])) { - return static::$reflProperties[$input]; - } - - static::$reflProperties[$input] = array(); - $reflClass = new ReflectionClass($input); - $reflProperties = $reflClass->getProperties(); - - foreach ($reflProperties as $property) { - $property->setAccessible(true); - static::$reflProperties[$input][$property->getName()] = $property; - } - - return static::$reflProperties[$input]; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php deleted file mode 100644 index 3c29231f34..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -use Zend\Stdlib\Exception\InvalidArgumentException; - -/** - * This Strategy extracts and hydrates int and string values to Boolean values - * - * @package Zend\Stdlib\Hydrator\Strategy - */ -final class BooleanStrategy implements StrategyInterface -{ - /** - * @var int|string - */ - private $trueValue; - - /** - * @var int|string - */ - private $falseValue; - - /** - * @param int|string $trueValue - * @param int|string $falseValue - * @throws InvalidArgumentException - */ - public function __construct($trueValue, $falseValue) - { - if (!is_int($trueValue) && !is_string($trueValue)) { - throw new InvalidArgumentException(sprintf( - 'Unable to instantiate BooleanStrategy. Expected int or string as $trueValue. %s was given', - is_object($trueValue) ? get_class($trueValue) : gettype($trueValue) - )); - } - - if (!is_int($falseValue) && !is_string($falseValue)) { - throw new InvalidArgumentException(sprintf( - 'Unable to instantiate BooleanStrategy. Expected int or string as $falseValue. %s was given', - is_object($falseValue) ? get_class($falseValue) : gettype($falseValue) - )); - } - - $this->trueValue = $trueValue; - $this->falseValue = $falseValue; - } - - /** - * Converts the given value so that it can be extracted by the hydrator. - * - * @param bool $value The original value. - * @throws InvalidArgumentException - * @return int|string Returns the value that should be extracted. - */ - public function extract($value) - { - if (!is_bool($value)) { - throw new InvalidArgumentException(sprintf( - 'Unable to extract. Expected bool. %s was given.', - is_object($value) ? get_class($value) : gettype($value) - )); - } - - return $value === true ? $this->trueValue : $this->falseValue; - } - - /** - * Converts the given value so that it can be hydrated by the hydrator. - * - * @param int|string $value The original value. - * @throws InvalidArgumentException - * @return bool Returns the value that should be hydrated. - */ - public function hydrate($value) - { - if (!is_string($value) && !is_int($value)) { - throw new InvalidArgumentException(sprintf( - 'Unable to hydrate. Expected string or int. %s was given.', - is_object($value) ? get_class($value) : gettype($value) - )); - } - - if ($value === $this->trueValue) { - return true; - } - - if ($value === $this->falseValue) { - return false; - } - - throw new InvalidArgumentException(sprintf( - 'Unexpected value %s can\'t be hydrated. Expect %s or %s as Value.', - $value, - $this->trueValue, - $this->falseValue - )); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php deleted file mode 100644 index bf456a7fc4..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php +++ /dev/null @@ -1,102 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -class ClosureStrategy implements StrategyInterface -{ - /** - * Function, used in extract method, default: - * function ($value) { - * return $value; - * }; - * @var callable - */ - protected $extractFunc = null; - - /** - * Function, used in hydrate method, default: - * function ($value) { - * return $value; - * }; - * @var callable - */ - protected $hydrateFunc = null; - - /** - * You can describe how your values will extract and hydrate, like this: - * $hydrator->addStrategy('category', new ClosureStrategy( - * function (Category $value) { - * return (int) $value->id; - * }, - * function ($value) { - * return new Category((int) $value); - * } - * )); - * - * @param callable $extractFunc - anonymous function, that extract values - * from object - * @param callable $hydrateFunc - anonymous function, that hydrate values - * into object - */ - public function __construct($extractFunc = null, $hydrateFunc = null) - { - if (isset($extractFunc)) { - if (!is_callable($extractFunc)) { - throw new \Exception('$extractFunc must be callable'); - } - - $this->extractFunc = $extractFunc; - } else { - $this->extractFunc = function ($value) { - return $value; - }; - } - - if (isset($hydrateFunc)) { - if (!is_callable($hydrateFunc)) { - throw new \Exception('$hydrateFunc must be callable'); - } - - $this->hydrateFunc = $hydrateFunc; - } else { - $this->hydrateFunc = function ($value) { - return $value; - }; - } - } - - /** - * Converts the given value so that it can be extracted by the hydrator. - * - * @param mixed $value The original value. - * @param array $object The object is optionally provided as context. - * @return mixed Returns the value that should be extracted. - */ - public function extract($value, $object = null) - { - $func = $this->extractFunc; - - return $func($value, $object); - } - - /** - * Converts the given value so that it can be hydrated by the hydrator. - * - * @param mixed $value The original value. - * @param array $data The whole data is optionally provided as context. - * @return mixed Returns the value that should be hydrated. - */ - public function hydrate($value, $data = null) - { - $func = $this->hydrateFunc; - - return $func($value, $data); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php deleted file mode 100644 index 62d92c588b..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -use DateTime; -use DateTimeZone; - -final class DateTimeFormatterStrategy implements StrategyInterface -{ - /** - * @var string - */ - private $format; - - /** - * @var DateTimeZone|null - */ - private $timezone; - - /** - * Constructor - * - * @param string $format - * @param DateTimeZone|null $timezone - */ - public function __construct($format = DateTime::RFC3339, DateTimeZone $timezone = null) - { - $this->format = (string) $format; - $this->timezone = $timezone; - } - - /** - * {@inheritDoc} - * - * Converts to date time string - * - * @param mixed|DateTime $value - * - * @return mixed|string - */ - public function extract($value) - { - if ($value instanceof DateTime) { - return $value->format($this->format); - } - - return $value; - } - - /** - * Converts date time string to DateTime instance for injecting to object - * - * {@inheritDoc} - * - * @param mixed|string $value - * - * @return mixed|DateTime - */ - public function hydrate($value) - { - if ($value === '' || $value === null) { - return; - } - - if ($this->timezone) { - $hydrated = DateTime::createFromFormat($this->format, $value, $this->timezone); - } else { - $hydrated = DateTime::createFromFormat($this->format, $value); - } - - return $hydrated ?: $value; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php deleted file mode 100644 index b2c5c29b43..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -class DefaultStrategy implements StrategyInterface -{ - /** - * Converts the given value so that it can be extracted by the hydrator. - * - * @param mixed $value The original value. - * @return mixed Returns the value that should be extracted. - */ - public function extract($value) - { - return $value; - } - - /** - * Converts the given value so that it can be hydrated by the hydrator. - * - * @param mixed $value The original value. - * @return mixed Returns the value that should be hydrated. - */ - public function hydrate($value) - { - return $value; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php deleted file mode 100644 index c7b576ce3c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy\Exception; - -interface ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php deleted file mode 100644 index 2e6510df45..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy\Exception; - -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php deleted file mode 100644 index 49ec9c24b5..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -final class ExplodeStrategy implements StrategyInterface -{ - /** - * @var string - */ - private $valueDelimiter; - - /** - * @var int|null - */ - private $explodeLimit; - - /** - * Constructor - * - * @param string $delimiter String that the values will be split upon - * @param int|null $explodeLimit Explode limit - */ - public function __construct($delimiter = ',', $explodeLimit = null) - { - $this->setValueDelimiter($delimiter); - - $this->explodeLimit = ($explodeLimit === null) ? null : (int) $explodeLimit; - } - - /** - * Sets the delimiter string that the values will be split upon - * - * @param string $delimiter - * @return self - */ - private function setValueDelimiter($delimiter) - { - if (!is_string($delimiter)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects Delimiter to be string, %s provided instead', - __METHOD__, - is_object($delimiter) ? get_class($delimiter) : gettype($delimiter) - )); - } - - if (empty($delimiter)) { - throw new Exception\InvalidArgumentException('Delimiter cannot be empty.'); - } - - $this->valueDelimiter = $delimiter; - } - - /** - * {@inheritDoc} - * - * Split a string by delimiter - * - * @param string|null $value - * - * @return string[] - * - * @throws Exception\InvalidArgumentException - */ - public function hydrate($value) - { - if (null === $value) { - return array(); - } - - if (!(is_string($value) || is_numeric($value))) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects argument 1 to be string, %s provided instead', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - if ($this->explodeLimit !== null) { - return explode($this->valueDelimiter, $value, $this->explodeLimit); - } - - return explode($this->valueDelimiter, $value); - } - - /** - * {@inheritDoc} - * - * Join array elements with delimiter - * - * @param string[] $value The original value. - * - * @return string|null - */ - public function extract($value) - { - if (!is_array($value)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects argument 1 to be array, %s provided instead', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - return empty($value) ? null : implode($this->valueDelimiter, $value); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php deleted file mode 100644 index 260efa3087..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -use Zend\Stdlib\Exception\InvalidArgumentException; -use Zend\Serializer\Adapter\AdapterInterface as SerializerAdapter; -use Zend\Serializer\Serializer as SerializerFactory; - -class SerializableStrategy implements StrategyInterface -{ - /** - * @var string|SerializerAdapter - */ - protected $serializer; - - /** - * @var array - */ - protected $serializerOptions = array(); - - /** - * - * @param mixed $serializer string or SerializerAdapter - * @param mixed $serializerOptions - */ - public function __construct($serializer, $serializerOptions = null) - { - $this->setSerializer($serializer); - if ($serializerOptions) { - $this->setSerializerOptions($serializerOptions); - } - } - - /** - * Serialize the given value so that it can be extracted by the hydrator. - * - * @param mixed $value The original value. - * @return mixed Returns the value that should be extracted. - */ - public function extract($value) - { - $serializer = $this->getSerializer(); - return $serializer->serialize($value); - } - - /** - * Unserialize the given value so that it can be hydrated by the hydrator. - * - * @param mixed $value The original value. - * @return mixed Returns the value that should be hydrated. - */ - public function hydrate($value) - { - $serializer = $this->getSerializer(); - return $serializer->unserialize($value); - } - - /** - * Set serializer - * - * @param string|SerializerAdapter $serializer - * @return SerializableStrategy - */ - public function setSerializer($serializer) - { - if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) { - throw new InvalidArgumentException(sprintf( - '%s expects either a string serializer name or Zend\Serializer\Adapter\AdapterInterface instance; ' - . 'received "%s"', - __METHOD__, - (is_object($serializer) ? get_class($serializer) : gettype($serializer)) - )); - } - $this->serializer = $serializer; - return $this; - } - - /** - * Get serializer - * - * @return SerializerAdapter - */ - public function getSerializer() - { - if (is_string($this->serializer)) { - $options = $this->getSerializerOptions(); - $this->setSerializer(SerializerFactory::factory($this->serializer, $options)); - } elseif (null === $this->serializer) { - $this->setSerializer(SerializerFactory::getDefaultAdapter()); - } - - return $this->serializer; - } - - /** - * Set configuration options for instantiating a serializer adapter - * - * @param mixed $serializerOptions - * @return SerializableStrategy - */ - public function setSerializerOptions($serializerOptions) - { - $this->serializerOptions = $serializerOptions; - return $this; - } - - /** - * Get configuration options for instantiating a serializer adapter - * - * @return mixed - */ - public function getSerializerOptions() - { - return $this->serializerOptions; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php deleted file mode 100644 index a9316bbd7c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -final class StrategyChain implements StrategyInterface -{ - /** - * Strategy chain for extraction - * - * @var StrategyInterface[] - */ - private $extractionStrategies; - - /** - * Strategy chain for hydration - * - * @var StrategyInterface[] - */ - private $hydrationStrategies; - - /** - * Constructor - * - * @param array|Traversable $extractionStrategies - */ - public function __construct($extractionStrategies) - { - $extractionStrategies = ArrayUtils::iteratorToArray($extractionStrategies); - $this->extractionStrategies = array_map( - function (StrategyInterface $strategy) { - // this callback is here only to ensure type-safety - return $strategy; - }, - $extractionStrategies - ); - - $this->hydrationStrategies = array_reverse($extractionStrategies); - } - - /** - * {@inheritDoc} - */ - public function extract($value) - { - foreach ($this->extractionStrategies as $strategy) { - $value = $strategy->extract($value); - } - - return $value; - } - - /** - * {@inheritDoc} - */ - public function hydrate($value) - { - foreach ($this->hydrationStrategies as $strategy) { - $value = $strategy->hydrate($value); - } - - return $value; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php deleted file mode 100644 index 562ec4bd6c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator\Strategy; - -/** - * @todo v3.0, add optional object/data to extract/hydrate. - */ -interface StrategyInterface -{ - /** - * Converts the given value so that it can be extracted by the hydrator. - * - * @param mixed $value The original value. - * @param object $object (optional) The original object for context. - * @return mixed Returns the value that should be extracted. - */ - public function extract($value); - - /** - * Converts the given value so that it can be hydrated by the hydrator. - * - * @param mixed $value The original value. - * @param array $data (optional) The original data for context. - * @return mixed Returns the value that should be hydrated. - */ - public function hydrate($value); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php deleted file mode 100644 index 6f29b16a6d..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\Hydrator; - -use Zend\Stdlib\Hydrator\Strategy\StrategyInterface; - -interface StrategyEnabledInterface -{ - /** - * Adds the given strategy under the given name. - * - * @param string $name The name of the strategy to register. - * @param StrategyInterface $strategy The strategy to register. - * @return StrategyEnabledInterface - */ - public function addStrategy($name, StrategyInterface $strategy); - - /** - * Gets the strategy with the given name. - * - * @param string $name The name of the strategy to get. - * @return StrategyInterface - */ - public function getStrategy($name); - - /** - * Checks if the strategy with the given name exists. - * - * @param string $name The name of the strategy to check for. - * @return bool - */ - public function hasStrategy($name); - - /** - * Removes the strategy with the given name. - * - * @param string $name The name of the strategy to remove. - * @return StrategyEnabledInterface - */ - public function removeStrategy($name); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php deleted file mode 100644 index f78bedef30..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -/** - * Interface to allow objects to have initialization logic - */ -interface InitializableInterface -{ - /** - * Init an object - * - * @return void - */ - public function init(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php b/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php deleted file mode 100644 index 6d6c2abe87..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -if (PHP_VERSION_ID < 50400) { - class_alias( - 'Zend\Stdlib\JsonSerializable\PhpLegacyCompatibility', - 'JsonSerializable' - ); -} - -/** - * Polyfill for JsonSerializable - * - * JsonSerializable was introduced in PHP 5.4.0. - * - * @see http://php.net/manual/class.jsonserializable.php - */ -interface JsonSerializable extends \JsonSerializable -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php b/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php deleted file mode 100644 index ecc7525d4c..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\JsonSerializable; - -/** - * Interface compatible with the built-in JsonSerializable interface - * - * JsonSerializable was introduced in PHP 5.4.0. - * - * @see http://php.net/manual/class.jsonserializable.php - */ -interface PhpLegacyCompatibility -{ - /** - * Returns data which can be serialized by json_encode(). - * - * @return mixed - * @see http://php.net/manual/jsonserializable.jsonserialize.php - */ - public function jsonSerialize(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Message.php b/civicrm/vendor/zendframework/zend-stdlib/src/Message.php deleted file mode 100644 index 63ba7c7303..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Message.php +++ /dev/null @@ -1,118 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Traversable; - -class Message implements MessageInterface -{ - /** - * @var array - */ - protected $metadata = array(); - - /** - * @var string - */ - protected $content = ''; - - /** - * Set message metadata - * - * Non-destructive setting of message metadata; always adds to the metadata, never overwrites - * the entire metadata container. - * - * @param string|int|array|Traversable $spec - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return Message - */ - public function setMetadata($spec, $value = null) - { - if (is_scalar($spec)) { - $this->metadata[$spec] = $value; - return $this; - } - if (!is_array($spec) && !$spec instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected a string, array, or Traversable argument in first position; received "%s"', - (is_object($spec) ? get_class($spec) : gettype($spec)) - )); - } - foreach ($spec as $key => $value) { - $this->metadata[$key] = $value; - } - return $this; - } - - /** - * Retrieve all metadata or a single metadatum as specified by key - * - * @param null|string|int $key - * @param null|mixed $default - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function getMetadata($key = null, $default = null) - { - if (null === $key) { - return $this->metadata; - } - - if (!is_scalar($key)) { - throw new Exception\InvalidArgumentException('Non-scalar argument provided for key'); - } - - if (array_key_exists($key, $this->metadata)) { - return $this->metadata[$key]; - } - - return $default; - } - - /** - * Set message content - * - * @param mixed $value - * @return Message - */ - public function setContent($value) - { - $this->content = $value; - return $this; - } - - /** - * Get message content - * - * @return mixed - */ - public function getContent() - { - return $this->content; - } - - /** - * @return string - */ - public function toString() - { - $request = ''; - foreach ($this->getMetadata() as $key => $value) { - $request .= sprintf( - "%s: %s\r\n", - (string) $key, - (string) $value - ); - } - $request .= "\r\n" . $this->getContent(); - return $request; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php deleted file mode 100644 index 28d8857fcd..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface MessageInterface -{ - /** - * Set metadata - * - * @param string|int|array|\Traversable $spec - * @param mixed $value - */ - public function setMetadata($spec, $value = null); - - /** - * Get metadata - * - * @param null|string|int $key - * @return mixed - */ - public function getMetadata($key = null); - - /** - * Set content - * - * @param mixed $content - * @return mixed - */ - public function setContent($content); - - /** - * Get content - * - * @return mixed - */ - public function getContent(); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php deleted file mode 100644 index 676a6e2b99..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface ParameterObjectInterface -{ - /** - * @param string $key - * @param mixed $value - * @return void - */ - public function __set($key, $value); - - /** - * @param string $key - * @return mixed - */ - public function __get($key); - - /** - * @param string $key - * @return bool - */ - public function __isset($key); - - /** - * @param string $key - * @return void - */ - public function __unset($key); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php b/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php deleted file mode 100644 index bef834a8a0..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ArrayObject as PhpArrayObject; - -class Parameters extends PhpArrayObject implements ParametersInterface -{ - /** - * Constructor - * - * Enforces that we have an array, and enforces parameter access to array - * elements. - * - * @param array $values - */ - public function __construct(array $values = null) - { - if (null === $values) { - $values = array(); - } - parent::__construct($values, ArrayObject::ARRAY_AS_PROPS); - } - - /** - * Populate from native PHP array - * - * @param array $values - * @return void - */ - public function fromArray(array $values) - { - $this->exchangeArray($values); - } - - /** - * Populate from query string - * - * @param string $string - * @return void - */ - public function fromString($string) - { - $array = array(); - parse_str($string, $array); - $this->fromArray($array); - } - - /** - * Serialize to native PHP array - * - * @return array - */ - public function toArray() - { - return $this->getArrayCopy(); - } - - /** - * Serialize to query string - * - * @return string - */ - public function toString() - { - return http_build_query($this); - } - - /** - * Retrieve by key - * - * Returns null if the key does not exist. - * - * @param string $name - * @return mixed - */ - public function offsetGet($name) - { - if ($this->offsetExists($name)) { - return parent::offsetGet($name); - } - return; - } - - /** - * @param string $name - * @param mixed $default optional default value - * @return mixed - */ - public function get($name, $default = null) - { - if ($this->offsetExists($name)) { - return parent::offsetGet($name); - } - return $default; - } - - /** - * @param string $name - * @param mixed $value - * @return Parameters - */ - public function set($name, $value) - { - $this[$name] = $value; - return $this; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php deleted file mode 100644 index feeda58073..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use ArrayAccess; -use Countable; -use Serializable; -use Traversable; - -/* - * Basically, an ArrayObject. You could simply define something like: - * class QueryParams extends ArrayObject implements Parameters {} - * and have 90% of the functionality - */ -interface ParametersInterface extends ArrayAccess, Countable, Serializable, Traversable -{ - /** - * Constructor - * - * @param array $values - */ - public function __construct(array $values = null); - - /** - * From array - * - * Allow deserialization from standard array - * - * @param array $values - * @return mixed - */ - public function fromArray(array $values); - - /** - * From string - * - * Allow deserialization from raw body; e.g., for PUT requests - * - * @param $string - * @return mixed - */ - public function fromString($string); - - /** - * To array - * - * Allow serialization back to standard array - * - * @return mixed - */ - public function toArray(); - - /** - * To string - * - * Allow serialization to query format; e.g., for PUT or POST requests - * - * @return mixed - */ - public function toString(); - - /** - * Get - * - * @param string $name - * @param mixed|null $default - * @return mixed - */ - public function get($name, $default = null); - - /** - * Set - * - * @param string $name - * @param mixed $value - * @return ParametersInterface - */ - public function set($name, $value); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php b/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php deleted file mode 100644 index 45aa2d8f6a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php +++ /dev/null @@ -1,274 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Countable; -use Iterator; - -class PriorityList implements Iterator, Countable -{ - const EXTR_DATA = 0x00000001; - const EXTR_PRIORITY = 0x00000002; - const EXTR_BOTH = 0x00000003; - /** - * Internal list of all items. - * - * @var array[] - */ - protected $items = array(); - - /** - * Serial assigned to items to preserve LIFO. - * - * @var int - */ - protected $serial = 0; - - /** - * Serial order mode - * @var integer - */ - protected $isLIFO = 1; - - /** - * Internal counter to avoid usage of count(). - * - * @var int - */ - protected $count = 0; - - /** - * Whether the list was already sorted. - * - * @var bool - */ - protected $sorted = false; - - /** - * Insert a new item. - * - * @param string $name - * @param mixed $value - * @param int $priority - * - * @return void - */ - public function insert($name, $value, $priority = 0) - { - if (!isset($this->items[$name])) { - $this->count++; - } - - $this->sorted = false; - - $this->items[$name] = array( - 'data' => $value, - 'priority' => (int) $priority, - 'serial' => $this->serial++, - ); - } - - /** - * @param string $name - * @param int $priority - * - * @return $this - * - * @throws \Exception - */ - public function setPriority($name, $priority) - { - if (!isset($this->items[$name])) { - throw new \Exception("item $name not found"); - } - - $this->items[$name]['priority'] = (int) $priority; - $this->sorted = false; - - return $this; - } - - /** - * Remove a item. - * - * @param string $name - * @return void - */ - public function remove($name) - { - if (isset($this->items[$name])) { - $this->count--; - } - - unset($this->items[$name]); - } - - /** - * Remove all items. - * - * @return void - */ - public function clear() - { - $this->items = array(); - $this->serial = 0; - $this->count = 0; - $this->sorted = false; - } - - /** - * Get a item. - * - * @param string $name - * @return mixed - */ - public function get($name) - { - if (!isset($this->items[$name])) { - return; - } - - return $this->items[$name]['data']; - } - - /** - * Sort all items. - * - * @return void - */ - protected function sort() - { - if (!$this->sorted) { - uasort($this->items, array($this, 'compare')); - $this->sorted = true; - } - } - - /** - * Compare the priority of two items. - * - * @param array $item1, - * @param array $item2 - * @return int - */ - protected function compare(array $item1, array $item2) - { - return ($item1['priority'] === $item2['priority']) - ? ($item1['serial'] > $item2['serial'] ? -1 : 1) * $this->isLIFO - : ($item1['priority'] > $item2['priority'] ? -1 : 1); - } - - /** - * Get/Set serial order mode - * - * @param bool|null $flag - * - * @return bool - */ - public function isLIFO($flag = null) - { - if ($flag !== null) { - $isLifo = $flag === true ? 1 : -1; - - if ($isLifo !== $this->isLIFO) { - $this->isLIFO = $isLifo; - $this->sorted = false; - } - } - - return 1 === $this->isLIFO; - } - - /** - * {@inheritDoc} - */ - public function rewind() - { - $this->sort(); - reset($this->items); - } - - /** - * {@inheritDoc} - */ - public function current() - { - $this->sorted || $this->sort(); - $node = current($this->items); - - return $node ? $node['data'] : false; - } - - /** - * {@inheritDoc} - */ - public function key() - { - $this->sorted || $this->sort(); - return key($this->items); - } - - /** - * {@inheritDoc} - */ - public function next() - { - $node = next($this->items); - - return $node ? $node['data'] : false; - } - - /** - * {@inheritDoc} - */ - public function valid() - { - return current($this->items) !== false; - } - - /** - * @return self - */ - public function getIterator() - { - return clone $this; - } - - /** - * {@inheritDoc} - */ - public function count() - { - return $this->count; - } - - /** - * Return list as array - * - * @param int $flag - * - * @return array - */ - public function toArray($flag = self::EXTR_DATA) - { - $this->sort(); - - if ($flag == self::EXTR_BOTH) { - return $this->items; - } - - return array_map( - function ($item) use ($flag) { - return ($flag == PriorityList::EXTR_PRIORITY) ? $item['priority'] : $item['data']; - }, - $this->items - ); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php deleted file mode 100644 index 1baf44e895..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php +++ /dev/null @@ -1,301 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Countable; -use IteratorAggregate; -use Serializable; - -/** - * Re-usable, serializable priority queue implementation - * - * SplPriorityQueue acts as a heap; on iteration, each item is removed from the - * queue. If you wish to re-use such a queue, you need to clone it first. This - * makes for some interesting issues if you wish to delete items from the queue, - * or, as already stated, iterate over it multiple times. - * - * This class aggregates items for the queue itself, but also composes an - * "inner" iterator in the form of an SplPriorityQueue object for performing - * the actual iteration. - */ -class PriorityQueue implements Countable, IteratorAggregate, Serializable -{ - const EXTR_DATA = 0x00000001; - const EXTR_PRIORITY = 0x00000002; - const EXTR_BOTH = 0x00000003; - - /** - * Inner queue class to use for iteration - * @var string - */ - protected $queueClass = 'Zend\Stdlib\SplPriorityQueue'; - - /** - * Actual items aggregated in the priority queue. Each item is an array - * with keys "data" and "priority". - * @var array - */ - protected $items = array(); - - /** - * Inner queue object - * @var SplPriorityQueue - */ - protected $queue; - - /** - * Insert an item into the queue - * - * Priority defaults to 1 (low priority) if none provided. - * - * @param mixed $data - * @param int $priority - * @return PriorityQueue - */ - public function insert($data, $priority = 1) - { - $priority = (int) $priority; - $this->items[] = array( - 'data' => $data, - 'priority' => $priority, - ); - $this->getQueue()->insert($data, $priority); - return $this; - } - - /** - * Remove an item from the queue - * - * This is different than {@link extract()}; its purpose is to dequeue an - * item. - * - * This operation is potentially expensive, as it requires - * re-initialization and re-population of the inner queue. - * - * Note: this removes the first item matching the provided item found. If - * the same item has been added multiple times, it will not remove other - * instances. - * - * @param mixed $datum - * @return bool False if the item was not found, true otherwise. - */ - public function remove($datum) - { - $found = false; - foreach ($this->items as $key => $item) { - if ($item['data'] === $datum) { - $found = true; - break; - } - } - if ($found) { - unset($this->items[$key]); - $this->queue = null; - - if (!$this->isEmpty()) { - $queue = $this->getQueue(); - foreach ($this->items as $item) { - $queue->insert($item['data'], $item['priority']); - } - } - return true; - } - return false; - } - - /** - * Is the queue empty? - * - * @return bool - */ - public function isEmpty() - { - return (0 === $this->count()); - } - - /** - * How many items are in the queue? - * - * @return int - */ - public function count() - { - return count($this->items); - } - - /** - * Peek at the top node in the queue, based on priority. - * - * @return mixed - */ - public function top() - { - return $this->getIterator()->top(); - } - - /** - * Extract a node from the inner queue and sift up - * - * @return mixed - */ - public function extract() - { - return $this->getQueue()->extract(); - } - - /** - * Retrieve the inner iterator - * - * SplPriorityQueue acts as a heap, which typically implies that as items - * are iterated, they are also removed. This does not work for situations - * where the queue may be iterated multiple times. As such, this class - * aggregates the values, and also injects an SplPriorityQueue. This method - * retrieves the inner queue object, and clones it for purposes of - * iteration. - * - * @return SplPriorityQueue - */ - public function getIterator() - { - $queue = $this->getQueue(); - return clone $queue; - } - - /** - * Serialize the data structure - * - * @return string - */ - public function serialize() - { - return serialize($this->items); - } - - /** - * Unserialize a string into a PriorityQueue object - * - * Serialization format is compatible with {@link Zend\Stdlib\SplPriorityQueue} - * - * @param string $data - * @return void - */ - public function unserialize($data) - { - foreach (unserialize($data) as $item) { - $this->insert($item['data'], $item['priority']); - } - } - - /** - * Serialize to an array - * - * By default, returns only the item data, and in the order registered (not - * sorted). You may provide one of the EXTR_* flags as an argument, allowing - * the ability to return priorities or both data and priority. - * - * @param int $flag - * @return array - */ - public function toArray($flag = self::EXTR_DATA) - { - switch ($flag) { - case self::EXTR_BOTH: - return $this->items; - case self::EXTR_PRIORITY: - return array_map(function ($item) { - return $item['priority']; - }, $this->items); - case self::EXTR_DATA: - default: - return array_map(function ($item) { - return $item['data']; - }, $this->items); - } - } - - /** - * Specify the internal queue class - * - * Please see {@link getIterator()} for details on the necessity of an - * internal queue class. The class provided should extend SplPriorityQueue. - * - * @param string $class - * @return PriorityQueue - */ - public function setInternalQueueClass($class) - { - $this->queueClass = (string) $class; - return $this; - } - - /** - * Does the queue contain the given datum? - * - * @param mixed $datum - * @return bool - */ - public function contains($datum) - { - foreach ($this->items as $item) { - if ($item['data'] === $datum) { - return true; - } - } - return false; - } - - /** - * Does the queue have an item with the given priority? - * - * @param int $priority - * @return bool - */ - public function hasPriority($priority) - { - foreach ($this->items as $item) { - if ($item['priority'] === $priority) { - return true; - } - } - return false; - } - - /** - * Get the inner priority queue instance - * - * @throws Exception\DomainException - * @return SplPriorityQueue - */ - protected function getQueue() - { - if (null === $this->queue) { - $this->queue = new $this->queueClass(); - if (!$this->queue instanceof \SplPriorityQueue) { - throw new Exception\DomainException(sprintf( - 'PriorityQueue expects an internal queue of type SplPriorityQueue; received "%s"', - get_class($this->queue) - )); - } - } - return $this->queue; - } - - /** - * Add support for deep cloning - * - * @return void - */ - public function __clone() - { - if (null !== $this->queue) { - $this->queue = clone $this->queue; - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Request.php b/civicrm/vendor/zendframework/zend-stdlib/src/Request.php deleted file mode 100644 index 7c0840395e..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Request.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -class Request extends Message implements RequestInterface -{ - // generic request implementation -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php deleted file mode 100644 index c2bac316d4..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface RequestInterface extends MessageInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Response.php b/civicrm/vendor/zendframework/zend-stdlib/src/Response.php deleted file mode 100644 index f3074bad5e..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/Response.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -class Response extends Message implements ResponseInterface -{ - // generic response implementation -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php deleted file mode 100644 index fe94d3043a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -interface ResponseInterface extends MessageInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php deleted file mode 100644 index 029d8e9f05..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Serializable; - -/** - * Serializable version of SplPriorityQueue - * - * Also, provides predictable heap order for datums added with the same priority - * (i.e., they will be emitted in the same order they are enqueued). - */ -class SplPriorityQueue extends \SplPriorityQueue implements Serializable -{ - /** - * @var int Seed used to ensure queue order for items of the same priority - */ - protected $serial = PHP_INT_MAX; - - /** - * Insert a value with a given priority - * - * Utilizes {@var $serial} to ensure that values of equal priority are - * emitted in the same order in which they are inserted. - * - * @param mixed $datum - * @param mixed $priority - * @return void - */ - public function insert($datum, $priority) - { - if (!is_array($priority)) { - $priority = array($priority, $this->serial--); - } - parent::insert($datum, $priority); - } - - /** - * Serialize to an array - * - * Array will be priority => data pairs - * - * @return array - */ - public function toArray() - { - $array = array(); - foreach (clone $this as $item) { - $array[] = $item; - } - return $array; - } - - /** - * Serialize - * - * @return string - */ - public function serialize() - { - $clone = clone $this; - $clone->setExtractFlags(self::EXTR_BOTH); - - $data = array(); - foreach ($clone as $item) { - $data[] = $item; - } - - return serialize($data); - } - - /** - * Deserialize - * - * @param string $data - * @return void - */ - public function unserialize($data) - { - foreach (unserialize($data) as $item) { - $this->insert($item['data'], $item['priority']); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php deleted file mode 100644 index 029bc9f127..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Serializable; - -/** - * Serializable version of SplQueue - */ -class SplQueue extends \SplQueue implements Serializable -{ - /** - * Return an array representing the queue - * - * @return array - */ - public function toArray() - { - $array = array(); - foreach ($this as $item) { - $array[] = $item; - } - return $array; - } - - /** - * Serialize - * - * @return string - */ - public function serialize() - { - return serialize($this->toArray()); - } - - /** - * Unserialize - * - * @param string $data - * @return void - */ - public function unserialize($data) - { - foreach (unserialize($data) as $item) { - $this->push($item); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php deleted file mode 100644 index fac77a5d04..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Serializable; - -/** - * Serializable version of SplStack - */ -class SplStack extends \SplStack implements Serializable -{ - /** - * Serialize to an array representing the stack - * - * @return array - */ - public function toArray() - { - $array = array(); - foreach ($this as $item) { - $array[] = $item; - } - return $array; - } - - /** - * Serialize - * - * @return string - */ - public function serialize() - { - return serialize($this->toArray()); - } - - /** - * Unserialize - * - * @param string $data - * @return void - */ - public function unserialize($data) - { - foreach (unserialize($data) as $item) { - $this->unshift($item); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php deleted file mode 100644 index 9bbb4a46e3..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php +++ /dev/null @@ -1,187 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib; - -use Zend\Stdlib\StringWrapper\StringWrapperInterface; - -/** - * Utility class for handling strings of different character encodings - * using available PHP extensions. - * - * Declared abstract, as we have no need for instantiation. - */ -abstract class StringUtils -{ - /** - * Ordered list of registered string wrapper instances - * - * @var StringWrapperInterface[] - */ - protected static $wrapperRegistry = null; - - /** - * A list of known single-byte character encodings (upper-case) - * - * @var string[] - */ - protected static $singleByteEncodings = array( - 'ASCII', '7BIT', '8BIT', - 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', - 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10', - 'ISO-8859-11', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16', - 'CP-1251', 'CP-1252', - // TODO - ); - - /** - * Is PCRE compiled with Unicode support? - * - * @var bool - **/ - protected static $hasPcreUnicodeSupport = null; - - /** - * Get registered wrapper classes - * - * @return string[] - */ - public static function getRegisteredWrappers() - { - if (static::$wrapperRegistry === null) { - static::$wrapperRegistry = array(); - - if (extension_loaded('intl')) { - static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Intl'; - } - - if (extension_loaded('mbstring')) { - static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\MbString'; - } - - if (extension_loaded('iconv')) { - static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Iconv'; - } - - static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Native'; - } - - return static::$wrapperRegistry; - } - - /** - * Register a string wrapper class - * - * @param string $wrapper - * @return void - */ - public static function registerWrapper($wrapper) - { - $wrapper = (string) $wrapper; - if (!in_array($wrapper, static::$wrapperRegistry, true)) { - static::$wrapperRegistry[] = $wrapper; - } - } - - /** - * Unregister a string wrapper class - * - * @param string $wrapper - * @return void - */ - public static function unregisterWrapper($wrapper) - { - $index = array_search((string) $wrapper, static::$wrapperRegistry, true); - if ($index !== false) { - unset(static::$wrapperRegistry[$index]); - } - } - - /** - * Reset all registered wrappers so the default wrappers will be used - * - * @return void - */ - public static function resetRegisteredWrappers() - { - static::$wrapperRegistry = null; - } - - /** - * Get the first string wrapper supporting the given character encoding - * and supports to convert into the given convert encoding. - * - * @param string $encoding Character encoding to support - * @param string|null $convertEncoding OPTIONAL character encoding to convert in - * @return StringWrapperInterface - * @throws Exception\RuntimeException If no wrapper supports given character encodings - */ - public static function getWrapper($encoding = 'UTF-8', $convertEncoding = null) - { - foreach (static::getRegisteredWrappers() as $wrapperClass) { - if ($wrapperClass::isSupported($encoding, $convertEncoding)) { - $wrapper = new $wrapperClass($encoding, $convertEncoding); - $wrapper->setEncoding($encoding, $convertEncoding); - return $wrapper; - } - } - - throw new Exception\RuntimeException( - 'No wrapper found supporting "' . $encoding . '"' - . (($convertEncoding !== null) ? ' and "' . $convertEncoding . '"' : '') - ); - } - - /** - * Get a list of all known single-byte character encodings - * - * @return string[] - */ - public static function getSingleByteEncodings() - { - return static::$singleByteEncodings; - } - - /** - * Check if a given encoding is a known single-byte character encoding - * - * @param string $encoding - * @return bool - */ - public static function isSingleByteEncoding($encoding) - { - return in_array(strtoupper($encoding), static::$singleByteEncodings); - } - - /** - * Check if a given string is valid UTF-8 encoded - * - * @param string $str - * @return bool - */ - public static function isValidUtf8($str) - { - return is_string($str) && ($str === '' || preg_match('/^./su', $str) == 1); - } - - /** - * Is PCRE compiled with Unicode support? - * - * @return bool - */ - public static function hasPcreUnicodeSupport() - { - if (static::$hasPcreUnicodeSupport === null) { - ErrorHandler::start(); - static::$hasPcreUnicodeSupport = defined('PREG_BAD_UTF8_OFFSET_ERROR') && preg_match('/\pL/u', 'a') == 1; - ErrorHandler::stop(); - } - return static::$hasPcreUnicodeSupport; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php deleted file mode 100644 index 3e395ccc5a..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php +++ /dev/null @@ -1,269 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -use Zend\Stdlib\Exception; -use Zend\Stdlib\StringUtils; - -abstract class AbstractStringWrapper implements StringWrapperInterface -{ - /** - * The character encoding working on - * @var string|null - */ - protected $encoding = 'UTF-8'; - - /** - * An optionally character encoding to convert to - * @var string|null - */ - protected $convertEncoding; - - /** - * Check if the given character encoding is supported by this wrapper - * and the character encoding to convert to is also supported. - * - * @param string $encoding - * @param string|null $convertEncoding - * @return bool - */ - public static function isSupported($encoding, $convertEncoding = null) - { - $supportedEncodings = static::getSupportedEncodings(); - - if (!in_array(strtoupper($encoding), $supportedEncodings)) { - return false; - } - - if ($convertEncoding !== null && !in_array(strtoupper($convertEncoding), $supportedEncodings)) { - return false; - } - - return true; - } - - /** - * Set character encoding working with and convert to - * - * @param string $encoding The character encoding to work with - * @param string|null $convertEncoding The character encoding to convert to - * @return StringWrapperInterface - */ - public function setEncoding($encoding, $convertEncoding = null) - { - $supportedEncodings = static::getSupportedEncodings(); - - $encodingUpper = strtoupper($encoding); - if (!in_array($encodingUpper, $supportedEncodings)) { - throw new Exception\InvalidArgumentException( - 'Wrapper doesn\'t support character encoding "' . $encoding . '"' - ); - } - - if ($convertEncoding !== null) { - $convertEncodingUpper = strtoupper($convertEncoding); - if (!in_array($convertEncodingUpper, $supportedEncodings)) { - throw new Exception\InvalidArgumentException( - 'Wrapper doesn\'t support character encoding "' . $convertEncoding . '"' - ); - } - - $this->convertEncoding = $convertEncodingUpper; - } else { - $this->convertEncoding = null; - } - $this->encoding = $encodingUpper; - - return $this; - } - - /** - * Get the defined character encoding to work with - * - * @return string - * @throws Exception\LogicException If no encoding was defined - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Get the defined character encoding to convert to - * - * @return string|null - */ - public function getConvertEncoding() - { - return $this->convertEncoding; - } - - /** - * Convert a string from defined character encoding to the defined convert encoding - * - * @param string $str - * @param bool $reverse - * @return string|false - */ - public function convert($str, $reverse = false) - { - $encoding = $this->getEncoding(); - $convertEncoding = $this->getConvertEncoding(); - if ($convertEncoding === null) { - throw new Exception\LogicException( - 'No convert encoding defined' - ); - } - - if ($encoding === $convertEncoding) { - return $str; - } - - $from = $reverse ? $convertEncoding : $encoding; - $to = $reverse ? $encoding : $convertEncoding; - throw new Exception\RuntimeException(sprintf( - 'Converting from "%s" to "%s" isn\'t supported by this string wrapper', - $from, - $to - )); - } - - /** - * Wraps a string to a given number of characters - * - * @param string $string - * @param int $width - * @param string $break - * @param bool $cut - * @return string|false - */ - public function wordWrap($string, $width = 75, $break = "\n", $cut = false) - { - $string = (string) $string; - if ($string === '') { - return ''; - } - - $break = (string) $break; - if ($break === '') { - throw new Exception\InvalidArgumentException('Break string cannot be empty'); - } - - $width = (int) $width; - if ($width === 0 && $cut) { - throw new Exception\InvalidArgumentException('Cannot force cut when width is zero'); - } - - if (StringUtils::isSingleByteEncoding($this->getEncoding())) { - return wordwrap($string, $width, $break, $cut); - } - - $stringWidth = $this->strlen($string); - $breakWidth = $this->strlen($break); - - $result = ''; - $lastStart = $lastSpace = 0; - - for ($current = 0; $current < $stringWidth; $current++) { - $char = $this->substr($string, $current, 1); - - $possibleBreak = $char; - if ($breakWidth !== 1) { - $possibleBreak = $this->substr($string, $current, $breakWidth); - } - - if ($possibleBreak === $break) { - $result .= $this->substr($string, $lastStart, $current - $lastStart + $breakWidth); - $current += $breakWidth - 1; - $lastStart = $lastSpace = $current + 1; - continue; - } - - if ($char === ' ') { - if ($current - $lastStart >= $width) { - $result .= $this->substr($string, $lastStart, $current - $lastStart) . $break; - $lastStart = $current + 1; - } - - $lastSpace = $current; - continue; - } - - if ($current - $lastStart >= $width && $cut && $lastStart >= $lastSpace) { - $result .= $this->substr($string, $lastStart, $current - $lastStart) . $break; - $lastStart = $lastSpace = $current; - continue; - } - - if ($current - $lastStart >= $width && $lastStart < $lastSpace) { - $result .= $this->substr($string, $lastStart, $lastSpace - $lastStart) . $break; - $lastStart = $lastSpace = $lastSpace + 1; - continue; - } - } - - if ($lastStart !== $current) { - $result .= $this->substr($string, $lastStart, $current - $lastStart); - } - - return $result; - } - - /** - * Pad a string to a certain length with another string - * - * @param string $input - * @param int $padLength - * @param string $padString - * @param int $padType - * @return string - */ - public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT) - { - if (StringUtils::isSingleByteEncoding($this->getEncoding())) { - return str_pad($input, $padLength, $padString, $padType); - } - - $lengthOfPadding = $padLength - $this->strlen($input); - if ($lengthOfPadding <= 0) { - return $input; - } - - $padStringLength = $this->strlen($padString); - if ($padStringLength === 0) { - return $input; - } - - $repeatCount = floor($lengthOfPadding / $padStringLength); - - if ($padType === STR_PAD_BOTH) { - $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2; - - $lastStringLength = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength; - $lastStringLeftLength = $lastStringRightLength = floor($lastStringLength / 2); - $lastStringRightLength += $lastStringLength % 2; - - $lastStringLeft = $this->substr($padString, 0, $lastStringLeftLength); - $lastStringRight = $this->substr($padString, 0, $lastStringRightLength); - - return str_repeat($padString, $repeatCountLeft) . $lastStringLeft - . $input - . str_repeat($padString, $repeatCountRight) . $lastStringRight; - } - - $lastString = $this->substr($padString, 0, $lengthOfPadding % $padStringLength); - - if ($padType === STR_PAD_LEFT) { - return str_repeat($padString, $repeatCount) . $lastString . $input; - } - - return $input . str_repeat($padString, $repeatCount) . $lastString; - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php deleted file mode 100644 index 04930ff453..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php +++ /dev/null @@ -1,289 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -use Zend\Stdlib\Exception; - -class Iconv extends AbstractStringWrapper -{ - /** - * List of supported character sets (upper case) - * - * @var string[] - * @link http://www.gnu.org/software/libiconv/ - */ - protected static $encodings = array( - // European languages - 'ASCII', - 'ISO-8859-1', - 'ISO-8859-2', - 'ISO-8859-3', - 'ISO-8859-4', - 'ISO-8859-5', - 'ISO-8859-7', - 'ISO-8859-9', - 'ISO-8859-10', - 'ISO-8859-13', - 'ISO-8859-14', - 'ISO-8859-15', - 'ISO-8859-16', - 'KOI8-R', - 'KOI8-U', - 'KOI8-RU', - 'CP1250', - 'CP1251', - 'CP1252', - 'CP1253', - 'CP1254', - 'CP1257', - 'CP850', - 'CP866', - 'CP1131', - 'MACROMAN', - 'MACCENTRALEUROPE', - 'MACICELAND', - 'MACCROATIAN', - 'MACROMANIA', - 'MACCYRILLIC', - 'MACUKRAINE', - 'MACGREEK', - 'MACTURKISH', - 'MACINTOSH', - - // Semitic languages - 'ISO-8859-6', - 'ISO-8859-8', - 'CP1255', - 'CP1256', - 'CP862', - 'MACHEBREW', - 'MACARABIC', - - // Japanese - 'EUC-JP', - 'SHIFT_JIS', - 'CP932', - 'ISO-2022-JP', - 'ISO-2022-JP-2', - 'ISO-2022-JP-1', - - // Chinese - 'EUC-CN', - 'HZ', - 'GBK', - 'CP936', - 'GB18030', - 'EUC-TW', - 'BIG5', - 'CP950', - 'BIG5-HKSCS', - 'BIG5-HKSCS:2004', - 'BIG5-HKSCS:2001', - 'BIG5-HKSCS:1999', - 'ISO-2022-CN', - 'ISO-2022-CN-EXT', - - // Korean - 'EUC-KR', - 'CP949', - 'ISO-2022-KR', - 'JOHAB', - - // Armenian - 'ARMSCII-8', - - // Georgian - 'GEORGIAN-ACADEMY', - 'GEORGIAN-PS', - - // Tajik - 'KOI8-T', - - // Kazakh - 'PT154', - 'RK1048', - - // Thai - 'ISO-8859-11', - 'TIS-620', - 'CP874', - 'MACTHAI', - - // Laotian - 'MULELAO-1', - 'CP1133', - - // Vietnamese - 'VISCII', - 'TCVN', - 'CP1258', - - // Platform specifics - 'HP-ROMAN8', - 'NEXTSTEP', - - // Full Unicode - 'UTF-8', - 'UCS-2', - 'UCS-2BE', - 'UCS-2LE', - 'UCS-4', - 'UCS-4BE', - 'UCS-4LE', - 'UTF-16', - 'UTF-16BE', - 'UTF-16LE', - 'UTF-32', - 'UTF-32BE', - 'UTF-32LE', - 'UTF-7', - 'C99', - 'JAVA', - - /* Commented out because that's internal encodings not existing in real world - // Full Unicode, in terms of uint16_t or uint32_t (with machine dependent endianness and alignment) - 'UCS-2-INTERNAL', - 'UCS-4-INTERNAL', - - // Locale dependent, in terms of `char' or `wchar_t' (with machine dependent endianness and alignment, - // and with OS and locale dependent semantics) - 'char', - 'wchar_t', - '', // The empty encoding name is equivalent to "char": it denotes the locale dependent character encoding. - */ - - // When configured with the option --enable-extra-encodings, - // it also provides support for a few extra encodings: - - // European languages - 'CP437', - 'CP737', - 'CP775', - 'CP852', - 'CP853', - 'CP855', - 'CP857', - 'CP858', - 'CP860', - 'CP861', - 'CP863', - 'CP865', - 'CP869', - 'CP1125', - - // Semitic languages - 'CP864', - - // Japanese - 'EUC-JISX0213', - 'Shift_JISX0213', - 'ISO-2022-JP-3', - - // Chinese - 'BIG5-2003', // (experimental) - - // Turkmen - 'TDS565', - - // Platform specifics - 'ATARIST', - 'RISCOS-LATIN1', - ); - - /** - * Get a list of supported character encodings - * - * @return string[] - */ - public static function getSupportedEncodings() - { - return static::$encodings; - } - - /** - * Constructor - * - * @throws Exception\ExtensionNotLoadedException - */ - public function __construct() - { - if (!extension_loaded('iconv')) { - throw new Exception\ExtensionNotLoadedException( - 'PHP extension "iconv" is required for this wrapper' - ); - } - } - - /** - * Returns the length of the given string - * - * @param string $str - * @return int|false - */ - public function strlen($str) - { - return iconv_strlen($str, $this->getEncoding()); - } - - /** - * Returns the portion of string specified by the start and length parameters - * - * @param string $str - * @param int $offset - * @param int|null $length - * @return string|false - */ - public function substr($str, $offset = 0, $length = null) - { - return iconv_substr($str, $offset, $length, $this->getEncoding()); - } - - /** - * Find the position of the first occurrence of a substring in a string - * - * @param string $haystack - * @param string $needle - * @param int $offset - * @return int|false - */ - public function strpos($haystack, $needle, $offset = 0) - { - return iconv_strpos($haystack, $needle, $offset, $this->getEncoding()); - } - - /** - * Convert a string from defined encoding to the defined convert encoding - * - * @param string $str - * @param bool $reverse - * @return string|false - */ - public function convert($str, $reverse = false) - { - $encoding = $this->getEncoding(); - $convertEncoding = $this->getConvertEncoding(); - if ($convertEncoding === null) { - throw new Exception\LogicException( - 'No convert encoding defined' - ); - } - - if ($encoding === $convertEncoding) { - return $str; - } - - $fromEncoding = $reverse ? $convertEncoding : $encoding; - $toEncoding = $reverse ? $encoding : $convertEncoding; - - // automatically add "//IGNORE" to not stop converting on invalid characters - // invalid characters triggers a notice anyway - return iconv($fromEncoding, $toEncoding . '//IGNORE', $str); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php deleted file mode 100644 index 1b01277367..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -use Zend\Stdlib\Exception; - -class Intl extends AbstractStringWrapper -{ - /** - * List of supported character sets (upper case) - * - * @var string[] - */ - protected static $encodings = array('UTF-8'); - - /** - * Get a list of supported character encodings - * - * @return string[] - */ - public static function getSupportedEncodings() - { - return static::$encodings; - } - - /** - * Constructor - * - * @throws Exception\ExtensionNotLoadedException - */ - public function __construct() - { - if (!extension_loaded('intl')) { - throw new Exception\ExtensionNotLoadedException( - 'PHP extension "intl" is required for this wrapper' - ); - } - } - - /** - * Returns the length of the given string - * - * @param string $str - * @return int|false - */ - public function strlen($str) - { - return grapheme_strlen($str); - } - - /** - * Returns the portion of string specified by the start and length parameters - * - * @param string $str - * @param int $offset - * @param int|null $length - * @return string|false - */ - public function substr($str, $offset = 0, $length = null) - { - // Due fix of PHP #62759 The third argument returns an empty string if is 0 or null. - if ($length !== null) { - return grapheme_substr($str, $offset, $length); - } - - return grapheme_substr($str, $offset); - } - - /** - * Find the position of the first occurrence of a substring in a string - * - * @param string $haystack - * @param string $needle - * @param int $offset - * @return int|false - */ - public function strpos($haystack, $needle, $offset = 0) - { - return grapheme_strpos($haystack, $needle, $offset); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php deleted file mode 100644 index d6db18566d..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -use Zend\Stdlib\Exception; - -class MbString extends AbstractStringWrapper -{ - /** - * List of supported character sets (upper case) - * - * @var null|string[] - * @link http://php.net/manual/mbstring.supported-encodings.php - */ - protected static $encodings = null; - - /** - * Get a list of supported character encodings - * - * @return string[] - */ - public static function getSupportedEncodings() - { - if (static::$encodings === null) { - static::$encodings = array_map('strtoupper', mb_list_encodings()); - - // FIXME: Converting € (UTF-8) to ISO-8859-16 gives a wrong result - $indexIso885916 = array_search('ISO-8859-16', static::$encodings, true); - if ($indexIso885916 !== false) { - unset(static::$encodings[$indexIso885916]); - } - } - - return static::$encodings; - } - - /** - * Constructor - * - * @throws Exception\ExtensionNotLoadedException - */ - public function __construct() - { - if (!extension_loaded('mbstring')) { - throw new Exception\ExtensionNotLoadedException( - 'PHP extension "mbstring" is required for this wrapper' - ); - } - } - - /** - * Returns the length of the given string - * - * @param string $str - * @return int|false - */ - public function strlen($str) - { - return mb_strlen($str, $this->getEncoding()); - } - - /** - * Returns the portion of string specified by the start and length parameters - * - * @param string $str - * @param int $offset - * @param int|null $length - * @return string|false - */ - public function substr($str, $offset = 0, $length = null) - { - return mb_substr($str, $offset, $length, $this->getEncoding()); - } - - /** - * Find the position of the first occurrence of a substring in a string - * - * @param string $haystack - * @param string $needle - * @param int $offset - * @return int|false - */ - public function strpos($haystack, $needle, $offset = 0) - { - return mb_strpos($haystack, $needle, $offset, $this->getEncoding()); - } - - /** - * Convert a string from defined encoding to the defined convert encoding - * - * @param string $str - * @param bool $reverse - * @return string|false - */ - public function convert($str, $reverse = false) - { - $encoding = $this->getEncoding(); - $convertEncoding = $this->getConvertEncoding(); - - if ($convertEncoding === null) { - throw new Exception\LogicException( - 'No convert encoding defined' - ); - } - - if ($encoding === $convertEncoding) { - return $str; - } - - $fromEncoding = $reverse ? $convertEncoding : $encoding; - $toEncoding = $reverse ? $encoding : $convertEncoding; - return mb_convert_encoding($str, $toEncoding, $fromEncoding); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php deleted file mode 100644 index 38b3c10a41..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php +++ /dev/null @@ -1,134 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -use Zend\Stdlib\Exception; -use Zend\Stdlib\StringUtils; - -class Native extends AbstractStringWrapper -{ - /** - * The character encoding working on - * (overwritten to change defaut encoding) - * - * @var string - */ - protected $encoding = 'ASCII'; - - /** - * Check if the given character encoding is supported by this wrapper - * and the character encoding to convert to is also supported. - * - * @param string $encoding - * @param string|null $convertEncoding - * @return bool - */ - public static function isSupported($encoding, $convertEncoding = null) - { - $encodingUpper = strtoupper($encoding); - $supportedEncodings = static::getSupportedEncodings(); - - if (!in_array($encodingUpper, $supportedEncodings)) { - return false; - } - - // This adapter doesn't support to convert between encodings - if ($convertEncoding !== null && $encodingUpper !== strtoupper($convertEncoding)) { - return false; - } - - return true; - } - - /** - * Get a list of supported character encodings - * - * @return string[] - */ - public static function getSupportedEncodings() - { - return StringUtils::getSingleByteEncodings(); - } - - /** - * Set character encoding working with and convert to - * - * @param string $encoding The character encoding to work with - * @param string|null $convertEncoding The character encoding to convert to - * @return StringWrapperInterface - */ - public function setEncoding($encoding, $convertEncoding = null) - { - $supportedEncodings = static::getSupportedEncodings(); - - $encodingUpper = strtoupper($encoding); - if (!in_array($encodingUpper, $supportedEncodings)) { - throw new Exception\InvalidArgumentException( - 'Wrapper doesn\'t support character encoding "' . $encoding . '"' - ); - } - - if ($encodingUpper !== strtoupper($convertEncoding)) { - $this->convertEncoding = $encodingUpper; - } - - if ($convertEncoding !== null) { - if ($encodingUpper !== strtoupper($convertEncoding)) { - throw new Exception\InvalidArgumentException( - 'Wrapper doesn\'t support to convert between character encodings' - ); - } - - $this->convertEncoding = $encodingUpper; - } else { - $this->convertEncoding = null; - } - $this->encoding = $encodingUpper; - - return $this; - } - - /** - * Returns the length of the given string - * - * @param string $str - * @return int|false - */ - public function strlen($str) - { - return strlen($str); - } - - /** - * Returns the portion of string specified by the start and length parameters - * - * @param string $str - * @param int $offset - * @param int|null $length - * @return string|false - */ - public function substr($str, $offset = 0, $length = null) - { - return substr($str, $offset, $length); - } - - /** - * Find the position of the first occurrence of a substring in a string - * - * @param string $haystack - * @param string $needle - * @param int $offset - * @return int|false - */ - public function strpos($haystack, $needle, $offset = 0) - { - return strpos($haystack, $needle, $offset); - } -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php deleted file mode 100644 index f25b3253fc..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Stdlib\StringWrapper; - -interface StringWrapperInterface -{ - /** - * Check if the given character encoding is supported by this wrapper - * and the character encoding to convert to is also supported. - * - * @param string $encoding - * @param string|null $convertEncoding - */ - public static function isSupported($encoding, $convertEncoding = null); - - /** - * Get a list of supported character encodings - * - * @return string[] - */ - public static function getSupportedEncodings(); - - /** - * Set character encoding working with and convert to - * - * @param string $encoding The character encoding to work with - * @param string|null $convertEncoding The character encoding to convert to - * @return StringWrapperInterface - */ - public function setEncoding($encoding, $convertEncoding = null); - - /** - * Get the defined character encoding to work with (upper case) - * - * @return string - */ - public function getEncoding(); - - /** - * Get the defined character encoding to convert to (upper case) - * - * @return string|null - */ - public function getConvertEncoding(); - - /** - * Returns the length of the given string - * - * @param string $str - * @return int|false - */ - public function strlen($str); - - /** - * Returns the portion of string specified by the start and length parameters - * - * @param string $str - * @param int $offset - * @param int|null $length - * @return string|false - */ - public function substr($str, $offset = 0, $length = null); - - /** - * Find the position of the first occurrence of a substring in a string - * - * @param string $haystack - * @param string $needle - * @param int $offset - * @return int|false - */ - public function strpos($haystack, $needle, $offset = 0); - - /** - * Convert a string from defined encoding to the defined convert encoding - * - * @param string $str - * @param bool $reverse - * @return string|false - */ - public function convert($str, $reverse = false); - - /** - * Wraps a string to a given number of characters - * - * @param string $str - * @param int $width - * @param string $break - * @param bool $cut - * @return string - */ - public function wordWrap($str, $width = 75, $break = "\n", $cut = false); - - /** - * Pad a string to a certain length with another string - * - * @param string $input - * @param int $padLength - * @param string $padString - * @param int $padType - * @return string - */ - public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT); -} diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php b/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php deleted file mode 100644 index f8670cc16b..0000000000 --- a/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - * @deprecated - */ - -/** - * Legacy purposes only, to prevent code that references it from breaking. - */ -trigger_error('Polyfill autoload support (file library/Zend/Stdlib/compatibility/autoload.php) is no longer necessary; please remove your require statement referencing this file', E_USER_DEPRECATED); diff --git a/civicrm/vendor/zendframework/zend-validator/.coveralls.yml b/civicrm/vendor/zendframework/zend-validator/.coveralls.yml deleted file mode 100644 index 53bda829c8..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/.coveralls.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage_clover: clover.xml -json_path: coveralls-upload.json -src_dir: src diff --git a/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md b/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md deleted file mode 100644 index ef9b738565..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md +++ /dev/null @@ -1,27 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 2.4.8 - 2015-09-08 - -### Added - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- [#25](https://github.com/zendframework/zend-validator/pull/25) updates the - `Date` validator to perform checks against `DateTimeImmutable` instead of - `DateTimeInterface` (as the latter has engine-level restrictions against - when it is valid for type hints). -- [#35](https://github.com/zendframework/zend-validator/pull/35) ensures that - the default behavior of the `NotEmpty` validator is to treat `0.0` as - non-empty. diff --git a/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md b/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md deleted file mode 100644 index f465f00784..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md +++ /dev/null @@ -1,229 +0,0 @@ -# CONTRIBUTING - -## RESOURCES - -If you wish to contribute to Zend Framework, please be sure to -read/subscribe to the following resources: - - - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards) - - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide) - - ZF Contributor's mailing list: - Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html - Subscribe: zf-contributors-subscribe@lists.zend.com - - ZF Contributor's IRC channel: - #zftalk.dev on Freenode.net - -If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-validator/issues/new). - -## Reporting Potential Security Issues - -If you have encountered a potential security vulnerability, please **DO NOT** report it on the public -issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead. -We will work with you to verify the vulnerability and patch it as soon as possible. - -When reporting issues, please provide the following information: - -- Component(s) affected -- A description indicating how to reproduce the issue -- A summary of the security vulnerability and impact - -We request that you contact us via the email address above and give the project -contributors a chance to resolve the vulnerability and issue a new release prior -to any public exposure; this helps protect users and provides them with a chance -to upgrade and/or update in order to protect their applications. - -For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc). - -## RUNNING TESTS - -> ### Note: testing versions prior to 2.4 -> -> This component originates with Zend Framework 2. During the lifetime of ZF2, -> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no -> changes were necessary. However, due to the migration, tests may not run on -> versions < 2.4. As such, you may need to change the PHPUnit dependency if -> attempting a fix on such a version. - -To run tests: - -- Clone the repository: - - ```console - $ git clone git@github.com:zendframework/zend-validator.git - $ cd - ``` - -- Install dependencies via composer: - - ```console - $ curl -sS https://getcomposer.org/installer | php -- - $ ./composer.phar install - ``` - - If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/ - -- Run the tests via `phpunit` and the provided PHPUnit config, like in this example: - - ```console - $ ./vendor/bin/phpunit - ``` - -You can turn on conditional tests with the phpunit.xml file. -To do so: - - - Copy `phpunit.xml.dist` file to `phpunit.xml` - - Edit `phpunit.xml` to enable any specific functionality you - want to test, as well as to provide test values to utilize. - -## Running Coding Standards Checks - -This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding -standards checks, and provides configuration for our selected checks. -`php-cs-fixer` is installed by default via Composer. - -To run checks only: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs -``` - -To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run` -flag: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs -``` - -If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure -they pass, and make sure you add and commit the changes after verification. - -## Recommended Workflow for Contributions - -Your first step is to establish a public repository from which we can -pull your work into the master repository. We recommend using -[GitHub](https://github.com), as that is where the component is already hosted. - -1. Setup a [GitHub account](http://github.com/), if you haven't yet -2. Fork the repository (http://github.com/zendframework/zend-validator) -3. Clone the canonical repository locally and enter it. - - ```console - $ git clone git://github.com:zendframework/zend-validator.git - $ cd zend-validator - ``` - -4. Add a remote to your fork; substitute your GitHub username in the command - below. - - ```console - $ git remote add {username} git@github.com:{username}/zend-validator.git - $ git fetch {username} - ``` - -### Keeping Up-to-Date - -Periodically, you should update your fork or personal repository to -match the canonical ZF repository. Assuming you have setup your local repository -per the instructions above, you can do the following: - - -```console -$ git checkout master -$ git fetch origin -$ git rebase origin/master -# OPTIONALLY, to keep your remote up-to-date - -$ git push {username} master:master -``` - -If you're tracking other branches -- for example, the "develop" branch, where -new feature development occurs -- you'll want to do the same operations for that -branch; simply substitute "develop" for "master". - -### Working on a patch - -We recommend you do each new feature or bugfix in a new branch. This simplifies -the task of code review as well as the task of merging your changes into the -canonical repository. - -A typical workflow will then consist of the following: - -1. Create a new local branch based off either your master or develop branch. -2. Switch to your new local branch. (This step can be combined with the - previous step with the use of `git checkout -b`.) -3. Do some work, commit, repeat as necessary. -4. Push the local branch to your remote repository. -5. Send a pull request. - -The mechanics of this process are actually quite trivial. Below, we will -create a branch for fixing an issue in the tracker. - -```console -$ git checkout -b hotfix/9295 -Switched to a new branch 'hotfix/9295' -``` - -... do some work ... - - -```console -$ git commit -``` - -... write your log message ... - - -```console -$ git push {username} hotfix/9295:hotfix/9295 -Counting objects: 38, done. -Delta compression using up to 2 threads. -Compression objects: 100% (18/18), done. -Writing objects: 100% (20/20), 8.19KiB, done. -Total 20 (delta 12), reused 0 (delta 0) -To ssh://git@github.com/{username}/zend-validator.git - b5583aa..4f51698 HEAD -> master -``` - -To send a pull request, you have two options. - -If using GitHub, you can do the pull request from there. Navigate to -your repository, select the branch you just created, and then select the -"Pull Request" button in the upper right. Select the user/organization -"zendframework" as the recipient. - -If using your own repository - or even if using GitHub - you can use `git -format-patch` to create a patchset for us to apply; in fact, this is -**recommended** for security-related patches. If you use `format-patch`, please -send the patches as attachments to: - -- zf-devteam@zend.com for patches without security implications -- zf-security@zend.com for security patches - -#### What branch to issue the pull request against? - -Which branch should you issue a pull request against? - -- For fixes against the stable release, issue the pull request against the - "master" branch. -- For new features, or fixes that introduce new elements to the public API (such - as new public methods or properties), issue the pull request against the - "develop" branch. - -### Branch Cleanup - -As you might imagine, if you are a frequent contributor, you'll start to -get a ton of branches both locally and on your remote. - -Once you know that your changes have been accepted to the master -repository, we suggest doing some cleanup of these branches. - -- Local branch cleanup - - ```console - $ git branch -d <branchname> - ``` - -- Remote branch removal - - ```console - $ git push {username} :<branchname> - ``` diff --git a/civicrm/vendor/zendframework/zend-validator/LICENSE.txt b/civicrm/vendor/zendframework/zend-validator/LICENSE.txt deleted file mode 100644 index 6eab5aa14f..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/LICENSE.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2005-2015, Zend Technologies USA, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of Zend Technologies USA, Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/civicrm/vendor/zendframework/zend-validator/README.md b/civicrm/vendor/zendframework/zend-validator/README.md deleted file mode 100644 index 72506d2667..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# zend-validator - -The `Zend\Validator` component provides a set of commonly needed validators. It -also provides a simple validator chaining mechanism by which multiple validators -may be applied to a single datum in a user-defined order. - - -- File issues at https://github.com/zendframework/zend-validator/issues -- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-validator diff --git a/civicrm/vendor/zendframework/zend-validator/composer.json b/civicrm/vendor/zendframework/zend-validator/composer.json deleted file mode 100644 index 8d213f0c1e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/composer.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "zendframework/zend-validator", - "description": "provides a set of commonly needed validators", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "validator" - ], - "homepage": "https://github.com/zendframework/zend-validator", - "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" - } - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "~2.4.0" - }, - "require-dev": { - "zendframework/zend-config": "~2.4.0", - "zendframework/zend-db": "~2.4.0", - "zendframework/zend-filter": "~2.4.0", - "zendframework/zend-i18n": "~2.4.0", - "zendframework/zend-math": "~2.4.0", - "zendframework/zend-servicemanager": "~2.4.0", - "zendframework/zend-session": "~2.4.0", - "zendframework/zend-uri": "~2.4.0", - "fabpot/php-cs-fixer": "1.7.*", - "satooshi/php-coveralls": "dev-master", - "phpunit/PHPUnit": "~4.0" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" - }, - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "autoload-dev": { - "psr-4": { - "ZendTest\\Validator\\": "test/" - } - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist b/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist deleted file mode 100644 index f53d218332..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-validator Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - <const name="TESTS_ZEND_VALIDATOR_ONLINE_ENABLED" value="false" /> - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis b/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis deleted file mode 100644 index f53d218332..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-validator Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - <const name="TESTS_ZEND_VALIDATOR_ONLINE_ENABLED" value="false" /> - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php b/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php deleted file mode 100644 index 93af2cab46..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php +++ /dev/null @@ -1,574 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -abstract class AbstractValidator implements - Translator\TranslatorAwareInterface, - ValidatorInterface -{ - /** - * The value to be validated - * - * @var mixed - */ - protected $value; - - /** - * Default translation object for all validate objects - * @var Translator\TranslatorInterface - */ - protected static $defaultTranslator; - - /** - * Default text domain to be used with translator - * @var string - */ - protected static $defaultTranslatorTextDomain = 'default'; - - /** - * Limits the maximum returned length of an error message - * - * @var int - */ - protected static $messageLength = -1; - - protected $abstractOptions = array( - 'messages' => array(), // Array of validation failure messages - 'messageTemplates' => array(), // Array of validation failure message templates - 'messageVariables' => array(), // Array of additional variables available for validation failure messages - 'translator' => null, // Translation object to used -> Translator\TranslatorInterface - 'translatorTextDomain' => null, // Translation text domain - 'translatorEnabled' => true, // Is translation enabled? - 'valueObscured' => false, // Flag indicating whether or not value should be obfuscated - // in error messages - ); - - /** - * Abstract constructor for all validators - * A validator should accept following parameters: - * - nothing f.e. Validator() - * - one or multiple scalar values f.e. Validator($first, $second, $third) - * - an array f.e. Validator(array($first => 'first', $second => 'second', $third => 'third')) - * - an instance of Traversable f.e. Validator($config_instance) - * - * @param array|Traversable $options - */ - public function __construct($options = null) - { - // The abstract constructor allows no scalar values - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (isset($this->messageTemplates)) { - $this->abstractOptions['messageTemplates'] = $this->messageTemplates; - } - - if (isset($this->messageVariables)) { - $this->abstractOptions['messageVariables'] = $this->messageVariables; - } - - if (is_array($options)) { - $this->setOptions($options); - } - } - - /** - * Returns an option - * - * @param string $option Option to be returned - * @return mixed Returned option - * @throws Exception\InvalidArgumentException - */ - public function getOption($option) - { - if (array_key_exists($option, $this->abstractOptions)) { - return $this->abstractOptions[$option]; - } - - if (isset($this->options) && array_key_exists($option, $this->options)) { - return $this->options[$option]; - } - - throw new Exception\InvalidArgumentException("Invalid option '$option'"); - } - - /** - * Returns all available options - * - * @return array Array with all available options - */ - public function getOptions() - { - $result = $this->abstractOptions; - if (isset($this->options)) { - $result += $this->options; - } - return $result; - } - - /** - * Sets one or multiple options - * - * @param array|Traversable $options Options to set - * @throws Exception\InvalidArgumentException If $options is not an array or Traversable - * @return AbstractValidator Provides fluid interface - */ - public function setOptions($options = array()) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable'); - } - - foreach ($options as $name => $option) { - $fname = 'set' . ucfirst($name); - $fname2 = 'is' . ucfirst($name); - if (($name != 'setOptions') && method_exists($this, $name)) { - $this->{$name}($option); - } elseif (($fname != 'setOptions') && method_exists($this, $fname)) { - $this->{$fname}($option); - } elseif (method_exists($this, $fname2)) { - $this->{$fname2}($option); - } elseif (isset($this->options)) { - $this->options[$name] = $option; - } else { - $this->abstractOptions[$name] = $option; - } - } - - return $this; - } - - /** - * Returns array of validation failure messages - * - * @return array - */ - public function getMessages() - { - return array_unique($this->abstractOptions['messages'], SORT_REGULAR); - } - - /** - * Invoke as command - * - * @param mixed $value - * @return bool - */ - public function __invoke($value) - { - return $this->isValid($value); - } - - /** - * Returns an array of the names of variables that are used in constructing validation failure messages - * - * @return array - */ - public function getMessageVariables() - { - return array_keys($this->abstractOptions['messageVariables']); - } - - /** - * Returns the message templates from the validator - * - * @return array - */ - public function getMessageTemplates() - { - return $this->abstractOptions['messageTemplates']; - } - - /** - * Sets the validation failure message template for a particular key - * - * @param string $messageString - * @param string $messageKey OPTIONAL - * @return AbstractValidator Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function setMessage($messageString, $messageKey = null) - { - if ($messageKey === null) { - $keys = array_keys($this->abstractOptions['messageTemplates']); - foreach ($keys as $key) { - $this->setMessage($messageString, $key); - } - return $this; - } - - if (!isset($this->abstractOptions['messageTemplates'][$messageKey])) { - throw new Exception\InvalidArgumentException("No message template exists for key '$messageKey'"); - } - - $this->abstractOptions['messageTemplates'][$messageKey] = $messageString; - return $this; - } - - /** - * Sets validation failure message templates given as an array, where the array keys are the message keys, - * and the array values are the message template strings. - * - * @param array $messages - * @return AbstractValidator - */ - public function setMessages(array $messages) - { - foreach ($messages as $key => $message) { - $this->setMessage($message, $key); - } - return $this; - } - - /** - * Magic function returns the value of the requested property, if and only if it is the value or a - * message variable. - * - * @param string $property - * @return mixed - * @throws Exception\InvalidArgumentException - */ - public function __get($property) - { - if ($property == 'value') { - return $this->value; - } - - if (array_key_exists($property, $this->abstractOptions['messageVariables'])) { - $result = $this->abstractOptions['messageVariables'][$property]; - if (is_array($result)) { - return $this->{key($result)}[current($result)]; - } - return $this->{$result}; - } - - if (isset($this->messageVariables) && array_key_exists($property, $this->messageVariables)) { - $result = $this->{$this->messageVariables[$property]}; - if (is_array($result)) { - return $this->{key($result)}[current($result)]; - } - return $this->{$result}; - } - - throw new Exception\InvalidArgumentException("No property exists by the name '$property'"); - } - - /** - * Constructs and returns a validation failure message with the given message key and value. - * - * Returns null if and only if $messageKey does not correspond to an existing template. - * - * If a translator is available and a translation exists for $messageKey, - * the translation will be used. - * - * @param string $messageKey - * @param string|array|object $value - * @return string - */ - protected function createMessage($messageKey, $value) - { - if (!isset($this->abstractOptions['messageTemplates'][$messageKey])) { - return; - } - - $message = $this->abstractOptions['messageTemplates'][$messageKey]; - - $message = $this->translateMessage($messageKey, $message); - - if (is_object($value) && - !in_array('__toString', get_class_methods($value)) - ) { - $value = get_class($value) . ' object'; - } elseif (is_array($value)) { - $value = var_export($value, 1); - } else { - $value = (string) $value; - } - - if ($this->isValueObscured()) { - $value = str_repeat('*', strlen($value)); - } - - $message = str_replace('%value%', (string) $value, $message); - foreach ($this->abstractOptions['messageVariables'] as $ident => $property) { - if (is_array($property)) { - $value = $this->{key($property)}[current($property)]; - if (is_array($value)) { - $value = '[' . implode(', ', $value) . ']'; - } - } else { - $value = $this->$property; - } - $message = str_replace("%$ident%", (string) $value, $message); - } - - $length = self::getMessageLength(); - if (($length > -1) && (strlen($message) > $length)) { - $message = substr($message, 0, ($length - 3)) . '...'; - } - - return $message; - } - - /** - * @param string $messageKey - * @param string $value OPTIONAL - * @return void - */ - protected function error($messageKey, $value = null) - { - if ($messageKey === null) { - $keys = array_keys($this->abstractOptions['messageTemplates']); - $messageKey = current($keys); - } - - if ($value === null) { - $value = $this->value; - } - - $this->abstractOptions['messages'][$messageKey] = $this->createMessage($messageKey, $value); - } - - /** - * Returns the validation value - * - * @return mixed Value to be validated - */ - protected function getValue() - { - return $this->value; - } - - /** - * Sets the value to be validated and clears the messages and errors arrays - * - * @param mixed $value - * @return void - */ - protected function setValue($value) - { - $this->value = $value; - $this->abstractOptions['messages'] = array(); - } - - /** - * Set flag indicating whether or not value should be obfuscated in messages - * - * @param bool $flag - * @return AbstractValidator - */ - public function setValueObscured($flag) - { - $this->abstractOptions['valueObscured'] = (bool) $flag; - return $this; - } - - /** - * Retrieve flag indicating whether or not value should be obfuscated in - * messages - * - * @return bool - */ - public function isValueObscured() - { - return $this->abstractOptions['valueObscured']; - } - - /** - * Set translation object - * - * @param Translator\TranslatorInterface|null $translator - * @param string $textDomain (optional) - * @return AbstractValidator - * @throws Exception\InvalidArgumentException - */ - public function setTranslator(Translator\TranslatorInterface $translator = null, $textDomain = null) - { - $this->abstractOptions['translator'] = $translator; - if (null !== $textDomain) { - $this->setTranslatorTextDomain($textDomain); - } - return $this; - } - - /** - * Return translation object - * - * @return Translator\TranslatorInterface|null - */ - public function getTranslator() - { - if (! $this->isTranslatorEnabled()) { - return; - } - - if (null === $this->abstractOptions['translator']) { - $this->abstractOptions['translator'] = self::getDefaultTranslator(); - } - - return $this->abstractOptions['translator']; - } - - /** - * Does this validator have its own specific translator? - * - * @return bool - */ - public function hasTranslator() - { - return (bool) $this->abstractOptions['translator']; - } - - /** - * Set translation text domain - * - * @param string $textDomain - * @return AbstractValidator - */ - public function setTranslatorTextDomain($textDomain = 'default') - { - $this->abstractOptions['translatorTextDomain'] = $textDomain; - return $this; - } - - /** - * Return the translation text domain - * - * @return string - */ - public function getTranslatorTextDomain() - { - if (null === $this->abstractOptions['translatorTextDomain']) { - $this->abstractOptions['translatorTextDomain'] = - self::getDefaultTranslatorTextDomain(); - } - return $this->abstractOptions['translatorTextDomain']; - } - - /** - * Set default translation object for all validate objects - * - * @param Translator\TranslatorInterface|null $translator - * @param string $textDomain (optional) - * @return void - * @throws Exception\InvalidArgumentException - */ - public static function setDefaultTranslator(Translator\TranslatorInterface $translator = null, $textDomain = null) - { - static::$defaultTranslator = $translator; - if (null !== $textDomain) { - self::setDefaultTranslatorTextDomain($textDomain); - } - } - - /** - * Get default translation object for all validate objects - * - * @return Translator\TranslatorInterface|null - */ - public static function getDefaultTranslator() - { - return static::$defaultTranslator; - } - - /** - * Is there a default translation object set? - * - * @return bool - */ - public static function hasDefaultTranslator() - { - return (bool) static::$defaultTranslator; - } - - /** - * Set default translation text domain for all validate objects - * - * @param string $textDomain - * @return void - */ - public static function setDefaultTranslatorTextDomain($textDomain = 'default') - { - static::$defaultTranslatorTextDomain = $textDomain; - } - - /** - * Get default translation text domain for all validate objects - * - * @return string - */ - public static function getDefaultTranslatorTextDomain() - { - return static::$defaultTranslatorTextDomain; - } - - /** - * Indicate whether or not translation should be enabled - * - * @param bool $flag - * @return AbstractValidator - */ - public function setTranslatorEnabled($flag = true) - { - $this->abstractOptions['translatorEnabled'] = (bool) $flag; - return $this; - } - - /** - * Is translation enabled? - * - * @return bool - */ - public function isTranslatorEnabled() - { - return $this->abstractOptions['translatorEnabled']; - } - - /** - * Returns the maximum allowed message length - * - * @return int - */ - public static function getMessageLength() - { - return static::$messageLength; - } - - /** - * Sets the maximum allowed message length - * - * @param int $length - */ - public static function setMessageLength($length = -1) - { - static::$messageLength = $length; - } - - /** - * Translate a validation message - * - * @param string $messageKey - * @param string $message - * @return string - */ - protected function translateMessage($messageKey, $message) - { - $translator = $this->getTranslator(); - if (!$translator) { - return $message; - } - - return $translator->translate($message, $this->getTranslatorTextDomain()); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode.php deleted file mode 100644 index cfa6cdc0ae..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode.php +++ /dev/null @@ -1,183 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; - -class Barcode extends AbstractValidator -{ - const INVALID = 'barcodeInvalid'; - const FAILED = 'barcodeFailed'; - const INVALID_CHARS = 'barcodeInvalidChars'; - const INVALID_LENGTH = 'barcodeInvalidLength'; - - protected $messageTemplates = array( - self::FAILED => "The input failed checksum validation", - self::INVALID_CHARS => "The input contains invalid characters", - self::INVALID_LENGTH => "The input should have a length of %length% characters", - self::INVALID => "Invalid type given. String expected", - ); - - /** - * Additional variables available for validation failure messages - * - * @var array - */ - protected $messageVariables = array( - 'length' => array('options' => 'length'), - ); - - protected $options = array( - 'adapter' => null, // Barcode adapter Zend\Validator\Barcode\AbstractAdapter - 'options' => null, // Options for this adapter - 'length' => null, - 'useChecksum' => null, - ); - - /** - * Constructor for barcodes - * - * @param array|string $options Options to use - */ - public function __construct($options = null) - { - if (!is_array($options) && !($options instanceof Traversable)) { - $options = array('adapter' => $options); - } - - if (array_key_exists('options', $options)) { - $options['options'] = array('options' => $options['options']); - } - - parent::__construct($options); - } - - /** - * Returns the set adapter - * - * @return Barcode\AbstractAdapter - */ - public function getAdapter() - { - if (!($this->options['adapter'] instanceof Barcode\AdapterInterface)) { - $this->setAdapter('Ean13'); - } - - return $this->options['adapter']; - } - - /** - * Sets a new barcode adapter - * - * @param string|Barcode\AbstractAdapter $adapter Barcode adapter to use - * @param array $options Options for this adapter - * @return Barcode - * @throws Exception\InvalidArgumentException - */ - public function setAdapter($adapter, $options = null) - { - if (is_string($adapter)) { - $adapter = ucfirst(strtolower($adapter)); - $adapter = 'Zend\\Validator\\Barcode\\' . $adapter; - - if (!class_exists($adapter)) { - throw new Exception\InvalidArgumentException('Barcode adapter matching "' . $adapter . '" not found'); - } - - $adapter = new $adapter($options); - } - - if (!$adapter instanceof Barcode\AdapterInterface) { - throw new Exception\InvalidArgumentException( - sprintf( - "Adapter %s does not implement Zend\\Validator\\Barcode\\AdapterInterface", - (is_object($adapter) ? get_class($adapter) : gettype($adapter)) - ) - ); - } - - $this->options['adapter'] = $adapter; - - return $this; - } - - /** - * Returns the checksum option - * - * @return string - */ - public function getChecksum() - { - return $this->getAdapter()->getChecksum(); - } - - /** - * Sets if checksum should be validated, if no value is given the actual setting is returned - * - * @param bool $checksum - * @return bool - */ - public function useChecksum($checksum = null) - { - return $this->getAdapter()->useChecksum($checksum); - } - - /** - * Defined by Zend\Validator\ValidatorInterface - * - * Returns true if and only if $value contains a valid barcode - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - $adapter = $this->getAdapter(); - $this->options['length'] = $adapter->getLength(); - $result = $adapter->hasValidLength($value); - if (!$result) { - if (is_array($this->options['length'])) { - $temp = $this->options['length']; - $this->options['length'] = ""; - foreach ($temp as $length) { - $this->options['length'] .= "/"; - $this->options['length'] .= $length; - } - - $this->options['length'] = substr($this->options['length'], 1); - } - - $this->error(self::INVALID_LENGTH); - return false; - } - - $result = $adapter->hasValidCharacters($value); - if (!$result) { - $this->error(self::INVALID_CHARS); - return false; - } - - if ($this->useChecksum(null)) { - $result = $adapter->hasValidChecksum($value); - if (!$result) { - $this->error(self::FAILED); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php deleted file mode 100644 index a2842d849a..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php +++ /dev/null @@ -1,310 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -abstract class AbstractAdapter implements AdapterInterface -{ - /** - * Allowed options for this adapter - * @var array - */ - protected $options = array( - 'length' => null, // Allowed barcode lengths, integer, array, string - 'characters' => null, // Allowed barcode characters - 'checksum' => null, // Callback to checksum function - 'useChecksum' => true, // Is a checksum value included?, boolean - ); - - /** - * Checks the length of a barcode - * - * @param string $value The barcode to check for proper length - * @return bool - */ - public function hasValidLength($value) - { - if (!is_string($value)) { - return false; - } - - $fixum = strlen($value); - $found = false; - $length = $this->getLength(); - if (is_array($length)) { - foreach ($length as $value) { - if ($fixum == $value) { - $found = true; - } - - if ($value == -1) { - $found = true; - } - } - } elseif ($fixum == $length) { - $found = true; - } elseif ($length == -1) { - $found = true; - } elseif ($length == 'even') { - $count = $fixum % 2; - $found = (0 == $count); - } elseif ($length == 'odd') { - $count = $fixum % 2; - $found = (1 == $count); - } - - return $found; - } - - /** - * Checks for allowed characters within the barcode - * - * @param string $value The barcode to check for allowed characters - * @return bool - */ - public function hasValidCharacters($value) - { - if (!is_string($value)) { - return false; - } - - $characters = $this->getCharacters(); - if ($characters == 128) { - for ($x = 0; $x < 128; ++$x) { - $value = str_replace(chr($x), '', $value); - } - } else { - $chars = str_split($characters); - foreach ($chars as $char) { - $value = str_replace($char, '', $value); - } - } - - if (strlen($value) > 0) { - return false; - } - - return true; - } - - /** - * Validates the checksum - * - * @param string $value The barcode to check the checksum for - * @return bool - */ - public function hasValidChecksum($value) - { - $checksum = $this->getChecksum(); - if (!empty($checksum)) { - if (method_exists($this, $checksum)) { - return $this->$checksum($value); - } - } - - return false; - } - - /** - * Returns the allowed barcode length - * - * @return int|array - */ - public function getLength() - { - return $this->options['length']; - } - - /** - * Returns the allowed characters - * - * @return int|string|array - */ - public function getCharacters() - { - return $this->options['characters']; - } - - /** - * Returns the checksum function name - * - */ - public function getChecksum() - { - return $this->options['checksum']; - } - - /** - * Sets the checksum validation method - * - * @param callable $checksum Checksum method to call - * @return AbstractAdapter - */ - protected function setChecksum($checksum) - { - $this->options['checksum'] = $checksum; - return $this; - } - - /** - * Sets the checksum validation, if no value is given, the actual setting is returned - * - * @param bool $check - * @return AbstractAdapter|bool - */ - public function useChecksum($check = null) - { - if ($check === null) { - return $this->options['useChecksum']; - } - - $this->options['useChecksum'] = (bool) $check; - return $this; - } - - /** - * Sets the length of this barcode - * - * @param int|array $length - * @return AbstractAdapter - */ - protected function setLength($length) - { - $this->options['length'] = $length; - return $this; - } - - /** - * Sets the allowed characters of this barcode - * - * @param int $characters - * @return AbstractAdapter - */ - protected function setCharacters($characters) - { - $this->options['characters'] = $characters; - return $this; - } - - /** - * Validates the checksum (Modulo 10) - * GTIN implementation factor 3 - * - * @param string $value The barcode to validate - * @return bool - */ - protected function gtin($value) - { - $barcode = substr($value, 0, -1); - $sum = 0; - $length = strlen($barcode) - 1; - - for ($i = 0; $i <= $length; $i++) { - if (($i % 2) === 0) { - $sum += $barcode[$length - $i] * 3; - } else { - $sum += $barcode[$length - $i]; - } - } - - $calc = $sum % 10; - $checksum = ($calc === 0) ? 0 : (10 - $calc); - if ($value[$length + 1] != $checksum) { - return false; - } - - return true; - } - - /** - * Validates the checksum (Modulo 10) - * IDENTCODE implementation factors 9 and 4 - * - * @param string $value The barcode to validate - * @return bool - */ - protected function identcode($value) - { - $barcode = substr($value, 0, -1); - $sum = 0; - $length = strlen($value) - 2; - - for ($i = 0; $i <= $length; $i++) { - if (($i % 2) === 0) { - $sum += $barcode[$length - $i] * 4; - } else { - $sum += $barcode[$length - $i] * 9; - } - } - - $calc = $sum % 10; - $checksum = ($calc === 0) ? 0 : (10 - $calc); - if ($value[$length + 1] != $checksum) { - return false; - } - - return true; - } - - /** - * Validates the checksum (Modulo 10) - * CODE25 implementation factor 3 - * - * @param string $value The barcode to validate - * @return bool - */ - protected function code25($value) - { - $barcode = substr($value, 0, -1); - $sum = 0; - $length = strlen($barcode) - 1; - - for ($i = 0; $i <= $length; $i++) { - if (($i % 2) === 0) { - $sum += $barcode[$i] * 3; - } else { - $sum += $barcode[$i]; - } - } - - $calc = $sum % 10; - $checksum = ($calc === 0) ? 0 : (10 - $calc); - if ($value[$length + 1] != $checksum) { - return false; - } - - return true; - } - - /** - * Validates the checksum () - * POSTNET implementation - * - * @param string $value The barcode to validate - * @return bool - */ - protected function postnet($value) - { - $checksum = substr($value, -1, 1); - $values = str_split(substr($value, 0, -1)); - - $check = 0; - foreach ($values as $row) { - $check += $row; - } - - $check %= 10; - $check = 10 - $check; - if ($check == $checksum) { - return true; - } - - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php deleted file mode 100644 index f30fe93ee1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -interface AdapterInterface -{ - /** - * Checks the length of a barcode - * - * @param string $value The barcode to check for proper length - * @return bool - */ - public function hasValidLength($value); - - /** - * Checks for allowed characters within the barcode - * - * @param string $value The barcode to check for allowed characters - * @return bool - */ - public function hasValidCharacters($value); - - /** - * Validates the checksum - * - * @param string $value The barcode to check the checksum for - * @return bool - */ - public function hasValidChecksum($value); - - /** - * Returns the allowed barcode length - * - * @return int|array - */ - public function getLength(); - - /** - * Returns the allowed characters - * - * @return int|string|array - */ - public function getCharacters(); - - /** - * Returns if barcode uses a checksum - * - * @return bool - */ - public function getChecksum(); - - /** - * Sets the checksum validation, if no value is given, the actual setting is returned - * - * @param bool $check - * @return AbstractAdapter|bool - */ - public function useChecksum($check = null); -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php deleted file mode 100644 index eca14e2121..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Codabar extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters('0123456789-$:/.+ABCDTN*E'); - $this->useChecksum(false); - } - - /** - * Checks for allowed characters - * @see Zend\Validator\Barcode.AbstractAdapter::checkChars() - */ - public function hasValidCharacters($value) - { - if (strpbrk($value, 'ABCD')) { - $first = $value[0]; - if (!strpbrk($first, 'ABCD')) { - // Missing start char - return false; - } - - $last = substr($value, -1, 1); - if (!strpbrk($last, 'ABCD')) { - // Missing stop char - return false; - } - - $value = substr($value, 1, -1); - } elseif (strpbrk($value, 'TN*E')) { - $first = $value[0]; - if (!strpbrk($first, 'TN*E')) { - // Missing start char - return false; - } - - $last = substr($value, -1, 1); - if (!strpbrk($last, 'TN*E')) { - // Missing stop char - return false; - } - - $value = substr($value, 1, -1); - } - - $chars = $this->getCharacters(); - $this->setCharacters('0123456789-$:/.+'); - $result = parent::hasValidCharacters($value); - $this->setCharacters($chars); - return $result; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php deleted file mode 100644 index 06a0b5e603..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php +++ /dev/null @@ -1,448 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -use Zend\Stdlib\StringUtils; -use Zend\Stdlib\StringWrapper\StringWrapperInterface; -use Zend\Validator\Exception; - -class Code128 extends AbstractAdapter -{ - /** - * The used string wrapper used for basic UTF-8 string functions - * - * @var StringWrapperInterface - */ - protected $utf8StringWrapper; - - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters(array( - 'A' => array( - 0 => ' ', 1 => '!', 2 => '"', 3 => '#', 4 => '$', 5 => '%', 6 => '&', 7 => "'", - 8 => '(', 9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/', - 16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7', - 24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?', - 32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G', - 40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O', - 48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W', - 56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\', 61 => ']', 62 => '^', 63 => '_', - 64 =>0x00, 65 =>0x01, 66 =>0x02, 67 =>0x03, 68 =>0x04, 69 =>0x05, 70 =>0x06, 71 =>0x07, - 72 =>0x08, 73 =>0x09, 74 =>0x0A, 75 =>0x0B, 76 =>0x0C, 77 =>0x0D, 78 =>0x0E, 79 =>0x0F, - 80 =>0x10, 81 =>0x11, 82 =>0x12, 83 =>0x13, 84 =>0x14, 85 =>0x15, 86 =>0x16, 87 =>0x17, - 88 =>0x18, 89 =>0x19, 90 =>0x1A, 91 =>0x1B, 92 =>0x1C, 93 =>0x1D, 94 =>0x1E, 95 =>0x1F, - 96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à ', 102 => 'Ã¥', 103 => '‡', - 104 => 'ˆ', 105 => '‰', 106 => 'Å '), - 'B' => array( - 0 => ' ', 1 => '!', 2 => '"', 3 => '#', 4 => '$', 5 => '%', 6 => '&', 7 => "'", - 8 => '(', 9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/', - 16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7', - 24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?', - 32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G', - 40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O', - 48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W', - 56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\', 61 => ']', 62 => '^', 63 => '_', - 64 => '`', 65 => 'a', 66 => 'b', 67 => 'c', 68 => 'd', 69 => 'e', 70 => 'f', 71 => 'g', - 72 => 'h', 73 => 'i', 74 => 'j', 75 => 'k', 76 => 'l', 77 => 'm', 78 => 'n', 79 => 'o', - 80 => 'p', 81 => 'q', 82 => 'r', 83 => 's', 84 => 't', 85 => 'u', 86 => 'v', 87 => 'w', - 88 => 'x', 89 => 'y', 90 => 'z', 91 => '{', 92 => '|', 93 => '}', 94 => '~', 95 =>0x7F, - 96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à ', 102 => 'Ã¥', 103 => '‡', - 104 => 'ˆ', 105 => '‰', 106 => 'Å '), - 'C' => array( - 0 => '00', 1 => '01', 2 => '02', 3 => '03', 4 => '04', 5 => '05', 6 => '06', 7 => '07', - 8 => '08', 9 => '09', 10 => '10', 11 => '11', 12 => '12', 13 => '13', 14 => '14', 15 => '15', - 16 => '16', 17 => '17', 18 => '18', 19 => '19', 20 => '20', 21 => '21', 22 => '22', 23 => '23', - 24 => '24', 25 => '25', 26 => '26', 27 => '27', 28 => '28', 29 => '29', 30 => '30', 31 => '31', - 32 => '32', 33 => '33', 34 => '34', 35 => '35', 36 => '36', 37 => '37', 38 => '38', 39 => '39', - 40 => '40', 41 => '41', 42 => '42', 43 => '43', 44 => '44', 45 => '45', 46 => '46', 47 => '47', - 48 => '48', 49 => '49', 50 => '50', 51 => '51', 52 => '52', 53 => '53', 54 => '54', 55 => '55', - 56 => '56', 57 => '57', 58 => '58', 59 => '59', 60 => '60', 61 => '61', 62 => '62', 63 => '63', - 64 => '64', 65 => '65', 66 => '66', 67 => '67', 68 => '68', 69 => '69', 70 => '70', 71 => '71', - 72 => '72', 73 => '73', 74 => '74', 75 => '75', 76 => '76', 77 => '77', 78 => '78', 79 => '79', - 80 => '80', 81 => '81', 82 => '82', 83 => '83', 84 => '84', 85 => '85', 86 => '86', 87 => '87', - 88 => '88', 89 => '89', 90 => '90', 91 => '91', 92 => '92', 93 => '93', 94 => '94', 95 => '95', - 96 => '96', 97 => '97', 98 => '98', 99 => '99', 100 => 'ä', 101 => 'à ', 102 => 'Ã¥', 103 => '‡', - 104 => 'ˆ', 105 => '‰', 106 => 'Å ') - )); - $this->setChecksum('code128'); - } - - public function setUtf8StringWrapper(StringWrapperInterface $utf8StringWrapper) - { - if (!$utf8StringWrapper->isSupported('UTF-8')) { - throw new Exception\InvalidArgumentException( - "The string wrapper needs to support UTF-8 character encoding" - ); - } - $this->utf8StringWrapper = $utf8StringWrapper; - } - - /** - * Get the string wrapper supporting UTF-8 character encoding - * - * @return StringWrapperInterface - */ - public function getUtf8StringWrapper() - { - if (!$this->utf8StringWrapper) { - $this->utf8StringWrapper = StringUtils::getWrapper('UTF-8'); - } - return $this->utf8StringWrapper; - } - - /** - * Checks for allowed characters within the barcode - * - * @param string $value The barcode to check for allowed characters - * @return bool - */ - public function hasValidCharacters($value) - { - if (!is_string($value)) { - return false; - } - - // get used string wrapper for UTF-8 character encoding - $strWrapper = $this->getUtf8StringWrapper(); - - // detect starting charset - $set = $this->getCodingSet($value); - $read = $set; - if ($set != '') { - $value = $strWrapper->substr($value, 1, null); - } - - // process barcode - while ($value != '') { - $char = $strWrapper->substr($value, 0, 1); - - switch ($char) { - // Function definition - case 'Ç': - case 'ü': - case 'Ã¥': - break; - - // Switch 1 char between A and B - case 'é': - if ($set == 'A') { - $read = 'B'; - } elseif ($set == 'B') { - $read = 'A'; - } - break; - - // Switch to C - case 'â': - $set = 'C'; - $read = 'C'; - break; - - // Switch to B - case 'ä': - $set = 'B'; - $read = 'B'; - break; - - // Switch to A - case 'à ': - $set = 'A'; - $read = 'A'; - break; - - // Doubled start character - case '‡': - case 'ˆ': - case '‰': - return false; - - // Chars after the stop character - case 'Å ': - break 2; - - default: - // Does the char exist within the charset to read? - if ($this->ord128($char, $read) == -1) { - return false; - } - - break; - } - - $value = $strWrapper->substr($value, 1, null); - $read = $set; - } - - if (($value != '') && ($strWrapper->strlen($value) != 1)) { - return false; - } - - return true; - } - - /** - * Validates the checksum () - * - * @param string $value The barcode to validate - * @return bool - */ - protected function code128($value) - { - $sum = 0; - $pos = 1; - $set = $this->getCodingSet($value); - $read = $set; - $usecheck = $this->useChecksum(null); - $strWrapper = $this->getUtf8StringWrapper(); - $char = $strWrapper->substr($value, 0, 1); - if ($char == '‡') { - $sum = 103; - } elseif ($char == 'ˆ') { - $sum = 104; - } elseif ($char == '‰') { - $sum = 105; - } elseif ($usecheck == true) { - // no start value, unable to detect a proper checksum - return false; - } - - $value = $strWrapper->substr($value, 1, null); - while ($strWrapper->strpos($value, 'Å ') || ($value != '')) { - $char = $strWrapper->substr($value, 0, 1); - if ($read == 'C') { - $char = $strWrapper->substr($value, 0, 2); - } - - switch ($char) { - // Function definition - case 'Ç': - case 'ü': - case 'Ã¥': - $sum += ($pos * $this->ord128($char, $set)); - break; - - case 'é': - $sum += ($pos * $this->ord128($char, $set)); - if ($set == 'A') { - $read = 'B'; - } elseif ($set == 'B') { - $read = 'A'; - } - break; - - // Switch to C - case 'â': - $sum += ($pos * $this->ord128($char, $set)); - $set = 'C'; - $read = 'C'; - break; - - // Switch to B - case 'ä': - $sum += ($pos * $this->ord128($char, $set)); - $set = 'B'; - $read = 'B'; - break; - - // Switch to A - case 'à ': - $sum += ($pos * $this->ord128($char, $set)); - $set = 'A'; - $read = 'A'; - break; - - case '‡': - case 'ˆ': - case '‰': - return false; - break; - - default: - // Does the char exist within the charset to read? - if ($this->ord128($char, $read) == -1) { - return false; - } - - $sum += ($pos * $this->ord128($char, $set)); - break; - } - - $value = $strWrapper->substr($value, 1); - ++$pos; - if (($strWrapper->strpos($value, 'Å ') == 1) && ($strWrapper->strlen($value) == 2)) { - // break by stop and checksum char - break; - } - $read = $set; - } - - if (($strWrapper->strpos($value, 'Å ') != 1) || ($strWrapper->strlen($value) != 2)) { - // return false if checksum is not readable and true if no startvalue is detected - return (!$usecheck); - } - - $mod = $sum % 103; - if ($strWrapper->substr($value, 0, 1) == $this->chr128($mod, $set)) { - return true; - } - - return false; - } - - /** - * Returns the coding set for a barcode - * - * @param string $value Barcode - * @return string - */ - protected function getCodingSet($value) - { - $value = $this->getUtf8StringWrapper()->substr($value, 0, 1); - switch ($value) { - case '‡': - return 'A'; - break; - case 'ˆ': - return 'B'; - break; - case '‰': - return 'C'; - break; - } - - return ''; - } - - /** - * Internal method to return the code128 integer from an ascii value - * - * Table A - * ASCII CODE128 - * 32 to 95 == 0 to 63 - * 0 to 31 == 64 to 95 - * 128 to 138 == 96 to 106 - * - * Table B - * ASCII CODE128 - * 32 to 138 == 0 to 106 - * - * Table C - * ASCII CODE128 - * "00" to "99" == 0 to 99 - * 132 to 138 == 100 to 106 - * - * @param string $value - * @param string $set - * @return int - */ - protected function ord128($value, $set) - { - $ord = ord($value); - if ($set == 'A') { - if ($ord < 32) { - return ($ord + 64); - } elseif ($ord < 96) { - return ($ord - 32); - } elseif ($ord > 138) { - return -1; - } else { - return ($ord - 32); - } - } elseif ($set == 'B') { - if ($ord < 32) { - return -1; - } elseif ($ord <= 138) { - return ($ord - 32); - } else { - return -1; - } - } elseif ($set == 'C') { - $val = (int) $value; - if (($val >= 0) && ($val <= 99)) { - return $val; - } elseif (($ord >= 132) && ($ord <= 138)) { - return ($ord - 32); - } else { - return -1; - } - } else { - if ($ord < 32) { - return ($ord +64); - } elseif ($ord <= 138) { - return ($ord - 32); - } else { - return -1; - } - } - } - - /** - * Internal Method to return the ascii value from a code128 integer - * - * Table A - * ASCII CODE128 - * 32 to 95 == 0 to 63 - * 0 to 31 == 64 to 95 - * 128 to 138 == 96 to 106 - * - * Table B - * ASCII CODE128 - * 32 to 138 == 0 to 106 - * - * Table C - * ASCII CODE128 - * "00" to "99" == 0 to 99 - * 132 to 138 == 100 to 106 - * - * @param int $value - * @param string $set - * @return string - */ - protected function chr128($value, $set) - { - if ($set == 'A') { - if ($value < 64) { - return chr($value + 32); - } elseif ($value < 96) { - return chr($value - 64); - } elseif ($value > 106) { - return -1; - } else { - return chr($value + 32); - } - } elseif ($set == 'B') { - if ($value > 106) { - return -1; - } else { - return chr($value + 32); - } - } elseif ($set == 'C') { - if (($value >= 0) && ($value <= 9)) { - return "0" . (string) $value; - } elseif ($value <= 99) { - return (string) $value; - } elseif ($value <= 106) { - return chr($value + 32); - } else { - return -1; - } - } else { - if ($value <= 106) { - return ($value + 32); - } else { - return -1; - } - } - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php deleted file mode 100644 index 8235c437d1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code25 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters('0123456789'); - $this->setChecksum('code25'); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php deleted file mode 100644 index cb41c76e5f..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code25interleaved extends AbstractAdapter -{ - /** - * Constructor - * - * Sets check flag to false. - */ - public function __construct() - { - $this->setLength('even'); - $this->setCharacters('0123456789'); - $this->setChecksum('code25'); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php deleted file mode 100644 index 01208ce2c4..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code39 extends AbstractAdapter -{ - /** - * @var array - */ - protected $check = array( - '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, - '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, - 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, - 'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, - 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34, - 'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41, - '%' => 42, - ); - - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%'); - $this->setChecksum('code39'); - $this->useChecksum(false); - } - - /** - * Validates the checksum (Modulo 43) - * - * @param string $value The barcode to validate - * @return bool - */ - protected function code39($value) - { - $checksum = substr($value, -1, 1); - $value = str_split(substr($value, 0, -1)); - $count = 0; - foreach ($value as $char) { - $count += $this->check[$char]; - } - - $mod = $count % 43; - if ($mod == $this->check[$checksum]) { - return true; - } - - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php deleted file mode 100644 index e65d491c85..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code39ext extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters(128); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php deleted file mode 100644 index f312a13863..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code93 extends AbstractAdapter -{ - /** - * Note that the characters !"§& are only synonyms - * @var array - */ - protected $check = array( - '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, - '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, - 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, - 'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, - 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34, - 'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41, - '%' => 42, '!' => 43, '"' => 44, '§' => 45, '&' => 46, - ); - - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%'); - $this->setChecksum('code93'); - $this->useChecksum(false); - } - - /** - * Validates the checksum (Modulo CK) - * - * @param string $value The barcode to validate - * @return bool - */ - protected function code93($value) - { - $checksum = substr($value, -2, 2); - $value = str_split(substr($value, 0, -2)); - $count = 0; - $length = count($value) % 20; - foreach ($value as $char) { - if ($length == 0) { - $length = 20; - } - - $count += $this->check[$char] * $length; - --$length; - } - - $check = array_search(($count % 47), $this->check); - $value[] = $check; - $count = 0; - $length = count($value) % 15; - foreach ($value as $char) { - if ($length == 0) { - $length = 15; - } - - $count += $this->check[$char] * $length; - --$length; - } - $check .= array_search(($count % 47), $this->check); - - if ($check == $checksum) { - return true; - } - - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php deleted file mode 100644 index 99503a1477..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Code93ext extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters(128); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php deleted file mode 100644 index 4805145a1f..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean12 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(12); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php deleted file mode 100644 index e271cbea6d..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean13 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(13); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php deleted file mode 100644 index 9d8168bb24..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean14 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(14); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php deleted file mode 100644 index 7388b7326d..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean18 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(18); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php deleted file mode 100644 index 99a87bfe2a..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean2 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(2); - $this->setCharacters('0123456789'); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php deleted file mode 100644 index 8ef2d519a0..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean5 extends AbstractAdapter -{ - /** - * Constructor - * - * Sets check flag to false. - */ - public function __construct() - { - $this->setLength(5); - $this->setCharacters('0123456789'); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php deleted file mode 100644 index a34c8b45fc..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Ean8 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(array(7, 8)); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } - - /** - * Overrides parent checkLength - * - * @param string $value Value - * @return bool - */ - public function hasValidLength($value) - { - if (strlen($value) == 7) { - $this->useChecksum(false); - } else { - $this->useChecksum(true); - } - - return parent::hasValidLength($value); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php deleted file mode 100644 index 44464445ef..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Gtin12 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(12); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php deleted file mode 100644 index b8dcd095b1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Gtin13 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(13); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php deleted file mode 100644 index 862d3e147e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Gtin14 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(14); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php deleted file mode 100644 index 5b39271556..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Identcode extends AbstractAdapter -{ - /** - * Allowed barcode lengths - * @var int - */ - protected $length = 12; - - /** - * Allowed barcode characters - * @var string - */ - protected $characters = '0123456789'; - - /** - * Checksum function - * @var string - */ - protected $checksum = 'identcode'; - - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(12); - $this->setCharacters('0123456789'); - $this->setChecksum('identcode'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php deleted file mode 100644 index d26cce68a7..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Intelligentmail extends AbstractAdapter -{ - /** - * Constructor - * - * Sets check flag to false. - */ - public function __construct() - { - $this->setLength(array(20, 25, 29, 31)); - $this->setCharacters('0123456789'); - $this->useChecksum(false); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php deleted file mode 100644 index e66451a1a0..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Issn extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(array(8, 13)); - $this->setCharacters('0123456789X'); - $this->setChecksum('gtin'); - } - - /** - * Allows X on length of 8 chars - * - * @param string $value The barcode to check for allowed characters - * @return bool - */ - public function hasValidCharacters($value) - { - if (strlen($value) != 8) { - if (strpos($value, 'X') !== false) { - return false; - } - } - - return parent::hasValidCharacters($value); - } - - /** - * Validates the checksum - * - * @param string $value The barcode to check the checksum for - * @return bool - */ - public function hasValidChecksum($value) - { - if (strlen($value) == 8) { - $this->setChecksum('issn'); - } else { - $this->setChecksum('gtin'); - } - - return parent::hasValidChecksum($value); - } - - /** - * Validates the checksum () - * ISSN implementation (reversed mod11) - * - * @param string $value The barcode to validate - * @return bool - */ - protected function issn($value) - { - $checksum = substr($value, -1, 1); - $values = str_split(substr($value, 0, -1)); - $check = 0; - $multi = 8; - foreach ($values as $token) { - if ($token == 'X') { - $token = 10; - } - - $check += ($token * $multi); - --$multi; - } - - $check %= 11; - $check = ($check === 0 ? 0 : (11 - $check)); - if ($check == $checksum) { - return true; - } elseif (($check == 10) && ($checksum == 'X')) { - return true; - } - - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php deleted file mode 100644 index b17eb705da..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Itf14 extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(14); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php deleted file mode 100644 index c1b82c3c28..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Leitcode extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(14); - $this->setCharacters('0123456789'); - $this->setChecksum('identcode'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php deleted file mode 100644 index 0708b7c818..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Planet extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(array(12, 14)); - $this->setCharacters('0123456789'); - $this->setChecksum('postnet'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php deleted file mode 100644 index 2942d4ca0d..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Postnet extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(array(6, 7, 10, 12)); - $this->setCharacters('0123456789'); - $this->setChecksum('postnet'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php deleted file mode 100644 index 77555ed5a0..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Royalmail extends AbstractAdapter -{ - protected $rows = array( - '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1, - '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2, - 'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3, - 'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4, - 'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5, - 'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0, - ); - - protected $columns = array( - '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0, - '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0, - 'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0, - 'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0, - 'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0, - 'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0, - ); - - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(-1); - $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'); - $this->setChecksum('royalmail'); - } - - /** - * Validates the checksum () - * - * @param string $value The barcode to validate - * @return bool - */ - protected function royalmail($value) - { - $checksum = substr($value, -1, 1); - $values = str_split(substr($value, 0, -1)); - $rowvalue = 0; - $colvalue = 0; - foreach ($values as $row) { - $rowvalue += $this->rows[$row]; - $colvalue += $this->columns[$row]; - } - - $rowvalue %= 6; - $colvalue %= 6; - - $rowchkvalue = array_keys($this->rows, $rowvalue); - $colchkvalue = array_keys($this->columns, $colvalue); - $intersect = array_intersect($rowchkvalue, $colchkvalue); - $chkvalue = current($intersect); - if ($chkvalue == $checksum) { - return true; - } - - return false; - } - - /** - * Allows start and stop tag within checked chars - * - * @param string $value The barcode to check for allowed characters - * @return bool - */ - public function hasValidCharacters($value) - { - if ($value[0] == '(') { - $value = substr($value, 1); - - if ($value[strlen($value) - 1] == ')') { - $value = substr($value, 0, -1); - } else { - return false; - } - } - - return parent::hasValidCharacters($value); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php deleted file mode 100644 index 57f9c8a373..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Sscc extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(18); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php deleted file mode 100644 index afb2a7a44e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Upca extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(12); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php deleted file mode 100644 index 32a573f1ce..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Barcode; - -class Upce extends AbstractAdapter -{ - /** - * Constructor for this barcode adapter - */ - public function __construct() - { - $this->setLength(array(6, 7, 8)); - $this->setCharacters('0123456789'); - $this->setChecksum('gtin'); - } - - /** - * Overrides parent checkLength - * - * @param string $value Value - * @return bool - */ - public function hasValidLength($value) - { - if (strlen($value) != 8) { - $this->useChecksum(false); - } else { - $this->useChecksum(true); - } - - return parent::hasValidLength($value); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Between.php b/civicrm/vendor/zendframework/zend-validator/src/Between.php deleted file mode 100644 index 28101538b3..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Between.php +++ /dev/null @@ -1,181 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class Between extends AbstractValidator -{ - const NOT_BETWEEN = 'notBetween'; - const NOT_BETWEEN_STRICT = 'notBetweenStrict'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_BETWEEN => "The input is not between '%min%' and '%max%', inclusively", - self::NOT_BETWEEN_STRICT => "The input is not strictly between '%min%' and '%max%'" - ); - - /** - * Additional variables available for validation failure messages - * - * @var array - */ - protected $messageVariables = array( - 'min' => array('options' => 'min'), - 'max' => array('options' => 'max'), - ); - - /** - * Options for the between validator - * - * @var array - */ - protected $options = array( - 'inclusive' => true, // Whether to do inclusive comparisons, allowing equivalence to min and/or max - 'min' => 0, - 'max' => PHP_INT_MAX, - ); - - /** - * Sets validator options - * Accepts the following option keys: - * 'min' => scalar, minimum border - * 'max' => scalar, maximum border - * 'inclusive' => boolean, inclusive border values - * - * @param array|Traversable $options - * - * @throws Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - if (!is_array($options)) { - $options = func_get_args(); - $temp['min'] = array_shift($options); - if (!empty($options)) { - $temp['max'] = array_shift($options); - } - - if (!empty($options)) { - $temp['inclusive'] = array_shift($options); - } - - $options = $temp; - } - - if (count($options) !== 2 - && (!array_key_exists('min', $options) || !array_key_exists('max', $options)) - ) { - throw new Exception\InvalidArgumentException("Missing option. 'min' and 'max' have to be given"); - } - - parent::__construct($options); - } - - /** - * Returns the min option - * - * @return mixed - */ - public function getMin() - { - return $this->options['min']; - } - - /** - * Sets the min option - * - * @param mixed $min - * @return Between Provides a fluent interface - */ - public function setMin($min) - { - $this->options['min'] = $min; - return $this; - } - - /** - * Returns the max option - * - * @return mixed - */ - public function getMax() - { - return $this->options['max']; - } - - /** - * Sets the max option - * - * @param mixed $max - * @return Between Provides a fluent interface - */ - public function setMax($max) - { - $this->options['max'] = $max; - return $this; - } - - /** - * Returns the inclusive option - * - * @return bool - */ - public function getInclusive() - { - return $this->options['inclusive']; - } - - /** - * Sets the inclusive option - * - * @param bool $inclusive - * @return Between Provides a fluent interface - */ - public function setInclusive($inclusive) - { - $this->options['inclusive'] = $inclusive; - return $this; - } - - /** - * Returns true if and only if $value is between min and max options, inclusively - * if inclusive option is true. - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if ($this->getInclusive()) { - if ($this->getMin() > $value || $value > $this->getMax()) { - $this->error(self::NOT_BETWEEN); - return false; - } - } else { - if ($this->getMin() >= $value || $value >= $this->getMax()) { - $this->error(self::NOT_BETWEEN_STRICT); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php b/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php deleted file mode 100644 index 7f676cff58..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php +++ /dev/null @@ -1,192 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; - -class Bitwise extends AbstractValidator -{ - const OP_AND = 'and'; - const OP_XOR = 'xor'; - - const NOT_AND = 'notAnd'; - const NOT_AND_STRICT = 'notAndStrict'; - const NOT_XOR = 'notXor'; - - /** - * @var integer - */ - protected $control; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_AND => "The input has no common bit set with '%control%'", - self::NOT_AND_STRICT => "The input doesn't have the same bits set as '%control%'", - self::NOT_XOR => "The input has common bit set with '%control%'", - ); - - /** - * Additional variables available for validation failure messages - * - * @var array - */ - protected $messageVariables = array( - 'control' => 'control', - ); - - /** - * @var integer - */ - protected $operator; - - /** - * @var boolean - */ - protected $strict = false; - - /** - * Sets validator options - * Accepts the following option keys: - * 'control' => integer - * 'operator' => - * 'strict' => boolean - * - * @param array|Traversable $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } - - if (!is_array($options)) { - $options = func_get_args(); - - $temp['control'] = array_shift($options); - - if (!empty($options)) { - $temp['operator'] = array_shift($options); - } - - if (!empty($options)) { - $temp['strict'] = array_shift($options); - } - - $options = $temp; - } - - parent::__construct($options); - } - - /** - * Returns the control parameter. - * - * @return integer - */ - public function getControl() - { - return $this->control; - } - - /** - * Returns the operator parameter. - * - * @return string - */ - public function getOperator() - { - return $this->operator; - } - - /** - * Returns the strict parameter. - * - * @return boolean - */ - public function getStrict() - { - return $this->strict; - } - - /** - * Returns true if and only if $value is between min and max options, inclusively - * if inclusive option is true. - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if (self::OP_AND === $this->operator) { - if ($this->strict) { - // All the bits set in value must be set in control - $this->error(self::NOT_AND_STRICT); - - return (bool) (($this->control & $value) == $value); - } else { - // At least one of the bits must be common between value and control - $this->error(self::NOT_AND); - - return (bool) ($this->control & $value); - } - } elseif (self::OP_XOR === $this->operator) { - $this->error(self::NOT_XOR); - - return (bool) (($this->control ^ $value) === ($this->control | $value)); - } - - return false; - } - - /** - * Sets the control parameter. - * - * @param integer $control - * @return Bitwise - */ - public function setControl($control) - { - $this->control = (int) $control; - - return $this; - } - - /** - * Sets the operator parameter. - * - * @param string $operator - * @return Bitwise - */ - public function setOperator($operator) - { - $this->operator = $operator; - - return $this; - } - - /** - * Sets the strict parameter. - * - * @param boolean $strict - * @return Bitwise - */ - public function setStrict($strict) - { - $this->strict = (bool) $strict; - - return $this; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Callback.php b/civicrm/vendor/zendframework/zend-validator/src/Callback.php deleted file mode 100644 index 7a5005bb26..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Callback.php +++ /dev/null @@ -1,150 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -class Callback extends AbstractValidator -{ - /** - * Invalid callback - */ - const INVALID_CALLBACK = 'callbackInvalid'; - - /** - * Invalid value - */ - const INVALID_VALUE = 'callbackValue'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::INVALID_VALUE => "The input is not valid", - self::INVALID_CALLBACK => "An exception has been raised within the callback", - ); - - /** - * Default options to set for the validator - * - * @var mixed - */ - protected $options = array( - 'callback' => null, // Callback in a call_user_func format, string || array - 'callbackOptions' => array(), // Options for the callback - ); - - /** - * Constructor - * - * @param array|callable $options - */ - public function __construct($options = null) - { - if (is_callable($options)) { - $options = array('callback' => $options); - } - - parent::__construct($options); - } - - /** - * Returns the set callback - * - * @return mixed - */ - public function getCallback() - { - return $this->options['callback']; - } - - /** - * Sets the callback - * - * @param string|array|callable $callback - * @return Callback Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function setCallback($callback) - { - if (!is_callable($callback)) { - throw new Exception\InvalidArgumentException('Invalid callback given'); - } - - $this->options['callback'] = $callback; - return $this; - } - - /** - * Returns the set options for the callback - * - * @return mixed - */ - public function getCallbackOptions() - { - return $this->options['callbackOptions']; - } - - /** - * Sets options for the callback - * - * @param mixed $options - * @return Callback Provides a fluent interface - */ - public function setCallbackOptions($options) - { - $this->options['callbackOptions'] = (array) $options; - return $this; - } - - /** - * Returns true if and only if the set callback returns - * for the provided $value - * - * @param mixed $value - * @param mixed $context Additional context to provide to the callback - * @return bool - * @throws Exception\InvalidArgumentException - */ - public function isValid($value, $context = null) - { - $this->setValue($value); - - $options = $this->getCallbackOptions(); - $callback = $this->getCallback(); - if (empty($callback)) { - throw new Exception\InvalidArgumentException('No callback given'); - } - - $args = array($value); - if (empty($options) && !empty($context)) { - $args[] = $context; - } - if (!empty($options) && empty($context)) { - $args = array_merge($args, $options); - } - if (!empty($options) && !empty($context)) { - $args[] = $context; - $args = array_merge($args, $options); - } - - try { - if (!call_user_func_array($callback, $args)) { - $this->error(self::INVALID_VALUE); - return false; - } - } catch (\Exception $e) { - $this->error(self::INVALID_CALLBACK); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php b/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php deleted file mode 100644 index 0f637f3796..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php +++ /dev/null @@ -1,319 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class CreditCard extends AbstractValidator -{ - /** - * Detected CCI list - * - * @var string - */ - const ALL = 'All'; - const AMERICAN_EXPRESS = 'American_Express'; - const UNIONPAY = 'Unionpay'; - const DINERS_CLUB = 'Diners_Club'; - const DINERS_CLUB_US = 'Diners_Club_US'; - const DISCOVER = 'Discover'; - const JCB = 'JCB'; - const LASER = 'Laser'; - const MAESTRO = 'Maestro'; - const MASTERCARD = 'Mastercard'; - const SOLO = 'Solo'; - const VISA = 'Visa'; - - const CHECKSUM = 'creditcardChecksum'; - const CONTENT = 'creditcardContent'; - const INVALID = 'creditcardInvalid'; - const LENGTH = 'creditcardLength'; - const PREFIX = 'creditcardPrefix'; - const SERVICE = 'creditcardService'; - const SERVICEFAILURE = 'creditcardServiceFailure'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::CHECKSUM => "The input seems to contain an invalid checksum", - self::CONTENT => "The input must contain only digits", - self::INVALID => "Invalid type given. String expected", - self::LENGTH => "The input contains an invalid amount of digits", - self::PREFIX => "The input is not from an allowed institute", - self::SERVICE => "The input seems to be an invalid credit card number", - self::SERVICEFAILURE => "An exception has been raised while validating the input", - ); - - /** - * List of CCV names - * - * @var array - */ - protected $cardName = array( - 0 => self::AMERICAN_EXPRESS, - 1 => self::DINERS_CLUB, - 2 => self::DINERS_CLUB_US, - 3 => self::DISCOVER, - 4 => self::JCB, - 5 => self::LASER, - 6 => self::MAESTRO, - 7 => self::MASTERCARD, - 8 => self::SOLO, - 9 => self::UNIONPAY, - 10 => self::VISA, - ); - - /** - * List of allowed CCV lengths - * - * @var array - */ - protected $cardLength = array( - self::AMERICAN_EXPRESS => array(15), - self::DINERS_CLUB => array(14), - self::DINERS_CLUB_US => array(16), - self::DISCOVER => array(16), - self::JCB => array(15, 16), - self::LASER => array(16, 17, 18, 19), - self::MAESTRO => array(12, 13, 14, 15, 16, 17, 18, 19), - self::MASTERCARD => array(16), - self::SOLO => array(16, 18, 19), - self::UNIONPAY => array(16, 17, 18, 19), - self::VISA => array(16), - ); - - /** - * List of accepted CCV provider tags - * - * @var array - */ - protected $cardType = array( - self::AMERICAN_EXPRESS => array('34', '37'), - self::DINERS_CLUB => array('300', '301', '302', '303', '304', '305', '36'), - self::DINERS_CLUB_US => array('54', '55'), - self::DISCOVER => array('6011', '622126', '622127', '622128', '622129', '62213', - '62214', '62215', '62216', '62217', '62218', '62219', - '6222', '6223', '6224', '6225', '6226', '6227', '6228', - '62290', '62291', '622920', '622921', '622922', '622923', - '622924', '622925', '644', '645', '646', '647', '648', - '649', '65'), - self::JCB => array('1800', '2131', '3528', '3529', '353', '354', '355', '356', '357', '358'), - self::LASER => array('6304', '6706', '6771', '6709'), - self::MAESTRO => array('5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', - '6764', '6765', '6766'), - self::MASTERCARD => array('51', '52', '53', '54', '55'), - self::SOLO => array('6334', '6767'), - self::UNIONPAY => array('622126', '622127', '622128', '622129', '62213', '62214', - '62215', '62216', '62217', '62218', '62219', '6222', '6223', - '6224', '6225', '6226', '6227', '6228', '62290', '62291', - '622920', '622921', '622922', '622923', '622924', '622925'), - self::VISA => array('4'), - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'service' => null, // Service callback for additional validation - 'type' => array(), // CCIs which are accepted by validation - ); - - /** - * Constructor - * - * @param string|array|Traversable $options OPTIONAL Type of CCI to allow - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (!is_array($options)) { - $options = func_get_args(); - $temp['type'] = array_shift($options); - if (!empty($options)) { - $temp['service'] = array_shift($options); - } - - $options = $temp; - } - - if (!array_key_exists('type', $options)) { - $options['type'] = self::ALL; - } - - $this->setType($options['type']); - unset($options['type']); - - if (array_key_exists('service', $options)) { - $this->setService($options['service']); - unset($options['service']); - } - - parent::__construct($options); - } - - /** - * Returns a list of accepted CCIs - * - * @return array - */ - public function getType() - { - return $this->options['type']; - } - - /** - * Sets CCIs which are accepted by validation - * - * @param string|array $type Type to allow for validation - * @return CreditCard Provides a fluid interface - */ - public function setType($type) - { - $this->options['type'] = array(); - return $this->addType($type); - } - - /** - * Adds a CCI to be accepted by validation - * - * @param string|array $type Type to allow for validation - * @return CreditCard Provides a fluid interface - */ - public function addType($type) - { - if (is_string($type)) { - $type = array($type); - } - - foreach ($type as $typ) { - if (defined('self::' . strtoupper($typ)) && !in_array($typ, $this->options['type'])) { - $this->options['type'][] = $typ; - } - - if (($typ == self::ALL)) { - $this->options['type'] = array_keys($this->cardLength); - } - } - - return $this; - } - - /** - * Returns the actual set service - * - * @return callable - */ - public function getService() - { - return $this->options['service']; - } - - /** - * Sets a new callback for service validation - * - * @param callable $service - * @return CreditCard - * @throws Exception\InvalidArgumentException on invalid service callback - */ - public function setService($service) - { - if (!is_callable($service)) { - throw new Exception\InvalidArgumentException('Invalid callback given'); - } - - $this->options['service'] = $service; - return $this; - } - - /** - * Returns true if and only if $value follows the Luhn algorithm (mod-10 checksum) - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if (!is_string($value)) { - $this->error(self::INVALID, $value); - return false; - } - - if (!ctype_digit($value)) { - $this->error(self::CONTENT, $value); - return false; - } - - $length = strlen($value); - $types = $this->getType(); - $foundp = false; - $foundl = false; - foreach ($types as $type) { - foreach ($this->cardType[$type] as $prefix) { - if (substr($value, 0, strlen($prefix)) == $prefix) { - $foundp = true; - if (in_array($length, $this->cardLength[$type])) { - $foundl = true; - break 2; - } - } - } - } - - if ($foundp == false) { - $this->error(self::PREFIX, $value); - return false; - } - - if ($foundl == false) { - $this->error(self::LENGTH, $value); - return false; - } - - $sum = 0; - $weight = 2; - - for ($i = $length - 2; $i >= 0; $i--) { - $digit = $weight * $value[$i]; - $sum += floor($digit / 10) + $digit % 10; - $weight = $weight % 2 + 1; - } - - if ((10 - $sum % 10) % 10 != $value[$length - 1]) { - $this->error(self::CHECKSUM, $value); - return false; - } - - $service = $this->getService(); - if (!empty($service)) { - try { - $callback = new Callback($service); - $callback->setOptions($this->getType()); - if (!$callback->isValid($value)) { - $this->error(self::SERVICE, $value); - return false; - } - } catch (\Exception $e) { - $this->error(self::SERVICEFAILURE, $value); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Csrf.php b/civicrm/vendor/zendframework/zend-validator/src/Csrf.php deleted file mode 100644 index ef64ee3c19..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Csrf.php +++ /dev/null @@ -1,374 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Math\Rand; -use Zend\Session\Container as SessionContainer; -use Zend\Stdlib\ArrayUtils; - -class Csrf extends AbstractValidator -{ - /** - * Error codes - * @const string - */ - const NOT_SAME = 'notSame'; - - /** - * Error messages - * @var array - */ - protected $messageTemplates = array( - self::NOT_SAME => "The form submitted did not originate from the expected site", - ); - - /** - * Actual hash used. - * - * @var mixed - */ - protected $hash; - - /** - * Static cache of the session names to generated hashes - * @todo unused, left here to avoid BC breaks - * - * @var array - */ - protected static $hashCache; - - /** - * Name of CSRF element (used to create non-colliding hashes) - * - * @var string - */ - protected $name = 'csrf'; - - /** - * Salt for CSRF token - * @var string - */ - protected $salt = 'salt'; - - /** - * @var SessionContainer - */ - protected $session; - - /** - * TTL for CSRF token - * @var int|null - */ - protected $timeout = 300; - - /** - * Constructor - * - * @param array|Traversable $options - */ - public function __construct($options = array()) - { - parent::__construct($options); - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - $options = (array) $options; - } - - foreach ($options as $key => $value) { - switch (strtolower($key)) { - case 'name': - $this->setName($value); - break; - case 'salt': - $this->setSalt($value); - break; - case 'session': - $this->setSession($value); - break; - case 'timeout': - $this->setTimeout($value); - break; - default: - // ignore unknown options - break; - } - } - } - - /** - * Does the provided token match the one generated? - * - * @param string $value - * @param mixed $context - * @return bool - */ - public function isValid($value, $context = null) - { - $this->setValue((string) $value); - - $tokenId = $this->getTokenIdFromHash($value); - $hash = $this->getValidationToken($tokenId); - - $tokenFromValue = $this->getTokenFromHash($value); - $tokenFromHash = $this->getTokenFromHash($hash); - - if (!$tokenFromValue || !$tokenFromHash || ($tokenFromValue !== $tokenFromHash)) { - $this->error(self::NOT_SAME); - return false; - } - - return true; - } - - /** - * Set CSRF name - * - * @param string $name - * @return Csrf - */ - public function setName($name) - { - $this->name = (string) $name; - return $this; - } - - /** - * Get CSRF name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Set session container - * - * @param SessionContainer $session - * @return Csrf - */ - public function setSession(SessionContainer $session) - { - $this->session = $session; - if ($this->hash) { - $this->initCsrfToken(); - } - return $this; - } - - /** - * Get session container - * - * Instantiate session container if none currently exists - * - * @return SessionContainer - */ - public function getSession() - { - if (null === $this->session) { - // Using fully qualified name, to ensure polyfill class alias is used - $this->session = new SessionContainer($this->getSessionName()); - } - return $this->session; - } - - /** - * Salt for CSRF token - * - * @param string $salt - * @return Csrf - */ - public function setSalt($salt) - { - $this->salt = (string) $salt; - return $this; - } - - /** - * Retrieve salt for CSRF token - * - * @return string - */ - public function getSalt() - { - return $this->salt; - } - - /** - * Retrieve CSRF token - * - * If no CSRF token currently exists, or should be regenerated, - * generates one. - * - * @param bool $regenerate default false - * @return string - */ - public function getHash($regenerate = false) - { - if ((null === $this->hash) || $regenerate) { - $this->generateHash(); - } - return $this->hash; - } - - /** - * Get session namespace for CSRF token - * - * Generates a session namespace based on salt, element name, and class. - * - * @return string - */ - public function getSessionName() - { - return str_replace('\\', '_', __CLASS__) . '_' - . $this->getSalt() . '_' - . strtr($this->getName(), array('[' => '_', ']' => '')); - } - - /** - * Set timeout for CSRF session token - * - * @param int|null $ttl - * @return Csrf - */ - public function setTimeout($ttl) - { - $this->timeout = ($ttl !== null) ? (int) $ttl : null; - return $this; - } - - /** - * Get CSRF session token timeout - * - * @return int - */ - public function getTimeout() - { - return $this->timeout; - } - - /** - * Initialize CSRF token in session - * - * @return void - */ - protected function initCsrfToken() - { - $session = $this->getSession(); - $timeout = $this->getTimeout(); - if (null !== $timeout) { - $session->setExpirationSeconds($timeout); - } - - $hash = $this->getHash(); - $token = $this->getTokenFromHash($hash); - $tokenId = $this->getTokenIdFromHash($hash); - - if (! $session->tokenList) { - $session->tokenList = array(); - } - $session->tokenList[$tokenId] = $token; - $session->hash = $hash; // @todo remove this, left for BC - } - - /** - * Generate CSRF token - * - * Generates CSRF token and stores both in {@link $hash} and element - * value. - * - * @return void - */ - protected function generateHash() - { - $token = md5($this->getSalt() . Rand::getBytes(32) . $this->getName()); - - $this->hash = $this->formatHash($token, $this->generateTokenId()); - - $this->setValue($this->hash); - $this->initCsrfToken(); - } - - /** - * @return string - */ - protected function generateTokenId() - { - return md5(Rand::getBytes(32)); - } - - /** - * Get validation token - * - * Retrieve token from session, if it exists. - * - * @param string $tokenId - * @return null|string - */ - protected function getValidationToken($tokenId = null) - { - $session = $this->getSession(); - - /** - * if no tokenId is passed we revert to the old behaviour - * @todo remove, here for BC - */ - if (! $tokenId && isset($session->hash)) { - return $session->hash; - } - - if ($tokenId && isset($session->tokenList[$tokenId])) { - return $this->formatHash($session->tokenList[$tokenId], $tokenId); - } - - return; - } - - /** - * @param $token - * @param $tokenId - * @return string - */ - protected function formatHash($token, $tokenId) - { - return sprintf('%s-%s', $token, $tokenId); - } - - /** - * @param $hash - * @return string - */ - protected function getTokenFromHash($hash) - { - $data = explode('-', $hash); - return $data[0] ?: null; - } - - /** - * @param $hash - * @return string - */ - protected function getTokenIdFromHash($hash) - { - $data = explode('-', $hash); - - if (! isset($data[1])) { - return; - } - - return $data[1]; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Date.php b/civicrm/vendor/zendframework/zend-validator/src/Date.php deleted file mode 100644 index c3a3ab74f9..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Date.php +++ /dev/null @@ -1,204 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use DateTime; -use DateTimeImmutable; -use Traversable; - -/** - * Validates that a given value is a DateTime instance or can be converted into one. - */ -class Date extends AbstractValidator -{ - /**#@+ - * Validity constants - * @var string - */ - const INVALID = 'dateInvalid'; - const INVALID_DATE = 'dateInvalidDate'; - const FALSEFORMAT = 'dateFalseFormat'; - /**#@-*/ - - /** - * Default format constant - * @var string - */ - const FORMAT_DEFAULT = 'Y-m-d'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String, integer, array or DateTime expected", - self::INVALID_DATE => "The input does not appear to be a valid date", - self::FALSEFORMAT => "The input does not fit the date format '%format%'", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'format' => 'format', - ); - - /** - * @var string - */ - protected $format = self::FORMAT_DEFAULT; - - /** - * Sets validator options - * - * @param string|array|Traversable $options OPTIONAL - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } elseif (!is_array($options)) { - $options = func_get_args(); - $temp['format'] = array_shift($options); - $options = $temp; - } - - parent::__construct($options); - } - - /** - * Returns the format option - * - * @return string|null - */ - public function getFormat() - { - return $this->format; - } - - /** - * Sets the format option - * - * Format cannot be null. It will always default to 'Y-m-d', even - * if null is provided. - * - * @param string $format - * @return Date provides a fluent interface - * @todo validate the format - */ - public function setFormat($format = self::FORMAT_DEFAULT) - { - $this->format = (empty($format)) ? self::FORMAT_DEFAULT : $format; - return $this; - } - - /** - * Returns true if $value is a DateTime instance or can be converted into one. - * - * @param string|array|int|DateTime $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if (!$this->convertToDateTime($value)) { - $this->error(self::INVALID_DATE); - return false; - } - - return true; - } - - /** - * Attempts to convert an int, string, or array to a DateTime object - * - * @param string|int|array $param - * @param bool $addErrors - * @return bool|DateTime - */ - protected function convertToDateTime($param, $addErrors = true) - { - if ($param instanceof DateTime || $param instanceof DateTimeImmutable) { - return $param; - } - - $type = gettype($param); - if (!in_array($type, array('string', 'integer', 'double', 'array'))) { - if ($addErrors) { - $this->error(self::INVALID); - } - return false; - } - - $convertMethod = 'convert' . ucfirst($type); - return $this->{$convertMethod}($param, $addErrors); - } - - /** - * Attempts to convert an integer into a DateTime object - * - * @param integer $value - * @return bool|DateTime - */ - protected function convertInteger($value) - { - return date_create("@$value"); - } - - /** - * Attempts to convert an double into a DateTime object - * - * @param double $value - * @return bool|DateTime - */ - protected function convertDouble($value) - { - return DateTime::createFromFormat('U', $value); - } - - /** - * Attempts to convert a string into a DateTime object - * - * @param string $value - * @param bool $addErrors - * @return bool|DateTime - */ - protected function convertString($value, $addErrors = true) - { - $date = DateTime::createFromFormat($this->format, $value); - - // Invalid dates can show up as warnings (ie. "2007-02-99") - // and still return a DateTime object. - $errors = DateTime::getLastErrors(); - if ($errors['warning_count'] > 0) { - if ($addErrors) { - $this->error(self::FALSEFORMAT); - } - return false; - } - - return $date; - } - - /** - * Implodes the array into a string and proxies to {@link convertString()}. - * - * @param array $value - * @param bool $addErrors - * @return bool|DateTime - * @todo enhance the implosion - */ - protected function convertArray(array $value, $addErrors = true) - { - return $this->convertString(implode('-', $value), $addErrors); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/DateStep.php b/civicrm/vendor/zendframework/zend-validator/src/DateStep.php deleted file mode 100644 index 67465d34eb..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/DateStep.php +++ /dev/null @@ -1,479 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use DateInterval; -use DateTime; -use DateTimeZone; -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class DateStep extends Date -{ - const NOT_STEP = 'dateStepNotStep'; - - const FORMAT_DEFAULT = DateTime::ISO8601; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String, integer, array or DateTime expected", - self::INVALID_DATE => "The input does not appear to be a valid date", - self::FALSEFORMAT => "The input does not fit the date format '%format%'", - self::NOT_STEP => "The input is not a valid step", - ); - - /** - * Optional base date value - * - * @var string|int|\DateTime - */ - protected $baseValue = '1970-01-01T00:00:00Z'; - - /** - * Date step interval (defaults to 1 day). - * Uses the DateInterval specification. - * - * @var DateInterval - */ - protected $step; - - /** - * Optional timezone to be used when the baseValue - * and validation values do not contain timezone info - * - * @var DateTimeZone - */ - protected $timezone; - - /** - * Set default options for this instance - * - * @param array $options - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (!is_array($options)) { - $options = func_get_args(); - $temp['baseValue'] = array_shift($options); - if (!empty($options)) { - $temp['step'] = array_shift($options); - } - if (!empty($options)) { - $temp['format'] = array_shift($options); - } - if (!empty($options)) { - $temp['timezone'] = array_shift($options); - } - - $options = $temp; - } - - if (!isset($options['step'])) { - $options['step'] = new DateInterval('P1D'); - } - if (!isset($options['timezone'])) { - $options['timezone'] = new DateTimeZone(date_default_timezone_get()); - } - - parent::__construct($options); - } - - /** - * Sets the base value from which the step should be computed - * - * @param string|int|\DateTime $baseValue - * @return DateStep - */ - public function setBaseValue($baseValue) - { - $this->baseValue = $baseValue; - return $this; - } - - /** - * Returns the base value from which the step should be computed - * - * @return string|int|\DateTime - */ - public function getBaseValue() - { - return $this->baseValue; - } - - /** - * Sets the step date interval - * - * @param DateInterval $step - * @return DateStep - */ - public function setStep(DateInterval $step) - { - $this->step = $step; - return $this; - } - - /** - * Returns the step date interval - * - * @return DateInterval - */ - public function getStep() - { - return $this->step; - } - - /** - * Returns the timezone option - * - * @return DateTimeZone - */ - public function getTimezone() - { - return $this->timezone; - } - - /** - * Sets the timezone option - * - * @param DateTimeZone $timezone - * @return DateStep - */ - public function setTimezone(DateTimeZone $timezone) - { - $this->timezone = $timezone; - return $this; - } - - /** - * Supports formats with ISO week (W) definitions - * - * @see Date::convertString() - */ - protected function convertString($value, $addErrors = true) - { - // Custom week format support - if (strpos($this->format, 'Y-\WW') === 0 - && preg_match('/^([0-9]{4})\-W([0-9]{2})/', $value, $matches) - ) { - $date = new DateTime; - $date->setISODate($matches[1], $matches[2]); - } else { - $date = DateTime::createFromFormat($this->format, $value, $this->timezone); - } - - // Invalid dates can show up as warnings (ie. "2007-02-99") - // and still return a DateTime object. - $errors = DateTime::getLastErrors(); - if ($errors['warning_count'] > 0) { - if ($addErrors) { - $this->error(self::FALSEFORMAT); - } - return false; - } - - return $date; - } - - /** - * Returns true if a date is within a valid step - * - * @param string|int|\DateTime $value - * @return bool - * @throws Exception\InvalidArgumentException - */ - public function isValid($value) - { - if (!parent::isValid($value)) { - return false; - } - - $valueDate = $this->convertToDateTime($value, false); // avoid duplicate errors - $baseDate = $this->convertToDateTime($this->baseValue, false); - $step = $this->getStep(); - - // Same date? - if ($valueDate == $baseDate) { - return true; - } - - // Optimization for simple intervals. - // Handle intervals of just one date or time unit. - $intervalParts = explode('|', $step->format('%y|%m|%d|%h|%i|%s')); - $partCounts = array_count_values($intervalParts); - - $unitKeys = array('years', 'months', 'days', 'hours', 'minutes', 'seconds'); - $intervalParts = array_combine($unitKeys, $intervalParts); - - // Get absolute time difference to avoid special cases of missing/added time - $absoluteValueDate = new DateTime($valueDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC')); - $absoluteBaseDate = new DateTime($baseDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC')); - - $timeDiff = $absoluteValueDate->diff($absoluteBaseDate, 1); - $diffParts = array_combine($unitKeys, explode('|', $timeDiff->format('%y|%m|%d|%h|%i|%s'))); - - if (5 === $partCounts["0"]) { - // Find the unit with the non-zero interval - $intervalUnit = null; - $stepValue = null; - foreach ($intervalParts as $key => $value) { - if (0 != $value) { - $intervalUnit = $key; - $stepValue = (int) $value; - break; - } - } - - // Check date units - if (in_array($intervalUnit, array('years', 'months', 'days'))) { - switch ($intervalUnit) { - case 'years': - if (0 == $diffParts['months'] && 0 == $diffParts['days'] - && 0 == $diffParts['hours'] && 0 == $diffParts['minutes'] - && 0 == $diffParts['seconds'] - ) { - if (($diffParts['years'] % $stepValue) === 0) { - return true; - } - } - break; - case 'months': - if (0 == $diffParts['days'] && 0 == $diffParts['hours'] - && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds'] - ) { - $months = ($diffParts['years'] * 12) + $diffParts['months']; - if (($months % $stepValue) === 0) { - return true; - } - } - break; - case 'days': - if (0 == $diffParts['hours'] && 0 == $diffParts['minutes'] - && 0 == $diffParts['seconds'] - ) { - $days = $timeDiff->format('%a'); // Total days - if (($days % $stepValue) === 0) { - return true; - } - } - break; - } - $this->error(self::NOT_STEP); - return false; - } - - // Check time units - if (in_array($intervalUnit, array('hours', 'minutes', 'seconds'))) { - // Simple test if $stepValue is 1. - if (1 == $stepValue) { - if ('hours' === $intervalUnit - && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds'] - ) { - return true; - } elseif ('minutes' === $intervalUnit && 0 == $diffParts['seconds']) { - return true; - } elseif ('seconds' === $intervalUnit) { - return true; - } - - $this->error(self::NOT_STEP); - - return false; - } - - // Simple test for same day, when using default baseDate - if ($baseDate->format('Y-m-d') == $valueDate->format('Y-m-d') - && $baseDate->format('Y-m-d') == '1970-01-01' - ) { - switch ($intervalUnit) { - case 'hours': - if (0 == $diffParts['minutes'] && 0 == $diffParts['seconds']) { - if (($diffParts['hours'] % $stepValue) === 0) { - return true; - } - } - break; - case 'minutes': - if (0 == $diffParts['seconds']) { - $minutes = ($diffParts['hours'] * 60) + $diffParts['minutes']; - if (($minutes % $stepValue) === 0) { - return true; - } - } - break; - case 'seconds': - $seconds = ($diffParts['hours'] * 60 * 60) - + ($diffParts['minutes'] * 60) - + $diffParts['seconds']; - if (($seconds % $stepValue) === 0) { - return true; - } - break; - } - $this->error(self::NOT_STEP); - return false; - } - } - } - - return $this->fallbackIncrementalIterationLogic($baseDate, $valueDate, $intervalParts, $diffParts, $step); - } - - /** - * Fall back to slower (but accurate) method for complex intervals. - * Keep adding steps to the base date until a match is found - * or until the value is exceeded. - * - * This is really slow if the interval is small, especially if the - * default base date of 1/1/1970 is used. We can skip a chunk of - * iterations by starting at the lower bound of steps needed to reach - * the target - * - * @param DateTime $baseDate - * @param DateTime $valueDate - * @param int[] $intervalParts - * @param int[] $diffParts - * @param DateInterval $step - * - * @return bool - */ - private function fallbackIncrementalIterationLogic( - DateTime $baseDate, - DateTime $valueDate, - array $intervalParts, - array $diffParts, - DateInterval $step - ) { - list($minSteps, $requiredIterations) = $this->computeMinStepAndRequiredIterations($intervalParts, $diffParts); - $minimumInterval = $this->computeMinimumInterval($intervalParts, $minSteps); - $isIncrementalStepping = $baseDate < $valueDate; - $dateModificationOperation = $isIncrementalStepping ? 'add' : 'sub'; - - for ($offsetIterations = 0; $offsetIterations < $requiredIterations; $offsetIterations += 1) { - $baseDate->{$dateModificationOperation}($minimumInterval); - } - - while (($isIncrementalStepping && $baseDate < $valueDate) - || (! $isIncrementalStepping && $baseDate > $valueDate) - ) { - $baseDate->{$dateModificationOperation}($step); - - if ($baseDate == $valueDate) { - return true; - } - } - - $this->error(self::NOT_STEP); - - return false; - } - - /** - * Computes minimum interval to use for iterations while checking steps - * - * @param int[] $intervalParts - * @param int $minSteps - * - * @return DateInterval - */ - private function computeMinimumInterval(array $intervalParts, $minSteps) - { - return new DateInterval(sprintf( - 'P%dY%dM%dDT%dH%dM%dS', - $intervalParts['years'] * $minSteps, - $intervalParts['months'] * $minSteps, - $intervalParts['days'] * $minSteps, - $intervalParts['hours'] * $minSteps, - $intervalParts['minutes'] * $minSteps, - $intervalParts['seconds'] * $minSteps - )); - } - - /** - * @param int[] $intervalParts - * @param int[] $diffParts - * - * @return int[] (ordered tuple containing minimum steps and required step iterations - */ - private function computeMinStepAndRequiredIterations(array $intervalParts, array $diffParts) - { - $minSteps = $this->computeMinSteps($intervalParts, $diffParts); - - // If we use PHP_INT_MAX DateInterval::__construct falls over with a bad format error - // before we reach the max on 64 bit machines - $maxInteger = min(pow(2, 31), PHP_INT_MAX); - // check for integer overflow and split $minimum interval if needed - $maximumInterval = max($intervalParts); - $requiredStepIterations = 1; - - if (($minSteps * $maximumInterval) > $maxInteger) { - $requiredStepIterations = ceil(($minSteps * $maximumInterval) / $maxInteger); - $minSteps = floor($minSteps / $requiredStepIterations); - } - - return array($minSteps, $minSteps ? $requiredStepIterations : 0); - } - - /** - * Multiply the step interval by the lower bound of steps to reach the target - * - * @param int[] $intervalParts - * @param int[] $diffParts - * - * @return int - */ - private function computeMinSteps(array $intervalParts, array $diffParts) - { - $intervalMaxSeconds = $this->computeIntervalMaxSeconds($intervalParts); - - return (0 == $intervalMaxSeconds) - ? 0 - : max(floor($this->computeDiffMinSeconds($diffParts) / $intervalMaxSeconds) - 1, 0); - } - - /** - * Get upper bound of the given interval in seconds - * Converts a given `$intervalParts` array into seconds - * - * @param int[] $intervalParts - * - * @return int - */ - private function computeIntervalMaxSeconds(array $intervalParts) - { - return ($intervalParts['years'] * 60 * 60 * 24 * 366) - + ($intervalParts['months'] * 60 * 60 * 24 * 31) - + ($intervalParts['days'] * 60 * 60 * 24) - + ($intervalParts['hours'] * 60 * 60) - + ($intervalParts['minutes'] * 60) - + $intervalParts['seconds']; - } - - /** - * Get lower bound of difference in secondss - * Converts a given `$diffParts` array into seconds - * - * @param int[] $diffParts - * - * @return int - */ - private function computeDiffMinSeconds(array $diffParts) - { - return ($diffParts['years'] * 60 * 60 * 24 * 365) - + ($diffParts['months'] * 60 * 60 * 24 * 28) - + ($diffParts['days'] * 60 * 60 * 24) - + ($diffParts['hours'] * 60 * 60) - + ($diffParts['minutes'] * 60) - + $diffParts['seconds']; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php b/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php deleted file mode 100644 index 9dac888538..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php +++ /dev/null @@ -1,330 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Db; - -use Traversable; -use Zend\Db\Adapter\Adapter as DbAdapter; -use Zend\Db\Sql\Select; -use Zend\Db\Sql\Sql; -use Zend\Db\Sql\TableIdentifier; -use Zend\Stdlib\ArrayUtils; -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Class for Database record validation - */ -abstract class AbstractDb extends AbstractValidator -{ - /** - * Error constants - */ - const ERROR_NO_RECORD_FOUND = 'noRecordFound'; - const ERROR_RECORD_FOUND = 'recordFound'; - - /** - * @var array Message templates - */ - protected $messageTemplates = array( - self::ERROR_NO_RECORD_FOUND => "No record matching the input was found", - self::ERROR_RECORD_FOUND => "A record matching the input was found", - ); - - /** - * Select object to use. can be set, or will be auto-generated - * - * @var Select - */ - protected $select; - - /** - * @var string - */ - protected $schema = null; - - /** - * @var string - */ - protected $table = ''; - - /** - * @var string - */ - protected $field = ''; - - /** - * @var mixed - */ - protected $exclude = null; - - /** - * Database adapter to use. If null isValid() will throw an exception - * - * @var \Zend\Db\Adapter\Adapter - */ - protected $adapter = null; - - /** - * Provides basic configuration for use with Zend\Validator\Db Validators - * Setting $exclude allows a single record to be excluded from matching. - * Exclude can either be a String containing a where clause, or an array with `field` and `value` keys - * to define the where clause added to the sql. - * A database adapter may optionally be supplied to avoid using the registered default adapter. - * - * The following option keys are supported: - * 'table' => The database table to validate against - * 'schema' => The schema keys - * 'field' => The field to check for a match - * 'exclude' => An optional where clause or field/value pair to exclude from the query - * 'adapter' => An optional database adapter to use - * - * @param array|Traversable|Select $options Options to use for this validator - * @throws \Zend\Validator\Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - parent::__construct($options); - - if ($options instanceof Select) { - $this->setSelect($options); - return; - } - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (func_num_args() > 1) { - $options = func_get_args(); - $firstArgument = array_shift($options); - if (is_array($firstArgument)) { - $temp = ArrayUtils::iteratorToArray($firstArgument); - } else { - $temp['table'] = $firstArgument; - } - - $temp['field'] = array_shift($options); - - if (!empty($options)) { - $temp['exclude'] = array_shift($options); - } - - if (!empty($options)) { - $temp['adapter'] = array_shift($options); - } - - $options = $temp; - } - - if (!array_key_exists('table', $options) && !array_key_exists('schema', $options)) { - throw new Exception\InvalidArgumentException('Table or Schema option missing!'); - } - - if (!array_key_exists('field', $options)) { - throw new Exception\InvalidArgumentException('Field option missing!'); - } - - if (array_key_exists('adapter', $options)) { - $this->setAdapter($options['adapter']); - } - - if (array_key_exists('exclude', $options)) { - $this->setExclude($options['exclude']); - } - - $this->setField($options['field']); - if (array_key_exists('table', $options)) { - $this->setTable($options['table']); - } - - if (array_key_exists('schema', $options)) { - $this->setSchema($options['schema']); - } - } - - /** - * Returns the set adapter - * - * @throws \Zend\Validator\Exception\RuntimeException When no database adapter is defined - * @return DbAdapter - */ - public function getAdapter() - { - return $this->adapter; - } - - /** - * Sets a new database adapter - * - * @param DbAdapter $adapter - * @return self Provides a fluent interface - */ - public function setAdapter(DbAdapter $adapter) - { - $this->adapter = $adapter; - return $this; - } - - /** - * Returns the set exclude clause - * - * @return string|array - */ - public function getExclude() - { - return $this->exclude; - } - - /** - * Sets a new exclude clause - * - * @param string|array $exclude - * @return self Provides a fluent interface - */ - public function setExclude($exclude) - { - $this->exclude = $exclude; - $this->select = null; - return $this; - } - - /** - * Returns the set field - * - * @return string|array - */ - public function getField() - { - return $this->field; - } - - /** - * Sets a new field - * - * @param string $field - * @return AbstractDb - */ - public function setField($field) - { - $this->field = (string) $field; - $this->select = null; - return $this; - } - - /** - * Returns the set table - * - * @return string - */ - public function getTable() - { - return $this->table; - } - - /** - * Sets a new table - * - * @param string $table - * @return self Provides a fluent interface - */ - public function setTable($table) - { - $this->table = (string) $table; - $this->select = null; - return $this; - } - - /** - * Returns the set schema - * - * @return string - */ - public function getSchema() - { - return $this->schema; - } - - /** - * Sets a new schema - * - * @param string $schema - * @return self Provides a fluent interface - */ - public function setSchema($schema) - { - $this->schema = $schema; - $this->select = null; - return $this; - } - - /** - * Sets the select object to be used by the validator - * - * @param Select $select - * @return self Provides a fluent interface - */ - public function setSelect(Select $select) - { - $this->select = $select; - return $this; - } - - /** - * Gets the select object to be used by the validator. - * If no select object was supplied to the constructor, - * then it will auto-generate one from the given table, - * schema, field, and adapter options. - * - * @return Select The Select object which will be used - */ - public function getSelect() - { - if ($this->select instanceof Select) { - return $this->select; - } - - // Build select object - $select = new Select(); - $tableIdentifier = new TableIdentifier($this->table, $this->schema); - $select->from($tableIdentifier)->columns(array($this->field)); - $select->where->equalTo($this->field, null); - - if ($this->exclude !== null) { - if (is_array($this->exclude)) { - $select->where->notEqualTo( - $this->exclude['field'], - $this->exclude['value'] - ); - } else { - $select->where($this->exclude); - } - } - - $this->select = $select; - - return $this->select; - } - - /** - * Run query and returns matches, or null if no matches are found. - * - * @param string $value - * @return array when matches are found. - */ - protected function query($value) - { - $sql = new Sql($this->getAdapter()); - $select = $this->getSelect(); - $statement = $sql->prepareStatementForSqlObject($select); - $parameters = $statement->getParameterContainer(); - $parameters['where1'] = $value; - $result = $statement->execute(); - - return $result->current(); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php b/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php deleted file mode 100644 index e87fdd6858..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Db; - -use Zend\Validator\Exception; - -/** - * Confirms a record does not exist in a table. - */ -class NoRecordExists extends AbstractDb -{ - public function isValid($value) - { - /* - * Check for an adapter being defined. If not, throw an exception. - */ - if (null === $this->adapter) { - throw new Exception\RuntimeException('No database adapter present'); - } - - $valid = true; - $this->setValue($value); - - $result = $this->query($value); - if ($result) { - $valid = false; - $this->error(self::ERROR_RECORD_FOUND); - } - - return $valid; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php b/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php deleted file mode 100644 index a7d06d33c1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Db; - -use Zend\Validator\Exception; - -/** - * Confirms a record exists in a table. - */ -class RecordExists extends AbstractDb -{ - public function isValid($value) - { - /* - * Check for an adapter being defined. If not, throw an exception. - */ - if (null === $this->adapter) { - throw new Exception\RuntimeException('No database adapter present'); - } - - $valid = true; - $this->setValue($value); - - $result = $this->query($value); - if (!$result) { - $valid = false; - $this->error(self::ERROR_NO_RECORD_FOUND); - } - - return $valid; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Digits.php b/civicrm/vendor/zendframework/zend-validator/src/Digits.php deleted file mode 100644 index 94210c917d..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Digits.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Zend\Filter\Digits as DigitsFilter; - -class Digits extends AbstractValidator -{ - const NOT_DIGITS = 'notDigits'; - const STRING_EMPTY = 'digitsStringEmpty'; - const INVALID = 'digitsInvalid'; - - /** - * Digits filter used for validation - * - * @var \Zend\Filter\Digits - */ - protected static $filter = null; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_DIGITS => "The input must contain only digits", - self::STRING_EMPTY => "The input is an empty string", - self::INVALID => "Invalid type given. String, integer or float expected", - ); - - /** - * Returns true if and only if $value only contains digit characters - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value) && !is_int($value) && !is_float($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue((string) $value); - - if ('' === $this->getValue()) { - $this->error(self::STRING_EMPTY); - return false; - } - - if (null === static::$filter) { - static::$filter = new DigitsFilter(); - } - - if ($this->getValue() !== static::$filter->filter($this->getValue())) { - $this->error(self::NOT_DIGITS); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php b/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php deleted file mode 100644 index c12368665e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php +++ /dev/null @@ -1,549 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -class EmailAddress extends AbstractValidator -{ - const INVALID = 'emailAddressInvalid'; - const INVALID_FORMAT = 'emailAddressInvalidFormat'; - const INVALID_HOSTNAME = 'emailAddressInvalidHostname'; - const INVALID_MX_RECORD = 'emailAddressInvalidMxRecord'; - const INVALID_SEGMENT = 'emailAddressInvalidSegment'; - const DOT_ATOM = 'emailAddressDotAtom'; - const QUOTED_STRING = 'emailAddressQuotedString'; - const INVALID_LOCAL_PART = 'emailAddressInvalidLocalPart'; - const LENGTH_EXCEEDED = 'emailAddressLengthExceeded'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String expected", - self::INVALID_FORMAT => "The input is not a valid email address. Use the basic format local-part@hostname", - self::INVALID_HOSTNAME => "'%hostname%' is not a valid hostname for the email address", - self::INVALID_MX_RECORD => "'%hostname%' does not appear to have any valid MX or A records for the email address", - self::INVALID_SEGMENT => "'%hostname%' is not in a routable network segment. The email address should not be resolved from public network", - self::DOT_ATOM => "'%localPart%' can not be matched against dot-atom format", - self::QUOTED_STRING => "'%localPart%' can not be matched against quoted-string format", - self::INVALID_LOCAL_PART => "'%localPart%' is not a valid local part for the email address", - self::LENGTH_EXCEEDED => "The input exceeds the allowed length", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'hostname' => 'hostname', - 'localPart' => 'localPart' - ); - - /** - * @var string - */ - protected $hostname; - - /** - * @var string - */ - protected $localPart; - - /** - * Returns the found mx record informations - * - * @var array - */ - protected $mxRecord; - - /** - * Internal options array - */ - protected $options = array( - 'useMxCheck' => false, - 'useDeepMxCheck' => false, - 'useDomainCheck' => true, - 'allow' => Hostname::ALLOW_DNS, - 'hostnameValidator' => null, - ); - - /** - * Instantiates hostname validator for local use - * - * The following additional option keys are supported: - * 'hostnameValidator' => A hostname validator, see Zend\Validator\Hostname - * 'allow' => Options for the hostname validator, see Zend\Validator\Hostname::ALLOW_* - * 'useMxCheck' => If MX check should be enabled, boolean - * 'useDeepMxCheck' => If a deep MX check should be done, boolean - * - * @param array|\Traversable $options OPTIONAL - */ - public function __construct($options = array()) - { - if (!is_array($options)) { - $options = func_get_args(); - $temp['allow'] = array_shift($options); - if (!empty($options)) { - $temp['useMxCheck'] = array_shift($options); - } - - if (!empty($options)) { - $temp['hostnameValidator'] = array_shift($options); - } - - $options = $temp; - } - - parent::__construct($options); - } - - /** - * Sets the validation failure message template for a particular key - * Adds the ability to set messages to the attached hostname validator - * - * @param string $messageString - * @param string $messageKey OPTIONAL - * @return AbstractValidator Provides a fluent interface - */ - public function setMessage($messageString, $messageKey = null) - { - if ($messageKey === null) { - $this->getHostnameValidator()->setMessage($messageString); - parent::setMessage($messageString); - return $this; - } - - if (!isset($this->messageTemplates[$messageKey])) { - $this->getHostnameValidator()->setMessage($messageString, $messageKey); - } else { - parent::setMessage($messageString, $messageKey); - } - - return $this; - } - - /** - * Returns the set hostname validator - * - * If was not previously set then lazy load a new one - * - * @return Hostname - */ - public function getHostnameValidator() - { - if (!isset($this->options['hostnameValidator'])) { - $this->options['hostnameValidator'] = new Hostname($this->getAllow()); - } - - return $this->options['hostnameValidator']; - } - - /** - * @param Hostname $hostnameValidator OPTIONAL - * @return EmailAddress Provides a fluent interface - */ - public function setHostnameValidator(Hostname $hostnameValidator = null) - { - $this->options['hostnameValidator'] = $hostnameValidator; - - return $this; - } - - /** - * Returns the allow option of the attached hostname validator - * - * @return int - */ - public function getAllow() - { - return $this->options['allow']; - } - - /** - * Sets the allow option of the hostname validator to use - * - * @param int $allow - * @return EmailAddress Provides a fluent interface - */ - public function setAllow($allow) - { - $this->options['allow'] = $allow; - if (isset($this->options['hostnameValidator'])) { - $this->options['hostnameValidator']->setAllow($allow); - } - - return $this; - } - - /** - * Whether MX checking via getmxrr is supported or not - * - * @return bool - */ - public function isMxSupported() - { - return function_exists('getmxrr'); - } - - /** - * Returns the set validateMx option - * - * @return bool - */ - public function getMxCheck() - { - return $this->options['useMxCheck']; - } - - /** - * Set whether we check for a valid MX record via DNS - * - * This only applies when DNS hostnames are validated - * - * @param bool $mx Set allowed to true to validate for MX records, and false to not validate them - * @return EmailAddress Fluid Interface - */ - public function useMxCheck($mx) - { - $this->options['useMxCheck'] = (bool) $mx; - return $this; - } - - /** - * Returns the set deepMxCheck option - * - * @return bool - */ - public function getDeepMxCheck() - { - return $this->options['useDeepMxCheck']; - } - - /** - * Use deep validation for MX records - * - * @param bool $deep Set deep to true to perform a deep validation process for MX records - * @return EmailAddress Fluid Interface - */ - public function useDeepMxCheck($deep) - { - $this->options['useDeepMxCheck'] = (bool) $deep; - return $this; - } - - /** - * Returns the set domainCheck option - * - * @return bool - */ - public function getDomainCheck() - { - return $this->options['useDomainCheck']; - } - - /** - * Sets if the domain should also be checked - * or only the local part of the email address - * - * @param bool $domain - * @return EmailAddress Fluid Interface - */ - public function useDomainCheck($domain = true) - { - $this->options['useDomainCheck'] = (bool) $domain; - return $this; - } - - /** - * Returns if the given host is reserved - * - * The following addresses are seen as reserved - * '0.0.0.0/8', '10.0.0.0/8', '127.0.0.0/8' - * '100.64.0.0/10' - * '172.16.0.0/12' - * '198.18.0.0/15' - * '169.254.0.0/16', '192.168.0.0/16' - * '192.0.2.0/24', '192.88.99.0/24', '198.51.100.0/24', '203.0.113.0/24' - * '224.0.0.0/4', '240.0.0.0/4' - * @see http://en.wikipedia.org/wiki/Reserved_IP_addresses - * - * As of RFC5753 (JAN 2010), the following blocks are no longer reserved: - * - 128.0.0.0/16 - * - 191.255.0.0/16 - * - 223.255.255.0/24 - * @see http://tools.ietf.org/html/rfc5735#page-6 - * - * As of RFC6598 (APR 2012), the following blocks are now reserved: - * - 100.64.0.0/10 - * @see http://tools.ietf.org/html/rfc6598#section-7 - * - * @param string $host - * @return bool Returns false when minimal one of the given addresses is not reserved - */ - protected function isReserved($host) - { - if (!preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $host)) { - $host = gethostbynamel($host); - } else { - $host = array($host); - } - - if (empty($host)) { - return false; - } - - foreach ($host as $server) { - // Search for 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8 - if (!preg_match('/^(0|10|127)(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server) && - // Search for 100.64.0.0/10 - !preg_match('/^100\.(6[0-4]|[7-9][0-9]|1[0-1][0-9]|12[0-7])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) && - // Search for 172.16.0.0/12 - !preg_match('/^172\.(1[6-9]|2[0-9]|3[0-1])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) && - // Search for 198.18.0.0/15 - !preg_match('/^198\.(1[8-9])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) && - // Search for 169.254.0.0/16, 192.168.0.0/16 - !preg_match('/^(169\.254|192\.168)(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) && - // Search for 192.0.2.0/24, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24 - !preg_match('/^(192\.0\.2|192\.88\.99|198\.51\.100|203\.0\.113)\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$/', $server) && - // Search for 224.0.0.0/4, 240.0.0.0/4 - !preg_match('/^(2(2[4-9]|[3-4][0-9]|5[0-5]))(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server) - ) { - return false; - } - } - - return true; - } - - /** - * Internal method to validate the local part of the email address - * - * @return bool - */ - protected function validateLocalPart() - { - // First try to match the local part on the common dot-atom format - $result = false; - - // Dot-atom characters are: 1*atext *("." 1*atext) - // atext: ALPHA / DIGIT / and "!", "#", "$", "%", "&", "'", "*", - // "+", "-", "/", "=", "?", "^", "_", "`", "{", "|", "}", "~" - $atext = 'a-zA-Z0-9\x21\x23\x24\x25\x26\x27\x2a\x2b\x2d\x2f\x3d\x3f\x5e\x5f\x60\x7b\x7c\x7d\x7e'; - if (preg_match('/^[' . $atext . ']+(\x2e+[' . $atext . ']+)*$/', $this->idnToAscii($this->localPart))) { - $result = true; - } else { - // Try quoted string format (RFC 5321 Chapter 4.1.2) - - // Quoted-string characters are: DQUOTE *(qtext/quoted-pair) DQUOTE - $qtext = '\x20-\x21\x23-\x5b\x5d-\x7e'; // %d32-33 / %d35-91 / %d93-126 - $quotedPair = '\x20-\x7e'; // %d92 %d32-126 - if (preg_match('/^"(['. $qtext .']|\x5c[' . $quotedPair . '])*"$/', $this->localPart)) { - $result = true; - } else { - $this->error(self::DOT_ATOM); - $this->error(self::QUOTED_STRING); - $this->error(self::INVALID_LOCAL_PART); - } - } - - return $result; - } - - /** - * Returns the found MX Record information after validation including weight for further processing - * - * @return array - */ - public function getMXRecord() - { - return $this->mxRecord; - } - - /** - * Internal method to validate the servers MX records - * - * @return bool - */ - protected function validateMXRecords() - { - $mxHosts = array(); - $weight = array(); - $result = getmxrr($this->idnToAscii($this->hostname), $mxHosts, $weight); - if (!empty($mxHosts) && !empty($weight)) { - $this->mxRecord = array_combine($mxHosts, $weight); - } else { - $this->mxRecord = $mxHosts; - } - - arsort($this->mxRecord); - - // Fallback to IPv4 hosts if no MX record found (RFC 2821 SS 5). - if (!$result) { - $result = gethostbynamel($this->hostname); - if (is_array($result)) { - $this->mxRecord = array_flip($result); - } - } - - if (!$result) { - $this->error(self::INVALID_MX_RECORD); - return $result; - } - - if (!$this->options['useDeepMxCheck']) { - return $result; - } - - $validAddress = false; - $reserved = true; - foreach ($this->mxRecord as $hostname => $weight) { - $res = $this->isReserved($hostname); - if (!$res) { - $reserved = false; - } - - if (!$res - && (checkdnsrr($hostname, "A") - || checkdnsrr($hostname, "AAAA") - || checkdnsrr($hostname, "A6")) - ) { - $validAddress = true; - break; - } - } - - if (!$validAddress) { - $result = false; - $error = ($reserved) ? self::INVALID_SEGMENT : self::INVALID_MX_RECORD; - $this->error($error); - } - - return $result; - } - - /** - * Internal method to validate the hostname part of the email address - * - * @return bool - */ - protected function validateHostnamePart() - { - $hostname = $this->getHostnameValidator()->setTranslator($this->getTranslator()) - ->isValid($this->hostname); - if (!$hostname) { - $this->error(self::INVALID_HOSTNAME); - // Get messages and errors from hostnameValidator - foreach ($this->getHostnameValidator()->getMessages() as $code => $message) { - $this->abstractOptions['messages'][$code] = $message; - } - } elseif ($this->options['useMxCheck']) { - // MX check on hostname - $hostname = $this->validateMXRecords(); - } - - return $hostname; - } - - /** - * Splits the given value in hostname and local part of the email address - * - * @param string $value Email address to be split - * @return bool Returns false when the email can not be split - */ - protected function splitEmailParts($value) - { - $value = is_string($value) ? $value : ''; - - // Split email address up and disallow '..' - if (strpos($value, '..') !== false - || ! preg_match('/^(.+)@([^@]+)$/', $value, $matches) - ) { - return false; - } - - $this->localPart = $matches[1]; - $this->hostname = $matches[2]; - - return true; - } - - /** - * Defined by Zend\Validator\ValidatorInterface - * - * Returns true if and only if $value is a valid email address - * according to RFC2822 - * - * @link http://www.ietf.org/rfc/rfc2822.txt RFC2822 - * @link http://www.columbia.edu/kermit/ascii.html US-ASCII characters - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $length = true; - $this->setValue($this->idnToUtf8($value)); - - // Split email address up and disallow '..' - if (!$this->splitEmailParts($this->getValue())) { - $this->error(self::INVALID_FORMAT); - return false; - } - - if ((strlen($this->localPart) > 64) || (strlen($this->hostname) > 255)) { - $length = false; - $this->error(self::LENGTH_EXCEEDED); - } - - // Match hostname part - if ($this->options['useDomainCheck']) { - $hostname = $this->validateHostnamePart(); - } - - $local = $this->validateLocalPart(); - - // If both parts valid, return true - if ($local && $length) { - if (($this->options['useDomainCheck'] && $hostname) || !$this->options['useDomainCheck']) { - return true; - } - } - - return false; - } - - /** - * Safely convert UTF-8 encoded domain name to ASCII - * @param string $email the UTF-8 encoded email - * @return string - */ - protected function idnToAscii($email) - { - if (extension_loaded('intl')) { - return (idn_to_ascii($email) ?: $email); - } - return $email; - } - - /** - * Safely convert ASCII encoded domain name to UTF-8 - * @param string $email the ASCII encoded email - * @return string - */ - protected function idnToUtf8($email) - { - if (extension_loaded('intl')) { - return idn_to_utf8($email); - } - return $email; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php deleted file mode 100644 index a4aa15f412..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php deleted file mode 100644 index 7f4f0b1af5..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -interface ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php deleted file mode 100644 index 4a6b7c03b6..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -class ExtensionNotLoadedException extends RuntimeException -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php deleted file mode 100644 index b6518b03d6..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php deleted file mode 100644 index 4e65bd86a1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -class InvalidMagicMimeFileException extends InvalidArgumentException -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php deleted file mode 100644 index a6319e0591..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Exception; - -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Explode.php b/civicrm/vendor/zendframework/zend-validator/src/Explode.php deleted file mode 100644 index 54177ec293..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Explode.php +++ /dev/null @@ -1,210 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class Explode extends AbstractValidator implements ValidatorPluginManagerAwareInterface -{ - const INVALID = 'explodeInvalid'; - - protected $pluginManager; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given", - ); - - /** - * @var array - */ - protected $messageVariables = array(); - - /** - * @var string - */ - protected $valueDelimiter = ','; - - /** - * @var ValidatorInterface - */ - protected $validator; - - /** - * @var bool - */ - protected $breakOnFirstFailure = false; - - /** - * Sets the delimiter string that the values will be split upon - * - * @param string $delimiter - * @return Explode - */ - public function setValueDelimiter($delimiter) - { - $this->valueDelimiter = $delimiter; - return $this; - } - - /** - * Returns the delimiter string that the values will be split upon - * - * @return string - */ - public function getValueDelimiter() - { - return $this->valueDelimiter; - } - - /** - * Set validator plugin manager - * - * @param ValidatorPluginManager $pluginManager - */ - public function setValidatorPluginManager(ValidatorPluginManager $pluginManager) - { - $this->pluginManager = $pluginManager; - } - - /** - * Get validator plugin manager - * - * @return ValidatorPluginManager - */ - public function getValidatorPluginManager() - { - if (!$this->pluginManager) { - $this->setValidatorPluginManager(new ValidatorPluginManager()); - } - - return $this->pluginManager; - } - - /** - * Sets the Validator for validating each value - * - * @param ValidatorInterface|array $validator - * @throws Exception\RuntimeException - * @return Explode - */ - public function setValidator($validator) - { - if (is_array($validator)) { - if (!isset($validator['name'])) { - throw new Exception\RuntimeException( - 'Invalid validator specification provided; does not include "name" key' - ); - } - $name = $validator['name']; - $options = isset($validator['options']) ? $validator['options'] : array(); - $validator = $this->getValidatorPluginManager()->get($name, $options); - } - - if (!$validator instanceof ValidatorInterface) { - throw new Exception\RuntimeException( - 'Invalid validator given' - ); - } - - $this->validator = $validator; - return $this; - } - - /** - * Gets the Validator for validating each value - * - * @return ValidatorInterface - */ - public function getValidator() - { - return $this->validator; - } - - /** - * Set break on first failure setting - * - * @param bool $break - * @return Explode - */ - public function setBreakOnFirstFailure($break) - { - $this->breakOnFirstFailure = (bool) $break; - return $this; - } - - /** - * Get break on first failure setting - * - * @return bool - */ - public function isBreakOnFirstFailure() - { - return $this->breakOnFirstFailure; - } - - /** - * Defined by Zend\Validator\ValidatorInterface - * - * Returns true if all values validate true - * - * @param mixed $value - * @param mixed $context Extra "context" to provide the composed validator - * @return bool - * @throws Exception\RuntimeException - */ - public function isValid($value, $context = null) - { - $this->setValue($value); - - if ($value instanceof Traversable) { - $value = ArrayUtils::iteratorToArray($value); - } - - if (is_array($value)) { - $values = $value; - } elseif (is_string($value)) { - $delimiter = $this->getValueDelimiter(); - // Skip explode if delimiter is null, - // used when value is expected to be either an - // array when multiple values and a string for - // single values (ie. MultiCheckbox form behavior) - $values = (null !== $delimiter) - ? explode($this->valueDelimiter, $value) - : array($value); - } else { - $values = array($value); - } - - $validator = $this->getValidator(); - - if (!$validator) { - throw new Exception\RuntimeException(sprintf( - '%s expects a validator to be set; none given', - __METHOD__ - )); - } - - foreach ($values as $value) { - if (!$validator->isValid($value, $context)) { - $this->abstractOptions['messages'][] = $validator->getMessages(); - - if ($this->isBreakOnFirstFailure()) { - return false; - } - } - } - - return count($this->abstractOptions['messages']) == 0; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Count.php b/civicrm/vendor/zendframework/zend-validator/src/File/Count.php deleted file mode 100644 index 6a6ba37632..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Count.php +++ /dev/null @@ -1,251 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for counting all given files - * - */ -class Count extends AbstractValidator -{ - /**#@+ - * @const string Error constants - */ - const TOO_MANY = 'fileCountTooMany'; - const TOO_FEW = 'fileCountTooFew'; - /**#@-*/ - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::TOO_MANY => "Too many files, maximum '%max%' are allowed but '%count%' are given", - self::TOO_FEW => "Too few files, minimum '%min%' are expected but '%count%' are given", - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'min' => array('options' => 'min'), - 'max' => array('options' => 'max'), - 'count' => 'count' - ); - - /** - * Actual filecount - * - * @var int - */ - protected $count; - - /** - * Internal file array - * @var array - */ - protected $files; - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'min' => null, // Minimum file count, if null there is no minimum file count - 'max' => null, // Maximum file count, if null there is no maximum file count - ); - - /** - * Sets validator options - * - * Min limits the file count, when used with max=null it is the maximum file count - * It also accepts an array with the keys 'min' and 'max' - * - * If $options is an integer, it will be used as maximum file count - * As Array is accepts the following keys: - * 'min': Minimum filecount - * 'max': Maximum filecount - * - * @param int|array|\Traversable $options Options for the adapter - */ - public function __construct($options = null) - { - if (is_string($options) || is_numeric($options)) { - $options = array('max' => $options); - } - - if (1 < func_num_args()) { - $options['min'] = func_get_arg(0); - $options['max'] = func_get_arg(1); - } - - parent::__construct($options); - } - - /** - * Returns the minimum file count - * - * @return int - */ - public function getMin() - { - return $this->options['min']; - } - - /** - * Sets the minimum file count - * - * @param int|array $min The minimum file count - * @return Count Provides a fluent interface - * @throws Exception\InvalidArgumentException When min is greater than max - */ - public function setMin($min) - { - if (is_array($min) and isset($min['min'])) { - $min = $min['min']; - } - - if (!is_string($min) and !is_numeric($min)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $min = (int) $min; - if (($this->getMax() !== null) && ($min > $this->getMax())) { - throw new Exception\InvalidArgumentException( - "The minimum must be less than or equal to the maximum file count, but {$min} > {$this->getMax()}" - ); - } - - $this->options['min'] = $min; - return $this; - } - - /** - * Returns the maximum file count - * - * @return int - */ - public function getMax() - { - return $this->options['max']; - } - - /** - * Sets the maximum file count - * - * @param int|array $max The maximum file count - * @return Count Provides a fluent interface - * @throws Exception\InvalidArgumentException When max is smaller than min - */ - public function setMax($max) - { - if (is_array($max) and isset($max['max'])) { - $max = $max['max']; - } - - if (!is_string($max) and !is_numeric($max)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $max = (int) $max; - if (($this->getMin() !== null) && ($max < $this->getMin())) { - throw new Exception\InvalidArgumentException( - "The maximum must be greater than or equal to the minimum file count, but {$max} < {$this->getMin()}" - ); - } - - $this->options['max'] = $max; - return $this; - } - - /** - * Adds a file for validation - * - * @param string|array $file - * @return Count - */ - public function addFile($file) - { - if (is_string($file)) { - $file = array($file); - } - - if (is_array($file)) { - foreach ($file as $name) { - if (!isset($this->files[$name]) && !empty($name)) { - $this->files[$name] = $name; - } - } - } - - return $this; - } - - /** - * Returns true if and only if the file count of all checked files is at least min and - * not bigger than max (when max is not null). Attention: When checking with set min you - * must give all files with the first call, otherwise you will get a false. - * - * @param string|array $value Filenames to check for count - * @param array $file File data from \Zend\File\Transfer\Transfer - * @return bool - */ - public function isValid($value, $file = null) - { - if (($file !== null) && !array_key_exists('destination', $file)) { - $file['destination'] = dirname($value); - } - - if (($file !== null) && array_key_exists('tmp_name', $file)) { - $value = $file['destination'] . DIRECTORY_SEPARATOR . $file['name']; - } - - if (($file === null) || !empty($file['tmp_name'])) { - $this->addFile($value); - } - - $this->count = count($this->files); - if (($this->getMax() !== null) && ($this->count > $this->getMax())) { - return $this->throwError($file, self::TOO_MANY); - } - - if (($this->getMin() !== null) && ($this->count < $this->getMin())) { - return $this->throwError($file, self::TOO_FEW); - } - - return true; - } - - /** - * Throws an error of the given type - * - * @param string $file - * @param string $errorType - * @return false - */ - protected function throwError($file, $errorType) - { - if ($file !== null) { - if (is_array($file)) { - if (array_key_exists('name', $file)) { - $this->value = $file['name']; - } - } elseif (is_string($file)) { - $this->value = $file; - } - } - - $this->error($errorType); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php b/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php deleted file mode 100644 index a5f3de8740..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\Exception; - -/** - * Validator for the crc32 hash of given files - */ -class Crc32 extends Hash -{ - /** - * @const string Error constants - */ - const DOES_NOT_MATCH = 'fileCrc32DoesNotMatch'; - const NOT_DETECTED = 'fileCrc32NotDetected'; - const NOT_FOUND = 'fileCrc32NotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_NOT_MATCH => "File does not match the given crc32 hashes", - self::NOT_DETECTED => "A crc32 hash could not be evaluated for the given file", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * Options for this validator - * - * @var string - */ - protected $options = array( - 'algorithm' => 'crc32', - 'hash' => null, - ); - - /** - * Returns all set crc32 hashes - * - * @return array - */ - public function getCrc32() - { - return $this->getHash(); - } - - /** - * Sets the crc32 hash for one or multiple files - * - * @param string|array $options - * @return Crc32 Provides a fluent interface - */ - public function setCrc32($options) - { - $this->setHash($options); - return $this; - } - - /** - * Adds the crc32 hash for one or multiple files - * - * @param string|array $options - * @return Crc32 Provides a fluent interface - */ - public function addCrc32($options) - { - $this->addHash($options); - return $this; - } - - /** - * Returns true if and only if the given file confirms the set hash - * - * @param string|array $value Filename to check for hash - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $hashes = array_unique(array_keys($this->getHash())); - $filehash = hash_file('crc32', $file); - if ($filehash === false) { - $this->error(self::NOT_DETECTED); - return false; - } - - foreach ($hashes as $hash) { - if ($filehash === $hash) { - return true; - } - } - - $this->error(self::DOES_NOT_MATCH); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php b/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php deleted file mode 100644 index e73d25bdcb..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\Exception; - -/** - * Validator for the excluding file extensions - */ -class ExcludeExtension extends Extension -{ - /** - * @const string Error constants - */ - const FALSE_EXTENSION = 'fileExcludeExtensionFalse'; - const NOT_FOUND = 'fileExcludeExtensionNotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::FALSE_EXTENSION => "File has an incorrect extension", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * Returns true if and only if the file extension of $value is not included in the - * set extension list - * - * @param string|array $value Real file to check for extension - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $extension = substr($filename, strrpos($filename, '.') + 1); - $extensions = $this->getExtension(); - - if ($this->getCase() && (!in_array($extension, $extensions))) { - return true; - } elseif (!$this->getCase()) { - foreach ($extensions as $ext) { - if (strtolower($ext) == strtolower($extension)) { - $this->error(self::FALSE_EXTENSION); - return false; - } - } - - return true; - } - - $this->error(self::FALSE_EXTENSION); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php b/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php deleted file mode 100644 index f0bd4f8cce..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use finfo; -use Zend\Validator\Exception; - -/** - * Validator for the mime type of a file - */ -class ExcludeMimeType extends MimeType -{ - const FALSE_TYPE = 'fileExcludeMimeTypeFalse'; - const NOT_DETECTED = 'fileExcludeMimeTypeNotDetected'; - const NOT_READABLE = 'fileExcludeMimeTypeNotReadable'; - - /** - * Returns true if the mimetype of the file does not matche the given ones. Also parts - * of mimetypes can be checked. If you give for example "image" all image - * mime types will not be accepted like "image/gif", "image/jpeg" and so on. - * - * @param string|array $value Real file to check for mimetype - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $filetype = $file['type']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['type'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - $filetype = $value['type']; - } else { - $file = $value; - $filename = basename($file); - $filetype = null; - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_READABLE); - return false; - } - - $mimefile = $this->getMagicFile(); - if (class_exists('finfo', false)) { - if (!$this->isMagicFileDisabled() && (!empty($mimefile) && empty($this->finfo))) { - $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile); - } - - if (empty($this->finfo)) { - $this->finfo = finfo_open(FILEINFO_MIME_TYPE); - } - - $this->type = null; - if (!empty($this->finfo)) { - $this->type = finfo_file($this->finfo, $file); - } - } - - if (empty($this->type) && $this->getHeaderCheck()) { - $this->type = $filetype; - } - - if (empty($this->type)) { - $this->error(self::NOT_DETECTED); - return false; - } - - $mimetype = $this->getMimeType(true); - if (in_array($this->type, $mimetype)) { - $this->error(self::FALSE_TYPE); - return false; - } - - $types = explode('/', $this->type); - $types = array_merge($types, explode('-', $this->type)); - $types = array_merge($types, explode(';', $this->type)); - foreach ($mimetype as $mime) { - if (in_array($mime, $types)) { - $this->error(self::FALSE_TYPE); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php b/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php deleted file mode 100644 index f141b8240e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php +++ /dev/null @@ -1,196 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator which checks if the file already exists in the directory - */ -class Exists extends AbstractValidator -{ - /** - * @const string Error constants - */ - const DOES_NOT_EXIST = 'fileExistsDoesNotExist'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_NOT_EXIST => "File does not exist", - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'directory' => null, // internal list of directories - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'directory' => array('options' => 'directory'), - ); - - /** - * Sets validator options - * - * @param string|array|\Traversable $options - */ - public function __construct($options = null) - { - if (is_string($options)) { - $options = explode(',', $options); - } - - if (is_array($options) && !array_key_exists('directory', $options)) { - $options = array('directory' => $options); - } - - parent::__construct($options); - } - - /** - * Returns the set file directories which are checked - * - * @param bool $asArray Returns the values as array; when false, a concatenated string is returned - * @return string|null - */ - public function getDirectory($asArray = false) - { - $asArray = (bool) $asArray; - $directory = $this->options['directory']; - if ($asArray && isset($directory)) { - $directory = explode(',', (string) $directory); - } - - return $directory; - } - - /** - * Sets the file directory which will be checked - * - * @param string|array $directory The directories to validate - * @return Extension Provides a fluent interface - */ - public function setDirectory($directory) - { - $this->options['directory'] = null; - $this->addDirectory($directory); - return $this; - } - - /** - * Adds the file directory which will be checked - * - * @param string|array $directory The directory to add for validation - * @return Extension Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function addDirectory($directory) - { - $directories = $this->getDirectory(true); - if (!isset($directories)) { - $directories = array(); - } - - if (is_string($directory)) { - $directory = explode(',', $directory); - } elseif (!is_array($directory)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - foreach ($directory as $content) { - if (empty($content) || !is_string($content)) { - continue; - } - - $directories[] = trim($content); - } - $directories = array_unique($directories); - - // Sanity check to ensure no empty values - foreach ($directories as $key => $dir) { - if (empty($dir)) { - unset($directories[$key]); - } - } - - $this->options['directory'] = (!empty($directory)) - ? implode(',', $directories) : null; - - return $this; - } - - /** - * Returns true if and only if the file already exists in the set directories - * - * @param string|array $value Real file to check for existence - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - $this->setValue($filename); - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = basename($file); - $this->setValue($value['name']); - } else { - $file = $value; - $filename = basename($file); - $this->setValue($filename); - } - - $check = false; - $directories = $this->getDirectory(true); - if (!isset($directories)) { - $check = true; - if (!file_exists($file)) { - $this->error(self::DOES_NOT_EXIST); - return false; - } - } else { - foreach ($directories as $directory) { - if (!isset($directory) || '' === $directory) { - continue; - } - - $check = true; - if (!file_exists($directory . DIRECTORY_SEPARATOR . $filename)) { - $this->error(self::DOES_NOT_EXIST); - return false; - } - } - } - - if (!$check) { - $this->error(self::DOES_NOT_EXIST); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php b/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php deleted file mode 100644 index a779832fe9..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php +++ /dev/null @@ -1,220 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Traversable; -use Zend\Stdlib\ArrayUtils; -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the file extension of a file - */ -class Extension extends AbstractValidator -{ - /** - * @const string Error constants - */ - const FALSE_EXTENSION = 'fileExtensionFalse'; - const NOT_FOUND = 'fileExtensionNotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::FALSE_EXTENSION => "File has an incorrect extension", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'case' => false, // Validate case sensitive - 'extension' => '', // List of extensions - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'extension' => array('options' => 'extension'), - ); - - /** - * Sets validator options - * - * @param string|array|Traversable $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - $case = null; - if (1 < func_num_args()) { - $case = func_get_arg(1); - } - - if (is_array($options)) { - if (isset($options['case'])) { - $case = $options['case']; - unset($options['case']); - } - - if (!array_key_exists('extension', $options)) { - $options = array('extension' => $options); - } - } else { - $options = array('extension' => $options); - } - - if ($case !== null) { - $options['case'] = $case; - } - - parent::__construct($options); - } - - /** - * Returns the case option - * - * @return bool - */ - public function getCase() - { - return $this->options['case']; - } - - /** - * Sets the case to use - * - * @param bool $case - * @return Extension Provides a fluent interface - */ - public function setCase($case) - { - $this->options['case'] = (bool) $case; - return $this; - } - - /** - * Returns the set file extension - * - * @return array - */ - public function getExtension() - { - $extension = explode(',', $this->options['extension']); - - return $extension; - } - - /** - * Sets the file extensions - * - * @param string|array $extension The extensions to validate - * @return Extension Provides a fluent interface - */ - public function setExtension($extension) - { - $this->options['extension'] = null; - $this->addExtension($extension); - return $this; - } - - /** - * Adds the file extensions - * - * @param string|array $extension The extensions to add for validation - * @return Extension Provides a fluent interface - */ - public function addExtension($extension) - { - $extensions = $this->getExtension(); - if (is_string($extension)) { - $extension = explode(',', $extension); - } - - foreach ($extension as $content) { - if (empty($content) || !is_string($content)) { - continue; - } - - $extensions[] = trim($content); - } - - $extensions = array_unique($extensions); - - // Sanity check to ensure no empty values - foreach ($extensions as $key => $ext) { - if (empty($ext)) { - unset($extensions[$key]); - } - } - - $this->options['extension'] = implode(',', $extensions); - return $this; - } - - /** - * Returns true if and only if the file extension of $value is included in the - * set extension list - * - * @param string|array $value Real file to check for extension - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $extension = substr($filename, strrpos($filename, '.') + 1); - $extensions = $this->getExtension(); - - if ($this->getCase() && (in_array($extension, $extensions))) { - return true; - } elseif (!$this->getCase()) { - foreach ($extensions as $ext) { - if (strtolower($ext) == strtolower($extension)) { - return true; - } - } - } - - $this->error(self::FALSE_EXTENSION); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php b/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php deleted file mode 100644 index c1ea7644da..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php +++ /dev/null @@ -1,183 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Traversable; -use Zend\Stdlib\ArrayUtils; -use Zend\Stdlib\ErrorHandler; -use Zend\Validator\Exception; - -/** - * Validator for the size of all files which will be validated in sum - * - */ -class FilesSize extends Size -{ - /** - * @const string Error constants - */ - const TOO_BIG = 'fileFilesSizeTooBig'; - const TOO_SMALL = 'fileFilesSizeTooSmall'; - const NOT_READABLE = 'fileFilesSizeNotReadable'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::TOO_BIG => "All files in sum should have a maximum size of '%max%' but '%size%' were detected", - self::TOO_SMALL => "All files in sum should have a minimum size of '%min%' but '%size%' were detected", - self::NOT_READABLE => "One or more files can not be read", - ); - - /** - * Internal file array - * - * @var array - */ - protected $files; - - /** - * Sets validator options - * - * Min limits the used disk space for all files, when used with max=null it is the maximum file size - * It also accepts an array with the keys 'min' and 'max' - * - * @param int|array|Traversable $options Options for this validator - * @throws \Zend\Validator\Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - $this->files = array(); - $this->setSize(0); - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (is_scalar($options)) { - $options = array('max' => $options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - if (1 < func_num_args()) { - $argv = func_get_args(); - array_shift($argv); - $options['max'] = array_shift($argv); - if (!empty($argv)) { - $options['useByteString'] = array_shift($argv); - } - } - - parent::__construct($options); - } - - /** - * Returns true if and only if the disk usage of all files is at least min and - * not bigger than max (when max is not null). - * - * @param string|array $value Real file to check for size - * @param array $file File data from \Zend\File\Transfer\Transfer - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value)) { - $value = array($value); - } elseif (is_array($value) && isset($value['tmp_name'])) { - $value = array($value); - } - - $min = $this->getMin(true); - $max = $this->getMax(true); - $size = $this->getSize(); - foreach ($value as $files) { - if (is_array($files)) { - if (!isset($files['tmp_name']) || !isset($files['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $files; - $files = $files['tmp_name']; - } - - // Is file readable ? - if (empty($files) || false === stream_resolve_include_path($files)) { - $this->throwError($file, self::NOT_READABLE); - continue; - } - - if (!isset($this->files[$files])) { - $this->files[$files] = $files; - } else { - // file already counted... do not count twice - continue; - } - - // limited to 2GB files - ErrorHandler::start(); - $size += filesize($files); - ErrorHandler::stop(); - $this->size = $size; - if (($max !== null) && ($max < $size)) { - if ($this->getByteString()) { - $this->options['max'] = $this->toByteString($max); - $this->size = $this->toByteString($size); - $this->throwError($file, self::TOO_BIG); - $this->options['max'] = $max; - $this->size = $size; - } else { - $this->throwError($file, self::TOO_BIG); - } - } - } - - // Check that aggregate files are >= minimum size - if (($min !== null) && ($size < $min)) { - if ($this->getByteString()) { - $this->options['min'] = $this->toByteString($min); - $this->size = $this->toByteString($size); - $this->throwError($file, self::TOO_SMALL); - $this->options['min'] = $min; - $this->size = $size; - } else { - $this->throwError($file, self::TOO_SMALL); - } - } - - if (count($this->getMessages()) > 0) { - return false; - } - - return true; - } - - /** - * Throws an error of the given type - * - * @param string $file - * @param string $errorType - * @return false - */ - protected function throwError($file, $errorType) - { - if ($file !== null) { - if (is_array($file)) { - if (array_key_exists('name', $file)) { - $this->value = $file['name']; - } - } elseif (is_string($file)) { - $this->value = $file; - } - } - - $this->error($errorType); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php b/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php deleted file mode 100644 index 99b9bca05a..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php +++ /dev/null @@ -1,175 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the hash of given files - */ -class Hash extends AbstractValidator -{ - /** - * @const string Error constants - */ - const DOES_NOT_MATCH = 'fileHashDoesNotMatch'; - const NOT_DETECTED = 'fileHashHashNotDetected'; - const NOT_FOUND = 'fileHashNotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_NOT_MATCH => "File does not match the given hashes", - self::NOT_DETECTED => "A hash could not be evaluated for the given file", - self::NOT_FOUND => "File is not readable or does not exist" - ); - - /** - * Options for this validator - * - * @var string - */ - protected $options = array( - 'algorithm' => 'crc32', - 'hash' => null, - ); - - /** - * Sets validator options - * - * @param string|array $options - */ - public function __construct($options = null) - { - if (is_scalar($options) || - (is_array($options) && !array_key_exists('hash', $options))) { - $options = array('hash' => $options); - } - - if (1 < func_num_args()) { - $options['algorithm'] = func_get_arg(1); - } - - parent::__construct($options); - } - - /** - * Returns the set hash values as array, the hash as key and the algorithm the value - * - * @return array - */ - public function getHash() - { - return $this->options['hash']; - } - - /** - * Sets the hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - */ - public function setHash($options) - { - $this->options['hash'] = null; - $this->addHash($options); - - return $this; - } - - /** - * Adds the hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function addHash($options) - { - if (is_string($options)) { - $options = array($options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException("False parameter given"); - } - - $known = hash_algos(); - if (!isset($options['algorithm'])) { - $algorithm = $this->options['algorithm']; - } else { - $algorithm = $options['algorithm']; - unset($options['algorithm']); - } - - if (!in_array($algorithm, $known)) { - throw new Exception\InvalidArgumentException("Unknown algorithm '{$algorithm}'"); - } - - foreach ($options as $value) { - $this->options['hash'][$value] = $algorithm; - } - - return $this; - } - - /** - * Returns true if and only if the given file confirms the set hash - * - * @param string|array $value File to check for hash - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $algos = array_unique(array_values($this->getHash())); - $hashes = array_unique(array_keys($this->getHash())); - foreach ($algos as $algorithm) { - $filehash = hash_file($algorithm, $file); - if ($filehash === false) { - $this->error(self::NOT_DETECTED); - return false; - } - - foreach ($hashes as $hash) { - if ($filehash === $hash) { - return true; - } - } - } - - $this->error(self::DOES_NOT_MATCH); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php b/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php deleted file mode 100644 index 018e5f9083..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php +++ /dev/null @@ -1,392 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Stdlib\ErrorHandler; -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the image size of an image file - */ -class ImageSize extends AbstractValidator -{ - /** - * @const string Error constants - */ - const WIDTH_TOO_BIG = 'fileImageSizeWidthTooBig'; - const WIDTH_TOO_SMALL = 'fileImageSizeWidthTooSmall'; - const HEIGHT_TOO_BIG = 'fileImageSizeHeightTooBig'; - const HEIGHT_TOO_SMALL = 'fileImageSizeHeightTooSmall'; - const NOT_DETECTED = 'fileImageSizeNotDetected'; - const NOT_READABLE = 'fileImageSizeNotReadable'; - - /** - * @var array Error message template - */ - protected $messageTemplates = array( - self::WIDTH_TOO_BIG => "Maximum allowed width for image should be '%maxwidth%' but '%width%' detected", - self::WIDTH_TOO_SMALL => "Minimum expected width for image should be '%minwidth%' but '%width%' detected", - self::HEIGHT_TOO_BIG => "Maximum allowed height for image should be '%maxheight%' but '%height%' detected", - self::HEIGHT_TOO_SMALL => "Minimum expected height for image should be '%minheight%' but '%height%' detected", - self::NOT_DETECTED => "The size of image could not be detected", - self::NOT_READABLE => "File is not readable or does not exist", - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'minwidth' => array('options' => 'minWidth'), - 'maxwidth' => array('options' => 'maxWidth'), - 'minheight' => array('options' => 'minHeight'), - 'maxheight' => array('options' => 'maxHeight'), - 'width' => 'width', - 'height' => 'height' - ); - - /** - * Detected width - * - * @var int - */ - protected $width; - - /** - * Detected height - * - * @var int - */ - protected $height; - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'minWidth' => null, // Minimum image width - 'maxWidth' => null, // Maximum image width - 'minHeight' => null, // Minimum image height - 'maxHeight' => null, // Maximum image height - ); - - /** - * Sets validator options - * - * Accepts the following option keys: - * - minheight - * - minwidth - * - maxheight - * - maxwidth - * - * @param array|\Traversable $options - */ - public function __construct($options = null) - { - if (1 < func_num_args()) { - if (!is_array($options)) { - $options = array('minWidth' => $options); - } - - $argv = func_get_args(); - array_shift($argv); - $options['minHeight'] = array_shift($argv); - if (!empty($argv)) { - $options['maxWidth'] = array_shift($argv); - if (!empty($argv)) { - $options['maxHeight'] = array_shift($argv); - } - } - } - - parent::__construct($options); - } - - /** - * Returns the minimum allowed width - * - * @return int - */ - public function getMinWidth() - { - return $this->options['minWidth']; - } - - /** - * Sets the minimum allowed width - * - * @param int $minWidth - * @return ImageSize Provides a fluid interface - * @throws Exception\InvalidArgumentException When minwidth is greater than maxwidth - */ - public function setMinWidth($minWidth) - { - if (($this->getMaxWidth() !== null) && ($minWidth > $this->getMaxWidth())) { - throw new Exception\InvalidArgumentException( - "The minimum image width must be less than or equal to the " - . " maximum image width, but {$minWidth} > {$this->getMaxWidth()}" - ); - } - - $this->options['minWidth'] = (int) $minWidth; - return $this; - } - - /** - * Returns the maximum allowed width - * - * @return int - */ - public function getMaxWidth() - { - return $this->options['maxWidth']; - } - - /** - * Sets the maximum allowed width - * - * @param int $maxWidth - * @return ImageSize Provides a fluid interface - * @throws Exception\InvalidArgumentException When maxwidth is less than minwidth - */ - public function setMaxWidth($maxWidth) - { - if (($this->getMinWidth() !== null) && ($maxWidth < $this->getMinWidth())) { - throw new Exception\InvalidArgumentException( - "The maximum image width must be greater than or equal to the " - . "minimum image width, but {$maxWidth} < {$this->getMinWidth()}" - ); - } - - $this->options['maxWidth'] = (int) $maxWidth; - return $this; - } - - /** - * Returns the minimum allowed height - * - * @return int - */ - public function getMinHeight() - { - return $this->options['minHeight']; - } - - /** - * Sets the minimum allowed height - * - * @param int $minHeight - * @return ImageSize Provides a fluid interface - * @throws Exception\InvalidArgumentException When minheight is greater than maxheight - */ - public function setMinHeight($minHeight) - { - if (($this->getMaxHeight() !== null) && ($minHeight > $this->getMaxHeight())) { - throw new Exception\InvalidArgumentException( - "The minimum image height must be less than or equal to the " - . " maximum image height, but {$minHeight} > {$this->getMaxHeight()}" - ); - } - - $this->options['minHeight'] = (int) $minHeight; - return $this; - } - - /** - * Returns the maximum allowed height - * - * @return int - */ - public function getMaxHeight() - { - return $this->options['maxHeight']; - } - - /** - * Sets the maximum allowed height - * - * @param int $maxHeight - * @return ImageSize Provides a fluid interface - * @throws Exception\InvalidArgumentException When maxheight is less than minheight - */ - public function setMaxHeight($maxHeight) - { - if (($this->getMinHeight() !== null) && ($maxHeight < $this->getMinHeight())) { - throw new Exception\InvalidArgumentException( - "The maximum image height must be greater than or equal to the " - . "minimum image height, but {$maxHeight} < {$this->getMinHeight()}" - ); - } - - $this->options['maxHeight'] = (int) $maxHeight; - return $this; - } - - /** - * Returns the set minimum image sizes - * - * @return array - */ - public function getImageMin() - { - return array('minWidth' => $this->getMinWidth(), 'minHeight' => $this->getMinHeight()); - } - - /** - * Returns the set maximum image sizes - * - * @return array - */ - public function getImageMax() - { - return array('maxWidth' => $this->getMaxWidth(), 'maxHeight' => $this->getMaxHeight()); - } - - /** - * Returns the set image width sizes - * - * @return array - */ - public function getImageWidth() - { - return array('minWidth' => $this->getMinWidth(), 'maxWidth' => $this->getMaxWidth()); - } - - /** - * Returns the set image height sizes - * - * @return array - */ - public function getImageHeight() - { - return array('minHeight' => $this->getMinHeight(), 'maxHeight' => $this->getMaxHeight()); - } - - /** - * Sets the minimum image size - * - * @param array $options The minimum image dimensions - * @return ImageSize Provides a fluent interface - */ - public function setImageMin($options) - { - $this->setOptions($options); - return $this; - } - - /** - * Sets the maximum image size - * - * @param array|\Traversable $options The maximum image dimensions - * @return ImageSize Provides a fluent interface - */ - public function setImageMax($options) - { - $this->setOptions($options); - return $this; - } - - /** - * Sets the minimum and maximum image width - * - * @param array $options The image width dimensions - * @return ImageSize Provides a fluent interface - */ - public function setImageWidth($options) - { - $this->setImageMin($options); - $this->setImageMax($options); - - return $this; - } - - /** - * Sets the minimum and maximum image height - * - * @param array $options The image height dimensions - * @return ImageSize Provides a fluent interface - */ - public function setImageHeight($options) - { - $this->setImageMin($options); - $this->setImageMax($options); - - return $this; - } - - /** - * Returns true if and only if the image size of $value is at least min and - * not bigger than max - * - * @param string|array $value Real file to check for image size - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_READABLE); - return false; - } - - ErrorHandler::start(); - $size = getimagesize($file); - ErrorHandler::stop(); - - if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) { - $this->error(self::NOT_DETECTED); - return false; - } - - $this->width = $size[0]; - $this->height = $size[1]; - if ($this->width < $this->getMinWidth()) { - $this->error(self::WIDTH_TOO_SMALL); - } - - if (($this->getMaxWidth() !== null) && ($this->getMaxWidth() < $this->width)) { - $this->error(self::WIDTH_TOO_BIG); - } - - if ($this->height < $this->getMinHeight()) { - $this->error(self::HEIGHT_TOO_SMALL); - } - - if (($this->getMaxHeight() !== null) && ($this->getMaxHeight() < $this->height)) { - $this->error(self::HEIGHT_TOO_BIG); - } - - if (count($this->getMessages()) > 0) { - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php b/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php deleted file mode 100644 index ebd2e77da9..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -/** - * Validator which checks if the file already exists in the directory - */ -class IsCompressed extends MimeType -{ - /** - * @const string Error constants - */ - const FALSE_TYPE = 'fileIsCompressedFalseType'; - const NOT_DETECTED = 'fileIsCompressedNotDetected'; - const NOT_READABLE = 'fileIsCompressedNotReadable'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::FALSE_TYPE => "File is not compressed, '%type%' detected", - self::NOT_DETECTED => "The mimetype could not be detected from the file", - self::NOT_READABLE => "File is not readable or does not exist", - ); - - /** - * Sets validator options - * - * @param string|array|Traversable $options - */ - public function __construct($options = array()) - { - // http://hul.harvard.edu/ois/systems/wax/wax-public-help/mimetypes.htm - $default = array( - 'application/arj', - 'application/gnutar', - 'application/lha', - 'application/lzx', - 'application/vnd.ms-cab-compressed', - 'application/x-ace-compressed', - 'application/x-arc', - 'application/x-archive', - 'application/x-arj', - 'application/x-bzip', - 'application/x-bzip2', - 'application/x-cab-compressed', - 'application/x-compress', - 'application/x-compressed', - 'application/x-cpio', - 'application/x-debian-package', - 'application/x-eet', - 'application/x-gzip', - 'application/x-java-pack200', - 'application/x-lha', - 'application/x-lharc', - 'application/x-lzh', - 'application/x-lzma', - 'application/x-lzx', - 'application/x-rar', - 'application/x-sit', - 'application/x-stuffit', - 'application/x-tar', - 'application/zip', - 'application/x-zip', - 'application/zoo', - 'multipart/x-gzip', - ); - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if ($options === null) { - $options = array(); - } - - parent::__construct($options); - - if (!$this->getMimeType()) { - $this->setMimeType($default); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php b/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php deleted file mode 100644 index a13bc043df..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -/** - * Validator which checks if the file is an image - */ -class IsImage extends MimeType -{ - /** - * @const string Error constants - */ - const FALSE_TYPE = 'fileIsImageFalseType'; - const NOT_DETECTED = 'fileIsImageNotDetected'; - const NOT_READABLE = 'fileIsImageNotReadable'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::FALSE_TYPE => "File is no image, '%type%' detected", - self::NOT_DETECTED => "The mimetype could not be detected from the file", - self::NOT_READABLE => "File is not readable or does not exist", - ); - - /** - * Sets validator options - * - * @param array|Traversable|string $options - */ - public function __construct($options = array()) - { - // http://www.iana.org/assignments/media-types/media-types.xhtml#image - $default = array( - 'application/cdf', - 'application/dicom', - 'application/fractals', - 'application/postscript', - 'application/vnd.hp-hpgl', - 'application/vnd.oasis.opendocument.graphics', - 'application/x-cdf', - 'application/x-cmu-raster', - 'application/x-ima', - 'application/x-inventor', - 'application/x-koan', - 'application/x-portable-anymap', - 'application/x-world-x-3dmf', - 'image/bmp', - 'image/c', - 'image/cgm', - 'image/fif', - 'image/gif', - 'image/jpeg', - 'image/jpm', - 'image/jpx', - 'image/jp2', - 'image/naplps', - 'image/pjpeg', - 'image/png', - 'image/svg', - 'image/svg+xml', - 'image/tiff', - 'image/vnd.adobe.photoshop', - 'image/vnd.djvu', - 'image/vnd.fpx', - 'image/vnd.net-fpx', - 'image/x-cmu-raster', - 'image/x-cmx', - 'image/x-coreldraw', - 'image/x-cpi', - 'image/x-emf', - 'image/x-ico', - 'image/x-icon', - 'image/x-jg', - 'image/x-ms-bmp', - 'image/x-niff', - 'image/x-pict', - 'image/x-pcx', - 'image/x-png', - 'image/x-portable-anymap', - 'image/x-portable-bitmap', - 'image/x-portable-greymap', - 'image/x-portable-pixmap', - 'image/x-quicktime', - 'image/x-rgb', - 'image/x-tiff', - 'image/x-unknown', - 'image/x-windows-bmp', - 'image/x-xpmi', - ); - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if ($options === null) { - $options = array(); - } - - parent::__construct($options); - - if (!$this->getMimeType()) { - $this->setMimeType($default); - } - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php b/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php deleted file mode 100644 index e1d1e973ef..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\Exception; - -/** - * Validator for the md5 hash of given files - */ -class Md5 extends Hash -{ - /** - * @const string Error constants - */ - const DOES_NOT_MATCH = 'fileMd5DoesNotMatch'; - const NOT_DETECTED = 'fileMd5NotDetected'; - const NOT_FOUND = 'fileMd5NotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_NOT_MATCH => "File does not match the given md5 hashes", - self::NOT_DETECTED => "An md5 hash could not be evaluated for the given file", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * Options for this validator - * - * @var string - */ - protected $options = array( - 'algorithm' => 'md5', - 'hash' => null, - ); - - /** - * Returns all set md5 hashes - * - * @return array - */ - public function getMd5() - { - return $this->getHash(); - } - - /** - * Sets the md5 hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - */ - public function setMd5($options) - { - $this->setHash($options); - return $this; - } - - /** - * Adds the md5 hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - */ - public function addMd5($options) - { - $this->addHash($options); - return $this; - } - - /** - * Returns true if and only if the given file confirms the set hash - * - * @param string|array $value Filename to check for hash - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $hashes = array_unique(array_keys($this->getHash())); - $filehash = hash_file('md5', $file); - if ($filehash === false) { - $this->error(self::NOT_DETECTED); - return false; - } - - foreach ($hashes as $hash) { - if ($filehash === $hash) { - return true; - } - } - - $this->error(self::DOES_NOT_MATCH); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php b/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php deleted file mode 100644 index a91c4dda85..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php +++ /dev/null @@ -1,422 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Traversable; -use Zend\Stdlib\ArrayUtils; -use Zend\Stdlib\ErrorHandler; -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the mime type of a file - */ -class MimeType extends AbstractValidator -{ - /**#@+ - * @const Error type constants - */ - const FALSE_TYPE = 'fileMimeTypeFalse'; - const NOT_DETECTED = 'fileMimeTypeNotDetected'; - const NOT_READABLE = 'fileMimeTypeNotReadable'; - /**#@-*/ - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::FALSE_TYPE => "File has an incorrect mimetype of '%type%'", - self::NOT_DETECTED => "The mimetype could not be detected from the file", - self::NOT_READABLE => "File is not readable or does not exist", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'type' => 'type' - ); - - /** - * @var string - */ - protected $type; - - /** - * Finfo object to use - * - * @var resource - */ - protected $finfo; - - /** - * If no environment variable 'MAGIC' is set, try and autodiscover it based on common locations - * @var array - */ - protected $magicFiles = array( - '/usr/share/misc/magic', - '/usr/share/misc/magic.mime', - '/usr/share/misc/magic.mgc', - '/usr/share/mime/magic', - '/usr/share/mime/magic.mime', - '/usr/share/mime/magic.mgc', - '/usr/share/file/magic', - '/usr/share/file/magic.mime', - '/usr/share/file/magic.mgc', - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'enableHeaderCheck' => false, // Allow header check - 'disableMagicFile' => false, // Disable usage of magicfile - 'magicFile' => null, // Magicfile to use - 'mimeType' => null, // Mimetype to allow - ); - - /** - * Sets validator options - * - * Mimetype to accept - * - NULL means default PHP usage by using the environment variable 'magic' - * - FALSE means disabling searching for mimetype, should be used for PHP 5.3 - * - A string is the mimetype file to use - * - * @param string|array|Traversable $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (is_string($options)) { - $this->setMimeType($options); - $options = array(); - } elseif (is_array($options)) { - if (isset($options['magicFile'])) { - $this->setMagicFile($options['magicFile']); - unset($options['magicFile']); - } - - if (isset($options['enableHeaderCheck'])) { - $this->enableHeaderCheck($options['enableHeaderCheck']); - unset($options['enableHeaderCheck']); - } - - if (array_key_exists('mimeType', $options)) { - $this->setMimeType($options['mimeType']); - unset($options['mimeType']); - } - - // Handle cases where mimetypes are interspersed with options, or - // options are simply an array of mime types - foreach (array_keys($options) as $key) { - if (!is_int($key)) { - continue; - } - $this->addMimeType($options[$key]); - unset($options[$key]); - } - } - - parent::__construct($options); - } - - /** - * Returns the actual set magicfile - * - * @return string - */ - public function getMagicFile() - { - if (null === $this->options['magicFile']) { - $magic = getenv('magic'); - if (!empty($magic)) { - $this->setMagicFile($magic); - if ($this->options['magicFile'] === null) { - $this->options['magicFile'] = false; - } - return $this->options['magicFile']; - } - - ErrorHandler::start(); - $safeMode = ini_get('safe_mode'); - ErrorHandler::stop(); - - if (!($safeMode == 'On' || $safeMode === 1)) { - foreach ($this->magicFiles as $file) { - // suppressing errors which are thrown due to openbase_dir restrictions - try { - $this->setMagicFile($file); - if ($this->options['magicFile'] !== null) { - break; - } - } catch (Exception\ExceptionInterface $e) { - // Intentionally, catch and fall through - } - } - } - - if ($this->options['magicFile'] === null) { - $this->options['magicFile'] = false; - } - } - - return $this->options['magicFile']; - } - - /** - * Sets the magicfile to use - * if null, the MAGIC constant from php is used - * if the MAGIC file is erroneous, no file will be set - * if false, the default MAGIC file from PHP will be used - * - * @param string $file - * @return MimeType Provides fluid interface - * @throws Exception\RuntimeException When finfo can not read the magicfile - * @throws Exception\InvalidArgumentException - * @throws Exception\InvalidMagicMimeFileException - */ - public function setMagicFile($file) - { - if ($file === false) { - $this->options['magicFile'] = false; - } elseif (empty($file)) { - $this->options['magicFile'] = null; - } elseif (!(class_exists('finfo', false))) { - $this->options['magicFile'] = null; - throw new Exception\RuntimeException('Magicfile can not be set; there is no finfo extension installed'); - } elseif (!is_file($file) || !is_readable($file)) { - throw new Exception\InvalidArgumentException(sprintf( - 'The given magicfile ("%s") could not be read', - $file - )); - } else { - ErrorHandler::start(E_NOTICE|E_WARNING); - $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $file); - $error = ErrorHandler::stop(); - if (empty($this->finfo)) { - $this->finfo = null; - throw new Exception\InvalidMagicMimeFileException(sprintf( - 'The given magicfile ("%s") could not be used by ext/finfo', - $file - ), 0, $error); - } - $this->options['magicFile'] = $file; - } - - return $this; - } - - /** - * Disables usage of MagicFile - * - * @param $disable boolean False disables usage of magic file - * @return MimeType Provides fluid interface - */ - public function disableMagicFile($disable) - { - $this->options['disableMagicFile'] = (bool) $disable; - return $this; - } - - /** - * Is usage of MagicFile disabled? - * - * @return bool - */ - public function isMagicFileDisabled() - { - return $this->options['disableMagicFile']; - } - - /** - * Returns the Header Check option - * - * @return bool - */ - public function getHeaderCheck() - { - return $this->options['enableHeaderCheck']; - } - - /** - * Defines if the http header should be used - * Note that this is unsafe and therefor the default value is false - * - * @param bool $headerCheck - * @return MimeType Provides fluid interface - */ - public function enableHeaderCheck($headerCheck = true) - { - $this->options['enableHeaderCheck'] = (bool) $headerCheck; - return $this; - } - - /** - * Returns the set mimetypes - * - * @param bool $asArray Returns the values as array, when false a concatenated string is returned - * @return string|array - */ - public function getMimeType($asArray = false) - { - $asArray = (bool) $asArray; - $mimetype = (string) $this->options['mimeType']; - if ($asArray) { - $mimetype = explode(',', $mimetype); - } - - return $mimetype; - } - - /** - * Sets the mimetypes - * - * @param string|array $mimetype The mimetypes to validate - * @return MimeType Provides a fluent interface - */ - public function setMimeType($mimetype) - { - $this->options['mimeType'] = null; - $this->addMimeType($mimetype); - return $this; - } - - /** - * Adds the mimetypes - * - * @param string|array $mimetype The mimetypes to add for validation - * @return MimeType Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function addMimeType($mimetype) - { - $mimetypes = $this->getMimeType(true); - - if (is_string($mimetype)) { - $mimetype = explode(',', $mimetype); - } elseif (!is_array($mimetype)) { - throw new Exception\InvalidArgumentException("Invalid options to validator provided"); - } - - if (isset($mimetype['magicFile'])) { - unset($mimetype['magicFile']); - } - - foreach ($mimetype as $content) { - if (empty($content) || !is_string($content)) { - continue; - } - $mimetypes[] = trim($content); - } - $mimetypes = array_unique($mimetypes); - - // Sanity check to ensure no empty values - foreach ($mimetypes as $key => $mt) { - if (empty($mt)) { - unset($mimetypes[$key]); - } - } - - $this->options['mimeType'] = implode(',', $mimetypes); - - return $this; - } - - /** - * Defined by Zend\Validator\ValidatorInterface - * - * Returns true if the mimetype of the file matches the given ones. Also parts - * of mimetypes can be checked. If you give for example "image" all image - * mime types will be accepted like "image/gif", "image/jpeg" and so on. - * - * @param string|array $value Real file to check for mimetype - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $filetype = $file['type']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['type'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - $filetype = $value['type']; - } else { - $file = $value; - $filename = basename($file); - $filetype = null; - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(static::NOT_READABLE); - return false; - } - - $mimefile = $this->getMagicFile(); - if (class_exists('finfo', false)) { - if (!$this->isMagicFileDisabled() && (!empty($mimefile) && empty($this->finfo))) { - ErrorHandler::start(E_NOTICE|E_WARNING); - $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile); - ErrorHandler::stop(); - } - - if (empty($this->finfo)) { - ErrorHandler::start(E_NOTICE|E_WARNING); - $this->finfo = finfo_open(FILEINFO_MIME_TYPE); - ErrorHandler::stop(); - } - - $this->type = null; - if (!empty($this->finfo)) { - $this->type = finfo_file($this->finfo, $file); - } - } - - if (empty($this->type) && $this->getHeaderCheck()) { - $this->type = $filetype; - } - - if (empty($this->type)) { - $this->error(static::NOT_DETECTED); - return false; - } - - $mimetype = $this->getMimeType(true); - if (in_array($this->type, $mimetype)) { - return true; - } - - $types = explode('/', $this->type); - $types = array_merge($types, explode('-', $this->type)); - $types = array_merge($types, explode(';', $this->type)); - foreach ($mimetype as $mime) { - if (in_array($mime, $types)) { - return true; - } - } - - $this->error(static::FALSE_TYPE); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php b/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php deleted file mode 100644 index e50adef6c7..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\Exception; - -/** - * Validator which checks if the destination file does not exist - */ -class NotExists extends Exists -{ - /** - * @const string Error constants - */ - const DOES_EXIST = 'fileNotExistsDoesExist'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_EXIST => "File exists", - ); - - /** - * Returns true if and only if the file does not exist in the set destinations - * - * @param string|array $value Real file to check for existence - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - $this->setValue($filename); - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = basename($file); - $this->setValue($value['name']); - } else { - $file = $value; - $filename = basename($file); - $this->setValue($filename); - } - - $check = false; - $directories = $this->getDirectory(true); - if (!isset($directories)) { - $check = true; - if (file_exists($file)) { - $this->error(self::DOES_EXIST); - return false; - } - } else { - foreach ($directories as $directory) { - if (!isset($directory) || '' === $directory) { - continue; - } - - $check = true; - if (file_exists($directory . DIRECTORY_SEPARATOR . $filename)) { - $this->error(self::DOES_EXIST); - return false; - } - } - } - - if (!$check) { - $this->error(self::DOES_EXIST); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php b/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php deleted file mode 100644 index 7d172da435..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\Exception; - -/** - * Validator for the sha1 hash of given files - */ -class Sha1 extends Hash -{ - /** - * @const string Error constants - */ - const DOES_NOT_MATCH = 'fileSha1DoesNotMatch'; - const NOT_DETECTED = 'fileSha1NotDetected'; - const NOT_FOUND = 'fileSha1NotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::DOES_NOT_MATCH => "File does not match the given sha1 hashes", - self::NOT_DETECTED => "A sha1 hash could not be evaluated for the given file", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * Options for this validator - * - * @var string - */ - protected $options = array( - 'algorithm' => 'sha1', - 'hash' => null, - ); - - /** - * Returns all set sha1 hashes - * - * @return array - */ - public function getSha1() - { - return $this->getHash(); - } - - /** - * Sets the sha1 hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - */ - public function setSha1($options) - { - $this->setHash($options); - return $this; - } - - /** - * Adds the sha1 hash for one or multiple files - * - * @param string|array $options - * @return Hash Provides a fluent interface - */ - public function addSha1($options) - { - $this->addHash($options); - return $this; - } - - /** - * Returns true if and only if the given file confirms the set hash - * - * @param string $value|array Filename to check for hash - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $hashes = array_unique(array_keys($this->getHash())); - $filehash = hash_file('sha1', $file); - if ($filehash === false) { - $this->error(self::NOT_DETECTED); - return false; - } - - foreach ($hashes as $hash) { - if ($filehash === $hash) { - return true; - } - } - - $this->error(self::DOES_NOT_MATCH); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Size.php b/civicrm/vendor/zendframework/zend-validator/src/File/Size.php deleted file mode 100644 index e709fb5a82..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Size.php +++ /dev/null @@ -1,368 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Stdlib\ErrorHandler; -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the maximum size of a file up to a max of 2GB - */ -class Size extends AbstractValidator -{ - /** - * @const string Error constants - */ - const TOO_BIG = 'fileSizeTooBig'; - const TOO_SMALL = 'fileSizeTooSmall'; - const NOT_FOUND = 'fileSizeNotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::TOO_BIG => "Maximum allowed size for file is '%max%' but '%size%' detected", - self::TOO_SMALL => "Minimum expected size for file is '%min%' but '%size%' detected", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'min' => array('options' => 'min'), - 'max' => array('options' => 'max'), - 'size' => 'size', - ); - - /** - * Detected size - * - * @var int - */ - protected $size; - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'min' => null, // Minimum file size, if null there is no minimum - 'max' => null, // Maximum file size, if null there is no maximum - 'useByteString' => true, // Use byte string? - ); - - /** - * Sets validator options - * - * If $options is an integer, it will be used as maximum file size - * As Array is accepts the following keys: - * 'min': Minimum file size - * 'max': Maximum file size - * 'useByteString': Use bytestring or real size for messages - * - * @param int|array|\Traversable $options Options for the adapter - */ - public function __construct($options = null) - { - if (is_string($options) || is_numeric($options)) { - $options = array('max' => $options); - } - - if (1 < func_num_args()) { - $argv = func_get_args(); - array_shift($argv); - $options['max'] = array_shift($argv); - if (!empty($argv)) { - $options['useByteString'] = array_shift($argv); - } - } - - parent::__construct($options); - } - - /** - * Should messages return bytes as integer or as string in SI notation - * - * @param bool $byteString Use bytestring ? - * @return int - */ - public function useByteString($byteString = true) - { - $this->options['useByteString'] = (bool) $byteString; - return $this; - } - - /** - * Will bytestring be used? - * - * @return bool - */ - public function getByteString() - { - return $this->options['useByteString']; - } - - /** - * Returns the minimum file size - * - * @param bool $raw Whether or not to force return of the raw value (defaults off) - * @return int|string - */ - public function getMin($raw = false) - { - $min = $this->options['min']; - if (!$raw && $this->getByteString()) { - $min = $this->toByteString($min); - } - - return $min; - } - - /** - * Sets the minimum file size - * - * File size can be an integer or a byte string - * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' - * For example: 2000, 2MB, 0.2GB - * - * @param int|string $min The minimum file size - * @return Size Provides a fluent interface - * @throws Exception\InvalidArgumentException When min is greater than max - */ - public function setMin($min) - { - if (!is_string($min) and !is_numeric($min)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $min = (int) $this->fromByteString($min); - $max = $this->getMax(true); - if (($max !== null) && ($min > $max)) { - throw new Exception\InvalidArgumentException( - "The minimum must be less than or equal to the maximum file size, but $min > $max" - ); - } - - $this->options['min'] = $min; - return $this; - } - - /** - * Returns the maximum file size - * - * @param bool $raw Whether or not to force return of the raw value (defaults off) - * @return int|string - */ - public function getMax($raw = false) - { - $max = $this->options['max']; - if (!$raw && $this->getByteString()) { - $max = $this->toByteString($max); - } - - return $max; - } - - /** - * Sets the maximum file size - * - * File size can be an integer or a byte string - * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' - * For example: 2000, 2MB, 0.2GB - * - * @param int|string $max The maximum file size - * @return Size Provides a fluent interface - * @throws Exception\InvalidArgumentException When max is smaller than min - */ - public function setMax($max) - { - if (!is_string($max) && !is_numeric($max)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $max = (int) $this->fromByteString($max); - $min = $this->getMin(true); - if (($min !== null) && ($max < $min)) { - throw new Exception\InvalidArgumentException( - "The maximum must be greater than or equal to the minimum file size, but $max < $min" - ); - } - - $this->options['max'] = $max; - return $this; - } - - /** - * Retrieve current detected file size - * - * @return int - */ - protected function getSize() - { - return $this->size; - } - - /** - * Set current size - * - * @param int $size - * @return Size - */ - protected function setSize($size) - { - $this->size = $size; - return $this; - } - - /** - * Returns true if and only if the file size of $value is at least min and - * not bigger than max (when max is not null). - * - * @param string|array $value File to check for size - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - // limited to 4GB files - ErrorHandler::start(); - $size = sprintf("%u", filesize($file)); - ErrorHandler::stop(); - $this->size = $size; - - // Check to see if it's smaller than min size - $min = $this->getMin(true); - $max = $this->getMax(true); - if (($min !== null) && ($size < $min)) { - if ($this->getByteString()) { - $this->options['min'] = $this->toByteString($min); - $this->size = $this->toByteString($size); - $this->error(self::TOO_SMALL); - $this->options['min'] = $min; - $this->size = $size; - } else { - $this->error(self::TOO_SMALL); - } - } - - // Check to see if it's larger than max size - if (($max !== null) && ($max < $size)) { - if ($this->getByteString()) { - $this->options['max'] = $this->toByteString($max); - $this->size = $this->toByteString($size); - $this->error(self::TOO_BIG); - $this->options['max'] = $max; - $this->size = $size; - } else { - $this->error(self::TOO_BIG); - } - } - - if (count($this->getMessages()) > 0) { - return false; - } - - return true; - } - - /** - * Returns the formatted size - * - * @param int $size - * @return string - */ - protected function toByteString($size) - { - $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); - for ($i=0; $size >= 1024 && $i < 9; $i++) { - $size /= 1024; - } - - return round($size, 2) . $sizes[$i]; - } - - /** - * Returns the unformatted size - * - * @param string $size - * @return int - */ - protected function fromByteString($size) - { - if (is_numeric($size)) { - return (int) $size; - } - - $type = trim(substr($size, -2, 1)); - - $value = substr($size, 0, -1); - if (!is_numeric($value)) { - $value = substr($value, 0, -1); - } - - switch (strtoupper($type)) { - case 'Y': - $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024); - break; - case 'Z': - $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024); - break; - case 'E': - $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024); - break; - case 'P': - $value *= (1024 * 1024 * 1024 * 1024 * 1024); - break; - case 'T': - $value *= (1024 * 1024 * 1024 * 1024); - break; - case 'G': - $value *= (1024 * 1024 * 1024); - break; - case 'M': - $value *= (1024 * 1024); - break; - case 'K': - $value *= 1024; - break; - default: - break; - } - - return $value; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php b/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php deleted file mode 100644 index 1524e4ca6c..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php +++ /dev/null @@ -1,233 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the maximum size of a file up to a max of 2GB - * - */ -class Upload extends AbstractValidator -{ - /** - * @const string Error constants - */ - const INI_SIZE = 'fileUploadErrorIniSize'; - const FORM_SIZE = 'fileUploadErrorFormSize'; - const PARTIAL = 'fileUploadErrorPartial'; - const NO_FILE = 'fileUploadErrorNoFile'; - const NO_TMP_DIR = 'fileUploadErrorNoTmpDir'; - const CANT_WRITE = 'fileUploadErrorCantWrite'; - const EXTENSION = 'fileUploadErrorExtension'; - const ATTACK = 'fileUploadErrorAttack'; - const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound'; - const UNKNOWN = 'fileUploadErrorUnknown'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::INI_SIZE => "File '%value%' exceeds the defined ini size", - self::FORM_SIZE => "File '%value%' exceeds the defined form size", - self::PARTIAL => "File '%value%' was only partially uploaded", - self::NO_FILE => "File '%value%' was not uploaded", - self::NO_TMP_DIR => "No temporary directory was found for file '%value%'", - self::CANT_WRITE => "File '%value%' can't be written", - self::EXTENSION => "A PHP extension returned an error while uploading the file '%value%'", - self::ATTACK => "File '%value%' was illegally uploaded. This could be a possible attack", - self::FILE_NOT_FOUND => "File '%value%' was not found", - self::UNKNOWN => "Unknown error while uploading file '%value%'" - ); - - protected $options = array( - 'files' => array(), - ); - - /** - * Sets validator options - * - * The array $files must be given in syntax of Zend\File\Transfer\Transfer to be checked - * If no files are given the $_FILES array will be used automatically. - * NOTE: This validator will only work with HTTP POST uploads! - * - * @param array|\Traversable $options Array of files in syntax of \Zend\File\Transfer\Transfer - */ - public function __construct($options = array()) - { - if (is_array($options) && !array_key_exists('files', $options)) { - $options = array('files' => $options); - } - - parent::__construct($options); - } - - /** - * Returns the array of set files - * - * @param string $file (Optional) The file to return in detail - * @return array - * @throws Exception\InvalidArgumentException If file is not found - */ - public function getFiles($file = null) - { - if ($file !== null) { - $return = array(); - foreach ($this->options['files'] as $name => $content) { - if ($name === $file) { - $return[$file] = $this->options['files'][$name]; - } - - if ($content['name'] === $file) { - $return[$name] = $this->options['files'][$name]; - } - } - - if (count($return) === 0) { - throw new Exception\InvalidArgumentException("The file '$file' was not found"); - } - - return $return; - } - - return $this->options['files']; - } - - /** - * Sets the files to be checked - * - * @param array $files The files to check in syntax of \Zend\File\Transfer\Transfer - * @return Upload Provides a fluent interface - */ - public function setFiles($files = array()) - { - if (count($files) === 0) { - $this->options['files'] = $_FILES; - } else { - $this->options['files'] = $files; - } - - if ($this->options['files'] === null) { - $this->options['files'] = array(); - } - - foreach ($this->options['files'] as $file => $content) { - if (!isset($content['error'])) { - unset($this->options['files'][$file]); - } - } - - return $this; - } - - /** - * Returns true if and only if the file was uploaded without errors - * - * @param string $value Single file to check for upload errors, when giving null the $_FILES array - * from initialization will be used - * @param mixed $file - * @return bool - */ - public function isValid($value, $file = null) - { - $files = array(); - $this->setValue($value); - if (array_key_exists($value, $this->getFiles())) { - $files = array_merge($files, $this->getFiles($value)); - } else { - foreach ($this->getFiles() as $file => $content) { - if (isset($content['name']) && ($content['name'] === $value)) { - $files = array_merge($files, $this->getFiles($file)); - } - - if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) { - $files = array_merge($files, $this->getFiles($file)); - } - } - } - - if (empty($files)) { - return $this->throwError($file, self::FILE_NOT_FOUND); - } - - foreach ($files as $file => $content) { - $this->value = $file; - switch ($content['error']) { - case 0: - if (!is_uploaded_file($content['tmp_name'])) { - $this->throwError($content, self::ATTACK); - } - break; - - case 1: - $this->throwError($content, self::INI_SIZE); - break; - - case 2: - $this->throwError($content, self::FORM_SIZE); - break; - - case 3: - $this->throwError($content, self::PARTIAL); - break; - - case 4: - $this->throwError($content, self::NO_FILE); - break; - - case 6: - $this->throwError($content, self::NO_TMP_DIR); - break; - - case 7: - $this->throwError($content, self::CANT_WRITE); - break; - - case 8: - $this->throwError($content, self::EXTENSION); - break; - - default: - $this->throwError($content, self::UNKNOWN); - break; - } - } - - if (count($this->getMessages()) > 0) { - return false; - } - - return true; - } - - /** - * Throws an error of the given type - * - * @param string $file - * @param string $errorType - * @return false - */ - protected function throwError($file, $errorType) - { - if ($file !== null) { - if (is_array($file)) { - if (array_key_exists('name', $file)) { - $this->value = $file['name']; - } - } elseif (is_string($file)) { - $this->value = $file; - } - } - - $this->error($errorType); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php b/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php deleted file mode 100644 index f34958fce2..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for the maximum size of a file up to a max of 2GB - */ -class UploadFile extends AbstractValidator -{ - /** - * @const string Error constants - */ - const INI_SIZE = 'fileUploadFileErrorIniSize'; - const FORM_SIZE = 'fileUploadFileErrorFormSize'; - const PARTIAL = 'fileUploadFileErrorPartial'; - const NO_FILE = 'fileUploadFileErrorNoFile'; - const NO_TMP_DIR = 'fileUploadFileErrorNoTmpDir'; - const CANT_WRITE = 'fileUploadFileErrorCantWrite'; - const EXTENSION = 'fileUploadFileErrorExtension'; - const ATTACK = 'fileUploadFileErrorAttack'; - const FILE_NOT_FOUND = 'fileUploadFileErrorFileNotFound'; - const UNKNOWN = 'fileUploadFileErrorUnknown'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::INI_SIZE => "File exceeds the defined ini size", - self::FORM_SIZE => "File exceeds the defined form size", - self::PARTIAL => "File was only partially uploaded", - self::NO_FILE => "File was not uploaded", - self::NO_TMP_DIR => "No temporary directory was found for file", - self::CANT_WRITE => "File can't be written", - self::EXTENSION => "A PHP extension returned an error while uploading the file", - self::ATTACK => "File was illegally uploaded. This could be a possible attack", - self::FILE_NOT_FOUND => "File was not found", - self::UNKNOWN => "Unknown error while uploading file", - ); - - /** - * Returns true if and only if the file was uploaded without errors - * - * @param string $value File to check for upload errors - * @return bool - * @throws Exception\InvalidArgumentException - */ - public function isValid($value) - { - if (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['error'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - $error = $value['error']; - } else { - $file = $value; - $filename = basename($file); - $error = 0; - } - $this->setValue($filename); - - switch ($error) { - case UPLOAD_ERR_OK: - if (empty($file) || false === is_file($file)) { - $this->error(self::FILE_NOT_FOUND); - } elseif (! is_uploaded_file($file)) { - $this->error(self::ATTACK); - } - break; - - case UPLOAD_ERR_INI_SIZE: - $this->error(self::INI_SIZE); - break; - - case UPLOAD_ERR_FORM_SIZE: - $this->error(self::FORM_SIZE); - break; - - case UPLOAD_ERR_PARTIAL: - $this->error(self::PARTIAL); - break; - - case UPLOAD_ERR_NO_FILE: - $this->error(self::NO_FILE); - break; - - case UPLOAD_ERR_NO_TMP_DIR: - $this->error(self::NO_TMP_DIR); - break; - - case UPLOAD_ERR_CANT_WRITE: - $this->error(self::CANT_WRITE); - break; - - case UPLOAD_ERR_EXTENSION: - $this->error(self::EXTENSION); - break; - - default: - $this->error(self::UNKNOWN); - break; - } - - if (count($this->getMessages()) > 0) { - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php b/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php deleted file mode 100644 index 460b06a69e..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php +++ /dev/null @@ -1,213 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\File; - -use Zend\Validator\AbstractValidator; -use Zend\Validator\Exception; - -/** - * Validator for counting all words in a file - */ -class WordCount extends AbstractValidator -{ - /** - * @const string Error constants - */ - const TOO_MUCH = 'fileWordCountTooMuch'; - const TOO_LESS = 'fileWordCountTooLess'; - const NOT_FOUND = 'fileWordCountNotFound'; - - /** - * @var array Error message templates - */ - protected $messageTemplates = array( - self::TOO_MUCH => "Too many words, maximum '%max%' are allowed but '%count%' were counted", - self::TOO_LESS => "Too few words, minimum '%min%' are expected but '%count%' were counted", - self::NOT_FOUND => "File is not readable or does not exist", - ); - - /** - * @var array Error message template variables - */ - protected $messageVariables = array( - 'min' => array('options' => 'min'), - 'max' => array('options' => 'max'), - 'count' => 'count' - ); - - /** - * Word count - * - * @var int - */ - protected $count; - - /** - * Options for this validator - * - * @var array - */ - protected $options = array( - 'min' => null, // Minimum word count, if null there is no minimum word count - 'max' => null, // Maximum word count, if null there is no maximum word count - ); - - /** - * Sets validator options - * - * Min limits the word count, when used with max=null it is the maximum word count - * It also accepts an array with the keys 'min' and 'max' - * - * If $options is an integer, it will be used as maximum word count - * As Array is accepts the following keys: - * 'min': Minimum word count - * 'max': Maximum word count - * - * @param int|array|\Traversable $options Options for the adapter - */ - public function __construct($options = null) - { - if (is_string($options) || is_numeric($options)) { - $options = array('max' => $options); - } - - if (1 < func_num_args()) { - $options['min'] = func_get_arg(0); - $options['max'] = func_get_arg(1); - } - - parent::__construct($options); - } - - /** - * Returns the minimum word count - * - * @return int - */ - public function getMin() - { - return $this->options['min']; - } - - /** - * Sets the minimum word count - * - * @param int|array $min The minimum word count - * @return WordCount Provides a fluent interface - * @throws Exception\InvalidArgumentException When min is greater than max - */ - public function setMin($min) - { - if (is_array($min) and isset($min['min'])) { - $min = $min['min']; - } - - if (!is_string($min) and !is_numeric($min)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $min = (int) $min; - if (($this->getMax() !== null) && ($min > $this->getMax())) { - throw new Exception\InvalidArgumentException( - "The minimum must be less than or equal to the maximum word count, but $min > {$this->getMax()}" - ); - } - - $this->options['min'] = $min; - return $this; - } - - /** - * Returns the maximum word count - * - * @return int - */ - public function getMax() - { - return $this->options['max']; - } - - /** - * Sets the maximum file count - * - * @param int|array $max The maximum word count - * @return WordCount Provides a fluent interface - * @throws Exception\InvalidArgumentException When max is smaller than min - */ - public function setMax($max) - { - if (is_array($max) and isset($max['max'])) { - $max = $max['max']; - } - - if (!is_string($max) and !is_numeric($max)) { - throw new Exception\InvalidArgumentException('Invalid options to validator provided'); - } - - $max = (int) $max; - if (($this->getMin() !== null) && ($max < $this->getMin())) { - throw new Exception\InvalidArgumentException( - "The maximum must be greater than or equal to the minimum word count, but $max < {$this->getMin()}" - ); - } - - $this->options['max'] = $max; - return $this; - } - - /** - * Returns true if and only if the counted words are at least min and - * not bigger than max (when max is not null). - * - * @param string|array $value Filename to check for word count - * @param array $file File data from \Zend\File\Transfer\Transfer (optional) - * @return bool - */ - public function isValid($value, $file = null) - { - if (is_string($value) && is_array($file)) { - // Legacy Zend\Transfer API support - $filename = $file['name']; - $file = $file['tmp_name']; - } elseif (is_array($value)) { - if (!isset($value['tmp_name']) || !isset($value['name'])) { - throw new Exception\InvalidArgumentException( - 'Value array must be in $_FILES format' - ); - } - $file = $value['tmp_name']; - $filename = $value['name']; - } else { - $file = $value; - $filename = basename($file); - } - $this->setValue($filename); - - // Is file readable ? - if (empty($file) || false === stream_resolve_include_path($file)) { - $this->error(self::NOT_FOUND); - return false; - } - - $content = file_get_contents($file); - $this->count = str_word_count($content); - if (($this->getMax() !== null) && ($this->count > $this->getMax())) { - $this->error(self::TOO_MUCH); - return false; - } - - if (($this->getMin() !== null) && ($this->count < $this->getMin())) { - $this->error(self::TOO_LESS); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php b/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php deleted file mode 100644 index 7f106e8c5d..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php +++ /dev/null @@ -1,158 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class GreaterThan extends AbstractValidator -{ - const NOT_GREATER = 'notGreaterThan'; - const NOT_GREATER_INCLUSIVE = 'notGreaterThanInclusive'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_GREATER => "The input is not greater than '%min%'", - self::NOT_GREATER_INCLUSIVE => "The input is not greater or equal than '%min%'" - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'min' => 'min' - ); - - /** - * Minimum value - * - * @var mixed - */ - protected $min; - - /** - * Whether to do inclusive comparisons, allowing equivalence to max - * - * If false, then strict comparisons are done, and the value may equal - * the min option - * - * @var bool - */ - protected $inclusive; - - /** - * Sets validator options - * - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - if (!is_array($options)) { - $options = func_get_args(); - $temp['min'] = array_shift($options); - - if (!empty($options)) { - $temp['inclusive'] = array_shift($options); - } - - $options = $temp; - } - - if (!array_key_exists('min', $options)) { - throw new Exception\InvalidArgumentException("Missing option 'min'"); - } - - if (!array_key_exists('inclusive', $options)) { - $options['inclusive'] = false; - } - - $this->setMin($options['min']) - ->setInclusive($options['inclusive']); - - parent::__construct($options); - } - - /** - * Returns the min option - * - * @return mixed - */ - public function getMin() - { - return $this->min; - } - - /** - * Sets the min option - * - * @param mixed $min - * @return GreaterThan Provides a fluent interface - */ - public function setMin($min) - { - $this->min = $min; - return $this; - } - - /** - * Returns the inclusive option - * - * @return bool - */ - public function getInclusive() - { - return $this->inclusive; - } - - /** - * Sets the inclusive option - * - * @param bool $inclusive - * @return GreaterThan Provides a fluent interface - */ - public function setInclusive($inclusive) - { - $this->inclusive = $inclusive; - return $this; - } - - /** - * Returns true if and only if $value is greater than min option - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if ($this->inclusive) { - if ($this->min > $value) { - $this->error(self::NOT_GREATER_INCLUSIVE); - return false; - } - } else { - if ($this->min >= $value) { - $this->error(self::NOT_GREATER); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hex.php b/civicrm/vendor/zendframework/zend-validator/src/Hex.php deleted file mode 100644 index 64ae8930df..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hex.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -class Hex extends AbstractValidator -{ - const INVALID = 'hexInvalid'; - const NOT_HEX = 'notHex'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String expected", - self::NOT_HEX => "The input contains non-hexadecimal characters", - ); - - /** - * Returns true if and only if $value contains only hexadecimal digit characters - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value) && !is_int($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - if (!ctype_xdigit((string) $value)) { - $this->error(self::NOT_HEX); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname.php deleted file mode 100644 index 3306fb874f..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hostname.php +++ /dev/null @@ -1,1585 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Zend\Stdlib\StringUtils; - -/** - * Please note there are two standalone test scripts for testing IDN characters due to problems - * with file encoding. - * - * The first is tests/Zend/Validator/HostnameTestStandalone.php which is designed to be run on - * the command line. - * - * The second is tests/Zend/Validator/HostnameTestForm.php which is designed to be run via HTML - * to allow users to test entering UTF-8 characters in a form. - */ -class Hostname extends AbstractValidator -{ - const CANNOT_DECODE_PUNYCODE = 'hostnameCannotDecodePunycode'; - const INVALID = 'hostnameInvalid'; - const INVALID_DASH = 'hostnameDashCharacter'; - const INVALID_HOSTNAME = 'hostnameInvalidHostname'; - const INVALID_HOSTNAME_SCHEMA = 'hostnameInvalidHostnameSchema'; - const INVALID_LOCAL_NAME = 'hostnameInvalidLocalName'; - const INVALID_URI = 'hostnameInvalidUri'; - const IP_ADDRESS_NOT_ALLOWED = 'hostnameIpAddressNotAllowed'; - const LOCAL_NAME_NOT_ALLOWED = 'hostnameLocalNameNotAllowed'; - const UNDECIPHERABLE_TLD = 'hostnameUndecipherableTld'; - const UNKNOWN_TLD = 'hostnameUnknownTld'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::CANNOT_DECODE_PUNYCODE => "The input appears to be a DNS hostname but the given punycode notation cannot be decoded", - self::INVALID => "Invalid type given. String expected", - self::INVALID_DASH => "The input appears to be a DNS hostname but contains a dash in an invalid position", - self::INVALID_HOSTNAME => "The input does not match the expected structure for a DNS hostname", - self::INVALID_HOSTNAME_SCHEMA => "The input appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'", - self::INVALID_LOCAL_NAME => "The input does not appear to be a valid local network name", - self::INVALID_URI => "The input does not appear to be a valid URI hostname", - self::IP_ADDRESS_NOT_ALLOWED => "The input appears to be an IP address, but IP addresses are not allowed", - self::LOCAL_NAME_NOT_ALLOWED => "The input appears to be a local network name but local network names are not allowed", - self::UNDECIPHERABLE_TLD => "The input appears to be a DNS hostname but cannot extract TLD part", - self::UNKNOWN_TLD => "The input appears to be a DNS hostname but cannot match TLD against known list", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'tld' => 'tld', - ); - - const ALLOW_DNS = 1; // Allows Internet domain names (e.g., example.com) - const ALLOW_IP = 2; // Allows IP addresses - const ALLOW_LOCAL = 4; // Allows local network names (e.g., localhost, www.localdomain) - const ALLOW_URI = 8; // Allows URI hostnames - const ALLOW_ALL = 15; // Allows all types of hostnames - - /** - * Array of valid top-level-domains - * - * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain - * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs - * @var array - */ - protected $validTlds = array( - 'abbott', - 'abogado', - 'ac', - 'academy', - 'accountants', - 'active', - 'actor', - 'ad', - 'adult', - 'ae', - 'aero', - 'af', - 'ag', - 'agency', - 'ai', - 'airforce', - 'al', - 'allfinanz', - 'alsace', - 'am', - 'amsterdam', - 'an', - 'android', - 'ao', - 'apartments', - 'aq', - 'aquarelle', - 'ar', - 'archi', - 'army', - 'arpa', - 'as', - 'asia', - 'associates', - 'at', - 'attorney', - 'au', - 'auction', - 'audio', - 'autos', - 'aw', - 'ax', - 'axa', - 'az', - 'ba', - 'band', - 'bank', - 'bar', - 'barclaycard', - 'barclays', - 'bargains', - 'bayern', - 'bb', - 'bd', - 'be', - 'beer', - 'berlin', - 'best', - 'bf', - 'bg', - 'bh', - 'bi', - 'bid', - 'bike', - 'bingo', - 'bio', - 'biz', - 'bj', - 'black', - 'blackfriday', - 'bloomberg', - 'blue', - 'bm', - 'bmw', - 'bn', - 'bnpparibas', - 'bo', - 'boats', - 'boo', - 'boutique', - 'br', - 'brussels', - 'bs', - 'bt', - 'budapest', - 'build', - 'builders', - 'business', - 'buzz', - 'bv', - 'bw', - 'by', - 'bz', - 'bzh', - 'ca', - 'cab', - 'cal', - 'camera', - 'camp', - 'cancerresearch', - 'canon', - 'capetown', - 'capital', - 'caravan', - 'cards', - 'care', - 'career', - 'careers', - 'cartier', - 'casa', - 'cash', - 'casino', - 'cat', - 'catering', - 'cbn', - 'cc', - 'cd', - 'center', - 'ceo', - 'cern', - 'cf', - 'cfd', - 'cg', - 'ch', - 'channel', - 'chat', - 'cheap', - 'chloe', - 'christmas', - 'chrome', - 'church', - 'ci', - 'citic', - 'city', - 'ck', - 'cl', - 'claims', - 'cleaning', - 'click', - 'clinic', - 'clothing', - 'club', - 'cm', - 'cn', - 'co', - 'coach', - 'codes', - 'coffee', - 'college', - 'cologne', - 'com', - 'community', - 'company', - 'computer', - 'condos', - 'construction', - 'consulting', - 'contractors', - 'cooking', - 'cool', - 'coop', - 'country', - 'courses', - 'cr', - 'credit', - 'creditcard', - 'cricket', - 'crs', - 'cruises', - 'cu', - 'cuisinella', - 'cv', - 'cw', - 'cx', - 'cy', - 'cymru', - 'cz', - 'dabur', - 'dad', - 'dance', - 'dating', - 'datsun', - 'day', - 'dclk', - 'de', - 'deals', - 'degree', - 'delivery', - 'democrat', - 'dental', - 'dentist', - 'desi', - 'design', - 'dev', - 'diamonds', - 'diet', - 'digital', - 'direct', - 'directory', - 'discount', - 'dj', - 'dk', - 'dm', - 'dnp', - 'do', - 'docs', - 'domains', - 'doosan', - 'durban', - 'dvag', - 'dz', - 'eat', - 'ec', - 'edu', - 'education', - 'ee', - 'eg', - 'email', - 'emerck', - 'energy', - 'engineer', - 'engineering', - 'enterprises', - 'epson', - 'equipment', - 'er', - 'erni', - 'es', - 'esq', - 'estate', - 'et', - 'eu', - 'eurovision', - 'eus', - 'events', - 'everbank', - 'exchange', - 'expert', - 'exposed', - 'fail', - 'fan', - 'fans', - 'farm', - 'fashion', - 'feedback', - 'fi', - 'finance', - 'financial', - 'firmdale', - 'fish', - 'fishing', - 'fit', - 'fitness', - 'fj', - 'fk', - 'flights', - 'florist', - 'flowers', - 'flsmidth', - 'fly', - 'fm', - 'fo', - 'foo', - 'football', - 'forex', - 'forsale', - 'foundation', - 'fr', - 'frl', - 'frogans', - 'fund', - 'furniture', - 'futbol', - 'ga', - 'gal', - 'gallery', - 'garden', - 'gb', - 'gbiz', - 'gd', - 'gdn', - 'ge', - 'gent', - 'gf', - 'gg', - 'ggee', - 'gh', - 'gi', - 'gift', - 'gifts', - 'gives', - 'gl', - 'glass', - 'gle', - 'global', - 'globo', - 'gm', - 'gmail', - 'gmo', - 'gmx', - 'gn', - 'goldpoint', - 'goo', - 'goog', - 'google', - 'gop', - 'gov', - 'gp', - 'gq', - 'gr', - 'graphics', - 'gratis', - 'green', - 'gripe', - 'gs', - 'gt', - 'gu', - 'guide', - 'guitars', - 'guru', - 'gw', - 'gy', - 'hamburg', - 'hangout', - 'haus', - 'healthcare', - 'help', - 'here', - 'hermes', - 'hiphop', - 'hiv', - 'hk', - 'hm', - 'hn', - 'holdings', - 'holiday', - 'homes', - 'horse', - 'host', - 'hosting', - 'house', - 'how', - 'hr', - 'ht', - 'hu', - 'ibm', - 'id', - 'ie', - 'ifm', - 'il', - 'im', - 'immo', - 'immobilien', - 'in', - 'industries', - 'infiniti', - 'info', - 'ing', - 'ink', - 'institute', - 'insure', - 'int', - 'international', - 'investments', - 'io', - 'iq', - 'ir', - 'irish', - 'is', - 'it', - 'iwc', - 'java', - 'jcb', - 'je', - 'jetzt', - 'jm', - 'jo', - 'jobs', - 'joburg', - 'jp', - 'juegos', - 'kaufen', - 'kddi', - 'ke', - 'kg', - 'kh', - 'ki', - 'kim', - 'kitchen', - 'kiwi', - 'km', - 'kn', - 'koeln', - 'kp', - 'kr', - 'krd', - 'kred', - 'kw', - 'ky', - 'kyoto', - 'kz', - 'la', - 'lacaixa', - 'land', - 'lat', - 'latrobe', - 'lawyer', - 'lb', - 'lc', - 'lds', - 'lease', - 'leclerc', - 'legal', - 'lgbt', - 'li', - 'lidl', - 'life', - 'lighting', - 'limited', - 'limo', - 'link', - 'lk', - 'loans', - 'london', - 'lotte', - 'lotto', - 'lr', - 'ls', - 'lt', - 'ltda', - 'lu', - 'luxe', - 'luxury', - 'lv', - 'ly', - 'ma', - 'madrid', - 'maif', - 'maison', - 'management', - 'mango', - 'market', - 'marketing', - 'markets', - 'marriott', - 'mc', - 'md', - 'me', - 'media', - 'meet', - 'melbourne', - 'meme', - 'memorial', - 'menu', - 'mg', - 'mh', - 'miami', - 'mil', - 'mini', - 'mk', - 'ml', - 'mm', - 'mn', - 'mo', - 'mobi', - 'moda', - 'moe', - 'monash', - 'money', - 'mormon', - 'mortgage', - 'moscow', - 'motorcycles', - 'mov', - 'mp', - 'mq', - 'mr', - 'ms', - 'mt', - 'mtpc', - 'mu', - 'museum', - 'mv', - 'mw', - 'mx', - 'my', - 'mz', - 'na', - 'nagoya', - 'name', - 'navy', - 'nc', - 'ne', - 'net', - 'network', - 'neustar', - 'new', - 'nexus', - 'nf', - 'ng', - 'ngo', - 'nhk', - 'ni', - 'nico', - 'ninja', - 'nissan', - 'nl', - 'no', - 'np', - 'nr', - 'nra', - 'nrw', - 'ntt', - 'nu', - 'nyc', - 'nz', - 'okinawa', - 'om', - 'one', - 'ong', - 'onl', - 'online', - 'ooo', - 'oracle', - 'org', - 'organic', - 'osaka', - 'otsuka', - 'ovh', - 'pa', - 'page', - 'paris', - 'partners', - 'parts', - 'party', - 'pe', - 'pf', - 'pg', - 'ph', - 'pharmacy', - 'photo', - 'photography', - 'photos', - 'physio', - 'piaget', - 'pics', - 'pictet', - 'pictures', - 'pink', - 'pizza', - 'pk', - 'pl', - 'place', - 'plumbing', - 'pm', - 'pn', - 'pohl', - 'poker', - 'porn', - 'post', - 'pr', - 'praxi', - 'press', - 'pro', - 'prod', - 'productions', - 'prof', - 'properties', - 'property', - 'ps', - 'pt', - 'pub', - 'pw', - 'py', - 'qa', - 'qpon', - 'quebec', - 're', - 'realtor', - 'recipes', - 'red', - 'rehab', - 'reise', - 'reisen', - 'reit', - 'ren', - 'rentals', - 'repair', - 'report', - 'republican', - 'rest', - 'restaurant', - 'reviews', - 'rich', - 'rio', - 'rip', - 'ro', - 'rocks', - 'rodeo', - 'rs', - 'rsvp', - 'ru', - 'ruhr', - 'rw', - 'ryukyu', - 'sa', - 'saarland', - 'sale', - 'samsung', - 'sarl', - 'saxo', - 'sb', - 'sc', - 'sca', - 'scb', - 'schmidt', - 'school', - 'schule', - 'schwarz', - 'science', - 'scot', - 'sd', - 'se', - 'services', - 'sew', - 'sexy', - 'sg', - 'sh', - 'shiksha', - 'shoes', - 'shriram', - 'si', - 'singles', - 'site', - 'sj', - 'sk', - 'sky', - 'sl', - 'sm', - 'sn', - 'so', - 'social', - 'software', - 'sohu', - 'solar', - 'solutions', - 'soy', - 'space', - 'spiegel', - 'spreadbetting', - 'sr', - 'st', - 'study', - 'style', - 'su', - 'sucks', - 'supplies', - 'supply', - 'support', - 'surf', - 'surgery', - 'suzuki', - 'sv', - 'sx', - 'sy', - 'sydney', - 'systems', - 'sz', - 'taipei', - 'tatar', - 'tattoo', - 'tax', - 'tc', - 'td', - 'technology', - 'tel', - 'temasek', - 'tennis', - 'tf', - 'tg', - 'th', - 'tienda', - 'tips', - 'tires', - 'tirol', - 'tj', - 'tk', - 'tl', - 'tm', - 'tn', - 'to', - 'today', - 'tokyo', - 'tools', - 'top', - 'toshiba', - 'town', - 'toys', - 'tr', - 'trade', - 'trading', - 'training', - 'travel', - 'trust', - 'tt', - 'tui', - 'tv', - 'tw', - 'tz', - 'ua', - 'ug', - 'uk', - 'university', - 'uno', - 'uol', - 'us', - 'uy', - 'uz', - 'va', - 'vacations', - 'vc', - 've', - 'vegas', - 'ventures', - 'versicherung', - 'vet', - 'vg', - 'vi', - 'viajes', - 'video', - 'villas', - 'vision', - 'vlaanderen', - 'vn', - 'vodka', - 'vote', - 'voting', - 'voto', - 'voyage', - 'vu', - 'wales', - 'wang', - 'watch', - 'webcam', - 'website', - 'wed', - 'wedding', - 'wf', - 'whoswho', - 'wien', - 'wiki', - 'williamhill', - 'wme', - 'work', - 'works', - 'world', - 'ws', - 'wtc', - 'wtf', - 'xin', - '佛山', - '集团', - '在线', - 'í•œêµ', - 'à¦à¦¾à¦°à¦¤', - 'å…«å¦', - 'موقع', - '公益', - 'å…¬å¸', - '移动', - 'æˆ‘çˆ±ä½ ', - 'моÑква', - 'қаз', - 'онлайн', - 'Ñайт', - 'Ñрб', - 'бел', - '淡马锡', - 'орг', - '삼성', - 'சிஙà¯à®•à®ªà¯à®ªà¯‚à®°à¯', - 'å•†æ ‡', - '商店', - '商城', - 'дети', - 'мкд', - 'ä¸æ–‡ç½‘', - 'ä¸ä¿¡', - 'ä¸å›½', - 'ä¸åœ‹', - 'è°·æŒ', - 'à°à°¾à°°à°¤à±', - 'ලංකà·', - 'àªàª¾àª°àª¤', - 'à¤à¤¾à¤°à¤¤', - '网店', - 'संगठन', - '网络', - 'укр', - '香港', - 'å°æ¹¾', - 'å°ç£', - '手机', - 'мон', - 'الجزائر', - 'عمان', - 'ایران', - 'امارات', - 'بازار', - 'الاردن', - 'بھارت', - 'المغرب', - 'السعودية', - 'مليسيا', - '政府', - 'شبكة', - 'გე', - '机构', - '组织机构', - 'ไทย', - 'سورية', - 'руÑ', - 'рф', - 'تونس', - 'ã¿ã‚“ãª', - 'グーグル', - '世界', - 'à¨à¨¾à¨°à¨¤', - '网å€', - '游æˆ', - 'vermögensberater', - 'vermögensberatung', - 'ä¼ä¸š', - 'مصر', - 'قطر', - '广东', - 'இலஙà¯à®•à¯ˆ', - 'இநà¯à®¤à®¿à®¯à®¾', - 'æ–°åŠ å¡', - 'Ùلسطين', - '政务', - 'xxx', - 'xyz', - 'yachts', - 'yandex', - 'ye', - 'yodobashi', - 'yoga', - 'yokohama', - 'youtube', - 'yt', - 'za', - 'zip', - 'zm', - 'zone', - 'zuerich', - 'zw', - ); - - /** - * Array for valid Idns - * @see http://www.iana.org/domains/idn-tables/ Official list of supported IDN Chars - * (.AC) Ascension Island http://www.nic.ac/pdf/AC-IDN-Policy.pdf - * (.AR) Argentina http://www.nic.ar/faqidn.html - * (.AS) American Samoa http://www.nic.as/idn/chars.cfm - * (.AT) Austria http://www.nic.at/en/service/technical_information/idn/charset_converter/ - * (.BIZ) International http://www.iana.org/domains/idn-tables/ - * (.BR) Brazil http://registro.br/faq/faq6.html - * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html - * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html - * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1 - * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html - * (.COM) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html - * (.DE) Germany http://www.denic.de/en/domains/idns/liste.html - * (.DK) Danmark http://www.dk-hostmaster.dk/index.php?id=151 - * (.EE) Estonia https://www.iana.org/domains/idn-tables/tables/pl_et-pl_1.0.html - * (.ES) Spain https://www.nic.es/media/2008-05/1210147705287.pdf - * (.FI) Finland http://www.ficora.fi/en/index/palvelut/fiverkkotunnukset/aakkostenkaytto.html - * (.GR) Greece https://grweb.ics.forth.gr/CharacterTable1_en.jsp - * (.HU) Hungary http://www.domain.hu/domain/English/szabalyzat/szabalyzat.html - * (.IL) Israel http://www.isoc.org.il/domains/il-domain-rules.html - * (.INFO) International http://www.nic.info/info/idn - * (.IO) British Indian Ocean Territory http://www.nic.io/IO-IDN-Policy.pdf - * (.IR) Iran http://www.nic.ir/Allowable_Characters_dot-iran - * (.IS) Iceland http://www.isnic.is/domain/rules.php - * (.KR) Korea http://www.iana.org/domains/idn-tables/tables/kr_ko-kr_1.0.html - * (.LI) Liechtenstein https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1 - * (.LT) Lithuania http://www.domreg.lt/static/doc/public/idn_symbols-en.pdf - * (.MD) Moldova http://www.register.md/ - * (.MUSEUM) International http://www.iana.org/domains/idn-tables/tables/museum_latn_1.0.html - * (.NET) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html - * (.NO) Norway http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html - * (.NU) Niue http://www.worldnames.net/ - * (.ORG) International http://www.pir.org/index.php?db=content/FAQs&tbl=FAQs_Registrant&id=2 - * (.PE) Peru https://www.nic.pe/nuevas_politicas_faq_2.php - * (.PL) Poland http://www.dns.pl/IDN/allowed_character_sets.pdf - * (.PR) Puerto Rico http://www.nic.pr/idn_rules.asp - * (.PT) Portugal https://online.dns.pt/dns_2008/do?com=DS;8216320233;111;+PAGE(4000058)+K-CAT-CODIGO(C.125)+RCNT(100); - * (.RU) Russia http://www.iana.org/domains/idn-tables/tables/ru_ru-ru_1.0.html - * (.SA) Saudi Arabia http://www.iana.org/domains/idn-tables/tables/sa_ar_1.0.html - * (.SE) Sweden http://www.iis.se/english/IDN_campaignsite.shtml?lang=en - * (.SH) Saint Helena http://www.nic.sh/SH-IDN-Policy.pdf - * (.SJ) Svalbard and Jan Mayen http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html - * (.TH) Thailand http://www.iana.org/domains/idn-tables/tables/th_th-th_1.0.html - * (.TM) Turkmenistan http://www.nic.tm/TM-IDN-Policy.pdf - * (.TR) Turkey https://www.nic.tr/index.php - * (.UA) Ukraine http://www.iana.org/domains/idn-tables/tables/ua_cyrl_1.2.html - * (.VE) Venice http://www.iana.org/domains/idn-tables/tables/ve_es_1.0.html - * (.VN) Vietnam http://www.vnnic.vn/english/5-6-300-2-2-04-20071115.htm#1.%20Introduction - * - * @var array - */ - protected $validIdns = array( - 'AC' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄăąćĉċÄÄđēėęěÄġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśÅşšţťŧūÅůűųŵŷźżž]{1,63}$/iu'), - 'AR' => array(1 => '/^[\x{002d}0-9a-zà -ãç-êìÃñ-õü]{1,63}$/iu'), - 'AS' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīÄįıĵķĸĺļľłńņňŋÅÅőœŕŗřśÅşšţťŧũūÅůűųŵŷźż]{1,63}$/iu'), - 'AT' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿœšž]{1,63}$/iu'), - 'BIZ' => 'Hostname/Biz.php', - 'BR' => array(1 => '/^[\x{002d}0-9a-zà -ãçéÃó-õúü]{1,63}$/iu'), - 'BV' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄđńŋšŧž]{1,63}$/iu'), - 'CAT' => array(1 => '/^[\x{002d}0-9a-z·à ç-éÃïòóúü]{1,63}$/iu'), - 'CH' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿœ]{1,63}$/iu'), - 'CL' => array(1 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu'), - 'CN' => 'Hostname/Cn.php', - 'COM' => 'Hostname/Com.php', - 'DE' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿăąÄćĉÄÄ‹ÄđĕěėęēğÄġģĥħÄĩįīıĵķĺľļłńňņŋÅÅ‘ÅœĸŕřŗśÅšşťţŧÅůűũųūŵŷźžż]{1,63}$/iu'), - 'DK' => array(1 => '/^[\x{002d}0-9a-zäéöü]{1,63}$/iu'), - 'EE' => array(1 => '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu'), - 'ES' => array(1 => '/^[\x{002d}0-9a-zà áçèéÃïñòóúü·]{1,63}$/iu'), - 'EU' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿ]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-zÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīÄįıĵķĺļľŀłńņňʼnŋÅÅőœŕŗřśÅšťŧũūÅůűųŵŷźżž]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu', - 4 => '/^[\x{002d}0-9a-zÎάÎήίΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏÏŽ]{1,63}$/iu', - 5 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ]{1,63}$/iu', - 6 => '/^[\x{002d}0-9a-zá¼€-ἇá¼-ἕἠ-ἧἰ-á¼·á½€-á½…á½-á½—á½ -ὧὰ-ὼώᾀ-ᾇá¾-á¾—á¾ -ᾧᾰ-ᾴᾶᾷῂῃῄῆῇá¿-á¿’Îá¿–á¿—á¿ -ῧῲῳῴῶῷ]{1,63}$/iu'), - 'FI' => array(1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'), - 'GR' => array(1 => '/^[\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ÏŽá¼€-ἕἘ-á¼á¼ -ὅὈ-á½á½-ὗὙὛá½á½Ÿ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-á¿Œá¿-á¿“á¿–-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu'), - 'HK' => 'Hostname/Cn.php', - 'HU' => array(1 => '/^[\x{002d}0-9a-záéÃóöúüőű]{1,63}$/iu'), - 'IL' => array(1 => '/^[\x{002d}0-9\x{05D0}-\x{05EA}]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-z]{1,63}$/i'), - 'INFO'=> array(1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-záéÃóöúüőű]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-záæéÃðóöúýþ]{1,63}$/iu', - 4 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu', - 5 => '/^[\x{002d}0-9a-zÄÄēģīķļņÅŗšūž]{1,63}$/iu', - 6 => '/^[\x{002d}0-9a-zÄ…Äėęįšūųž]{1,63}$/iu', - 7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', - 8 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu'), - 'IO' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿăąÄćĉÄÄ‹ÄđĕěėęēğÄġģĥħÄĩįīıĵķĺľļłńňņŋÅÅ‘ÅœĸŕřŗśÅšşťţŧÅůűũųūŵŷźžż]{1,63}$/iu'), - 'IS' => array(1 => '/^[\x{002d}0-9a-záéýúÃóþæöð]{1,63}$/iu'), - 'IT' => array(1 => '/^[\x{002d}0-9a-zà âäèéêëìîïòôöùûüæœçÿß-]{1,63}$/iu'), - 'JP' => 'Hostname/Jp.php', - 'KR' => array(1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'), - 'LI' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿœ]{1,63}$/iu'), - 'LT' => array(1 => '/^[\x{002d}0-9Ä…Äęėįšųūž]{1,63}$/iu'), - 'MD' => array(1 => '/^[\x{002d}0-9ăâîşţ]{1,63}$/iu'), - 'MUSEUM' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄăąćċÄÄđēėęěğġģħīįıķĺļľłńņňŋÅőœŕŗřśşšţťŧūůűųŵŷźżžǎÇÇ’Ç”\x{01E5}\x{01E7}\x{01E9}\x{01EF}É™\x{0292}áºáºƒáº…ỳ]{1,63}$/iu'), - 'NET' => 'Hostname/Com.php', - 'NO' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄđńŋšŧž]{1,63}$/iu'), - 'NU' => 'Hostname/Com.php', - 'ORG' => array(1 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-záäåæéëÃðóöøúüýþ]{1,63}$/iu', - 4 => '/^[\x{002d}0-9a-záéÃóöúüőű]{1,63}$/iu', - 5 => '/^[\x{002d}0-9a-zÄ…Äėęįšūųž]{1,63}$/iu', - 6 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu', - 7 => '/^[\x{002d}0-9a-zÄÄēģīķļņÅŗšūž]{1,63}$/iu'), - 'PE' => array(1 => '/^[\x{002d}0-9a-zñáéÃóúü]{1,63}$/iu'), - 'PL' => array(1 => '/^[\x{002d}0-9a-zÄÄēģīķļņÅŗšūž]{1,63}$/iu', - 2 => '/^[\x{002d}а-ик-ш\x{0450}ѓѕјљњќџ]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu', - 4 => '/^[\x{002d}0-9а-ÑÑ‘\x{04C2}]{1,63}$/iu', - 5 => '/^[\x{002d}0-9a-zà áâèéêìÃîòóôùúûċġħż]{1,63}$/iu', - 6 => '/^[\x{002d}0-9a-zà äåæéêòóôöøü]{1,63}$/iu', - 7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', - 8 => '/^[\x{002d}0-9a-zà áâãçéêÃòóôõúü]{1,63}$/iu', - 9 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu', - 10=> '/^[\x{002d}0-9a-záäéÃóôúýÄÄĺľňŕšťž]{1,63}$/iu', - 11=> '/^[\x{002d}0-9a-zçë]{1,63}$/iu', - 12=> '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu', - 13=> '/^[\x{002d}0-9a-zćÄđšž]{1,63}$/iu', - 14=> '/^[\x{002d}0-9a-zâçöûüğış]{1,63}$/iu', - 15=> '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu', - 16=> '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu', - 17=> '/^[\x{002d}0-9a-zĉÄĥĵÅÅ]{1,63}$/iu', - 18=> '/^[\x{002d}0-9a-zâäéëîô]{1,63}$/iu', - 19=> '/^[\x{002d}0-9a-zà áâäåæçèéêëìÃîïðñòôöøùúûüýćÄłńřśš]{1,63}$/iu', - 20=> '/^[\x{002d}0-9a-zäåæõöøüšž]{1,63}$/iu', - 21=> '/^[\x{002d}0-9a-zà áçèéìÃòóùú]{1,63}$/iu', - 22=> '/^[\x{002d}0-9a-zà áéÃóöúüőű]{1,63}$/iu', - 23=> '/^[\x{002d}0-9Îά-ÏŽ]{1,63}$/iu', - 24=> '/^[\x{002d}0-9a-zà áâåæçèéêëðóôöøüþœ]{1,63}$/iu', - 25=> '/^[\x{002d}0-9a-záäéÃóöúüýÄÄěňřšťůž]{1,63}$/iu', - 26=> '/^[\x{002d}0-9a-z·à çèéÃïòóúü]{1,63}$/iu', - 27=> '/^[\x{002d}0-9а-ъьюÑ\x{0450}\x{045D}]{1,63}$/iu', - 28=> '/^[\x{002d}0-9а-ÑÑ‘Ñ–Ñž]{1,63}$/iu', - 29=> '/^[\x{002d}0-9a-zÄ…Äėęįšūųž]{1,63}$/iu', - 30=> '/^[\x{002d}0-9a-záäåæéëÃðóöøúüýþ]{1,63}$/iu', - 31=> '/^[\x{002d}0-9a-zà âæçèéêëîïñôùûüÿœ]{1,63}$/iu', - 32=> '/^[\x{002d}0-9а-щъыьÑÑŽÑёєіїґ]{1,63}$/iu', - 33=> '/^[\x{002d}0-9×-ת]{1,63}$/iu'), - 'PR' => array(1 => '/^[\x{002d}0-9a-záéÃóúñäëïüöâêîôûà èùæçœãõ]{1,63}$/iu'), - 'PT' => array(1 => '/^[\x{002d}0-9a-záà âãçéêÃóôõú]{1,63}$/iu'), - 'RU' => array(1 => '/^[\x{002d}0-9а-ÑÑ‘]{1,63}$/iu'), - 'SA' => array(1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'), - 'SE' => array(1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'), - 'SH' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿăąÄćĉÄÄ‹ÄđĕěėęēğÄġģĥħÄĩįīıĵķĺľļłńňņŋÅÅ‘ÅœĸŕřŗśÅšşťţŧÅůűũųūŵŷźžż]{1,63}$/iu'), - 'SI' => array( - 1 => '/^[\x{002d}0-9a-zà -öø-ÿ]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-zÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīÄįıĵķĺļľŀłńņňʼnŋÅÅőœŕŗřśÅšťŧũūÅůűųŵŷźżž]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu'), - 'SJ' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄđńŋšŧž]{1,63}$/iu'), - 'TH' => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'), - 'TM' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄăąćĉċÄÄđēėęěÄġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśÅşšţťŧūÅůűųŵŷźżž]{1,63}$/iu'), - 'TW' => 'Hostname/Cn.php', - 'TR' => array(1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'), - 'UA' => array(1 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑÑёђѓєѕіїјљњћќÑўџґӂʼ]{1,63}$/iu'), - 'VE' => array(1 => '/^[\x{002d}0-9a-záéÃóúüñ]{1,63}$/iu'), - 'VN' => array(1 => '/^[ÀÃÂÃÈÉÊÌÃÒÓÔÕÙÚÃà áâãèéêìÃòóôõùúýĂăÄÄ‘Ä¨Ä©Å¨Å©Æ Æ¡Æ¯Æ°\x{1EA0}-\x{1EF9}]{1,63}$/iu'), - 'мон' => array(1 => '/^[\x{002d}0-9\x{0430}-\x{044F}]{1,63}$/iu'), - 'Ñрб' => array(1 => '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu'), - 'Ñайт' => array(1 => '/^[\x{002d}0-9а-ÑÑ‘Ñ–Ñ—Ñйўґг]{1,63}$/iu'), - 'онлайн' => array(1 => '/^[\x{002d}0-9а-ÑÑ‘Ñ–Ñ—Ñйўґг]{1,63}$/iu'), - 'ä¸å›½' => 'Hostname/Cn.php', - 'ä¸åœ‹' => 'Hostname/Cn.php', - 'ලංකà·' => array(1 => '/^[\x{0d80}-\x{0dff}]{1,63}$/iu'), - '香港' => 'Hostname/Cn.php', - 'å°æ¹¾' => 'Hostname/Cn.php', - 'å°ç£' => 'Hostname/Cn.php', - 'امارات' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'الاردن' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'السعودية' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'ไทย' => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'), - 'рф' => array(1 => '/^[\x{002d}0-9а-ÑÑ‘]{1,63}$/iu'), - 'تونس' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'مصر' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'இலஙà¯à®•à¯ˆ' => array(1 => '/^[\x{0b80}-\x{0bff}]{1,63}$/iu'), - 'Ùلسطين' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - 'شبكة' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'), - ); - - protected $idnLength = array( - 'BIZ' => array(5 => 17, 11 => 15, 12 => 20), - 'CN' => array(1 => 20), - 'COM' => array(3 => 17, 5 => 20), - 'HK' => array(1 => 15), - 'INFO'=> array(4 => 17), - 'KR' => array(1 => 17), - 'NET' => array(3 => 17, 5 => 20), - 'ORG' => array(6 => 17), - 'TW' => array(1 => 20), - 'امارات' => array(1 => 30), - 'الاردن' => array(1 => 30), - 'السعودية' => array(1 => 30), - 'تونس' => array(1 => 30), - 'مصر' => array(1 => 30), - 'Ùلسطين' => array(1 => 30), - 'شبكة' => array(1 => 30), - 'ä¸å›½' => array(1 => 20), - 'ä¸åœ‹' => array(1 => 20), - '香港' => array(1 => 20), - 'å°æ¹¾' => array(1 => 20), - 'å°ç£' => array(1 => 20), - ); - - protected $tld; - - /** - * Options for the hostname validator - * - * @var array - */ - protected $options = array( - 'allow' => self::ALLOW_DNS, // Allow these hostnames - 'useIdnCheck' => true, // Check IDN domains - 'useTldCheck' => true, // Check TLD elements - 'ipValidator' => null, // IP validator to use - ); - - /** - * Sets validator options. - * - * @param int $allow OPTIONAL Set what types of hostname to allow (default ALLOW_DNS) - * @param bool $useIdnCheck OPTIONAL Set whether IDN domains are validated (default true) - * @param bool $useTldCheck Set whether the TLD element of a hostname is validated (default true) - * @param Ip $ipValidator OPTIONAL - * @see http://www.iana.org/cctld/specifications-policies-cctlds-01apr02.htm Technical Specifications for ccTLDs - */ - public function __construct($options = array()) - { - if (!is_array($options)) { - $options = func_get_args(); - $temp['allow'] = array_shift($options); - if (!empty($options)) { - $temp['useIdnCheck'] = array_shift($options); - } - - if (!empty($options)) { - $temp['useTldCheck'] = array_shift($options); - } - - if (!empty($options)) { - $temp['ipValidator'] = array_shift($options); - } - - $options = $temp; - } - - if (!array_key_exists('ipValidator', $options)) { - $options['ipValidator'] = null; - } - - parent::__construct($options); - } - - /** - * Returns the set ip validator - * - * @return Ip - */ - public function getIpValidator() - { - return $this->options['ipValidator']; - } - - /** - * - * @param Ip $ipValidator OPTIONAL - * @return Hostname; - */ - public function setIpValidator(Ip $ipValidator = null) - { - if ($ipValidator === null) { - $ipValidator = new Ip(); - } - - $this->options['ipValidator'] = $ipValidator; - return $this; - } - - /** - * Returns the allow option - * - * @return int - */ - public function getAllow() - { - return $this->options['allow']; - } - - /** - * Sets the allow option - * - * @param int $allow - * @return Hostname Provides a fluent interface - */ - public function setAllow($allow) - { - $this->options['allow'] = $allow; - return $this; - } - - /** - * Returns the set idn option - * - * @return bool - */ - public function getIdnCheck() - { - return $this->options['useIdnCheck']; - } - - /** - * Set whether IDN domains are validated - * - * This only applies when DNS hostnames are validated - * - * @param bool $useIdnCheck Set to true to validate IDN domains - * @return Hostname - */ - public function useIdnCheck($useIdnCheck) - { - $this->options['useIdnCheck'] = (bool) $useIdnCheck; - return $this; - } - - /** - * Returns the set tld option - * - * @return bool - */ - public function getTldCheck() - { - return $this->options['useTldCheck']; - } - - /** - * Set whether the TLD element of a hostname is validated - * - * This only applies when DNS hostnames are validated - * - * @param bool $useTldCheck Set to true to validate TLD elements - * @return Hostname - */ - public function useTldCheck($useTldCheck) - { - $this->options['useTldCheck'] = (bool) $useTldCheck; - return $this; - } - - /** - * Defined by Interface - * - * Returns true if and only if the $value is a valid hostname with respect to the current allow option - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - // Check input against IP address schema - if (preg_match('/^[0-9a-f:.]*$/i', $value) - && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value) - ) { - if (!($this->getAllow() & self::ALLOW_IP)) { - $this->error(self::IP_ADDRESS_NOT_ALLOWED); - return false; - } - - return true; - } - - // Local hostnames are allowed to be partial (ending '.') - if ($this->getAllow() & self::ALLOW_LOCAL) { - if (substr($value, -1) === '.') { - $value = substr($value, 0, -1); - if (substr($value, -1) === '.') { - // Empty hostnames (ending '..') are not allowed - $this->error(self::INVALID_LOCAL_NAME); - return false; - } - } - } - - $domainParts = explode('.', $value); - - // Prevent partial IP V4 addresses (ending '.') - if (count($domainParts) == 4 && preg_match('/^[0-9.a-e:.]*$/i', $value) - && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value) - ) { - $this->error(self::INVALID_LOCAL_NAME); - } - - $utf8StrWrapper = StringUtils::getWrapper('UTF-8'); - - // Check input against DNS hostname schema - if (count($domainParts) > 1 - && $utf8StrWrapper->strlen($value) >= 4 - && $utf8StrWrapper->strlen($value) <= 254 - ) { - $status = false; - - do { - // First check TLD - $matches = array(); - if (preg_match('/([^.]{2,63})$/iu', end($domainParts), $matches) - || (array_key_exists(end($domainParts), $this->validIdns)) - ) { - reset($domainParts); - - // Hostname characters are: *(label dot)(label dot label); max 254 chars - // label: id-prefix [*ldh{61} id-prefix]; max 63 chars - // id-prefix: alpha / digit - // ldh: alpha / digit / dash - - // Match TLD against known list - $this->tld = strtoupper($matches[1]); - if ($this->getTldCheck()) { - if (!in_array(strtolower($this->tld), $this->validTlds) - && !in_array($this->tld, $this->validTlds)) { - $this->error(self::UNKNOWN_TLD); - $status = false; - break; - } - // We have already validated that the TLD is fine. We don't want it to go through the below - // checks as new UTF-8 TLDs will incorrectly fail if there is no IDN regex for it. - array_pop($domainParts); - } - - /** - * Match against IDN hostnames - * Note: Keep label regex short to avoid issues with long patterns when matching IDN hostnames - * - * @see Hostname\Interface - */ - $regexChars = array(0 => '/^[a-z0-9\x2d]{1,63}$/i'); - if ($this->getIdnCheck() && isset($this->validIdns[$this->tld])) { - if (is_string($this->validIdns[$this->tld])) { - $regexChars += include __DIR__ . '/' . $this->validIdns[$this->tld]; - } else { - $regexChars += $this->validIdns[$this->tld]; - } - } - - // Check each hostname part - $check = 0; - foreach ($domainParts as $domainPart) { - // Decode Punycode domain names to IDN - if (strpos($domainPart, 'xn--') === 0) { - $domainPart = $this->decodePunycode(substr($domainPart, 4)); - if ($domainPart === false) { - return false; - } - } - - // Check dash (-) does not start, end or appear in 3rd and 4th positions - if ($utf8StrWrapper->strpos($domainPart, '-') === 0 - || ($utf8StrWrapper->strlen($domainPart) > 2 - && $utf8StrWrapper->strpos($domainPart, '-', 2) == 2 - && $utf8StrWrapper->strpos($domainPart, '-', 3) == 3 - ) - || ($utf8StrWrapper->strpos($domainPart, '-') === ($utf8StrWrapper->strlen($domainPart) - 1)) - ) { - $this->error(self::INVALID_DASH); - $status = false; - break 2; - } - - // Check each domain part - $checked = false; - foreach ($regexChars as $regexKey => $regexChar) { - $status = preg_match($regexChar, $domainPart); - if ($status > 0) { - $length = 63; - if (array_key_exists($this->tld, $this->idnLength) - && array_key_exists($regexKey, $this->idnLength[$this->tld]) - ) { - $length = $this->idnLength[$this->tld]; - } - - if ($utf8StrWrapper->strlen($domainPart) > $length) { - $this->error(self::INVALID_HOSTNAME); - $status = false; - } else { - $checked = true; - break; - } - } - } - - if ($checked) { - ++$check; - } - } - - // If one of the labels doesn't match, the hostname is invalid - if ($check !== count($domainParts)) { - $this->error(self::INVALID_HOSTNAME_SCHEMA); - $status = false; - } - } else { - // Hostname not long enough - $this->error(self::UNDECIPHERABLE_TLD); - $status = false; - } - } while (false); - - // If the input passes as an Internet domain name, and domain names are allowed, then the hostname - // passes validation - if ($status && ($this->getAllow() & self::ALLOW_DNS)) { - return true; - } - } elseif ($this->getAllow() & self::ALLOW_DNS) { - $this->error(self::INVALID_HOSTNAME); - } - - // Check for URI Syntax (RFC3986) - if ($this->getAllow() & self::ALLOW_URI) { - if (preg_match("/^([a-zA-Z0-9-._~!$&\'()*+,;=]|%[[:xdigit:]]{2}){1,254}$/i", $value)) { - return true; - } - - $this->error(self::INVALID_URI); - } - - // Check input against local network name schema; last chance to pass validation - $regexLocal = '/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}[\x2e]{0,1}){1,254}$/'; - $status = preg_match($regexLocal, $value); - - // If the input passes as a local network name, and local network names are allowed, then the - // hostname passes validation - $allowLocal = $this->getAllow() & self::ALLOW_LOCAL; - if ($status && $allowLocal) { - return true; - } - - // If the input does not pass as a local network name, add a message - if (!$status) { - $this->error(self::INVALID_LOCAL_NAME); - } - - // If local network names are not allowed, add a message - if ($status && !$allowLocal) { - $this->error(self::LOCAL_NAME_NOT_ALLOWED); - } - - return false; - } - - /** - * Decodes a punycode encoded string to it's original utf8 string - * Returns false in case of a decoding failure. - * - * @param string $encoded Punycode encoded string to decode - * @return string|false - */ - protected function decodePunycode($encoded) - { - if (!preg_match('/^[a-z0-9-]+$/i', $encoded)) { - // no punycode encoded string - $this->error(self::CANNOT_DECODE_PUNYCODE); - return false; - } - - $decoded = array(); - $separator = strrpos($encoded, '-'); - if ($separator > 0) { - for ($x = 0; $x < $separator; ++$x) { - // prepare decoding matrix - $decoded[] = ord($encoded[$x]); - } - } - - $lengthd = count($decoded); - $lengthe = strlen($encoded); - - // decoding - $init = true; - $base = 72; - $index = 0; - $char = 0x80; - - for ($indexe = ($separator) ? ($separator + 1) : 0; $indexe < $lengthe; ++$lengthd) { - for ($oldIndex = $index, $pos = 1, $key = 36; 1; $key += 36) { - $hex = ord($encoded[$indexe++]); - $digit = ($hex - 48 < 10) ? $hex - 22 - : (($hex - 65 < 26) ? $hex - 65 - : (($hex - 97 < 26) ? $hex - 97 - : 36)); - - $index += $digit * $pos; - $tag = ($key <= $base) ? 1 : (($key >= $base + 26) ? 26 : ($key - $base)); - if ($digit < $tag) { - break; - } - - $pos = (int) ($pos * (36 - $tag)); - } - - $delta = intval($init ? (($index - $oldIndex) / 700) : (($index - $oldIndex) / 2)); - $delta += intval($delta / ($lengthd + 1)); - for ($key = 0; $delta > 910 / 2; $key += 36) { - $delta = intval($delta / 35); - } - - $base = intval($key + 36 * $delta / ($delta + 38)); - $init = false; - $char += (int) ($index / ($lengthd + 1)); - $index %= ($lengthd + 1); - if ($lengthd > 0) { - for ($i = $lengthd; $i > $index; $i--) { - $decoded[$i] = $decoded[($i - 1)]; - } - } - - $decoded[$index++] = $char; - } - - // convert decoded ucs4 to utf8 string - foreach ($decoded as $key => $value) { - if ($value < 128) { - $decoded[$key] = chr($value); - } elseif ($value < (1 << 11)) { - $decoded[$key] = chr(192 + ($value >> 6)); - $decoded[$key] .= chr(128 + ($value & 63)); - } elseif ($value < (1 << 16)) { - $decoded[$key] = chr(224 + ($value >> 12)); - $decoded[$key] .= chr(128 + (($value >> 6) & 63)); - $decoded[$key] .= chr(128 + ($value & 63)); - } elseif ($value < (1 << 21)) { - $decoded[$key] = chr(240 + ($value >> 18)); - $decoded[$key] .= chr(128 + (($value >> 12) & 63)); - $decoded[$key] .= chr(128 + (($value >> 6) & 63)); - $decoded[$key] .= chr(128 + ($value & 63)); - } else { - $this->error(self::CANNOT_DECODE_PUNYCODE); - return false; - } - } - - return implode($decoded); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php deleted file mode 100644 index fd755c7480..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php +++ /dev/null @@ -1,2903 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Hostname; - -/** - * Resource file for biz idn validation - */ -return array( - 1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu', - 2 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-záéÃóöúüőű]{1,63}$/iu', - 4 => '/^[\x{002d}0-9a-záæéÃðóöúýþ]{1,63}$/iu', - 5 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu', - 6 => '/^[\x{002d}0-9a-zÄ…Äėęįšūųž]{1,63}$/iu', - 7 => '/^[\x{002d}0-9a-zÄÄēģīķļņÅŗšūž]{1,63}$/iu', - 8 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄđńŋšŧž]{1,63}$/iu', - 9 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', - 10 => '/^[\x{002d}0-9a-záà âãçéêÃóôõú]{1,63}$/iu', - 11 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}\x{30A1}-\x{30F6}\x{30FC}' . - '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' . - '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' . - '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' . - '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' . - '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' . - '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' . - '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' . - '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' . - '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' . - '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' . - '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' . - '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' . - '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' . - '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' . - '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' . - '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' . - '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' . - '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' . - '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' . - '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' . - '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' . - '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' . - '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' . - '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' . - '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' . - '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' . - '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' . - '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' . - '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' . - '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' . - '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' . - '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' . - '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' . - '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' . - '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' . - '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' . - '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' . - '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' . - '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' . - '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' . - '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' . - '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' . - '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' . - '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' . - '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' . - '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' . - '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' . - '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' . - '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' . - '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' . - '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' . - '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' . - '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' . - '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' . - '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' . - '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' . - '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' . - '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' . - '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' . - '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' . - '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' . - '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' . - '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' . - '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' . - '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' . - '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' . - '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' . - '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' . - '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' . - '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' . - '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' . - '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' . - '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' . - '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' . - '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' . - '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' . - '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' . - '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' . - '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' . - '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' . - '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' . - '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' . - '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' . - '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' . - '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' . - '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' . - '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' . - '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' . - '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' . - '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' . - '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' . - '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' . - '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' . - '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' . - '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' . - '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' . - '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' . - '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' . - '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' . - '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' . - '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' . - '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' . - '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' . - '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' . - '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' . - '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' . - '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' . - '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' . - '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' . - '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' . - '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' . - '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' . - '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' . - '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' . - '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' . - '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' . - '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' . - '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' . - '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' . - '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' . - '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' . - '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' . - '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' . - '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' . - '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' . - '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' . - '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' . - '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' . - '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' . - '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' . - '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' . - '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' . - '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' . - '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' . - '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' . - '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' . - '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' . - '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' . - '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' . - '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' . - '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' . - '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' . - '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' . - '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' . - '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' . - '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' . - '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' . - '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' . - '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' . - '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' . - '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' . - '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' . - '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' . - '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' . - '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' . - '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' . - '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' . - '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' . - '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' . - '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' . - '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' . - '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' . - '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' . - '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' . - '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' . - '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' . - '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' . - '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' . - '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' . - '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' . - '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' . - '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' . - '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' . - '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' . - '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' . - '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' . - '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' . - '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' . - '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' . - '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' . - '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' . - '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' . - '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' . - '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' . - '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' . - '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' . - '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' . - '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' . - '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' . - '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' . - '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' . - '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' . - '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' . - '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' . - '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' . - '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' . - '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' . - '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' . - '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' . - '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' . - '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' . - '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' . - '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' . - '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' . - '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' . - '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' . - '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' . - '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' . - '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' . - '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' . - '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' . - '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' . - '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' . - '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' . - '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' . - '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' . - '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' . - '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' . - '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' . - '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' . - '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' . - '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' . - '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' . - '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' . - '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' . - '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' . - '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' . - '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' . - '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' . - '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' . - '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' . - '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' . - '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' . - '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' . - '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' . - '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' . - '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' . - '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' . - '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' . - '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' . - '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' . - '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' . - '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' . - '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' . - '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' . - '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' . - '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' . - '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' . - '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' . - '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' . - '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' . - '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' . - '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' . - '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' . - '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' . - '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' . - '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' . - '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' . - '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' . - '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' . - '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' . - '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' . - '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' . - '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' . - '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' . - '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' . - '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' . - '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' . - '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' . - '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' . - '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' . - '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' . - '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' . - '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' . - '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' . - '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' . - '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' . - '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' . - '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' . - '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' . - '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' . - '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' . - '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' . - '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' . - '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' . - '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' . - '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' . - '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' . - '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' . - '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' . - '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' . - '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' . - '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' . - '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' . - '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' . - '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' . - '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' . - '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' . - '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' . - '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' . - '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' . - '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' . - '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' . - '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' . - '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' . - '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' . - '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' . - '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' . - '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' . - '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' . - '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' . - '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' . - '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' . - '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' . - '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' . - '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' . - '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' . - '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' . - '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' . - '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' . - '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' . - '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' . - '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' . - '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' . - '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' . - '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' . - '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' . - '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' . - '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' . - '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' . - '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' . - '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' . - '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' . - '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' . - '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' . - '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' . - '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' . - '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' . - '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' . - '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' . - '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' . - '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' . - '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' . - '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' . - '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' . - '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' . - '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' . - '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' . - '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' . - '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' . - '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' . - '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' . - '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' . - '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' . - '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' . - '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' . - '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' . - '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' . - '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' . - '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' . - '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' . - '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' . - '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' . - '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' . - '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' . - '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' . - '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' . - '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' . - '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' . - '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' . - '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' . - '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' . - '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' . - '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' . - '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' . - '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' . - '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' . - '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' . - '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' . - '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' . - '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' . - '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' . - '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' . - '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' . - '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' . - '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' . - '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' . - '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' . - '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' . - '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' . - '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' . - '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' . - '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' . - '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' . - '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' . - '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' . - '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' . - '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' . - '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' . - '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' . - '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' . - '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' . - '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' . - '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' . - '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' . - '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' . - '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' . - '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' . - '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' . - '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' . - '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' . - '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' . - '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' . - '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' . - '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' . - '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' . - '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' . - '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' . - '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' . - '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' . - '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' . - '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' . - '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' . - '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' . - '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' . - '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' . - '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' . - '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' . - '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' . - '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' . - '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' . - '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' . - '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' . - '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' . - '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' . - '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' . - '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' . - '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' . - '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' . - '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' . - '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' . - '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' . - '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' . - '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' . - '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' . - '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' . - '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' . - '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' . - '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' . - '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' . - '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' . - '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' . - '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' . - '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' . - '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' . - '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' . - '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' . - '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' . - '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' . - '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' . - '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' . - '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' . - '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' . - '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' . - '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' . - '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' . - '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' . - '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' . - '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' . - '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' . - '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' . - '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' . - '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' . - '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' . - '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' . - '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' . - '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' . - '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' . - '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' . - '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' . - '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' . - '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' . - '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' . - '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' . - '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' . - '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' . - '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' . - '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' . - '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' . - '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' . - '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' . - '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' . - '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' . - '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' . - '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' . - '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' . - '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' . - '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' . - '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' . - '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' . - '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' . - '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' . - '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' . - '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' . - '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' . - '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' . - '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' . - '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' . - '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' . - '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' . - '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' . - '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' . - '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' . - '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' . - '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' . - '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' . - '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' . - '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' . - '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' . - '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' . - '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' . - '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' . - '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' . - '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' . - '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' . - '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' . - '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' . - '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' . - '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' . - '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' . - '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' . - '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' . - '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' . - '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' . - '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' . - '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' . - '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' . - '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' . - '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' . - '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' . - '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' . - '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' . - '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' . - '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' . - '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' . - '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' . - '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' . - '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' . - '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' . - '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' . - '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' . - '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' . - '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' . - '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' . - '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' . - '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' . - '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' . - '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' . - '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' . - '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' . - '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' . - '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' . - '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' . - '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' . - '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' . - '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' . - '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' . - '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' . - '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' . - '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' . - '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' . - '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' . - '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' . - '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' . - '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' . - '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' . - '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' . - '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' . - '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' . - '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' . - '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' . - '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' . - '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' . - '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' . - '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' . - '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' . - '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' . - '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' . - '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' . - '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' . - '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' . - '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' . - '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' . - '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' . - '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' . - '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' . - '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' . - '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' . - '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' . - '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' . - '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' . - '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' . - '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' . - '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' . - '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' . - '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' . - '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' . - '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' . - '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' . - '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' . - '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' . - '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' . - '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' . - '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' . - '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' . - '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' . - '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' . - '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' . - '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' . - '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' . - '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' . - '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' . - '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' . - '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' . - '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' . - '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' . - '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' . - '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' . - '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' . - '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' . - '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' . - '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' . - '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' . - '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' . - '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' . - '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' . - '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' . - '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' . - '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' . - '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' . - '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' . - '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' . - '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' . - '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' . - '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' . - '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' . - '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' . - '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' . - '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' . - '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' . - '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' . - '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' . - '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' . - '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' . - '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' . - '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' . - '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' . - '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' . - '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' . - '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' . - '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' . - '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' . - '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' . - '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' . - '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' . - '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' . - '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' . - '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' . - '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' . - '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' . - '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' . - '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' . - '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' . - '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' . - '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' . - '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' . - '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' . - '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' . - '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' . - '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' . - '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' . - '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' . - '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' . - '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' . - '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' . - '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' . - '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' . - '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' . - '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' . - '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' . - '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' . - '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' . - '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' . - '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' . - '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' . - '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' . - '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' . - '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' . - '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' . - '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' . - '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' . - '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' . - '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' . - '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' . - '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' . - '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' . - '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', - 12 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' . - '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' . - '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' . - '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' . - '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' . - '\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' . - '\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' . - '\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' . - '\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' . - '\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' . - '\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' . - '\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' . - '\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' . - '\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' . - '\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' . - '\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' . - '\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' . - '\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' . - '\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' . - '\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' . - '\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' . - '\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' . - '\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' . - '\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' . - '\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' . - '\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' . - '\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' . - '\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' . - '\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' . - '\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' . - '\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' . - '\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' . - '\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' . - '\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' . - '\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' . - '\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' . - '\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' . - '\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' . - '\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' . - '\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' . - '\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' . - '\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' . - '\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' . - '\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' . - '\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' . - '\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' . - '\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' . - '\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' . - '\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' . - '\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' . - '\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' . - '\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' . - '\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' . - '\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' . - '\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' . - '\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' . - '\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' . - '\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' . - '\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' . - '\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' . - '\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' . - '\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' . - '\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' . - '\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' . - '\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' . - '\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' . - '\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' . - '\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' . - '\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' . - '\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' . - '\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' . - '\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' . - '\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' . - '\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' . - '\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' . - '\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' . - '\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' . - '\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' . - '\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' . - '\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' . - '\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' . - '\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' . - '\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' . - '\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' . - '\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' . - '\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' . - '\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' . - '\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' . - '\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' . - '\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' . - '\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' . - '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' . - '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' . - '\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' . - '\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' . - '\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' . - '\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' . - '\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' . - '\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' . - '\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' . - '\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' . - '\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' . - '\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' . - '\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' . - '\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' . - '\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' . - '\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' . - '\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' . - '\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' . - '\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' . - '\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' . - '\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' . - '\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' . - '\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' . - '\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' . - '\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' . - '\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' . - '\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' . - '\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' . - '\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' . - '\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' . - '\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' . - '\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' . - '\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' . - '\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' . - '\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' . - '\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' . - '\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' . - '\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' . - '\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' . - '\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' . - '\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' . - '\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' . - '\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' . - '\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' . - '\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' . - '\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' . - '\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' . - '\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' . - '\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' . - '\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' . - '\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' . - '\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' . - '\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' . - '\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' . - '\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' . - '\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' . - '\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' . - '\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' . - '\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' . - '\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' . - '\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' . - '\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' . - '\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' . - '\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' . - '\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' . - '\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' . - '\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' . - '\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' . - '\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' . - '\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' . - '\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' . - '\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' . - '\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' . - '\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' . - '\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' . - '\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' . - '\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' . - '\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' . - '\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' . - '\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' . - '\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' . - '\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' . - '\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' . - '\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' . - '\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' . - '\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' . - '\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' . - '\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' . - '\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' . - '\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' . - '\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' . - '\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' . - '\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' . - '\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' . - '\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' . - '\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' . - '\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' . - '\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' . - '\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' . - '\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' . - '\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' . - '\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' . - '\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' . - '\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' . - '\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' . - '\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' . - '\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' . - '\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' . - '\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' . - '\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' . - '\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' . - '\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' . - '\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' . - '\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' . - '\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' . - '\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' . - '\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' . - '\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' . - '\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' . - '\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' . - '\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' . - '\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' . - '\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' . - '\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' . - '\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' . - '\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' . - '\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' . - '\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' . - '\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' . - '\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' . - '\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' . - '\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' . - '\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' . - '\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' . - '\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' . - '\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' . - '\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' . - '\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' . - '\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' . - '\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' . - '\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' . - '\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' . - '\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' . - '\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' . - '\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' . - '\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' . - '\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' . - '\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' . - '\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' . - '\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' . - '\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' . - '\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' . - '\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' . - '\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' . - '\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' . - '\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' . - '\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' . - '\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' . - '\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' . - '\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' . - '\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' . - '\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' . - '\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' . - '\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' . - '\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' . - '\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' . - '\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' . - '\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' . - '\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' . - '\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' . - '\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' . - '\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' . - '\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' . - '\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' . - '\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' . - '\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' . - '\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' . - '\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' . - '\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' . - '\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' . - '\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' . - '\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' . - '\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' . - '\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' . - '\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' . - '\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' . - '\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' . - '\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' . - '\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' . - '\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' . - '\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' . - '\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' . - '\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' . - '\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' . - '\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' . - '\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' . - '\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' . - '\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' . - '\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' . - '\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' . - '\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' . - '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' . - '\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' . - '\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' . - '\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' . - '\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' . - '\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' . - '\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' . - '\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' . - '\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' . - '\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' . - '\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' . - '\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' . - '\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' . - '\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' . - '\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' . - '\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' . - '\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' . - '\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' . - '\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' . - '\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' . - '\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' . - '\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' . - '\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' . - '\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' . - '\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' . - '\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' . - '\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' . - '\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' . - '\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' . - '\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' . - '\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' . - '\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' . - '\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' . - '\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' . - '\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' . - '\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' . - '\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' . - '\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' . - '\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' . - '\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' . - '\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' . - '\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' . - '\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' . - '\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' . - '\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' . - '\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' . - '\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' . - '\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' . - '\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' . - '\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' . - '\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' . - '\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' . - '\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' . - '\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' . - '\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' . - '\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' . - '\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' . - '\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' . - '\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' . - '\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' . - '\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' . - '\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' . - '\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' . - '\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' . - '\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' . - '\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' . - '\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' . - '\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' . - '\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' . - '\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' . - '\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' . - '\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' . - '\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' . - '\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' . - '\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' . - '\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' . - '\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' . - '\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' . - '\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' . - '\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' . - '\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' . - '\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' . - '\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' . - '\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' . - '\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' . - '\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' . - '\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' . - '\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' . - '\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' . - '\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' . - '\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' . - '\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' . - '\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' . - '\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' . - '\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' . - '\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' . - '\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' . - '\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' . - '\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' . - '\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' . - '\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' . - '\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' . - '\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' . - '\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' . - '\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' . - '\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' . - '\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' . - '\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' . - '\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' . - '\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' . - '\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' . - '\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' . - '\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' . - '\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' . - '\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' . - '\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' . - '\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' . - '\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' . - '\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' . - '\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' . - '\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' . - '\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' . - '\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' . - '\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' . - '\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' . - '\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' . - '\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' . - '\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' . - '\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' . - '\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' . - '\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' . - '\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' . - '\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' . - '\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' . - '\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' . - '\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' . - '\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' . - '\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' . - '\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' . - '\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' . - '\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' . - '\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' . - '\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' . - '\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' . - '\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' . - '\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' . - '\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' . - '\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' . - '\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' . - '\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' . - '\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' . - '\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' . - '\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' . - '\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' . - '\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' . - '\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' . - '\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' . - '\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' . - '\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' . - '\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' . - '\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' . - '\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' . - '\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' . - '\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' . - '\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' . - '\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' . - '\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' . - '\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' . - '\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' . - '\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' . - '\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' . - '\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' . - '\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' . - '\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' . - '\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' . - '\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' . - '\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' . - '\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' . - '\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' . - '\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' . - '\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' . - '\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' . - '\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' . - '\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' . - '\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' . - '\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' . - '\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' . - '\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' . - '\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' . - '\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' . - '\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' . - '\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' . - '\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' . - '\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' . - '\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' . - '\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' . - '\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' . - '\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' . - '\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' . - '\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' . - '\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' . - '\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' . - '\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' . - '\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' . - '\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' . - '\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' . - '\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' . - '\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' . - '\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' . - '\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' . - '\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' . - '\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' . - '\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' . - '\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' . - '\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' . - '\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' . - '\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' . - '\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' . - '\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' . - '\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' . - '\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' . - '\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' . - '\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' . - '\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' . - '\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' . - '\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' . - '\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' . - '\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' . - '\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' . - '\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' . - '\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' . - '\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' . - '\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' . - '\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' . - '\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' . - '\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' . - '\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' . - '\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' . - '\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' . - '\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' . - '\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' . - '\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' . - '\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' . - '\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' . - '\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' . - '\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' . - '\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' . - '\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' . - '\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' . - '\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' . - '\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' . - '\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' . - '\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' . - '\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' . - '\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' . - '\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' . - '\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' . - '\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' . - '\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' . - '\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' . - '\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' . - '\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' . - '\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' . - '\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' . - '\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' . - '\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' . - '\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' . - '\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' . - '\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' . - '\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' . - '\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' . - '\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' . - '\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' . - '\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' . - '\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' . - '\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' . - '\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' . - '\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' . - '\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' . - '\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' . - '\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' . - '\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' . - '\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' . - '\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' . - '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' . - '\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' . - '\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' . - '\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' . - '\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' . - '\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' . - '\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' . - '\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' . - '\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' . - '\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' . - '\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' . - '\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' . - '\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' . - '\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' . - '\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' . - '\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' . - '\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' . - '\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' . - '\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' . - '\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' . - '\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' . - '\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' . - '\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' . - '\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' . - '\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' . - '\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' . - '\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' . - '\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' . - '\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' . - '\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' . - '\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' . - '\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' . - '\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' . - '\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' . - '\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' . - '\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' . - '\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' . - '\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' . - '\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' . - '\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' . - '\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' . - '\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' . - '\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' . - '\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' . - '\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' . - '\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' . - '\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' . - '\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' . - '\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' . - '\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' . - '\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' . - '\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' . - '\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' . - '\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' . - '\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' . - '\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' . - '\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' . - '\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' . - '\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' . - '\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' . - '\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' . - '\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' . - '\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' . - '\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' . - '\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' . - '\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' . - '\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' . - '\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' . - '\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' . - '\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' . - '\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' . - '\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' . - '\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' . - '\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' . - '\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' . - '\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' . - '\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' . - '\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' . - '\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' . - '\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' . - '\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' . - '\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' . - '\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' . - '\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' . - '\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' . - '\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' . - '\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' . - '\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' . - '\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' . - '\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' . - '\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' . - '\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' . - '\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' . - '\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' . - '\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' . - '\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' . - '\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' . - '\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' . - '\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' . - '\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' . - '\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' . - '\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' . - '\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' . - '\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' . - '\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' . - '\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' . - '\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' . - '\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' . - '\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' . - '\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' . - '\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' . - '\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' . - '\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' . - '\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' . - '\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' . - '\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' . - '\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' . - '\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' . - '\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' . - '\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' . - '\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' . - '\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' . - '\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' . - '\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' . - '\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' . - '\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' . - '\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' . - '\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' . - '\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' . - '\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' . - '\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' . - '\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' . - '\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' . - '\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' . - '\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' . - '\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' . - '\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' . - '\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' . - '\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' . - '\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' . - '\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' . - '\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' . - '\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' . - '\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' . - '\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' . - '\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' . - '\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' . - '\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' . - '\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' . - '\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' . - '\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' . - '\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' . - '\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' . - '\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' . - '\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' . - '\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' . - '\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' . - '\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' . - '\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' . - '\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' . - '\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' . - '\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' . - '\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' . - '\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' . - '\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' . - '\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' . - '\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' . - '\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' . - '\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' . - '\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' . - '\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' . - '\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' . - '\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' . - '\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' . - '\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' . - '\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' . - '\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' . - '\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' . - '\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' . - '\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' . - '\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' . - '\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' . - '\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' . - '\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' . - '\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' . - '\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' . - '\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' . - '\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' . - '\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' . - '\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' . - '\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' . - '\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' . - '\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' . - '\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' . - '\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' . - '\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' . - '\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' . - '\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' . - '\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' . - '\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' . - '\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' . - '\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' . - '\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' . - '\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' . - '\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' . - '\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' . - '\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' . - '\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' . - '\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' . - '\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' . - '\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' . - '\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' . - '\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' . - '\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' . - '\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' . - '\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' . - '\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' . - '\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' . - '\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' . - '\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' . - '\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' . - '\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' . - '\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' . - '\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' . - '\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' . - '\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' . - '\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' . - '\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' . - '\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' . - '\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' . - '\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' . - '\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' . - '\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' . - '\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' . - '\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' . - '\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' . - '\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' . - '\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' . - '\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' . - '\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' . - '\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' . - '\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' . - '\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' . - '\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' . - '\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' . - '\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' . - '\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' . - '\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' . - '\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' . - '\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' . - '\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' . - '\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' . - '\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' . - '\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' . - '\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' . - '\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' . - '\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' . - '\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' . - '\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' . - '\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' . - '\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' . - '\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' . - '\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' . - '\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' . - '\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' . - '\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' . - '\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' . - '\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' . - '\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' . - '\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' . - '\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' . - '\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' . - '\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' . - '\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' . - '\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' . - '\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' . - '\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' . - '\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' . - '\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' . - '\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' . - '\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' . - '\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' . - '\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' . - '\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' . - '\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' . - '\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' . - '\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' . - '\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' . - '\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' . - '\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' . - '\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' . - '\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' . - '\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' . - '\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' . - '\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' . - '\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' . - '\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' . - '\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' . - '\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' . - '\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' . - '\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' . - '\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' . - '\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' . - '\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' . - '\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' . - '\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' . - '\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' . - '\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' . - '\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' . - '\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' . - '\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' . - '\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' . - '\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' . - '\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' . - '\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' . - '\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' . - '\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' . - '\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' . - '\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' . - '\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' . - '\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' . - '\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' . - '\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' . - '\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' . - '\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' . - '\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' . - '\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' . - '\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' . - '\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' . - '\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' . - '\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' . - '\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' . - '\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' . - '\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' . - '\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' . - '\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' . - '\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' . - '\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' . - '\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' . - '\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' . - '\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' . - '\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' . - '\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' . - '\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' . - '\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' . - '\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' . - '\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' . - '\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' . - '\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' . - '\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' . - '\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' . - '\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' . - '\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' . - '\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' . - '\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' . - '\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' . - '\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' . - '\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' . - '\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' . - '\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' . - '\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' . - '\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' . - '\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' . - '\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' . - '\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' . - '\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' . - '\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' . - '\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' . - '\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' . - '\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' . - '\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' . - '\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' . - '\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' . - '\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' . - '\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' . - '\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' . - '\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' . - '\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' . - '\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' . - '\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' . - '\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' . - '\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' . - '\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' . - '\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' . - '\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' . - '\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' . - '\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' . - '\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' . - '\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' . - '\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' . - '\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' . - '\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' . - '\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' . - '\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' . - '\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' . - '\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' . - '\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' . - '\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' . - '\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' . - '\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' . - '\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' . - '\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' . - '\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' . - '\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' . - '\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' . - '\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' . - '\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' . - '\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' . - '\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' . - '\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' . - '\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' . - '\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' . - '\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' . - '\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' . - '\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' . - '\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' . - '\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' . - '\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' . - '\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' . - '\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' . - '\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' . - '\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' . - '\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' . - '\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' . - '\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' . - '\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' . - '\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' . - '\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' . - '\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' . - '\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' . - '\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' . - '\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' . - '\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' . - '\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' . - '\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' . - '\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' . - '\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' . - '\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' . - '\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' . - '\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' . - '\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' . - '\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' . - '\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' . - '\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' . - '\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' . - '\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' . - '\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' . - '\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' . - '\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' . - '\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' . - '\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' . - '\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' . - '\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' . - '\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' . - '\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' . - '\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' . - '\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' . - '\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' . - '\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' . - '\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' . - '\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' . - '\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' . - '\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' . - '\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' . - '\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' . - '\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' . - '\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' . - '\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' . - '\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' . - '\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' . - '\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' . - '\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' . - '\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' . - '\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' . - '\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' . - '\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' . - '\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' . - '\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' . - '\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' . - '\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' . - '\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' . - '\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' . - '\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' . - '\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' . - '\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' . - '\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' . - '\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' . - '\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' . - '\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' . - '\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' . - '\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' . - '\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' . - '\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' . - '\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' . - '\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' . - '\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' . - '\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' . - '\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' . - '\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' . - '\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' . - '\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' . - '\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' . - '\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' . - '\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' . - '\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' . - '\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' . - '\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' . - '\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' . - '\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' . - '\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' . - '\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' . - '\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' . - '\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' . - '\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' . - '\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' . - '\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' . - '\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' . - '\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' . - '\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' . - '\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' . - '\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' . - '\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' . - '\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' . - '\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' . - '\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' . - '\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' . - '\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' . - '\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' . - '\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' . - '\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' . - '\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' . - '\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' . - '\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' . - '\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' . - '\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' . - '\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' . - '\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' . - '\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' . - '\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' . - '\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' . - '\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' . - '\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' . - '\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' . - '\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' . - '\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' . - '\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' . - '\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' . - '\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' . - '\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' . - '\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' . - '\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' . - '\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' . - '\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' . - '\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' . - '\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' . - '\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' . - '\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' . - '\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' . - '\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' . - '\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' . - '\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' . - '\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' . - '\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' . - '\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' . - '\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' . - '\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' . - '\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' . - '\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' . - '\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' . - '\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' . - '\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' . - '\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' . - '\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' . - '\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' . - '\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' . - '\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' . - '\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' . - '\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' . - '\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' . - '\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' . - '\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' . - '\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' . - '\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' . - '\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' . - '\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' . - '\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' . - '\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' . - '\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' . - '\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' . - '\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' . - '\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' . - '\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' . - '\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' . - '\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' . - '\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' . - '\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' . - '\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' . - '\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' . - '\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' . - '\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' . - '\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' . - '\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' . - '\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' . - '\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' . - '\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' . - '\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' . - '\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' . - '\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' . - '\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' . - '\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' . - '\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' . - '\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' . - '\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' . - '\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' . - '\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' . - '\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' . - '\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' . - '\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' . - '\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' . - '\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' . - '\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' . - '\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' . - '\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' . - '\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' . - '\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' . - '\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' . - '\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' . - '\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' . - '\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' . - '\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' . - '\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' . - '\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' . - '\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' . - '\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' . - '\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' . - '\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' . - '\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' . - '\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' . - '\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' . - '\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' . - '\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' . - '\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' . - '\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' . - '\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' . - '\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' . - '\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' . - '\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' . - '\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' . - '\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' . - '\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' . - '\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' . - '\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' . - '\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' . - '\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' . - '\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' . - '\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' . - '\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' . - '\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' . - '\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' . - '\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' . - '\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' . - '\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' . - '\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' . - '\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' . - '\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' . - '\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' . - '\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' . - '\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' . - '\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' . - '\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' . - '\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' . - '\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' . - '\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' . - '\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' . - '\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' . - '\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' . - '\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' . - '\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' . - '\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' . - '\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' . - '\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' . - '\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' . - '\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' . - '\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' . - '\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' . - '\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' . - '\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' . - '\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' . - '\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' . - '\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' . - '\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' . - '\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' . - '\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' . - '\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' . - '\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' . - '\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' . - '\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' . - '\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' . - '\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' . - '\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' . - '\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' . - '\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' . - '\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' . - '\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' . - '\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' . - '\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' . - '\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' . - '\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' . - '\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' . - '\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' . - '\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' . - '\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' . - '\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' . - '\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' . - '\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' . - '\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' . - '\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' . - '\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' . - '\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' . - '\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' . - '\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' . - '\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' . - '\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' . - '\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' . - '\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' . - '\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' . - '\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' . - '\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' . - '\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' . - '\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' . - '\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' . - '\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' . - '\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' . - '\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' . - '\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' . - '\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' . - '\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' . - '\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' . - '\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' . - '\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' . - '\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' . - '\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' . - '\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' . - '\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' . - '\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' . - '\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' . - '\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' . - '\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' . - '\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' . - '\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' . - '\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' . - '\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' . - '\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' . - '\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' . - '\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' . - '\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' . - '\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' . - '\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' . - '\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' . - '\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' . - '\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' . - '\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' . - '\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' . - '\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' . - '\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' . - '\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' . - '\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' . - '\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' . - '\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' . - '\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' . - '\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' . - '\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' . - '\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' . - '\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' . - '\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' . - '\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' . - '\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' . - '\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' . - '\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' . - '\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' . - '\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' . - '\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' . - '\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' . - '\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' . - '\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' . - '\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' . - '\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' . - '\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' . - '\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' . - '\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' . - '\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' . - '\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' . - '\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' . - '\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' . - '\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' . - '\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' . - '\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' . - '\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' . - '\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' . - '\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' . - '\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' . - '\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' . - '\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' . - '\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' . - '\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' . - '\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' . - '\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' . - '\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' . - '\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' . - '\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' . - '\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' . - '\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' . - '\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' . - '\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' . - '\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' . - '\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' . - '\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' . - '\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' . - '\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' . - '\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' . - '\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' . - '\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' . - '\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' . - '\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' . - '\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' . - '\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' . - '\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' . - '\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' . - '\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' . - '\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' . - '\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' . - '\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' . - '\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' . - '\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' . - '\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' . - '\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' . - '\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' . - '\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' . - '\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' . - '\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' . - '\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' . - '\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' . - '\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' . - '\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' . - '\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' . - '\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' . - '\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' . - '\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' . - '\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' . - '\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' . - '\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' . - '\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' . - '\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' . - '\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' . - '\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' . - '\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' . - '\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' . - '\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' . - '\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' . - '\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' . - '\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' . - '\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' . - '\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' . - '\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' . - '\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' . - '\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' . - '\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' . - '\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' . - '\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' . - '\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' . - '\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' . - '\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' . - '\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' . - '\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' . - '\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' . - '\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' . - '\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' . - '\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' . - '\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' . - '\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' . - '\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' . - '\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' . - '\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' . - '\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' . - '\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' . - '\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' . - '\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' . - '\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' . - '\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' . - '\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' . - '\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' . - '\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' . - '\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' . - '\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' . - '\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' . - '\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' . - '\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' . - '\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' . - '\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' . - '\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' . - '\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' . - '\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' . - '\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' . - '\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' . - '\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' . - '\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' . - '\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' . - '\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' . - '\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' . - '\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' . - '\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' . - '\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' . - '\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' . - '\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' . - '\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' . - '\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' . - '\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' . - '\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' . - '\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' . - '\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' . - '\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' . - '\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' . - '\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' . - '\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' . - '\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' . - '\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' . - '\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' . - '\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' . - '\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' . - '\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' . - '\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' . - '\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' . - '\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' . - '\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' . - '\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' . - '\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' . - '\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' . - '\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' . - '\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' . - '\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' . - '\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' . - '\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' . - '\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' . - '\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' . - '\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' . - '\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' . - '\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' . - '\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' . - '\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' . - '\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' . - '\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' . - '\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' . - '\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' . - '\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' . - '\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' . - '\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' . - '\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' . - '\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' . - '\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' . - '\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' . - '\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' . - '\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' . - '\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' . - '\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' . - '\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' . - '\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' . - '\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' . - '\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' . - '\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' . - '\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' . - '\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' . - '\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' . - '\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' . - '\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' . - '\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' . - '\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' . - '\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' . - '\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' . - '\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' . - '\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' . - '\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' . - '\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' . - '\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' . - '\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' . - '\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' . - '\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' . - '\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' . - '\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' . - '\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' . - '\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' . - '\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' . - '\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' . - '\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' . - '\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' . - '\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' . - '\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' . - '\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' . - '\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' . - '\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' . - '\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' . - '\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' . - '\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' . - '\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' . - '\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' . - '\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' . - '\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' . - '\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' . - '\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' . - '\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' . - '\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' . - '\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' . - '\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' . - '\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' . - '\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' . - '\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' . - '\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' . - '\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' . - '\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' . - '\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' . - '\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' . - '\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' . - '\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' . - '\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' . - '\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' . - '\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' . - '\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' . - '\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' . - '\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' . - '\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' . - '\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' . - '\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' . - '\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' . - '\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' . - '\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' . - '\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' . - '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' . - '\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' . - '\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' . - '\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' . - '\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' . - '\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' . - '\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' . - '\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' . - '\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' . - '\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' . - '\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' . - '\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' . - '\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' . - '\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' . - '\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' . - '\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' . - '\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' . - '\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' . - '\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' . - '\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' . - '\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' . - '\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' . - '\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' . - '\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' . - '\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' . - '\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' . - '\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' . - '\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' . - '\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' . - '\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' . - '\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' . - '\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' . - '\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' . - '\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' . - '\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' . - '\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' . - '\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' . - '\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' . - '\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' . - '\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' . - '\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' . - '\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' . - '\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' . - '\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' . - '\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' . - '\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' . - '\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' . - '\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' . - '\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' . - '\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' . - '\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' . - '\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' . - '\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' . - '\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' . - '\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' . - '\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' . - '\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' . - '\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' . - '\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' . - '\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' . - '\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' . - '\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' . - '\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' . - '\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' . - '\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' . - '\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' . - '\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' . - '\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' . - '\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' . - '\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' . - '\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' . - '\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' . - '\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' . - '\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' . - '\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' . - '\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' . - '\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' . - '\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' . - '\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' . - '\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' . - '\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' . - '\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' . - '\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' . - '\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' . - '\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' . - '\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' . - '\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' . - '\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' . - '\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' . - '\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' . - '\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' . - '\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' . - '\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' . - '\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' . - '\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' . - '\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' . - '\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' . - '\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' . - '\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' . - '\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' . - '\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' . - '\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' . - '\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' . - '\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' . - '\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' . - '\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' . - '\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' . - '\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' . - '\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' . - '\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' . - '\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' . - '\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' . - '\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' . - '\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' . - '\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' . - '\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' . - '\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' . - '\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' . - '\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' . - '\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' . - '\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' . - '\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' . - '\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' . - '\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' . - '\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' . - '\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' . - '\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' . - '\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' . - '\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' . - '\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' . - '\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' . - '\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' . - '\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' . - '\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' . - '\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' . - '\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' . - '\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' . - '\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' . - '\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' . - '\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' . - '\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' . - '\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' . - '\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' . - '\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' . - '\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' . - '\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' . - '\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' . - '\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' . - '\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' . - '\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' . - '\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' . - '\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' . - '\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' . - '\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' . - '\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' . - '\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' . - '\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' . - '\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' . - '\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' . - '\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' . - '\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' . - '\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' . - '\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' . - '\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' . - '\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' . - '\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' . - '\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' . - '\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' . - '\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' . - '\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' . - '\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' . - '\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' . - '\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' . - '\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' . - '\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' . - '\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' . - '\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' . - '\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' . - '\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' . - '\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' . - '\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' . - '\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' . - '\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' . - '\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' . - '\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' . - '\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' . - '\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' . - '\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' . - '\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' . - '\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' . - '\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' . - '\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' . - '\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' . - '\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' . - '\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' . - '\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' . - '\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' . - '\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' . - '\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' . - '\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' . - '\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' . - '\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' . - '\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' . - '\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' . - '\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' . - '\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' . - '\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' . - '\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' . - '\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' . - '\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' . - '\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' . - '\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' . - '\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' . - '\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' . - '\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' . - '\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' . - '\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' . - '\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' . - '\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' . - '\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' . - '\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' . - '\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' . - '\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' . - '\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' . - '\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' . - '\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' . - '\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' . - '\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' . - '\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' . - '\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' . - '\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' . - '\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' . - '\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' . - '\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' . - '\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' . - '\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' . - '\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' . - '\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' . - '\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' . - '\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' . - '\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' . - '\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' . - '\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' . - '\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' . - '\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' . - '\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' . - '\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' . - '\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' . - '\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' . - '\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' . - '\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' . - '\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' . - '\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' . - '\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' . - '\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' . - '\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' . - '\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' . - '\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' . - '\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' . - '\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' . - '\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' . - '\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' . - '\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' . - '\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' . - '\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' . - '\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' . - '\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' . - '\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' . - '\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' . - '\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' . - '\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' . - '\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' . - '\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' . - '\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' . - '\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' . - '\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' . - '\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' . - '\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' . - '\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' . - '\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' . - '\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' . - '\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' . - '\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' . - '\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' . - '\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' . - '\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' . - '\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' . - '\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' . - '\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' . - '\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' . - '\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' . - '\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' . - '\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' . - '\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' . - '\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' . - '\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' . - '\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' . - '\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' . - '\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' . - '\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' . - '\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' . - '\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' . - '\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' . - '\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' . - '\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' . - '\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' . - '\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' . - '\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' . - '\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' . - '\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' . - '\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' . - '\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' . - '\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' . - '\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' . - '\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' . - '\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' . - '\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' . - '\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' . - '\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' . - '\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' . - '\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' . - '\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' . - '\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' . - '\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' . - '\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' . - '\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' . - '\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' . - '\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' . - '\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' . - '\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' . - '\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' . - '\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' . - '\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' . - '\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' . - '\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' . - '\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' . - '\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' . - '\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' . - '\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' . - '\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' . - '\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' . - '\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' . - '\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' . - '\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' . - '\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' . - '\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' . - '\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' . - '\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' . - '\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' . - '\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' . - '\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' . - '\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' . - '\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' . - '\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' . - '\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' . - '\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' . - '\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' . - '\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' . - '\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' . - '\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' . - '\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' . - '\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' . - '\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' . - '\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' . - '\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' . - '\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' . - '\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' . - '\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' . - '\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' . - '\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' . - '\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' . - '\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' . - '\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' . - '\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' . - '\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' . - '\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' . - '\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' . - '\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' . - '\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' . - '\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' . - '\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' . - '\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' . - '\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' . - '\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' . - '\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' . - '\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' . - '\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' . - '\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' . - '\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' . - '\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' . - '\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' . - '\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' . - '\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' . - '\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' . - '\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' . - '\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' . - '\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' . - '\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' . - '\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' . - '\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' . - '\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' . - '\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' . - '\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' . - '\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' . - '\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' . - '\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' . - '\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' . - '\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' . - '\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' . - '\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' . - '\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' . - '\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' . - '\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' . - '\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' . - '\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' . - '\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' . - '\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' . - '\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' . - '\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' . - '\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' . - '\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' . - '\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' . - '\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' . - '\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' . - '\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' . - '\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' . - '\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' . - '\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' . - '\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' . - '\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' . - '\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' . - '\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' . - '\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' . - '\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' . - '\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' . - '\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' . - '\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' . - '\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' . - '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' . - '\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' . - '\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' . - '\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' . - '\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' . - '\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' . - '\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' . - '\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' . - '\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' . - '\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' . - '\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' . - '\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' . - '\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' . - '\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' . - '\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' . - '\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' . - '\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' . - '\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' . - '\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' . - '\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' . - '\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' . - '\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' . - '\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' . - '\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' . - '\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' . - '\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' . - '\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' . - '\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' . - '\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' . - '\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' . - '\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' . - '\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' . - '\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' . - '\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' . - '\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' . - '\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' . - '\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' . - '\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' . - '\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' . - '\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' . - '\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' . - '\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' . - '\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' . - '\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' . - '\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' . - '\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' . - '\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' . - '\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' . - '\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' . - '\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' . - '\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' . - '\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' . - '\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' . - '\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' . - '\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' . - '\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' . - '\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' . - '\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' . - '\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' . - '\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' . - '\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' . - '\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' . - '\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' . - '\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' . - '\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' . - '\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' . - '\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' . - '\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' . - '\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' . - '\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' . - '\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' . - '\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' . - '\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' . - '\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' . - '\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' . - '\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' . - '\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' . - '\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' . - '\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' . - '\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' . - '\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' . - '\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' . - '\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' . - '\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' . - '\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' . - '\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' . - '\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' . - '\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' . - '\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' . - '\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' . - '\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' . - '\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' . - '\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' . - '\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' . - '\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' . - '\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' . - '\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' . - '\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' . - '\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' . - '\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' . - '\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' . - '\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' . - '\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' . - '\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' . - '\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' . - '\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' . - '\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' . - '\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' . - '\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' . - '\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' . - '\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' . - '\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' . - '\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' . - '\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' . - '\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' . - '\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' . - '\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' . - '\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' . - '\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' . - '\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', -); diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php deleted file mode 100644 index 64f6af61aa..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php +++ /dev/null @@ -1,2185 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Hostname; - -/** - * Resource file for chinese idn validation - */ -return array( - 1 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' . - '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' . - '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' . - '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' . - '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' . - '\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' . - '\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' . - '\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' . - '\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' . - '\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' . - '\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' . - '\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' . - '\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' . - '\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' . - '\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' . - '\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' . - '\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' . - '\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' . - '\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' . - '\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' . - '\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' . - '\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' . - '\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' . - '\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' . - '\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' . - '\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' . - '\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' . - '\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' . - '\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' . - '\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' . - '\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' . - '\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' . - '\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' . - '\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' . - '\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' . - '\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' . - '\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' . - '\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' . - '\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' . - '\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' . - '\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' . - '\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' . - '\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' . - '\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' . - '\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' . - '\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' . - '\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' . - '\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' . - '\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' . - '\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' . - '\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' . - '\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' . - '\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' . - '\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' . - '\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' . - '\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' . - '\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' . - '\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' . - '\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' . - '\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' . - '\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' . - '\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' . - '\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' . - '\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' . - '\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' . - '\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' . - '\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' . - '\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' . - '\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' . - '\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' . - '\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' . - '\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' . - '\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' . - '\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' . - '\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' . - '\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' . - '\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' . - '\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' . - '\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' . - '\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' . - '\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' . - '\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' . - '\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' . - '\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' . - '\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' . - '\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' . - '\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' . - '\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' . - '\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' . - '\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' . - '\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' . - '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' . - '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' . - '\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' . - '\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' . - '\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' . - '\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' . - '\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' . - '\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' . - '\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' . - '\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' . - '\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' . - '\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' . - '\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' . - '\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' . - '\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' . - '\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' . - '\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' . - '\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' . - '\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' . - '\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' . - '\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' . - '\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' . - '\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' . - '\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' . - '\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' . - '\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' . - '\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' . - '\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' . - '\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' . - '\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' . - '\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' . - '\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' . - '\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' . - '\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' . - '\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' . - '\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' . - '\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' . - '\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' . - '\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' . - '\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' . - '\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' . - '\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' . - '\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' . - '\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' . - '\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' . - '\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' . - '\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' . - '\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' . - '\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' . - '\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' . - '\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' . - '\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' . - '\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' . - '\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' . - '\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' . - '\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' . - '\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' . - '\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' . - '\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' . - '\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' . - '\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' . - '\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' . - '\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' . - '\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' . - '\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' . - '\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' . - '\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' . - '\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' . - '\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' . - '\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' . - '\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' . - '\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' . - '\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' . - '\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' . - '\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' . - '\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' . - '\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' . - '\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' . - '\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' . - '\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' . - '\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' . - '\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' . - '\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' . - '\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' . - '\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' . - '\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' . - '\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' . - '\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' . - '\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' . - '\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' . - '\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' . - '\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' . - '\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' . - '\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' . - '\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' . - '\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' . - '\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' . - '\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' . - '\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' . - '\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' . - '\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' . - '\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' . - '\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' . - '\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' . - '\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' . - '\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' . - '\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' . - '\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' . - '\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' . - '\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' . - '\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' . - '\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' . - '\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' . - '\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' . - '\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' . - '\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' . - '\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' . - '\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' . - '\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' . - '\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' . - '\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' . - '\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' . - '\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' . - '\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' . - '\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' . - '\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' . - '\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' . - '\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' . - '\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' . - '\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' . - '\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' . - '\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' . - '\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' . - '\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' . - '\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' . - '\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' . - '\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' . - '\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' . - '\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' . - '\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' . - '\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' . - '\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' . - '\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' . - '\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' . - '\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' . - '\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' . - '\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' . - '\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' . - '\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' . - '\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' . - '\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' . - '\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' . - '\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' . - '\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' . - '\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' . - '\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' . - '\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' . - '\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' . - '\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' . - '\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' . - '\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' . - '\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' . - '\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' . - '\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' . - '\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' . - '\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' . - '\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' . - '\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' . - '\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' . - '\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' . - '\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' . - '\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' . - '\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' . - '\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' . - '\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' . - '\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' . - '\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' . - '\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' . - '\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' . - '\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' . - '\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' . - '\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' . - '\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' . - '\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' . - '\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' . - '\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' . - '\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' . - '\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' . - '\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' . - '\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' . - '\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' . - '\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' . - '\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' . - '\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' . - '\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' . - '\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' . - '\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' . - '\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' . - '\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' . - '\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' . - '\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' . - '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' . - '\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' . - '\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' . - '\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' . - '\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' . - '\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' . - '\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' . - '\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' . - '\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' . - '\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' . - '\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' . - '\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' . - '\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' . - '\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' . - '\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' . - '\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' . - '\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' . - '\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' . - '\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' . - '\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' . - '\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' . - '\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' . - '\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' . - '\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' . - '\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' . - '\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' . - '\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' . - '\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' . - '\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' . - '\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' . - '\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' . - '\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' . - '\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' . - '\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' . - '\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' . - '\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' . - '\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' . - '\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' . - '\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' . - '\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' . - '\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' . - '\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' . - '\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' . - '\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' . - '\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' . - '\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' . - '\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' . - '\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' . - '\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' . - '\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' . - '\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' . - '\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' . - '\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' . - '\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' . - '\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' . - '\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' . - '\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' . - '\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' . - '\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' . - '\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' . - '\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' . - '\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' . - '\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' . - '\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' . - '\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' . - '\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' . - '\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' . - '\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' . - '\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' . - '\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' . - '\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' . - '\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' . - '\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' . - '\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' . - '\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' . - '\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' . - '\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' . - '\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' . - '\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' . - '\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' . - '\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' . - '\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' . - '\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' . - '\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' . - '\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' . - '\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' . - '\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' . - '\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' . - '\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' . - '\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' . - '\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' . - '\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' . - '\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' . - '\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' . - '\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' . - '\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' . - '\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' . - '\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' . - '\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' . - '\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' . - '\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' . - '\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' . - '\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' . - '\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' . - '\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' . - '\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' . - '\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' . - '\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' . - '\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' . - '\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' . - '\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' . - '\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' . - '\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' . - '\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' . - '\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' . - '\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' . - '\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' . - '\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' . - '\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' . - '\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' . - '\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' . - '\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' . - '\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' . - '\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' . - '\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' . - '\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' . - '\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' . - '\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' . - '\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' . - '\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' . - '\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' . - '\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' . - '\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' . - '\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' . - '\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' . - '\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' . - '\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' . - '\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' . - '\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' . - '\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' . - '\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' . - '\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' . - '\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' . - '\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' . - '\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' . - '\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' . - '\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' . - '\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' . - '\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' . - '\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' . - '\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' . - '\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' . - '\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' . - '\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' . - '\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' . - '\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' . - '\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' . - '\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' . - '\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' . - '\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' . - '\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' . - '\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' . - '\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' . - '\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' . - '\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' . - '\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' . - '\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' . - '\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' . - '\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' . - '\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' . - '\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' . - '\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' . - '\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' . - '\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' . - '\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' . - '\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' . - '\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' . - '\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' . - '\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' . - '\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' . - '\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' . - '\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' . - '\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' . - '\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' . - '\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' . - '\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' . - '\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' . - '\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' . - '\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' . - '\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' . - '\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' . - '\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' . - '\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' . - '\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' . - '\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' . - '\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' . - '\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' . - '\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' . - '\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' . - '\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' . - '\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' . - '\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' . - '\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' . - '\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' . - '\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' . - '\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' . - '\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' . - '\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' . - '\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' . - '\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' . - '\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' . - '\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' . - '\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' . - '\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' . - '\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' . - '\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' . - '\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' . - '\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' . - '\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' . - '\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' . - '\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' . - '\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' . - '\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' . - '\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' . - '\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' . - '\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' . - '\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' . - '\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' . - '\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' . - '\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' . - '\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' . - '\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' . - '\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' . - '\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' . - '\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' . - '\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' . - '\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' . - '\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' . - '\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' . - '\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' . - '\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' . - '\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' . - '\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' . - '\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' . - '\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' . - '\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' . - '\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' . - '\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' . - '\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' . - '\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' . - '\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' . - '\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' . - '\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' . - '\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' . - '\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' . - '\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' . - '\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' . - '\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' . - '\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' . - '\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' . - '\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' . - '\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' . - '\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' . - '\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' . - '\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' . - '\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' . - '\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' . - '\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' . - '\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' . - '\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' . - '\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' . - '\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' . - '\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' . - '\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' . - '\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' . - '\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' . - '\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' . - '\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' . - '\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' . - '\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' . - '\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' . - '\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' . - '\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' . - '\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' . - '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' . - '\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' . - '\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' . - '\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' . - '\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' . - '\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' . - '\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' . - '\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' . - '\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' . - '\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' . - '\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' . - '\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' . - '\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' . - '\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' . - '\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' . - '\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' . - '\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' . - '\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' . - '\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' . - '\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' . - '\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' . - '\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' . - '\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' . - '\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' . - '\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' . - '\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' . - '\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' . - '\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' . - '\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' . - '\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' . - '\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' . - '\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' . - '\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' . - '\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' . - '\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' . - '\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' . - '\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' . - '\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' . - '\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' . - '\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' . - '\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' . - '\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' . - '\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' . - '\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' . - '\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' . - '\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' . - '\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' . - '\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' . - '\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' . - '\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' . - '\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' . - '\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' . - '\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' . - '\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' . - '\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' . - '\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' . - '\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' . - '\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' . - '\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' . - '\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' . - '\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' . - '\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' . - '\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' . - '\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' . - '\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' . - '\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' . - '\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' . - '\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' . - '\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' . - '\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' . - '\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' . - '\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' . - '\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' . - '\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' . - '\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' . - '\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' . - '\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' . - '\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' . - '\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' . - '\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' . - '\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' . - '\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' . - '\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' . - '\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' . - '\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' . - '\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' . - '\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' . - '\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' . - '\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' . - '\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' . - '\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' . - '\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' . - '\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' . - '\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' . - '\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' . - '\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' . - '\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' . - '\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' . - '\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' . - '\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' . - '\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' . - '\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' . - '\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' . - '\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' . - '\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' . - '\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' . - '\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' . - '\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' . - '\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' . - '\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' . - '\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' . - '\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' . - '\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' . - '\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' . - '\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' . - '\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' . - '\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' . - '\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' . - '\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' . - '\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' . - '\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' . - '\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' . - '\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' . - '\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' . - '\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' . - '\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' . - '\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' . - '\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' . - '\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' . - '\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' . - '\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' . - '\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' . - '\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' . - '\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' . - '\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' . - '\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' . - '\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' . - '\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' . - '\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' . - '\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' . - '\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' . - '\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' . - '\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' . - '\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' . - '\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' . - '\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' . - '\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' . - '\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' . - '\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' . - '\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' . - '\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' . - '\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' . - '\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' . - '\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' . - '\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' . - '\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' . - '\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' . - '\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' . - '\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' . - '\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' . - '\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' . - '\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' . - '\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' . - '\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' . - '\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' . - '\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' . - '\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' . - '\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' . - '\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' . - '\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' . - '\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' . - '\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' . - '\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' . - '\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' . - '\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' . - '\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' . - '\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' . - '\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' . - '\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' . - '\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' . - '\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' . - '\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' . - '\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' . - '\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' . - '\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' . - '\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' . - '\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' . - '\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' . - '\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' . - '\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' . - '\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' . - '\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' . - '\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' . - '\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' . - '\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' . - '\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' . - '\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' . - '\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' . - '\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' . - '\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' . - '\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' . - '\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' . - '\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' . - '\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' . - '\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' . - '\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' . - '\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' . - '\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' . - '\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' . - '\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' . - '\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' . - '\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' . - '\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' . - '\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' . - '\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' . - '\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' . - '\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' . - '\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' . - '\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' . - '\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' . - '\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' . - '\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' . - '\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' . - '\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' . - '\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' . - '\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' . - '\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' . - '\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' . - '\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' . - '\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' . - '\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' . - '\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' . - '\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' . - '\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' . - '\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' . - '\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' . - '\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' . - '\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' . - '\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' . - '\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' . - '\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' . - '\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' . - '\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' . - '\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' . - '\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' . - '\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' . - '\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' . - '\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' . - '\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' . - '\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' . - '\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' . - '\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' . - '\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' . - '\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' . - '\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' . - '\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' . - '\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' . - '\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' . - '\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' . - '\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' . - '\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' . - '\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' . - '\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' . - '\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' . - '\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' . - '\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' . - '\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' . - '\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' . - '\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' . - '\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' . - '\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' . - '\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' . - '\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' . - '\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' . - '\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' . - '\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' . - '\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' . - '\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' . - '\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' . - '\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' . - '\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' . - '\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' . - '\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' . - '\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' . - '\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' . - '\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' . - '\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' . - '\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' . - '\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' . - '\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' . - '\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' . - '\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' . - '\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' . - '\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' . - '\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' . - '\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' . - '\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' . - '\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' . - '\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' . - '\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' . - '\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' . - '\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' . - '\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' . - '\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' . - '\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' . - '\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' . - '\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' . - '\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' . - '\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' . - '\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' . - '\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' . - '\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' . - '\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' . - '\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' . - '\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' . - '\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' . - '\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' . - '\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' . - '\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' . - '\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' . - '\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' . - '\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' . - '\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' . - '\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' . - '\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' . - '\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' . - '\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' . - '\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' . - '\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' . - '\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' . - '\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' . - '\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' . - '\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' . - '\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' . - '\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' . - '\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' . - '\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' . - '\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' . - '\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' . - '\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' . - '\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' . - '\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' . - '\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' . - '\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' . - '\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' . - '\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' . - '\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' . - '\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' . - '\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' . - '\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' . - '\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' . - '\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' . - '\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' . - '\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' . - '\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' . - '\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' . - '\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' . - '\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' . - '\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' . - '\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' . - '\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' . - '\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' . - '\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' . - '\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' . - '\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' . - '\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' . - '\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' . - '\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' . - '\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' . - '\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' . - '\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' . - '\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' . - '\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' . - '\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' . - '\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' . - '\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' . - '\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' . - '\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' . - '\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' . - '\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' . - '\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' . - '\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' . - '\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' . - '\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' . - '\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' . - '\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' . - '\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' . - '\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' . - '\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' . - '\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' . - '\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' . - '\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' . - '\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' . - '\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' . - '\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' . - '\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' . - '\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' . - '\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' . - '\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' . - '\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' . - '\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' . - '\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' . - '\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' . - '\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' . - '\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' . - '\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' . - '\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' . - '\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' . - '\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' . - '\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' . - '\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' . - '\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' . - '\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' . - '\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' . - '\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' . - '\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' . - '\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' . - '\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' . - '\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' . - '\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' . - '\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' . - '\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' . - '\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' . - '\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' . - '\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' . - '\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' . - '\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' . - '\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' . - '\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' . - '\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' . - '\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' . - '\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' . - '\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' . - '\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' . - '\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' . - '\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' . - '\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' . - '\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' . - '\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' . - '\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' . - '\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' . - '\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' . - '\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' . - '\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' . - '\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' . - '\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' . - '\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' . - '\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' . - '\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' . - '\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' . - '\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' . - '\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' . - '\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' . - '\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' . - '\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' . - '\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' . - '\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' . - '\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' . - '\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' . - '\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' . - '\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' . - '\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' . - '\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' . - '\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' . - '\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' . - '\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' . - '\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' . - '\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' . - '\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' . - '\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' . - '\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' . - '\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' . - '\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' . - '\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' . - '\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' . - '\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' . - '\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' . - '\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' . - '\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' . - '\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' . - '\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' . - '\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' . - '\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' . - '\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' . - '\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' . - '\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' . - '\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' . - '\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' . - '\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' . - '\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' . - '\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' . - '\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' . - '\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' . - '\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' . - '\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' . - '\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' . - '\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' . - '\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' . - '\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' . - '\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' . - '\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' . - '\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' . - '\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' . - '\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' . - '\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' . - '\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' . - '\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' . - '\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' . - '\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' . - '\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' . - '\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' . - '\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' . - '\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' . - '\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' . - '\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' . - '\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' . - '\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' . - '\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' . - '\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' . - '\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' . - '\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' . - '\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' . - '\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' . - '\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' . - '\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' . - '\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' . - '\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' . - '\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' . - '\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' . - '\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' . - '\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' . - '\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' . - '\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' . - '\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' . - '\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' . - '\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' . - '\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' . - '\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' . - '\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' . - '\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' . - '\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' . - '\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' . - '\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' . - '\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' . - '\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' . - '\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' . - '\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' . - '\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' . - '\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' . - '\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' . - '\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' . - '\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' . - '\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' . - '\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' . - '\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' . - '\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' . - '\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' . - '\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' . - '\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' . - '\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' . - '\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' . - '\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' . - '\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' . - '\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' . - '\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' . - '\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' . - '\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' . - '\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' . - '\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' . - '\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' . - '\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' . - '\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' . - '\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' . - '\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' . - '\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' . - '\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' . - '\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' . - '\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' . - '\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' . - '\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' . - '\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' . - '\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' . - '\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' . - '\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' . - '\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' . - '\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' . - '\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' . - '\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' . - '\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' . - '\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' . - '\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' . - '\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' . - '\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' . - '\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' . - '\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' . - '\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' . - '\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' . - '\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' . - '\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' . - '\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' . - '\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' . - '\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' . - '\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' . - '\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' . - '\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' . - '\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' . - '\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' . - '\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' . - '\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' . - '\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' . - '\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' . - '\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' . - '\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' . - '\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' . - '\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' . - '\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' . - '\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' . - '\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' . - '\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' . - '\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' . - '\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' . - '\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' . - '\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' . - '\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' . - '\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' . - '\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' . - '\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' . - '\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' . - '\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' . - '\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' . - '\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' . - '\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' . - '\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' . - '\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' . - '\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' . - '\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' . - '\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' . - '\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' . - '\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' . - '\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' . - '\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' . - '\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' . - '\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' . - '\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' . - '\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' . - '\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' . - '\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' . - '\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' . - '\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' . - '\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' . - '\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' . - '\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' . - '\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' . - '\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' . - '\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' . - '\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' . - '\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' . - '\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' . - '\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' . - '\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' . - '\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' . - '\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' . - '\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' . - '\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' . - '\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' . - '\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' . - '\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' . - '\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' . - '\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' . - '\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' . - '\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' . - '\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' . - '\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' . - '\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' . - '\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' . - '\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' . - '\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' . - '\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' . - '\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' . - '\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' . - '\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' . - '\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' . - '\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' . - '\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' . - '\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' . - '\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' . - '\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' . - '\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' . - '\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' . - '\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' . - '\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' . - '\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' . - '\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' . - '\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' . - '\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' . - '\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' . - '\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' . - '\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' . - '\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' . - '\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' . - '\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' . - '\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' . - '\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' . - '\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' . - '\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' . - '\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' . - '\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' . - '\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' . - '\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' . - '\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' . - '\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' . - '\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' . - '\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' . - '\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' . - '\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' . - '\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' . - '\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' . - '\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' . - '\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' . - '\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' . - '\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' . - '\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' . - '\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' . - '\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' . - '\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' . - '\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' . - '\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' . - '\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' . - '\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' . - '\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' . - '\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' . - '\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' . - '\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' . - '\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' . - '\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' . - '\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' . - '\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' . - '\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' . - '\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' . - '\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' . - '\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' . - '\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' . - '\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' . - '\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' . - '\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' . - '\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' . - '\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' . - '\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' . - '\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' . - '\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' . - '\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' . - '\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' . - '\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' . - '\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' . - '\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' . - '\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' . - '\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' . - '\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' . - '\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' . - '\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' . - '\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' . - '\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' . - '\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' . - '\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' . - '\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' . - '\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' . - '\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' . - '\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' . - '\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' . - '\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' . - '\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' . - '\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' . - '\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' . - '\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' . - '\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' . - '\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' . - '\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' . - '\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' . - '\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' . - '\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' . - '\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' . - '\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' . - '\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' . - '\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' . - '\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' . - '\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' . - '\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' . - '\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' . - '\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' . - '\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' . - '\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' . - '\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' . - '\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' . - '\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' . - '\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' . - '\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' . - '\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' . - '\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' . - '\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' . - '\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' . - '\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' . - '\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' . - '\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' . - '\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' . - '\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' . - '\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' . - '\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' . - '\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' . - '\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' . - '\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' . - '\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' . - '\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' . - '\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' . - '\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' . - '\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' . - '\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' . - '\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' . - '\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' . - '\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' . - '\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' . - '\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' . - '\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' . - '\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' . - '\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' . - '\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' . - '\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' . - '\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' . - '\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' . - '\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' . - '\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' . - '\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' . - '\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' . - '\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' . - '\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' . - '\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' . - '\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' . - '\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' . - '\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' . - '\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' . - '\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' . - '\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' . - '\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' . - '\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' . - '\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' . - '\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' . - '\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' . - '\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' . - '\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' . - '\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' . - '\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' . - '\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' . - '\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' . - '\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' . - '\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' . - '\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' . - '\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' . - '\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' . - '\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' . - '\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' . - '\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' . - '\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' . - '\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' . - '\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' . - '\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' . - '\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' . - '\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' . - '\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' . - '\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' . - '\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' . - '\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' . - '\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' . - '\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' . - '\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' . - '\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' . - '\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' . - '\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' . - '\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' . - '\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' . - '\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' . - '\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' . - '\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' . - '\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' . - '\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' . - '\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' . - '\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' . - '\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' . - '\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' . - '\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' . - '\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' . - '\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' . - '\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' . - '\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' . - '\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' . - '\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' . - '\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' . - '\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' . - '\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' . - '\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' . - '\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' . - '\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' . - '\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' . - '\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' . - '\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' . - '\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' . - '\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' . - '\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' . - '\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' . - '\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' . - '\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' . - '\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' . - '\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' . - '\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' . - '\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' . - '\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' . - '\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' . - '\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' . - '\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' . - '\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' . - '\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' . - '\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' . - '\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' . - '\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' . - '\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' . - '\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' . - '\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' . - '\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' . - '\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' . - '\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' . - '\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' . - '\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' . - '\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' . - '\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' . - '\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' . - '\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' . - '\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' . - '\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' . - '\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' . - '\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' . - '\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' . - '\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' . - '\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' . - '\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' . - '\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' . - '\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' . - '\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' . - '\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' . - '\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' . - '\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' . - '\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' . - '\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' . - '\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' . - '\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' . - '\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' . - '\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' . - '\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' . - '\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' . - '\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' . - '\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' . - '\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' . - '\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' . - '\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' . - '\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' . - '\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' . - '\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' . - '\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' . - '\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' . - '\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' . - '\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' . - '\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' . - '\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' . - '\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' . - '\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' . - '\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' . - '\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' . - '\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' . - '\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' . - '\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' . - '\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' . - '\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' . - '\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' . - '\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' . - '\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' . - '\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' . - '\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' . - '\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' . - '\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' . - '\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' . - '\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' . - '\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' . - '\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' . - '\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' . - '\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' . - '\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' . - '\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' . - '\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' . - '\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' . - '\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' . - '\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' . - '\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' . - '\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' . - '\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' . - '\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' . - '\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' . - '\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' . - '\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' . - '\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' . - '\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' . - '\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' . - '\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' . - '\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' . - '\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' . - '\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' . - '\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' . - '\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' . - '\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' . - '\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' . - '\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' . - '\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' . - '\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' . - '\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' . - '\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' . - '\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' . - '\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' . - '\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' . - '\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' . - '\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' . - '\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' . - '\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' . - '\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' . - '\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' . - '\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' . - '\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' . - '\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' . - '\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' . - '\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' . - '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' . - '\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' . - '\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' . - '\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' . - '\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' . - '\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' . - '\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' . - '\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' . - '\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' . - '\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' . - '\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' . - '\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' . - '\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' . - '\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' . - '\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' . - '\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' . - '\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' . - '\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' . - '\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' . - '\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' . - '\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' . - '\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' . - '\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' . - '\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' . - '\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' . - '\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' . - '\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' . - '\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' . - '\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' . - '\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' . - '\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' . - '\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' . - '\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' . - '\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' . - '\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' . - '\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' . - '\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' . - '\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' . - '\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' . - '\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' . - '\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' . - '\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' . - '\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' . - '\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' . - '\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' . - '\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' . - '\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' . - '\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' . - '\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' . - '\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' . - '\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' . - '\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' . - '\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' . - '\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' . - '\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' . - '\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' . - '\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' . - '\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' . - '\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' . - '\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' . - '\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' . - '\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' . - '\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' . - '\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' . - '\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' . - '\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' . - '\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' . - '\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' . - '\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' . - '\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' . - '\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' . - '\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' . - '\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' . - '\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' . - '\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' . - '\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' . - '\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' . - '\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' . - '\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' . - '\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' . - '\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' . - '\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' . - '\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' . - '\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' . - '\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' . - '\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' . - '\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' . - '\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' . - '\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' . - '\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' . - '\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' . - '\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' . - '\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' . - '\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' . - '\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' . - '\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' . - '\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' . - '\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' . - '\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' . - '\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' . - '\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' . - '\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' . - '\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' . - '\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' . - '\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' . - '\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' . - '\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' . - '\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' . - '\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' . - '\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' . - '\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' . - '\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' . - '\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' . - '\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' . - '\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' . - '\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' . - '\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' . - '\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' . - '\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' . - '\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' . - '\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' . - '\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' . - '\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' . - '\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' . - '\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' . - '\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' . - '\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' . - '\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' . - '\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' . - '\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' . - '\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' . - '\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' . - '\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' . - '\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' . - '\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' . - '\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' . - '\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' . - '\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' . - '\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' . - '\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' . - '\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' . - '\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' . - '\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' . - '\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' . - '\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' . - '\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' . - '\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' . - '\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' . - '\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' . - '\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' . - '\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' . - '\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' . - '\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' . - '\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' . - '\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' . - '\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' . - '\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' . - '\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' . - '\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' . - '\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' . - '\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' . - '\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' . - '\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' . - '\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' . - '\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' . - '\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' . - '\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' . - '\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' . - '\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' . - '\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' . - '\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' . - '\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' . - '\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' . - '\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' . - '\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' . - '\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' . - '\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' . - '\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' . - '\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' . - '\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' . - '\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' . - '\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' . - '\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' . - '\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' . - '\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' . - '\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' . - '\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' . - '\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' . - '\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' . - '\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' . - '\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' . - '\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' . - '\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' . - '\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' . - '\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' . - '\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' . - '\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' . - '\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' . - '\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' . - '\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' . - '\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' . - '\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' . - '\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' . - '\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' . - '\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' . - '\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' . - '\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' . - '\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' . - '\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' . - '\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' . - '\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' . - '\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' . - '\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' . - '\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' . - '\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' . - '\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' . - '\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' . - '\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' . - '\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' . - '\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' . - '\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' . - '\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' . - '\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' . - '\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' . - '\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' . - '\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' . - '\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' . - '\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' . - '\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' . - '\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' . - '\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' . - '\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' . - '\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' . - '\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' . - '\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' . - '\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' . - '\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' . - '\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' . - '\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' . - '\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' . - '\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' . - '\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' . - '\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' . - '\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' . - '\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' . - '\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' . - '\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' . - '\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' . - '\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' . - '\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' . - '\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' . - '\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' . - '\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' . - '\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' . - '\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' . - '\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' . - '\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' . - '\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' . - '\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' . - '\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' . - '\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' . - '\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' . - '\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' . - '\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' . - '\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' . - '\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' . - '\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' . - '\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' . - '\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' . - '\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' . - '\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' . - '\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' . - '\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' . - '\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' . - '\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' . - '\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' . - '\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' . - '\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' . - '\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' . - '\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' . - '\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' . - '\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' . - '\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' . - '\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' . - '\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' . - '\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' . - '\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' . - '\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' . - '\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' . - '\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' . - '\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' . - '\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' . - '\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' . - '\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' . - '\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' . - '\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' . - '\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' . - '\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' . - '\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' . - '\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' . - '\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' . - '\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' . - '\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' . - '\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' . - '\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' . - '\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' . - '\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' . - '\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' . - '\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' . - '\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' . - '\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' . - '\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' . - '\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' . - '\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' . - '\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' . - '\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' . - '\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' . - '\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' . - '\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' . - '\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' . - '\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' . - '\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' . - '\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' . - '\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' . - '\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' . - '\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' . - '\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' . - '\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' . - '\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' . - '\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' . - '\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' . - '\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' . - '\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' . - '\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' . - '\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' . - '\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' . - '\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' . - '\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' . - '\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' . - '\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' . - '\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' . - '\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' . - '\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' . - '\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' . - '\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' . - '\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' . - '\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' . - '\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' . - '\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' . - '\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' . - '\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' . - '\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' . - '\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' . - '\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' . - '\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' . - '\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' . - '\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' . - '\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' . - '\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' . - '\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' . - '\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' . - '\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' . - '\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' . - '\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' . - '\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' . - '\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' . - '\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' . - '\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' . - '\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' . - '\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' . - '\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' . - '\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' . - '\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' . - '\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' . - '\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' . - '\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' . - '\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' . - '\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' . - '\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' . - '\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' . - '\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' . - '\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' . - '\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' . - '\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' . - '\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' . - '\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' . - '\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' . - '\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' . - '\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' . - '\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' . - '\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' . - '\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' . - '\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' . - '\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' . - '\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' . - '\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' . - '\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' . - '\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' . - '\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' . - '\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' . - '\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' . - '\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' . - '\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' . - '\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' . - '\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' . - '\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' . - '\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' . - '\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' . - '\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' . - '\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' . - '\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' . - '\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' . - '\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' . - '\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' . - '\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' . - '\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' . - '\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' . - '\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' . - '\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' . - '\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' . - '\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' . - '\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' . - '\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' . - '\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' . - '\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' . - '\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' . - '\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' . - '\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' . - '\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' . - '\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' . - '\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' . - '\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' . - '\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' . - '\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' . - '\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' . - '\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' . - '\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' . - '\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' . - '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' . - '\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' . - '\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' . - '\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' . - '\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' . - '\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' . - '\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' . - '\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' . - '\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' . - '\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' . - '\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' . - '\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' . - '\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' . - '\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' . - '\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' . - '\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' . - '\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' . - '\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' . - '\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' . - '\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' . - '\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' . - '\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' . - '\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' . - '\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' . - '\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' . - '\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' . - '\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' . - '\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' . - '\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' . - '\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' . - '\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' . - '\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' . - '\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' . - '\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' . - '\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' . - '\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' . - '\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' . - '\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' . - '\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' . - '\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' . - '\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' . - '\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' . - '\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' . - '\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' . - '\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' . - '\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' . - '\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' . - '\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' . - '\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' . - '\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' . - '\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' . - '\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' . - '\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' . - '\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' . - '\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' . - '\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' . - '\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' . - '\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' . - '\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' . - '\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' . - '\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' . - '\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' . - '\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' . - '\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' . - '\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' . - '\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' . - '\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' . - '\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' . - '\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' . - '\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' . - '\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' . - '\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' . - '\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' . - '\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' . - '\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' . - '\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' . - '\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' . - '\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' . - '\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' . - '\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' . - '\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' . - '\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' . - '\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' . - '\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' . - '\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' . - '\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' . - '\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' . - '\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' . - '\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' . - '\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' . - '\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' . - '\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' . - '\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' . - '\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' . - '\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' . - '\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' . - '\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' . - '\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' . - '\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' . - '\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' . - '\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' . - '\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' . - '\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' . - '\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' . - '\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' . - '\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' . - '\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' . - '\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' . - '\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' . - '\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' . - '\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' . - '\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' . - '\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' . - '\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' . - '\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' . - '\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' . - '\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' . - '\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' . - '\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' . - '\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', -); diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php deleted file mode 100644 index 93f3834b60..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Hostname; - -/** - * Resource file for com and net idn validation - */ -return array( - 1 => '/^[\x{002d}0-9\x{0400}-\x{052f}]{1,63}$/iu', - 2 => '/^[\x{002d}0-9\x{0370}-\x{03ff}]{1,63}$/iu', - 3 => '/^[\x{002d}0-9a-z\x{ac00}-\x{d7a3}]{1,17}$/iu', - 4 => '/^[\x{002d}0-9a-z·à -öø-ÿÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīÄįıĵķĸĺļľłńņňŋÅÅőœŕŗřśÅşšţťŧũūÅůűųŵŷźżž]{1,63}$/iu', - 5 => '/^[\x{002d}0-9A-Za-z\x{3400}-\x{3401}\x{3404}-\x{3406}\x{340C}\x{3416}\x{341C}' . -'\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' . -'\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' . -'\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' . -'\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' . -'\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' . -'\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' . -'\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' . -'\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' . -'\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' . -'\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' . -'\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' . -'\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' . -'\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' . -'\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' . -'\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' . -'\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' . -'\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' . -'\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' . -'\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' . -'\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' . -'\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' . -'\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' . -'\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' . -'\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' . -'\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' . -'\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' . -'\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' . -'\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' . -'\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' . -'\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' . -'\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' . -'\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' . -'\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' . -'\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' . -'\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' . -'\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' . -'\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' . -'\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' . -'\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' . -'\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' . -'\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' . -'\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' . -'\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' . -'\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' . -'\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' . -'\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' . -'\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' . -'\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' . -'\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' . -'\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' . -'\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' . -'\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' . -'\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' . -'\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' . -'\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' . -'\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' . -'\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' . -'\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' . -'\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' . -'\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' . -'\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' . -'\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' . -'\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' . -'\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' . -'\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' . -'\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' . -'\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' . -'\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' . -'\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' . -'\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' . -'\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' . -'\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' . -'\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' . -'\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' . -'\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' . -'\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' . -'\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' . -'\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' . -'\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' . -'\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' . -'\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' . -'\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' . -'\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' . -'\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' . -'\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' . -'\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu', - 6 => '/^[\x{002d}0-9A-Za-z]{1,63}$/iu', - 7 => '/^[\x{00A1}-\x{00FF}]{1,63}$/iu', - 8 => '/^[\x{0100}-\x{017f}]{1,63}$/iu', - 9 => '/^[\x{0180}-\x{024f}]{1,63}$/iu', - 10 => '/^[\x{0250}-\x{02af}]{1,63}$/iu', - 11 => '/^[\x{02b0}-\x{02ff}]{1,63}$/iu', - 12 => '/^[\x{0300}-\x{036f}]{1,63}$/iu', - 13 => '/^[\x{0370}-\x{03ff}]{1,63}$/iu', - 14 => '/^[\x{0400}-\x{04ff}]{1,63}$/iu', - 15 => '/^[\x{0500}-\x{052f}]{1,63}$/iu', - 16 => '/^[\x{0530}-\x{058F}]{1,63}$/iu', - 17 => '/^[\x{0590}-\x{05FF}]{1,63}$/iu', - 18 => '/^[\x{0600}-\x{06FF}]{1,63}$/iu', - 19 => '/^[\x{0700}-\x{074F}]{1,63}$/iu', - 20 => '/^[\x{0780}-\x{07BF}]{1,63}$/iu', - 21 => '/^[\x{0900}-\x{097F}]{1,63}$/iu', - 22 => '/^[\x{0980}-\x{09FF}]{1,63}$/iu', - 23 => '/^[\x{0A00}-\x{0A7F}]{1,63}$/iu', - 24 => '/^[\x{0A80}-\x{0AFF}]{1,63}$/iu', - 25 => '/^[\x{0B00}-\x{0B7F}]{1,63}$/iu', - 26 => '/^[\x{0B80}-\x{0BFF}]{1,63}$/iu', - 27 => '/^[\x{0C00}-\x{0C7F}]{1,63}$/iu', - 28 => '/^[\x{0C80}-\x{0CFF}]{1,63}$/iu', - 29 => '/^[\x{0D00}-\x{0D7F}]{1,63}$/iu', - 30 => '/^[\x{0D80}-\x{0DFF}]{1,63}$/iu', - 31 => '/^[\x{0E00}-\x{0E7F}]{1,63}$/iu', - 32 => '/^[\x{0E80}-\x{0EFF}]{1,63}$/iu', - 33 => '/^[\x{0F00}-\x{0FFF}]{1,63}$/iu', - 34 => '/^[\x{1000}-\x{109F}]{1,63}$/iu', - 35 => '/^[\x{10A0}-\x{10FF}]{1,63}$/iu', - 36 => '/^[\x{1100}-\x{11FF}]{1,63}$/iu', - 37 => '/^[\x{1200}-\x{137F}]{1,63}$/iu', - 38 => '/^[\x{13A0}-\x{13FF}]{1,63}$/iu', - 39 => '/^[\x{1400}-\x{167F}]{1,63}$/iu', - 40 => '/^[\x{1680}-\x{169F}]{1,63}$/iu', - 41 => '/^[\x{16A0}-\x{16FF}]{1,63}$/iu', - 42 => '/^[\x{1700}-\x{171F}]{1,63}$/iu', - 43 => '/^[\x{1720}-\x{173F}]{1,63}$/iu', - 44 => '/^[\x{1740}-\x{175F}]{1,63}$/iu', - 45 => '/^[\x{1760}-\x{177F}]{1,63}$/iu', - 46 => '/^[\x{1780}-\x{17FF}]{1,63}$/iu', - 47 => '/^[\x{1800}-\x{18AF}]{1,63}$/iu', - 48 => '/^[\x{1E00}-\x{1EFF}]{1,63}$/iu', - 49 => '/^[\x{1F00}-\x{1FFF}]{1,63}$/iu', - 50 => '/^[\x{2070}-\x{209F}]{1,63}$/iu', - 51 => '/^[\x{2100}-\x{214F}]{1,63}$/iu', - 52 => '/^[\x{2150}-\x{218F}]{1,63}$/iu', - 53 => '/^[\x{2460}-\x{24FF}]{1,63}$/iu', - 54 => '/^[\x{2E80}-\x{2EFF}]{1,63}$/iu', - 55 => '/^[\x{2F00}-\x{2FDF}]{1,63}$/iu', - 56 => '/^[\x{2FF0}-\x{2FFF}]{1,63}$/iu', - 57 => '/^[\x{3040}-\x{309F}]{1,63}$/iu', - 58 => '/^[\x{30A0}-\x{30FF}]{1,63}$/iu', - 59 => '/^[\x{3100}-\x{312F}]{1,63}$/iu', - 60 => '/^[\x{3130}-\x{318F}]{1,63}$/iu', - 61 => '/^[\x{3190}-\x{319F}]{1,63}$/iu', - 62 => '/^[\x{31A0}-\x{31BF}]{1,63}$/iu', - 63 => '/^[\x{31F0}-\x{31FF}]{1,63}$/iu', - 64 => '/^[\x{3200}-\x{32FF}]{1,63}$/iu', - 65 => '/^[\x{3300}-\x{33FF}]{1,63}$/iu', - 66 => '/^[\x{3400}-\x{4DBF}]{1,63}$/iu', - 67 => '/^[\x{4E00}-\x{9FFF}]{1,63}$/iu', - 68 => '/^[\x{A000}-\x{A48F}]{1,63}$/iu', - 69 => '/^[\x{A490}-\x{A4CF}]{1,63}$/iu', - 70 => '/^[\x{AC00}-\x{D7AF}]{1,63}$/iu', - 73 => '/^[\x{F900}-\x{FAFF}]{1,63}$/iu', - 74 => '/^[\x{FB00}-\x{FB4F}]{1,63}$/iu', - 75 => '/^[\x{FB50}-\x{FDFF}]{1,63}$/iu', - 76 => '/^[\x{FE20}-\x{FE2F}]{1,63}$/iu', - 77 => '/^[\x{FE70}-\x{FEFF}]{1,63}$/iu', - 78 => '/^[\x{FF00}-\x{FFEF}]{1,63}$/iu', - 79 => '/^[\x{20000}-\x{2A6DF}]{1,63}$/iu', - 80 => '/^[\x{2F800}-\x{2FA1F}]{1,63}$/iu', -); diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php deleted file mode 100644 index e0d871e5ee..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php +++ /dev/null @@ -1,725 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Hostname; - -/** - * Resource file for japanese idn validation - */ -return array( - 1 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' . - '\x{30A1}-\x{30F6}\x{30FC}' . - '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' . - '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' . - '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' . - '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' . - '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' . - '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' . - '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' . - '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' . - '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' . - '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' . - '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' . - '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' . - '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' . - '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' . - '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' . - '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' . - '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' . - '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' . - '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' . - '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' . - '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' . - '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' . - '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' . - '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' . - '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' . - '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' . - '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' . - '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' . - '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' . - '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' . - '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' . - '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' . - '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' . - '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' . - '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' . - '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' . - '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' . - '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' . - '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' . - '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' . - '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' . - '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' . - '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' . - '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' . - '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' . - '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' . - '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' . - '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' . - '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' . - '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' . - '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' . - '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' . - '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' . - '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' . - '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' . - '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' . - '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' . - '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' . - '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' . - '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' . - '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' . - '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' . - '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' . - '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' . - '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' . - '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' . - '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' . - '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' . - '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' . - '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' . - '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' . - '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' . - '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' . - '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' . - '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' . - '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' . - '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' . - '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' . - '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' . - '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' . - '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' . - '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' . - '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' . - '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' . - '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' . - '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' . - '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' . - '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' . - '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' . - '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' . - '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' . - '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' . - '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' . - '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' . - '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' . - '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' . - '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' . - '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' . - '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' . - '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' . - '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' . - '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' . - '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' . - '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' . - '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' . - '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' . - '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' . - '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' . - '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' . - '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' . - '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' . - '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' . - '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' . - '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' . - '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' . - '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' . - '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' . - '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' . - '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' . - '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' . - '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' . - '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' . - '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' . - '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' . - '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' . - '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' . - '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' . - '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' . - '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' . - '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' . - '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' . - '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' . - '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' . - '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' . - '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' . - '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' . - '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' . - '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' . - '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' . - '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' . - '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' . - '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' . - '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' . - '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' . - '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' . - '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' . - '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' . - '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' . - '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' . - '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' . - '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' . - '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' . - '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' . - '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' . - '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' . - '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' . - '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' . - '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' . - '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' . - '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' . - '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' . - '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' . - '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' . - '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' . - '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' . - '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' . - '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' . - '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' . - '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' . - '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' . - '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' . - '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' . - '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' . - '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' . - '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' . - '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' . - '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' . - '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' . - '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' . - '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' . - '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' . - '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' . - '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' . - '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' . - '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' . - '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' . - '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' . - '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' . - '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' . - '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' . - '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' . - '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' . - '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' . - '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' . - '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' . - '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' . - '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' . - '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' . - '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' . - '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' . - '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' . - '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' . - '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' . - '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' . - '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' . - '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' . - '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' . - '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' . - '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' . - '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' . - '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' . - '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' . - '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' . - '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' . - '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' . - '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' . - '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' . - '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' . - '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' . - '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' . - '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' . - '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' . - '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' . - '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' . - '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' . - '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' . - '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' . - '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' . - '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' . - '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' . - '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' . - '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' . - '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' . - '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' . - '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' . - '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' . - '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' . - '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' . - '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' . - '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' . - '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' . - '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' . - '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' . - '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' . - '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' . - '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' . - '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' . - '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' . - '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' . - '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' . - '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' . - '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' . - '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' . - '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' . - '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' . - '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' . - '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' . - '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' . - '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' . - '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' . - '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' . - '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' . - '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' . - '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' . - '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' . - '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' . - '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' . - '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' . - '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' . - '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' . - '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' . - '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' . - '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' . - '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' . - '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' . - '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' . - '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' . - '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' . - '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' . - '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' . - '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' . - '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' . - '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' . - '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' . - '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' . - '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' . - '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' . - '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' . - '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' . - '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' . - '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' . - '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' . - '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' . - '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' . - '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' . - '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' . - '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' . - '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' . - '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' . - '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' . - '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' . - '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' . - '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' . - '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' . - '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' . - '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' . - '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' . - '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' . - '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' . - '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' . - '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' . - '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' . - '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' . - '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' . - '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' . - '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' . - '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' . - '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' . - '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' . - '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' . - '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' . - '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' . - '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' . - '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' . - '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' . - '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' . - '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' . - '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' . - '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' . - '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' . - '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' . - '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' . - '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' . - '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' . - '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' . - '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' . - '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' . - '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' . - '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' . - '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' . - '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' . - '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' . - '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' . - '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' . - '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' . - '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' . - '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' . - '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' . - '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' . - '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' . - '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' . - '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' . - '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' . - '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' . - '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' . - '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' . - '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' . - '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' . - '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' . - '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' . - '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' . - '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' . - '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' . - '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' . - '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' . - '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' . - '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' . - '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' . - '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' . - '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' . - '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' . - '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' . - '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' . - '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' . - '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' . - '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' . - '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' . - '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' . - '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' . - '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' . - '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' . - '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' . - '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' . - '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' . - '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' . - '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' . - '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' . - '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' . - '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' . - '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' . - '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' . - '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' . - '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' . - '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' . - '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' . - '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' . - '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' . - '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' . - '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' . - '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' . - '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' . - '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' . - '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' . - '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' . - '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' . - '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' . - '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' . - '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' . - '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' . - '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' . - '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' . - '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' . - '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' . - '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' . - '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' . - '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' . - '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' . - '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' . - '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' . - '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' . - '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' . - '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' . - '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' . - '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' . - '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' . - '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' . - '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' . - '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' . - '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' . - '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' . - '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' . - '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' . - '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' . - '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' . - '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' . - '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' . - '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' . - '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' . - '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' . - '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' . - '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' . - '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' . - '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' . - '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' . - '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' . - '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' . - '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' . - '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' . - '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' . - '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' . - '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' . - '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' . - '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' . - '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' . - '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' . - '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' . - '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' . - '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' . - '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' . - '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' . - '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' . - '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' . - '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' . - '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' . - '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' . - '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' . - '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' . - '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' . - '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' . - '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' . - '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' . - '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' . - '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' . - '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' . - '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' . - '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' . - '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' . - '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' . - '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' . - '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' . - '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' . - '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' . - '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' . - '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' . - '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' . - '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' . - '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' . - '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' . - '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' . - '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' . - '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' . - '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' . - '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' . - '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' . - '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' . - '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' . - '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' . - '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' . - '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' . - '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' . - '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' . - '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' . - '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' . - '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' . - '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' . - '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' . - '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' . - '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' . - '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' . - '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' . - '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' . - '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' . - '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' . - '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' . - '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' . - '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' . - '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' . - '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' . - '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' . - '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' . - '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' . - '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' . - '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' . - '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' . - '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' . - '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' . - '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' . - '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' . - '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' . - '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' . - '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' . - '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' . - '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' . - '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' . - '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' . - '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' . - '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' . - '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' . - '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' . - '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' . - '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' . - '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' . - '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' . - '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' . - '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' . - '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' . - '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' . - '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' . - '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' . - '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' . - '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' . - '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' . - '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' . - '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' . - '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' . - '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' . - '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' . - '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' . - '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' . - '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' . - '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' . - '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' . - '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' . - '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' . - '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' . - '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' . - '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' . - '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' . - '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' . - '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' . - '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' . - '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' . - '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' . - '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' . - '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' . - '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' . - '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' . - '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' . - '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' . - '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' . - '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' . - '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' . - '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' . - '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' . - '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' . - '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' . - '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' . - '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' . - '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' . - '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' . - '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' . - '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' . - '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' . - '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' . - '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' . - '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' . - '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' . - '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' . - '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' . - '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' . - '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' . - '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' . - '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' . - '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' . - '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' . - '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' . - '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' . - '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' . - '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' . - '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' . - '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' . - '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' . - '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' . - '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' . - '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' . - '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' . - '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' . - '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' . - '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' . - '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' . - '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' . - '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' . - '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' . - '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' . - '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' . - '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' . - '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' . - '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' . - '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' . - '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' . - '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' . - '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' . - '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' . - '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' . - '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' . - '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' . - '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' . - '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' . - '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' . - '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' . - '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' . - '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' . - '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' . - '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' . - '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' . - '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' . - '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' . - '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' . - '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' . - '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' . - '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' . - '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' . - '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' . - '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' . - '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' . - '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' . - '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' . - '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' . - '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' . - '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' . - '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' . - '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' . - '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' . - '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' . - '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' . - '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' . - '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' . - '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' . - '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' . - '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' . - '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' . - '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' . - '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' . - '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' . - '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' . - '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' . - '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' . - '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' . - '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' . - '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' . - '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' . - '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' . - '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' . - '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' . - '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' . - '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' . - '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' . - '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' . - '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' . - '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' . - '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' . - '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' . - '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' . - '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' . - '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' . - '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' . - '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' . - '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' . - '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' . - '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' . - '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' . - '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' . - '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' . - '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' . - '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' . - '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' . - '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', -); diff --git a/civicrm/vendor/zendframework/zend-validator/src/Iban.php b/civicrm/vendor/zendframework/zend-validator/src/Iban.php deleted file mode 100644 index f6d542a1cd..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Iban.php +++ /dev/null @@ -1,273 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -/** - * Validates IBAN Numbers (International Bank Account Numbers) - */ -class Iban extends AbstractValidator -{ - const NOTSUPPORTED = 'ibanNotSupported'; - const SEPANOTSUPPORTED = 'ibanSepaNotSupported'; - const FALSEFORMAT = 'ibanFalseFormat'; - const CHECKFAILED = 'ibanCheckFailed'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOTSUPPORTED => "Unknown country within the IBAN", - self::SEPANOTSUPPORTED => "Countries outside the Single Euro Payments Area (SEPA) are not supported", - self::FALSEFORMAT => "The input has a false IBAN format", - self::CHECKFAILED => "The input has failed the IBAN check", - ); - - /** - * Optional country code by ISO 3166-1 - * - * @var string|null - */ - protected $countryCode; - - /** - * Optionally allow IBAN codes from non-SEPA countries. Defaults to true - * - * @var bool - */ - protected $allowNonSepa = true; - - /** - * The SEPA country codes - * - * @var array<ISO 3166-1> - */ - protected static $sepaCountries = array( - 'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'FO', 'GL', 'EE', 'FI', 'FR', 'DE', - 'GI', 'GR', 'HU', 'IS', 'IE', 'IT', 'LV', 'LI', 'LT', 'LU', 'MT', 'MC', - 'NL', 'NO', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB' - ); - - /** - * IBAN regexes by country code - * - * @var array - */ - protected static $ibanRegex = array( - 'AD' => 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}', - 'AE' => 'AE[0-9]{2}[0-9]{3}[0-9]{16}', - 'AL' => 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}', - 'AT' => 'AT[0-9]{2}[0-9]{5}[0-9]{11}', - 'AZ' => 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}', - 'BA' => 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}', - 'BE' => 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}', - 'BG' => 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}', - 'BH' => 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}', - 'BR' => 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]', - 'CH' => 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}', - 'CR' => 'CR[0-9]{2}[0-9]{3}[0-9]{14}', - 'CY' => 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}', - 'CZ' => 'CZ[0-9]{2}[0-9]{20}', - 'DE' => 'DE[0-9]{2}[0-9]{8}[0-9]{10}', - 'DO' => 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}', - 'DK' => 'DK[0-9]{2}[0-9]{14}', - 'EE' => 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}', - 'ES' => 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}', - 'FI' => 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}', - 'FO' => 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}', - 'FR' => 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}', - 'GB' => 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}', - 'GE' => 'GE[0-9]{2}[A-Z]{2}[0-9]{16}', - 'GI' => 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}', - 'GL' => 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}', - 'GR' => 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}', - 'GT' => 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}', - 'HR' => 'HR[0-9]{2}[0-9]{7}[0-9]{10}', - 'HU' => 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}', - 'IE' => 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}', - 'IL' => 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}', - 'IS' => 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}', - 'IT' => 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}', - 'KW' => 'KW[0-9]{2}[A-Z]{4}[0-9]{22}', - 'KZ' => 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}', - 'LB' => 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}', - 'LI' => 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}', - 'LT' => 'LT[0-9]{2}[0-9]{5}[0-9]{11}', - 'LU' => 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}', - 'LV' => 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}', - 'MC' => 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}', - 'MD' => 'MD[0-9]{2}[A-Z0-9]{20}', - 'ME' => 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}', - 'MK' => 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}', - 'MR' => 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}', - 'MT' => 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}', - 'MU' => 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}', - 'NL' => 'NL[0-9]{2}[A-Z]{4}[0-9]{10}', - 'NO' => 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}', - 'PK' => 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}', - 'PL' => 'PL[0-9]{2}[0-9]{8}[0-9]{16}', - 'PS' => 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}', - 'PT' => 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}', - 'RO' => 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}', - 'RS' => 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}', - 'SA' => 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}', - 'SE' => 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}', - 'SI' => 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}', - 'SK' => 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}', - 'SM' => 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}', - 'TN' => 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}', - 'TR' => 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}', - 'VG' => 'VG[0-9]{2}[A-Z]{4}[0-9]{16}', - ); - - /** - * Sets validator options - * - * @param array|Traversable $options OPTIONAL - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (array_key_exists('country_code', $options)) { - $this->setCountryCode($options['country_code']); - } - - if (array_key_exists('allow_non_sepa', $options)) { - $this->setAllowNonSepa($options['allow_non_sepa']); - } - - parent::__construct($options); - } - - /** - * Returns the optional country code by ISO 3166-1 - * - * @return string|null - */ - public function getCountryCode() - { - return $this->countryCode; - } - - /** - * Sets an optional country code by ISO 3166-1 - * - * @param string|null $countryCode - * @return Iban provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function setCountryCode($countryCode = null) - { - if ($countryCode !== null) { - $countryCode = (string) $countryCode; - - if (!isset(static::$ibanRegex[$countryCode])) { - throw new Exception\InvalidArgumentException( - "Country code '{$countryCode}' invalid by ISO 3166-1 or not supported" - ); - } - } - - $this->countryCode = $countryCode; - return $this; - } - - /** - * Returns the optional allow non-sepa countries setting - * - * @return bool - */ - public function allowNonSepa() - { - return $this->allowNonSepa; - } - - /** - * Sets the optional allow non-sepa countries setting - * - * @param bool $allowNonSepa - * @return Iban provides a fluent interface - */ - public function setAllowNonSepa($allowNonSepa) - { - $this->allowNonSepa = (bool) $allowNonSepa; - return $this; - } - - /** - * Returns true if $value is a valid IBAN - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::FALSEFORMAT); - return false; - } - - $value = str_replace(' ', '', strtoupper($value)); - $this->setValue($value); - - $countryCode = $this->getCountryCode(); - if ($countryCode === null) { - $countryCode = substr($value, 0, 2); - } - - if (!array_key_exists($countryCode, static::$ibanRegex)) { - $this->setValue($countryCode); - $this->error(self::NOTSUPPORTED); - return false; - } - - if (!$this->allowNonSepa && !in_array($countryCode, static::$sepaCountries)) { - $this->setValue($countryCode); - $this->error(self::SEPANOTSUPPORTED); - return false; - } - - if (!preg_match('/^' . static::$ibanRegex[$countryCode] . '$/', $value)) { - $this->error(self::FALSEFORMAT); - return false; - } - - $format = substr($value, 4) . substr($value, 0, 4); - $format = str_replace( - array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), - array('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', - '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'), - $format - ); - - $temp = intval(substr($format, 0, 1)); - $len = strlen($format); - for ($x = 1; $x < $len; ++$x) { - $temp *= 10; - $temp += intval(substr($format, $x, 1)); - $temp %= 97; - } - - if ($temp != 1) { - $this->error(self::CHECKFAILED); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Identical.php b/civicrm/vendor/zendframework/zend-validator/src/Identical.php deleted file mode 100644 index ca0efb87e3..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Identical.php +++ /dev/null @@ -1,202 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use ArrayAccess; -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class Identical extends AbstractValidator -{ - /** - * Error codes - * @const string - */ - const NOT_SAME = 'notSame'; - const MISSING_TOKEN = 'missingToken'; - - /** - * Error messages - * @var array - */ - protected $messageTemplates = array( - self::NOT_SAME => "The two given tokens do not match", - self::MISSING_TOKEN => 'No token was provided to match against', - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'token' => 'tokenString' - ); - - /** - * Original token against which to validate - * @var string - */ - protected $tokenString; - protected $token; - protected $strict = true; - protected $literal = false; - - /** - * Sets validator options - * - * @param mixed $token - */ - public function __construct($token = null) - { - if ($token instanceof Traversable) { - $token = ArrayUtils::iteratorToArray($token); - } - - if (is_array($token) && array_key_exists('token', $token)) { - if (array_key_exists('strict', $token)) { - $this->setStrict($token['strict']); - } - - if (array_key_exists('literal', $token)) { - $this->setLiteral($token['literal']); - } - - $this->setToken($token['token']); - } elseif (null !== $token) { - $this->setToken($token); - } - - parent::__construct(is_array($token) ? $token : null); - } - - /** - * Retrieve token - * - * @return mixed - */ - public function getToken() - { - return $this->token; - } - - /** - * Set token against which to compare - * - * @param mixed $token - * @return Identical - */ - public function setToken($token) - { - $this->tokenString = (is_array($token) ? var_export($token, true) : (string) $token); - $this->token = $token; - return $this; - } - - /** - * Returns the strict parameter - * - * @return bool - */ - public function getStrict() - { - return $this->strict; - } - - /** - * Sets the strict parameter - * - * @param bool $strict - * @return Identical - */ - public function setStrict($strict) - { - $this->strict = (bool) $strict; - return $this; - } - - /** - * Returns the literal parameter - * - * @return bool - */ - public function getLiteral() - { - return $this->literal; - } - - /** - * Sets the literal parameter - * - * @param bool $literal - * @return Identical - */ - public function setLiteral($literal) - { - $this->literal = (bool) $literal; - return $this; - } - - /** - * Returns true if and only if a token has been set and the provided value - * matches that token. - * - * @param mixed $value - * @param array|ArrayAccess $context - * @throws Exception\InvalidArgumentException If context is not array or ArrayObject - * @return bool - */ - public function isValid($value, $context = null) - { - $this->setValue($value); - - $token = $this->getToken(); - - if (!$this->getLiteral() && $context !== null) { - if (!is_array($context) && !($context instanceof ArrayAccess)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Context passed to %s must be array, ArrayObject or null; received "%s"', - __METHOD__, - is_object($context) ? get_class($context) : gettype($context) - )); - } - - if (is_array($token)) { - while (is_array($token)) { - $key = key($token); - if (!isset($context[$key])) { - break; - } - $context = $context[$key]; - $token = $token[$key]; - } - } - - // if $token is an array it means the above loop didn't went all the way down to the leaf, - // so the $token structure doesn't match the $context structure - if (is_array($token) || !isset($context[$token])) { - $token = $this->getToken(); - } else { - $token = $context[$token]; - } - } - - if ($token === null) { - $this->error(self::MISSING_TOKEN); - return false; - } - - $strict = $this->getStrict(); - if (($strict && ($value !== $token)) || (!$strict && ($value != $token))) { - $this->error(self::NOT_SAME); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/InArray.php b/civicrm/vendor/zendframework/zend-validator/src/InArray.php deleted file mode 100644 index be271ea0f8..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/InArray.php +++ /dev/null @@ -1,228 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use RecursiveArrayIterator; -use RecursiveIteratorIterator; - -class InArray extends AbstractValidator -{ - const NOT_IN_ARRAY = 'notInArray'; - - // Type of Strict check - /** - * standard in_array strict checking value and type - */ - const COMPARE_STRICT = 1; - - /** - * Non strict check but prevents "asdf" == 0 returning TRUE causing false/positive. - * This is the most secure option for non-strict checks and replaces strict = false - * This will only be effective when the input is a string - */ - const COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY = 0; - - /** - * Standard non-strict check where "asdf" == 0 returns TRUE - * This will be wanted when comparing "0" against int 0 - */ - const COMPARE_NOT_STRICT = -1; - - /** - * @var array - */ - protected $messageTemplates = array( - self::NOT_IN_ARRAY => 'The input was not found in the haystack', - ); - - /** - * Haystack of possible values - * - * @var array - */ - protected $haystack; - - /** - * Type of strict check to be used. Due to "foo" == 0 === TRUE with in_array when strict = false, - * an option has been added to prevent this. When $strict = 0/false, the most - * secure non-strict check is implemented. if $strict = -1, the default in_array non-strict - * behaviour is used - * - * @var int - */ - protected $strict = self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY; - - /** - * Whether a recursive search should be done - * - * @var bool - */ - protected $recursive = false; - - /** - * Returns the haystack option - * - * @return mixed - * @throws Exception\RuntimeException if haystack option is not set - */ - public function getHaystack() - { - if ($this->haystack === null) { - throw new Exception\RuntimeException('haystack option is mandatory'); - } - return $this->haystack; - } - - /** - * Sets the haystack option - * - * @param mixed $haystack - * @return InArray Provides a fluent interface - */ - public function setHaystack(array $haystack) - { - $this->haystack = $haystack; - return $this; - } - - /** - * Returns the strict option - * - * @return bool|int - */ - public function getStrict() - { - // To keep BC with new strict modes - if ($this->strict == self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY - || $this->strict == self::COMPARE_STRICT - ) { - return (bool) $this->strict; - } - return $this->strict; - } - - /** - * Sets the strict option mode - * InArray::COMPARE_STRICT | InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY | InArray::COMPARE_NOT_STRICT - * - * @param int $strict - * @return InArray Provides a fluent interface - * @throws Exception\InvalidArgumentException - */ - public function setStrict($strict) - { - $checkTypes = array( - self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY, // 0 - self::COMPARE_STRICT, // 1 - self::COMPARE_NOT_STRICT // -1 - ); - - // validate strict value - if (!in_array($strict, $checkTypes)) { - throw new Exception\InvalidArgumentException('Strict option must be one of the COMPARE_ constants'); - } - - $this->strict = $strict; - return $this; - } - - /** - * Returns the recursive option - * - * @return bool - */ - public function getRecursive() - { - return $this->recursive; - } - - /** - * Sets the recursive option - * - * @param bool $recursive - * @return InArray Provides a fluent interface - */ - public function setRecursive($recursive) - { - $this->recursive = (bool) $recursive; - return $this; - } - - /** - * Returns true if and only if $value is contained in the haystack option. If the strict - * option is true, then the type of $value is also checked. - * - * @param mixed $value - * See {@link http://php.net/manual/function.in-array.php#104501} - * @return bool - */ - public function isValid($value) - { - // we create a copy of the haystack in case we need to modify it - $haystack = $this->getHaystack(); - - // if the input is a string or float, and vulnerability protection is on - // we type cast the input to a string - if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict - && (is_int($value) || is_float($value))) { - $value = (string) $value; - } - - $this->setValue($value); - - if ($this->getRecursive()) { - $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack)); - foreach ($iterator as $element) { - if (self::COMPARE_STRICT == $this->strict) { - if ($element === $value) { - return true; - } - } else { - // add protection to prevent string to int vuln's - $el = $element; - if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict - && is_string($value) && (is_int($el) || is_float($el)) - ) { - $el = (string) $el; - } - - if ($el == $value) { - return true; - } - } - } - } else { - /** - * If the check is not strict, then, to prevent "asdf" being converted to 0 - * and returning a false positive if 0 is in haystack, we type cast - * the haystack to strings. To prevent "56asdf" == 56 === TRUE we also - * type cast values like 56 to strings as well. - * - * This occurs only if the input is a string and a haystack member is an int - */ - if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict - && is_string($value) - ) { - foreach ($haystack as &$h) { - if (is_int($h) || is_float($h)) { - $h = (string) $h; - } - } - } - - if (in_array($value, $haystack, self::COMPARE_STRICT == $this->strict)) { - return true; - } - } - - $this->error(self::NOT_IN_ARRAY); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Ip.php b/civicrm/vendor/zendframework/zend-validator/src/Ip.php deleted file mode 100644 index aac2082825..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Ip.php +++ /dev/null @@ -1,189 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; - -class Ip extends AbstractValidator -{ - const INVALID = 'ipInvalid'; - const NOT_IP_ADDRESS = 'notIpAddress'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => 'Invalid type given. String expected', - self::NOT_IP_ADDRESS => "The input does not appear to be a valid IP address", - ); - - /** - * Internal options - * - * @var array - */ - protected $options = array( - 'allowipv4' => true, // Enable IPv4 Validation - 'allowipv6' => true, // Enable IPv6 Validation - 'allowipvfuture' => false, // Enable IPvFuture Validation - 'allowliteral' => true, // Enable IPs in literal format (only IPv6 and IPvFuture) - ); - - /** - * Sets the options for this validator - * - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException If there is any kind of IP allowed or $options is not an array or Traversable. - * @return AbstractValidator - */ - public function setOptions($options = array()) - { - parent::setOptions($options); - - if (!$this->options['allowipv4'] && !$this->options['allowipv6'] && !$this->options['allowipvfuture']) { - throw new Exception\InvalidArgumentException('Nothing to validate. Check your options'); - } - - return $this; - } - - /** - * Returns true if and only if $value is a valid IP address - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - - if ($this->options['allowipv4'] && $this->validateIPv4($value)) { - return true; - } else { - if ((bool) $this->options['allowliteral']) { - static $regex = '/^\[(.*)\]$/'; - if ((bool) preg_match($regex, $value, $matches)) { - $value = $matches[1]; - } - } - - if (($this->options['allowipv6'] && $this->validateIPv6($value)) || - ($this->options['allowipvfuture'] && $this->validateIPvFuture($value)) - ) { - return true; - } - } - $this->error(self::NOT_IP_ADDRESS); - return false; - } - - /** - * Validates an IPv4 address - * - * @param string $value - * @return bool - */ - protected function validateIPv4($value) - { - if (preg_match('/^([01]{8}.){3}[01]{8}\z/i', $value)) { - // binary format 00000000.00000000.00000000.00000000 - $value = bindec(substr($value, 0, 8)) . '.' . bindec(substr($value, 9, 8)) . '.' - . bindec(substr($value, 18, 8)) . '.' . bindec(substr($value, 27, 8)); - } elseif (preg_match('/^([0-9]{3}.){3}[0-9]{3}\z/i', $value)) { - // octet format 777.777.777.777 - $value = (int) substr($value, 0, 3) . '.' . (int) substr($value, 4, 3) . '.' - . (int) substr($value, 8, 3) . '.' . (int) substr($value, 12, 3); - } elseif (preg_match('/^([0-9a-f]{2}.){3}[0-9a-f]{2}\z/i', $value)) { - // hex format ff.ff.ff.ff - $value = hexdec(substr($value, 0, 2)) . '.' . hexdec(substr($value, 3, 2)) . '.' - . hexdec(substr($value, 6, 2)) . '.' . hexdec(substr($value, 9, 2)); - } - - $ip2long = ip2long($value); - if ($ip2long === false) { - return false; - } - - return ($value == long2ip($ip2long)); - } - - /** - * Validates an IPv6 address - * - * @param string $value Value to check against - * @return bool True when $value is a valid ipv6 address - * False otherwise - */ - protected function validateIPv6($value) - { - if (strlen($value) < 3) { - return $value == '::'; - } - - if (strpos($value, '.')) { - $lastcolon = strrpos($value, ':'); - if (!($lastcolon && $this->validateIPv4(substr($value, $lastcolon + 1)))) { - return false; - } - - $value = substr($value, 0, $lastcolon) . ':0:0'; - } - - if (strpos($value, '::') === false) { - return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value); - } - - $colonCount = substr_count($value, ':'); - if ($colonCount < 8) { - return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value); - } - - // special case with ending or starting double colon - if ($colonCount == 8) { - return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value); - } - - return false; - } - - /** - * Validates an IPvFuture address. - * - * IPvFuture is loosely defined in the Section 3.2.2 of RFC 3986 - * - * @param string $value Value to check against - * @return bool True when $value is a valid IPvFuture address - * False otherwise - */ - protected function validateIPvFuture($value) - { - /* - * ABNF: - * IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," - * / ";" / "=" - */ - static $regex = '/^v([[:xdigit:]]+)\.[[:alnum:]\-\._~!\$&\'\(\)\*\+,;=:]+$/'; - - $result = (bool) preg_match($regex, $value, $matches); - - /* - * "As such, implementations must not provide the version flag for the - * existing IPv4 and IPv6 literal address forms described below." - */ - return ($result && $matches[1] != 4 && $matches[1] != 6); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php b/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php deleted file mode 100644 index d45fabdae9..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace Zend\Validator; - -use Traversable; - -class IsInstanceOf extends AbstractValidator -{ - const NOT_INSTANCE_OF = 'notInstanceOf'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_INSTANCE_OF => "The input is not an instance of '%className%'", - ); - - /** - * Additional variables available for validation failure messages - * - * @var array - */ - protected $messageVariables = array( - 'className' => 'className' - ); - - /** - * Class name - * - * @var string - */ - protected $className; - - /** - * Sets validator options - * - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } - - // If argument is not an array, consider first argument as class name - if (!is_array($options)) { - $options = func_get_args(); - - $tmpOptions = array(); - $tmpOptions['className'] = array_shift($options); - - $options = $tmpOptions; - } - - if (!array_key_exists('className', $options)) { - throw new Exception\InvalidArgumentException('Missing option "className"'); - } - - parent::__construct($options); - } - - /** - * Get class name - * - * @return string - */ - public function getClassName() - { - return $this->className; - } - - /** - * Set class name - * - * @param string $className - * @return self - */ - public function setClassName($className) - { - $this->className = $className; - return $this; - } - - /** - * Returns true if $value is instance of $this->className - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - if ($value instanceof $this->className) { - return true; - } - $this->error(self::NOT_INSTANCE_OF); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Isbn.php b/civicrm/vendor/zendframework/zend-validator/src/Isbn.php deleted file mode 100644 index 00f7324b80..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Isbn.php +++ /dev/null @@ -1,208 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -class Isbn extends AbstractValidator -{ - const AUTO = 'auto'; - const ISBN10 = '10'; - const ISBN13 = '13'; - const INVALID = 'isbnInvalid'; - const NO_ISBN = 'isbnNoIsbn'; - - /** - * Validation failure message template definitions. - * - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String or integer expected", - self::NO_ISBN => "The input is not a valid ISBN number", - ); - - protected $options = array( - 'type' => self::AUTO, // Allowed type - 'separator' => '', // Separator character - ); - - /** - * Detect input format. - * - * @return string - */ - protected function detectFormat() - { - // prepare separator and pattern list - $sep = quotemeta($this->getSeparator()); - $patterns = array(); - $lengths = array(); - $type = $this->getType(); - - // check for ISBN-10 - if ($type == self::ISBN10 || $type == self::AUTO) { - if (empty($sep)) { - $pattern = '/^[0-9]{9}[0-9X]{1}$/'; - $length = 10; - } else { - $pattern = "/^[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9X]{1}$/"; - $length = 13; - } - - $patterns[$pattern] = self::ISBN10; - $lengths[$pattern] = $length; - } - - // check for ISBN-13 - if ($type == self::ISBN13 || $type == self::AUTO) { - if (empty($sep)) { - $pattern = '/^[0-9]{13}$/'; - $length = 13; - } else { - $pattern = "/^[0-9]{1,9}[{$sep}]{1}[0-9]{1,5}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1}$/"; - $length = 17; - } - - $patterns[$pattern] = self::ISBN13; - $lengths[$pattern] = $length; - } - - // check pattern list - foreach ($patterns as $pattern => $type) { - if ((strlen($this->getValue()) == $lengths[$pattern]) && preg_match($pattern, $this->getValue())) { - return $type; - } - } - - return; - } - - /** - * Returns true if and only if $value is a valid ISBN. - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value) && !is_int($value)) { - $this->error(self::INVALID); - return false; - } - - $value = (string) $value; - $this->setValue($value); - - switch ($this->detectFormat()) { - case self::ISBN10: - // sum - $isbn10 = str_replace($this->getSeparator(), '', $value); - $sum = 0; - for ($i = 0; $i < 9; $i++) { - $sum += (10 - $i) * $isbn10{$i}; - } - - // checksum - $checksum = 11 - ($sum % 11); - if ($checksum == 11) { - $checksum = '0'; - } elseif ($checksum == 10) { - $checksum = 'X'; - } - break; - - case self::ISBN13: - // sum - $isbn13 = str_replace($this->getSeparator(), '', $value); - $sum = 0; - for ($i = 0; $i < 12; $i++) { - if ($i % 2 == 0) { - $sum += $isbn13{$i}; - } else { - $sum += 3 * $isbn13{$i}; - } - } - // checksum - $checksum = 10 - ($sum % 10); - if ($checksum == 10) { - $checksum = '0'; - } - break; - - default: - $this->error(self::NO_ISBN); - return false; - } - - // validate - if (substr($this->getValue(), -1) != $checksum) { - $this->error(self::NO_ISBN); - return false; - } - return true; - } - - /** - * Set separator characters. - * - * It is allowed only empty string, hyphen and space. - * - * @param string $separator - * @throws Exception\InvalidArgumentException When $separator is not valid - * @return Isbn Provides a fluent interface - */ - public function setSeparator($separator) - { - // check separator - if (!in_array($separator, array('-', ' ', ''))) { - throw new Exception\InvalidArgumentException('Invalid ISBN separator.'); - } - - $this->options['separator'] = $separator; - return $this; - } - - /** - * Get separator characters. - * - * @return string - */ - public function getSeparator() - { - return $this->options['separator']; - } - - /** - * Set allowed ISBN type. - * - * @param string $type - * @throws Exception\InvalidArgumentException When $type is not valid - * @return Isbn Provides a fluent interface - */ - public function setType($type) - { - // check type - if (!in_array($type, array(self::AUTO, self::ISBN10, self::ISBN13))) { - throw new Exception\InvalidArgumentException('Invalid ISBN type'); - } - - $this->options['type'] = $type; - return $this; - } - - /** - * Get allowed ISBN type. - * - * @return string - */ - public function getType() - { - return $this->options['type']; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/LessThan.php b/civicrm/vendor/zendframework/zend-validator/src/LessThan.php deleted file mode 100644 index 0dbaee1a64..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/LessThan.php +++ /dev/null @@ -1,161 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class LessThan extends AbstractValidator -{ - const NOT_LESS = 'notLessThan'; - const NOT_LESS_INCLUSIVE = 'notLessThanInclusive'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_LESS => "The input is not less than '%max%'", - self::NOT_LESS_INCLUSIVE => "The input is not less or equal than '%max%'" - ); - - /** - * Additional variables available for validation failure messages - * - * @var array - */ - protected $messageVariables = array( - 'max' => 'max' - ); - - /** - * Maximum value - * - * @var mixed - */ - protected $max; - - /** - * Whether to do inclusive comparisons, allowing equivalence to max - * - * If false, then strict comparisons are done, and the value may equal - * the max option - * - * @var bool - */ - protected $inclusive; - - /** - * Sets validator options - * - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - if (!is_array($options)) { - $options = func_get_args(); - $temp['max'] = array_shift($options); - - if (!empty($options)) { - $temp['inclusive'] = array_shift($options); - } - - $options = $temp; - } - - if (!array_key_exists('max', $options)) { - throw new Exception\InvalidArgumentException("Missing option 'max'"); - } - - if (!array_key_exists('inclusive', $options)) { - $options['inclusive'] = false; - } - - $this->setMax($options['max']) - ->setInclusive($options['inclusive']); - - parent::__construct($options); - } - - /** - * Returns the max option - * - * @return mixed - */ - public function getMax() - { - return $this->max; - } - - /** - * Sets the max option - * - * @param mixed $max - * @return LessThan Provides a fluent interface - */ - public function setMax($max) - { - $this->max = $max; - return $this; - } - - /** - * Returns the inclusive option - * - * @return bool - */ - public function getInclusive() - { - return $this->inclusive; - } - - /** - * Sets the inclusive option - * - * @param bool $inclusive - * @return LessThan Provides a fluent interface - */ - public function setInclusive($inclusive) - { - $this->inclusive = $inclusive; - return $this; - } - - /** - * Returns true if and only if $value is less than max option, inclusively - * when the inclusive option is true - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - $this->setValue($value); - - if ($this->inclusive) { - if ($value > $this->max) { - $this->error(self::NOT_LESS_INCLUSIVE); - return false; - } - } else { - if ($value >= $this->max) { - $this->error(self::NOT_LESS); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php b/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php deleted file mode 100644 index 9621a5d616..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php +++ /dev/null @@ -1,301 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; - -class NotEmpty extends AbstractValidator -{ - const BOOLEAN = 0x001; - const INTEGER = 0x002; - const FLOAT = 0x004; - const STRING = 0x008; - const ZERO = 0x010; - const EMPTY_ARRAY = 0x020; - const NULL = 0x040; - const PHP = 0x07F; - const SPACE = 0x080; - const OBJECT = 0x100; - const OBJECT_STRING = 0x200; - const OBJECT_COUNT = 0x400; - const ALL = 0x7FF; - - const INVALID = 'notEmptyInvalid'; - const IS_EMPTY = 'isEmpty'; - - protected $constants = array( - self::BOOLEAN => 'boolean', - self::INTEGER => 'integer', - self::FLOAT => 'float', - self::STRING => 'string', - self::ZERO => 'zero', - self::EMPTY_ARRAY => 'array', - self::NULL => 'null', - self::PHP => 'php', - self::SPACE => 'space', - self::OBJECT => 'object', - self::OBJECT_STRING => 'objectstring', - self::OBJECT_COUNT => 'objectcount', - self::ALL => 'all', - ); - - /** - * Default value for types; value = 0b000111101001 - * - * @var array - */ - protected $defaultType = array( - self::OBJECT, - self::SPACE, - self::NULL, - self::EMPTY_ARRAY, - self::STRING, - self::BOOLEAN - ); - - /** - * @var array - */ - protected $messageTemplates = array( - self::IS_EMPTY => "Value is required and can't be empty", - self::INVALID => "Invalid type given. String, integer, float, boolean or array expected", - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array(); - - /** - * Constructor - * - * @param array|Traversable|int $options OPTIONAL - */ - public function __construct($options = null) - { - $this->setType($this->defaultType); - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - $options = func_get_args(); - $temp = array(); - if (!empty($options)) { - $temp['type'] = array_shift($options); - } - - $options = $temp; - } - - if (is_array($options)) { - if (!array_key_exists('type', $options)) { - $detected = 0; - $found = false; - foreach ($options as $option) { - if (in_array($option, $this->constants, true)) { - $found = true; - $detected += array_search($option, $this->constants); - } - } - - if ($found) { - $options['type'] = $detected; - } - } - } - - parent::__construct($options); - } - - /** - * Returns the set types - * - * @return array - */ - public function getType() - { - return $this->options['type']; - } - - /** - * @return int - */ - public function getDefaultType() - { - return $this->calculateTypeValue($this->defaultType); - } - - /** - * @param array|int|string $type - * @return int - */ - protected function calculateTypeValue($type) - { - if (is_array($type)) { - $detected = 0; - foreach ($type as $value) { - if (is_int($value)) { - $detected |= $value; - } elseif (in_array($value, $this->constants)) { - $detected |= array_search($value, $this->constants); - } - } - - $type = $detected; - } elseif (is_string($type) && in_array($type, $this->constants)) { - $type = array_search($type, $this->constants); - } - - return $type; - } - - /** - * Set the types - * - * @param int|array $type - * @throws Exception\InvalidArgumentException - * @return NotEmpty - */ - public function setType($type = null) - { - $type = $this->calculateTypeValue($type); - - if (!is_int($type) || ($type < 0) || ($type > self::ALL)) { - throw new Exception\InvalidArgumentException('Unknown type'); - } - - $this->options['type'] = $type; - - return $this; - } - - /** - * Returns true if and only if $value is not an empty value. - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if ($value !== null && !is_string($value) && !is_int($value) && !is_float($value) && - !is_bool($value) && !is_array($value) && !is_object($value) - ) { - $this->error(self::INVALID); - return false; - } - - $type = $this->getType(); - $this->setValue($value); - $object = false; - - // OBJECT_COUNT (countable object) - if ($type & self::OBJECT_COUNT) { - $object = true; - - if (is_object($value) && ($value instanceof \Countable) && (count($value) == 0)) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // OBJECT_STRING (object's toString) - if ($type & self::OBJECT_STRING) { - $object = true; - - if ((is_object($value) && (!method_exists($value, '__toString'))) || - (is_object($value) && (method_exists($value, '__toString')) && (((string) $value) == ""))) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // OBJECT (object) - if ($type & self::OBJECT) { - // fall trough, objects are always not empty - } elseif ($object === false) { - // object not allowed but object given -> return false - if (is_object($value)) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // SPACE (' ') - if ($type & self::SPACE) { - if (is_string($value) && (preg_match('/^\s+$/s', $value))) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // NULL (null) - if ($type & self::NULL) { - if ($value === null) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // EMPTY_ARRAY (array()) - if ($type & self::EMPTY_ARRAY) { - if (is_array($value) && ($value == array())) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // ZERO ('0') - if ($type & self::ZERO) { - if (is_string($value) && ($value == '0')) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // STRING ('') - if ($type & self::STRING) { - if (is_string($value) && ($value == '')) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // FLOAT (0.0) - if ($type & self::FLOAT) { - if (is_float($value) && ($value == 0.0)) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // INTEGER (0) - if ($type & self::INTEGER) { - if (is_int($value) && ($value == 0)) { - $this->error(self::IS_EMPTY); - return false; - } - } - - // BOOLEAN (false) - if ($type & self::BOOLEAN) { - if (is_bool($value) && ($value == false)) { - $this->error(self::IS_EMPTY); - return false; - } - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Regex.php b/civicrm/vendor/zendframework/zend-validator/src/Regex.php deleted file mode 100644 index b8dfb2fa25..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Regex.php +++ /dev/null @@ -1,141 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Stdlib\ArrayUtils; -use Zend\Stdlib\ErrorHandler; - -class Regex extends AbstractValidator -{ - const INVALID = 'regexInvalid'; - const NOT_MATCH = 'regexNotMatch'; - const ERROROUS = 'regexErrorous'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String, integer or float expected", - self::NOT_MATCH => "The input does not match against pattern '%pattern%'", - self::ERROROUS => "There was an internal error while using the pattern '%pattern%'", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'pattern' => 'pattern' - ); - - /** - * Regular expression pattern - * - * @var string - */ - protected $pattern; - - /** - * Sets validator options - * - * @param string|Traversable $pattern - * @throws Exception\InvalidArgumentException On missing 'pattern' parameter - */ - public function __construct($pattern) - { - if (is_string($pattern)) { - $this->setPattern($pattern); - parent::__construct(array()); - return; - } - - if ($pattern instanceof Traversable) { - $pattern = ArrayUtils::iteratorToArray($pattern); - } - - if (!is_array($pattern)) { - throw new Exception\InvalidArgumentException('Invalid options provided to constructor'); - } - - if (!array_key_exists('pattern', $pattern)) { - throw new Exception\InvalidArgumentException("Missing option 'pattern'"); - } - - $this->setPattern($pattern['pattern']); - unset($pattern['pattern']); - parent::__construct($pattern); - } - - /** - * Returns the pattern option - * - * @return string - */ - public function getPattern() - { - return $this->pattern; - } - - /** - * Sets the pattern option - * - * @param string $pattern - * @throws Exception\InvalidArgumentException if there is a fatal error in pattern matching - * @return Regex Provides a fluent interface - */ - public function setPattern($pattern) - { - ErrorHandler::start(); - $this->pattern = (string) $pattern; - $status = preg_match($this->pattern, "Test"); - $error = ErrorHandler::stop(); - - if (false === $status) { - throw new Exception\InvalidArgumentException( - "Internal error parsing the pattern '{$this->pattern}'", - 0, - $error - ); - } - - return $this; - } - - /** - * Returns true if and only if $value matches against the pattern option - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value) && !is_int($value) && !is_float($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - - ErrorHandler::start(); - $status = preg_match($this->pattern, $value); - ErrorHandler::stop(); - if (false === $status) { - $this->error(self::ERROROUS); - return false; - } - - if (!$status) { - $this->error(self::NOT_MATCH); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php deleted file mode 100644 index 090d8042e1..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Sitemap; - -use Zend\Validator\AbstractValidator; - -/** - * Validates whether a given value is valid as a sitemap <changefreq> value - * - * @link http://www.sitemaps.org/protocol.php Sitemaps XML format - */ -class Changefreq extends AbstractValidator -{ - /** - * Validation key for not valid - * - */ - const NOT_VALID = 'sitemapChangefreqNotValid'; - const INVALID = 'sitemapChangefreqInvalid'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_VALID => "The input is not a valid sitemap changefreq", - self::INVALID => "Invalid type given. String expected", - ); - - /** - * Valid change frequencies - * - * @var array - */ - protected $changeFreqs = array( - 'always', 'hourly', 'daily', 'weekly', - 'monthly', 'yearly', 'never' - ); - - /** - * Validates if a string is valid as a sitemap changefreq - * - * @link http://www.sitemaps.org/protocol.php#changefreqdef <changefreq> - * - * @param string $value value to validate - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - if (!is_string($value)) { - return false; - } - - if (!in_array($value, $this->changeFreqs, true)) { - $this->error(self::NOT_VALID); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php deleted file mode 100644 index 49293ab729..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Sitemap; - -use Zend\Stdlib\ErrorHandler; -use Zend\Validator\AbstractValidator; - -/** - * Validates whether a given value is valid as a sitemap <lastmod> value - * - * @link http://www.sitemaps.org/protocol.php Sitemaps XML format - */ -class Lastmod extends AbstractValidator -{ - /** - * Regular expression to use when validating - * - */ - const LASTMOD_REGEX = '/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])(T([0-1][0-9]|2[0-3])(:[0-5][0-9])(:[0-5][0-9])?(\\+|-)([0-1][0-9]|2[0-3]):[0-5][0-9])?$/'; - - /** - * Validation key for not valid - * - */ - const NOT_VALID = 'sitemapLastmodNotValid'; - const INVALID = 'sitemapLastmodInvalid'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_VALID => "The input is not a valid sitemap lastmod", - self::INVALID => "Invalid type given. String expected", - ); - - /** - * Validates if a string is valid as a sitemap lastmod - * - * @link http://www.sitemaps.org/protocol.php#lastmoddef <lastmod> - * - * @param string $value value to validate - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - ErrorHandler::start(); - $result = preg_match(self::LASTMOD_REGEX, $value); - ErrorHandler::stop(); - if ($result != 1) { - $this->error(self::NOT_VALID); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php deleted file mode 100644 index 5491917823..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Sitemap; - -use Zend\Uri; -use Zend\Validator\AbstractValidator; - -/** - * Validates whether a given value is valid as a sitemap <loc> value - * - * @link http://www.sitemaps.org/protocol.php Sitemaps XML format - * - * @see Zend\Uri\Uri - */ -class Loc extends AbstractValidator -{ - /** - * Validation key for not valid - * - */ - const NOT_VALID = 'sitemapLocNotValid'; - const INVALID = 'sitemapLocInvalid'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_VALID => "The input is not a valid sitemap location", - self::INVALID => "Invalid type given. String expected", - ); - - /** - * Validates if a string is valid as a sitemap location - * - * @link http://www.sitemaps.org/protocol.php#locdef <loc> - * - * @param string $value value to validate - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - $uri = Uri\UriFactory::factory($value); - if (!$uri->isValid()) { - $this->error(self::NOT_VALID); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php deleted file mode 100644 index ea536934b5..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Sitemap; - -use Zend\Validator\AbstractValidator; - -/** - * Validates whether a given value is valid as a sitemap <priority> value - * - * @link http://www.sitemaps.org/protocol.php Sitemaps XML format - */ -class Priority extends AbstractValidator -{ - /** - * Validation key for not valid - * - */ - const NOT_VALID = 'sitemapPriorityNotValid'; - const INVALID = 'sitemapPriorityInvalid'; - - /** - * Validation failure message template definitions - * - * @var array - */ - protected $messageTemplates = array( - self::NOT_VALID => "The input is not a valid sitemap priority", - self::INVALID => "Invalid type given. Numeric string, integer or float expected", - ); - - /** - * Validates if a string is valid as a sitemap priority - * - * @link http://www.sitemaps.org/protocol.php#prioritydef <priority> - * - * @param string $value value to validate - * @return bool - */ - public function isValid($value) - { - if (!is_numeric($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - $value = (float) $value; - if ($value < 0 || $value > 1) { - $this->error(self::NOT_VALID); - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php b/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php deleted file mode 100644 index dea88364cd..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -class StaticValidator -{ - /** - * @var ValidatorPluginManager - */ - protected static $plugins; - - /** - * Set plugin manager to use for locating validators - * - * @param ValidatorPluginManager|null $plugins - * @return void - */ - public static function setPluginManager(ValidatorPluginManager $plugins = null) - { - // Don't share by default to allow different arguments on subsequent calls - if ($plugins instanceof ValidatorPluginManager) { - $plugins->setShareByDefault(false); - } - static::$plugins = $plugins; - } - - /** - * Get plugin manager for locating validators - * - * @return ValidatorPluginManager - */ - public static function getPluginManager() - { - if (null === static::$plugins) { - static::setPluginManager(new ValidatorPluginManager()); - } - return static::$plugins; - } - - /** - * @param mixed $value - * @param string $classBaseName - * @param array $args OPTIONAL - * @return bool - */ - public static function execute($value, $classBaseName, array $args = array()) - { - $plugins = static::getPluginManager(); - - $validator = $plugins->get($classBaseName, $args); - return $validator->isValid($value); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Step.php b/civicrm/vendor/zendframework/zend-validator/src/Step.php deleted file mode 100644 index b9e9e1ad9c..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Step.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; - -class Step extends AbstractValidator -{ - const INVALID = 'typeInvalid'; - const NOT_STEP = 'stepInvalid'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid value given. Scalar expected", - self::NOT_STEP => "The input is not a valid step" - ); - - /** - * @var mixed - */ - protected $baseValue = 0; - - /** - * @var mixed - */ - protected $step = 1; - - /** - * Set default options for this instance - * - * @param array $options - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } elseif (!is_array($options)) { - $options = func_get_args(); - $temp['baseValue'] = array_shift($options); - if (!empty($options)) { - $temp['step'] = array_shift($options); - } - - $options = $temp; - } - - if (isset($options['baseValue'])) { - $this->setBaseValue($options['baseValue']); - } - if (isset($options['step'])) { - $this->setStep($options['step']); - } - - parent::__construct($options); - } - - /** - * Sets the base value from which the step should be computed - * - * @param mixed $baseValue - * @return Step - */ - public function setBaseValue($baseValue) - { - $this->baseValue = $baseValue; - return $this; - } - - /** - * Returns the base value from which the step should be computed - * - * @return string - */ - public function getBaseValue() - { - return $this->baseValue; - } - - /** - * Sets the step value - * - * @param mixed $step - * @return Step - */ - public function setStep($step) - { - $this->step = (float) $step; - return $this; - } - - /** - * Returns the step value - * - * @return string - */ - public function getStep() - { - return $this->step; - } - - /** - * Returns true if $value is a scalar and a valid step value - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - if (!is_numeric($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - - $fmod = $this->fmod($value - $this->baseValue, $this->step); - - if ($fmod !== 0.0 && $fmod !== $this->step) { - $this->error(self::NOT_STEP); - return false; - } - - return true; - } - - /** - * replaces the internal fmod function which give wrong results on many cases - * - * @param float $x - * @param float $y - * @return float - */ - protected function fmod($x, $y) - { - if ($y == 0.0) { - return 1.0; - } - - //find the maximum precision from both input params to give accurate results - $xFloatSegment = substr($x, strpos($x, '.') + 1) ?: ''; - $yFloatSegment = substr($y, strpos($y, '.') + 1) ?: ''; - $precision = strlen($xFloatSegment) + strlen($yFloatSegment); - - return round($x - $y * floor($x / $y), $precision); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/StringLength.php b/civicrm/vendor/zendframework/zend-validator/src/StringLength.php deleted file mode 100644 index b07a6c31ef..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/StringLength.php +++ /dev/null @@ -1,211 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Zend\Stdlib\StringUtils; -use Zend\Stdlib\StringWrapper\StringWrapperInterface as StringWrapper; - -class StringLength extends AbstractValidator -{ - const INVALID = 'stringLengthInvalid'; - const TOO_SHORT = 'stringLengthTooShort'; - const TOO_LONG = 'stringLengthTooLong'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String expected", - self::TOO_SHORT => "The input is less than %min% characters long", - self::TOO_LONG => "The input is more than %max% characters long", - ); - - /** - * @var array - */ - protected $messageVariables = array( - 'min' => array('options' => 'min'), - 'max' => array('options' => 'max'), - ); - - protected $options = array( - 'min' => 0, // Minimum length - 'max' => null, // Maximum length, null if there is no length limitation - 'encoding' => 'UTF-8', // Encoding to use - ); - - protected $stringWrapper; - - /** - * Sets validator options - * - * @param int|array|\Traversable $options - */ - public function __construct($options = array()) - { - if (!is_array($options)) { - $options = func_get_args(); - $temp['min'] = array_shift($options); - if (!empty($options)) { - $temp['max'] = array_shift($options); - } - - if (!empty($options)) { - $temp['encoding'] = array_shift($options); - } - - $options = $temp; - } - - parent::__construct($options); - } - - /** - * Returns the min option - * - * @return int - */ - public function getMin() - { - return $this->options['min']; - } - - /** - * Sets the min option - * - * @param int $min - * @throws Exception\InvalidArgumentException - * @return StringLength Provides a fluent interface - */ - public function setMin($min) - { - if (null !== $this->getMax() && $min > $this->getMax()) { - throw new Exception\InvalidArgumentException( - "The minimum must be less than or equal to the maximum length, but {$min} > {$this->getMax()}" - ); - } - - $this->options['min'] = max(0, (int) $min); - return $this; - } - - /** - * Returns the max option - * - * @return int|null - */ - public function getMax() - { - return $this->options['max']; - } - - /** - * Sets the max option - * - * @param int|null $max - * @throws Exception\InvalidArgumentException - * @return StringLength Provides a fluent interface - */ - public function setMax($max) - { - if (null === $max) { - $this->options['max'] = null; - } elseif ($max < $this->getMin()) { - throw new Exception\InvalidArgumentException( - "The maximum must be greater than or equal to the minimum length, but {$max} < {$this->getMin()}" - ); - } else { - $this->options['max'] = (int) $max; - } - - return $this; - } - - /** - * Get the string wrapper to detect the string length - * - * @return StringWrapper - */ - public function getStringWrapper() - { - if (!$this->stringWrapper) { - $this->stringWrapper = StringUtils::getWrapper($this->getEncoding()); - } - return $this->stringWrapper; - } - - /** - * Set the string wrapper to detect the string length - * - * @param StringWrapper $stringWrapper - * @return StringLength - */ - public function setStringWrapper(StringWrapper $stringWrapper) - { - $stringWrapper->setEncoding($this->getEncoding()); - $this->stringWrapper = $stringWrapper; - } - - /** - * Returns the actual encoding - * - * @return string - */ - public function getEncoding() - { - return $this->options['encoding']; - } - - /** - * Sets a new encoding to use - * - * @param string $encoding - * @return StringLength - * @throws Exception\InvalidArgumentException - */ - public function setEncoding($encoding) - { - $this->stringWrapper = StringUtils::getWrapper($encoding); - $this->options['encoding'] = $encoding; - return $this; - } - - /** - * Returns true if and only if the string length of $value is at least the min option and - * no greater than the max option (when the max option is not null). - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $this->setValue($value); - - $length = $this->getStringWrapper()->strlen($value); - if ($length < $this->getMin()) { - $this->error(self::TOO_SHORT); - } - - if (null !== $this->getMax() && $this->getMax() < $length) { - $this->error(self::TOO_LONG); - } - - if (count($this->getMessages())) { - return false; - } - - return true; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Timezone.php b/civicrm/vendor/zendframework/zend-validator/src/Timezone.php deleted file mode 100644 index dd1ab7ebc2..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Timezone.php +++ /dev/null @@ -1,174 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use DateTimeZone; - -class Timezone extends AbstractValidator -{ - const INVALID = 'invalidTimezone'; - const INVALID_TIMEZONE_LOCATION = 'invalidTimezoneLocation'; - const INVALID_TIMEZONE_ABBREVIATION = 'invalidTimezoneAbbreviation'; - - const LOCATION = 0x01; - const ABBREVIATION = 0x02; - const ALL = 0x03; - - /** - * @var array - */ - protected $constants = array( - self::LOCATION => 'location', - self::ABBREVIATION => 'abbreviation', - ); - - /** - * Default value for types; value = 3 - * - * @var array - */ - protected $defaultType = array( - self::LOCATION, - self::ABBREVIATION, - ); - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => 'Invalid timezone given.', - self::INVALID_TIMEZONE_LOCATION => 'Invalid timezone location given.', - self::INVALID_TIMEZONE_ABBREVIATION => 'Invalid timezone abbreviation given.', - ); - - /** - * Options for this validator - * - * @var array - */ - protected $options = array(); - - /** - * Constructor - * - * @param array|int $options OPTIONAL - */ - public function __construct($options = array()) - { - $opts['type'] = $this->defaultType; - - if (is_array($options)) { - if (array_key_exists('type', $options)) { - $opts['type'] = $options['type']; - } - } elseif (! empty($options)) { - $opts['type'] = $options; - } - - // setType called by parent constructor then setOptions method - parent::__construct($opts); - } - - /** - * Set the types - * - * @param int|array $type - * - * @throws Exception\InvalidArgumentException - */ - public function setType($type = null) - { - $type = $this->calculateTypeValue($type); - - if (!is_int($type) || ($type < 1) || ($type > self::ALL)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Unknown type "%s" provided', - (is_string($type) || is_int($type)) - ? $type - : (is_object($type) ? get_class($type) : gettype($type)) - )); - } - - $this->options['type'] = $type; - } - - /** - * Returns true if timezone location or timezone abbreviations is correct. - * - * @param mixed $value - * @return bool - */ - public function isValid($value) - { - if ($value !== null && !is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $type = $this->options['type']; - $this->setValue($value); - - switch (true) { - // Check in locations and abbreviations - case (($type & self::LOCATION) && ($type & self::ABBREVIATION)): - $abbrs = DateTimeZone::listAbbreviations(); - $locations = DateTimeZone::listIdentifiers(); - - if (!array_key_exists($value, $abbrs) && !in_array($value, $locations)) { - $this->error(self::INVALID); - return false; - } - break; - - // Check only in locations - case ($type & self::LOCATION): - $locations = DateTimeZone::listIdentifiers(); - - if (!in_array($value, $locations)) { - $this->error(self::INVALID_TIMEZONE_LOCATION); - return false; - } - break; - - // Check only in abbreviations - case ($type & self::ABBREVIATION): - $abbrs = DateTimeZone::listAbbreviations(); - - if (!array_key_exists($value, $abbrs)) { - $this->error(self::INVALID_TIMEZONE_ABBREVIATION); - return false; - } - break; - } - - return true; - } - - /** - * @param array|int|string $type - * - * @return int - */ - protected function calculateTypeValue($type) - { - $types = (array) $type; - $detected = 0; - - foreach ($types as $value) { - if (is_int($value)) { - $detected |= $value; - } elseif (false !== ($position = array_search($value, $this->constants))) { - $detected |= array_search($value, $this->constants); - } - } - - return $detected; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php deleted file mode 100644 index fd0af1fd3c..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - *; - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Translator; - -interface TranslatorAwareInterface -{ - /** - * Sets translator to use in helper - * - * @param TranslatorInterface $translator [optional] translator. - * Default is null, which sets no translator. - * @param string $textDomain [optional] text domain - * Default is null, which skips setTranslatorTextDomain - * @return self - */ - public function setTranslator(TranslatorInterface $translator = null, $textDomain = null); - - /** - * Returns translator used in object - * - * @return TranslatorInterface|null - */ - public function getTranslator(); - - /** - * Checks if the object has a translator - * - * @return bool - */ - public function hasTranslator(); - - /** - * Sets whether translator is enabled and should be used - * - * @param bool $enabled [optional] whether translator should be used. - * Default is true. - * @return self - */ - public function setTranslatorEnabled($enabled = true); - - /** - * Returns whether translator is enabled and should be used - * - * @return bool - */ - public function isTranslatorEnabled(); - - /** - * Set translation text domain - * - * @param string $textDomain - * @return TranslatorAwareInterface - */ - public function setTranslatorTextDomain($textDomain = 'default'); - - /** - * Return the translation text domain - * - * @return string - */ - public function getTranslatorTextDomain(); -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php deleted file mode 100644 index 3439e91a53..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator\Translator; - -interface TranslatorInterface -{ - /** - * @param string $message - * @param string $textDomain - * @param string $locale - * @return string - */ - public function translate($message, $textDomain = 'default', $locale = null); -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/Uri.php b/civicrm/vendor/zendframework/zend-validator/src/Uri.php deleted file mode 100644 index a6e5eab2bd..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/Uri.php +++ /dev/null @@ -1,192 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Traversable; -use Zend\Uri\Exception\ExceptionInterface as UriException; -use Zend\Uri\Uri as UriHandler; -use Zend\Validator\Exception\InvalidArgumentException; - -class Uri extends AbstractValidator -{ - const INVALID = 'uriInvalid'; - const NOT_URI = 'notUri'; - - /** - * @var array - */ - protected $messageTemplates = array( - self::INVALID => "Invalid type given. String expected", - self::NOT_URI => "The input does not appear to be a valid Uri", - ); - - /** - * @var UriHandler - */ - protected $uriHandler; - - /** - * @var bool - */ - protected $allowRelative = true; - - /** - * @var bool - */ - protected $allowAbsolute = true; - - /** - * Sets default option values for this instance - * - * @param array|Traversable $options - */ - public function __construct($options = array()) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } elseif (!is_array($options)) { - $options = func_get_args(); - $temp['uriHandler'] = array_shift($options); - if (!empty($options)) { - $temp['allowRelative'] = array_shift($options); - } - if (!empty($options)) { - $temp['allowAbsolute'] = array_shift($options); - } - - $options = $temp; - } - - if (isset($options['uriHandler'])) { - $this->setUriHandler($options['uriHandler']); - } - if (isset($options['allowRelative'])) { - $this->setAllowRelative($options['allowRelative']); - } - if (isset($options['allowAbsolute'])) { - $this->setAllowAbsolute($options['allowAbsolute']); - } - - parent::__construct($options); - } - - /** - * @throws InvalidArgumentException - * @return UriHandler - */ - public function getUriHandler() - { - if (null === $this->uriHandler) { - // Lazy load the base Uri handler - $this->uriHandler = new UriHandler(); - } elseif (is_string($this->uriHandler) && class_exists($this->uriHandler)) { - // Instantiate string Uri handler that references a class - $this->uriHandler = new $this->uriHandler; - } - - if (! $this->uriHandler instanceof UriHandler) { - throw new InvalidArgumentException('URI handler is expected to be a Zend\Uri\Uri object'); - } - - return $this->uriHandler; - } - - /** - * @param UriHandler $uriHandler - * @throws InvalidArgumentException - * @return Uri - */ - public function setUriHandler($uriHandler) - { - if (! is_subclass_of($uriHandler, 'Zend\Uri\Uri')) { - throw new InvalidArgumentException('Expecting a subclass name or instance of Zend\Uri\Uri as $uriHandler'); - } - - $this->uriHandler = $uriHandler; - return $this; - } - - /** - * Returns the allowAbsolute option - * - * @return bool - */ - public function getAllowAbsolute() - { - return $this->allowAbsolute; - } - - /** - * Sets the allowAbsolute option - * - * @param bool $allowAbsolute - * @return Uri - */ - public function setAllowAbsolute($allowAbsolute) - { - $this->allowAbsolute = (bool) $allowAbsolute; - return $this; - } - - /** - * Returns the allowRelative option - * - * @return bool - */ - public function getAllowRelative() - { - return $this->allowRelative; - } - - /** - * Sets the allowRelative option - * - * @param bool $allowRelative - * @return Uri - */ - public function setAllowRelative($allowRelative) - { - $this->allowRelative = (bool) $allowRelative; - return $this; - } - - /** - * Returns true if and only if $value validates as a Uri - * - * @param string $value - * @return bool - */ - public function isValid($value) - { - if (!is_string($value)) { - $this->error(self::INVALID); - return false; - } - - $uriHandler = $this->getUriHandler(); - try { - $uriHandler->parse($value); - if ($uriHandler->isValid()) { - // It will either be a valid absolute or relative URI - if (($this->allowRelative && $this->allowAbsolute) - || ($this->allowAbsolute && $uriHandler->isAbsolute()) - || ($this->allowRelative && $uriHandler->isValidRelative()) - ) { - return true; - } - } - } catch (UriException $ex) { - // Error parsing URI, it must be invalid - } - - $this->error(self::NOT_URI); - return false; - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php deleted file mode 100644 index 604afbfbed..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php +++ /dev/null @@ -1,324 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Countable; -use Zend\Stdlib\PriorityQueue; - -class ValidatorChain implements - Countable, - ValidatorInterface -{ - /** - * Default priority at which validators are added - */ - const DEFAULT_PRIORITY = 1; - - /** - * @var ValidatorPluginManager - */ - protected $plugins; - - /** - * Validator chain - * - * @var PriorityQueue - */ - protected $validators; - - /** - * Array of validation failure messages - * - * @var array - */ - protected $messages = array(); - - /** - * Initialize validator chain - */ - public function __construct() - { - $this->validators = new PriorityQueue(); - } - - /** - * Return the count of attached validators - * - * @return int - */ - public function count() - { - return count($this->validators); - } - - /** - * Get plugin manager instance - * - * @return ValidatorPluginManager - */ - public function getPluginManager() - { - if (!$this->plugins) { - $this->setPluginManager(new ValidatorPluginManager()); - } - return $this->plugins; - } - - /** - * Set plugin manager instance - * - * @param ValidatorPluginManager $plugins Plugin manager - * @return ValidatorChain - */ - public function setPluginManager(ValidatorPluginManager $plugins) - { - $this->plugins = $plugins; - return $this; - } - - /** - * Retrieve a validator by name - * - * @param string $name Name of validator to return - * @param null|array $options Options to pass to validator constructor (if not already instantiated) - * @return ValidatorInterface - */ - public function plugin($name, array $options = null) - { - $plugins = $this->getPluginManager(); - return $plugins->get($name, $options); - } - - /** - * Attach a validator to the end of the chain - * - * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain, - * if one exists, will not be executed. - * - * @param ValidatorInterface $validator - * @param bool $breakChainOnFailure - * @param int $priority Priority at which to enqueue validator; defaults to - * 1 (higher executes earlier) - * - * @throws Exception\InvalidArgumentException - * - * @return self - */ - public function attach( - ValidatorInterface $validator, - $breakChainOnFailure = false, - $priority = self::DEFAULT_PRIORITY - ) { - $this->validators->insert( - array( - 'instance' => $validator, - 'breakChainOnFailure' => (bool) $breakChainOnFailure, - ), - $priority - ); - - return $this; - } - - /** - * Proxy to attach() to keep BC - * - * @deprecated Please use attach() - * @param ValidatorInterface $validator - * @param bool $breakChainOnFailure - * @param int $priority - * @return ValidatorChain Provides a fluent interface - */ - public function addValidator(ValidatorInterface $validator, $breakChainOnFailure = false, $priority = self::DEFAULT_PRIORITY) - { - return $this->attach($validator, $breakChainOnFailure, $priority); - } - - /** - * Adds a validator to the beginning of the chain - * - * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain, - * if one exists, will not be executed. - * - * @param ValidatorInterface $validator - * @param bool $breakChainOnFailure - * @return ValidatorChain Provides a fluent interface - */ - public function prependValidator(ValidatorInterface $validator, $breakChainOnFailure = false) - { - $priority = self::DEFAULT_PRIORITY; - - if (!$this->validators->isEmpty()) { - $queue = $this->validators->getIterator(); - $queue->setExtractFlags(PriorityQueue::EXTR_PRIORITY); - $extractedNode = $queue->extract(); - $priority = $extractedNode[0] + 1; - } - - $this->validators->insert( - array( - 'instance' => $validator, - 'breakChainOnFailure' => (bool) $breakChainOnFailure, - ), - $priority - ); - return $this; - } - - /** - * Use the plugin manager to add a validator by name - * - * @param string $name - * @param array $options - * @param bool $breakChainOnFailure - * @param int $priority - * @return ValidatorChain - */ - public function attachByName($name, $options = array(), $breakChainOnFailure = false, $priority = self::DEFAULT_PRIORITY) - { - if (isset($options['break_chain_on_failure'])) { - $breakChainOnFailure = (bool) $options['break_chain_on_failure']; - } - - if (isset($options['breakchainonfailure'])) { - $breakChainOnFailure = (bool) $options['breakchainonfailure']; - } - - $this->attach($this->plugin($name, $options), $breakChainOnFailure, $priority); - - return $this; - } - - /** - * Proxy to attachByName() to keep BC - * - * @deprecated Please use attachByName() - * @param string $name - * @param array $options - * @param bool $breakChainOnFailure - * @return ValidatorChain - */ - public function addByName($name, $options = array(), $breakChainOnFailure = false) - { - return $this->attachByName($name, $options, $breakChainOnFailure); - } - - /** - * Use the plugin manager to prepend a validator by name - * - * @param string $name - * @param array $options - * @param bool $breakChainOnFailure - * @return ValidatorChain - */ - public function prependByName($name, $options = array(), $breakChainOnFailure = false) - { - $validator = $this->plugin($name, $options); - $this->prependValidator($validator, $breakChainOnFailure); - return $this; - } - - /** - * Returns true if and only if $value passes all validations in the chain - * - * Validators are run in the order in which they were added to the chain (FIFO). - * - * @param mixed $value - * @param mixed $context Extra "context" to provide the validator - * @return bool - */ - public function isValid($value, $context = null) - { - $this->messages = array(); - $result = true; - foreach ($this->validators as $element) { - $validator = $element['instance']; - if ($validator->isValid($value, $context)) { - continue; - } - $result = false; - $messages = $validator->getMessages(); - $this->messages = array_replace_recursive($this->messages, $messages); - if ($element['breakChainOnFailure']) { - break; - } - } - return $result; - } - - /** - * Merge the validator chain with the one given in parameter - * - * @param ValidatorChain $validatorChain - * @return ValidatorChain - */ - public function merge(ValidatorChain $validatorChain) - { - foreach ($validatorChain->validators->toArray(PriorityQueue::EXTR_BOTH) as $item) { - $this->attach($item['data']['instance'], $item['data']['breakChainOnFailure'], $item['priority']); - } - - return $this; - } - - /** - * Returns array of validation failure messages - * - * @return array - */ - public function getMessages() - { - return $this->messages; - } - - /** - * Get all the validators - * - * @return PriorityQueue - */ - public function getValidators() - { - return $this->validators->toArray(PriorityQueue::EXTR_DATA); - } - - /** - * Invoke chain as command - * - * @param mixed $value - * @return bool - */ - public function __invoke($value) - { - return $this->isValid($value); - } - - /** - * Deep clone handling - */ - public function __clone() - { - $this->validators = clone $this->validators; - } - - /** - * Prepare validator chain for serialization - * - * Plugin manager (property 'plugins') cannot - * be serialized. On wakeup the property remains unset - * and next invocation to getPluginManager() sets - * the default plugin manager instance (ValidatorPluginManager). - * - * @return array - */ - public function __sleep() - { - return array('validators', 'messages'); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php deleted file mode 100644 index 6424ef7a63..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -interface ValidatorInterface -{ - /** - * Returns true if and only if $value meets the validation requirements - * - * If $value fails validation, then this method returns false, and - * getMessages() will return an array of messages that explain why the - * validation failed. - * - * @param mixed $value - * @return bool - * @throws Exception\RuntimeException If validation of $value is impossible - */ - public function isValid($value); - - /** - * Returns an array of messages that explain why the most recent isValid() - * call returned false. The array keys are validation failure message identifiers, - * and the array values are the corresponding human-readable message strings. - * - * If isValid() was never called or if the most recent isValid() call - * returned true, then this method returns an empty array. - * - * @return array - */ - public function getMessages(); -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php deleted file mode 100644 index 4a7c21b0da..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php +++ /dev/null @@ -1,196 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -use Zend\ServiceManager\AbstractPluginManager; -use Zend\ServiceManager\ConfigInterface; - -class ValidatorPluginManager extends AbstractPluginManager -{ - /** - * Default aliases - * - * @var array - */ - protected $aliases = array( - 'Zend\I18n\Validator\Float'=> 'Zend\I18n\Validator\IsFloat', - 'Zend\I18n\Validator\Int' => 'Zend\I18n\Validator\IsInt', - ); - - /** - * Default set of validators - * - * @var array - */ - protected $invokableClasses = array( - 'alnum' => 'Zend\I18n\Validator\Alnum', - 'alpha' => 'Zend\I18n\Validator\Alpha', - 'barcodecode25interleaved' => 'Zend\Validator\Barcode\Code25interleaved', - 'barcodecode25' => 'Zend\Validator\Barcode\Code25', - 'barcodecode39ext' => 'Zend\Validator\Barcode\Code39ext', - 'barcodecode39' => 'Zend\Validator\Barcode\Code39', - 'barcodecode93ext' => 'Zend\Validator\Barcode\Code93ext', - 'barcodecode93' => 'Zend\Validator\Barcode\Code93', - 'barcodeean12' => 'Zend\Validator\Barcode\Ean12', - 'barcodeean13' => 'Zend\Validator\Barcode\Ean13', - 'barcodeean14' => 'Zend\Validator\Barcode\Ean14', - 'barcodeean18' => 'Zend\Validator\Barcode\Ean18', - 'barcodeean2' => 'Zend\Validator\Barcode\Ean2', - 'barcodeean5' => 'Zend\Validator\Barcode\Ean5', - 'barcodeean8' => 'Zend\Validator\Barcode\Ean8', - 'barcodegtin12' => 'Zend\Validator\Barcode\Gtin12', - 'barcodegtin13' => 'Zend\Validator\Barcode\Gtin13', - 'barcodegtin14' => 'Zend\Validator\Barcode\Gtin14', - 'barcodeidentcode' => 'Zend\Validator\Barcode\Identcode', - 'barcodeintelligentmail' => 'Zend\Validator\Barcode\Intelligentmail', - 'barcodeissn' => 'Zend\Validator\Barcode\Issn', - 'barcodeitf14' => 'Zend\Validator\Barcode\Itf14', - 'barcodeleitcode' => 'Zend\Validator\Barcode\Leitcode', - 'barcodeplanet' => 'Zend\Validator\Barcode\Planet', - 'barcodepostnet' => 'Zend\Validator\Barcode\Postnet', - 'barcoderoyalmail' => 'Zend\Validator\Barcode\Royalmail', - 'barcodesscc' => 'Zend\Validator\Barcode\Sscc', - 'barcodeupca' => 'Zend\Validator\Barcode\Upca', - 'barcodeupce' => 'Zend\Validator\Barcode\Upce', - 'barcode' => 'Zend\Validator\Barcode', - 'between' => 'Zend\Validator\Between', - 'bitwise' => 'Zend\Validator\Bitwise', - 'callback' => 'Zend\Validator\Callback', - 'creditcard' => 'Zend\Validator\CreditCard', - 'csrf' => 'Zend\Validator\Csrf', - 'date' => 'Zend\Validator\Date', - 'datestep' => 'Zend\Validator\DateStep', - 'datetime' => 'Zend\I18n\Validator\DateTime', - 'dbnorecordexists' => 'Zend\Validator\Db\NoRecordExists', - 'dbrecordexists' => 'Zend\Validator\Db\RecordExists', - 'digits' => 'Zend\Validator\Digits', - 'emailaddress' => 'Zend\Validator\EmailAddress', - 'explode' => 'Zend\Validator\Explode', - 'filecount' => 'Zend\Validator\File\Count', - 'filecrc32' => 'Zend\Validator\File\Crc32', - 'fileexcludeextension' => 'Zend\Validator\File\ExcludeExtension', - 'fileexcludemimetype' => 'Zend\Validator\File\ExcludeMimeType', - 'fileexists' => 'Zend\Validator\File\Exists', - 'fileextension' => 'Zend\Validator\File\Extension', - 'filefilessize' => 'Zend\Validator\File\FilesSize', - 'filehash' => 'Zend\Validator\File\Hash', - 'fileimagesize' => 'Zend\Validator\File\ImageSize', - 'fileiscompressed' => 'Zend\Validator\File\IsCompressed', - 'fileisimage' => 'Zend\Validator\File\IsImage', - 'filemd5' => 'Zend\Validator\File\Md5', - 'filemimetype' => 'Zend\Validator\File\MimeType', - 'filenotexists' => 'Zend\Validator\File\NotExists', - 'filesha1' => 'Zend\Validator\File\Sha1', - 'filesize' => 'Zend\Validator\File\Size', - 'fileupload' => 'Zend\Validator\File\Upload', - 'fileuploadfile' => 'Zend\Validator\File\UploadFile', - 'filewordcount' => 'Zend\Validator\File\WordCount', - 'float' => 'Zend\I18n\Validator\IsFloat', - 'greaterthan' => 'Zend\Validator\GreaterThan', - 'hex' => 'Zend\Validator\Hex', - 'hostname' => 'Zend\Validator\Hostname', - 'iban' => 'Zend\Validator\Iban', - 'identical' => 'Zend\Validator\Identical', - 'inarray' => 'Zend\Validator\InArray', - 'int' => 'Zend\I18n\Validator\IsInt', - 'ip' => 'Zend\Validator\Ip', - 'isbn' => 'Zend\Validator\Isbn', - 'isfloat' => 'Zend\I18n\Validator\IsFloat', - 'isinstanceof' => 'Zend\Validator\IsInstanceOf', - 'isint' => 'Zend\I18n\Validator\IsInt', - 'lessthan' => 'Zend\Validator\LessThan', - 'notempty' => 'Zend\Validator\NotEmpty', - 'phonenumber' => 'Zend\I18n\Validator\PhoneNumber', - 'postcode' => 'Zend\I18n\Validator\PostCode', - 'regex' => 'Zend\Validator\Regex', - 'sitemapchangefreq' => 'Zend\Validator\Sitemap\Changefreq', - 'sitemaplastmod' => 'Zend\Validator\Sitemap\Lastmod', - 'sitemaploc' => 'Zend\Validator\Sitemap\Loc', - 'sitemappriority' => 'Zend\Validator\Sitemap\Priority', - 'stringlength' => 'Zend\Validator\StringLength', - 'step' => 'Zend\Validator\Step', - 'timezone' => 'Zend\Validator\Timezone', - 'uri' => 'Zend\Validator\Uri', - ); - - /** - * Whether or not to share by default; default to false - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Constructor - * - * After invoking parent constructor, add an initializer to inject the - * attached translator, if any, to the currently requested helper. - * - * @param null|ConfigInterface $configuration - */ - public function __construct(ConfigInterface $configuration = null) - { - parent::__construct($configuration); - $this->addInitializer(array($this, 'injectTranslator')); - $this->addInitializer(array($this, 'injectValidatorPluginManager')); - } - - /** - * Inject a validator instance with the registered translator - * - * @param ValidatorInterface $validator - * @return void - */ - public function injectTranslator($validator) - { - if ($validator instanceof Translator\TranslatorAwareInterface) { - $locator = $this->getServiceLocator(); - if ($locator && $locator->has('MvcTranslator')) { - $validator->setTranslator($locator->get('MvcTranslator')); - } - } - } - - /** - * Inject a validator plugin manager - * - * @param $validator - * @return void - */ - public function injectValidatorPluginManager($validator) - { - if ($validator instanceof ValidatorPluginManagerAwareInterface) { - $validator->setValidatorPluginManager($this); - } - } - - /** - * Validate the plugin - * - * Checks that the validator loaded is an instance of ValidatorInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof ValidatorInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\ValidatorInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php deleted file mode 100644 index b5436b82b4..0000000000 --- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Validator; - -interface ValidatorPluginManagerAwareInterface -{ - /** - * Set validator plugin manager - * - * @param ValidatorPluginManager $pluginManager - */ - public function setValidatorPluginManager(ValidatorPluginManager $pluginManager); - - /** - * Get validator plugin manager - * - * @return ValidatorPluginManager - */ - public function getValidatorPluginManager(); -} diff --git a/civicrm/xml/schema/ACL/Cache.xml b/civicrm/xml/schema/ACL/Cache.xml index 38c9df70bb..36e9123dc3 100644 --- a/civicrm/xml/schema/ACL/Cache.xml +++ b/civicrm/xml/schema/ACL/Cache.xml @@ -60,4 +60,9 @@ <comment>When was this cache entry last modified</comment> <add>1.6</add> </field> + <index> + <name>index_modified_date</name> + <fieldName>modified_date</fieldName> + <add>5.22</add> + </index> </table> diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml index 7facb329ca..262358eaf1 100644 --- a/civicrm/xml/schema/Contact/Contact.xml +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -39,6 +39,7 @@ </html> <add>1.1</add> <change>3.1</change> + <contactType>null</contactType> </field> <index> <name>index_contact_type</name> @@ -385,6 +386,7 @@ <fulltext/> <comment>First Name.</comment> <add>1.1</add> + <contactType>Individual</contactType> </field> <index> <name>index_first_name</name> @@ -405,6 +407,7 @@ <fulltext/> <comment>Middle Name.</comment> <add>1.1</add> + <contactType>Individual</contactType> </field> <field> <name>last_name</name> @@ -420,6 +423,7 @@ <comment>Last Name.</comment> <fulltext/> <add>1.1</add> + <contactType>Individual</contactType> </field> <index> <name>index_last_name</name> @@ -441,6 +445,7 @@ <dataPattern>/^(mr|ms|mrs|sir|dr)\.?$/i</dataPattern> <import>true</import> <add>1.2</add> + <contactType>Individual</contactType> </field> <index> <name>UI_prefix</name> @@ -462,6 +467,7 @@ <headerPattern>/^suffix$/i</headerPattern> <dataPattern>/^(sr|jr)\.?|i{2,}$/</dataPattern> <add>1.2</add> + <contactType>Individual</contactType> </field> <index> <name>UI_suffix</name> @@ -479,6 +485,7 @@ <headerPattern>/^title/i</headerPattern> <comment>Formal (academic or similar) title in front of name. (Prof., Dr. etc.)</comment> <add>4.5</add> + <contactType>Individual</contactType> </field> <field> <name>communication_style_id</name> @@ -642,6 +649,7 @@ <dataPattern>//</dataPattern> <comment>Job Title</comment> <add>1.1</add> + <contactType>Individual</contactType> </field> <field> <name>gender_id</name> @@ -657,6 +665,7 @@ <comment>FK to gender ID</comment> <import>true</import> <add>1.2</add> + <contactType>Individual</contactType> </field> <index> <name>UI_gender</name> @@ -675,6 +684,7 @@ <type>Select Date</type> <formatType>birth</formatType> </html> + <contactType>Individual</contactType> </field> <field> <name>is_deceased</name> @@ -688,6 +698,7 @@ <html> <type>CheckBox</type> </html> + <contactType>Individual</contactType> </field> <index> <name>index_is_deceased</name> @@ -706,6 +717,7 @@ <type>Select Date</type> <formatType>birth</formatType> </html> + <contactType>Individual</contactType> </field> <field> <name>mail_to_household_id</name> @@ -738,6 +750,7 @@ <comment>Household Name.</comment> <fulltext/> <add>1.1</add> + <contactType>Household</contactType> </field> <index> <name>index_household_name</name> @@ -750,6 +763,7 @@ <title>Household Primary Contact ID</title> <comment>Optional FK to Primary Contact for this household.</comment> <add>1.1</add> + <contactType>Household</contactType> </field> <foreignKey> <name>primary_contact_id</name> @@ -772,6 +786,7 @@ <comment>Organization Name.</comment> <fulltext/> <add>1.1</add> + <contactType>Organization</contactType> </field> <index> <name>index_organization_name</name> @@ -789,6 +804,7 @@ <html> <type>Text</type> </html> + <contactType>Organization</contactType> </field> <field> <name>user_unique_id</name> @@ -816,6 +832,7 @@ <html> <type>EntityRef</type> </html> + <contactType>Individual</contactType> </field> <foreignKey> <name>employer_id</name> diff --git a/civicrm/xml/schema/Core/Address.xml b/civicrm/xml/schema/Core/Address.xml index 183a1af5b0..97ea97b375 100644 --- a/civicrm/xml/schema/Core/Address.xml +++ b/civicrm/xml/schema/Core/Address.xml @@ -259,6 +259,7 @@ </pseudoconstant> <html> <type>ChainSelect</type> + <controlField>state_province_id</controlField> </html> <add>1.1</add> </field> @@ -285,6 +286,7 @@ <localize_context>province</localize_context> <html> <type>ChainSelect</type> + <controlField>country_id</controlField> </html> <add>1.1</add> </field> diff --git a/civicrm/xml/templates/dao.tpl b/civicrm/xml/templates/dao.tpl index 6718b8541f..ac6b477ec3 100644 --- a/civicrm/xml/templates/dao.tpl +++ b/civicrm/xml/templates/dao.tpl @@ -124,7 +124,9 @@ class {$table.className} extends CRM_Core_DAO {ldelim} {if $field.export} 'export' => {$field.export|strtoupper}, {/if} {* field.export *} - +{if $field.contactType} + 'contactType' => {if $field.contactType == 'null'}NULL{else}'{$field.contactType}'{/if}, +{/if} {if $field.rule} 'rule' => '{$field.rule}', {/if} {* field.rule *} diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index ee46895b97..dfe06e4925 100644 --- a/civicrm/xml/version.xml +++ b/civicrm/xml/version.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="iso-8859-1" ?> <version> - <version_no>5.21.2</version_no> + <version_no>5.22.0</version_no> </version> diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php index 2e23236c84..9ce1a35e93 100644 --- a/includes/civicrm.basepage.php +++ b/includes/civicrm.basepage.php @@ -384,9 +384,15 @@ class CiviCRM_For_WordPress_Basepage { add_filter( 'wp_title', array( $this, 'wp_page_title' ), 100, 3 ); add_filter( 'document_title_parts', array( $this, 'wp_page_title_parts' ), 100, 1 ); - // Add compatibility with WordPress SEO plugin's Open Graph title + // Add compatibility with Yoast SEO plugin's Open Graph title add_filter( 'wpseo_opengraph_title', array( $this, 'wpseo_page_title' ), 100, 1 ); + // Don't let the Yoast SEO plugin parse the basepage title + if ( class_exists( 'WPSEO_Frontend' ) ) { + $frontend = WPSEO_Frontend::get_instance(); + remove_filter( 'pre_get_document_title', array( $frontend, 'title' ), 15 ); + } + // Include this content when base page is rendered add_filter( 'the_content', array( $this, 'basepage_render' ) ); diff --git a/tests/phpunit/CiviWP/HookTest.php b/tests/phpunit/CiviWP/HookTest.php index 77817acc63..4986f08bbd 100644 --- a/tests/phpunit/CiviWP/HookTest.php +++ b/tests/phpunit/CiviWP/HookTest.php @@ -9,7 +9,7 @@ namespace CiviWP { * @package CiviWP * @group e2e */ - class HookTest extends \PHPUnit_Framework_TestCase implements EndToEndInterface { + class HookTest extends \PHPUnit\Framework\TestCase implements EndToEndInterface { public function testFoo() { add_action('civicrm_fakeAlterableHook', 'onFakeAlterableHook', 10, 2); diff --git a/tests/phpunit/CiviWP/PhpVersionTest.php b/tests/phpunit/CiviWP/PhpVersionTest.php index 42eab3e308..f4800daf5c 100644 --- a/tests/phpunit/CiviWP/PhpVersionTest.php +++ b/tests/phpunit/CiviWP/PhpVersionTest.php @@ -4,7 +4,7 @@ namespace CiviWP; use Civi\Test\EndToEndInterface; -class PhpVersionTest extends \PHPUnit_Framework_TestCase implements EndToEndInterface { +class PhpVersionTest extends \PHPUnit\Framework\TestCase implements EndToEndInterface { /** * CIVICRM_WP_PHP_MINIMUM (civicrm.module) should match MINIMUM_PHP_VERSION (CRM/Upgrade/Form.php). diff --git a/wp-rest/.editorconfig b/wp-rest/.editorconfig deleted file mode 100644 index 09dc3747d3..0000000000 --- a/wp-rest/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -# EditorConfig is awesome: https://editorconfig.org - -# Not top-most EditorConfig file -root = false - -# Tab indentation -[*.php] -indent_style = tab -indent_size = 4 diff --git a/wp-rest/Autoloader.php b/wp-rest/Autoloader.php deleted file mode 100644 index dfa95f8a02..0000000000 --- a/wp-rest/Autoloader.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Autoloader class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST; - -class Autoloader { - - /** - * Instance. - * - * @since 0.1 - * @var string - */ - private static $instance = null; - - /** - * Namespace. - * - * @since 0.1 - * @var string - */ - private $namespace = 'CiviCRM_WP_REST'; - - /** - * Autoloader directory sources. - * - * @since 0.1 - * @var array - */ - private static $source_directories = []; - - /** - * Constructor. - * - * @since 0.1 - */ - private function __construct() { - - $this->register_autoloader(); - - } - - /** - * Creates an instance of this class. - * - * @since 0.1 - */ - private static function instance() { - - if ( ! self::$instance ) self::$instance = new self; - - } - - /** - * Adds a directory source. - * - * @since 0.1 - * @param string $source The source path - */ - public static function add_source( string $source_path ) { - - // make sure we have an instance - self::instance(); - - if ( ! is_readable( trailingslashit( $source_path ) ) ) - return \WP_Error( 'civicrm_wp_rest_error', sprintf( __( 'The source %s is not readable.', 'civicrm' ), $source ) ); - - self::$source_directories[] = $source_path; - - } - - /** - * Registers the autoloader. - * - * @since 0.1 - * @return bool Wehather the autoloader has been registered or not - */ - private function register_autoloader() { - - return spl_autoload_register( [ $this, 'autoload' ] ); - - } - - /** - * Loads the classes. - * - * @since 0.1 - * @param string $class_name The class name to load - */ - private function autoload( $class_name ) { - - if ( false === strpos( $class_name, $this->namespace ) ) return; - - $parts = explode( '\\', $class_name ); - - // remove namespace and join class path - $class_path = str_replace( '_', '-', implode( DIRECTORY_SEPARATOR, array_slice( $parts, 1 ) ) ); - - array_map( function( $source_path ) use ( $class_path ) { - - $path = $source_path . $class_path . '.php'; - - if ( ! file_exists( $path ) ) return; - - require $path; - - }, static::$source_directories ); - - } - -} diff --git a/wp-rest/Civi/Mailing-Hooks.php b/wp-rest/Civi/Mailing-Hooks.php deleted file mode 100644 index 7113088b3b..0000000000 --- a/wp-rest/Civi/Mailing-Hooks.php +++ /dev/null @@ -1,136 +0,0 @@ -<?php -/** - * CiviCRM Mailing_Hooks class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Civi; - -class Mailing_Hooks { - - /** - * Mailing Url endpoint. - * - * @since 0.1 - * @var string - */ - public $url_endpoint; - - /** - * Mailing Open endpoint. - * - * @since 0.1 - * @var string - */ - public $open_endpoint; - - /** - * Constructor. - * - * @since 0.1 - */ - public function __construct() { - - $this->url_endpoint = rest_url( 'civicrm/v3/url' ); - - $this->open_endpoint = rest_url( 'civicrm/v3/open' ); - - } - - /** - * Register hooks. - * - * @since 0.1 - */ - public function register_hooks() { - - add_filter( 'civicrm_alterMailParams', [ $this, 'do_mailing_urls' ], 10, 2 ); - - } - - /** - * Filters the mailing html and replaces calls to 'extern/url.php' and - * 'extern/open.php' with their REST counterparts 'civicrm/v3/url' and 'civicrm/v3/open'. - * - * @uses 'civicrm_alterMailParams' - * - * @since 0.1 - * @param array &$params Mail params - * @param string $context The Context - * @return array $params The filtered Mail params - */ - public function do_mailing_urls( &$params, $context ) { - - if ( $context == 'civimail' ) { - - $params['html'] = $this->replace_html_mailing_tracking_urls( $params['html'] ); - - $params['text'] = $this->replace_text_mailing_tracking_urls( $params['text'] ); - - } - - return $params; - - } - - /** - * Replace html mailing tracking urls. - * - * @since 0.1 - * @param string $contnet The mailing content - * @return string $content The mailing content - */ - public function replace_html_mailing_tracking_urls( string $content ) { - - $doc = \phpQuery::newDocument( $content ); - - foreach ( $doc[ '[href*="civicrm/extern/url.php"], [src*="civicrm/extern/open.php"]' ] as $element ) { - - $href = pq( $element )->attr( 'href' ); - $src = pq( $element )->attr( 'src' ); - - // replace extern/url - if ( strpos( $href, 'civicrm/extern/url.php' ) ) { - - $query_string = strstr( $href, '?' ); - pq( $element )->attr( 'href', $this->url_endpoint . $query_string ); - - } - - // replace extern/open - if ( strpos( $src, 'civicrm/extern/open.php' ) ) { - - $query_string = strstr( $src, '?' ); - pq( $element )->attr( 'src', $this->open_endpoint . $query_string ); - - } - - unset( $href, $src, $query_string ); - - } - - return $doc->html(); - - } - - /** - * Replace text mailing tracking urls. - * - * @since 0.1 - * @param string $contnet The mailing content - * @return string $content The mailing content - */ - public function replace_text_mailing_tracking_urls( string $content ) { - - // replace extern url - $content = preg_replace( '/http.*civicrm\/extern\/url\.php/i', $this->url_endpoint, $content ); - - // replace open url - $content = preg_replace( '/http.*civicrm\/extern\/open\.php/i', $this->open_endpoint, $content ); - - return $content; - - } - -} diff --git a/wp-rest/Controller/AuthorizeIPN.php b/wp-rest/Controller/AuthorizeIPN.php deleted file mode 100644 index 4cd9da9a97..0000000000 --- a/wp-rest/Controller/AuthorizeIPN.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * AuthorizeIPN controller class. - * - * Replacement for CiviCRM's 'extern/authorizeIPN.php'. - * - * @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class AuthorizeIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'authorizeIPN'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/authorizeIPN/params', $request->get_params(), $request ); - - $authorize_IPN = new \CRM_Core_Payment_AuthorizeNetIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=AuthNet', $params ); - - /** - * Filter AuthorizeIPN object. - * - * @param CRM_Core_Payment_AuthorizeNetIPN $authorize_IPN - * @param array $params - * @param WP_REST_Request $request - */ - $authorize_IPN = apply_filters( 'civi_wp_rest/controller/authorizeIPN/instance', $authorize_IPN, $params, $request ); - - try { - - if ( ! method_exists( $authorize_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $authorize_IPN ) ) - return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $authorize_IPN ) ) ); - - $result = $authorize_IPN->main(); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Checks whether object is an instance of CRM_Core_Payment_AuthorizeNetIPN or CRM_Core_Payment_BaseIPN. - * - * Needed because the instance is being filtered through 'civi_wp_rest/controller/authorizeIPN/instance'. - * - * @since 0.1 - * @param CRM_Core_Payment_AuthorizeNetIPN|CRM_Core_Payment_BaseIPN $object - * @return bool - */ - public function instance_of_crm_base_ipn( $object ) { - - return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_AuthorizeNetIPN; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Base.php b/wp-rest/Controller/Base.php deleted file mode 100644 index 7546377e9e..0000000000 --- a/wp-rest/Controller/Base.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Base controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -use CiviCRM_WP_REST\Endpoint\Endpoint_Interface; - -abstract class Base extends \WP_REST_Controller implements Endpoint_Interface { - - /** - * Route namespace. - * - * @since 0.1 - * @var string - */ - protected $namespace = 'civicrm/v3'; - - /** - * Gets the endpoint namespace. - * - * @since 0.1 - * @return string $namespace - */ - public function get_namespace() { - - return $this->namespace; - - } - - /** - * Gets the rest base route. - * - * @since 0.1 - * @return string $rest_base - */ - public function get_rest_base() { - - return '/' . $this->rest_base; - - } - - /** - * Retrieves the endpoint ie. '/civicrm/v3/rest'. - * - * @since 0.1 - * @return string $rest_base - */ - public function get_endpoint() { - - return '/' . $this->get_namespace() . $this->get_rest_base(); - - } - - /** - * Checks whether the requested route is equal to this endpoint. - * - * @since 0.1 - * @param WP_REST_Request $request - * @return bool $is_current_endpoint True if it's equal, false otherwise - */ - public function is_current_endpoint( $request ) { - - return $this->get_endpoint() == $request->get_route(); - - } - - /** - * Authorization status code. - * - * @since 0.1 - * @return int $status - */ - protected function authorization_status_code() { - - $status = 401; - - if ( is_user_logged_in() ) $status = 403; - - return $status; - - } - - /** - * Wrapper for WP_Error. - * - * @since 0.1 - * @param string|\CiviCRM_API3_Exception $error - * @param mixed $data Error data - * @return WP_Error $error - */ - protected function civi_rest_error( $error, $data = [] ) { - - if ( $error instanceof \CiviCRM_API3_Exception ) { - - return $error->getExtraParams(); - - } - - return new \WP_Error( 'civicrm_rest_api_error', $error, empty( $data ) ? [ 'status' => $this->authorization_status_code() ] : $data ); - - } - -} diff --git a/wp-rest/Controller/Cxn.php b/wp-rest/Controller/Cxn.php deleted file mode 100644 index 7f7cca5c56..0000000000 --- a/wp-rest/Controller/Cxn.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php -/** - * Cxn controller class. - * - * CiviConnect endpoint, replacement for CiviCRM's 'extern/cxn.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Cxn extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'cxn'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/cxn/params', $request->get_params(), $request ); - - // init connection server - $cxn = \CRM_Cxn_BAO_Cxn::createApiServer(); - - /** - * Filter connection server object. - * - * @param Civi\Cxn\Rpc\ApiServer $cxn - * @param array $params - * @param WP_REST_Request $request - */ - $cxn = apply_filters( 'civi_wp_rest/controller/cxn/instance', $cxn, $params, $request ); - - try { - - $result = $cxn->handle( $request->get_body() ); - - } catch ( Civi\Cxn\Rpc\Exception\CxnException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\ExpiredCertException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\InvalidCertException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\InvalidMessageException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\GarbledMessageException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } - - /** - * Bypass WP and send request from Cxn. - */ - add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $result ) { - - // Civi\Cxn\Rpc\Message->send() - $result->send(); - - return true; - - }, 10, 4 ); - - return rest_ensure_response( $result ); - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Open.php b/wp-rest/Controller/Open.php deleted file mode 100644 index 450ef991a3..0000000000 --- a/wp-rest/Controller/Open.php +++ /dev/null @@ -1,129 +0,0 @@ -<?php -/** - * Open controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Open extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'open'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get item. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - $queue_id = $request->get_param( 'q' ); - - // track open - \CRM_Mailing_Event_BAO_Opened::open( $queue_id ); - - // serve tracker file - add_filter( 'rest_pre_serve_request', [ $this, 'serve_tracker_file' ], 10, 4 ); - - } - - /** - * Serves the tracker gif file. - * - * @since 0.1 - * @param bool $served Whether the request has been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - * @return bool $served Whether the request has been served - */ - public function serve_tracker_file( $served, $result, $request, $server ) { - - // tracker file path - $file = CIVICRM_PLUGIN_DIR . 'civicrm/i/tracker.gif'; - - // set headers - $server->send_header( 'Content-type', 'image/gif' ); - $server->send_header( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0' ); - $server->send_header( 'Content-Description', 'File Transfer' ); - $server->send_header( 'Content-Disposition', 'inline; filename=tracker.gif' ); - $server->send_header( 'Content-Length', filesize( $file ) ); - - $buffer = readfile( $file ); - - return true; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm/v3/open', - 'description' => __( 'CiviCRM Open endpoint', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'q' ], - 'properties' => [ - 'q' => [ - 'type' => 'integer' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'q' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Controller/PayPalIPN.php b/wp-rest/Controller/PayPalIPN.php deleted file mode 100644 index 5b5c380045..0000000000 --- a/wp-rest/Controller/PayPalIPN.php +++ /dev/null @@ -1,134 +0,0 @@ -<?php -/** - * PayPalIPN controller class. - * - * PayPal IPN endpoint, replacement for CiviCRM's 'extern/ipn.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class PayPalIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'ipn'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/ipn/params', $request->get_params(), $request ); - - if ( $request->get_method() == 'GET' ) { - - // paypal standard - $paypal_IPN = new \CRM_Core_Payment_PayPalIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=PayPal_Standard', $params ); - - } else { - - // paypal pro - $paypal_IPN = new \CRM_Core_Payment_PayPalProIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=PayPal', $params ); - - } - - /** - * Filter PayPalIPN object. - * - * @param CRM_Core_Payment_PayPalIPN|CRM_Core_Payment_PayPalProIPN $paypal_IPN - * @param array $params - * @param WP_REST_Request $request - */ - $paypal_IPN = apply_filters( 'civi_wp_rest/controller/ipn/instance', $paypal_IPN, $params, $request ); - - try { - - if ( ! method_exists( $paypal_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $paypal_IPN ) ) - return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $paypal_IPN ) ) ); - - $result = $paypal_IPN->main(); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Checks whether object is an instance of CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN. - * - * Needed because the instance is being filtered through 'civi_wp_rest/controller/ipn/instance'. - * - * @since 0.1 - * @param CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN $object - * @return bool - */ - public function instance_of_crm_base_ipn( $object ) { - - return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_PayPalProIPN || $object instanceof \CRM_Core_Payment_PayPalIPN; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/PxIPN.php b/wp-rest/Controller/PxIPN.php deleted file mode 100644 index d68fc8d787..0000000000 --- a/wp-rest/Controller/PxIPN.php +++ /dev/null @@ -1,139 +0,0 @@ -<?php -/** - * PxIPN controller class. - * - * PxPay IPN endpoint, replacement for CiviCRM's 'extern/pxIPN.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class PxIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'pxIPN'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter payment processor params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( - 'civi_wp_rest/controller/pxIPN/params', - $this->get_payment_processor_args( $request ), - $request - ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=Payment_Express', $params ); - - try { - - $result = \CRM_Core_Payment_PaymentExpressIPN::main( ...$params ); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Get payment processor necessary params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $args - */ - public function get_payment_processor_args( $request ) { - - // get payment processor types - $payment_processor_types = civicrm_api3( 'PaymentProcessor', 'getoptions', [ - 'field' => 'payment_processor_type_id' - ] ); - - // payment processor params - $params = apply_filters( 'civi_wp_rest/controller/pxIPN/payment_processor_params', [ - 'user_name' => $request->get_param( 'userid' ), - 'payment_processor_type_id' => array_search( - 'DPS Payment Express', - $payment_processor_types['values'] - ), - 'is_active' => 1, - 'is_test' => 0 - ] ); - - // get payment processor - $payment_processor = civicrm_api3( 'PaymentProcessor', 'get', $params ); - - $args = $payment_processor['values'][$payment_processor['id']]; - - $method = empty( $args['signature'] ) ? 'pxpay' : 'pxaccess'; - - return [ - $method, - $request->get_param( 'result' ), - $args['url_site'], - $args['user_name'], - $args['password'], - $args['signature'] - ]; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Rest.php b/wp-rest/Controller/Rest.php deleted file mode 100644 index 61706f85fd..0000000000 --- a/wp-rest/Controller/Rest.php +++ /dev/null @@ -1,522 +0,0 @@ -<?php -/** - * Rest controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Rest extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'rest'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_items' ], - 'permission_callback' => [ $this, 'permissions_check' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Check get permission. - * - * @since 0.1 - * @param WP_REST_Request $request - * @return bool - */ - public function permissions_check( $request ) { - - if ( ! $this->is_valid_api_key( $request ) ) - return $this->civi_rest_error( __( 'Param api_key is not valid.', 'civicrm' ) ); - - if ( ! $this->is_valid_site_key() ) - return $this->civi_rest_error( __( 'Param key is not valid.', 'civicrm' ) ); - - return true; - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_items( $request ) { - - /** - * Filter formatted api params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/rest/api_params', $this->get_formatted_api_params( $request ), $request ); - - try { - - $items = civicrm_api3( ...$params ); - - } catch ( \CiviCRM_API3_Exception $e ) { - - $items = $this->civi_rest_error( $e ); - - } - - if ( ! isset( $items ) || empty( $items ) ) - return rest_ensure_response( [] ); - - /** - * Filter civi api result. - * - * @since 0.1 - * @param array $items - * @param WP_REST_Request $request - */ - $data = apply_filters( 'civi_wp_rest/controller/rest/api_result', $items, $params, $request ); - - // only collections of items, ie any action but 'getsingle' - if ( isset( $data['values'] ) ) { - - $data['values'] = array_reduce( $items['values'] ?? $items, function( $items, $item ) use ( $request ) { - - $response = $this->prepare_item_for_response( $item, $request ); - - $items[] = $this->prepare_response_for_collection( $response ); - - return $items; - - }, [] ); - - } - - $response = rest_ensure_response( $data ); - - // check wheather we need to serve xml or json - if ( ! in_array( 'json', array_keys( $request->get_params() ) ) ) { - - /** - * Adds our response holding Civi data before dispatching. - * - * @since 0.1 - * @param WP_HTTP_Response $result Result to send to client - * @param WP_REST_Server $server The REST server - * @param WP_REST_Request $request The request - * @return WP_HTTP_Response $result Result to send to client - */ - add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) { - - return $response; - - }, 10, 3 ); - - // serve xml - add_filter( 'rest_pre_serve_request', [ $this, 'serve_xml_response' ], 10, 4 ); - - } else { - - // return json - return $response; - - } - - } - - /** - * Get formatted api params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params - */ - public function get_formatted_api_params( $request ) { - - $args = $request->get_params(); - - $entity = $args['entity']; - $action = $args['action']; - - // unset unnecessary args - unset( $args['entity'], $args['action'], $args['key'], $args['api_key'] ); - - if ( ! isset( $args['json'] ) || is_numeric( $args['json'] ) ) { - - $params = $args; - - } else { - - $params = is_string( $args['json'] ) ? json_decode( $args['json'], true ) : []; - - } - - // ensure check permissions is enabled - $params['check_permissions'] = true; - - return [ $entity, $action, $params ]; - - } - - /** - * Matches the item data to the schema. - * - * @since 0.1 - * @param object $item - * @param WP_REST_Request $request - */ - public function prepare_item_for_response( $item, $request ) { - - return rest_ensure_response( $item ); - - } - - /** - * Serves XML response. - * - * @since 0.1 - * @param bool $served Whether the request has already been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - */ - public function serve_xml_response( $served, $result, $request, $server ) { - - // get xml from response - $xml = $this->get_xml_formatted_data( $result->get_data() ); - - // set content type header - $server->send_header( 'Content-Type', 'text/xml' ); - - echo $xml; - - return true; - - } - - /** - * Formats CiviCRM API result to XML. - * - * @since 0.1 - * @param array $data The CiviCRM api result - * @return string $xml The formatted xml - */ - protected function get_xml_formatted_data( array $data ) { - - // xml document - $xml = new \DOMDocument(); - - // result set element <ResultSet> - $result_set = $xml->createElement( 'ResultSet' ); - - // xmlns:xsi attribute - $result_set->setAttribute( 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance' ); - - // count attribute - if ( isset( $data['count'] ) ) $result_set->setAttribute( 'count', $data['count'] ); - - // build result from result => values - if ( isset( $data['values'] ) ) { - - array_map( function( $item ) use ( $result_set, $xml ) { - - // result element <Result> - $result = $xml->createElement( 'Result' ); - - // format item - $result = $this->get_xml_formatted_item( $item, $result, $xml ); - - // append result to result set - $result_set->appendChild( $result ); - - }, $data['values'] ); - - } else { - - // result element <Result> - $result = $xml->createElement( 'Result' ); - - // format item - $result = $this->get_xml_formatted_item( $data, $result, $xml ); - - // append result to result set - $result_set->appendChild( $result ); - - } - - // append result set - $xml->appendChild( $result_set ); - - return $xml->saveXML(); - - } - - /** - * Formats a single api result to xml. - * - * @since 0.1 - * @param array $item The single api result - * @param DOMElement $parent The parent element to append to - * @param DOMDocument $doc The document - * @return DOMElement $parent The parent element - */ - public function get_xml_formatted_item( array $item, \DOMElement $parent, \DOMDocument $doc ) { - - // build field => values - array_map( function( $field, $value ) use ( $parent, $doc ) { - - // entity field element - $element = $doc->createElement( $field ); - - // handle array values - if ( is_array( $value ) ) { - - array_map( function( $key, $val ) use ( $element, $doc ) { - - // child element, append underscore '_' otherwise createElement - // will throw an Invalid character exception as elements cannot start with a number - $child = $doc->createElement( '_' . $key, $val ); - - // append child - $element->appendChild( $child ); - - }, array_keys( $value ), $value ); - - } else { - - // assign value - $element->nodeValue = $value; - - } - - // append element - $parent->appendChild( $element ); - - }, array_keys( $item ), $item ); - - return $parent; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm/v3/rest', - 'description' => __( 'CiviCRM API3 WP rest endpoint wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'entity', 'action', 'params' ], - 'properties' => [ - 'is_error' => [ - 'type' => 'integer' - ], - 'version' => [ - 'type' => 'integer' - ], - 'count' => [ - 'type' => 'integer' - ], - 'values' => [ - 'type' => 'array' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'key' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return $this->is_valid_site_key(); - - } - ], - 'api_key' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return $this->is_valid_api_key( $request ); - - } - ], - 'entity' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ], - 'action' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ], - 'json' => [ - 'type' => ['integer', 'string', 'array'], - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ) || is_array( $value ) || $this->is_valid_json( $value ); - - } - ] - ]; - - } - - /** - * Checks if string is a valid json. - * - * @since 0.1 - * @param string $param - * @return bool - */ - protected function is_valid_json( $param ) { - - $param = json_decode( $param, true ); - - if ( ! is_array( $param ) ) return false; - - return ( json_last_error() == JSON_ERROR_NONE ); - - } - - /** - * Validates the site key. - * - * @since 0.1 - * @return bool $is_valid_site_key - */ - private function is_valid_site_key() { - - return \CRM_Utils_System::authenticateKey( false ); - - } - - /** - * Validates the api key. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return bool $is_valid_api_key - */ - private function is_valid_api_key( $request ) { - - $api_key = $request->get_param( 'api_key' ); - - if ( ! $api_key ) return false; - - $contact_id = \CRM_Core_DAO::getFieldValue( 'CRM_Contact_DAO_Contact', $api_key, 'id', 'api_key' ); - - // validate contact and login - if ( $contact_id ) { - - $wp_user = $this->get_wp_user( $contact_id ); - - $this->do_user_login( $wp_user ); - - return true; - - } - - return false; - - } - - /** - * Get WordPress user data. - * - * @since 0.1 - * @param int $contact_id The contact id - * @return bool|WP_User $user The WordPress user data - */ - protected function get_wp_user( int $contact_id ) { - - try { - - // Get CiviCRM domain group ID from constant, if set. - $domain_id = defined( 'CIVICRM_DOMAIN_ID' ) ? CIVICRM_DOMAIN_ID : 0; - - // If this fails, get it from config. - if ( $domain_id === 0 ) { - $domain_id = CRM_Core_Config::domainID(); - } - - // Call API. - $uf_match = civicrm_api3( 'UFMatch', 'getsingle', [ - 'contact_id' => $contact_id, - 'domain_id' => $domain_id, - ] ); - - } catch ( \CiviCRM_API3_Exception $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } - - $wp_user = get_userdata( $uf_match['uf_id'] ); - - return $wp_user; - - } - - /** - * Logs in the WordPress user, needed to respect CiviCRM ACL and permissions. - * - * @since 0.1 - * @param WP_User $user - */ - protected function do_user_login( \WP_User $user ) { - - if ( is_user_logged_in() ) return; - - wp_set_current_user( $user->ID, $user->user_login ); - - wp_set_auth_cookie( $user->ID ); - - do_action( 'wp_login', $user->user_login, $user ); - - } - -} diff --git a/wp-rest/Controller/Soap.php b/wp-rest/Controller/Soap.php deleted file mode 100644 index 17402cc579..0000000000 --- a/wp-rest/Controller/Soap.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Soap controller class. - * - * Soap endpoint, replacement for CiviCRM's 'extern/soap.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Soap extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'soap'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/soap/params', $request->get_params(), $request ); - - // init soap server - $soap_server = new \SoapServer( - NULL, - [ - 'uri' => 'urn:civicrm', - 'soap_version' => SOAP_1_2, - ] - ); - - $crm_soap_server = new \CRM_Utils_SoapServer(); - - $soap_server->setClass( 'CRM_Utils_SoapServer', \CRM_Core_Config::singleton()->userFrameworkClass ); - $soap_server->setPersistence( SOAP_PERSISTENCE_SESSION ); - - /** - * Bypass WP and send request from Soap server. - */ - add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $soap_server ) { - - $soap_server->handle(); - - return true; - - }, 10, 4 ); - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Url.php b/wp-rest/Controller/Url.php deleted file mode 100644 index 9286856e7c..0000000000 --- a/wp-rest/Controller/Url.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php -/** - * Url controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Url extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'url'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter formatted api params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/url/params', $this->get_formatted_params( $request ), $request ); - - // track url - $url = \CRM_Mailing_Event_BAO_TrackableURLOpen::track( $params['queue_id'], $params['url_id'] ); - - /** - * Filter url. - * - * @param string $url - * @param array $params - * @param WP_REST_Request $request - */ - $url = apply_filters( 'civi_wp_rest/controller/url/before_parse_url', $url, $params, $request ); - - // parse url - $url = $this->parse_url( $url, $params ); - - $this->do_redirect( $url ); - - } - - /** - * Get formatted api params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params - */ - protected function get_formatted_params( $request ) { - - $args = $request->get_params(); - - $params = [ - 'queue_id' => isset( $args['qid'] ) ? $args['qid'] ?? '' : $args['q'] ?? '', - 'url_id' => $args['u'] - ]; - - // unset unnecessary args - unset( $args['qid'], $args['u'], $args['q'] ); - - if ( ! empty( $args ) ) { - - $params['query'] = http_build_query( $args ); - - } - - return $params; - - } - - /** - * Parses the url. - * - * @since 0.1 - * @param string $url - * @param array $params - * @return string $url - */ - protected function parse_url( $url, $params ) { - - // CRM-18320 - Fix encoded ampersands - $url = str_replace( '&', '&', $url ); - - // CRM-7103 - Look for additional query variables and append them - if ( isset( $params['query'] ) && strpos( $url, '?' ) ) { - - $url .= '&' . $params['query']; - - } elseif ( isset( $params['query'] ) ) { - - $url .= '?' . $params['query']; - - } - - return apply_filters( 'civi_wp_rest/controller/url/parsed_url', $url, $params ); - - } - - /** - * Do redirect. - * - * @since 0.1 - * @param string $url - */ - protected function do_redirect( $url ) { - - wp_redirect( $url ); - - exit; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm_api3/v3/url', - 'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'qid', 'u' ], - 'properties' => [ - 'qid' => [ - 'type' => 'integer' - ], - 'q' => [ - 'type' => 'integer' - ], - 'u' => [ - 'type' => 'integer' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'qid' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'q' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'u' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Controller/Widget.php b/wp-rest/Controller/Widget.php deleted file mode 100644 index 13fa1e2add..0000000000 --- a/wp-rest/Controller/Widget.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php -/** - * Widget controller class. - * - * Widget endpoint, replacement for CiviCRM's 'extern/widget.php' - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Widget extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'widget'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get item. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter mandatory params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( - 'civi_wp_rest/controller/widget/params', - $this->get_mandatory_params( $request ), - $request - ); - - $jsonvar = 'jsondata'; - - if ( ! empty( $request->get_param( 'format' ) ) ) $jsonvar .= $request->get_param( 'cpageId' ); - - $data = \CRM_Contribute_BAO_Widget::getContributionPageData( ...$params ); - - $response = 'var ' . $jsonvar . ' = ' . json_encode( $data ) . ';'; - - /** - * Adds our response data before dispatching. - * - * @since 0.1 - * @param WP_HTTP_Response $result Result to send to client - * @param WP_REST_Server $server The REST server - * @param WP_REST_Request $request The request - * @return WP_HTTP_Response $result Result to send to client - */ - add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) { - - return rest_ensure_response( $response ); - - }, 10, 3 ); - - // serve javascript - add_filter( 'rest_pre_serve_request', [ $this, 'serve_javascript' ], 10, 4 ); - - } - - /** - * Get mandatory params from request. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params The widget params - */ - protected function get_mandatory_params( $request ) { - - $args = $request->get_params(); - - return [ - $args['cpageId'], - $args['widgetId'], - $args['includePending'] ?? false - ]; - - } - - /** - * Serve jsondata response. - * - * @since 0.1 - * @param bool $served Whether the request has already been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - * @return bool $served - */ - public function serve_javascript( $served, $result, $request, $server ) { - - // set content type header - $server->send_header( 'Expires', gmdate( 'D, d M Y H:i:s \G\M\T', time() + 60 ) ); - $server->send_header( 'Content-Type', 'application/javascript' ); - $server->send_header( 'Cache-Control', 'max-age=60, public' ); - - echo $result->get_data(); - - return true; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm_api3/v3/widget', - 'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'cpageId', 'widgetId' ], - 'properties' => [ - 'cpageId' => [ - 'type' => 'integer', - 'minimum' => 1 - ], - 'widgetId' => [ - 'type' => 'integer', - 'minimum' => 1 - ], - 'format' => [ - 'type' => 'integer' - ], - 'includePending' => [ - 'type' => 'boolean' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'cpageId' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'widgetId' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'format' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'includePending' => [ - 'type' => 'boolean', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Endpoint/Endpoint-Interface.php b/wp-rest/Endpoint/Endpoint-Interface.php deleted file mode 100644 index 9497cde509..0000000000 --- a/wp-rest/Endpoint/Endpoint-Interface.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Endpoint Interface class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Endpoint; - -interface Endpoint_Interface { - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes(); - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema(); - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args(); - -} diff --git a/wp-rest/Plugin.php b/wp-rest/Plugin.php deleted file mode 100644 index 4038a56b1b..0000000000 --- a/wp-rest/Plugin.php +++ /dev/null @@ -1,193 +0,0 @@ -<?php -/** - * Main plugin class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST; - -use CiviCRM_WP_REST\Civi\Mailing_Hooks; - -class Plugin { - - /** - * Constructor. - * - * @since 0.1 - */ - public function __construct() { - - $this->register_hooks(); - - $this->setup_objects(); - - } - - /** - * Register hooks. - * - * @since 1.0 - */ - protected function register_hooks() { - - add_action( 'rest_api_init', [ $this, 'register_rest_routes' ] ); - - add_filter( 'rest_pre_dispatch', [ $this, 'bootstrap_civi' ], 10, 3 ); - - add_filter( 'rest_post_dispatch', [ $this, 'maybe_reset_wp_timezone' ], 10, 3); - - } - - /** - * Bootstrap CiviCRM when hitting a the 'civicrm' namespace. - * - * @since 0.1 - * @param mixed $result - * @param WP_REST_Server $server REST server instance - * @param WP_REST_Request $request The request - * @return mixed $result - */ - public function bootstrap_civi( $result, $server, $request ) { - - if ( false !== strpos( $request->get_route(), 'civicrm' ) ) { - - $this->maybe_set_user_timezone( $request ); - - civi_wp()->initialize(); - - } - - return $result; - - } - - /** - * Setup objects. - * - * @since 0.1 - */ - private function setup_objects() { - - if ( CIVICRM_WP_REST_REPLACE_MAILING_TRACKING ) { - - // register mailing hooks - $mailing_hooks = ( new Mailing_Hooks )->register_hooks(); - - } - - } - - /** - * Registers Rest API routes. - * - * @since 0.1 - */ - public function register_rest_routes() { - - // rest endpoint - $rest_controller = new Controller\Rest; - $rest_controller->register_routes(); - - // url controller - $url_controller = new Controller\Url; - $url_controller->register_routes(); - - // open controller - $open_controller = new Controller\Open; - $open_controller->register_routes(); - - // authorizenet controller - $authorizeIPN_controller = new Controller\AuthorizeIPN; - $authorizeIPN_controller->register_routes(); - - // paypal controller - $paypalIPN_controller = new Controller\PayPalIPN; - $paypalIPN_controller->register_routes(); - - // pxpay controller - $paypalIPN_controller = new Controller\PxIPN; - $paypalIPN_controller->register_routes(); - - // civiconnect controller - $cxn_controller = new Controller\Cxn; - $cxn_controller->register_routes(); - - // widget controller - $widget_controller = new Controller\Widget; - $widget_controller->register_routes(); - - // soap controller - $soap_controller = new Controller\Soap; - $soap_controller->register_routes(); - - /** - * Opportunity to add more rest routes. - * - * @since 0.1 - */ - do_action( 'civi_wp_rest/plugin/rest_routes_registered' ); - - } - - /** - * Sets the timezone to the users timezone when - * calling the civicrm/v3/rest endpoint. - * - * @since 0.1 - * @param WP_REST_Request $request The request - */ - private function maybe_set_user_timezone( $request ) { - - if ( $request->get_route() != '/civicrm/v3/rest' ) return; - - $timezones = [ - 'wp_timezone' => date_default_timezone_get(), - 'user_timezone' => get_option( 'timezone_string', false ) - ]; - - // filter timezones - add_filter( 'civi_wp_rest/plugin/timezones', function() use ( $timezones ) { - - return $timezones; - - } ); - - if ( empty( $timezones['user_timezone'] ) ) return; - - /** - * CRM-12523 - * CRM-18062 - * CRM-19115 - */ - date_default_timezone_set( $timezones['user_timezone'] ); - \CRM_Core_Config::singleton()->userSystem->setMySQLTimeZone(); - - } - - /** - * Resets the timezone to the original WP - * timezone after calling the civicrm/v3/rest endpoint. - * - * @since 0.1 - * @param mixed $result - * @param WP_REST_Server $server REST server instance - * @param WP_REST_Request $request The request - * @return mixed $result - */ - public function maybe_reset_wp_timezone( $result, $server, $request ) { - - if ( $request->get_route() != '/civicrm/v3/rest' ) return $result; - - $timezones = apply_filters( 'civi_wp_rest/plugin/timezones', null ); - - if ( empty( $timezones['wp_timezone'] ) ) return $result; - - // reset wp timezone - date_default_timezone_set( $timezones['wp_timezone'] ); - - return $result; - - } - -} diff --git a/wp-rest/README.md b/wp-rest/README.md deleted file mode 100644 index 77234de84a..0000000000 --- a/wp-rest/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# CiviCRM WP REST API Wrapper - -This is a WordPress plugin that aims to expose CiviCRM's [extern](https://github.com/civicrm/civicrm-core/tree/master/extern) scripts as WordPress REST endpoints. - -This plugin requires: - -- PHP 7.1+ -- WordPress 4.7+ -- CiviCRM to be installed and activated. - -### Endpoints - -1. `civicrm/v3/rest` - a wrapper around `civicrm_api3()` - - **Parameters**: - - - `key` - **required**, the site key - - `api_key` - **required**, the contact api key - - `entity` - **required**, the API entity - - `action` - **required**, the API action - - `json` - **optional**, json formatted string with the API parameters/argumets, or `1` as in `json=1` - - By default all calls to `civicrm/v3/rest` return XML formatted results, to get `json` formatted result pass `json=1` or a json formatted string with the API parameters, like in the example 2 below. - - **Examples**: - - 1. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&group=Administrators` - - 2. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&json={"group": "Administrators"}` - -2. `civicrm/v3/url` - a substition for `civicrm/extern/url.php` mailing tracking - -3. `civicrm/v3/open` - a substition for `civicrm/extern/open.php` mailing tracking - -4. `civicrm/v3/authorizeIPN` - a substition for `civicrm/extern/authorizeIPN.php` (for testing Authorize.net as per [docs](https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method)) - - **_Note_**: this endpoint has **not been tested** - -5. `civicrm/v3/ipn` - a substition for `civicrm/extern/ipn.php` (for PayPal Standard and Pro live transactions) - - **_Note_**: this endpoint has **not been tested** - -6. `civicrm/v3/cxn` - a substition for `civicrm/extern/cxn.php` - -7. `civicrm/v3/pxIPN` - a substition for `civicrm/extern/pxIPN.php` - - **_Note_**: this endpoint has **not been tested** - -8. `civicrm/v3/widget` - a substition for `civicrm/extern/widget.php` - -9. `civicrm/v3/soap` - a substition for `civicrm/extern/soap.php` - - **_Note_**: this endpoint has **not been tested** - -### Settings - -Set the `CIVICRM_WP_REST_REPLACE_MAILING_TRACKING` constant to `true` to replace mailing url and open tracking calls with their counterpart REST endpoints, `civicrm/v3/url` and `civicrm/v3/open`. - -_Note: use this setting with caution, it may affect performance on large mailings, see `CiviCRM_WP_REST\Civi\Mailing_Hooks` class._ -- GitLab