Quest® Archive Manager
Version 4.1
Release Notes
January 2009
Quest® Archive Manager is an archiving and management solution that enables
email and file data to become a true asset for the organization by capturing,
indexing, and storing it for mailbox management, compliance, and knowledge
sharing.
Archive Manager 4.1 includes the following new features:
The following is a list of issues addressed and enhancements implemented in this release of Archive Manager.
| CR 64554 | The PopulateMailboxMessage function now correctly copies to a Custom mailbox only the messages that the original owner intends to copy to the Custom mailbox. |
| CR 37570 |
Archive Manager now includes a script that, when invoked, will delete all of the old temporary "scratch" tables that the program generates for searches and other functions. You can schedule the script to run at the same time every day (for example, 2:30am local time), by entering the run time as the CleanUpTime setting in the Archive Manager Configuration Editor. Since the Retention Engine also uses temporary tables, the CleanUp script should not be run at the same time as the Retention Engine. Most admins choose to run the CleanUp script before the Retention Engine, which may occasionally run for prolonged time periods. The CleanUp script is a SQL server job that stores its scheduled execution time in its own SQL Job Properties, and the script will delete old tables only if the SQL job time matches the CleanUpTime setting in the Archive Manager Configuration Editor. If, for example, someone changes the CleanUpTime setting, then it will be different from the last-saved SQL job time, and the script will not delete old tables at the next CleanUpTime occurrence. Instead, when the script finds such a discrepancy, it will simply reset the SQL job time to match the CleanUpTime, and the script will then delete the old tables at the next occurrence of the CleanUpTime. |
| CR 60142 | Archive Manager can now reconstruct a stripped RTF message that originally contained an embedded message with an image attachment. |
| CR 55798 | The error message "Attachment '<filename>' has not been archived," which had previously appeared when an embedded image had been stripped, has now been eliminated. |
| CR 50179 | An algorithm improvement has eliminated an archiving problem that occasionally skipped messages in some mailboxes. |
| CR 55307 | Code enhancements have eliminated a false HTTP:500 warning that previously occurred when using a third-party mass-storage device and trying to retrieve a file that was not in the cache, but had instead been saved to the archive. |
| CR 57877 | The AD Connector no longer generates an error when trying to delete a login account that has been used to edit the Retention Policy or Legal Hold. |
| CR 59164 | The Exchange Utility now correctly closes web sessions when it is finished reconstructing messages. |
| CR 58838 | Web Services now enters "False" rather than 0 (zero) into a boolean string that sets dbo.Attachment.Visible to null, eliminating the error that occurred when entering 0 into the boolean string. |
| CR 22865 | The title bar of Archive Manager's Copy to Folder dialog box is now correctly named "Copy to Folder"—rather than "Move to Folder" as in previous releases. |
| CR 16067 | The Copy to Folder feature is no longer available to a user without the "Add/Edit Custom Mailboxes" privilege who is adding or editing a custom mailbox. |
| CR 49921 |
The NDS User and NDS Password parameters are now all that are necessary for authentication if your environment does not permit anonymous bind to authenticate with eDirectory. A third authentication parameter is no longer required. |
| CR 49045 | Archive Manager no longer generates a duplicate mailbox when a user object is renamed but the GroupWise account is unchanged. Users associated with such accounts therefore can now send emails via the Archive Manager web interface. |
| CR 58948 | A user logging into the Archive Manager website using his/her GroupWise user name and password, but without a specified context, no longer encounters an error due to an NDS authentication failure. |
| CR 54937 | Code refinements have eliminated a potential mailbox security issue that was possible in previous releases when a new user was created with the same login as a deleted GroupWise user. |
| CR 60022 | A user whose NDS and GroupWise passwords differ can now log into the Archive Manager website if Allow GW Authentication is set to 1. |
| CR 59603 | The GroupWise Directory Connector can now export orphaned mailboxes. (An "orphaned" GroupWise mailbox is one that has been dissociated from the GroupWise environment—for example, when a user leaves the organization but his/her mail must be kept. In that case the mailbox is still active in the environment, and can be logged into if necessary.) |
| CR 47507 | Archive Manager no longer causes GDC primary key violations after you add a new employee whose name is similar to the name of a former employee (e.g., Brian Smith and Brad Smith). |
| CR 25580 | A user is now notified if a search returns more results than are specified for the search-return maximum. |
|
CR 56061 CR 56054 CR 40728 |
A code correction in a database subroutine has eliminated errors that occurred following particular search queries:
|
| CR 51180 | Process refinements have improved the performance of User searches when using the To and From fields. |
| CR 56074 | The Search Log can now be searched for all users—without having to specify a user to get results. |
| CR 55266 | An attachment file type search no longer returns attachments to which the user does not have access. |
| CR 50840 | A date-range search no longer excludes timestamps in the last minute (from 23:59:01 to 23:59:59) of the end date. |
| CR 58330 | The name of the Archive Manager installation utility has been changed from Installer.exe to ArchiveSetup.exe, and the Planning and Installation Guide for Exchange has been updated to note that change. |
| CR 55314 | The Archive Manager Installer no longer overwrites an existing DLL if it is newer than the DLL that would replace it. |
| CR 62535 | The ESM now correctly honors the setting to strip messages that are more than X days old when a MAPI version that does not support Unicode is in use. |
| CR 58921 |
The ESM now handles failed messages correctly:
|
| CR 41732 | The notification message that Archive Manager adds to a stripped message in Outlook (notifying that the message has been stripped) can now be customized by entering the message text string as the Stub Display Message setting in the Archive Manager Configuration Editor. Use [square brackets] to enclose the string that should function as a link to the message. |
| CR 55884 | Code enhancements have eliminated ESM "GetProps" errors that occurred when trying to process messages from the dumpster. |
| CR 56848 | The Exchange Store Manager Stamp only when Stripping boolean configuration setting in the Archive Manager Configuration Editor has been changed so that its default is now 1, and also so that it will accept values "True" or "False" in addition to "1" or "0." |
| CR 62466 |
The Search Exporter now works with SSL. |
| CR 56968 |
The installer now installs the SearchExporter.exe.config file when the Search Exporter is installed. |
| CR 47508 | Process refinements have significantly improved the performance of Web Services with respect to the Search Exporter. |
| CR 58556 | Installation of the Archive Retrieve Tool no longer generates "RTF Sync Failed" errors. |
| CR 57791 | Code refinements have eliminated resource leaks from the Archive Retrieve Tool. |
| CR 57309 | FTI's indexing of attachments from EMC Centera no longer causes a buildup of temp files. |
| CR 58035 | Item attachments of type .xlsx or .zip are no longer left behind in the temp directory after they are indexed by the FTI service for EMC Centera. |
| CR 58552 | A code correction has eliminated an Offline Client Sync error that occurred for particular messages in a PST file. |
| CR 61880 | The Archive Manager URL for the Offline Client is now http://archivemanager/DefaultInstance/OfflineClientEndpoint.asmx (instead of http://archivemanager/DefaultInstance/AfterMailService.asmx), which improves performance. |
| CR 64341 | The POP3 DataLoader now loads EML files that do not have timestamp data in the Received header field. Additionally, if errors do occur, the Error directory will retain a copy of the EML file in question. |
| CR 54801 | The Data Loader no longer returns an error when it tries to run the MessageRecipientInsertMulti stored procedure and encounters an XML file with an invalid character in a recipient field. |
| CR 58446 | A duplicate function RegKeyStringValue in the Outlook Form has been removed. |
| CR 56497 | The Retention Policy Editor now shows the Mail Server, Storage Group and Mail Store of each mailbox, to differentiate among Mail Stores that may share the same name but reside in different Storage Groups. |
| CR 60891 | A user with a BlackBerry device connected to BES 4.1.6 can now retrieve the entire text body of a stripped message without errors. |
| CR 56896 | A new chapter, Optimizing the Full-Text Index, has been added to the Administration Guide, to explain when and how to optimize the FTI—to manage and maintain index speed and health. |
| CR 58644 | The Planning and Installation Guides (for both Exchange and GroupWise) have been updated to clarify the nature of available options in the Archive Manager installation utility, and to note that not all configuration settings from a previous installation can be revised during an upgrade procedure. |
| CR 53056 | The Planning and Installation Guide for Exchange has been updated to document installation of the EMC Centera when IIS is on a different server from Archive Manager. |
The following is a list of issues known to exist at the time of this Archive Manager 4.1 release:
| CR 35828 | When a strip policy is applied to a user mailbox and a message is modified after Export to Archive Manager but before it is stripped, data may be lost when the message is stripped, as the stubbing shell may be linked to the original message. |
| CR 48446 | When applying a Strip Policy with the "Delete Message Shells" option, this actually applies a delete policy. It applies to all messages of the specified age, whether or not they are stubbed. |
| CR 33917 | An image embedded in an RTF message body by the Insert Object command, as an image file type, appears as a generic placeholder, and as an attachment with file extension .ole. |
| CR 60472 | An admin attempt to change the Remote Web Service Authentication Mode via the Web Administration features generates an "Access ... denied" error, and the Authentication Mode is not changed. Attempting the same change by adding the ArchiveMgr_Service with access rights "modify" generates the same error message, but by this method the Authentication Mode is updated. |
| CR 56858 | The Message Retention Policy Service does not run consistently at the scheduled time. A work-around process is published at Quest's SupportLink Website as Solution SOL44458. |
| CR 62216 | The ClearSearchCache program subroutine, which is used to clean up the AfterMail_Temp database, may inadvertently delete the tables that are created for retention, rendering the Retention Engine inoperable until scripts are re-run to recreate the tables. The ClearSearchCache program subroutine may also mistakenly leave behind some temporary search tables that should be deleted: files with names prepended with DOMAIN\SERVICE_NAME and then the normal guide. |
| CR 62218 | The Retention Engine will generate an "Invalid object name" error if the default schema for ArchiveMgr_Service and ArchiveMgr_ESM users is not reset to dbo in the AfterMail_TEMP database after installing the Retention Engine and before running it. (You can preempt the error by resetting the schema to dbo after installing and before running it.) If the Retention Engine has already run and the "Invalid object name" has already occurred, reset the schema to dbo and delete the RE.CachedSearchDelete and RE.CachedSearchKeep tables from the AfterMail_TEMP database and run the Retention Engine again. |
| CR 61996 |
The Retention Engine program log no longer counts deleted message links. You can, however, obtain these values from the SQL database, using this database query: declare @DT dateTime select @DT = max(LogDate) from RetentionActionLog select count(*) from RetentionActionLog where LogDate = @DT |
| CR 63033 |
If the Retention Engine runs and does not find any messages to delete from the archive, it returns the following message: Retention.Service:INFO - System.ArgumentException: dbo.RetentionPolicyToDelete failed to return 2 results at AfterMail.Core.Retention.RetentionEngine.ExecuteRetentionPolicy() This message can be disregarded. |
| CR 63556 | The Retention execution log only reports messages that were deleted. It does not report messages that were unlinked or removed from some mailboxes but still existing in a least one other mailbox. |
| CR 62526 | NDS logins do not work in the current version. The workaround is to create an Archive Manager login in the Administration section of the website to use in this scenario. |
| CR 63703 | IPM.TaskRequest items created by the Search Exporter can't be opened by Outlook from the PST. These items can be opened by copying the items into your Exchange Inbox. |
| CR 59621 | The Archive Manager Configuration Editor no longer displays Tivoli and Centera settings and values. |
| CR 48703 | Program Event logs fail to note an error if an invalid User ID is entered for the MAPI Data Loader, even though the Data Loader run is interrupted. |
| CR 63629 |
The Exchange Utility cannot install the Outlook form. The following error message is displayed: Error installing the Exchange Form. Please contact Archive Manager support. Manifest Resource AfterMail.Exchange.MAPI.AfterMail.fdm not found. The Outlook form can be installed by rerunning the Archive Manager Installer from the link on the Start Menu. |
| CR 55724 | Adobe PDF IFilter v6.0 is the recommended IFilter version that should be installed on the machine running the Full Text Index Service. (Adobe PDF IFilter v6.0 is available as a separate download from Adobe Reader v6.0.) Adobe Reader versions 7 and 8 should not be installed on the machine running the Full Text Index Service if it already contains Adobe PDF IFilter v6.0 because those versions of Reader contain IFilters that are incompatible with Adobe PDF IFilter v6.0. |
| CR 55489 | The FTI invokes only a single IFilter when indexing message attachments, so (for example) the contents of a PDF nested within a zip file are not indexed and are therefore invisible to a search. For a zip file the FTI uses only the zip IFilter, which does support indexing some simpler file formats (txt, doc, etc.), but not a nested PDF. |
| CR 29307 | If a BlackBerry or Windows Mobile device user does a reply, reply all, or forwards a message using the Archive Manager Web site for mobile users, and the recipient views the message in Outlook, any text that was entered on the mobile device is missing from the Outlook recipient's message. |
| CR 30532 | By default, on a clean installation, the user won't be able to browse for contacts unless they have been assigned the "Person Search" security attribute. However, users will already have this attribute if an upgrade has been done from an earlier Archive Manager version in which this security attribute was granted. |
| CR 57023 |
If you have a remote instance of the Archive Manager Web Site, in order to open messages containing Rich Text Format in the body you must complete these steps on the remote server:
|
| CR 62576 | In the Archive Manager Website, when you conduct a search in a specific mailbox, selecting All Users does not override the mailbox-level search. Only the selected mailbox will be searched. |
| CR 63653 | The Archive Manager Remote Exchange Store Manager (ESM) and the Archive Manager Alert Service Editor cannot be downloaded from the Download Tools page of the Archive Manager Website with FireFox 3.0. You can download the tools using Internet Explorer, or you can get them from the WebSite\Tools directory in your Archive Manager installation files. |
| CR 55876 | Some hyperlink information in RTF emails may not display when converted to HMTL. |
| CR 50756 | To archive Shared Folders in GroupWise, the config key GroupWise Store Manager Export Shared Folders must be set to 1. |
| CR 56874 |
Shared folders are not processed correctly with the GroupWise Client version 7.0.3. When this client version is used, only the owner of the shared folder can see messages in the shared folder in Archive Manager. Shared folders are processed correctly with GroupWise Client version 7.0.2. |
| CR 56758 | An attachment to an RTF message sent over the Internet from an Exchange user mistakenly appears to be 0 bytes when opened by a GroupWise recipient, so Archive Manager cannot process the attachment. This is a known issue with the Novell GroupWise Internet Agent (GWIA) running under Novell GroupWise 6.5.7 or 7.0.2, rather than a problem in Archive Manager, and we are unaware of any workaround as of the current Archive Manager release. |
| CR 56776 | The Archive Retrieve installer verifies that MAPI services are installed, but does not check the installed MAPI version to verify it is a supported version. Be sure to check the System Requirements and verify that your installed MAPI version is supported before attempting to install the Archive Retrieve tool. |
| CR 51191 |
To avoid caching old data, which in turn causes unexpected behavior in the Archive Retrieve Configuration Editor, change a setting in Internet Explorer (while logged into the BES system as the same user as the "service account" user):
|
| CR 32504 |
When reconstructing a stripped message with the Archive Manager Outlook form, a user may see: "This item contains active content that cannot be displayed in the Reading Pane. Open the item to read its contents." Follow the instructions to see the message. A workaround for this issue is:
|
| CR 41186 | Please use the Archive Manager web interface to view attachments whose total path length when downloaded to disk exceeds 264 characters. |
| CR 35703 | Archive Manager Outlook form cannot reconstruct messages (i.e. neither body nor attachments are returned) if a message has a zero byte attachment that is in the database more than once. You can open these types of messages using the Archive Manager Web Interface. |
| CR 41249 |
The Archive Manager Outlook form cannot determine when a stubbed message has been deleted by a retention policy, so will display a "Message not found" error message. |
| CR 57210 |
The Outlook form may not display attachments in messages forwarded after message reconstruction. This applies to messages containing a single attachment that has been stripped, then reconstructed by the Outlook form, forwarded within the organization, and then stripped in the recipient's mailbox. To avoid this issue, open the affected messages using the Archive Manager Web Site. |
| CR 32006 | Archive Manager Services should be stopped prior to upgrade. This has the potential to reduce upgrade times. |
| CR 50519 | The upgrade process does not recognize prior installations of the PST Importer, Search Exporter, and Retention Policy Editor components of Archive Manager. You must manually uninstall these components before performing an upgrade. A step for this has been added to the upgrade instructions in the Planning and Installation Guide. |
| CR 31471 | The standard Archive Manager upgrade procedure for systems serving a dual GroupWise/Exchange configuration will disable Exchange services in the upgraded environment. A work-around process has been devised and is published at Quest's SupportLink as Solution SOL31789. |
| CR 61955 | The Archive Manager retention engine generates errors when the retention mode settings for the SnapLock attachment storage type (at the ONTAP server) are set greater than an Archive Manager retention delete policy (days, months, years). The retention engine does successfully delete data from the web UI and database tables, but not from ONTAP, so reports errors that data cannot be deleted from SnapLock. |
| CR 36557 | When the Retention Engine is used to delete emails from a TSM store (only), attachments are orphaned and left behind. |
|
|
Messaging System Server Type and Version |
Either:
|
|
Database Server |
Either:
Note: If you are moving from one database server to another database server, such as SQL 2000 to SQL 2005, the AfterMail_Temp table and the Archive Manager database must use the same collation setting. The collation setting must contain Case Insensitive (CI) and Accent Sensitive (AS). The suggested value is: SQL_Latin1_General_CP1_CI_AS |
|
Operating System for servers running Archive Manager |
Microsoft Windows 2003 Server SP1 or SP2; 32-bit OS required. |
|
Prerequisites for all servers running Archive Manager Services |
All of:
To enable text-string searches and indexing of file attachments: You must install IFilters for the file types you want to search and index:
|
|
Additional prerequisites for servers running Archive Manager Exchange Store Manager |
All of:
|
|
Additional prerequisites required for Archive Manager with GroupWise Services |
Both:
|
|
Attachment Store Types |
Any of:
|
|
End User Mail Client Version |
Any of:
|
|
End User Browser |
Any of:
|
|
Mobile Device Browsing of Archive Manager Web Site |
|
This section contains information about installing and operating this product outside of North America. This section does not replace the materials about supported platforms and configurations found elsewhere in the product documentation.
This release is Unicode-enabled and supports any character set. In this release, all product components should be configured to use the same or compatible character encodings and should be installed to use the same locale and regional options. This release is targeted to support operations in the following regions: North America, Western Europe and Latin America, Central and Eastern Europe.
This release has the following known capabilities or limitations: Tested against French OS, SQL and Exchange.
The Archive Manager 4.1 distribution zip file contains the following:
Please see the Planning and Installation Guide (for either Exchange or GroupWise) for full instructions and application notes to install the current version of Archive Manager. The Planning and Installation Guide also provides valuable pre-installation planning information, process checklists, and pre- and post-installation process instructions that are necessary for a successful Archive Manager installation.
To upgrade from Archive Manager Version 4.1.0.322, you must first remove the old Archive Manager installer. In the Control Panel, select Add or Remove Programs to remove the installer. Then run QSArchiveSetup.exe.
The Upgrading chapter of the Planning and Installation Guide (for either Exchange or GroupWise) provides full instructions and application notes for upgrading to the current version of Archive Manager from an earlier version. The current version of Archive Manager supports upgrades only from version 4.0.5.
If you are running Archive Manager Version 4.1.0.322, you need upgrade to Archive Manager Version 4.1.0.366 to fix the PopulateMailboxMessage function so it correctly copies to a Custom mailbox only the messages that the original owner intends to copy to the Custom mailbox. Or, see Customer Support for a utility to run to address this issue.
After you have upgraded to Archive Manager Version 4.1.0.366, run the following script as described below and depending on your SQL Server version, to address the Custom mailbox issue immediately. Or, you can wait for the stored procedure to run at its scheduled time to correct this issue.
Note: If you are moving from one database server to another database server, such as SQL 2000 to SQL 2005, the AfterMail_Temp table and the Archive Manager database must use the same collation setting. The collation setting must contain Case Insensitive (CI) and Accent Sensitive (AS). The suggested value is:
SQL_Latin1_General_CP1_CI_AS
Upgrading Archive Manager clears the Archive Manager event log. To keep the existing event log, you need to back it up prior to upgrading Archive Manager.
Note: Archive Manager requires updating Offline Client versions older than 4.1 to the current version—on all machines where the older versions occur. Offline Client versions older than 4.1 are not compatible with Archive Manager 4.1 and later, and the combination would cause improper synchronization of the folder tree and mail in child folders.
| info@quest.com | |
| Quest Software, Inc. World Headquarters 5 Polaris Way Aliso Viejo, CA 92656 USA | |
| Web |
Please refer to our web site for regional and international office information.
Quest Support is available to customers who have a trial version of a Quest
product or who have purchased a commercial version and have a valid maintenance
contract.
Quest Support provides around the clock coverage with SupportLink,
our web self-service. Visit SupportLink at http://support.quest.com/.
From SupportLink, you can do the following:
View the Global Support Guide for a detailed explanation of support programs,
online services, contact information, and policy and procedures.
The guide
is available at: http://support.quest.com/pdfs/Global Support Guide.pdf. This guide is available in English only.
© 2009 Quest Software, Inc.
ALL RIGHTS RESERVED.
This document contains proprietary information protected by copyright. The software described in this guide is furnished under a software license or nondisclosure agreement. This software may be used or copied only in accordance with the terms of the applicable agreement. No part of this guide may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying and recording for any purpose other than the purchase or personal use without the written permission of Quest Software, Inc.
If you have any questions regarding your potential use of this material, contact:
| Quest
Software World Headquarters LEGAL Dept 5 Polaris Way Aliso Viejo, CA 92656 Email: legal@quest.com |
Refer to our web site for regional and international office information.
Quest, Quest Software, and the Quest Software logo are trademarks and registered trademarks of Quest Software, Inc. Other trademarks and registered trademarks that may appear in this document are the property of their respective owners.
This product includes the copyrighted software of the following third-party suppliers:
Infragistics NetAdvantage 2005© Copyright 2004 Infragistics, Inc.
HTTP Compress© Copyright 2002-Present Ben Lowery (compress@blowery.org).
MAPI33.NET Library© Copyright AdEx Solutions, Inc. 2004.
EasyMail .Net Edition© 2002 Quiksoft Corporation
EasyByte RTF-2-HTML© 2007 EasyByte Software Limited
BalloonWindow© 2002-2003 Peter Rilling
Janus Controls© 2006 Janus Systems SA
Portions© 2004 Apache Software Foundation, under Apache License 2.0.
The information in this document is provided in connection with Quest products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Quest products. EXCEPT AS SET FORTH IN QUEST'S TERMS AND CONDITIONS AS SPECIFIED IN THE LICENSE AGREEMENT FOR THIS PRODUCT, QUEST ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL QUEST BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF QUEST HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Quest makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and product descriptions at any time without notice. Quest does not make any commitment to update the information contained in this document.
The library is released under the GPL with the following exception:
Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
Note: The exception is changed to reflect the latest GNU Classpath exception. Older versions of #ziplib did have another exception, but the new one is clearer and it doesn't break compatibility with the old one.
Bottom line: In plain English this means you can use this library in commercial closed-source applications.