diff --git a/civicrm.php b/civicrm.php
index 978238c19b7ced3258442ab7a1178a62369bd984..3118adbae173d23ffca84d5134586b95812dfa0b 100644
--- a/civicrm.php
+++ b/civicrm.php
@@ -2,7 +2,7 @@
 /*
 Plugin Name: CiviCRM
 Description: CiviCRM - Growing and Sustaining Relationships
-Version: 5.28.2
+Version: 5.28.3
 Requires at least: 4.9
 Requires PHP:      7.1
 Author: CiviCRM LLC
@@ -56,7 +56,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
 
 
 // Set version here: when it changes, will force JS to reload
-define( 'CIVICRM_PLUGIN_VERSION', '5.28.2' );
+define( 'CIVICRM_PLUGIN_VERSION', '5.28.3' );
 
 // Store reference to this file
 if (!defined('CIVICRM_PLUGIN_FILE')) {
diff --git a/civicrm/CRM/Dedupe/BAO/RuleGroup.php b/civicrm/CRM/Dedupe/BAO/RuleGroup.php
index 773e9ac1869080298ccd005b917994ea5309e2a0..d18c6d5f825aed2fd7185fb3d8c4357f7f485433 100644
--- a/civicrm/CRM/Dedupe/BAO/RuleGroup.php
+++ b/civicrm/CRM/Dedupe/BAO/RuleGroup.php
@@ -373,24 +373,23 @@ class CRM_Dedupe_BAO_RuleGroup extends CRM_Dedupe_DAO_RuleGroup {
    */
   public function thresholdQuery($checkPermission = TRUE) {
     $this->_aclFrom = '';
-    // CRM-6603: anonymous dupechecks side-step ACLs
-    $this->_aclWhere = ' AND is_deleted = 0 ';
+    $aclWhere = '';
 
     if ($this->params && !$this->noRules) {
       if ($checkPermission) {
-        list($this->_aclFrom, $this->_aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause('civicrm_contact');
-        $this->_aclWhere = $this->_aclWhere ? "AND {$this->_aclWhere}" : '';
+        list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause('civicrm_contact');
+        $aclWhere = $aclWhere ? "AND {$aclWhere}" : '';
       }
       $query = "SELECT {$this->temporaryTables['dedupe']}.id1 as id
                 FROM {$this->temporaryTables['dedupe']} JOIN civicrm_contact ON {$this->temporaryTables['dedupe']}.id1 = civicrm_contact.id {$this->_aclFrom}
-                WHERE contact_type = '{$this->contact_type}' {$this->_aclWhere}
+                WHERE contact_type = '{$this->contact_type}' AND is_deleted = 0 $aclWhere
                 AND weight >= {$this->threshold}";
     }
     else {
-      $this->_aclWhere = ' AND c1.is_deleted = 0 AND c2.is_deleted = 0';
+      $aclWhere = '';
       if ($checkPermission) {
-        list($this->_aclFrom, $this->_aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause(['c1', 'c2']);
-        $this->_aclWhere = $this->_aclWhere ? "AND {$this->_aclWhere}" : '';
+        list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause(['c1', 'c2']);
+        $aclWhere = $aclWhere ? "AND {$aclWhere}" : '';
       }
       $query = "SELECT IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1, {$this->temporaryTables['dedupe']}.id2) as id1,
                 IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1) as id2, {$this->temporaryTables['dedupe']}.weight
@@ -398,7 +397,9 @@ class CRM_Dedupe_BAO_RuleGroup extends CRM_Dedupe_DAO_RuleGroup {
                             JOIN civicrm_contact c2 ON {$this->temporaryTables['dedupe']}.id2 = c2.id {$this->_aclFrom}
                        LEFT JOIN civicrm_dedupe_exception exc ON {$this->temporaryTables['dedupe']}.id1 = exc.contact_id1 AND {$this->temporaryTables['dedupe']}.id2 = exc.contact_id2
                 WHERE c1.contact_type = '{$this->contact_type}' AND
-                      c2.contact_type = '{$this->contact_type}' {$this->_aclWhere}
+                      c2.contact_type = '{$this->contact_type}'
+                       AND c1.is_deleted = 0 AND c2.is_deleted = 0
+                      {$aclWhere}
                       AND weight >= {$this->threshold} AND exc.contact_id1 IS NULL";
     }
 
diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php
index 86217e04979f2ce3cab3c65b74aa5dd4cec04f92..56d5d3473b1df63df8a7aaf9946c9a79e3b736e3 100644
--- a/civicrm/CRM/Dedupe/Merger.php
+++ b/civicrm/CRM/Dedupe/Merger.php
@@ -541,6 +541,13 @@ INNER JOIN  civicrm_membership membership2 ON membership1.membership_type_id = m
         continue;
       }
 
+      if ($table === 'civicrm_dedupe_exception') {
+        $sqls[] = "UPDATE IGNORE civicrm_dedupe_exception SET contact_id1 = $mainId WHERE contact_id1 = $otherId";
+        $sqls[] = "UPDATE IGNORE civicrm_dedupe_exception SET contact_id2 = $mainId WHERE contact_id2 = $otherId";
+        $sqls[] = "DELETE FROM civicrm_dedupe_exception WHERE contact_id1 = $otherId OR contact_id2 = $otherId";
+        continue;
+      }
+
       if ($table === 'civicrm_setting') {
         // Per https://lab.civicrm.org/dev/core/-/issues/1934
         // Note this line is not unit tested as yet as a quick-fix for a regression
diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php
index 473356912470882735db7964352d705c8fe713e1..2bd8d4d5069bbc8019b1c12d65f0594864c9ea5e 100644
--- a/civicrm/CRM/Report/Form.php
+++ b/civicrm/CRM/Report/Form.php
@@ -139,11 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form {
    */
   protected $_groupFilter = FALSE;
 
-  /**
-   * Required for civiexportexcel.
-   */
-  public $supportsExportExcel = TRUE;
-
   /**
    * Has the report been optimised for group filtering.
    *
@@ -1440,7 +1435,7 @@ class CRM_Report_Form extends CRM_Core_Form {
     if (!CRM_Core_Permission::check('view report sql')) {
       return;
     }
-    $ignored_output_modes = ['pdf', 'csv', 'print', 'excel2007'];
+    $ignored_output_modes = ['pdf', 'csv', 'print'];
     if (in_array($this->_outputMode, $ignored_output_modes)) {
       return;
     }
@@ -2866,11 +2861,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 == 'copy' && $this->_criteriaForm) {
       $this->_createNew = TRUE;
     }
@@ -3508,9 +3498,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/Upgrade/Incremental/sql/5.28.3.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.28.3.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..30fbade0449fb570e68e8953b284056e44b97ad7
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.28.3.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.28.3 during upgrade *}
diff --git a/civicrm/CRM/Utils/Money.php b/civicrm/CRM/Utils/Money.php
index f5fb16244e43c2a67a4b736ffea615d7f35b2d12..9da7a98fe9abcc4bca197eba8e9ae21f9fc9c433 100644
--- a/civicrm/CRM/Utils/Money.php
+++ b/civicrm/CRM/Utils/Money.php
@@ -139,8 +139,9 @@ class CRM_Utils_Money {
    */
   public static function subtractCurrencies($leftOp, $rightOp, $currency) {
     if (is_numeric($leftOp) && is_numeric($rightOp)) {
-      $money = Money::of($leftOp, $currency, new DefaultContext(), RoundingMode::CEILING);
-      return $money->minus($rightOp)->getAmount()->toFloat();
+      $leftMoney = Money::of($leftOp, $currency, new DefaultContext(), RoundingMode::CEILING);
+      $rightMoney = Money::of($rightOp, $currency, new DefaultContext(), RoundingMode::CEILING);
+      return $leftMoney->minus($rightMoney)->getAmount()->toFloat();
     }
   }
 
diff --git a/civicrm/api/v3/Contact.php b/civicrm/api/v3/Contact.php
index d30d0d0b0995fc8f0142050810e47202323e66c1..8217b646d1a2630fae44249574ee63ce9ff65b2c 100644
--- a/civicrm/api/v3/Contact.php
+++ b/civicrm/api/v3/Contact.php
@@ -818,7 +818,7 @@ function civicrm_api3_contact_getquick($params) {
   }
 
   $select = $actualSelectElements = ['sort_name'];
-  $where = '';
+
   foreach ($list as $value) {
     $suffix = substr($value, 0, 2) . substr($value, -1);
     switch ($value) {
@@ -875,14 +875,14 @@ function civicrm_api3_contact_getquick($params) {
 
   // add acl clause here
   list($aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause('cc');
-
+  $whereClauses = ['cc.is_deleted = 0'];
   if ($aclWhere) {
-    $where .= " AND $aclWhere ";
+    $whereClauses[] = $aclWhere;
   }
   $isPrependWildcard = \Civi::settings()->get('includeWildCardInName');
 
   if (!empty($params['org'])) {
-    $where .= " AND contact_type = \"Organization\"";
+    $whereClauses[] = 'contact_type = "Organization"';
 
     // CRM-7157, hack: get current employer details when
     // employee_id is present.
@@ -914,21 +914,21 @@ function civicrm_api3_contact_getquick($params) {
 
   if (!empty($params['contact_sub_type'])) {
     $contactSubType = CRM_Utils_Type::escape($params['contact_sub_type'], 'String');
-    $where .= " AND cc.contact_sub_type = '{$contactSubType}'";
+    $whereClauses[] = "cc.contact_sub_type = '{$contactSubType}'";
   }
 
   if (!empty($params['contact_type'])) {
     $contactType = CRM_Utils_Type::escape($params['contact_type'], 'String');
-    $where .= " AND cc.contact_type LIKE '{$contactType}'";
+    $whereClauses[] = "cc.contact_type LIKE '{$contactType}'";
   }
 
   // Set default for current_employer or return contact with particular id
   if (!empty($params['id'])) {
-    $where .= " AND cc.id = " . (int) $params['id'];
+    $whereClauses[] = 'cc.id = ' . (int) $params['id'];
   }
 
   if (!empty($params['cid'])) {
-    $where .= " AND cc.id <> " . (int) $params['cid'];
+    $whereClauses[] = 'cc.id <> ' . (int) $params['cid'];
   }
 
   // Contact's based of relationhip type
@@ -949,10 +949,10 @@ function civicrm_api3_contact_getquick($params) {
   if ($config->includeNickNameInName) {
     $includeNickName = " OR nick_name LIKE '$strSearch'";
   }
-
+  $where = ' AND ' . implode(' AND ', $whereClauses);
   if (isset($customOptionsWhere)) {
     $customOptionsWhere = $customOptionsWhere ?: [0];
-    $whereClause = " WHERE (" . implode(' OR ', $customOptionsWhere) . ") $where";
+    $whereClause = ' WHERE (' . implode(' OR ', $customOptionsWhere) . ") $where";
   }
   elseif (!empty($params['field_name']) && !empty($params['table_name']) && $params['field_name'] != 'sort_name') {
     $whereClause = " WHERE ( $table_name.$field_name LIKE '$strSearch') {$where}";
diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php
index f76c36a7bc6ca0923ed5fa7faed5aa7eab53f769..05717e5a1c7f16312e195461e9a13de2c87deebf 100644
--- a/civicrm/civicrm-version.php
+++ b/civicrm/civicrm-version.php
@@ -1,7 +1,7 @@
 <?php
 /** @deprecated */
 function civicrmVersion( ) {
-  return array( 'version'  => '5.28.2',
+  return array( 'version'  => '5.28.3',
                 'cms'      => 'Wordpress',
                 'revision' => '' );
 }
diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css
index d260ee66abff2dc6b3800ea776856d237d6089c8..9ff756f3f3d32917249f5dad6c8c818fbd105e64 100644
--- a/civicrm/css/civicrm.css
+++ b/civicrm/css/civicrm.css
@@ -2329,6 +2329,7 @@ div.crm-master-accordion-header a.helpicon {
 .crm-container span.expanded:before,
 .crm-container a.expanded:before,
 .crm-container .crm-expand-row.expanded:before {
+  font-family: "FontAwesome";
   content: "\f0d7";
 }
 
diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md
index d9e8a8d34af3a15692bc751899fc584b339ca837..4baa73d92bd1b12e00033f039820bff34794b992 100644
--- a/civicrm/release-notes.md
+++ b/civicrm/release-notes.md
@@ -15,6 +15,15 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.28.3
+
+Released August 22, 2020
+
+- **[Synopsis](release-notes/5.28.3.md#synopsis)**
+- **[Bugs resolved](release-notes/5.28.3.md#bugs)**
+- **[Credits](release-notes/5.28.3.md#credits)**
+- **[Feedback](release-notes/5.28.3.md#feedback)**
+
 ## CiviCRM 5.28.2
 
 Released August 20, 2020
diff --git a/civicrm/release-notes/5.28.3.md b/civicrm/release-notes/5.28.3.md
new file mode 100644
index 0000000000000000000000000000000000000000..3d89063f2dc7091c3b05c51331ed67d0001cf100
--- /dev/null
+++ b/civicrm/release-notes/5.28.3.md
@@ -0,0 +1,43 @@
+# CiviCRM 5.28.3
+
+Released August 22, 2020
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a href="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |          |
+| --------------------------------------------------------------- | -------- |
+| Change the database schema?                                     | no       |
+| Alter the API?                                                  | no       |
+| Require attention to configuration options?                     | no       |
+| Fix problems installing or upgrading to a previous version?     | no       |
+| Introduce features?                                             | no       |
+| **Fix bugs?**                                                   | **yes**  |
+
+## <a href="bugs"></a>Bugs resolved
+
+* **_CiviContribute_: Re-enable "Cancel" button in backend UI for recurring contributions ([dev/core#1961](https://lab.civicrm.org/dev/core/-/issues/1961): [#18204](https://github.com/civicrm/civicrm-core/pull/18204))**
+* **_CiviContribute_: Contributions sometimes display "RoundingNecessaryException" ([dev/core#1959](https://lab.civicrm.org/dev/core/-/issues/1959): [#18206](https://github.com/civicrm/civicrm-core/pull/18206))**
+* **_Dedupe_: Merging certain contacts raises DB error ([dev/core#1964](https://lab.civicrm.org/dev/core/-/issues/1964): [#18223](https://github.com/civicrm/civicrm-core/pull/18223))**
+* **_Dedupe_: Deleted contacts are incorrectly displayed ([#18214](https://github.com/civicrm/civicrm-core/pull/18214))**
+* **_Drupal Views_: Filtering on multi-select custom fields ([dev/core#1966](https://lab.civicrm.org/dev/core/-/issues/1966): [drupal#615](https://github.com/civicrm/civicrm-drupal/pull/615), [drupal#618](https://github.com/civicrm/civicrm-drupal/pull/618))**
+* **_Quick Search_: Deleted contacts are incorrectly displayed ([#18213](https://github.com/civicrm/civicrm-core/pull/18213))**
+* **_Styling_: Collapse icon is incorrect ([dev/core#1963](https://lab.civicrm.org/dev/core/-/issues/1963): [#18205](https://github.com/civicrm/civicrm-core/pull/18205))**
+
+## <a href="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; MillerTech - Chamil Wijesooriya; MJW Consulting - Matthew
+Wire; JMA Consulting - Seamus Lee; Dave D; CiviCoop - Jaap Jansma; CiviCRM - Tim Otten; Circle
+Interactive - Pradeep Nayak; Australian Greens - Andrew Cormick-Dockery
+
+## <a href="feedback"></a>Feedback
+
+These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
+provide feedback on them, please login to https://chat.civicrm.org/civicrm and
+contact `@agh1`.
diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql
index 13f3b10d4bb8607e82cf4263736566a51074c228..cd4ce765c14886dd96e5f0a0cca64831ecce72a8 100644
--- a/civicrm/sql/civicrm_data.mysql
+++ b/civicrm/sql/civicrm_data.mysql
@@ -23897,4 +23897,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.28.2';
+UPDATE civicrm_domain SET version = '5.28.3';
diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql
index 53ced0499bd1c810d78d757778d7f42aed324fdb..dfa649ae07069fff59396805c12c4b68277fdf41 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`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.28.2',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
+INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.28.3',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/Contribute/Page/ContributionRecurSelector.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl
index ff7b972a45c561f83def97ac6074eb9c25cb77fd..22cdeeaa1172abf851f56c0b8475751e7e7e1f78 100644
--- a/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl
+++ b/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl
@@ -7,6 +7,7 @@
  | and copyright information, see https://civicrm.org/licensing       |
  +--------------------------------------------------------------------+
 *}
+{include file="CRM/common/enableDisableApi.tpl"}
 {strip}
   <table class="selector row-highlight">
     <tr class="columnheader">
diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php
index 23ceec17e46dc07f6df153778ba2bddb6add8def..f43d758759b3910e897389d4a8d08e3d6a9587e1 100644
--- a/civicrm/vendor/autoload.php
+++ b/civicrm/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb::getLoader();
+return ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1::getLoader();
diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php
index aa6a8629c79461380bcef7aded23efa5cd2053f4..3b30c798493e7971a908dbbe217e94cef38f6a1c 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 ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb
+class ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
@@ -31,7 +31,7 @@ class ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInitc69fc457976bd588df70c17890ca67e1::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -52,19 +52,19 @@ class ComposerAutoloaderInitbffa0af82b6cfe5255f87c69436476fb
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequirebffa0af82b6cfe5255f87c69436476fb($fileIdentifier, $file);
+            composerRequirec69fc457976bd588df70c17890ca67e1($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequirebffa0af82b6cfe5255f87c69436476fb($fileIdentifier, $file)
+function composerRequirec69fc457976bd588df70c17890ca67e1($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 f372450d7421d50d796f9b4289a496d9bcff77aa..4e97d464b184c04b743737e50643897b50858cac 100644
--- a/civicrm/vendor/composer/autoload_static.php
+++ b/civicrm/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb
+class ComposerStaticInitc69fc457976bd588df70c17890ca67e1
 {
     public static $files = array (
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -530,11 +530,11 @@ class ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInitbffa0af82b6cfe5255f87c69436476fb::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml
index ca1b536c2b11f87a66f377e27542f8b508dd20cb..031493b9dc89672c449ed5815aba85b2d28f5db2 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.28.2</version_no>
+  <version_no>5.28.3</version_no>
 </version>