Abstract:
Systems, methods, and computer program products for constructing and weighting a currency index for a currency basket. The weights of the components of the currency basket can be determined using only past statistical time series behaviors of the currency pairs.

Description:
COPYRIGHT NOTICE 
       [0001]    A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent files or records, but otherwise reserves all copyrights whatsoever. 
       FIELD OF THE INVENTION 
       [0002]    Embodiments of the invention relate to construction and updating of currency strength indices by computer implemented methods, systems including at least one computer, and computer program products. Currency strength indices have been referred to as exchange rate indices, foreign currency indices, and in other terms, and are referred to herein simply as currency indices. Such currency indices are useful for evaluating the strength of respective currencies, and/or for evaluating and/or constructing currency and/or FX based financial interests, such as currency strength exchange-traded funds (ETFs), futures, forwards, options and other derivative products on the currency indices, and other instruments. 
       BACKGROUND OF THE INVENTION 
       [0003]    Fluctuation of the exchange rate between two currencies reflects the variation in the relative strengths of the two underlying currencies. By contrast, fluctuation of a currency index reflects the strength variation of that currency against a set (or a basket) of other currencies. The purpose of constructing a currency index is to provide a measure of the strength of a particular currency (referred to as the host currency) by combining the movements of exchange rates that involves this host currency. For example, the Federal Reserve publishes a Major Currency Dollar Index based on a basket of six exchange rate pairs involving the US dollar as one leg for each pair. The index contains ten exchange rate pairs before introduction of the Euro. Various criteria may be used to select the currencies in the basket, including the amount of trade between currency-pair countries. The basket of currencies in the present Federal Reserve Major Currency Dollar Index are the Euro, British pound, Swiss franc, Canadian dollar, Swedish krona, and Australian dollar. 
         [0004]    As an example, if the price of one currency (e.g., US dollar) in all or most other currencies in a basket is going up at the same time, one can say that the US dollar is strengthening. On the other hand, if the price of the US dollar is going up in some currencies in the basket, but going down in others, then such movements more reflect the strength or weakness of currencies in the basket than the strength of the dollar. By considering movements of the price of one currency in a basket of other currencies, one can gauge the variation in the strength of this one currency. 
         [0005]    Depending upon the criteria used to select particular currencies and the number of currencies to be included in a currency basket, a currency index can indicate the strength or weakness of a currency on a limited basis or on a wider basis. Generally, however, fewer currencies in an index tend to make the index more volatile. Many organizations, including sovereign and central banks, private banks and private organizations (e.g., Bloomberg Finance L.P., the assignee of this application), maintain currency indices. 
         [0006]    Currency indices are generally constructed from a weighted average of the exchange rates between a target currency and a basket of other currencies. The weights can be determined in different ways and the weighted average may be computed mathematically in different ways. 
         [0007]    The traditional method of determining the weights applied to these exchange rates is to use the level of trade between the countries involved, following the theory that countries with the most trade between them must have the most relevant exchange rates. Many indices, including the Federal Reserve indices and indices published by many banks determine weight based on trade data. 
         [0008]    Currency indices can be normalized against different values and generally the higher the number for a currency index, the stronger the currency. For example, the Federal Reserve Major Index is normalized against  100 . Illustrating normalization, the US dollar in the Federal Reserve Major Index was at 143.9059 in March 1985, and is at 74.9911 in September 2009. The Bloomberg DXY is also normalized against  100 . 
         [0009]    Currency indices can be used, for example, as the basis for contracts that allow the holder to hedge against exposure to adverse movements in that currency or to take speculative positions on the broad future strength or weakness of the currency. 
       SUMMARY OF THE INVENTION 
       [0010]    Embodiments of the invention provide systems, methods and computer program products that are useful in the construction of currency indices. According to various embodiments of the invention, construction of a currency index comprises basing all or part of the determination of weights for the currencies in an index on a statistical approach which relies on past exchange rate data. In some embodiments, such weights are used in computing a weighted average in the construction of the currency index. 
         [0011]    According to some embodiments, weights of currencies in the basket of currencies in a currency index are updated based on current exchange rate data. 
         [0012]    According to some embodiments, the statistical approach employs data that is available on a current basis, e.g., daily or intraday or even “tick by tick,” or is periodically updated frequently, and a currency index based on such data can be updated as frequently, e.g., on a daily basis, unlike currency indices that are based on trade data. 
         [0013]    According to some embodiments of the invention, a currency index is constructed based on the statistical approach and exchange rate data, and trade data is not used to weight the currencies. 
         [0014]    According to some embodiments of the invention, the statistical approach comprises performing a principal component analysis on the historical time series currency exchange data of currency pairs of all currencies in a basket of currencies in the index to determine the weights of each of the currencies in the basket. According to some embodiments, the weights are used to compute a currency index for at least one host currency in the basket. According to some embodiments, the index value is normalized. 
         [0015]    A system, method and computer program product in accordance with an embodiment of the invention for constructing a currency index indicating the relative strength of a host currency against a basket or set of other reference currencies comprises: retrieving from at least one storage device historical currency exchange data for all currency pairs of the currencies in the basket; performing a principal component analysis on the retrieved historical time series currency exchange data to determine the weights of each of the currencies in the set, and computing a currency index for a host currency using the weights is disclosed. 
         [0016]    According to some embodiments, a principal component analysis comprises one or more of the following: for each of the currency pairs, generating an estimated time t conditional variance between the daily log return of each currency pair at date t using the retrieved historical data up to date t−1; 
         [0017]    standardizing the daily return on each date by the return&#39;s conditional variance estimate; 
         [0018]    providing a matrix of a conditional covariance estimate calculated for each of the currency pairs; 
         [0019]    obtaining from the matrix a dominant eigenvector corresponding to a dominant eigenvalue of the matrix at time t; 
         [0020]    constructing a weight estimate from the dominant eigenvector comprising weighting the standardized return at time t with the dominant eigenvector such that sum of each of the standardized returns for each currency in the set generates the largest conditional variance for a portfolio of the summed currencies; 
         [0021]    aggregating the weight estimates; 
         [0022]    generating a weight for each currency of the set by weighted-averaging of the weight estimates for each of plurality of currencies using the associated dominant eigenvalues; and 
         [0023]    computing a currency index for a host currency using the weights. 
         [0024]    According to some embodiments, each of the conditional covariance estimates calculated for each of the currency pairs is updated recursively on a periodic (e.g., daily) basis. 
         [0025]    According to some embodiments, the principal component analysis comprises updating on a periodic (e.g., daily) basis the host currency index based on the periodic conditional variance estimation and the time t conditional correlation generation. 
         [0026]    According to some embodiments, a currency index is computed as described above for each of the currencies in the set as host currencies. 
         [0027]    It will be appreciated by those skilled in the art that the foregoing is a brief exemplary and non-limiting summary, and is not intended to be restrictive. 
     
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
         [0028]    The invention is illustrated in the figures of the accompanying drawings, which are meant to be exemplary and not limiting, and in which like references are intended to refer to like or corresponding structure and/or functionality, etc. 
           [0029]      FIG. 1  is a flow chart presenting a method for constructing a currency index according to an embodiment of the invention. 
           [0030]      FIG. 2  illustrates a graph that plots the time series of the daily weights on the ten currencies for the currency indices constructed according to an embodiment of the invention. 
           [0031]      FIG. 3  is a block diagram of a computer system for implementing embodiments of the invention. 
       
    
    
     DETAILED DESCRIPTION 
       [0032]    As discussed above, currency indices may be constructed by combining a a basket of exchange rates with a common host currency. In accordance with one embodiment, a currency index is constructed for each of the following ten currencies based on the exchange rate movements between them: the US dollar (USD), the euro (EUR), the British pound (GBP), the Swiss franc (CHF), the Japanese yen (JPY), the Canadian dollar (CAD), the Australian dollar (AUD), the New Zealand dollar (NZD), the Swedish Krona (SEK), and the Norwegian krone (NOK). However, it is to be understood that principles of the invention and the disclosure herein are applicable to other currency indices with more, less and/or different currencies. 
         [0033]      FIG. 1  depicts a flow of one embodiment for a process for constructing a currency index, e.g., for a basket of the ten currencies identified above. At each date, this analysis is performed under each of the ten currencies as the host currency, and a set of weights for the ten currencies is obtained. Then the weights on each economy computed from the ten host currencies are averaged to obtain one set of weights across all ten host currencies. As described in more detail below, the statistical method employed to determine the weights of the basket currencies in the currency index includes an implementation of a Principle Component Analysis using a sample of historical exchange rate data in an exponentially decaying window (e.g., with a half-life of 3 years). 
         [0034]    With reference to  FIG. 1 , at block  10 , historical data on the exchange rates of the following nine currency pairs of the dollar are retrieved by at least one computer from at least one storage device: USDEUR, USDGBP, USDCHF, USDJPY, USDCAD, USDAUD, USDNZD, USDSEK, and USDNOK. In the notation for the currency pair, the first three letters denote the host currency under consideration, and the last three letters denote the reference or numeraire currency. For example, USDEUR is the euro price of dollar. With dollar as the host currency, a US investor is understood as investing in the ten currencies. As the dollar price of dollar (USDUSD) is always one, one can think of the investor&#39;s dollar investment as the cash and the investor&#39;s investment in other nine currencies as risky investments, the risk of which is captured by the variations of the nine currency pair exchange rates. When another currency is the host, the investment in that currency becomes cash and investments in the other nine currencies become risky investments. When the US dollar is the host currency, we can denote the ten time series as, 
         [0000]      P 1 =[1, USDEUR, USDGBP, USDCHF, USDJPY, USDCAD, USDAUD, USDNZD, USDSEK, USDNOK]]  (1)
 
         [0000]    where the first series is the dollar price of dollar (USDUSD), which is universally one. 
         [0035]    At block  12 , adopting any currency i as the host currency, the following transformation can be performed: 
         [0000]        P   d   =P   1   /P   d1   , d= 1, . . . , 10.  (2)
 
         [0000]    With any host currency d, the d-th column is universally one as it becomes the price of itself. Accordingly, for each host currency d, for d=1, . . . , 10, the following operation is performed, and an index on any of the currencies in the set are computed the same way by replacing the prices of dollar in the other nine currencies with the price of the host currency in the other nine currencies. Taking EUR as an example, EURUSD=1/USDEUR is set so as to obtain the dollar price of euro. Then, the other dollar currency pairs are multiplied with EURUSD to obtain the other currency prices of the euro, whereupon the data can be extended to 10 time series, and the EUREUR column is universally one as it becomes the price of itself. 
         [0036]    At block  14 , the daily log return on each currency pair is constructed: 
         [0000]        R   t   id =ln  P   t   id   /P   t−1   id , for  i≠d.   (3)
 
         [0000]    Since the return on the cash position (R dd ) is always zero, that particular column is excluded from the calculation and in any of the following operations. 
         [0037]    At block  16 , the conditional variance of the daily log return on each currency pair at each date t is estimated. Let V t   id  denote the conditional variance on the daily return of the i-th currency pair on date t using information up to day t−1. The conditional variance is estimated and updated recursively daily according to the following equation: 
         [0000]        V   t   id   =φV   t−1   id +(1−φ)( R   t−1   id ) 2 ,  (4)
 
         [0000]    where φ controls the decay speed for past information. For example, φ can be set to φ=0.9991, corresponding to a half life of three years. To initiate the process, V 0  was set to the unconditional variance for a sample period of over nine years (e.g., from January 2000 to the present). The effect of the initial value declines gradually over time. 
         [0038]    The conditional correlation between daily log returns of different currency pairs is estimated in block  18 . Let P t   ijd  denote the time-t conditional correlation between daily returns R id  and R jd  based on information up to t−1. Given the conditional variance estimates, the return on each date is first normalized by its conditional variance estimate. 
         [0000]        SR   t   id   =R   t   id /√{square root over ( V   t   id )}.  (5)
 
         [0039]    In block  20  the following recursive estimation is performed: 
         [0000]        SV   t   ijd =max(0 ,φSV   t−1   ijd +(1−φ) SV   t−1   id   SV   t−1   jd ),  i,j≠d,   (6)
 
         [0000]    This estimation starts with the unconditional correlation over the nine year sample as the initial value and with the same decay coefficient cp. The weights on all currency pairs in the basket are constrained to be positive, which is done by constraining the conditional covariance estimate SV t   ijd  to be positive. The conditional correlation between the return pair (i, j) is given by 
         [0000]    
       
         
           
             
               
                 
                   
                     P 
                     t 
                     ijd 
                   
                   = 
                   
                     
                       SV 
                       t 
                       ijd 
                     
                     
                       
                         
                           SV 
                           t 
                           iid 
                         
                       
                        
                       
                         SV 
                         t 
                         jjd 
                       
                     
                   
                 
               
               
                 
                   ( 
                   7 
                   ) 
                 
               
             
           
         
       
     
         [0040]    In block  22 , from the time-t conditional (9×9) correlation matrix C=[P t   ijd ], the eigenvector corresponding to the dominant (largest) eigenvalue of the matrix is estimated as follows. Let U t   id  denote the ith element of this eigenvector at time t. This eigenvector is the weight on the standardized return SR t  such that the portfolio Σ i=1   9 SR t   id U t   id  generates the largest conditional variance. An exemplary estimate of the dominant eigenvalue A and a corresponding eigenvector U with positive components is derived through the following iterative procedure in pseudo code format: 
         [0000]    
       
         
           
             
               U 
               = 
               
                 [ 
                 
                   
                     1 
                     
                       9 
                     
                   
                   ; 
                   
                     1 
                     
                       9 
                     
                   
                   ; 
                   … 
                    
                   
                       
                   
                   ; 
                   
                     1 
                     
                       9 
                     
                   
                 
                 ] 
               
             
             ; 
           
         
       
       
         
           
             
               sae 
               = 
               10 
             
             ; 
             
                 
             
              
             
               maxiter 
               = 
               1000 
             
             ; 
           
         
       
       
         
           
             
               tol 
               = 
               
                 
                   5 
                    
                   e 
                 
                 - 
                 16 
               
             
             ; 
             
                 
             
              
             
               jj 
               = 
               0 
             
             ; 
           
         
       
     
         [0000]    while (sae&gt;5e-16 &amp; &amp; jj&lt;maxiter) 
         [0000]        jj=jj+ 1 ; V=C·U; A=UV; U new= V /√{square root over (sum( VV ))};  sae =sum( abs ( U new− U ));  U=U new; end return{ A,U new}
 
         [0041]    In block  24 , a weight is constructed from the dominant eigenvector. The weight on each of the nine currencies is given by: 
         [0000]    
       
         
           
             
               
                 
                   
                     
                       w 
                       t 
                       id 
                     
                     = 
                     
                       
                         
                           U 
                           t 
                           id 
                         
                         / 
                         
                           
                             V 
                             t 
                             id 
                           
                         
                       
                       
                         
                           ∑ 
                           
                             i 
                             = 
                             1 
                           
                           9 
                         
                          
                         
                             
                         
                          
                         
                           
                             
                               U 
                               t 
                               id 
                             
                             / 
                             
                               
                                 V 
                                 t 
                                 id 
                               
                             
                           
                            
                           
                             SV 
                             t 
                             jjd 
                           
                         
                       
                     
                   
                   , 
                   
                     
 
                   
                    
                   
                     i 
                     ≠ 
                     d 
                   
                   , 
                 
               
               
                 
                   ( 
                   8 
                   ) 
                 
               
             
           
         
       
     
         [0000]    where the weights on the nine risky currency investments are normalized to sum to one. This can be regarded as full investment (zero cash) normalization by setting W t   dd =0. 
         [0042]    This weight can be updated at any given periodic frequency or non-periodically. For example, the weight can be updated daily based on the daily conditional variance and conditional correlation computation. The daily returns used for the weight construction can be based on currency fixings for a given time each day. For example, exemplary basket exchange rates that can be used to calculate the currency indices are the intraday Bloomberg Generic (BGN) rates for the G10 currencies, and the weights can be calculated by applying the above-described statistical method to the Bloomberg Fixing (BFIX) rates taken at 10 am eastern standard time each day, which are available on the Bloomberg Professional® Service. Where a time specific fixing is not available for the history, a last price of a given currency can be used to compute the daily return for weights construction. For example, a Bloomberg Generic (BGN) currency “Last Price” for the G10 currencies can be used. 
         [0043]    In block  26 , under each host currency the above procedure is repeated such that it produces nine weights on the other nine currencies. Performing the calculation on all ten currencies as hosts generates nine weight estimates for each of the ten host currencies. To maintain cross-sectional consistency, in block  28 , the nine estimates are weight-averaged to obtain one weight for each currency: 
         [0000]    
       
         
           
             
               
                 
                   
                     
                       w 
                       t 
                       i 
                     
                     = 
                     
                       
                         10 
                         9 
                       
                        
                       
                         
                           
                             ∑ 
                             
                               d 
                               = 
                               1 
                             
                             10 
                           
                            
                           
                               
                           
                            
                           
                             
                               A 
                               t 
                               d 
                             
                              
                             
                               w 
                               t 
                               id 
                             
                           
                         
                         
                           
                             ∑ 
                             
                               d 
                               = 
                               1 
                             
                             10 
                           
                            
                           
                               
                           
                            
                           
                             A 
                             t 
                             d 
                           
                         
                       
                     
                   
                   , 
                   
                     
 
                   
                    
                   
                     i 
                     = 
                     1 
                   
                   , 
                   2 
                   , 
                   … 
                    
                   
                       
                   
                   , 
                   10. 
                 
               
               
                 
                   ( 
                   9 
                   ) 
                 
               
             
           
         
       
     
         [0000]    It will be noted that the division is 9 instead of 10 because there is a zero weight entry for each currency as host. Accordingly, a currency index can be constructed for each of the currencies in the basket based on weights derived from the time series data. Using the operations described herein, currency indices, identified below as BCW (plus the host currency code), e.g., BCWUSD, are constructed as the cumulative investment profit and loss, ignoring interests, in investing in the ten currencies based on the daily updated weights constructed as summarized in the flow depicted in  FIG. 1 . 
         [0044]    According to some embodiments, the levels of the indices are normalized to be 100 at the starting date (e.g., Jan. 4, 2000) and back-calculated to this date. Then, as shown at block  30 , at any given time t, the index under each currency denomination is updated via, for example, an online interface as follows: 
         [0000]    
       
         
           
             
               
                 
                   
                     
                       I 
                       t 
                       d 
                     
                     = 
                     
                       
                         I 
                         
                           t 
                           - 
                           1 
                         
                         d 
                       
                        
                       
                         exp 
                          
                         
                           ( 
                           
                             
                               ∑ 
                               
                                 i 
                                 - 
                                 1 
                               
                               10 
                             
                              
                             
                                 
                             
                              
                             
                               
                                 w 
                                 t 
                                 i 
                               
                                
                               
                                 R 
                                 t 
                                 id 
                               
                             
                           
                           ) 
                         
                       
                     
                   
                   , 
                 
               
               
                 
                   ( 
                   10 
                   ) 
                 
               
             
           
         
       
     
         [0000]    where I t−1   d  denotes its previous updated level, W t   i  denotes the prevailing weights level during the time interval and R t   id  denotes the log return on the id currency pair over the time interval [t−1, t]. It will be noted that although there are ten weights, only nine have a positive contribution because return on cash is zero, R dd =0, as P dd =1. 
         [0045]    According to some embodiments, the ensuing index level during the next day is given by 
         [0000]    
       
         
           
             
               
                 
                   
                     I 
                     t 
                     d 
                   
                   = 
                   
                     
                       I 
                       p 
                       d 
                     
                      
                     
                       
                         ∏ 
                         
                           i 
                           = 
                           1 
                         
                         10 
                       
                        
                       
                           
                       
                        
                       
                         
                           
                             ( 
                             
                               
                                 pid 
                                 t 
                               
                               
                                 pid 
                                 p 
                               
                             
                             ) 
                           
                           
                             w 
                             t 
                             i 
                           
                         
                         . 
                       
                     
                   
                 
               
               
                 
                   ( 
                   11 
                   ) 
                 
               
             
           
         
       
     
         [0046]    To make the calculation and updating more transparent, in accordance with some embodiments, let I p   d  denote the index level at the end of the each day from the start date (e.g., Jan. 4, 2000) up to the most recent date (here given as Jun. 8, 2009). According to some embodiments, data is sampled on U.S. business days and log daily returns computed on each currency pair in block  14  according to equation (3). 
         [0047]    The above described currency indices are available on, for example, a workstation, described in more detail below with respect to  FIG. 3 , which provides for display of current intraday values, historical values, and current and historical basket weights. An official daily fixing of the indices can be published each day at a given time. New basket weights can be calculated and published every day at the given time and can be used to compute the indices starting at the same time on the following day. 
         [0048]      FIG. 2  plots the time series of the daily weights on the ten currencies. Time varying weights for the BCW indices. The ten lines denote the weights on the ten currencies, identified above, to construct the BCW indices in accord with the methodology described herein. 
         [0049]    Embodiments of the invention may be implemented by systems using one or more programmable digital computers and computer readable storage media. In one embodiment,  FIG. 3  depicts an example of one such computer system  100 , which includes at least one processor  110 , such as, e.g., an Intel or Advanced Micro Devices microprocessor, coupled to a communications channel or bus  112 . The computer system  100  further includes at least one input device  114  such as, e.g., a keyboard, mouse, touch pad or screen, or other selection or pointing device, at least one output device  116  such as, e.g., an electronic display device, at least one communications interface  118 , at least one computer readable medium or data storage device  120  such as a magnetic disk or an optical disk and memory  122  such as Random-Access Memory (RAM), each coupled to the communications channel  112 . The communications interface  118  may be coupled to a network  142 . 
         [0050]    One skilled in the art will recognize that many variations of the system  100  are possible, e.g., the system  100  may include multiple channels or buses  112 , various arrangements of storage devices  120  and memory  122 , as different units or combined units, one or more computer-readable storage medium (CRSM) readers  136 , such as, e.g., a magnetic disk drive, magneto-optical drive, optical disk drive, or flash drive, multiple components of a given type, e.g., processors  110 , input devices  114 , communications interfaces  118 , etc. 
         [0051]    In one or more embodiments, computer system  100  communicates over the network  142  with at least one computer  144 , which may comprise one or more host computers and/or server computers and/or one or more other computers, e.g. computer system  100 , performing host and/or server functions including web server and/or application server functions. In one or more embodiments, a database  146  is accessed by the at least one computer  144 . The at least one computer  144  may include components as described for computer system  100 , and other components as is well known in the computer arts. Network  142  may comprise one or more LANS, WANS, intranets, the Internet, and other networks known in the art. In one or more embodiments, computer system  100  is configured as a workstation that communicates with the at least one computer  144  over the network  142 . In one or more embodiments, computer system  100  is configured as a client in a client-server system in which the at least one other computer comprises one or more servers. Additional computer systems  100 , any of which may be configured as a work station and/or client computer, may communicate with the at least one computer  144  and/or another computer system  100  over the network  142 . 
         [0052]    For example, one or more databases  146  may store the historical data on exchange rates and data calculated as described herein. In various embodiments, the processing disclosed herein may be performed by computer(s)/processor(s)  144  in a host arrangement with computer system  100 , or in a distributed arrangement in computer system  100  and computer(s)/processor(s)  144 , or by computer system  100  in cooperation with data stored in database  146 . Computer(s)/Processor(s)  144  may perform the processing disclosed herein based on computer code stored in a storage device or device(s)  120 ,  136 ,  138  and/or memory  122 . Processing can be carried out using, for example, a pricing engine. 
         [0053]    The terms “client” and “server” may describe programs and running processes instead of or in addition to their application to computer systems described above. Generally, a (software) client may consume information and/or computational services provided by a (software) server. 
         [0054]    Various embodiments of the invention are described herein with respect to a currency index and systems related thereto. However, it is to be understood that the invention has application to other securities, derivatives and instruments that are dependent on currency indices. 
         [0055]    While the invention has been described and illustrated with reference to certain preferred embodiments herein, other embodiments are possible. Additionally, as such, the foregoing illustrative embodiments, examples, features, advantages, and attendant advantages are not meant to be limiting of the present invention, as the invention may be practiced according to various alternative embodiments, as well as without necessarily providing, for example, one or more of the features, advantages, and attendant advantages that may be provided by the foregoing illustrative embodiments. 
         [0056]    Systems and modules described herein may comprise software, firmware, hardware, or any combination(s) of software, firmware, or hardware suitable for the purposes described herein. Software and other modules may reside on servers, workstations, personal computers, computerized tablets, PDAs, and other devices suitable for the purposes described herein. Software and other modules may be accessible via local memory, via a network, via a browser or other application in an ASP context, or via other means suitable for the purposes described herein. Data structures described herein may comprise computer files, variables, programming arrays, programming structures, or any electronic information storage schemes or methods, or any combinations thereof, suitable for the purposes described herein. User interface elements described herein may comprise elements from graphical user interfaces, command line interfaces, and other interfaces suitable for the purposes described herein. Except to the extent necessary or inherent in the processes themselves, no particular order to steps or stages of methods or processes described in this disclosure, including the Figures, is implied. In many cases the order of process steps may be varied, and various illustrative steps may be combined, altered, or omitted, without changing the purpose, effect or import of the methods described. 
         [0057]    Accordingly, while the invention has been described and illustrated in connection with preferred embodiments, many variations and modifications as will be evident to those skilled in this art may be made without departing from the scope of the invention, and the invention is thus not to be limited to the precise details of methodology or construction set forth above, as such variations and modification are intended to be included within the scope of the invention. Therefore, the scope of the appended claims should not be limited to the description and illustrations of the embodiments contained herein.