diff --git a/IDT.js b/IDT.js new file mode 100644 index 0000000..a3a5476 --- /dev/null +++ b/IDT.js @@ -0,0 +1,293 @@ +/* + Copyright 1991-2015 Amebis + + This file is part of MSIBuild. + + MSIBuild is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MSIBuild is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MSIBuild. If not, see . +*/ + +/*@cc_on @*/ +/*@if (! @__IDT_JS__) @*/ +/*@set @__IDT_JS__ = true @*/ + + +function CodePageToId(codepage) +{ + switch (codepage) { + case 932 : return "shift-jis"; + case 936 : return "gb2312"; + case 949 : return "euc-kr"; + case 950 : return "big5"; + case 874 : + case 1250: + case 1251: + case 1252: + case 1253: + case 1254: + case 1255: + case 1256: + case 1257: + case 1258: return "windows-" + codepage; + } +} + + +function IDT(path) +{ + // Open IDT file. + var + dat = new ActiveXObject("ADODB.Stream"); + + dat.Open(); + try { + // IDT is text file, uses CRLF line breaks and Windows 1252 header. + dat.Type = adTypeText; + dat.LineSeparator = adCRLF; + dat.Charset = "windows-1252"; + + // Load file. + dat.LoadFromFile(path); + + // Parse column names. + this.columns = dat.ReadText(adReadLine).split("\t"); + + // Parse column types. + this.types = dat.ReadText(adReadLine).split("\t"); + + // Parse meta info + var line = dat.ReadText(adReadLine).split("\t"), i = 0; + this.codepage = parseInt(line[i], 10); + if (isNaN(this.codepage)) this.codepage = 1252; else i++; + this.table = line[i++]; + this.key = line.slice(i); + for (var i in this.key) { + for (var j in this.columns) { + if (this.key[i] == this.columns[j]) { + this.key[i] = j; + break; + } + } + } + + // Rewind and reconfigure code page. + dat.Position = 0; + dat.Charset = CodePageToId(this.codepage); + + // Skip header. + dat.ReadText(adReadLine); + dat.ReadText(adReadLine); + dat.ReadText(adReadLine); + + // Parse data and build associative array. + this.data = new Array(); + while (!dat.EOS) { + line = dat.ReadText(adReadLine).split("\t"); + var key = new Array(); + for (var i in this.key) + key.push(line[this.key[i]]); + this.data[key] = line; + } + } finally { + dat.Close(); + } +} + +/*@end @*/ + +// SIG // Begin signature block +// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr +// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB +// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB +// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFFXDaT+CYy7L +// SIG // VxwKY0RTIDJ0FrkuoIISyDCCA+4wggNXoAMCAQICEH6T +// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx +// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh +// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK +// SIG // EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp +// SIG // Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w +// SIG // aW5nIENBMB4XDTEyMTIyMTAwMDAwMFoXDTIwMTIzMDIz +// SIG // NTk1OVowXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 +// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h +// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g +// SIG // RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +// SIG // AQCxrLNJVEuXHBIK2CV5kSJXKm/cuCbEQ3Nrwr8uUFr7 +// SIG // FMJ2jkMBJUO0oeJF9Oi3e8N0zCLXtJQAAvdN7b+0t0Qk +// SIG // a81fRTvRRM5DEnMXgotptCvLmR6schsmTXEfsTHd+1Fh +// SIG // AlOmqvVJLAV4RaUvic7nmef+jOJXPz3GktxK+Hsz5HkK +// SIG // +/B1iEGc/8UDUZmq12yfk2mHZSmDhcJgFMTIyTsU2sCB +// SIG // 8B8NdN6SIqvK9/t0fCfm90obf6fDni2uiuqm5qonFn1h +// SIG // 95hxEbziUKFL5V365Q6nLJ+qZSDT2JboyHylTkhE/xni +// SIG // RAeSC9dohIBdanhkRc1gRn5UwRN8xXnxycFxAgMBAAGj +// SIG // gfowgfcwHQYDVR0OBBYEFF+a9W5czMx0mtTdfe8/2+xM +// SIG // gC7dMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYW +// SIG // aHR0cDovL29jc3AudGhhd3RlLmNvbTASBgNVHRMBAf8E +// SIG // CDAGAQH/AgEAMD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6 +// SIG // Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVUaW1lc3RhbXBp +// SIG // bmdDQS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDgYD +// SIG // VR0PAQH/BAQDAgEGMCgGA1UdEQQhMB+kHTAbMRkwFwYD +// SIG // VQQDExBUaW1lU3RhbXAtMjA0OC0xMA0GCSqGSIb3DQEB +// SIG // BQUAA4GBAAMJm495739ZMKrvaLX64wkdu0+CBl03X6ZS +// SIG // nxaN6hySCURu9W3rWHww6PlpjSNzCxJvR6muORH4KrGb +// SIG // sBrDjutZlgCtzgxNstAxpghcKnr84nodV0yoZRjpeUBi +// SIG // JZZux8c3aoMhCI5B6t3ZVz8dd0mHKhYGXqY4aiISo1EZ +// SIG // g362MIIEozCCA4ugAwIBAgIQDs/0OMj+vzVuBNhqmBsa +// SIG // UDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJVUzEd +// SIG // MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAu +// SIG // BgNVBAMTJ1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vy +// SIG // dmljZXMgQ0EgLSBHMjAeFw0xMjEwMTgwMDAwMDBaFw0y +// SIG // MDEyMjkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMR0wGwYD +// SIG // VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjE0MDIGA1UE +// SIG // AxMrU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNl +// SIG // cyBTaWduZXIgLSBHNDCCASIwDQYJKoZIhvcNAQEBBQAD +// SIG // ggEPADCCAQoCggEBAKJjCzlEuLsjp0RJuw7/ofBhClOT +// SIG // sJjbrSwPSsVu/4Y8U1UPFc4EPyv9qZaW2b5heQtbyUyG +// SIG // duXgQ0sile7CK0PBn9hotI5AT+6FOLkRxSPyZFjwFTJv +// SIG // TlehroikAtcqHs1L4d1j1ReJMluwXplaqJ0oUA4X7pbb +// SIG // YTtFUR3PElYLkkf8q672Zj1HrHBy55LnX80QucSDZJQZ +// SIG // vSWA4ejSIqXQugJ6oXeTW2XD7hd0vEGGKtwITIySjJEt +// SIG // nndEH2jWqHR32w5bMotWizO92WPISZ06xcXqMwvS8aMb +// SIG // 9Iu+2bNXizveBKd6IrIkri7HcMW+ToMmCPsLvalPmQjh +// SIG // EChyqs0CAwEAAaOCAVcwggFTMAwGA1UdEwEB/wQCMAAw +// SIG // FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/ +// SIG // BAQDAgeAMHMGCCsGAQUFBwEBBGcwZTAqBggrBgEFBQcw +// SIG // AYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29t +// SIG // MDcGCCsGAQUFBzAChitodHRwOi8vdHMtYWlhLndzLnN5 +// SIG // bWFudGVjLmNvbS90c3MtY2EtZzIuY2VyMDwGA1UdHwQ1 +// SIG // MDMwMaAvoC2GK2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +// SIG // ZWMuY29tL3Rzcy1jYS1nMi5jcmwwKAYDVR0RBCEwH6Qd +// SIG // MBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTIwHQYD +// SIG // VR0OBBYEFEbGaaMOShQe1UzaUmMXP142vA3mMB8GA1Ud +// SIG // IwQYMBaAFF+a9W5czMx0mtTdfe8/2+xMgC7dMA0GCSqG +// SIG // SIb3DQEBBQUAA4IBAQB4O7SRKgBM8I9iMDd4o4QnB28Y +// SIG // st4l3KDUlAOqhk4ln5pAAxzdzuN5yyFoBtq2MrRtv/Qs +// SIG // JmMz5ElkbQ3mw2cO9wWkNWx8iRbG6bLfsundIMZxD82V +// SIG // dNy2XN69Nx9DeOZ4tc0oBCCjqvFLxIgpkQ6A0RH83Vx2 +// SIG // bk9eDkVGQW4NsOo4mrE62glxEPwcebSAe6xp9P2ctgwW +// SIG // K/F/Wwk9m1viFsoTgW0ALjgNqCmPLOGy9FqpAa8VnCwv +// SIG // SRvbIrvD/niUUcOGsYKIXfA9tFGheTMrLnu53CAJE3Hr +// SIG // ahlbz+ilMFcsiUk/uc9/yb8+ImhjU5q9aXSsxR08f5Lg +// SIG // w7wc2AR1MIIEzjCCA7agAwIBAgIQMHo2eqo+aIGm+U8I +// SIG // yzs5ZDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJV +// SIG // UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x +// SIG // HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx +// SIG // MDAuBgNVBAMTJ1N5bWFudGVjIENsYXNzIDMgU0hBMjU2 +// SIG // IENvZGUgU2lnbmluZyBDQTAeFw0xNTEwMDkwMDAwMDBa +// SIG // Fw0xODExMDcyMzU5NTlaMGExCzAJBgNVBAYTAlNJMREw +// SIG // DwYDVQQIEwhTbG92ZW5pYTEPMA0GA1UEBxMGS2Ftbmlr +// SIG // MRYwFAYDVQQKFA1BbWViaXMgZC5vLm8uMRYwFAYDVQQD +// SIG // FA1BbWViaXMgZC5vLm8uMIIBIjANBgkqhkiG9w0BAQEF +// SIG // AAOCAQ8AMIIBCgKCAQEAl/LoF3DHaSrIaG1pgBmBwDyl +// SIG // Yt7sRvIuoEdGr/yMhV9RfUIft+xsTPVQOAirvgG+KUbc +// SIG // E3KMnGH+VuK7Y+vYzRp3dYTLinSQz1NKYAELyTdVzmmY +// SIG // mU3LX764yk3ABtSZsZwPoiCy+TXE9ZsCkugB2c7Qp9N/ +// SIG // O9EjjQDRwZlUa3nLoY96Y3qNPwkCn04ppYiqPeIXTRz8 +// SIG // XBLs4Nl/bD9wymEuNSV75vzobJ7BUYQwRU7lmNL2SwRY +// SIG // ENaf0DpdiyFLBsNafHjGYiXQHgNxZUBpj7OoRDNBvMQY +// SIG // L+LM8OrjhGIK1uGL5CqBD/p81ebeFsAZVxg9hrgnkPVQ +// SIG // w77U0LZw8wIDAQABo4IBYjCCAV4wCQYDVR0TBAIwADAO +// SIG // BgNVHQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYa +// SIG // aHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwZgYDVR0g +// SIG // BF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIB +// SIG // FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF +// SIG // BQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT +// SIG // BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRL +// SIG // MEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zdi5zeW1jZC5j +// SIG // b20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdi5zeW1jYi5j +// SIG // b20vc3YuY3J0MB8GA1UdIwQYMBaAFJY7U/B5M5evfYPv +// SIG // LivMyreGHnJmMB0GA1UdDgQWBBT3B72WgJotdMR/DD09 +// SIG // J93UkAqfzDANBgkqhkiG9w0BAQsFAAOCAQEAinEvQC+1 +// SIG // yttKEsqAjt2YufpYlul3OQH17YKbUy4AAiKiAsUXWfTu +// SIG // XRVdkT6CrEYcHyOLaHfe36jVHw8vLIiR2cyEcB3vweyr +// SIG // JnNpt+Za4I/XZMoG/vvCJmSltOj8C/7PRKWklGgynPNe +// SIG // HI8+0d1vLzRtK77hFeV7CIMIfnpoYThJKTSLxdr0kn+j +// SIG // M8otfdLN2aDonnxe0Mf+2rkrX8AFIIHPpIXZj2X2VEmk +// SIG // ZdyFINgI+KlJVQY/RY9BFMM2htLAIkNcDP1QVzFajhGH +// SIG // yj+C+UtZQf5PceGYtJHNeq3cm6omjnEfyzi8/NwYFlkW +// SIG // hvzJEH3woPqKgUramNFFLD0W5zCCBVkwggRBoAMCAQIC +// SIG // ED141/l2SWCyYX308B7KhiowDQYJKoZIhvcNAQELBQAw +// SIG // gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln +// SIG // biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg +// SIG // TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp +// SIG // Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +// SIG // eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs +// SIG // aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +// SIG // eSAtIEc1MB4XDTEzMTIxMDAwMDAwMFoXDTIzMTIwOTIz +// SIG // NTk1OVowfzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 +// SIG // bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h +// SIG // bnRlYyBUcnVzdCBOZXR3b3JrMTAwLgYDVQQDEydTeW1h +// SIG // bnRlYyBDbGFzcyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcg +// SIG // Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +// SIG // AQCXgx4AFq8ssdIIxNdok1FgHnH24ke021hNI2JqtL9a +// SIG // G1H3ow0Yd2i72DarLyFQ2p7z518nTgvCl8gJcJOp2lwN +// SIG // TqQNkaC07BTOkXJULs6j20TpUhs/QTzKSuSqwOg5q1PM +// SIG // IdDMz3+b5sLMWGqCFe49Ns8cxZcHJI7xe74xLT1u3LWZ +// SIG // Qp9LYZVfHHDuF33bi+VhiXjHaBuvEXgamK7EVUdT2bMy +// SIG // 1qEORkDFl5KK0VOnmVuFNVfT6pNiYSAKxzB3JBFNYoO2 +// SIG // untogjHuZcrf+dWNsjXcjCtvanJcYISc8gyUXsBWUgBI +// SIG // zNP4pX3eL9cT5DiohNVGuBOGwhud6lo43ZvbAgMBAAGj +// SIG // ggGDMIIBfzAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH +// SIG // MAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/ +// SIG // BAgwBgEB/wIBADBsBgNVHSAEZTBjMGEGC2CGSAGG+EUB +// SIG // BxcDMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt +// SIG // YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6 +// SIG // Ly93d3cuc3ltYXV0aC5jb20vcnBhMDAGA1UdHwQpMCcw +// SIG // JaAjoCGGH2h0dHA6Ly9zMS5zeW1jYi5jb20vcGNhMy1n +// SIG // NS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF +// SIG // BwMDMA4GA1UdDwEB/wQEAwIBBjApBgNVHREEIjAgpB4w +// SIG // HDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01NjcwHQYD +// SIG // VR0OBBYEFJY7U/B5M5evfYPvLivMyreGHnJmMB8GA1Ud +// SIG // IwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +// SIG // SIb3DQEBCwUAA4IBAQAThRoeaak396C9pK9+HWFT/p2M +// SIG // XgymdR54FyPd/ewaA1U5+3GVx2Vap44w0kRaYdtwb9oh +// SIG // BcIuc7pJ8dGT/l3JzV4D4ImeP3Qe1/c4i6nWz7s1LzNY +// SIG // qJJW0chNO4LmeYQW/CiwsUfzHaI+7ofZpn+kVqU/rYQu +// SIG // Kd58vKiqoz0EAeq6k6IOUCIpF0yH5DoRX9akJYmbBWsv +// SIG // tMkBTCd7C6wZBSKgYBU/2sn7TUyP+3Jnd/0nlMe6NQ6I +// SIG // Sf6N/SivShK9DbOXBd5EDBX6NisD3MFQAfGhEV0U5eK9 +// SIG // J0tUviuEXg+mw3QFCu+Xw4kisR93873NQ9TxTKk/tYuE +// SIG // r2Ty0BQhMYIEPDCCBDgCAQEwgZMwfzELMAkGA1UEBhMC +// SIG // VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u +// SIG // MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr +// SIG // MTAwLgYDVQQDEydTeW1hbnRlYyBDbGFzcyAzIFNIQTI1 +// SIG // NiBDb2RlIFNpZ25pbmcgQ0ECEDB6NnqqPmiBpvlPCMs7 +// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA +// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3 +// SIG // DQEJBDEWBBQXmtsxJWhfv7ln+YB/i37hDAHatDANBgkq +// SIG // hkiG9w0BAQEFAASCAQAK7WYp6JeF6stD/8MCWcCCU1sk +// SIG // DRktVYt3YaE5PV41iAmNojUY3Pm/zxIfMSgOi3hmldZO +// SIG // svFKK6o3ie7YroDJzqv49XeSsij0qHAfdA8kZSm0Ietz +// SIG // C70aeQvUfsX/jlGaEsk6xyS8rAtBcyTFzFy/NEslf1PO +// SIG // 2HtoSLGua/8ZHY/rwCJ9dSFW1Q1bddQw8uwOCtYi/B0O +// SIG // gb2ZoA9y/eMEpHWbpzgc3tSALa3WrUBy2NkicM9xDARY +// SIG // S52dsYGM6bIZ9/HU5Lb5QhDcyW+s7NZTyJQtr03p42U0 +// SIG // 5WWVnq+Zsca/cFaFysaFxwjWKQ3URYadic7V6VJmeuoC +// SIG // Q6rZPsinoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 +// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 +// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h +// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g +// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd +// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI +// SIG // hvcNAQkFMQ8XDTE2MDkxMzE5MTYzMFowIwYJKoZIhvcN +// SIG // AQkEMRYEFKJrjxHhMcRHIHE0xSovNF/6HrbgMA0GCSqG +// SIG // SIb3DQEBAQUABIIBAAJUluyL0fGvb3NTfCyOnxE3OMya +// SIG // lkBBfy6IG0Z6Cu+YLj5xUan6OWJnGbhfRhKN8sfhI2Ls +// SIG // X7M36nwX4Ze3qj9qVUsC0o5eDnKSK6Wevkkof1qYeR93 +// SIG // dEg/lawYd9tMeWCNamtt+mGv8azAi+deZDK4l765UsKj +// SIG // KUrHN4NTgTX/p9eIHhZPlP+8vAKCqIkNQrKLCTkj5pLK +// SIG // swhkiGZYOtD5JrECIdjFZQM3+y8z49bMIxzDWhi21bb7 +// SIG // B+sWrwaDsNgkZU5pydrycqsWGtqO2Lr0BboMDdXOHMMR +// SIG // Qw0YDHS6OBU3oW8Q++FPkWOHbSw0IS0QMheLFrpmfQu/ +// SIG // FD7Lt/g= +// SIG // End signature block diff --git a/MSI.wsf b/MSI.wsf index b129e2b..6bae61b 100644 --- a/MSI.wsf +++ b/MSI.wsf @@ -455,13 +455,110 @@ WScript.Quit(0); ]]> + + + Extract strings to translate by comparing two IDT files. + + + + + + + + + ** SIG ** MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr ** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB ** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB -** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFEHEvk2w1IDu -** SIG ** raRVIFiVLN1o6XuBoIISyDCCA+4wggNXoAMCAQICEH6T +** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFAgwP2tZH4xo +** SIG ** ShC7TKM0tJUdu1UqoIISyDCCA+4wggNXoAMCAQICEH6T ** SIG ** 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx ** SIG ** CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh ** SIG ** cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK @@ -615,31 +712,31 @@ ** SIG ** OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA ** SIG ** MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG ** SIG ** AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3 -** SIG ** DQEJBDEWBBR6dTC/boD4AfXjRZuTKr/1zNmntzANBgkq -** SIG ** hkiG9w0BAQEFAASCAQBVo/5CV3pBnv4oB8K/31oUjG1k -** SIG ** 4oE2t6uXQQeMFe1oVWCcph6cS7RmxOoqyk5bV8flKUT1 -** SIG ** 9Sna5fDh2xi3PG/HGZ4Ua4bWs210Qno8G9K/vh/PZeC0 -** SIG ** /wqsYYWRKc6hyaQ3oc2whaalNNXGg+fQg/aNxHmuwgIY -** SIG ** Cljrdlr6bXThz7bOY6/NDddlqP1Pwnc3nihjPORnyf92 -** SIG ** 2lpLjQKZvGDSTfpy9BKb5ZHwAtZyDI3enUXrKtOYjh4e -** SIG ** T+jbSX98K5L6dP/7BNqt4HsLXINTB2EjOQtRPCn5botw -** SIG ** 9cTczoWFiy8CQBve8GizZHKVkuH1bdc2uT+EvhjQEr3z -** SIG ** FXb8CWovoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 +** SIG ** DQEJBDEWBBSA+wRcubRz2w/cM3NPYnJus3GLKjANBgkq +** SIG ** hkiG9w0BAQEFAASCAQAHLsbtqbG4i6jTLaWMvnfUW2hg +** SIG ** pmfoMPYyEhXrKuhLe9etau8QnHER4pKBpcmaUHZyXgTc +** SIG ** 4NFDhbmLOXE3dysr3N51tmhZ5tIdpuBQnyr5tvmb1UOO +** SIG ** ODbAZs7O9f2AuS+t7R0pu4gNz2ATiFjrAW3MhV7sDz29 +** SIG ** sBuFgfffSQvIR3nbi4McC3OOnVT0Qb6tBsYKJjESaubG +** SIG ** 0k2TZWsjei/Xj1B6cK0FszjnTKkrJXFyEKYFGhrUDxQJ +** SIG ** 7lRSGuo5a6jSy7FTFiJ/u7bCCL3xCDbZolN5Sreq04rt +** SIG ** WXQur23Eu193PeCFmaVCXcvXAoT6BxJxPLS78H3Cx1MM +** SIG ** 2vsos20poYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 ** SIG ** AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 ** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h ** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g ** SIG ** RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd ** SIG ** MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI -** SIG ** hvcNAQkFMQ8XDTE2MDkxMDA3MjMzNFowIwYJKoZIhvcN -** SIG ** AQkEMRYEFPXD/Zju3XrJ5FHNdYlywwjm6bxiMA0GCSqG -** SIG ** SIb3DQEBAQUABIIBAJIsJ9KLVyoPNgRe4QK0z/ssrOlc -** SIG ** NPZYckBVcPIvDp9J3jemLzqAXKLRvNgifYQRy8TQVRG5 -** SIG ** hjOtVrmHSqYJFJgih/2gVLjfuJ6P4Z7ya+UL1tdNTrfY -** SIG ** eBSAeUP5t59GsX9nnyxrvOFuC1gUOlvMmfCywWmLI8N1 -** SIG ** eyGamCkEmho4yDW/AHHUNPc6Ou2XiPMdy9EFvZ+aSv9p -** SIG ** ChD89Y9Tpm//1wEezp5FvkW7yqhp8sHKsDlQ9Ugi3wq0 -** SIG ** NMnswUVNekGnA4INP+C8PoExozoftlhMQCNkFf2gnmz+ -** SIG ** AuyM/w5rUzTReuw1dgaSadktExzlZqVQMdSmkrKXEZZj -** SIG ** HIABnZo= +** SIG ** hvcNAQkFMQ8XDTE2MDkxMzE5MTYzN1owIwYJKoZIhvcN +** SIG ** AQkEMRYEFK/udSxpaclJTaHL1BZhol2ZqgZ+MA0GCSqG +** SIG ** SIb3DQEBAQUABIIBAEuXPMHdYJhLAWTUKp/hr3EG9xk4 +** SIG ** ENgON+sdZF3cM/gavxr1vZhgp/yypxEHuiNPBAf6E08j +** SIG ** ZQDq0NUmoXm3cSXTTQhQd8OZjeRvr4BDS7BJhQUUMKBL +** SIG ** BPTVsLGiy7N2k43575LcmE/d6kakPOCDG6uLSRmxZKRl +** SIG ** J6GmmfCrpHYwBoKGcNgCyXV9hNpZ+hXDkyuGbnOxqK0R +** SIG ** ws78DmQOaOiWPGY6AZrxf9+PZXYG4B1nOGdwFz3iTvjM +** SIG ** +LaJrwKEx0IbRcN1sIhXOHs8V46RVgPEczVIv8yF4JGv +** SIG ** NlKcEofnt/ApQUEkgaBQzvuBnzFmfTTg/R1dsF6NtRXx +** SIG ** 8ndDGMk= diff --git a/String.js b/String.js index 75f5dcc..a01f07b 100644 --- a/String.js +++ b/String.js @@ -41,6 +41,32 @@ function _S(str) } +var _PO_stat = null; +function _PO(str) +{ + if (!_PO_stat) { + _PO_stat = { + "re_bslash": new RegExp("\\\\", "g"), + "re_bs": new RegExp("\b", "g"), + "re_ff": new RegExp("\f", "g"), + "re_lf": new RegExp("\n", "g"), + "re_cr": new RegExp("\r", "g"), + "re_tab": new RegExp("\t", "g"), + "re_quot": new RegExp("\"", "g") + }; + } + + if (str == null) return null; + switch (typeof(str)) { + case "string": break; + case "undefined": return null; + default: try { str = str.toString(); } catch (err) { return null; } + } + + return str.replace(_PO_stat.re_bslash, "\\\\").replace(_PO_stat.re_bs, "\\b").replace(_PO_stat.re_ff, "\\f").replace(_PO_stat.re_lf, "\\n").replace(_PO_stat.re_cr, "\\r").replace(_PO_stat.re_tab, "\\t").replace(_PO_stat.re_quot, "\\\""); +} + + var Trim_stat = null; function Trim(str) { @@ -80,11 +106,11 @@ function Time2Str(date) /*@end @*/ // SIG // Begin signature block -// SIG // MIIZKwYJKoZIhvcNAQcCoIIZHDCCGRgCAQExCzAJBgUr +// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB -// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFJ7ICj4D+PWb -// SIG // gD7qzuf0PZJVgn78oIIUJTCCA+4wggNXoAMCAQICEH6T +// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFDxPoB8u1jme +// SIG // KWirJ5YJ3N+8s9wMoIISyDCCA+4wggNXoAMCAQICEH6T // SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK @@ -151,129 +177,117 @@ function Time2Str(date) // SIG // K/F/Wwk9m1viFsoTgW0ALjgNqCmPLOGy9FqpAa8VnCwv // SIG // SRvbIrvD/niUUcOGsYKIXfA9tFGheTMrLnu53CAJE3Hr // SIG // ahlbz+ilMFcsiUk/uc9/yb8+ImhjU5q9aXSsxR08f5Lg -// SIG // w7wc2AR1MIIFejCCBGKgAwIBAgIQQIeLZ2eQpZcEKJ6U -// SIG // AwIaGzANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMC -// SIG // VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYD -// SIG // VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYD -// SIG // VQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cu -// SIG // dmVyaXNpZ24uY29tL3JwYSAoYykxMDEuMCwGA1UEAxMl -// SIG // VmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAx -// SIG // MCBDQTAeFw0xMjA5MjYwMDAwMDBaFw0xNTEwMTEyMzU5 -// SIG // NTlaMIG9MQswCQYDVQQGEwJTSTERMA8GA1UECBMIU2xv -// SIG // dmVuaWExDzANBgNVBAcTBkthbW5pazEWMBQGA1UEChQN -// SIG // QW1lYmlzIGQuby5vLjE+MDwGA1UECxM1RGlnaXRhbCBJ -// SIG // RCBDbGFzcyAzIC0gTWljcm9zb2Z0IFNvZnR3YXJlIFZh -// SIG // bGlkYXRpb24gdjIxGjAYBgNVBAsUEXByb2dyYW1za2Eg -// SIG // b3ByZW1hMRYwFAYDVQQDFA1BbWViaXMgZC5vLm8uMIIB -// SIG // IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9QZF -// SIG // QzscW51y/Ermb72+gkWUJ6ExfOS1UHvNAcefWdFm4yVX -// SIG // wqi8TRT+P5czX+UjKbh77d00CxODQK7rdLb8+EgKybFT -// SIG // /bVfT2y8RMtEdG0qI84ZSwh2POazD0PyiHb9XORN2yKH -// SIG // ykqLiO+6cJvZXjfNpGqf/LxkXVJvyxaemN1XTR91ohhc -// SIG // 97bNyGCP0M8PNKRZ6Hr5uKlZyr7QLYoYAkaENYdXHrOc -// SIG // l5CmBAIL56Ngc8vIlLF2lLPmDYf1qWrPpJyXfj7p3iUf -// SIG // AewtEpbC5FfhCaeHwgg41NfxhRWCXEBTewLHQJtpSo2k -// SIG // mwv5Q1ZuWMDUjPeuHZ3F/ofBoJTE4wIDAQABo4IBezCC -// SIG // AXcwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwQAYD -// SIG // VR0fBDkwNzA1oDOgMYYvaHR0cDovL2NzYzMtMjAxMC1j -// SIG // cmwudmVyaXNpZ24uY29tL0NTQzMtMjAxMC5jcmwwRAYD -// SIG // VR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUF -// SIG // BwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh -// SIG // MBMGA1UdJQQMMAoGCCsGAQUFBwMDMHEGCCsGAQUFBwEB -// SIG // BGUwYzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVy -// SIG // aXNpZ24uY29tMDsGCCsGAQUFBzAChi9odHRwOi8vY3Nj -// SIG // My0yMDEwLWFpYS52ZXJpc2lnbi5jb20vQ1NDMy0yMDEw -// SIG // LmNlcjAfBgNVHSMEGDAWgBTPmanqeyb0S8mOj9fwBSbv -// SIG // 49KnnTARBglghkgBhvhCAQEEBAMCBBAwFgYKKwYBBAGC -// SIG // NwIBGwQIMAYBAQABAf8wDQYJKoZIhvcNAQEFBQADggEB -// SIG // AOMOvRZGpbGuLiIAaqp22r2WAOzxinLpe0O/pJCmBoU0 -// SIG // lK/Es/Jyc4Y90QyvvhoSVKoZ2hMQ2Y6N7oSkhHjKo/n8 -// SIG // WIQwNvaqZu4JpO9IgH1WkfqJWnpVcaVGPA0uHhuDhPe9 -// SIG // gH6Z6I3HC5GL7sc+z4n0kzy1f3AyD+DihQhD0J/i/sgF -// SIG // iEaFmwwlJHMv6b4xmERMff050y15k875cdRpeFvSjHko -// SIG // IUbY2bfPlnvhWd/4eidkT3KY5Lpm4cqUO20166p2Cjxf -// SIG // i9kEGuDPYEYiX94hQmjWwZfIYxdYdD9f+gVcyPpiMspq -// SIG // n5QwKHOenweisG6BwXs4H5q45SLx1oJ9PUQwggYKMIIE -// SIG // 8qADAgECAhBSAOWqJVb8GobtlsnUSzPHMA0GCSqGSIb3 -// SIG // DQEBBQUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO -// SIG // VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWdu -// SIG // IFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2 -// SIG // IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg -// SIG // dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNz -// SIG // IDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB -// SIG // dXRob3JpdHkgLSBHNTAeFw0xMDAyMDgwMDAwMDBaFw0y -// SIG // MDAyMDcyMzU5NTlaMIG0MQswCQYDVQQGEwJVUzEXMBUG -// SIG // A1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -// SIG // cmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRl -// SIG // cm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2ln -// SIG // bi5jb20vcnBhIChjKTEwMS4wLAYDVQQDEyVWZXJpU2ln -// SIG // biBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDEwIENBMIIB -// SIG // IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9SNL -// SIG // XqXXirsy6dRX9+/kxyZ+rRmY/qidfZT2NmsQ13WBMH8E -// SIG // aH/LK3UezR0IjN9plKc3o5x7gOCZ4e43TV/OOxTuhtTQ -// SIG // 9Sc1vCULOKeMY50Xowilq7D7zWpigkzVIdob2fHjhDuK -// SIG // Kk+FW5ABT8mndhB/JwN8vq5+fcHd+QW8G0icaefApDw8 -// SIG // QQA+35blxeSUcdZVAccAJkpAPLWhJqkMp22AjpAle8+/ -// SIG // PxzrL5b65Yd3xrVWsno7VDBTG99iNP8e0fRakyiF5UwX -// SIG // Tn5b/aSTmX/fze+kde/vFfZH5/gZctguNBqmtKdMfr27 -// SIG // Tww9V/Ew1qY2jtaAdtcZLqXNfjQtiQIDAQABo4IB/jCC -// SIG // AfowEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBn -// SIG // MGUGC2CGSAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0 -// SIG // dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwKgYIKwYB -// SIG // BQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29t -// SIG // L3JwYTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwE -// SIG // YTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUr -// SIG // DgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0 -// SIG // cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYw -// SIG // NAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC52ZXJp -// SIG // c2lnbi5jb20vcGNhMy1nNS5jcmwwNAYIKwYBBQUHAQEE -// SIG // KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJp -// SIG // c2lnbi5jb20wHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG -// SIG // AQUFBwMDMCgGA1UdEQQhMB+kHTAbMRkwFwYDVQQDExBW -// SIG // ZXJpU2lnbk1QS0ktMi04MB0GA1UdDgQWBBTPmanqeyb0 -// SIG // S8mOj9fwBSbv49KnnTAfBgNVHSMEGDAWgBR/02Wnwt3s -// SIG // u/AwCfNDOfoCrzMxMzANBgkqhkiG9w0BAQUFAAOCAQEA -// SIG // ViLmNKTEYctIuQGtVqhkD9mMkcS7zAzlrXqgIn/fRzhK -// SIG // LWzRf3EafOxwqbHwT+QPDFP6FV7+dJhJJIWBJhyRFEew -// SIG // TGOMu6E01MZF6A2FJnMD0KmMZG3ccZLmRQVgFVlROfxY -// SIG // FGv+1KTteWsIDEFy5zciBgm+I+k/RJoe6WGdzLGQXPw9 -// SIG // 0o2sQj1lNtS0PUAoj5sQzyMmzEsgy5AfXYxMNMo82OU3 -// SIG // 1m+lIL006ybZrg3nxZr3obQhkTNvhuhYuyV8dA5Y/nUb -// SIG // Yz/OMXybjxuWnsVTdoRbnK2R+qztk7pdyCFTwoJTY68S -// SIG // DVCHERs9VFKWiiycPZIaCJoFLseTpUiR0zGCBHIwggRu -// SIG // AgEBMIHJMIG0MQswCQYDVQQGEwJVUzEXMBUGA1UEChMO -// SIG // VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWdu -// SIG // IFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9m -// SIG // IHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v -// SIG // cnBhIChjKTEwMS4wLAYDVQQDEyVWZXJpU2lnbiBDbGFz -// SIG // cyAzIENvZGUgU2lnbmluZyAyMDEwIENBAhBAh4tnZ5Cl -// SIG // lwQonpQDAhobMAkGBSsOAwIaBQCgcDAQBgorBgEEAYI3 -// SIG // AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB -// SIG // BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAj -// SIG // BgkqhkiG9w0BCQQxFgQUZFFRwcAST2XZGHWztrbB0us2 -// SIG // t1QwDQYJKoZIhvcNAQEBBQAEggEAUUrCW7R+7inWz89Q -// SIG // WcHUJVAgHIzf47+ifq4NTMEljOdzWZuZlP5gtWnNGFtt -// SIG // 84hDnFcJvaXSKsCBb6kInDrNLYYjLyq0BcKd6TGnfc9b -// SIG // hG3tp6bS/OMPYUmEFvECXcgI/EPhlc6wS7you3lKy02E -// SIG // f5wASOFdumCJTKUl1NgBWxx2eS06hg2JV2eqCNkHGHCK -// SIG // Fw+fZvgGM43woYXW5vA/mYAPrTzze7AoqkiZau6T/ds7 -// SIG // XuuSlntVqpNjpV2J1wgU1VibUTtO7Akfpk4Yh/2L4SEf -// SIG // 3FvQc3QoB3LX6rdUjLPuh8XtO5A02IGOewFGW2j6eZ/u -// SIG // +vzopXNT7WeOzyRO/KGCAgswggIHBgkqhkiG9w0BCQYx -// SIG // ggH4MIIB9AIBATByMF4xCzAJBgNVBAYTAlVTMR0wGwYD -// SIG // VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEwMC4GA1UE -// SIG // AxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNl -// SIG // cyBDQSAtIEcyAhAOz/Q4yP6/NW4E2GqYGxpQMAkGBSsO -// SIG // AwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB -// SIG // MBwGCSqGSIb3DQEJBTEPFw0xNTAyMjUwODA3MjBaMCMG -// SIG // CSqGSIb3DQEJBDEWBBQr/B5JEkzV9O5t5+zkw8kSZS4r -// SIG // jTANBgkqhkiG9w0BAQEFAASCAQANKLXioTyPfB31SCMz -// SIG // YzyIvHPNsUBu9xIypjmL2NYo7y9ttNtc1g+QL1bwN1Vk -// SIG // gLh7QVfgis0RITDHsuGpqrSbBhKSqHFsXvcWAIEliicd -// SIG // ZGw7vC8WjX0G6q8NWL7rlauGVEgoRb0oyEEmUnWwq+uZ -// SIG // RmIfz/rYHTL8cnub2RT0HNFo7YBGHMp0L7c3kuuyzfy1 -// SIG // rdACPyRdzZ6QxZ+PuJZ1iA1/J2Nl8aQh6+vJH/oSfalv -// SIG // SEYGtguoT603oVoaRH8OPdw6SG9EUzp4LpV8YQwE3hJM -// SIG // Zr6EXmW5ToWNjrlkKs3bCDuHpX19kiwoJetM9fmEMDXw -// SIG // p70rxAufvXmIpItY +// SIG // w7wc2AR1MIIEzjCCA7agAwIBAgIQMHo2eqo+aIGm+U8I +// SIG // yzs5ZDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJV +// SIG // UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x +// SIG // HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx +// SIG // MDAuBgNVBAMTJ1N5bWFudGVjIENsYXNzIDMgU0hBMjU2 +// SIG // IENvZGUgU2lnbmluZyBDQTAeFw0xNTEwMDkwMDAwMDBa +// SIG // Fw0xODExMDcyMzU5NTlaMGExCzAJBgNVBAYTAlNJMREw +// SIG // DwYDVQQIEwhTbG92ZW5pYTEPMA0GA1UEBxMGS2Ftbmlr +// SIG // MRYwFAYDVQQKFA1BbWViaXMgZC5vLm8uMRYwFAYDVQQD +// SIG // FA1BbWViaXMgZC5vLm8uMIIBIjANBgkqhkiG9w0BAQEF +// SIG // AAOCAQ8AMIIBCgKCAQEAl/LoF3DHaSrIaG1pgBmBwDyl +// SIG // Yt7sRvIuoEdGr/yMhV9RfUIft+xsTPVQOAirvgG+KUbc +// SIG // E3KMnGH+VuK7Y+vYzRp3dYTLinSQz1NKYAELyTdVzmmY +// SIG // mU3LX764yk3ABtSZsZwPoiCy+TXE9ZsCkugB2c7Qp9N/ +// SIG // O9EjjQDRwZlUa3nLoY96Y3qNPwkCn04ppYiqPeIXTRz8 +// SIG // XBLs4Nl/bD9wymEuNSV75vzobJ7BUYQwRU7lmNL2SwRY +// SIG // ENaf0DpdiyFLBsNafHjGYiXQHgNxZUBpj7OoRDNBvMQY +// SIG // L+LM8OrjhGIK1uGL5CqBD/p81ebeFsAZVxg9hrgnkPVQ +// SIG // w77U0LZw8wIDAQABo4IBYjCCAV4wCQYDVR0TBAIwADAO +// SIG // BgNVHQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYa +// SIG // aHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwZgYDVR0g +// SIG // BF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIB +// SIG // FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF +// SIG // BQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT +// SIG // BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRL +// SIG // MEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zdi5zeW1jZC5j +// SIG // b20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdi5zeW1jYi5j +// SIG // b20vc3YuY3J0MB8GA1UdIwQYMBaAFJY7U/B5M5evfYPv +// SIG // LivMyreGHnJmMB0GA1UdDgQWBBT3B72WgJotdMR/DD09 +// SIG // J93UkAqfzDANBgkqhkiG9w0BAQsFAAOCAQEAinEvQC+1 +// SIG // yttKEsqAjt2YufpYlul3OQH17YKbUy4AAiKiAsUXWfTu +// SIG // XRVdkT6CrEYcHyOLaHfe36jVHw8vLIiR2cyEcB3vweyr +// SIG // JnNpt+Za4I/XZMoG/vvCJmSltOj8C/7PRKWklGgynPNe +// SIG // HI8+0d1vLzRtK77hFeV7CIMIfnpoYThJKTSLxdr0kn+j +// SIG // M8otfdLN2aDonnxe0Mf+2rkrX8AFIIHPpIXZj2X2VEmk +// SIG // ZdyFINgI+KlJVQY/RY9BFMM2htLAIkNcDP1QVzFajhGH +// SIG // yj+C+UtZQf5PceGYtJHNeq3cm6omjnEfyzi8/NwYFlkW +// SIG // hvzJEH3woPqKgUramNFFLD0W5zCCBVkwggRBoAMCAQIC +// SIG // ED141/l2SWCyYX308B7KhiowDQYJKoZIhvcNAQELBQAw +// SIG // gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln +// SIG // biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg +// SIG // TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp +// SIG // Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +// SIG // eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs +// SIG // aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +// SIG // eSAtIEc1MB4XDTEzMTIxMDAwMDAwMFoXDTIzMTIwOTIz +// SIG // NTk1OVowfzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 +// SIG // bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h +// SIG // bnRlYyBUcnVzdCBOZXR3b3JrMTAwLgYDVQQDEydTeW1h +// SIG // bnRlYyBDbGFzcyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcg +// SIG // Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +// SIG // AQCXgx4AFq8ssdIIxNdok1FgHnH24ke021hNI2JqtL9a +// SIG // G1H3ow0Yd2i72DarLyFQ2p7z518nTgvCl8gJcJOp2lwN +// SIG // TqQNkaC07BTOkXJULs6j20TpUhs/QTzKSuSqwOg5q1PM +// SIG // IdDMz3+b5sLMWGqCFe49Ns8cxZcHJI7xe74xLT1u3LWZ +// SIG // Qp9LYZVfHHDuF33bi+VhiXjHaBuvEXgamK7EVUdT2bMy +// SIG // 1qEORkDFl5KK0VOnmVuFNVfT6pNiYSAKxzB3JBFNYoO2 +// SIG // untogjHuZcrf+dWNsjXcjCtvanJcYISc8gyUXsBWUgBI +// SIG // zNP4pX3eL9cT5DiohNVGuBOGwhud6lo43ZvbAgMBAAGj +// SIG // ggGDMIIBfzAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH +// SIG // MAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/ +// SIG // BAgwBgEB/wIBADBsBgNVHSAEZTBjMGEGC2CGSAGG+EUB +// SIG // BxcDMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt +// SIG // YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6 +// SIG // Ly93d3cuc3ltYXV0aC5jb20vcnBhMDAGA1UdHwQpMCcw +// SIG // JaAjoCGGH2h0dHA6Ly9zMS5zeW1jYi5jb20vcGNhMy1n +// SIG // NS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF +// SIG // BwMDMA4GA1UdDwEB/wQEAwIBBjApBgNVHREEIjAgpB4w +// SIG // HDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01NjcwHQYD +// SIG // VR0OBBYEFJY7U/B5M5evfYPvLivMyreGHnJmMB8GA1Ud +// SIG // IwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +// SIG // SIb3DQEBCwUAA4IBAQAThRoeaak396C9pK9+HWFT/p2M +// SIG // XgymdR54FyPd/ewaA1U5+3GVx2Vap44w0kRaYdtwb9oh +// SIG // BcIuc7pJ8dGT/l3JzV4D4ImeP3Qe1/c4i6nWz7s1LzNY +// SIG // qJJW0chNO4LmeYQW/CiwsUfzHaI+7ofZpn+kVqU/rYQu +// SIG // Kd58vKiqoz0EAeq6k6IOUCIpF0yH5DoRX9akJYmbBWsv +// SIG // tMkBTCd7C6wZBSKgYBU/2sn7TUyP+3Jnd/0nlMe6NQ6I +// SIG // Sf6N/SivShK9DbOXBd5EDBX6NisD3MFQAfGhEV0U5eK9 +// SIG // J0tUviuEXg+mw3QFCu+Xw4kisR93873NQ9TxTKk/tYuE +// SIG // r2Ty0BQhMYIEPDCCBDgCAQEwgZMwfzELMAkGA1UEBhMC +// SIG // VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u +// SIG // MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr +// SIG // MTAwLgYDVQQDEydTeW1hbnRlYyBDbGFzcyAzIFNIQTI1 +// SIG // NiBDb2RlIFNpZ25pbmcgQ0ECEDB6NnqqPmiBpvlPCMs7 +// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA +// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3 +// SIG // DQEJBDEWBBSipOV5yboG0OsgwNNLnFzwwncvXTANBgkq +// SIG // hkiG9w0BAQEFAASCAQCTeZ1p4YgRrrg1Grr2eGvnk+Jt +// SIG // +LVBTDo7+J8gb38Vw9ChGPyZMdJSVNyTyIo2yuUC2KE7 +// SIG // 5epedbkLZzZtEkxZ8dKT4FoRn9tjKDbT3lAY68KTx6b6 +// SIG // VfQ1T9QuNPnirAnEPFGZNeinlkIaP9MRHG6Wsz2WEw0h +// SIG // dYQYAPnptTyTZZJut28Nv/AZlB8YmJYuAHFNzpscebHh +// SIG // aXll4sbzGCoY+WYlLDpiI45qEQ9ygqUu0TpBrfE1woGv +// SIG // GUEhCDJEshaUy5VL7CDnyncyTevi4EuvkBR40H5GBUNa +// SIG // CAuamCX8gvpHJ44HAXYm/YPL51G3YCtD3NMlfIQk4Uuo +// SIG // 9DkcJ7oJoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 +// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 +// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h +// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g +// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd +// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI +// SIG // hvcNAQkFMQ8XDTE2MDkxMzE5MTY0MlowIwYJKoZIhvcN +// SIG // AQkEMRYEFEaKcXeI+Zi7cHwo0XYq+WHJIOIoMA0GCSqG +// SIG // SIb3DQEBAQUABIIBAAlvGR/5ZTGIFuPTB85m5WvJhZqy +// SIG // jMQtiFY98x5DVTv4le9YwEl3BNdsqe3evL1z+Kg9ROIv +// SIG // iHkTVcjx5EfdYkpUbIRiyjLiE5SbHpchXOQmWkGypOSE +// SIG // MVTTl9+W6odMY3o6vMjXfJzImejPq/IqSZNGIo7gP/1Q +// SIG // SaV0GOr05fuxfgklgSzVwHBEKKjUtCoFvbjvTfsPFSo8 +// SIG // 3gLp6pqcmuxcYslbfMu3ix32PHtvw0VECcWVjPOmorrI +// SIG // X4mx7QvHXokHXs/T+kG8jXmiAq4KzdU21hdjeBtFZaW6 +// SIG // Jt1Es2FKQAFqwsqeSxHfuDNC7s2jmPLpU2dMHQwvD3H/ +// SIG // fc8JMgU= // SIG // End signature block