Return-Path: Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: (qmail 99811 invoked from network); 2 Feb 2005 00:18:32 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 2 Feb 2005 00:18:32 -0000 Received: (qmail 7042 invoked by uid 500); 2 Feb 2005 00:18:31 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 7008 invoked by uid 500); 2 Feb 2005 00:18:31 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: List-Id: Reply-To: "Derby Development" Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 6995 invoked by uid 99); 2 Feb 2005 00:18:31 -0000 X-ASF-Spam-Status: No, hits=0.8 required=10.0 tests=SPF_HELO_PASS,SPF_SOFTFAIL X-Spam-Check-By: apache.org Received-SPF: softfail (hermes.apache.org: transitioning domain of bohannon@lucent.com does not designate 204.178.16.49 as permitted sender) Received: from crufty.research.bell-labs.com (HELO crufty.research.bell-labs.com) (204.178.16.49) by apache.org (qpsmtpd/0.28) with ESMTP; Tue, 01 Feb 2005 16:18:29 -0800 Received: from scummy.research.bell-labs.com (H-135-104-2-10.research.bell-labs.com [135.104.2.10]) by crufty.research.bell-labs.com (8.12.10/8.12.10) with ESMTP id j120IL1O074772 for ; Tue, 1 Feb 2005 19:18:24 -0500 (EST) Received: from aura.cs.bell-labs.com (aura.cs.bell-labs.com [135.104.8.15]) by scummy.research.bell-labs.com (8.12.9/8.12.9) with ESMTP id j120IG7d060746 for ; Tue, 1 Feb 2005 19:18:16 -0500 (EST) Received: from BOHANNONT23 (bohannon-t23.ddns.bell-labs.com [135.104.52.180]) by aura.cs.bell-labs.com (8.12.9/8.12.9) with SMTP id j120IGVt013129 for ; Tue, 1 Feb 2005 19:18:16 -0500 (EST) From: "Philip Bohannon" To: "Derby Development" Subject: RE: Derby architecture/design documents Date: Tue, 1 Feb 2005 19:18:16 -0500 Message-ID: MIME-Version: 1.0 X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) In-Reply-To: <4200147B.8080300@sbcglobal.net> Content-Type: multipart/signed; boundary="----=_NextPart_000_0106_01C50892.C7A45410"; protocol="application/x-pkcs7-signature"; micalg=SHA1 Importance: Normal X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N This is a multi-part message in MIME format. ------=_NextPart_000_0106_01C50892.C7A45410 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sounds good. Small comments below. Philip Bohannon Computing Sciences Research Center Lucent Technologies -- Bell Laboratories > -----Original Message----- > From: Mike Matrigali [mailto:mikem_app@sbcglobal.net] > Sent: Tuesday, February 01, 2005 6:45 PM > To: Derby Development > Subject: Re: Derby architecture/design documents > > > I think the only hope hear is to define the terms and then document > what derby does in reference to them. Philip's definitions seem > reasonable. Here is what derby supports in those terms. > > 1) Derby fully supports crash recovery, it uses java to correctly > sync the log file to support this. > > 2) I would say derby supports media recovery. One can make a backup of > the data and store it off line. Logs can be stored on a separate > disk from the data, and if you lose your data disk then you can use > rollforward recovery on the existing logs and the copy of the backup > to bring your database up to the current point in time. One issue here is to easily be able to tell from a copy of a checkpoint/backup what logs are needed to restore it. Also an issue we ran into (in the database that we built once-upon-a-time) is that old checkpoints and media recovery may mean "more logs than will fit on your disk" have to be run. Thus recovery needs to be friendly and say something like "I need logXXXXXXX, please tell me where it is?", and wait for it to be mounted, untar'd etc. (Quickly glanced through docs and didn't see mention of these small, but sometimes practical, points.) > > 3) Derby does not support "point in time recovery". Someone may want to > look at this in the future. Technically I don't think it would be > very hard as the logging system has the stuff to solve the hard > problems. It does not have an idea about "time" - it just knows log > sequence numbers, so need to figure out what kind of interface a user > really wants. A very user unfriendly interface would not be very > hard to implement which would be recover to a specific log sequence > number. Anyone interested in this feature should add it to jira - > I'll be happy to add technical comments on what needs to be done. I believe we added a real-time stamp in the begin transaction record, a command line parameter to recovery: recover -timestamp XXXX and a short 'if' statement in the main recovery loop. The feature tests, of course, were a lot more trouble :-/. ----- If the user has access to some stable transaction identifier, it may be helpful to let the user recover to the commit point of a known transaction. This can help when the DB is cooperating with other processes, but not running XA for whatever reason. (I may try to create a jira entry, but if someone beats me to it, no problem.) > > 4) A reasonable next step in derby recovery progress would be to add a > way to automatically move/copy log files offline as they are not > needed by crash recovery and only needed for media recovery. Some > sort of java stored procedure callout would seem most appropriate. > > /mikem > > Philip Bohannon wrote: > > > I believe "crash recovery" means all volatile buffers and non-flushed disk > > pages are lost, as well as, depending on your failure model, the total > > contents of any physical disk page in the process of being written at the > > time of the crash. > > > > "Media recovery" means that we lost some part of the checkpoint, but we > > have archived versions of the log, and some offline copy of an old > > checkpoint. > > > > If you lose your logs (and there is a crash), AFAIK, there is no hope to > > recover information past the first loss, assuming it is after the most > > recent checkpoint. > > > > Also a desirable feature is "point in time recovery" against logical > > corruption - i.e., some angry/confused user started deleting all the > > customer records Monday morning. Can I start with an old checkpoint and > > run the recovery log until Sunday night to get some consistent state from > > around that time back? (This is usually straightforward to implement.) > > > > Cheers, > > > > Philip Bohannon > > Computing Sciences Research Center > > Lucent Technologies -- Bell Laboratories > > > > > >>-----Original Message----- > >>From: Dibyendu Majumdar [mailto:dibyendu@mazumdar.demon.co.uk] > >>Sent: Tuesday, February 01, 2005 2:43 PM > >>To: Derby Development > >>Subject: Re: Derby architecture/design documents > >> > >> > >>From: "Suresh Thalamati" > >> > >>> >>Derby implements the Write Ahead Log using a non-circular file > > > > system > > > >>>file. At present, there is no support for incremental log backup or > >>>media recovery. Only crash recovery is supported. > >>> > >>>I think derby does support simple media recovery. It has support for > >>>full backup/restore and very basic form of rollforward recovery > > > > (replay > > > >>>of logs using backup and archived log files). > >> > >>Hi Suresh, > >> > >>Thanks for the feedback. I suppose that we should define media recovery > > > > and > > > >>crash recovery. My understanding is that media recovery is when you have > >>lost your logs as > >>well, whereas crash recovery is when the logs are intact. In case of > > > > media > > > >>recovery, > >>does Derby know how to locate the last checkpoint record/log file? > >> > >>Regards > >> > >> > >> > ------=_NextPart_000_0106_01C50892.C7A45410 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIbKTCCCisw ggkToAMCAQICCii22+YAAAAABI4wDQYJKoZIhvcNAQEFBQAwgbIxJTAjBgkqhkiG9w0BCQEWFmNh QHNlY3VyaXR5Lmx1Y2VudC5jb20xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQw EgYDVQQHEwtNdXJyYXkgSGlsbDEcMBoGA1UEChMTTHVjZW50IFRlY2hub2xvZ2llczEzMDEGA1UE AxMqTHVjZW50IFRlY2hub2xvZ2llcyBDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyAxMB4XDTAzMDMxMzIw MzE0MloXDTA1MDMxMzIwNDE0MlowSTEiMCAGCSqGSIb3DQEJARYTYm9oYW5ub25AbHVjZW50LmNv bTEjMCEGA1UEAxMaUGhpbGlwIEwgQm9oYW5ub24gKFBoaWxpcCkwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDZHLJZmVXGHJ0OxstAsmH7Z5aH+3Vu3xYSm8k2hq7Y+4ftPhDrHjxdN5CT TcxU3CuGuqOq+PLhFFIR5GnjXEyiLnumv+mtA9p8yUDKqFxHzfOcDWppG1ZZdxrgV4zGwummoZbt vkg0TntWmMp+wqAZbuPgyqUasO5pNIeZu5Mce19pqY8O4U6rlABxEg8pq+E7p/8sAG7cA0Ed15zt 9vU8CPb4mDvP0/8QHGsv1cjJ3TaWbuZEfDUpU33X4MQ2n6j3HNWXvoThnJzlYze84c7ll2PMJgSg n7cyAPzEsIDkczzV8AFdPP9Zwlo+PHrbGBK3BtDJX5SmPv2kyTlyKgqxAgMBAAGjggapMIIGpTAL BgNVHQ8EBAMCA/gwJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMEBggrBgEFBQcDBzAdBgNV HQ4EFgQU6fJYCh99SSRZ6jcJn8+j1PmysZcwgf4GA1UdIwSB9jCB84AUhJ9BVZwQiE87TdOEOn4h S09K38uhgc6kgcswgcgxJTAjBgkqhkiG9w0BCQEWFmNhQHNlY3VyaXR5Lmx1Y2VudC5jb20xCzAJ BgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtNdXJyYXkgSGlsbDEcMBoG A1UEChMTTHVjZW50IFRlY2hub2xvZ2llczEcMBoGA1UECxMTTHVjZW50IFRlY2hub2xvZ2llczEr MCkGA1UEAxMiTHVjZW50IFRlY2hub2xvZ2llcyBSb290IEF1dGhvcml0eYIKYQwXHQAAAAAABTAY BgoJkiaJk/IsZAEBBAoWCGJvaGFubm9uMBcGCgmSJomT8ixkASwECRYHMDk4MjIyMzARBglghkgB hvhCAQEEBAMCBaAwggJ3BggrBgEFBQcBAQSCAmkwggJlMIHOBggrBgEFBQcwAoaBwWxkYXA6Ly9s ZGFwLXVzZWFzdC5wb3N0Lmx1Y2VudC5jb20vY249THVjZW50JTIwVGVjaG5vbG9naWVzJTIwQ2Vy dGlmaWNhdGUlMjBTZXJ2aWNlcyUyMDEsb3U9Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89 bHVjZW50LmNvbT9jYWNlcnRpZmljYXRlO2JpbmFyeT9iYXNlP29iamVjdGNsYXNzPWNlcnRpZmlj YXRpb25BdXRob3JpdHkwgcIGCCsGAQUFBzAChoG1bGRhcDovL2xkYXAubHVjZW50LmNvbS9jbj1M dWNlbnQlMjBUZWNobm9sb2dpZXMlMjBDZXJ0aWZpY2F0ZSUyMFNlcnZpY2VzJTIwMSxvdT1DZXJ0 aWZpY2F0aW9uJTIwQXV0aG9yaXRpZXMsbz1sdWNlbnQuY29tP2NhY2VydGlmaWNhdGU7YmluYXJ5 P2Jhc2U/b2JqZWN0Y2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTCBzAYIKwYBBQUHMAKGgb9s ZGFwOi8vbGRhcC1lbWVhLnBvc3QubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dpZXMl MjBDZXJ0aWZpY2F0ZSUyMFNlcnZpY2VzJTIwMSxvdT1DZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRp ZXMsbz1sdWNlbnQuY29tP2NhY2VydGlmaWNhdGU7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y2Vy dGlmaWNhdGlvbkF1dGhvcml0eTCCAooGA1UdHwSCAoEwggJ9MIHWoIHToIHQhoHNbGRhcDovL2xk YXAtdXNlYXN0LnBvc3QubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dpZXMlMjBDZXJ0 aWZpY2F0ZSUyMFNlcnZpY2VzJTIwMSxvdT1DZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRpZXMsbz1s dWNlbnQuY29tP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xh c3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTCByqCBx6CBxIaBwWxkYXA6Ly9sZGFwLmx1Y2VudC5j b20vY249THVjZW50JTIwVGVjaG5vbG9naWVzJTIwQ2VydGlmaWNhdGUlMjBTZXJ2aWNlcyUyMDEs b3U9Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89bHVjZW50LmNvbT9jZXJ0aWZpY2F0ZXJl dm9jYXRpb25saXN0O2JpbmFyeT9iYXNlP29iamVjdGNsYXNzPWNlcnRpZmljYXRpb25BdXRob3Jp dHkwgdSggdGggc6GgctsZGFwOi8vbGRhcC1lbWVhLnBvc3QubHVjZW50LmNvbS9jbj1MdWNlbnQl MjBUZWNobm9sb2dpZXMlMjBDZXJ0aWZpY2F0ZSUyMFNlcnZpY2VzJTIwMSxvdT1DZXJ0aWZpY2F0 aW9uJTIwQXV0aG9yaXRpZXMsbz1sdWNlbnQuY29tP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q7 YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTANBgkqhkiG9w0B AQUFAAOCAQEATKLL8Rtcji+TjRRQps8G4y+CHarvAH3ofRNV4a675e7sp76vB1xs0QhlbX/OWtj1 FL2M2RWXqdkICfNz5+EfxOPqco7Iqdy5ldYW5on/88gx7exsA5/G9Uzz3B+OPIyCy8vswrG6tpVk aEElaZFwsnlRvgtzLY/vBPU7LXZVZvkeVoQE3qQJsb7fP5fNDObDxlBp5EhZNla1GPQKypDoLjgb elIg5exWTNn+H/+0GLei3zhR+nK2cW/Jk8tRanZb6sDExRlOROQXbu/Qzi7818zYlHRzdsil6Msu QYNvsPfk22lgc1ypYARUozWYMHHyoUVpsUT6e1hyO9YJasyR0jCCEPYwgg/eoAMCAQICCmEMFx0A AAAAAAUwDQYJKoZIhvcNAQEFBQAwgcgxJTAjBgkqhkiG9w0BCQEWFmNhQHNlY3VyaXR5Lmx1Y2Vu dC5jb20xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtNdXJyYXkg SGlsbDEcMBoGA1UEChMTTHVjZW50IFRlY2hub2xvZ2llczEcMBoGA1UECxMTTHVjZW50IFRlY2hu b2xvZ2llczErMCkGA1UEAxMiTHVjZW50IFRlY2hub2xvZ2llcyBSb290IEF1dGhvcml0eTAeFw0w MDEyMDYxNjI2NDVaFw0xMDEyMDYxNjM2NDVaMIGyMSUwIwYJKoZIhvcNAQkBFhZjYUBzZWN1cml0 eS5sdWNlbnQuY29tMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxML TXVycmF5IEhpbGwxHDAaBgNVBAoTE0x1Y2VudCBUZWNobm9sb2dpZXMxMzAxBgNVBAMTKkx1Y2Vu dCBUZWNobm9sb2dpZXMgQ2VydGlmaWNhdGUgU2VydmljZXMgMTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKtshzTd4eazpB1UiHmHTXO7z5IcwsU1E+6jcRVjx2C9CzLWkzkNI62MO34l dbvbfrXk8XxxWANVRAYTgP1P2TkHYM/cNSG2uy8fdIQokvo1x6qBYOEvOB/QmOE12J30gcTHnFFY CI4154uJFxJwhnJGAA2KiSFJozlUza1kFy0MVateSrFFQe9JKVZcyheHsdgE58SOF8kTcEZBM5fQ c4UqQI1LcIOHtkDA2fDg22CR/7xs6oDOZfVOjJlsUufttn2s0WDeBwPPKgUPjoJlCyJvKxV5+KBE DntZ+i6qluBnwnMgCZcB5oktJGC60AtPlt47LHvlM092CVWEqUeDgwsCAwEAAaOCDPQwggzwMBAG CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSEn0FVnBCITztN04Q6fiFLT0rfyzALBgNVHQ8EBAMC AcYwDwYDVR0TAQH/BAUwAwEB/zCCAQQGA1UdIwSB/DCB+YAUb+ErUL6q6H01YmkM7stS6JICPF2h gc6kgcswgcgxJTAjBgkqhkiG9w0BCQEWFmNhQHNlY3VyaXR5Lmx1Y2VudC5jb20xCzAJBgNVBAYT AlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtNdXJyYXkgSGlsbDEcMBoGA1UEChMT THVjZW50IFRlY2hub2xvZ2llczEcMBoGA1UECxMTTHVjZW50IFRlY2hub2xvZ2llczErMCkGA1UE AxMiTHVjZW50IFRlY2hub2xvZ2llcyBSb290IEF1dGhvcml0eYIQWZmKGKlUwLZABc1MHeu4zzCC Bd8GA1UdHwSCBdYwggXSMIHMoIHJoIHGhoHDbGRhcDovL2xkYXAtdXNlYXN0LnBvc3QubHVjZW50 LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dpZXMlMjBSb290JTIwQXV0aG9yaXR5LG91PUNlcnRp ZmljYXRpb24lMjBBdXRob3JpdGllcyxvPWx1Y2VudC5jb20/Y2VydGlmaWNhdGVyZXZvY2F0aW9u bGlzdDtiaW5hcnk/YmFzZT9vYmplY3RjbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MIHMoIHJ oIHGhoHDbGRhcDovL2xkYXAtdXN3ZXN0LnBvc3QubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNo bm9sb2dpZXMlMjBSb290JTIwQXV0aG9yaXR5LG91PUNlcnRpZmljYXRpb24lMjBBdXRob3JpdGll cyxvPWx1Y2VudC5jb20/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDtiaW5hcnk/YmFzZT9vYmpl Y3RjbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MIHJoIHGoIHDhoHAbGRhcDovL2xkYXAuZXh0 ZXJuYWwubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dpZXMlMjBSb290JTIwQXV0aG9y aXR5LG91PUNlcnRpZmljYXRpb24lMjBBdXRob3JpdGllcyxvPWx1Y2VudC5jb20/Y2VydGlmaWNh dGVyZXZvY2F0aW9ubGlzdDtiaW5hcnk/YmFzZT9vYmplY3RjbGFzcz1jZXJ0aWZpY2F0aW9uQXV0 aG9yaXR5MIHPoIHMoIHJhoHGbGRhcDovL2xkYXAtdXNjZW50cmFsLnBvc3QubHVjZW50LmNvbS9j bj1MdWNlbnQlMjBUZWNobm9sb2dpZXMlMjBSb290JTIwQXV0aG9yaXR5LG91PUNlcnRpZmljYXRp b24lMjBBdXRob3JpdGllcyxvPWx1Y2VudC5jb20/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDti aW5hcnk/YmFzZT9vYmplY3RjbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MIHKoIHHoIHEhoHB bGRhcDovL2xkYXAtZW1lYS5wb3N0Lmx1Y2VudC5jb20vY249THVjZW50JTIwVGVjaG5vbG9naWVz JTIwUm9vdCUyMEF1dGhvcml0eSxvdT1DZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRpZXMsbz1sdWNl bnQuY29tP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9 Y2VydGlmaWNhdGlvbkF1dGhvcml0eTCByqCBx6CBxIaBwWxkYXA6Ly9sZGFwLWNhbGEucG9zdC5s dWNlbnQuY29tL2NuPUx1Y2VudCUyMFRlY2hub2xvZ2llcyUyMFJvb3QlMjBBdXRob3JpdHksb3U9 Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89bHVjZW50LmNvbT9jZXJ0aWZpY2F0ZXJldm9j YXRpb25saXN0O2JpbmFyeT9iYXNlP29iamVjdGNsYXNzPWNlcnRpZmljYXRpb25BdXRob3JpdHkw gciggcWggcKGgb9sZGFwOi8vbGRhcC1hcC5wb3N0Lmx1Y2VudC5jb20vY249THVjZW50JTIwVGVj aG5vbG9naWVzJTIwUm9vdCUyMEF1dGhvcml0eSxvdT1DZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRp ZXMsbz1sdWNlbnQuY29tP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q7YmluYXJ5P2Jhc2U/b2Jq ZWN0Y2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTAvoC2gK4YpaHR0cDovL3d3dy5zZWN1cml0 eS5sdWNlbnQuY29tL2NhL2NhMS5jcmwwggWyBggrBgEFBQcBAQSCBaQwggWgMIHEBggrBgEFBQcw AoaBt2xkYXA6Ly9sZGFwLXVzZWFzdC5wb3N0Lmx1Y2VudC5jb20vY249THVjZW50JTIwVGVjaG5v bG9naWVzJTIwUm9vdCUyMEF1dGhvcml0eSxvdT1DZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRpZXMs bz1sdWNlbnQuY29tP2NhY2VydGlmaWNhdGU7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y2VydGlm aWNhdGlvbkF1dGhvcml0eTCBxAYIKwYBBQUHMAKGgbdsZGFwOi8vbGRhcC11c3dlc3QucG9zdC5s dWNlbnQuY29tL2NuPUx1Y2VudCUyMFRlY2hub2xvZ2llcyUyMFJvb3QlMjBBdXRob3JpdHksb3U9 Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89bHVjZW50LmNvbT9jYWNlcnRpZmljYXRlO2Jp bmFyeT9iYXNlP29iamVjdGNsYXNzPWNlcnRpZmljYXRpb25BdXRob3JpdHkwgcEGCCsGAQUFBzAC hoG0bGRhcDovL2xkYXAuZXh0ZXJuYWwubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dp ZXMlMjBSb290JTIwQXV0aG9yaXR5LG91PUNlcnRpZmljYXRpb24lMjBBdXRob3JpdGllcyxvPWx1 Y2VudC5jb20/Y2FjZXJ0aWZpY2F0ZTtiaW5hcnk/YmFzZT9vYmplY3RjbGFzcz1jZXJ0aWZpY2F0 aW9uQXV0aG9yaXR5MIHHBggrBgEFBQcwAoaBumxkYXA6Ly9sZGFwLXVzY2VudHJhbC5wb3N0Lmx1 Y2VudC5jb20vY249THVjZW50JTIwVGVjaG5vbG9naWVzJTIwUm9vdCUyMEF1dGhvcml0eSxvdT1D ZXJ0aWZpY2F0aW9uJTIwQXV0aG9yaXRpZXMsbz1sdWNlbnQuY29tP2NhY2VydGlmaWNhdGU7Ymlu YXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTCBwgYIKwYBBQUHMAKG gbVsZGFwOi8vbGRhcC1lbWVhLnBvc3QubHVjZW50LmNvbS9jbj1MdWNlbnQlMjBUZWNobm9sb2dp ZXMlMjBSb290JTIwQXV0aG9yaXR5LG91PUNlcnRpZmljYXRpb24lMjBBdXRob3JpdGllcyxvPWx1 Y2VudC5jb20/Y2FjZXJ0aWZpY2F0ZTtiaW5hcnk/YmFzZT9vYmplY3RjbGFzcz1jZXJ0aWZpY2F0 aW9uQXV0aG9yaXR5MIHCBggrBgEFBQcwAoaBtWxkYXA6Ly9sZGFwLWNhbGEucG9zdC5sdWNlbnQu Y29tL2NuPUx1Y2VudCUyMFRlY2hub2xvZ2llcyUyMFJvb3QlMjBBdXRob3JpdHksb3U9Q2VydGlm aWNhdGlvbiUyMEF1dGhvcml0aWVzLG89bHVjZW50LmNvbT9jYWNlcnRpZmljYXRlO2JpbmFyeT9i YXNlP29iamVjdGNsYXNzPWNlcnRpZmljYXRpb25BdXRob3JpdHkwgcAGCCsGAQUFBzAChoGzbGRh cDovL2xkYXAtYXAucG9zdC5sdWNlbnQuY29tL2NuPUx1Y2VudCUyMFRlY2hub2xvZ2llcyUyMFJv b3QlMjBBdXRob3JpdHksb3U9Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89bHVjZW50LmNv bT9jYWNlcnRpZmljYXRlO2JpbmFyeT9iYXNlP29iamVjdGNsYXNzPWNlcnRpZmljYXRpb25BdXRo b3JpdHkwNQYIKwYBBQUHMAKGKWh0dHA6Ly93d3cuc2VjdXJpdHkubHVjZW50LmNvbS9jYS9jYTEu Y3J0MA0GCSqGSIb3DQEBBQUAA4IBAQA5s/lSt2wHac7FOt6QJNekHEoXgrS3wOiL/MeFS66kr4Fz mmk2712ph4avVso0tFsX+Fxy/OfjG6PejzaCbt5l57uWyyf17pP8COYdxr6kIb2fnBk2BjpLQAmv JSTr+F/JZz/vPUd8UeuQwzbOf2SqbXeHi2AI8bdZLzr5YTg87XayMCLQZhzjcKzNrG5TQZmhndx9 qmXkDMLykwuW0bK78OoksGT9uJFmvrV1aZBZqMX90qHCsC0OIZzQ9hnKSX8ODWZgP55p2/mpIpR1 O6hryJ2WJ5/+xadRRZsaRhvVBQ+qDz+D1RBy8HH52Cuex/XVfoYer2Aj4soME0vJZ0S9MYIDajCC A2YCAQEwgcEwgbIxJTAjBgkqhkiG9w0BCQEWFmNhQHNlY3VyaXR5Lmx1Y2VudC5jb20xCzAJBgNV BAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtNdXJyYXkgSGlsbDEcMBoGA1UE ChMTTHVjZW50IFRlY2hub2xvZ2llczEzMDEGA1UEAxMqTHVjZW50IFRlY2hub2xvZ2llcyBDZXJ0 aWZpY2F0ZSBTZXJ2aWNlcyAxAgoottvmAAAAAASOMAkGBSsOAwIaBQCgggF9MBgGCSqGSIb3DQEJ AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA1MDIwMjAwMTgxNVowIwYJKoZIhvcNAQkE MRYEFNjpnhpvSVFDKNyPBM/oI0PxCHUyMEkGCSqGSIb3DQEJDzE8MDowCgYIKoZIhvcNAwcwDgYI KoZIhvcNAwICAgCAMAcGBSsOAwIHMAcGBSsOAwIaMAoGCCqGSIb3DQIFMIHSBgkrBgEEAYI3EAQx gcQwgcEwgbIxJTAjBgkqhkiG9w0BCQEWFmNhQHNlY3VyaXR5Lmx1Y2VudC5jb20xCzAJBgNVBAYT AlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtNdXJyYXkgSGlsbDEcMBoGA1UEChMT THVjZW50IFRlY2hub2xvZ2llczEzMDEGA1UEAxMqTHVjZW50IFRlY2hub2xvZ2llcyBDZXJ0aWZp Y2F0ZSBTZXJ2aWNlcyAxAgoottvmAAAAAASOMA0GCSqGSIb3DQEBAQUABIIBAKwOty/bvoOoPyHx 0VTlOK3iu2ToMb3uqMshqGIQBOBdnD8XBbMxX122sm1gW6hIzyc4HlXAvu8jB/W0QIaNI1nWR8Az +piwXV98HMYtwzX6XXpi7SlZ51o+isLcIRfRg/QYft1IbCl+FbtFByFHs2ae85VYeAWkPArRWnKn 6V5ntcY48sBPnWe1HR1wyOBOw16BvewCmTHbpHboQA2GbZJk4ZM/ymh8X1zsL4/TIAp/gwSP7h+2 fxnW58u79ywFZAkZpheTfD5oWnbjKZSbyAHujGfo1/rIP1cfJJ8GBlG+Ic0sKtG2ClBtjJerCJCJ Kei0eGOR/sCwdGsz2EEcu9EAAAAAAAA= ------=_NextPart_000_0106_01C50892.C7A45410--