Apache Syncope - CHANGES
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

Release Notes - Syncope - Version 3.0.0
================================================================================

** Bug
    * [SYNCOPE-1706] - Notification task not created with event category PROPAGATION
    * [SYNCOPE-1707] - Failure when attempting to add Plain Schema via Console

** Improvement
    * [SYNCOPE-1696] - Audit Elasticsearch persistence
    * [SYNCOPE-1708] - Allow enable/disable extensions in enduser

Release Notes - Syncope - Version 3.0.0-M2
================================================================================

** Bug
    * [SYNCOPE-1701] - unable to build syncope-sra from Maven Archetype
    * [SYNCOPE-1704] - Policy update not affecting External Resources

** New Feature
    * [SYNCOPE-1700] - Leverage JSON DataType Support in Oracle

** Improvement
    * [SYNCOPE-1705] - Deprecate SchedulingPullActions

Release Notes - Syncope - Version 3.0.0-M1
================================================================================

** Bug
    * [SYNCOPE-1693] - Must change password submit on console leads to errors
    * [SYNCOPE-1698] - Aux classes number doubles when saving external resource

** New Feature
    * [SYNCOPE-1692] - Incremental propagation
    * [SYNCOPE-1697] - Commands & Macros

** Improvement
    * [SYNCOPE-1665] - In enduser manage provisioning result on create/update and set feedback accordingly
    * [SYNCOPE-1694] - Optimize creation of Implementation instances
    * [SYNCOPE-1695] - History console view improvements
    * [SYNCOPE-1699] - Extract key from path for UserUpdate ops if undefined in request body

Release Notes - Syncope - Version 3.0.0-M0
================================================================================

** Sub-task
    * [SYNCOPE-1413] - Remove CLI
    * [SYNCOPE-1414] - Remove GUI Installer
    * [SYNCOPE-1418] - Convert webapps to Spring Boot
    * [SYNCOPE-1421] - New Enduser UI
    * [SYNCOPE-1426] - Remove Eclipse IDE plugin
    * [SYNCOPE-1458] - Keymaster for Configuration Parameters
    * [SYNCOPE-1459] - Keymaster for Service Discovery
    * [SYNCOPE-1460] - Keymaster for dynamic Domain management
    * [SYNCOPE-1494] - Basic maven build to verify compilation correctness
    * [SYNCOPE-1495] - Remove deb packages
    * [SYNCOPE-1496] - Add integration tests for DBMSes via Docker
    * [SYNCOPE-1552] - Allow WA audits to be stored in Syncope
    * [SYNCOPE-1553] - Fetch WA auth modules & map to properties during bootstrap
    * [SYNCOPE-1555] - Allow WA as SAML2 IdP to fetch metadata over REST
    * [SYNCOPE-1556] - Allow WA as OIDC OP to fetch JWKS over REST
    * [SYNCOPE-1557] - Complete policies manipulating with authentication modules and mappings information
    * [SYNCOPE-1558] - Configure WA delegated authn module to SAML IdPs via REST
    * [SYNCOPE-1559] - Allow WA Google Auth MFA settings to become reloadable
    * [SYNCOPE-1562] - Handle OTP records for GoogleAuthN MFA
    * [SYNCOPE-1566] - Manage device registration records for GoogleAuthMFA
    * [SYNCOPE-1570] - Support U2F device registration via REST APIs
    * [SYNCOPE-1571] - Support U2F MFA tokens/requests via REST APIs
    * [SYNCOPE-1577] - Support CAS-enabled client applications
    * [SYNCOPE-1578] - Protected SRA Routes: OAuth 2.0 / OpenID Connect 1.0
    * [SYNCOPE-1579] - Protected SRA Routes: SAML 2.0
    * [SYNCOPE-1580] - Design WA REST APIs to configure configuration properties
    * [SYNCOPE-1582] - Protected SRA Routes: CAS
    * [SYNCOPE-1584] - Allow Syncope to manage WA authentication events
    * [SYNCOPE-1587] - Enable Web AuthN support for WA
    * [SYNCOPE-1588] - WA attributes consent management
    * [SYNCOPE-1595] - Support themes per client application
    * [SYNCOPE-1599] - Support Duo Security for MFA
    * [SYNCOPE-1625] - Support impersonation for Web Access
    * [SYNCOPE-1638] - Remove Netbeans IDE plugin
    * [SYNCOPE-1682] - WA: support CAS Attribute Resolution

** Bug
    * [SYNCOPE-1333] - Missing virtual attribute value in case of type extension
    * [SYNCOPE-1334] - Maven install problem with Apache Syncope 2.1.0
    * [SYNCOPE-1335] - Missing SQL statements when upgrading from 2.0 Jazz
    * [SYNCOPE-1337] - Password history policy is not enforced on salted passwords
    * [SYNCOPE-1338] - Double type conversion applied during pull leads to errors
    * [SYNCOPE-1339] - Enduser spinner does not apply to the whole page
    * [SYNCOPE-1340] - Cannot update membership attribute
    * [SYNCOPE-1342] - console UI login form ignores Domain selection
    * [SYNCOPE-1343] - Attributes are not reset after pull of null values
    * [SYNCOPE-1344] - CORE_SCHEME not being updated in enduser.properties
    * [SYNCOPE-1346] - Adding a new task while re-executing a propagation task
    * [SYNCOPE-1347] - Invocation Problem calling org.apache.syncope.installer.processes.ArchetypeProcess
    * [SYNCOPE-1350] - Date values not formatted according to the conversion pattern
    * [SYNCOPE-1352] - Group wizard doesn't update the plain attributes
    * [SYNCOPE-1353] - DBPasswordPropagationActions link in the reference guide is wrong
    * [SYNCOPE-1354] - Push Tasks do not send status onto External Resources
    * [SYNCOPE-1356] - LDAPMembershipPullActions does not remove memberships
    * [SYNCOPE-1357] - MemoryVirAttrCache not working
    * [SYNCOPE-1358] - Search by boolean value does not work from Admin Console
    * [SYNCOPE-1360] - Delegated administration to Dynamic Realms not possible
    * [SYNCOPE-1361] - Custom audit appender does not work after a restart
    * [SYNCOPE-1362] - Sorting users by creation date raises RuntimeException
    * [SYNCOPE-1363] - Deleting multiple users at once reports "Operation delete not supported"
    * [SYNCOPE-1364] - Upgrade tool from 2.0 script error
    * [SYNCOPE-1365] - Erorr during retrieve candidate groups for approval process
    * [SYNCOPE-1366] - Audit events ownership always set to admin user
    * [SYNCOPE-1370] - Password reset succeeds also on wrong captcha
    * [SYNCOPE-1373] - Custom task schedule is reset after update
    * [SYNCOPE-1374] - Concurrent propagation tasks for non-Master domains not saved
    * [SYNCOPE-1375] - The existence of a membership attribute mapping implies membership creation during pull
    * [SYNCOPE-1376] - swagger-ui server URL incorrect behind ssl reverse proxy
    * [SYNCOPE-1377] - Wrong X-Syncope-Domain header does not throw an error
    * [SYNCOPE-1380] - During Push or Pull, if policy with conflict resolution IGNORE is set, the process is interrupted as soon as such setting applies
    * [SYNCOPE-1383] - Exception during "getObject" from external resource
    * [SYNCOPE-1387] - ClassCast exception when pull realms
    * [SYNCOPE-1388] - mustChangePassword flag does not prevent user from invoking actions
    * [SYNCOPE-1389] - In case of virtual attribute mapping, propagation is always set as UPDATE also in case of CREATE
    * [SYNCOPE-1390] - Pull Realms: pull task with Unmatching Rules: PROVISION shouldn't create propagation task
    * [SYNCOPE-1391] - Check template for confirmPasswordReset and mustChangePassword
    * [SYNCOPE-1393] - jexl function fullPath2Dn return invalid value for ROOT realm
    * [SYNCOPE-1399] - Error while executing the custom task to initialize indices with Elasticsearch v6.x
    * [SYNCOPE-1404] - Dialog not closing in Netbeans ide plugin when creating a new element
    * [SYNCOPE-1405] - Error during db initialization: views.xml always set for PostgreSQL
    * [SYNCOPE-1406] - Error during startup because of missing property 'historyLevel'
    * [SYNCOPE-1407] - Date pattern ignored by widget
    * [SYNCOPE-1408] - Partial user edit via Role layout implies removing all unmanaged attributes
    * [SYNCOPE-1411] - User/Any object updates generate attributes with null owner in case of patches involving membership attributes
    * [SYNCOPE-1417] - Search with order by two plain attributes gives no results
    * [SYNCOPE-1419] - User and AnyObject search fails in case of not leaf conditions given on multivalue fields
    * [SYNCOPE-1420] - Expired Access Tokens might impede successful authentication
    * [SYNCOPE-1425] - Mapping item transformers do not work for non-string values
    * [SYNCOPE-1428] - APIs to read by key return 404 instead of 401 for not authenticated calls
    * [SYNCOPE-1429] - Wildcard case-insesitive queries do not work with Elasticsearch
    * [SYNCOPE-1430] - ItemTransformer for Date schemas throws NPE 
    * [SYNCOPE-1431] - Connector and Resource history compare does not work
    * [SYNCOPE-1432] - After creating new connector / resource, Topology does not show it
    * [SYNCOPE-1437] - Error while searching for users / groups / any objects with Elasticsearch when no data are present
    * [SYNCOPE-1438] - "changePwdDate" field is not initialized when create a new user with the specified password
    * [SYNCOPE-1439] - User membership attributes not updated
    * [SYNCOPE-1440] - Pagination of Users/Groups doesn't work as expected with Elasticsearch
    * [SYNCOPE-1442] - Inactive Job with cron expression set is executed anyway 
    * [SYNCOPE-1443] - Changing Display Rows number in Reconciliation Resource Panel doesn't work
    * [SYNCOPE-1446] - Persistence exception on PostgreSQL when AUDIT is enabled on propagation tasks 
    * [SYNCOPE-1447] - NPE while deleting a privilege from admin console
    * [SYNCOPE-1448] - Bean loading/register section not threadsafe
    * [SYNCOPE-1450] - Audit: sensitive information not masked by default during update
    * [SYNCOPE-1452] - Notification about is not deleted after update
    * [SYNCOPE-1453] - MappingItem with "mustChangePassword" field cannot be provisioned and updated during import
    * [SYNCOPE-1454] - Avoid duplicated Propagation Tasks
    * [SYNCOPE-1457] - NonAlphaNumeric policy pattern matches the "Not word" character class
    * [SYNCOPE-1461] - MySQL: Segmentation fault with query using JSON_TABLE
    * [SYNCOPE-1467] - RDN not allowed when an attribute of the group present also in the DN is changed
    * [SYNCOPE-1469] - MySQL with JSON support: errors during startup
    * [SYNCOPE-1470] - Flowable extension not working with MariaDB
    * [SYNCOPE-1472] - Resource association is duplicated on database after update, assign or link operations
    * [SYNCOPE-1474] - Resource is duplicated after batch operation
    * [SYNCOPE-1476] - Error while creating Enum schema from Admin Console
    * [SYNCOPE-1477] - jQuery UI's spinner not rendered
    * [SYNCOPE-1478] - Unable to remove value of "Schema to hold values for identifiers generated upon Create by the external Identity Store" from provisioning
    * [SYNCOPE-1480] - Elasticsearch:dynrealm assignment not updated on condition change
    * [SYNCOPE-1481] - Invalid values when saving a membership attribute of type date
    * [SYNCOPE-1483] - maven-enforcer-plugin: API incompatibility fails the build
    * [SYNCOPE-1484] - syncope-ide-netbeans submodule fails to find netbeans dependency
    * [SYNCOPE-1485] - Reindex of elasticsearch ends with memory error in case of huge amount of data
    * [SYNCOPE-1487] - Build Instructions do not say that the "patch" program is needed
    * [SYNCOPE-1488] - Change to MVM Env for JDK > 8.00
    * [SYNCOPE-1492] - Build Instructions are missing an EVN (DOCKER_HOST) needed for  mvn -Ppostgres-it 
    * [SYNCOPE-1493] - Mapping unique schema as remote key never matches internal objects
    * [SYNCOPE-1503] - Cannot remove provisioning information from Resource in Admin Console
    * [SYNCOPE-1504] - Error setting uidOnCreate attribute during a pull task with multiple provisions
    * [SYNCOPE-1505] - Changes to "AjaxPalettePanel" components in Console are not saved when the previous step button is pressed before submitting the wizard form
    * [SYNCOPE-1512] - Error while saving a unique plain attribute value with single quote when using JPA JSON
    * [SYNCOPE-1520] - Exception when updating Group unique attribute with JPA JSON
    * [SYNCOPE-1525] - Documentation indicates sharing private key, hiding public key
    * [SYNCOPE-1526] - Broken link to issues from reference documentation
    * [SYNCOPE-1533] - Broken backward compatibilty because of changes in Equals and HashCode methods in TOs
    * [SYNCOPE-1536] - Enduser UI does not clean up file alteration monitors on shutdown
    * [SYNCOPE-1537] - Password of LinkedAccounts not saved properly from Admin Console
    * [SYNCOPE-1538] - Admin Console: users / groups management slow to access with high number of realms
    * [SYNCOPE-1539] - AjaxPalettePanel does not support setRequired
    * [SYNCOPE-1542] - Search panel issues in Admin Console
    * [SYNCOPE-1544] - 'Override?' flag not properly set for password and username fields of LinkedAccounts
    * [SYNCOPE-1546] - PriorityPropagationTaskExecutor: rejected tasks not stored
    * [SYNCOPE-1554] - Generated default admin role layout doesn't work
    * [SYNCOPE-1560] - File upload component: missing translations
    * [SYNCOPE-1561] - Batch: missing support for custom TLSClientParameters
    * [SYNCOPE-1563] - User approval update should send the password only when requested
    * [SYNCOPE-1564] - Integration tests run with YAML payloads are failing
    * [SYNCOPE-1565] - Integration tests run with XML payloads are failing
    * [SYNCOPE-1567] - Mapping does not allow relationships
    * [SYNCOPE-1569] - Console: cannot save Reportlet search conditions
    * [SYNCOPE-1573] - Logout forced from Console when editing user with many memberships
    * [SYNCOPE-1583] - For members part of a Dynamic Group, but cannot access group attributes in member mapping
    * [SYNCOPE-1586] - Startup failures with sample docker-compose and MySQL
    * [SYNCOPE-1598] - Create or update user with two+ memberships for the same group are not prevented
    * [SYNCOPE-1601] - Propagation not always triggered after form submit in User Requests
    * [SYNCOPE-1602] - ConnObjectKey attribute values not included with DefaultPushCorrelationRule
    * [SYNCOPE-1603] - PushCorrelationRule not used for DELETE on External Resources
    * [SYNCOPE-1604] - AjaxDateTimePicker doesn't handle some 1900 dates the right way
    * [SYNCOPE-1605] - Propagation task not generated if update involves only ConnObjectLink
    * [SYNCOPE-1606] - Syncope returns an exception when doing two sequential operations for the same user from the toggle panel
    * [SYNCOPE-1607] - Console Page preferences not working
    * [SYNCOPE-1612] - "Operation is taking too long" warning while adding/editing a connector/resource  
    * [SYNCOPE-1613] - startAt date is set to start field for SCHEDULED, PULL and PUSH TaskTOs
    * [SYNCOPE-1616] - CSV and single push / pull concurrency issues
    * [SYNCOPE-1619] - SearchPanel should display the input field based on the type of the selected property
    * [SYNCOPE-1620] - JWT validation requires exp and nbf claims
    * [SYNCOPE-1622] - ConnId Connectors not pooled with Resource override
    * [SYNCOPE-1626] - rename package org.apache.syncope.common.keymaster.client.zookeper to zookeeper
    * [SYNCOPE-1628] - Console goes NPE when Connector fails to initialize
    * [SYNCOPE-1629] - JPA JSON: Date conversion pattern including slashes leads to incorrect search results
    * [SYNCOPE-1632] - Graphical issue on must change password view
    * [SYNCOPE-1634] - Group Owner update/delete action doesn't trigger propagation action
    * [SYNCOPE-1635] - Create Rules with configurations for each domain, make creation thread safe
    * [SYNCOPE-1640] - Uncaught exception when creating Enum schema
    * [SYNCOPE-1643] - Update of Realm doesn't trigger provisioning for users
    * [SYNCOPE-1644] - Task run failure with multi-node deployments
    * [SYNCOPE-1645] - Case insensitive search with Elasticsearch extension returns wrong results 
    * [SYNCOPE-1646] - Linked Account status set to wrong value on propagation
    * [SYNCOPE-1648] - Search with PostgreSQL JSONB fails for FIQL like 'username!=value'
    * [SYNCOPE-1649] - Reports: XML character escaping applied to CSV output
    * [SYNCOPE-1650] - Default Account Rule: pattern is ignored
    * [SYNCOPE-1651] - Invalid users can be specified in X-Syncope-Delegated-By
    * [SYNCOPE-1654] - Inconsistent Realm search FIQL expressions between JPA and Elasticsearch engines
    * [SYNCOPE-1656] - Remediations are not created on update while pulling
    * [SYNCOPE-1657] - Unable to define a new name for a cloned resource 
    * [SYNCOPE-1659] - Read-only flag not working in console on virtual attributes
    * [SYNCOPE-1660] - Anonymous requests does not store domain and delegatedBy information in the auth context
    * [SYNCOPE-1663] - Value errors in FIQL expressions lead to empty result rather than error messages
    * [SYNCOPE-1664] - JSONB: Inconsistent search query when is used a pull correlation rule
    * [SYNCOPE-1671] - Wrong JobDelegate column name in scheduled task table
    * [SYNCOPE-1672] - Can't retrieve Java classes when add java implementation for Password Rule, Account Rule and Reportlet on Console
    * [SYNCOPE-1676] - Wrong header color in reset password enduser
    * [SYNCOPE-1677] - Code editor in Console wraps short lines
    * [SYNCOPE-1683] - Show connector overridden properties in resource wizard in tabular topology during create
    * [SYNCOPE-1684] - NotFoundException thrown when enabled/disabled audit from console
    * [SYNCOPE-1690] - NPE when add search condition in topology explore resource
    * [SYNCOPE-1691] - Schema labels not used for attribute column headers

** New Feature
    * [SYNCOPE-129] - Delegation
    * [SYNCOPE-160] - Authentication features
    * [SYNCOPE-957] - Multiaccount
    * [SYNCOPE-1019] - Template mechanism for Enduser UI
    * [SYNCOPE-1220] - Support Groovy implementations in the Netbeans IDE plugin
    * [SYNCOPE-1348] - REST: replace bulk operations with batch requests
    * [SYNCOPE-1367] - Add some accessibility features to Enduser
    * [SYNCOPE-1368] - Add some accessibility features to Console
    * [SYNCOPE-1369] - User requests
    * [SYNCOPE-1395] - Leverage PostgreSQL's jsonb type
    * [SYNCOPE-1401] - Leverage MySQL JSON type
    * [SYNCOPE-1455] - New component: sra (API gateway)
    * [SYNCOPE-1456] - New component: Keymaster
    * [SYNCOPE-1506] - Merge Users
    * [SYNCOPE-1511] - Configure audit events create/update/etc of users, groups, etc
    * [SYNCOPE-1529] - French (CA) translation for Admin Console
    * [SYNCOPE-1545] - Web Access
    * [SYNCOPE-1680] - Support Simple MFA as an MFA Provider in WA
    * [SYNCOPE-1681] - Support LDAP Google Auth Tokens/Accounts in WA
    * [SYNCOPE-1688] - Console: saved queries

** Improvement
    * [SYNCOPE-1336] - Add pagination for approvals forms
    * [SYNCOPE-1341] - Domain should be configurable parameter for syncope-enduser docker image
    * [SYNCOPE-1355] - Document how to access services when using Docker Compose
    * [SYNCOPE-1379] - Make configurable resource check timeout
    * [SYNCOPE-1382] - Failure specifying push task filters including db column mapped as integer
    * [SYNCOPE-1384] - SAML 2.0: Allow to customize RequestedAuthnContext for a given Service Provider
    * [SYNCOPE-1385] - Priority propagation timeout hard coded into PriorityPropagationTaskExecutor
    * [SYNCOPE-1392] - Reduce usage of Reflection to improve overall performance
    * [SYNCOPE-1394] - Add un-claim capability for requests
    * [SYNCOPE-1396] - Give the possibility to configure TLS client parameters
    * [SYNCOPE-1397] - No Such element exception while editing USER update approval
    * [SYNCOPE-1409] - Avoid double round-trip to External Resource during Push
    * [SYNCOPE-1412] - Serch for identities with null attributes can be improved 
    * [SYNCOPE-1416] - remove user_search_null_attr view
    * [SYNCOPE-1422] - Permit to provide custom implementation of NotificationManager and AuditManager
    * [SYNCOPE-1424] - Improve Propagation task ordered search
    * [SYNCOPE-1433] - Unflag/flag uniqueness shouldn't be permitted
    * [SYNCOPE-1436] - Remove pullPolicy EAGER fetchType from JPAExternalResource
    * [SYNCOPE-1441] - Perform in-memory match for dynamic conditions
    * [SYNCOPE-1444] - Pull correlation rules: allow to discriminate ongoing event
    * [SYNCOPE-1445] - Docker: support pgjsonb as DBMS option
    * [SYNCOPE-1449] - Support multi-value attributes in JEXL expressions
    * [SYNCOPE-1465] - Add executor information to Task and Report executions
    * [SYNCOPE-1466] - Add context to user, group and any object metadata information
    * [SYNCOPE-1468] - Allow for configurable org.quartz.jobStore.misfireThreshold
    * [SYNCOPE-1473] - Provide a PropagationActions to maintain a conservative membership policy management
    * [SYNCOPE-1498] - Allow variable resolution in Content.xml
    * [SYNCOPE-1499] - Add support for READ correlation rule
    * [SYNCOPE-1500] - Allow single import from External Resource
    * [SYNCOPE-1501] - Allow filtering for explore resource
    * [SYNCOPE-1502] - Find Anys using FIQL: SQL improvements
    * [SYNCOPE-1508] - Allow to extend the set of attributes requested from External Resources
    * [SYNCOPE-1509] - Auto-select language from Accept-Language HTTP header
    * [SYNCOPE-1510] - Allow to store encrypted schema's secret key externally
    * [SYNCOPE-1513] - Allow to customize security headers
    * [SYNCOPE-1515] - Adapt realm selector to actual number of realms
    * [SYNCOPE-1517] - Audit appender should be configurable
    * [SYNCOPE-1518] - Allow X-Forwarded-For and X-Forwarded-Proto HTTP headers integration
    * [SYNCOPE-1519] - SchemaDataBinderImpl#update optimization
    * [SYNCOPE-1521] - Allow filtering for Role assignment
    * [SYNCOPE-1522] - Realm behaviors for Delegated Administration
    * [SYNCOPE-1523] - JPAConnInstanceDAO should be marked as Transactional
    * [SYNCOPE-1527] - Allow for custom search conditions
    * [SYNCOPE-1530] - Add parameters at User Requests start
    * [SYNCOPE-1531] - Easier bulk upload from / download to CSV
    * [SYNCOPE-1532] - Allow tilde for key values and Realms name
    * [SYNCOPE-1534] - Display friendly error messages in Admin Console
    * [SYNCOPE-1535] - Customize the order of the provisions of a resource according to the object classes
    * [SYNCOPE-1540] - Make internal storage export DBMS independent
    * [SYNCOPE-1541] - XML response message timestamps missing millisecs component if "0 msecs"
    * [SYNCOPE-1547] - Allow the possibility to customize the roles to be displayed
    * [SYNCOPE-1548] - Allow the possibility to customize the Groups wizard step
    * [SYNCOPE-1551] - Allow for info notifications in Admin Console
    * [SYNCOPE-1568] - Render custom wizard on user request
    * [SYNCOPE-1575] - Provide the ability to specify on which resources the user's status should be propagated
    * [SYNCOPE-1591] - Support fetching data from internal storage for XML content loader
    * [SYNCOPE-1594] - Allow to filter user requests and forms by username
    * [SYNCOPE-1597] - Enable default customization of console layout
    * [SYNCOPE-1600] - Flowable: support password form property type
    * [SYNCOPE-1608] - Allow wildcard group membership search
    * [SYNCOPE-1609] - Reduce the number of table joins into PostgreSQL JSONB persistence implementation
    * [SYNCOPE-1610] - Set Reconciliation to work with Pull and Push Correlation Rules if available
    * [SYNCOPE-1611] - Caffeine Cache for Virtual Attribute Cache
    * [SYNCOPE-1614] - Convert SyncopeService into Spring Boot's InfoContributor
    * [SYNCOPE-1615] - Convert LoggerService into Spring Boot's loggers actuator 
    * [SYNCOPE-1624] - Toggle panel improvements
    * [SYNCOPE-1630] - Use Group owners to extend Delegated Administration
    * [SYNCOPE-1631] - Pass ConnId ObjectClass to ReconFilterBuilder
    * [SYNCOPE-1633] - Give the possibility to add a custom message to the confirm dialog
    * [SYNCOPE-1639] - Provide ordering of attributes in the diff view on the history management
    * [SYNCOPE-1641] - Allow to purge Propagation Tasks
    * [SYNCOPE-1652] - Align AccessPolicy with CAS DefaultRegisteredServiceAccessStrategy
    * [SYNCOPE-1653] - Align AttrReleasePolicy with CAS ReturnAllowedAttributeReleasePolicy
    * [SYNCOPE-1658] - Allow to view the topology in table format
    * [SYNCOPE-1661] - Add sidebar layout customization thorugh JSON file to enduser
    * [SYNCOPE-1666] - Security Answer encryption 
    * [SYNCOPE-1667] - Propagation Policy
    * [SYNCOPE-1668] - Provide Entity Cache report and management
    * [SYNCOPE-1669] - Create pull results for remediations
    * [SYNCOPE-1670] - Support Graceful shutdown
    * [SYNCOPE-1673] - Use Passay for password validation and generation
    * [SYNCOPE-1674] - Optimize User, Group and Any Object lifecycle events management
    * [SYNCOPE-1678] - Allow for non-recursive search operations
    * [SYNCOPE-1679] - Allow to search by Auxiliary Any Type class assignment
    * [SYNCOPE-1685] - Allow JEXL expression to evaluate to Object
    * [SYNCOPE-1687] - Allow to configure External Resources not to pre-fetch objects during propagation
    * [SYNCOPE-1689] - Consolidate Provision, Mapping and Items into single JSON column

** Task
    * [SYNCOPE-1258] - Upgrade to Font Awesome 5
    * [SYNCOPE-1332] - Java 11 language features
    * [SYNCOPE-1381] - Support user request from Enduser UI
    * [SYNCOPE-1400] - Support MySQL 8
    * [SYNCOPE-1402] - Upgrade to Validation API 2.0
    * [SYNCOPE-1410] - Prepare code tree for 3.0 architecture
    * [SYNCOPE-1435] - Upgrade to Bootstrap 4 / AdminLTE 3
    * [SYNCOPE-1464] - Upgrade to Apache Netbeans Maven dependencies
    * [SYNCOPE-1486] - Upgrade maven-checkstyle-plugin to checkstyle 8.24
    * [SYNCOPE-1489] - Reorganize Travis CI to run the build suite in stages
    * [SYNCOPE-1497] - Upgrade to Wicket 9
    * [SYNCOPE-1585] - Streamline existing components with WA
    * [SYNCOPE-1618] - Use Constructor-level dependency injections
