diff --git a/civicrm.php b/civicrm.php
index 9d5c5c5a893b2780dc0b01db77d53d2aade4e2f4..48df7cfaa06addee3498bc72e83bfbdd1c023757 100644
--- a/civicrm.php
+++ b/civicrm.php
@@ -2,7 +2,7 @@
 /*
 Plugin Name: CiviCRM
 Description: CiviCRM - Growing and Sustaining Relationships
-Version: 5.17.0
+Version: 5.17.4
 Author: CiviCRM LLC
 Author URI: https://civicrm.org/
 Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress
diff --git a/civicrm/CRM/ACL/Form/WordPress/Permissions.php b/civicrm/CRM/ACL/Form/WordPress/Permissions.php
index bad293c934c17f1d0567697ce7abc3b935b3501e..65191fb9793aed95be6ef1190364b5fd59b5a109 100644
--- a/civicrm/CRM/ACL/Form/WordPress/Permissions.php
+++ b/civicrm/CRM/ACL/Form/WordPress/Permissions.php
@@ -54,7 +54,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/Campaign/Form/Campaign.php b/civicrm/CRM/Campaign/Form/Campaign.php
index 813d34005586eaef82181d552c1bdd3dac01e8c2..1723cefa932658a690ef5ce374b7fb888378f03b 100644
--- a/civicrm/CRM/Campaign/Form/Campaign.php
+++ b/civicrm/CRM/Campaign/Form/Campaign.php
@@ -165,6 +165,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form {
   }
 
   public function buildQuickForm() {
+    $this->add('hidden', 'id', $this->_campaignId);
     if ($this->_action & CRM_Core_Action::DELETE) {
 
       $this->addButtons([
@@ -186,7 +187,6 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form {
     //lets assign custom data type and subtype.
     $this->assign('customDataType', 'Campaign');
     $this->assign('entityID', $this->_campaignId);
-    $this->assign('id', $this->_campaignId);
     $this->assign('customDataSubType', CRM_Utils_Array::value('campaign_type_id', $this->_values));
 
     $attributes = CRM_Core_DAO::getAttribute('CRM_Campaign_DAO_Campaign');
@@ -292,14 +292,18 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form {
 
     $session = CRM_Core_Session::singleton();
     $params = $this->controller->exportValues($this->_name);
-    if (isset($this->_campaignId)) {
+    // To properly save the DAO we need to ensure we don't have a blank id key passed through.
+    if (empty($params['id'])) {
+      unset($params['id']);
+    }
+    if (!empty($params['id'])) {
       if ($this->_action & CRM_Core_Action::DELETE) {
-        CRM_Campaign_BAO_Campaign::del($this->_campaignId);
+        CRM_Campaign_BAO_Campaign::del($params['id']);
         CRM_Core_Session::setStatus(ts('Campaign has been deleted.'), ts('Record Deleted'), 'success');
         $session->replaceUserContext(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=campaign'));
         return;
       }
-      $params['id'] = $this->_campaignId;
+      $this->_campaignId = $params['id'];
     }
     else {
       $params['created_id'] = $session->get('userID');
@@ -328,7 +332,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form {
 
   public static function submit($params = [], $form) {
     $groups = [];
-    if (is_array($params['includeGroups'])) {
+    if (!empty($params['includeGroups']) && is_array($params['includeGroups'])) {
       foreach ($params['includeGroups'] as $key => $id) {
         if ($id) {
           $groups['include'][] = $id;
@@ -355,6 +359,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form {
       $form->_campaignId,
       'Campaign'
     );
+
     // dev/core#1067 Clean Money before passing onto BAO to do the create.
     $params['goal_revenue'] = CRM_Utils_Rule::cleanMoney($params['goal_revenue']);
     $result = civicrm_api3('Campaign', 'create', $params);
diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php
index 7a6b045758774cedddb9442314c96b9bf647d5a4..e7fca08a8d930e7307f193061bd577573b176651 100644
--- a/civicrm/CRM/Contact/BAO/Query.php
+++ b/civicrm/CRM/Contact/BAO/Query.php
@@ -566,7 +566,8 @@ class CRM_Contact_BAO_Query {
     $this->_whereTables = $this->_tables;
 
     $this->selectClause($apiEntity);
-    $this->_whereClause = $this->whereClause($apiEntity);
+    $isForcePrimaryOnly = !empty($apiEntity);
+    $this->_whereClause = $this->whereClause($isForcePrimaryOnly);
     if (array_key_exists('civicrm_contribution', $this->_whereTables)) {
       $component = 'contribution';
     }
@@ -1808,9 +1809,11 @@ class CRM_Contact_BAO_Query {
    * Get the where clause for a single field.
    *
    * @param array $values
-   * @param string $apiEntity
+   * @param bool $isForcePrimaryOnly
+   *
+   * @throws \CRM_Core_Exception
    */
-  public function whereClauseSingle(&$values, $apiEntity = NULL) {
+  public function whereClauseSingle(&$values, $isForcePrimaryOnly = FALSE) {
     if ($this->isARelativeDateField($values[0])) {
       $this->buildRelativeDateQuery($values);
       return;
@@ -1886,7 +1889,7 @@ class CRM_Contact_BAO_Query {
 
       case 'email':
       case 'email_id':
-        $this->email($values, $apiEntity);
+        $this->email($values, $isForcePrimaryOnly);
         return;
 
       case 'phone_numeric':
@@ -2055,11 +2058,12 @@ class CRM_Contact_BAO_Query {
   /**
    * Given a list of conditions in params generate the required where clause.
    *
-   * @param string $apiEntity
+   * @param bool $isForcePrimaryEmailOnly
    *
    * @return string
+   * @throws \CRM_Core_Exception
    */
-  public function whereClause($apiEntity = NULL) {
+  public function whereClause($isForcePrimaryEmailOnly = NULL) {
     $this->_where[0] = [];
     $this->_qill[0] = [];
 
@@ -2086,7 +2090,7 @@ class CRM_Contact_BAO_Query {
           ]);
         }
         else {
-          $this->whereClauseSingle($this->_params[$id], $apiEntity);
+          $this->whereClauseSingle($this->_params[$id], $isForcePrimaryEmailOnly);
         }
       }
 
@@ -3558,26 +3562,29 @@ WHERE  $smartGroupClause
    * Where / qill clause for email
    *
    * @param array $values
-   * @param string $apiEntity
+   * @param string $isForcePrimaryOnly
+   *
+   * @throws \CRM_Core_Exception
    */
-  protected function email(&$values, $apiEntity) {
+  protected function email(&$values, $isForcePrimaryOnly) {
     list($name, $op, $value, $grouping, $wildcard) = $values;
     $this->_tables['civicrm_email'] = $this->_whereTables['civicrm_email'] = 1;
 
     // CRM-18147: for Contact's GET API, email fieldname got appended with its entity as in {$apiEntiy}_{$name}
     // so following code is use build whereClause for contact's primart email id
-    if (!empty($apiEntity)) {
-      $dataType = 'String';
-      if ($name == 'email_id') {
-        $dataType = 'Integer';
-        $name = 'id';
-      }
-
+    if (!empty($isForcePrimaryOnly)) {
       $this->_where[$grouping][] = self::buildClause('civicrm_email.is_primary', '=', 1, 'Integer');
-      $this->_where[$grouping][] = self::buildClause("civicrm_email.$name", $op, $value, $dataType);
+    }
+    // @todo - this should come from the $this->_fields array
+    $dbName = $name === 'email_id' ? 'id' : $name;
+
+    if (is_array($value) || $name === 'email_id') {
+      $this->_qill[$grouping][] = $this->getQillForField($name, $value, $op);
+      $this->_where[$grouping][] = self::buildClause('civicrm_email.' . $dbName, $op, $value, 'String');
       return;
     }
 
+    // Is this ever hit now? Ideally ensure always an array & handle above.
     $n = trim($value);
     if ($n) {
       if (substr($n, 0, 1) == '"' &&
@@ -7049,4 +7056,22 @@ AND   displayRelType.is_active = 1
     return $statuses;
   }
 
+  /**
+   * Get the qill value for the field.
+   *
+   * @param $name
+   * @param array|int|string $value
+   * @param $op
+   *
+   * @return string
+   */
+  protected function getQillForField($name, $value, $op): string {
+    list($qillop, $qillVal) = CRM_Contact_BAO_Query::buildQillForFieldValue(NULL, $name, $value, $op);
+    return (string) ts("%1 %2 %3", [
+      1 => ts('Email'),
+      2 => $qillop,
+      3 => $qillVal,
+    ]);
+  }
+
 }
diff --git a/civicrm/CRM/Core/BAO/Dashboard.php b/civicrm/CRM/Core/BAO/Dashboard.php
index 8eef1432321fb40c383683ca6df78d6188f518c4..8b61cf0c0d6605828586d26ce3dd2e54ea249c3d 100644
--- a/civicrm/CRM/Core/BAO/Dashboard.php
+++ b/civicrm/CRM/Core/BAO/Dashboard.php
@@ -109,7 +109,6 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard {
       'contact_id' => $contactID,
       'is_active' => 1,
       'dashboard_id.is_active' => 1,
-      'dashboard_id.domain_id' => CRM_Core_Config::domainID(),
       'options' => ['sort' => 'weight', 'limit' => 0],
       'return' => [
         'id',
@@ -144,7 +143,7 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard {
     // If empty, then initialize default dashlets for this user.
     if (!$results['count']) {
       // They may just have disabled all their dashlets. Check if any records exist for this contact.
-      if (!civicrm_api3('DashboardContact', 'getcount', ['contact_id' => $contactID, 'dashboard_id.domain_id' => CRM_Core_Config::domainID()])) {
+      if (!civicrm_api3('DashboardContact', 'getcount', ['contact_id' => $contactID])) {
         $dashlets = self::initializeDashlets();
       }
     }
@@ -389,13 +388,7 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard {
     $dashlet = new CRM_Core_DAO_Dashboard();
 
     if (!$dashboardID) {
-
-      // Assign domain before search to allow identical dashlets in different domains.
-      if (empty($params['domain_id'])) {
-        $dashlet->domain_id = CRM_Core_Config::domainID();
-      }
-
-      // Try and find an existing dashlet - it will be updated if found.
+      // check url is same as exiting entries, if yes just update existing
       if (!empty($params['name'])) {
         $dashlet->name = CRM_Utils_Array::value('name', $params);
         $dashlet->find(TRUE);
@@ -404,7 +397,9 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard {
         $dashlet->url = CRM_Utils_Array::value('url', $params);
         $dashlet->find(TRUE);
       }
-
+      if (empty($params['domain_id'])) {
+        $dashlet->domain_id = CRM_Core_Config::domainID();
+      }
     }
     else {
       $dashlet->id = $dashboardID;
diff --git a/civicrm/CRM/Core/BAO/Domain.php b/civicrm/CRM/Core/BAO/Domain.php
index 78460afdc42c7cdc0424538e16b5709d469b6090..d4ccd6c9d1d021bdc0322668a0dc36121554e067 100644
--- a/civicrm/CRM/Core/BAO/Domain.php
+++ b/civicrm/CRM/Core/BAO/Domain.php
@@ -127,12 +127,10 @@ class CRM_Core_BAO_Domain extends CRM_Core_DAO_Domain {
    *   domain
    */
   public static function edit(&$params, &$id) {
-    CRM_Utils_Hook::pre('edit', 'Domain', CRM_Utils_Array::value('id', $params), $params);
     $domain = new CRM_Core_DAO_Domain();
     $domain->id = $id;
     $domain->copyValues($params);
     $domain->save();
-    CRM_Utils_Hook::post('edit', 'Domain', $domain->id, $domain);
     return $domain;
   }
 
@@ -145,12 +143,9 @@ class CRM_Core_BAO_Domain extends CRM_Core_DAO_Domain {
    *   domain
    */
   public static function create($params) {
-    $hook = empty($params['id']) ? 'create' : 'edit';
-    CRM_Utils_Hook::pre($hook, 'Domain', CRM_Utils_Array::value('id', $params), $params);
     $domain = new CRM_Core_DAO_Domain();
     $domain->copyValues($params, TRUE);
     $domain->save();
-    CRM_Utils_Hook::post($hook, 'Domain', $domain->id, $domain);
     return $domain;
   }
 
diff --git a/civicrm/CRM/Core/BAO/Mapping.php b/civicrm/CRM/Core/BAO/Mapping.php
index 404d0ffcfb0d8bd0d3f9f414213750a0a3eace3e..de2508f65bd8553233830de2ee4205ea0c2fb464 100644
--- a/civicrm/CRM/Core/BAO/Mapping.php
+++ b/civicrm/CRM/Core/BAO/Mapping.php
@@ -373,6 +373,7 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
       );
     }
 
+    $contactTypes = CRM_Contact_BAO_ContactType::basicTypes();
     $fields = self::getBasicFields($mappingType);
 
     // Unset groups, tags, notes for component export
@@ -383,14 +384,21 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
     }
 
     if ($mappingType == 'Search Builder') {
-      //build the common contact fields array.
+      // Build the common contact fields array.
       $fields['Contact'] = [];
-      foreach ($fields['Individual'] as $key => $value) {
-        if (!empty($fields['Household'][$key]) && !empty($fields['Organization'][$key])) {
+      foreach ($fields[$contactTypes[0]] as $key => $value) {
+        // If a field exists across all contact types, move it to the "Contact" selector
+        $ubiquitious = TRUE;
+        foreach ($contactTypes as $type) {
+          if (!isset($fields[$type][$key])) {
+            $ubiquitious = FALSE;
+          }
+        }
+        if ($ubiquitious) {
           $fields['Contact'][$key] = $value;
-          unset($fields['Organization'][$key],
-            $fields['Household'][$key],
-            $fields['Individual'][$key]);
+          foreach ($contactTypes as $type) {
+            unset($fields[$type][$key]);
+          }
         }
       }
       if (array_key_exists('note', $fields['Contact'])) {
@@ -429,7 +437,7 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
         }
       }
 
-      if (array_key_exists('related', $relatedMapperFields[$key])) {
+      if (isset($relatedMapperFields[$key]['related'])) {
         unset($relatedMapperFields[$key]['related']);
       }
     }
@@ -451,18 +459,18 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
 
     // since we need a hierarchical list to display contact types & subtypes,
     // this is what we going to display in first selector
-    $contactTypes = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, FALSE);
+    $contactTypeSelect = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, FALSE);
     if ($mappingType == 'Search Builder') {
-      $contactTypes = ['Contact' => ts('Contacts')] + $contactTypes;
+      $contactTypeSelect = ['Contact' => ts('Contacts')] + $contactTypeSelect;
     }
 
-    $sel1 = ['' => ts('- select record type -')] + $contactTypes + $compArray;
+    $sel1 = ['' => ts('- select record type -')] + $contactTypeSelect + $compArray;
 
     foreach ($sel1 as $key => $sel) {
       if ($key) {
         // sort everything BUT the contactType which is sorted separately by
         // an initial commit of CRM-13278 (check ksort above)
-        if (!in_array($key, ['Individual', 'Household', 'Organization'])) {
+        if (!in_array($key, $contactTypes)) {
           asort($mapperFields[$key]);
         }
         $sel2[$key] = ['' => ts('- select field -')] + $mapperFields[$key];
diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php
index 1ade998abd75526e593bab89aff9b11a45e1643f..c4711b7d52389fabee815d3770f040c34defbef0 100644
--- a/civicrm/CRM/Core/Form/Search.php
+++ b/civicrm/CRM/Core/Form/Search.php
@@ -321,7 +321,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
       foreach ($fields as $fieldName => $field) {
         if (!empty($this->_formValues[$fieldName]) && empty($field['options']) && empty($field['pseudoconstant'])) {
           if (in_array($field['type'], [CRM_Utils_Type::T_STRING, CRM_Utils_Type::T_TEXT])) {
-            $this->_formValues[$fieldName] = ['LIKE' => CRM_Contact_BAO_Query::getWildCardedValue(TRUE, 'LIKE', $this->_formValues[$fieldName])];
+            $this->_formValues[$fieldName] = ['LIKE' => CRM_Contact_BAO_Query::getWildCardedValue(TRUE, 'LIKE', trim($this->_formValues[$fieldName]))];
           }
         }
       }
diff --git a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php
index 0bf756f151a2447f52591d70965e6a7d1b914a41..b11e8d50f3b44e4d9580c2f1e38fcc140ef2e334 100644
--- a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php
+++ b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php
@@ -66,9 +66,9 @@ class CRM_Event_Form_ManageEvent_EventInfo extends CRM_Event_Form_ManageEvent {
       $this->set('type', 'Event');
       $this->set('subType', CRM_Utils_Array::value('event_type_id', $_POST));
       $this->assign('customDataSubType', CRM_Utils_Array::value('event_type_id', $_POST));
-      $this->set('entityId', $this->_id);
+      $this->set('entityId', $entityID);
 
-      CRM_Custom_Form_CustomData::preProcess($this, NULL, $this->_eventType, 1, 'Event', $this->_id);
+      CRM_Custom_Form_CustomData::preProcess($this, NULL, $this->_eventType, 1, 'Event', $entityID);
       CRM_Custom_Form_CustomData::buildQuickForm($this);
       CRM_Custom_Form_CustomData::setDefaultValues($this);
     }
diff --git a/civicrm/CRM/Export/BAO/Export.php b/civicrm/CRM/Export/BAO/Export.php
index b7f06d505bcda77850a1fdbaef2ed4e1ab05a46c..2be84a1d8f4677298bb3fc19a84c9618d77e7184 100644
--- a/civicrm/CRM/Export/BAO/Export.php
+++ b/civicrm/CRM/Export/BAO/Export.php
@@ -118,6 +118,7 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c
     }
     $processor->setComponentTable($componentTable);
     $processor->setComponentClause($componentClause);
+    $processor->setIds($ids);
 
     list($query, $queryString) = $processor->runQuery($params, $order);
 
diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php
index bd9559bbe2a37bf5ffb9c0d09b1700a624b8b02e..86ac5057df0b8068e2c4139f562167d0ea7e3085 100644
--- a/civicrm/CRM/Export/BAO/ExportProcessor.php
+++ b/civicrm/CRM/Export/BAO/ExportProcessor.php
@@ -100,6 +100,13 @@ class CRM_Export_BAO_ExportProcessor {
    */
   protected $contactGreetingFields = [];
 
+  /**
+   * An array of primary IDs of the entity being exported.
+   *
+   * @var array
+   */
+  protected $ids = [];
+
   /**
    * Get additional non-visible fields for address merge purposes.
    *
@@ -585,6 +592,20 @@ class CRM_Export_BAO_ExportProcessor {
     $this->queryOperator = $queryOperator;
   }
 
+  /**
+   * @return array
+   */
+  public function getIds() {
+    return $this->ids;
+  }
+
+  /**
+   * @param array $ids
+   */
+  public function setIds($ids) {
+    $this->ids = $ids;
+  }
+
   /**
    * @return array
    */
@@ -2326,7 +2347,14 @@ WHERE  id IN ( $deleteIDString )
     // call export hook
     $headerRows = $this->getHeaderRows();
     $exportTempTable = $this->getTemporaryTable();
+    $exportMode = $this->getExportMode();
+    $sqlColumns = $this->getSQLColumns();
+    $componentTable = $this->getComponentTable();
+    $ids = $this->getIds();
     CRM_Utils_Hook::export($exportTempTable, $headerRows, $sqlColumns, $exportMode, $componentTable, $ids);
+    if ($exportMode !== $this->getExportMode() || $componentTable !== $this->getComponentTable()) {
+      CRM_Core_Error::deprecatedFunctionWarning('altering the export mode and/or component table in the hook is no longer supported.');
+    }
     if ($exportTempTable !== $this->getTemporaryTable()) {
       CRM_Core_Error::deprecatedFunctionWarning('altering the export table in the hook is deprecated (in some flows the table itself will be)');
       $this->setTemporaryTable($exportTempTable);
@@ -2355,7 +2383,7 @@ LIMIT $offset, $limit
       while ($dao->fetch()) {
         $row = [];
 
-        foreach (array_keys($this->getSQLColumns()) as $column) {
+        foreach (array_keys($sqlColumns) as $column) {
           $row[$column] = $dao->$column;
         }
         $componentDetails[] = $row;
diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php
index 8090032de0de291ec5aa7f9295f47592a3493d4f..77495fdcbaa1c586e3199d2bb8c8231029c278cf 100644
--- a/civicrm/CRM/Report/Form.php
+++ b/civicrm/CRM/Report/Form.php
@@ -155,9 +155,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.
    *
@@ -2845,11 +2842,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');
     }
@@ -3502,9 +3494,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/xml/Menu/Report.xml b/civicrm/CRM/Report/xml/Menu/Report.xml
index 6426e1cc018e4a86610d2d6bb45e8f2da5893489..e6f57492efe1263ccf1658e1c28da902dedcf715 100644
--- a/civicrm/CRM/Report/xml/Menu/Report.xml
+++ b/civicrm/CRM/Report/xml/Menu/Report.xml
@@ -14,7 +14,6 @@
      <title>CiviCRM Reports</title>
      <page_callback>CRM_Report_Page_InstanceList</page_callback>
      <access_callback>1</access_callback>
-     <is_public>true</is_public>
   </item>
   <item>
      <path>civicrm/report/template/list</path>
@@ -44,7 +43,6 @@
      <title>Report</title>
      <page_callback>CRM_Report_Page_Instance</page_callback>
      <access_callback>1</access_callback>
-     <is_public>true</is_public>
   </item>
   <item>
      <path>civicrm/admin/report/template/list</path>
diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php b/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php
index 9f362989b5adc19cdebcc335f722f0ea2ffa01fc..82ed72d0becaa8798e908c612e696eb938154da9 100644
--- a/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php
+++ b/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php
@@ -105,13 +105,24 @@ class CRM_Upgrade_Incremental_php_FiveSeventeen extends CRM_Upgrade_Incremental_
     $this->addTask(ts('Add pptx to accepted attachment file types'), 'updateFileTypes');
   }
 
+  /**
+   * Upgrade function.
+   *
+   * @param string $rev
+   */
+  public function upgrade_5_17_1($rev) {
+    // Need to do this again because the alpha1 version had a typo and so didn't do anything.
+    $this->addTask(ts('Add pptx to accepted attachment file types'), 'updateFileTypes');
+  }
+
   /**
    * Update safe file types.
    */
   public function updateFileTypes() {
     CRM_Core_BAO_OptionValue::ensureOptionValueExists([
-      'safe_file_extension',
-      ['label' => 'pptx', 'name' => 'pptx'],
+      'option_group_id' => 'safe_file_extension',
+      'label' => 'pptx',
+      'name' => 'pptx',
     ]);
     return TRUE;
   }
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.17.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.17.1.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..00d208673b2c2d9f8de7aa35bc656bbb2c6b599e
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.17.1.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.17.1 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.17.2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.17.2.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..08c75608e25ab93ff824dfef6d5181c470874d60
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.17.2.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.17.2 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.17.3.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.17.3.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..684237bb69cd52be4a01d70bb4a13740888844bf
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.17.3.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.17.3 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.17.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.17.4.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..bf00882ddf36948db3143ffb0144364731f63797
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.17.4.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.17.4 during upgrade *}
diff --git a/civicrm/CRM/Utils/API/HTMLInputCoder.php b/civicrm/CRM/Utils/API/HTMLInputCoder.php
index bc9a2b51810b789435eb9bc0fe0faa3ba039083d..c0f5cdecc8cb3ab9c18adfeebe9ef12d40fb0437 100644
--- a/civicrm/CRM/Utils/API/HTMLInputCoder.php
+++ b/civicrm/CRM/Utils/API/HTMLInputCoder.php
@@ -119,6 +119,8 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder {
         'operator',
         // CRM-20468
         'content',
+        // CiviCampaign Goal Details
+        'goal_general',
       ];
       $custom = CRM_Core_DAO::executeQuery('SELECT id FROM civicrm_custom_field WHERE html_type = "RichTextEditor"');
       while ($custom->fetch()) {
diff --git a/civicrm/CRM/Utils/System/DrupalBase.php b/civicrm/CRM/Utils/System/DrupalBase.php
index 829b3870d152bfcb32e46d6261bd23cc61408baf..115efaebebbec9b58c00eb0b4aef02dc65fa102f 100644
--- a/civicrm/CRM/Utils/System/DrupalBase.php
+++ b/civicrm/CRM/Utils/System/DrupalBase.php
@@ -673,9 +673,7 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base {
    * @return bool
    */
   public function isFrontEndPage() {
-    // Get the menu items.
-    $args = explode('?', $_GET['q']);
-    $path = $args[0];
+    $path = CRM_Utils_System::getUrlPath();
 
     // Get the menu for above URL.
     $item = CRM_Core_Menu::get($path);
diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php
index d841ba15d8875b65628d0425cc801efde688659a..bf35954360efa02b4711d693867b1103ffcc9a9d 100644
--- a/civicrm/CRM/Utils/System/WordPress.php
+++ b/civicrm/CRM/Utils/System/WordPress.php
@@ -827,13 +827,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/api/v3/Contact.php b/civicrm/api/v3/Contact.php
index 3c2fc5bed28f07efda93bdbad960bf5de36a36e8..bcaa9954cc8b0fd69302347da3932079c93408b0 100644
--- a/civicrm/api/v3/Contact.php
+++ b/civicrm/api/v3/Contact.php
@@ -163,6 +163,8 @@ function _civicrm_api3_contact_create_spec(&$params) {
  *
  * @return array
  *   API Result Array
+ *
+ * @throws \API_Exception
  */
 function civicrm_api3_contact_get($params) {
   $options = [];
@@ -382,6 +384,11 @@ function _civicrm_api3_contact_get_spec(&$params) {
  *   Array of options (so we can modify the filter).
  */
 function _civicrm_api3_contact_get_supportanomalies(&$params, &$options) {
+  if (!empty($params['email']) && !is_array($params['email'])) {
+    // Fix this to be in array format so the query object does not add LIKE
+    // I think there is a better fix that I will do for master.
+    $params['email'] = ['=' => $params['email']];
+  }
   if (isset($params['showAll'])) {
     if (strtolower($params['showAll']) == "active") {
       $params['contact_is_deleted'] = 0;
diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php
index 55ea38b126dc54c4c6e8a4631c87a2de391a7de1..7268e7e92c1ae6142b04495110e2de9381b958c4 100644
--- a/civicrm/civicrm-version.php
+++ b/civicrm/civicrm-version.php
@@ -1,7 +1,7 @@
 <?php
 /** @deprecated */
 function civicrmVersion( ) {
-  return array( 'version'  => '5.17.0',
+  return array( 'version'  => '5.17.4',
                 'cms'      => 'Wordpress',
                 'revision' => '' );
 }
diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md
index a35dc34a517c11cb28bf5e47e17c94a6b0872c21..8a49819b296c779aee08dfb73182e6c3104035cf 100644
--- a/civicrm/release-notes.md
+++ b/civicrm/release-notes.md
@@ -15,6 +15,42 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.17.4
+
+Released September 12, 2019
+
+- **[Synopsis](release-notes/5.17.4.md#synopsis)**
+- **[Bugs resolved](release-notes/5.17.4.md#bugs)**
+- **[Credits](release-notes/5.17.4.md#credits)**
+- **[Feedback](release-notes/5.17.4.md#feedback)**
+
+## CiviCRM 5.17.3
+
+Released September 10, 2019
+
+- **[Synopsis](release-notes/5.17.3.md#synopsis)**
+- **[Bugs resolved](release-notes/5.17.3.md#bugs)**
+- **[Credits](release-notes/5.17.3.md#credits)**
+- **[Feedback](release-notes/5.17.3.md#feedback)**
+
+## CiviCRM 5.17.2
+
+Released September 9, 2019
+
+- **[Synopsis](release-notes/5.17.2.md#synopsis)**
+- **[Bugs resolved](release-notes/5.17.2.md#bugs)**
+- **[Credits](release-notes/5.17.2.md#credits)**
+- **[Feedback](release-notes/5.17.2.md#feedback)**
+
+## CiviCRM 5.17.1
+
+Released September 9, 2019
+
+- **[Synopsis](release-notes/5.17.1.md#synopsis)**
+- **[Bugs resolved](release-notes/5.17.1.md#bugs)**
+- **[Credits](release-notes/5.17.1.md#credits)**
+- **[Feedback](release-notes/5.17.1.md#feedback)**
+
 ## CiviCRM 5.17.0
 
 Released September 4, 2019
diff --git a/civicrm/release-notes/5.17.1.md b/civicrm/release-notes/5.17.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..58a979c599ef61d726ddc0793df0ddbea4a8d941
--- /dev/null
+++ b/civicrm/release-notes/5.17.1.md
@@ -0,0 +1,39 @@
+# CiviCRM 5.17.1
+
+Released September 9, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| Change the database schema?                                     |   no    |
+| Alter the API?                                                  |   no    |
+| Require attention to configuration options?                     |   no    |
+| **Fix problems installing or upgrading to a previous version?** | **yes** |
+| Introduce features?                                             |   no    |
+| **Fix bugs?**                                                   | **yes** |
+
+## <a name="bugs"></a>Bugs resolved
+
+- **CiviCampaign: Fix deletion of campaigns when popups are disabled ([dev/core#1233](https://lab.civicrm.org/dev/core/issues/1233): [#15233](https://github.com/civicrm/civicrm-core/pull/15233))**
+- **Upgrade: Fix adding of pptx to the list of safe file extensions ([dev/core#1190](https://lab.civicrm.org/dev/core/issues/1190): [#15239](https://github.com/civicrm/civicrm-core/pull/15239))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; iXiam - César Ramos; Dave D;
+CiviCRM - Tim Otten; Australian Greens - Seamus Lee
+
+## <a name="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/release-notes/5.17.2.md b/civicrm/release-notes/5.17.2.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc537db7286aea65bfacc83d8e5cb5a914f59d4b
--- /dev/null
+++ b/civicrm/release-notes/5.17.2.md
@@ -0,0 +1,37 @@
+# CiviCRM 5.17.2
+
+Released September 9, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| 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 name="bugs"></a>Bugs resolved
+
+- **_Advanced Search_: Fix failure when searching by email ([dev/core#1244](https://lab.civicrm.org/dev/core/issues/1244): [#15255](https://github.com/civicrm/civicrm-core/pull/15255))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; Australian Greens - Seamus Lee
+
+## <a name="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/release-notes/5.17.3.md b/civicrm/release-notes/5.17.3.md
new file mode 100644
index 0000000000000000000000000000000000000000..438debf64256c2751ea3b589230d327dad6dd748
--- /dev/null
+++ b/civicrm/release-notes/5.17.3.md
@@ -0,0 +1,40 @@
+# CiviCRM 5.17.3
+
+Released September 10, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| 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 name="bugs"></a>Bugs resolved
+
+- **_Advanced Search_: Fix additional issues with email filtering ([#15275](https://github.com/civicrm/civicrm-core/pull/15275), [#15276](https://github.com/civicrm/civicrm-core/pull/15276))**
+- **_CiviReports_: Present reports using backend UI ([#15261](https://github.com/civicrm/civicrm-core/pull/15261))**
+- **_Drupal 8_: Resolve new warnings about deprecated `q` variable ([dev/core#52](https://lab.civicrm.org/dev/drupal/issues/52): [#15268](https://github.com/civicrm/civicrm-core/pull/15268))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; SemperIT - Karin Gerritsen; John
+Kingsnorth; Jens Schuppe; Coop SymbioTIC - Mathieu Lutfy; CiviCRM - Tim
+Otten; Australian Greens - Seamus Lee
+
+## <a name="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/release-notes/5.17.4.md b/civicrm/release-notes/5.17.4.md
new file mode 100644
index 0000000000000000000000000000000000000000..40fe84125dc9feb4b25adce4c2a23693402194a4
--- /dev/null
+++ b/civicrm/release-notes/5.17.4.md
@@ -0,0 +1,42 @@
+# CiviCRM 5.17.4
+
+Released September 12, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| 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 name="bugs"></a>Bugs resolved
+
+- **_CiviEvent_: Incorrect validation message when using a template and custom field ([dev/core#1241](https://lab.civicrm.org/dev/core/issues/1241): [#15292](https://github.com/civicrm/civicrm-core/pull/15292))**
+- **_Export_: Export hook omits most parameters ([dev/core#1247](https://lab.civicrm.org/dev/core/issues/1247): [#15287](https://github.com/civicrm/civicrm-core/pull/15287))**
+- **_Search Builder_: Fatal error if `Household` type is disabled ([dev/core#1246](https://lab.civicrm.org/dev/core/issues/1246): [#15284](https://github.com/civicrm/civicrm-core/pull/15284))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; Megaphone Technology Consulting -
+Jon Goldberg; Marcus J Wilson; JMA Consulting - Monish Deb; Dave D; Coop
+SymbioTIC - Mathieu Lutfy; CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts,
+Tim Otten; Caltha - Tomasz Pietrzkowski; Australian Greens - Seamus Lee;
+Agileware - Justin Freeman
+
+## <a name="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 e4a877a0fd1b2e7edbf8408693befea6895e7009..b0df00a5a726eea514863fcc7629e150b1e86c8b 100644
--- a/civicrm/sql/civicrm_data.mysql
+++ b/civicrm/sql/civicrm_data.mysql
@@ -24050,4 +24050,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.17.0';
+UPDATE civicrm_domain SET version = '5.17.4';
diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql
index 0effa371f68a5f0bc99ece39b894fc3f0dbb5f51..8c09872fbcd6f9ee88f87af15fdb7f8db7f9c614 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.17.0',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.17.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
 /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
 UNLOCK TABLES;
 
diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php
index 0dacd5acc5b015e76bfce02c38617e6deb0cc33f..f2a3da1a76b81b4beac903c35c7e1a53e8d32e4c 100644
--- a/civicrm/vendor/autoload.php
+++ b/civicrm/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8::getLoader();
+return ComposerAutoloaderInit3324202d05d7a3ae8de98f2b862178d5::getLoader();
diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php
index 60e9d16afd9236294d6c2725cb86efac235abe34..84bf40d5900606bd2f0e938cb8e521ed9cfbfd8c 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 ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8
+class ComposerAutoloaderInit3324202d05d7a3ae8de98f2b862178d5
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit3324202d05d7a3ae8de98f2b862178d5', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit3324202d05d7a3ae8de98f2b862178d5', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
@@ -31,7 +31,7 @@ class ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -52,19 +52,19 @@ class ComposerAutoloaderInitaddd23dcfc6b0d68da4604d6256054b8
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequireaddd23dcfc6b0d68da4604d6256054b8($fileIdentifier, $file);
+            composerRequire3324202d05d7a3ae8de98f2b862178d5($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequireaddd23dcfc6b0d68da4604d6256054b8($fileIdentifier, $file)
+function composerRequire3324202d05d7a3ae8de98f2b862178d5($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 adf62f2b9c5702f6b36607637d5c35b0a22a85e9..67bab4155040fcc568705bbe494e9c321f89c855 100644
--- a/civicrm/vendor/composer/autoload_static.php
+++ b/civicrm/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8
+class ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5
 {
     public static $files = array (
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -456,11 +456,11 @@ class ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInitaddd23dcfc6b0d68da4604d6256054b8::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInit3324202d05d7a3ae8de98f2b862178d5::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml
index acf72410cb24b252d15fec305aacd4257ec38b37..21d597b7d4b141991249d3d22ecf81d1c0cf6685 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.17.0</version_no>
+  <version_no>5.17.4</version_no>
 </version>