@hpcc-js/comms 2.89.0 → 2.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/index.es6.js +956 -128
  2. package/dist/index.es6.js.map +1 -1
  3. package/dist/index.js +948 -119
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.js +1 -1
  6. package/dist/index.min.js.map +1 -1
  7. package/dist/index.node.js +948 -119
  8. package/dist/index.node.js.map +1 -1
  9. package/dist/index.node.min.js +1 -1
  10. package/dist/index.node.min.js.map +1 -1
  11. package/lib-es6/__package__.js +2 -2
  12. package/lib-es6/ecl/query.js +68 -0
  13. package/lib-es6/ecl/query.js.map +1 -1
  14. package/lib-es6/ecl/queryGraph.js +759 -0
  15. package/lib-es6/ecl/queryGraph.js.map +1 -0
  16. package/lib-es6/ecl/workunit.js +116 -102
  17. package/lib-es6/ecl/workunit.js.map +1 -1
  18. package/lib-es6/services/wsWorkunits.js +5 -1
  19. package/lib-es6/services/wsWorkunits.js.map +1 -1
  20. package/lib-es6/services/wsdl/WsWorkunits/v1.98/WsWorkunits.js +370 -0
  21. package/lib-es6/services/wsdl/WsWorkunits/v1.98/WsWorkunits.js.map +1 -0
  22. package/package.json +3 -3
  23. package/src/__package__.ts +2 -2
  24. package/src/ecl/query.ts +66 -1
  25. package/src/ecl/queryGraph.ts +809 -0
  26. package/src/ecl/workunit.ts +126 -103
  27. package/src/services/wsWorkunits.ts +8 -1
  28. package/src/services/wsdl/WsWorkunits/v1.98/WsWorkunits.ts +3182 -0
  29. package/types/__package__.d.ts +2 -2
  30. package/types/ecl/query.d.ts +12 -1
  31. package/types/ecl/query.d.ts.map +1 -1
  32. package/types/ecl/queryGraph.d.ts +101 -0
  33. package/types/ecl/queryGraph.d.ts.map +1 -0
  34. package/types/ecl/workunit.d.ts +8 -0
  35. package/types/ecl/workunit.d.ts.map +1 -1
  36. package/types/services/wsWorkunits.d.ts +3 -1
  37. package/types/services/wsWorkunits.d.ts.map +1 -1
  38. package/types/services/wsdl/WsWorkunits/v1.98/WsWorkunits.d.ts +2623 -0
  39. package/types/services/wsdl/WsWorkunits/v1.98/WsWorkunits.d.ts.map +1 -0
  40. package/types-3.4/__package__.d.ts +2 -2
  41. package/types-3.4/ecl/query.d.ts +12 -1
  42. package/types-3.4/ecl/queryGraph.d.ts +101 -0
  43. package/types-3.4/ecl/workunit.d.ts +8 -0
  44. package/types-3.4/services/wsWorkunits.d.ts +3 -1
  45. package/types-3.4/services/wsdl/WsWorkunits/v1.98/WsWorkunits.d.ts +2623 -0
package/dist/index.es6.js CHANGED
@@ -1,5 +1,5 @@
1
- import { scopedLogger, join, promiseTimeout, exists, deepMixin, xml2json, StateObject, Cache, Graph, Subgraph, Vertex, Edge, SAXStackParser, Stack, espTime2Seconds, deepMixinT, XMLNode, debounce, Message, Dispatch, find, Dictionary, DictionaryNoCase, root } from '@hpcc-js/util';
2
- import { DOMParser } from '@xmldom/xmldom';
1
+ import { scopedLogger, join, promiseTimeout, exists, deepMixin, xml2json, StateObject, Cache, Graph, Subgraph as Subgraph$1, Vertex as Vertex$1, Edge as Edge$1, SAXStackParser, Stack, espTime2Seconds as espTime2Seconds$1, deepMixinT, XMLNode, debounce, Message, Dispatch, find, Dictionary, DictionaryNoCase, root } from '@hpcc-js/util';
2
+ import { DOMParser as DOMParser$1 } from '@xmldom/xmldom';
3
3
  import fetch$1 from 'node-fetch';
4
4
  import * as https from 'https';
5
5
  import { Agent, setGlobalDispatcher } from 'undici';
@@ -14,8 +14,8 @@ import * as tmp from 'tmp';
14
14
  var trustwave = "\nTrustwave Secure Global Extended Validation CA, Level 1\nSecureTrust Corporation\n00F6F61CE4A3635BB0CA8AACEEFCB2D0F0\n-----BEGIN CERTIFICATE-----\nMIIE+DCCA+CgAwIBAgIRAPb2HOSjY1uwyoqs7vyy0PAwDQYJKoZIhvcNAQELBQAw\nSjELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRkwFwYDVQQDExBTZWN1cmUgR2xvYmFsIENBMB4XDTE1MDgxMjIwMTcyOVoXDTI1\nMDgwOTIwMTcyOVowgbgxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQ\nMA4GA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMUAwPgYDVQQDEzdUcnVzdHdhdmUgU2VjdXJlIEdsb2JhbCBFeHRlbmRlZCBW\nYWxpZGF0aW9uIENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdh\ndmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx6D45slgLGq8\n2G/NPFnuFscv7UM1eRoQyx3h0DdSTfoRvHkkNv4Gf6OudZDOXqwV86v/SjcNEP87\nnjMOEqQ7dKQPtiYzEkK0MOrjbRySFC5dvCTI9T8tnBgFpYA9YXwbpUqXxEi0Ayoq\nhA7UQhS7Q+YGrVwZaJ6LiWrQw+x8ACPLqEvPmMZhrxagKwrsKbylMsAQ1ljk8X74\nJ76TSxi/AZpxos7tHD0XbO8elXFZexfsgPLDRpMs6jREVeQj1jVCWLtg9twiXzcI\naUCchBsTSc92WGkKwBnH70dlL2N8kT/BNe3tAsXuBpZRILANY59jLrLnHEJNfado\nt6ZpougolQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E\nFgQUx33qXRmrVNT6P+ZKc956sjwdbC4wDgYDVR0PAQH/BAQDAgGGMD0GA1UdIAQ2\nMDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9TR0NBLmNybDBsBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9v\nY3NwLnRydXN0d2F2ZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9pc3N1ZXJzL1NHQ0EuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr\nBgEFBQcDATAfBgNVHSMEGDAWgBSvRATCQX5Ig9tOOQLs7IR65s7JpDANBgkqhkiG\n9w0BAQsFAAOCAQEAkn/4wKQRLo41fDRkZtfF+3o8JtUmfQXf2zoo9Ll29hhCiz8k\nBOpIek9MrFd/cdNgUw1nckIi+J3udyFrbO5p64JBvtc0K4kAOPFSKpHssFcnRLPx\nFXgGxXq6ohD4Py+xaEApslYFfMy89N6DKs/v/10/+/xD831RFEUMUoQxBimsmmNf\n+cLoMwF5bpoSz9JcWqCmSlK0Nla1dPphaoA/MObLN2iQPpeM3yF5dTUm1tPxe39W\nOlr6nLU1xO+yRDrlGLXrVDP1l1/qGVuwi+xufIAcdFycLLBjSSNX7LOIK3tbva7A\nWctLUs+qhIlUrbPyFERm7YOY4SttWdozeYFNfg==\n-----END CERTIFICATE-----\n\nSecureTrust Domain Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E80B1BAF9870A7C4B6CBE401A32D68\n-----BEGIN CERTIFICATE-----\nMIIEfzCCA2egAwIBAgITBvHsAOgLG6+YcKfEtsvkAaMtaDANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowfDEyMDAGA1UEAxMpU2VjdXJlVHJ1c3QgRG9tYWluIFZhbGlk\nYXRpb24gQ0EsIExldmVsIDExFDASBgNVBAoTC1NlY3VyZVRydXN0MRAwDgYDVQQH\nEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjRHBw8iIivBBrfE6HqexQK0oMt2Y/\nx8jO3fN96KEazZwEoGidwloRBk2Q7VfVvZ0ZDk+qwJZGLZJLS1ntGaZLH4/Iel+r\nPnp36IVF7J5MNDB+K81a/y9svEMfDu0p3FdlBUyhHvizZ/zFNP3tolmQfZ7T0mGL\n7lutlNAzFYoVTUlVeF5cSC8Yca906TEKyizYXuXcY8Diee+t+fQRHmSI5Hk5kyXD\nYFWcf2tXEfdkuFlDjJ7HPdFyfJzrNjD+cbqt8R5rZKnK1GNVP1dXm0cIYS+BMlMa\nCC1yF18oygbnOZLw5fDv9bxs4MOgF8E/Iypw0hLQHVkuD8wAvxVgPsqvAgMBAAGj\nggEsMIIBKDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNV\nHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUYt6tehfefLfDfCMXo7Em5UbXOvQw\nHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wQQYDVR0gBDowODA2BgRV\nHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMuc2VjdXJldHJ1c3QuY29t\nL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9T\nVENBLmNybDA2BggrBgEFBQcBAQQqMCgwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3Nw\nLnRydXN0d2F2ZS5jb20vMA0GCSqGSIb3DQEBCwUAA4IBAQAHXPYhl+++o//di2Qm\naWGmC1ijxbGbKA4jOSDRvQfxlWOVkqPF11Dpxz+V8Rxw7QFFVoJ5mHpfoXtQOijV\ntsCFknxTKgzQeArNkZrkXBNpYOJAcuc5v0eX0OllBWgVdIvZRl2TM5L/u1WFrlPr\nqwWdEYTkinQwgAHXVV/7WZi6c4StcqNnlw93mlvN6Vspzaf/mWtcYp+aqT9vrqHt\nyNR1k8Ri5eIRPIU0B8woiXTj3bifLg6/O217SY5cWwQKCMFsa6nGWoRVCJ0JJXa0\nZ+m3mPQD2OcW5YMrynhL2VWohyfZAjB8l/NZaeRT7M+vki56fxbx3Bk2lqy8Z1Zz\nWd5m\n-----END CERTIFICATE-----\n\nSecureTrust Extended Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E31E46D341B2B2633CE480D915F81D\n-----BEGIN CERTIFICATE-----\nMIIEizCCA3OgAwIBAgITBvHsAOMeRtNBsrJjPOSA2RX4HTANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowfjE0MDIGA1UEAxMrU2VjdXJlVHJ1c3QgRXh0ZW5kZWQgVmFs\naWRhdGlvbiBDQSwgTGV2ZWwgMTEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxEDAOBgNV\nBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJVUzCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS6vRtFpCJBJ7zJODH07Y3k54Qn\nVIBhnQmmWoqFqzCVMX97GAyAfzjcQrhl/TNiJiRCrVQWPI4n0R8eUd91Ab1Qzfsr\nnp+0NRbagVDa6+nF0KcNxbSZ6/iZQ7Ac3HyhCvJS2rH2CVYlzqdsrxDXcZk69jOO\ndPV8+w+7eNIn34BKpB/ZF7iXApDoAKG81kg1VtpGOxJhxTsKLuJmURT4pQjtZqF+\nF6rN64j5T2DOK0gOA4G7BLoTdOQuXkPS38LXKgZ43lKqEenjmiOaMF/XuLYzaHrW\nGYgCM2wJsykgdB9hCsTTEwsHRZzt2q9mLBDvYYWVhql1/kR4K/RN4JdESEECAwEA\nAaOCATYwggEyMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0G\nA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAdBgNVHQ4EFgQUA6uAxlUKKpWh\n4Nf+GubAynjMsJYwHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wQQYD\nVR0gBDowODA2BgRVHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMuc2Vj\ndXJldHJ1c3QuY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1\nc3R3YXZlLmNvbS9TVENBLmNybDA2BggrBgEFBQcBAQQqMCgwJgYIKwYBBQUHMAGG\nGmh0dHA6Ly9vY3NwLnRydXN0d2F2ZS5jb20vMA0GCSqGSIb3DQEBCwUAA4IBAQB1\nfzAmGGmtbJyIvOfjq2McCpUoYkXAq6JTN51+nb9NDAihhDoTKMde+801bC1/l54h\nxPPm4HImM6GK6LFckDew/FGwbdRbEznUOJ7uVL5ploNBIjte23kTBUZa9fx3+aXK\nhUTAipSyPtNjnOwVVBVXzrMynfMhdsyRRe7gLXNFYCXIxtks3IkIpuYnc86NAuV9\nnBLFlZzgmbAsW+tMc5QsNvQJ9pQ539K8cqZaM+HFCScreDERxmNtHHbMw+hCa2yL\nOj4ntekgWLO8KQbE0lPUNLIM17QK8aktJavj+GezBztKMmJJwhVYQy9nxS388ApX\nxcZsEgIzOCeH0SOWg4FA\n-----END CERTIFICATE-----\n\nSecureTrust Organization Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E58E9ADD372C871D25843FDAB852D9\n-----BEGIN CERTIFICATE-----\nMIIEkDCCA3igAwIBAgITBvHsAOWOmt03LIcdJYQ/2rhS2TANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowgYIxODA2BgNVBAMTL1NlY3VyZVRydXN0IE9yZ2FuaXphdGlv\nbiBWYWxpZGF0aW9uIENBLCBMZXZlbCAxMRQwEgYDVQQKEwtTZWN1cmVUcnVzdDEQ\nMA4GA1UEBxMHQ2hpY2FnbzERMA8GA1UECBMISWxsaW5vaXMxCzAJBgNVBAYTAlVT\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4QVBCdYToXFIfzd1SQfi\nTEgg1bwHXM2cE2VsyxwWK8NEFH8zMYdKy2hYOAjbfpm0xE6q4TQzS8KL2vAtCNyY\nVrwX7d3IvKR25H5s1LUDeQXSl1JBBZCtgJf2caJcwaYa6n2pZ0EKt3wBB+QteSFn\n57ENB37T13y7Nn8gCt9ZZaPYqRWxHcPaIWO3CVzQZ3tXjCLqzJMCV2KqhK85DZk3\nwo33Zb6cyYDkerDbWyric+10dJ/wdgE49dkfyZxVxEGpHg1SCSJdHjGb4z85Zx/u\neBpxBS6g3dfrkDjjT3MUxyNS4EaRTZp7o/2EqVCYDWJDM1HcOZL64kyWyi0d9jqA\n7wIDAQABo4IBNjCCATIwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMC\nAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBR/QuNI\nbljpLrlhyGp3tPcDuM1qWjAfBgNVHSMEGDAWgBRCMrYW+gT9/l1LesP990xAHVpD\nrzBBBgNVHSAEOjA4MDYGBFUdIAAwLjAsBggrBgEFBQcCARYgaHR0cHM6Ly9jZXJ0\ncy5zZWN1cmV0cnVzdC5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2Ny\nbC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMDYGCCsGAQUFBwEBBCowKDAmBggrBgEF\nBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbS8wDQYJKoZIhvcNAQELBQAD\nggEBAIwGM/ejz4Hbjf7Vc11gS8jzf+BwtZq9N4t1Nibj4rIDsW2G2jDE0S7fCN2m\nMhq76xkfnwfXhBbXDEKz6rj/M0G2u1kHw4Y8ZtKSzYEyRtgpeBFm4qU6voCSREpD\nFJXsL+Go2/YLRSE6xkWVSocklxppx4hi5o/RVdMMQept6ooOSFzBpH5XZYUoblKi\n99Yj0FUe8egIa9qSts42TObTpH1YVRMDnH3k2MNX3rcgPf9v/QO9Cf8W6RQ2+X3R\nCaYMPdL5OIKh4RGYjxXe3LpgiTKBWik/ZWTFL5sZSjetrJFl50NONzTc8E+BJtrx\nVCHAI2OcWyloxrYd4zMipw0YjDw=\n-----END CERTIFICATE-----\n\nTrustwave Domain Validation SHA256 CA, Level 1\nSecureTrust Corporation\n00DDEDF6F64298490E694C36EFA422C88F\n-----BEGIN CERTIFICATE-----\nMIIE7jCCA9agAwIBAgIRAN3t9vZCmEkOaUw276QiyI8wDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNDEwMDExOTIyMzJaFw0yNDA5\nMjgxOTIyMzJaMIGvMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE3MDUGA1UEAxMuVHJ1c3R3YXZlIERvbWFpbiBWYWxpZGF0aW9uIFNIQTI1NiBD\nQSwgTGV2ZWwgMTEfMB0GCSqGSIb3DQEJARYQY2FAdHJ1c3R3YXZlLmNvbTCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNr4Z91k7AKM+Pz5XXWTIuVeMts\nPU2W/pI4WdEHG9Zab1EOWPLbthB6fzUJLLLBBk1wy2OM9yG1HywB/CwfGHcoKS8Z\n/efGV+ZKTzEpIestriUWx7wUnzxKzGML48Xv7sNuY1Crru5Hgce1Ax5uOfP7OB6t\norbMunvKQC10WcSrqFg6LapZ0UhgGmQzdjYguOBF6WZJR3QLghQaNrSUZuA6neXR\ncUsBgmzrxiEVHyzt+lmnYFMFvKVwGOyIZ2RU2LAFthS6UDDrSLGsJysxc1MK1Sti\n/VP8e8wj9rJdmiWNfA+lz6hDAPzRbv+WVJNoHEGbIx8rai+rVMiLy2HIbPsCAwEA\nAaOCAWkwggFlMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPQc4jqvtqTk\n2emd/u8cd6VjPe+IMA4GA1UdDwEB/wQEAwIBhjBIBgNVHSAEQTA/MD0GDysGAQQB\nge0YAwMDAwQFAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9TVENBLmNybDBsBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9v\nY3NwLnRydXN0d2F2ZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9pc3N1ZXJzL1NUQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8G\nA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0GCSqGSIb3DQEBCwUAA4IB\nAQAjoDrTysopn7t+onDZ6rZSQW8rYlWZQpSiNHrq9xAAcMExrhcN0bQC9OQ+VRci\noMDascvwum7hVkyh2w2Ad7lC3Ir9gIuA8HycjqQJ4t1eSF3geYyf8lp259ztZ/TO\nxSAwJ9W0Szc8fslOA0SWlyA3lnRVcYVu54Idc1dPXXBxwlQ1NUCYgcsXZs+6QjLL\nYhYL85DhuitQSddoYemGpfVJnaYH9tBiWmwtzwc4qsVqTsKEJ/1zYAy2GrEAv8sB\nFKSfMNMopBmmDA8/aCIW/tH6KTD2DC15QQwL6yAUbSa5mhzFSA9O8zmF881YwBVG\nn+z3isMPClgpNw/eWSbaSLZ+\n-----END CERTIFICATE-----\n\nTrustwave Domain Validation SHA256 CA, Level 1\nSecureTrust Corporation\n390A3F7EECA8FB4347DCAF701861662B\n-----BEGIN CERTIFICATE-----\nMIIE/zCCA+egAwIBAgIQOQo/fuyo+0NH3K9wGGFmKzANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE2MDkwMTE0MzUzMloXDTI0MDky\nOTE0MzUzMlowga8xCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMTcwNQYDVQQDEy5UcnVzdHdhdmUgRG9tYWluIFZhbGlkYXRpb24gU0hBMjU2IENB\nLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs2vhn3WTsAoz4/PlddZMi5V4y2w9\nTZb+kjhZ0Qcb1lpvUQ5Y8tu2EHp/NQksssEGTXDLY4z3IbUfLAH8LB8YdygpLxn9\n58ZX5kpPMSkh6y2uJRbHvBSfPErMYwvjxe/uw25jUKuu7keBx7UDHm458/s4Hq2i\ntsy6e8pALXRZxKuoWDotqlnRSGAaZDN2NiC44EXpZklHdAuCFBo2tJRm4Dqd5dFx\nSwGCbOvGIRUfLO36WadgUwW8pXAY7IhnZFTYsAW2FLpQMOtIsawnKzFzUwrVK2L9\nU/x7zCP2sl2aJY18D6XPqEMA/NFu/5ZUk2gcQZsjHytqL6tUyIvLYchs+wIDAQAB\no4IBezCCAXcwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU9BziOq+2pOTZ\n6Z3+7xx3pWM974gwDgYDVR0PAQH/BAQDAgGGMDIGA1UdHwQrMCkwJ6AloCOGIWh0\ndHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9TVENBLmNybDA9BgNVHSAENjA0MDIGBFUd\nIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9zc2wudHJ1c3R3YXZlLmNvbS9DQTBs\nBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnRydXN0d2F2\nZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9pc3N1\nZXJzL1NUQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFEIy\nthb6BP3+XUt6w/33TEAdWkOvMBsGA1UdEQQUMBKBEGNhQHRydXN0d2F2ZS5jb20w\nDQYJKoZIhvcNAQELBQADggEBAFcdG0/3P/CkeGb76tz/mn1viDZiftD05i9Jw70k\nH9ulRwdCHgzhSZVN5zHvG919oHA9WHbxH04J+iAnVl1+FjoDNN+A+2icy2WXqH9w\ngaNUGyUwLdo0JCfgUeGbrCF6WUYCj47pS7zAY02CdGlstZZsqouXK3RnOMKOD3Dq\nf5kiSh56KvhW/F0OZY7PAbdV79LVAiSTiAFdoe/jMjmj8fqXOiCIjllqH/O9/DAm\nRwQStFpauwR+nBbFhq4sYwlZQvJ0NvIxN5JOTECTkMM+X21kf8mrwRdxBfw0YEPa\nUTeZhFr48Fwvnt4jpo7gqpJzt7jjsbWPd1FHtey2Q8zmSHY=\n-----END CERTIFICATE-----\n\nTrustwave Extended Validation SHA256 CA, Level 1\nSecureTrust Corporation\n00C1BD27B383958D0D8BCA5E4F08D009D9\n-----BEGIN CERTIFICATE-----\nMIIFGDCCBACgAwIBAgIRAMG9J7ODlY0Ni8peTwjQCdkwDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNDEwMTMxODE3MzlaFw0yNDEw\nMTAxODE3MzlaMIGxMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE5MDcGA1UEAxMwVHJ1c3R3YXZlIEV4dGVuZGVkIFZhbGlkYXRpb24gU0hBMjU2\nIENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAre9mHLqiv689FWIk7PaeQLuW\nos8ldRX4rNLHeD7/X7JrTfaXuIQaLfrUODtyRaZs0LtJsEHgpr7dUonDIH69PjBP\nrHg+hBLu7ob4udEx3J03NQSdnR/fqPY0ZMH2NP7e9TFSKKctZ/SmzA8jGclVmdiT\nGg1bTx6xgWuPWq9OprIQSgkP5NRe1GeTQ7U/E1zxLqaw6PeQWjESHPGeilyw0jr6\nqVyHM5ack9ps60sN3CKNGushyaQe3w2bYxRJ9RRH/sILCAmmTbjc/cXrGQMGdaYt\naiGnXbc45r39cqfbynZ71hPPNEtFbOdqk3C7I8vrhIHiKaAtFkTMRSWmHHk4HwID\nAQABo4IBkTCCAY0wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU5eQkWRUy\nJ8kgs0ICbLDvMt6bIFowDgYDVR0PAQH/BAQDAgGGMGYGA1UdIARfMF0wDAYKKwYB\nBAGB7RgDADAOBgxghkgBhv1kAQECBAEwPQYPKwYBBAGB7RgDAwMDBAMDMCowKAYI\nKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwMgYDVR0fBCsw\nKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMGwGCCsG\nAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudHJ1c3R3YXZlLmNv\nbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMv\nU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB8GA1UdIwQY\nMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0GCSqGSIb3DQEBCwUAA4IBAQCly1p1\nrvcOlRS+ODBLb2kYHd4q+cXDl65X+IQ7hOlXg9dpa7CzSAGNNpzhyYMbE48mB/RE\nBXxbZkMzEhWPFj+4jdGNsmX0zjEWatJWsnNVxpA7hDR0iZssezu86oDQ/sbVoaXj\n0a5jB2cZsnMS5287CNDk5i+ImruhbMAYV9sadliXoDy3y01Sv+FLMx39C5UhYhWU\ngvoT9igbSCoc/DPOukEDqsnKMmDqTf3JzuFI1CbJcR6M8R1hAda4mZrxIdGcbT8R\nXp8JQ8Vuv/+plPMcAiZ2Bzed0hPVr5A1Mz8K8w9OyORGlRwjWS65jsr26bjMCcfj\npvuAANrc0Alu4nJC\n-----END CERTIFICATE-----\n\nTrustwave Extended Validation SHA256 CA, Level 1\nSecureTrust Corporation\n35962F305C5A0BEC400D4E9877528C65\n-----BEGIN CERTIFICATE-----\nMIIFCzCCA/OgAwIBAgIQNZYvMFxaC+xADU6Yd1KMZTANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE2MDkwMTE0MzUzNFoXDTI0MDky\nOTE0MzUzNFowgbExCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMTkwNwYDVQQDEzBUcnVzdHdhdmUgRXh0ZW5kZWQgVmFsaWRhdGlvbiBTSEEyNTYg\nQ0EsIExldmVsIDExHzAdBgkqhkiG9w0BCQEWEGNhQHRydXN0d2F2ZS5jb20wggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCt72YcuqK/rz0VYiTs9p5Au5ai\nzyV1Ffis0sd4Pv9fsmtN9pe4hBot+tQ4O3JFpmzQu0mwQeCmvt1SicMgfr0+ME+s\neD6EEu7uhvi50THcnTc1BJ2dH9+o9jRkwfY0/t71MVIopy1n9KbMDyMZyVWZ2JMa\nDVtPHrGBa49ar06mshBKCQ/k1F7UZ5NDtT8TXPEuprDo95BaMRIc8Z6KXLDSOvqp\nXIczlpyT2mzrSw3cIo0a6yHJpB7fDZtjFEn1FEf+wgsICaZNuNz9xesZAwZ1pi1q\nIaddtzjmvf1yp9vKdnvWE880S0Vs52qTcLsjy+uEgeIpoC0WRMxFJaYceTgfAgMB\nAAGjggGFMIIBgTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTl5CRZFTIn\nySCzQgJssO8y3psgWjAOBgNVHQ8BAf8EBAMCAYYwMgYDVR0fBCswKTAnoCWgI4Yh\naHR0cDovL2NybC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMD0GA1UdIAQ2MDQwMgYE\nVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NB\nMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudHJ1c3R3\nYXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lz\nc3VlcnMvU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB8G\nA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMBsGA1UdEQQUMBKBEGNhQHRy\ndXN0d2F2ZS5jb20wDQYJKoZIhvcNAQELBQADggEBAGUMIDkrvlMJ0wHLuP3lkneC\nwGU6mZ3g17jyU2RJwhRinYctraryG7Jh20DQ9/ppTHoxTIADw2JDsC5ByplabteQ\nnLghrl17K1b6PO+rzWA/NFKVwo6u8Gh7Lz0iUuit7ZBD4eKcRedxRZcPQlnD9KTR\nIs94SRpootsuCv/Y5b+1FMPV1KrYtbco9yEVlaNEWLpmiEsqvLjxiWEmt71rzz+0\nS59OtA/ihnbGP9Xrnhe7wf1ybCNOO5gZQMKr/OszfLZ7oVKACGOPLlcSZRRW98gA\nszE+1ZvlHkdjamfTSs4yMvUorYn9NhXnjAWl28NuD9m3FPiE2O50ezEDnHTiaOQ=\n-----END CERTIFICATE-----\n\nTrustwave Organization Validation SHA256 CA, Level 1\nSecureTrust Corporation\n4B2C6646F434775B67DF34A04DD504E6\n-----BEGIN CERTIFICATE-----\nMIIE/TCCA+WgAwIBAgIQSyxmRvQ0d1tn3zSgTdUE5jANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE0MTAwMTE5MjIzNloXDTI0MDky\nODE5MjIzNlowgbUxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMT0wOwYDVQQDEzRUcnVzdHdhdmUgT3JnYW5pemF0aW9uIFZhbGlkYXRpb24gU0hB\nMjU2IENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29t\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49OohlJHBJ/juiQTmibO\nS28pHvCCp1bPOc6elQ62DCYE/A14JXUtI8yaUc9nFjh6dNzR7KjFPEq/qDplQl7f\n1Tvh5ifBNNP2wQ6e820TWlPO4HhR/5g4+3iFmJ1N7kFrxDp1/P8e3+9lcJsXckXC\ntfFkQ9slogJqnaCsipgdrH4gQhicFAL5YqHw2AKfctZLSPpxhI3xISMV/lIQwZPW\nI2221v9ALckokh5pW6dTK8x8yNUUye1zt5msWzqunfBjVYVUj5/LXu46hS99Mfxu\n80ARJRyHsXIuHbMzwVXGqKVPZfKAdHBl5e3ElCjNwNy+Hgi09vS7PoAUhjCf/wbO\nnQIDAQABo4IBczCCAW8wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUys4d\nGAN3HhzzfFiymnCoCIAW9K4wDgYDVR0PAQH/BAQDAgGGMEgGA1UdIARBMD8wPQYP\nKwYBBAGB7RgDAwMDBAQDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0\nd2F2ZS5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdh\ndmUuY29tL1NUQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0\ncDovL29jc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50\ncnVzdHdhdmUuY29tL2lzc3VlcnMvU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUH\nAwIGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0G\nCSqGSIb3DQEBCwUAA4IBAQBN/Qb6x5VSQHIt/FqvXAkjfCI7jwXGzRoxThavUqv0\npJr1azXKv2L2ye9Sl4OCqiDHZ8ZJZ/Z19Ae1yvGTpG++0O5dWTHZ8qy/JSj17Mg1\nvWiefVpJKtkYflzhC9B9/eB3QuKVTRKDqm1ZC9kbm3MWOwtnEOw4WURWS1X2v4Hv\n2AJaXe11ZRqjx7/c6U50tYp3eVpRDCw7bOIXRffLG0oibhjHiEu8dgq7KkTSrx9m\nQFS6T2x9GLiJKhj2mEfPuGr73TfBPyKsRBymOpG67LThKVnwoUfH3pghA6VkZp5Z\n1Vm6AcDm+eelf5XPvZtNve4evLVPYueA3TmGyxXh1m2d\n-----END CERTIFICATE-----\n\nTrustwave Organization Validation SHA256 CA, Level 1\nSecureTrust Corporation\n0092B8744F71CED0E26C72A3D8D5D925B2\n-----BEGIN CERTIFICATE-----\nMIIFEDCCA/igAwIBAgIRAJK4dE9xztDibHKj2NXZJbIwDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNjA5MDExNDM1MzVaFw0yNDA5\nMjkxNDM1MzVaMIG1MQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE9MDsGA1UEAxM0VHJ1c3R3YXZlIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIFNI\nQTI1NiBDQSwgTGV2ZWwgMTEfMB0GCSqGSIb3DQEJARYQY2FAdHJ1c3R3YXZlLmNv\nbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPTqIZSRwSf47okE5om\nzktvKR7wgqdWzznOnpUOtgwmBPwNeCV1LSPMmlHPZxY4enTc0eyoxTxKv6g6ZUJe\n39U74eYnwTTT9sEOnvNtE1pTzuB4Uf+YOPt4hZidTe5Ba8Q6dfz/Ht/vZXCbF3JF\nwrXxZEPbJaICap2grIqYHax+IEIYnBQC+WKh8NgCn3LWS0j6cYSN8SEjFf5SEMGT\n1iNtttb/QC3JKJIeaVunUyvMfMjVFMntc7eZrFs6rp3wY1WFVI+fy17uOoUvfTH8\nbvNAESUch7FyLh2zM8FVxqilT2XygHRwZeXtxJQozcDcvh4ItPb0uz6AFIYwn/8G\nzp0CAwEAAaOCAYUwggGBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMrO\nHRgDdx4c83xYsppwqAiAFvSuMA4GA1UdDwEB/wQEAwIBhjAyBgNVHR8EKzApMCeg\nJaAjhiFodHRwOi8vY3JsLnRydXN0d2F2ZS5jb20vU1RDQS5jcmwwPQYDVR0gBDYw\nNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5j\nb20vQ0EwbAYIKwYBBQUHAQEEYDBeMCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC50\ncnVzdHdhdmUuY29tMDUGCCsGAQUFBzAChilodHRwOi8vc3NsLnRydXN0d2F2ZS5j\nb20vaXNzdWVycy9TVENBLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH\nAwEwHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wGwYDVR0RBBQwEoEQ\nY2FAdHJ1c3R3YXZlLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAC0OvN7/UJBcRDXch\nA4b2qJo7mBD05+XR96N7vucMaanz26CnUxs1o8DcBckpqyEXCxdOanIr+/UJNbBL\nXLJCzNLJEJcgV9TjbVu33eQR23yMuXD+cZsqLMF+L5IIM47W8dlwKJvMy0xs7Jb1\nS3NOIhcoVu+XPzRsgKv8Yi2B6l278RfzegiCx4vYJv0pBjFzizEiFH9bWTYIOlIJ\nJSM57hoICgjCTS8BoEgndwWIyc/nEmlYaUwmCo9QynY+UmW1WPWmVITEJPMdMK6A\nZqvvaWmuHJ6/vURaz+Hoc5D3z0yJDDCkv52bXV04ZoF6cbcWry7JvNA+djvay/4B\nRR4SZQ==\n-----END CERTIFICATE-----\n\nSecureTrust TWG Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C25181828DAC4F5F7DE4AFC87AD132\n-----BEGIN CERTIFICATE-----\nMIIG2zCCBMOgAwIBAgITBy8w6cJRgYKNrE9ffeSvyHrRMjANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMjAxMDA4MDY0OTQwWhcNMzAxMDA4MDY0ODQwWjBWMQswCQYDVQQGEwJVUzEUMBIG\nA1UEChMLU2VjdXJlVHJ1c3QxMTAvBgNVBAMTKFNlY3VyZVRydXN0IFRXRyBTZWN1\ncmUgRW1haWwgQ0EsIExldmVsIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQCcD5Wc7H480gOv3ae6SELBls0oNOvpw1ZFjK55nLw+W6PhgqTGNEHlO/Ga\nWt13yS1iO1/WzRaUc2XsFRGcjv3QIfDZb+6UzhL1LL9ZE8zcs0B6fepn4smQg1yK\ngtAWGoD70Z9kEBtypkG23sO5xIiRACJWgRWVZ/891pQBBz+ElCxUnIyDGghHlWCD\nzn5dLoBIVic69Pfpi384uNoNfHV/WATUQEEnwY+5yMMUALAWrRD6Jeh5R4m9qKxG\nUlrO9ObDebK9mFEJvrCPtkTIWT1He4ZD58Lt0NIkaItQ7KsKF9wgwH7BTsRGwQXb\nP6/0LvfO8UDRKNE/4C39u9dwUw/Zpu2iNXTadVWBtaSDsrPFVb5rBu+pvn4l4Hw5\njtySyHAOWn4mhuxDXMuKBtaoTi/qF94d7N0CbqPdN9WSN79Cy2O0BexTGHSJVndX\nEbKyn96b5STPshKVpG9DmUekfnDtnHR9dmH74a05X/A8k/XeSJWXphM6NvyZap2A\nWiIkrS7MsfwnCdZlX+9WGY2qHxnm4Y6JdNah0qxozBbQHkqHsSN4k8O7zr2lfZhC\nuarm0Q1t6tjsmp7PUh26u6PCe0m+MctIrD6ZckUzZeuPduRb55K2p8MxjQSVNH1S\nJ2aaHp77qOYV+rvHXIL7le4OR5lDWyzYtXLc8u17/kLbUtgnmQIDAQABo4IBbTCC\nAWkwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAww\nCgYIKwYBBQUHAwQwHQYDVR0OBBYEFKpD9MNsQCriSoEcg6nez7XhG7bOMB8GA1Ud\nIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6HMEEGA1UdIAQ6MDgwNgYEVR0gADAu\nMCwGCCsGAQUFBwIBFiBodHRwczovL2NlcnRzLnNlY3VyZXRydXN0LmNvbS9DQTA1\nBgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vY3JsLnNlY3VyZXRydXN0LmNvbS9UV0dD\nQS5jcmwwdAYIKwYBBQUHAQEEaDBmMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC5z\nZWN1cmV0cnVzdC5jb20vMDoGCCsGAQUFBzAChi5odHRwOi8vY2VydHMuc2VjdXJl\ndHJ1c3QuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBb\ntCXryLFewOafyNENB3NzgAQVVztwaWSyvF5FYSqav95JKcoHZzy3wG7aKlTPtGnq\n1QzJst03qPmZJ3j63obz2AvfEEzLEMlsPmOTy3B9oIrNzd2QhpGW1oF6pIgGB/VP\n5zh7U2ibUC+zRLmihwt+j2+7NBbuLbPozgxDTWh2f9O4rJb5bv98Q8RdbGrypBb9\nhOhDvmNCCfjSe+Q8myqsvawEG5p7s8gsIK/V3xbyqDihXjsGc7xeEWNftlU91jBL\nKPRbrLmXhhWnHJjYs4y5IHu735HA3aAT4TqURS9dGHOMVDRumkFpLqR2W7ptpDki\nOtIFZjO5smU29OD4AlcNUXqQuKEFasyTtkRlORnWhU37c36HB8dc57xWQKOf8pMq\n7lK+ublO9G4mO1Aqr9mioTN4oMONFJG4W5dWwG9baNg682ZACkvPaw45MqSztL3A\nKb4s2cDTWu/D34hV3oafkTwu8B7B2mFZnWRJ9q4akPmZF45uw4RZx2ALaYGGGs67\n+r5qS300As9ONg8hxfVkFQSHOc00IiBkgi3OpoCofEKTgDwZwHVqOJyyPjk6H9Sh\nZANmUOT2mGDLwl86Ar5bTu8ipzlsyDYQMFjho7WaVs8I5OXyVdONXDYLIOtpITGT\n1fRcXFzxYHhrNuFwrdj2zBVyvVD4O6xV97/9nv2Eng==\n-----END CERTIFICATE-----\n\nTrustwave Global Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9AD30465CF22697F246B101EC92953B\n-----BEGIN CERTIFICATE-----\nMIIHCDCCBPCgAwIBAgITBs6C2a0wRlzyJpfyRrEB7JKVOzANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBjjE3MDUGA1UEAxMuVHJ1c3R3\nYXZlIEdsb2JhbCBEb21haW4gVmFsaWRhdGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UE\nChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAwDgYDVQQHEwdDaGljYWdvMREw\nDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQChh5brvvk/kFUZwhlUhqdsUmsMCBjzYqBBLnTyNrKPr4nd\nS9s2h2JvA+9TY7NnJc/Mq1eN5V6zqvbn/LN3c8W06f76xrVvFEKs5SzCefUS/V3Z\nC18dgwXXFrP+RgfK2kqfTHGIPrWoRSnUiLn3iUNEBtJ06oXjAqAMnAyL5AzD+eHm\nZzRK/yCw/gMPnVp2S7Dstka607fS4fW9Sl33mOMNwJRxEjQWHHR25PAb4muP6wjN\nvmoLMgiDMKseHSFVtC7SpmO89PsrUV6MahKJrZcAfquAyoO1zR2c2eGaCI/m8oSx\n3B7KiMZJ3NZims/siMp/5szemsutf36WJ31nmr7PqLJGJdVpoxbLckWIhZnNYSFm\n/pTutpNONqpyYC2gGSXdw5LuxU61913SbAPpk8DZiHi3WslHBo26ghXG++sgJUGj\nhtKZhiYlp8uD21WTP6/60wngpXyCtt9cpHxW1lXmqcxwe2J4/2S3xjHz1dC6BKxb\nr61HCPVrbTD90CZUpMI8JPdsVbz5eegv+SIyybHxZe4S0D9Kv5pgWfqdXf0BAiJC\nTbGwYmFr4uisKhkfMThyOgWEH+CRBzQqdZREQ5lTIlVyzi3jGPuu9Q6brAS9U9Ue\nQhUwX8TtY8Igfo8HlhjugDpy6WvDYQ9i+tG3AC6v8sJLdOOU83Lr+2C1LEF5ZwID\nAQABo4IBYTCCAV0wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYw\nEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFIaZQQzOP7aMcEnlkwfwhgcd\nLXqVMB8GA1UdIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6HMD0GA1UdIAQ2MDQw\nMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29t\nL0NBMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9U\nV0dDQS5jcmwwbgYIKwYBBQUHAQEEYjBgMCYGCCsGAQUFBzABhhpodHRwOi8vb2Nz\ncC50cnVzdHdhdmUuY29tLzA2BggrBgEFBQcwAoYqaHR0cDovL3NzbC50cnVzdHdh\ndmUuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAmn0jp\n+lNp188KxjKQZtpJ3mixLmuqGdH6SVpRs40BYQg/68xOPH3C6AJ17tqE6IwZMW9s\nlgiO4B7khR3ESA6Sct3zmkA8woR/KJVzzegjscHhtQUifQ+Eb9Gi0ORNnetGV+5g\n5vlrFZMptBRGUxXMo2xa+Z/NTyimpMopfXj7qCW/nQWQbzvkQGchK9IokyqV2wra\ntX68/P3zleG+LLwzoJd5AhHYSXWrIRJpClZHN+LQKkbI3MYW7+upo/1e9HEmFKxu\n5SFV3nuQm5wSOsz/ZtIL1AS8IoZYxcSe1Q/yuV9GjnxtL1jkPbzsBx4eBGxUrcIe\nsBat6SI8G58uHTpIPpqUxRYsg8w0FdjK3kNBB5QWDeXiDxzqIRzA0iE1kHeTXRZ3\n7qgGXUcce7ciW5KqeRApjQbD5BSZG2EKkQ7aaOhvxK0LiuxHZnjPW4/fdEcaCuku\nMT5qMDiF2U85V9BvanEy/xkYn4I2UeK4EdSXe7q6j+CIJz9WnoLQDbIS04GqIWe0\nVRQUlx3idUWYSJU/SG8KrEHhlJLmgSjshCwtT6qo4vHwT5WcWDLIbjMqgL1iQ6JS\n4gxXuOGia3d0I4/wec5x23EWwx9V8BtDJ8N7NDeRNmZ8RXOHSYJsVQYIQuFUEXE1\nv3WMSIxuyQMyR5FYSCG9xnKRFzNmiPngDil5IA==\n-----END CERTIFICATE-----\n\nTrustwave Global Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D99FB3B180C281020314A2D1C7640017\n-----BEGIN CERTIFICATE-----\nMIIHFDCCBPygAwIBAgITBs6C2Z+zsYDCgQIDFKLRx2QAFzANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBkDE5MDcGA1UEAxMwVHJ1c3R3\nYXZlIEdsb2JhbCBFeHRlbmRlZCBWYWxpZGF0aW9uIENBLCBMZXZlbCAxMSEwHwYD\nVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xEDAOBgNVBAcTB0NoaWNhZ28x\nETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEB\nBQADggIPADCCAgoCggIBAMRO7orfWjfmz6Y6qoAmDp2lqCJcdvbRQ8w18rl1JE3j\nf/1CScZLrnLg4RDm8JiRcvFuvoMXn/XNUWy5ICG57tjG2nO7jvBuXfvbdkGA+foN\n3yJKMTX/PmmGlN4qpzFtsB0kLrP14/0TRGeJB7qDfAFH0ReFk0ftQobLBGBOpEca\n+bv+LhcTe40/uNUSK2yQ9GpIw200mcsD3B9c29Im4tSZFuA2o1vnEeizYW5M4sPX\nHu7p5ZCxjJrXVNqWUPM38rShhMUNL5uaVYWoi7TG5JXbg0Lmt2nq1k5nnig9Yp/W\nlAFooWXjKQzHf/z+XZ57bqPe7SzLW5pzpZdSmY2VRybAwEmzMjCXgHiP2ru3TpAD\n+giakPDoz3ZmbKjwYKZ5PmnOmXx0Z2GloO37MjamjPor/+fZohfyma7VAQE8znJt\nI9MVoRN3G3gW/tuT3jXfzYdFBlfGoO7OYyLN1LK5YBKH2qXrCHD8rG2DauBt7U+w\nfOvwfkp8FcdTnfQ92Xe65U3Xdu0eCgQJbChxZtWhhLnbY6xhmwAWyJ1my+Im72Kx\nGP/XcA8SH2sz6/k0782BjRckDuFpVVpTNYl9wqe/tuOrZhWPapOsRlfsDTuhgGu5\n2inM9sU3CAzmFE85zoRQFZQSof3kFN2rUZF20bmTak99cBNLli6/ja3+KntpZ08d\nAgMBAAGjggFrMIIBZzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFHM4IMZH\nbabGL3tQ4EDe3sedR958MB8GA1UdIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6H\nMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50\ncnVzdHdhdmUuY29tL0NBMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudHJ1\nc3R3YXZlLmNvbS9UV0dDQS5jcmwwbgYIKwYBBQUHAQEEYjBgMCYGCCsGAQUFBzAB\nhhpodHRwOi8vb2NzcC50cnVzdHdhdmUuY29tLzA2BggrBgEFBQcwAoYqaHR0cDov\nL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEB\nCwUAA4ICAQBwnSHECaf+hfGrm3Cg+aRr57ytoOSzI1DjlTNcM7k4uSt6kJRPHJ4c\nldIujMaETV52RgE6ykaMGkuIwQOIsLI6SXwjU1f5gXFUbDTS3KTWc/jwQeyLmdOe\nhvc+wBSFv8d10Sx/Qiti8mqsTqr0+N94Cx01+SkiWxWWoSZOAPkz8DMQGlD4yndK\nceTMGtQ03cLnD/36Mv6tz/Ds9l/OExrJGGxHD0tmYwYwBZpPHm7BBY2ZzycVxLcg\n+uuggcX1pg5MhJ1rDyod+7X+ilvTgH7ftHCmxvR7viMLwSUuytZ05zb2teRQgU+8\niWnPEHO/ADm5VD1Zb5Rx0579/YEENBJtGUPPJzo+JEpiZIOIlwZ69ETWWNCLZr0V\nvoi+SDl65cr+dgR9JreJ2I4W9FzS45ruxYEC8LGKEmV46sAk1YLbnIBmhehAKy9t\nP8RVz3QXYJ6rLOAuXF7R2eVV0SqfivW9bVzvBZTUTFsbdSMBAAF1BJjdRqYR63DI\ncQASY7CRoUiak1NTgPkzeV8VcNJmUt8c2eKJIifqBAjquH6+6UXs9Ol0aMPn6v0y\nB+TSuxhX2sSrpna9QcOh/QyoR5Hvcd81rZSbMc7yasKoUMXviotV1SfEqs3RU5Ts\nwnU4NHPn5ITRiuh5VMuvB/VnjnPC953u5uqAGtZ8BkC7X9cu5E0rMQ==\n-----END CERTIFICATE-----\n\nTrustwave Global Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A69703AEFE5D37D18858C74026B004\n-----BEGIN CERTIFICATE-----\nMIIHGDCCBQCgAwIBAgITBs6C2aaXA67+XTfRiFjHQCawBDANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBlDE9MDsGA1UEAxM0VHJ1c3R3\nYXZlIEdsb2JhbCBPcmdhbml6YXRpb24gVmFsaWRhdGlvbiBDQSwgTGV2ZWwgMTEh\nMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAwDgYDVQQHEwdDaGlj\nYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggIiMA0GCSqGSIb3\nDQEBAQUAA4ICDwAwggIKAoICAQC8BzZtA3eWejFOGHc2DLgex6P471dLWIIHSlrF\nY4a2BCtzAd/VlpQ3gslWnTgthOmK2/hCc+WSaOLPVZzZf3lGnxbb0+Y87Kx+nS1m\nIfJ/4OR6o8XLMLoCTAI1jsWxggiB4NBMqsW2xXQ5VAvBb66KEQYbshNlRpTbtBFq\nEed4YIvCdjbnCUOy1zubgVHUVyCFHzN4XPjEQCtT5vZM576Lt10Je9COnqG0CtPU\nQNP2tjnSmOOYdWcVRZ0UqXUl2fMBfmSDHd8902foigjpP04AYYbq6AetqEgqdvQP\nxz5pVbZqzy8UrE/s/raJLFyTuIAYVt18M0whSgWzGgUWkq2xRqbfn7b1hd56dwRb\nR7pKc51FyTbeocnKlYLC+Dlzp7iKQ3Pb7WHRwLhaJB7u4CzwqhUxHc0xplMYsq92\nMbZ6WN5L5mI7hxY8gLMOR7vNX9CKz9XcYRS01iCDe5Y/9muW8bzGyNXLX1YaHAy4\n+6ncksb3Y3RUKj3f0+T4nbiRISmGazravJKSssBLP3kPa9h5aX+Vd00eL+Q7sXrh\nFO7xz+oWtOL5rfVszyc87JQvjw1sDHA710nViqzUE1bJZNe61EXdCb/RV+Wsu+rO\ncAMSr5x2j/wW875sh+U3EJmTzdEBUBxHnBD2mDTyonT7wL47TRXTEO1IaS4mVbnv\no0jWvQIDAQABo4IBazCCAWcwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E\nBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBS3\n/VNzOCaKcKuTyoupCOrH07fj/TAfBgNVHSMEGDAWgBSZ4BlnDWLbdrPaPbhb6P1C\n0jEOhzA9BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9z\nc2wudHJ1c3R3YXZlLmNvbS9DQTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js\nLnRydXN0d2F2ZS5jb20vVFdHQ0EuY3JsMG4GCCsGAQUFBwEBBGIwYDAmBggrBgEF\nBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbS8wNgYIKwYBBQUHMAKGKmh0\ndHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9pc3N1ZXJzL1RXR0NBLmNydDANBgkqhkiG\n9w0BAQsFAAOCAgEAFXwfmELpEGKUguzVTMix79XbUnkfLa7IXcqBOrwOWEF1V8F1\nxGY6jLlUTtoEXRYZwCpqOK/i4m4nmWCYE45O7URR8nqeFffceTi62t4Yvh6LkC9g\nUnj3aChLiO/Zdxilq6vfsXO0mKafrGtZXwjyskS250Pj9DsANs57QqvYN4hqbplJ\nzc95p09OUvEhPiyRyx6FyY28U+3X6+mSNMJWd4Nhr+3HtvmItLIXP2JCLxuYtu/K\n6nKcpFCFFKeF8K3PWpjsAb0hfXL4vc3WfyCYsQnvJeisyAh7yEuge2iDwl1/xXIo\nEOAyyYAxvy5UnzcAa0Z2lwjptve+jZ4gQ+A1ioYUavR3pSfBNzuJW30nZCWFadKc\nNXOPoAPkK8JLxgRBH3JboeBCXG6xgy/pXrTjyhW7/SS+Z+7eKkp9jgdTVQ12yUtc\nCiYWUuM4l240D/z+s03WOEcLTluESwFkJhzs3D9i5crTL72uSkDDmlh8HXoPAyYO\nl3Mn9cGWhd8M8IeQRXmb6O7gvvQZDoSXDVDbjBKcW1lFpi0wBxIBzLaOi4CX4OhI\nJHJ/H3duOMaltuzXLSLkc26jwHzMeq8seQRSXraXJi1t5oBKlmEWFEgq6xlH7mLW\n3TOqS19cuiSWl/CsnlLGaW8MH5YHmk+MJxQE1BcLBs6ciapvHlhLEd9EUpU=\n-----END CERTIFICATE-----\n\nSecureTrust TWG ECDSA P-256 Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C4627001DECFEBF6BF5D3B1066D7E3\n-----BEGIN CERTIFICATE-----\nMIIDbTCCAxKgAwIBAgITBy8w6cRicAHez+v2v107EGbX4zAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMjAxMDA4MDY0OTQxWhcNMzAxMDA4MDY0ODQxWjBiMQswCQYDVQQGEwJV\nUzEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxPTA7BgNVBAMTNFNlY3VyZVRydXN0IFRX\nRyBFQ0RTQSBQLTI1NiBTZWN1cmUgRW1haWwgQ0EsIExldmVsIDIwWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAAT4KazLm94aiykBGkNQVkBrjmK77RlP627D2n3EwK3s\n49ljRkN6wiTWXHx3jPD5BBE/7mWhGWnphzGu1Deb6yzco4IBdTCCAXEwEgYDVR0T\nAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH\nAwQwHQYDVR0OBBYEFHMQ2nwjQr8tFHfBImxM7ct8lbBYMB8GA1UdIwQYMBaAFKNB\nBqyQbdFK63WlShCZs7Ghi0r3MEEGA1UdIAQ6MDgwNgYEVR0gADAuMCwGCCsGAQUF\nBwIBFiBodHRwczovL2NlcnRzLnNlY3VyZXRydXN0LmNvbS9DQTA5BgNVHR8EMjAw\nMC6gLKAqhihodHRwOi8vY3JsLnNlY3VyZXRydXN0LmNvbS9UV0dQMjU2Q0EuY3Js\nMHgGCCsGAQUFBwEBBGwwajAoBggrBgEFBQcwAYYcaHR0cDovL29jc3Auc2VjdXJl\ndHJ1c3QuY29tLzA+BggrBgEFBQcwAoYyaHR0cDovL2NlcnRzLnNlY3VyZXRydXN0\nLmNvbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwIDSQAwRgIhAN8G\nPwKUpMgV3LZjq7fuKS96f15BrwBjmTlKhOwgX83BAiEA9WpWhzRRoKeJGAqqXrMk\nZ8RE9xRtOFBqYdv9H5CeTVk=\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9AF531423847B85FB677932AAF80508\n-----BEGIN CERTIFICATE-----\nMIIDmDCCAz+gAwIBAgITBs6C2a9TFCOEe4X7Z3kyqvgFCDAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBmjFDMEEGA1UEAxM6\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBEb21haW4gVmFsaWRhdGlvbiBD\nQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAw\nDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMw\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATWpfTIQFPkZIoXXMDN9utRU+AbLGcg\nBmLA06x2qqdcpCMlYFoJhuRWzYCiqz1mKrAvNlQYkgoHfemk92sf8iaro4IBaTCC\nAWUwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAww\nCgYIKwYBBQUHAwEwHQYDVR0OBBYEFA/DUGGZflb1xtmcOeiDWJAHuhq0MB8GA1Ud\nIwQYMBaAFKNBBqyQbdFK63WlShCZs7Ghi0r3MD0GA1UdIAQ2MDQwMgYEVR0gADAq\nMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NBMDcGA1Ud\nHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9UV0dQMjU2Q0Eu\nY3JsMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudHJ1\nc3R3YXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNv\nbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwIDRwAwRAIgICvA5ttD\n0oeUcd37iYvoQ7iMIpZINp4e1j5NrlI3UnYCIEZhimm9+1dUWAfx9ZkGmIu0HiHR\nzEZifAHbPM3SJbRu\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A20A3797CD878EB3DAA41D08680AF7\n-----BEGIN CERTIFICATE-----\nMIIDpjCCA0ugAwIBAgITBs6C2aIKN5fNh46z2qQdCGgK9zAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBnDFFMEMGA1UEAxM8\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBFeHRlbmRlZCBWYWxpZGF0aW9u\nIENBLCBMZXZlbCAxMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4x\nEDAOBgNVBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJV\nUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKXHfFxFDVI6uYWZlWciFFKtYzuJ\n+IBhot3PQGikE3sjU8d9dARkZCkInqmDyP/+XiLzgrYPMy7NS8lZcRsE5p2jggFz\nMIIBbzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUE\nFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFAwlVqqzYgakv+7gGxtX\nzC8s9g1QMB8GA1UdIwQYMBaAFKNBBqyQbdFK63WlShCZs7Ghi0r3MD0GA1UdIAQ2\nMDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9UV0dQMjU2Q0EuY3JsMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0\ncDovL29jc3AudHJ1c3R3YXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wu\ndHJ1c3R3YXZlLmNvbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwID\nSQAwRgIhALahroq1NScrFeCvG5uMgMKH/bo190D+Mkh2ZIojrUOfAiEAosFXFE73\n0WLRPjX2uOkLhXuA4cQEb1R1oeGDH4MNVOo=\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A8B57C104843994DACD79E28633E5F\n-----BEGIN CERTIFICATE-----\nMIIDqDCCA0+gAwIBAgITBs6C2ai1fBBIQ5lNrNeeKGM+XzAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBoDFJMEcGA1UEAxNA\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBPcmdhbml6YXRpb24gVmFsaWRh\ndGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMRAwDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UE\nBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQmHWo0mogvX1J61xysTqsn\n6qV06wxUH68/QJ2aDIka6beTrDoTZv3mIkyPxFTPy+9idjgSAERlBsDirgO2/NiY\no4IBczCCAW8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwHQYD\nVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBSv+Ju8XTSl3tA+\nFCldDY4lrbClhTAfBgNVHSMEGDAWgBSjQQaskG3RSut1pUoQmbOxoYtK9zA9BgNV\nHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9DQTA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY3JsLnRydXN0d2F2\nZS5jb20vVFdHUDI1NkNBLmNybDByBggrBgEFBQcBAQRmMGQwJgYIKwYBBQUHMAGG\nGmh0dHA6Ly9vY3NwLnRydXN0d2F2ZS5jb20vMDoGCCsGAQUFBzAChi5odHRwOi8v\nc3NsLnRydXN0d2F2ZS5jb20vaXNzdWVycy9UV0dQMjU2Q0EuY3J0MAoGCCqGSM49\nBAMCA0cAMEQCIGa3JyBYlXxRN5GIIulLaDxnANNRnY4j1Et166CCC5h+AiAVUlzJ\nIJTfUDBU7jnSTKSw/F+bLIPvaC6frMZv0h+RTA==\n-----END CERTIFICATE-----\n\nSecureTrust TWG ECDSA P-384 Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C58D91DEF98A7F9EB2666CFE7BE1EE\n-----BEGIN CERTIFICATE-----\nMIIDqjCCAy+gAwIBAgITBy8w6cWNkd75in+esmZs/nvh7jAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMjAxMDA4MDY0OTQxWhcNMzAxMDA4MDY0ODQxWjBiMQswCQYDVQQGEwJV\nUzEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxPTA7BgNVBAMTNFNlY3VyZVRydXN0IFRX\nRyBFQ0RTQSBQLTM4NCBTZWN1cmUgRW1haWwgQ0EsIExldmVsIDIwdjAQBgcqhkjO\nPQIBBgUrgQQAIgNiAAR4nTJ6MvtPBb7+L3tklhdDw0tr5FNY5Q1hsp6NR5OzZVeG\nx/X3VrCvkOsae1OEZHNqWCnnI1s/ix9qn/2+q0pPpXrT6wkN/HOQzpQaJWzCF7yX\nIfIB0o+x1Pr17UOX2qGjggF1MIIBcTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud\nDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDBDAdBgNVHQ4EFgQUJd3xyUp6\n6EP6L9hCmkRrWAcU2mwwHwYDVR0jBBgwFoAUVamEidLBMr0Yy2ymB07I552+gpAw\nQQYDVR0gBDowODA2BgRVHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMu\nc2VjdXJldHJ1c3QuY29tL0NBMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu\nc2VjdXJldHJ1c3QuY29tL1RXR1AzODRDQS5jcmwweAYIKwYBBQUHAQEEbDBqMCgG\nCCsGAQUFBzABhhxodHRwOi8vb2NzcC5zZWN1cmV0cnVzdC5jb20vMD4GCCsGAQUF\nBzAChjJodHRwOi8vY2VydHMuc2VjdXJldHJ1c3QuY29tL2lzc3VlcnMvVFdHUDM4\nNENBLmNydDAKBggqhkjOPQQDAwNpADBmAjEA8X5zwZHtdHjLIn60rwG3Z3NAa6cU\n6gOFxyF+ksTCXvWCUP0oFUqsRPMKMYE2mtdQAjEA2diuEHTPUgCQ0ynhLjged8BO\nFyzL3UlFieGGp90v58gUpfjoFq0BReAw7MPYo/Qa\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9B07A17CC5376157813389A2930A44A\n-----BEGIN CERTIFICATE-----\nMIID1TCCA1ygAwIBAgITBs6C2bB6F8xTdhV4EziaKTCkSjAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBmjFDMEEGA1UEAxM6\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBEb21haW4gVmFsaWRhdGlvbiBD\nQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAw\nDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMw\ndjAQBgcqhkjOPQIBBgUrgQQAIgNiAASxlBEflNumTKsypgdOscM2x6ZRpQGSyB4B\nhJScRQI81UhZvzYSwxPWcxNZwFQoV457HfqR51pviJnHltRS8MJhJ9Q9Rf1sSmy4\nW6SPsM9qnBjwfBRxghByIsEIaTW/PKyjggFpMIIBZTASBgNVHRMBAf8ECDAGAQH/\nAgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4E\nFgQUp6etGGS1u/oGGEfIwJ68Zf9pAWAwHwYDVR0jBBgwFoAUVamEidLBMr0Yy2ym\nB07I552+gpAwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBz\nOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDov\nL2NybC50cnVzdHdhdmUuY29tL1RXR1AzODRDQS5jcmwwcgYIKwYBBQUHAQEEZjBk\nMCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50cnVzdHdhdmUuY29tLzA6BggrBgEF\nBQcwAoYuaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvVFdHUDM4NENB\nLmNydDAKBggqhkjOPQQDAwNnADBkAjA6fS1jRjt+DvnWSI58v4lX+8DCXbdEhDaB\nbBOS/rXwS/ntsFXqTf0B90GPv3AWlFMCMBbz6nXMwX0jKRkaFZOZx9tvwUapdq7M\n6jYpT/NnAzH68x1t3/7ysZ8lPuKIqAwdKQ==\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A331594530006781829387E40DBCB6\n-----BEGIN CERTIFICATE-----\nMIID4zCCA2igAwIBAgITBs6C2aMxWUUwAGeBgpOH5A28tjAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBnDFFMEMGA1UEAxM8\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBFeHRlbmRlZCBWYWxpZGF0aW9u\nIENBLCBMZXZlbCAxMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4x\nEDAOBgNVBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJV\nUzB2MBAGByqGSM49AgEGBSuBBAAiA2IABKcVGieqBjW3BuVza9VhkBlpGLHLZqQg\nI0GXaTpt5CogNWz6BmlZ1yAPjRnDUVfVwl57ATRtV7u+5TPFzKZ+RheFVc0iA8vl\nQ2JINGRz8XLDaivvuygQtFKSzCWn4e66cKOCAXMwggFvMBIGA1UdEwEB/wQIMAYB\nAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF\nBQcDATAdBgNVHQ4EFgQUMFfit09gayJACkNfT/oNzXO8JCcwHwYDVR0jBBgwFoAU\nVamEidLBMr0Yy2ymB07I552+gpAwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYB\nBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwNwYDVR0fBDAwLjAs\noCqgKIYmaHR0cDovL2NybC50cnVzdHdhdmUuY29tL1RXR1AzODRDQS5jcmwwcgYI\nKwYBBQUHAQEEZjBkMCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50cnVzdHdhdmUu\nY29tLzA6BggrBgEFBQcwAoYuaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3Vl\ncnMvVFdHUDM4NENBLmNydDAKBggqhkjOPQQDAwNpADBmAjEA6pScrGT+SruK7iON\n7iDJZfhQsjfQIhaq9sHiEXd89B8ibWOb57no/K265dPxeuALAjEA27NTMZM344eT\nX3df9B22dY5ZshsUMIiRcMo1K4B/GBO8SIA0jParkHS5g4WO5K7O\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A9D8E29837EF90BEAF59DC6551BED6\n-----BEGIN CERTIFICATE-----\nMIID5jCCA2ygAwIBAgITBs6C2anY4pg375C+r1ncZVG+1jAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBoDFJMEcGA1UEAxNA\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBPcmdhbml6YXRpb24gVmFsaWRh\ndGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMRAwDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UE\nBhMCVVMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATvG09PrsO8UQZhH5Zw54rwgcUw\nKjC9D2V3myjD5WOa8uxdTL8PzdwPk4TCcSf6UUG1Tt74j/I+vBOi2tgMcDt68Zld\nvTj+jZT1BBYTQtYh6/dOUjmiapQU5XqoFMRNubGjggFzMIIBbzASBgNVHRMBAf8E\nCDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI\nKwYBBQUHAwEwHQYDVR0OBBYEFDoXwH5iO1eguEDKzDRHzZZ+/AmIMB8GA1UdIwQY\nMBaAFFWphInSwTK9GMtspgdOyOedvoKQMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgG\nCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NBMDcGA1UdHwQw\nMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9UV0dQMzg0Q0EuY3Js\nMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3\nYXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9p\nc3N1ZXJzL1RXR1AzODRDQS5jcnQwCgYIKoZIzj0EAwMDaAAwZQIwMyHlVCVMacxP\nO0fC+uc4M7Eq1F9woaWBmLSSNC6EWe3nShMqsR9HrNWrOHBHucNWAjEArwrzEM8g\nJkR4iZxbyYNIn2sNEkNZt2pxqJn4G2cDDDFfOarykKVzP1aJ9OMdYUvs\n-----END CERTIFICATE-----\n\nTrustwave S/MIME SHA256 CA, Level 1\nXRamp Security Services Inc\n3A83B71EE02C3CCA1CE1A2643E9B66EA\n-----BEGIN CERTIFICATE-----\nMIIFHTCCBAWgAwIBAgIQOoO3HuAsPMoc4aJkPptm6jANBgkqhkiG9w0BAQsFADCB\ngjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk\nMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY\nUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQxMDAxMTky\nMjM4WhcNMjQwOTI4MTkyMjM4WjCBpDELMAkGA1UEBhMCVVMxETAPBgNVBAgTCEls\nbGlub2lzMRAwDgYDVQQHEwdDaGljYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9s\nZGluZ3MsIEluYy4xLDAqBgNVBAMTI1RydXN0d2F2ZSBTL01JTUUgU0hBMjU2IENB\nLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4c5I5giD0wEh+RuoLIJkD7a6mBlm\n+YzTtXSefGejVVYtpjclkUl4C4hEfQMCUcrBnU3ORHVprXi/Q82dKNFPac8FI9bj\n8mtq0cjdSDfXJKfdf52wPXnTjASwKyhJt+CoJik+Fz72KAkjxi+OUSpWdQBeAQra\ndbtu4UGFTgPcuU/cwpF8J0g4CGk/saVKkkJNpq5wqpfQRYl025FyKbzmRjqhB/Ta\npoHlbHMQ7aeoZ+qtDC+eWnE3AqTUHx14Z5fegjLQRmPWqqdeZafthouglbEuHt4A\neyzefTDNwyXjUiRD/n0kaNNW+lcsLpw7ouw1OU8mwQ0C7LoPJljpXRjvOwIDAQAB\no4IBaTCCAWUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUDDOjV6rjq9ZL\ncBs2nqPtYVDmr3QwDgYDVR0PAQH/BAQDAgGGMEgGA1UdIARBMD8wPQYPKwYBBAGB\n7RgDAwMFBAMDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5j\nb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdhdmUuY29t\nL1hHQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29j\nc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdh\ndmUuY29tL2lzc3VlcnMvWEdDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwQwHwYD\nVR0jBBgwFoAUxk+iPQZjhAmczmLkBKyNXLXpthswDQYJKoZIhvcNAQELBQADggEB\nAIdGLHufUegzFKVBQVWs3YAIFqCcJvdak14TMRImxJsnQWLz+jIW0olC0JATY6Ng\nxAbjIJA4wtW/tA+rgE6WcA5y3bLN3bRMQVDSu6X26hkVjvwo4/VYykOp3e9Cqlfe\ngJAsrqBQKXkUpEbYEmmorXxj6/74e//xwXTz0XS0BS9cXhONlTQffyJnMeLaunzQ\nS1x/MvALfPCHCZCTOfLDmwylKtHHu+V2Ks0HV+ZrzCBRR5W3MhGTU7PpNEMQwyGF\n+MG5eZTd0jyxOSOjaXQm7iDh0tG/iKZZegn5AhNdaHE74QEHTjK+teLQlo60QGBk\necyzakgVYZ/Ezalz8nQwhCA=\n-----END CERTIFICATE-----\n\nTrustwave XRamp Global Extended Validation CA, Level 1\nXRamp Security Services Inc\n00D3D519C2B2EB5C7040F64CBC957BBD2C\n-----BEGIN CERTIFICATE-----\nMIIFMDCCBBigAwIBAgIRANPVGcKy61xwQPZMvJV7vSwwDQYJKoZIhvcNAQELBQAw\ngYIxCzAJBgNVBAYTAlVTMR4wHAYDVQQLExV3d3cueHJhbXBzZWN1cml0eS5jb20x\nJDAiBgNVBAoTG1hSYW1wIFNlY3VyaXR5IFNlcnZpY2VzIEluYzEtMCsGA1UEAxMk\nWFJhbXAgR2xvYmFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE1MDgxMjIw\nMTczMVoXDTI1MDgwOTIwMTczMVowgbcxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJ\nbGxpbm9pczEQMA4GA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhv\nbGRpbmdzLCBJbmMuMT8wPQYDVQQDEzZUcnVzdHdhdmUgWFJhbXAgR2xvYmFsIEV4\ndGVuZGVkIFZhbGlkYXRpb24gQ0EsIExldmVsIDExHzAdBgkqhkiG9w0BCQEWEGNh\nQHRydXN0d2F2ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9\nAAbj9SknrNJT9pDatGvlR386KRi0SkqIOGr+C5W91+8E8PqydEHwjrnrWt/MTLGO\n+2kfEO3TEJlWxQQqbHy8SdhjCANefLzOT1cfTfjroWBIS9yiHpBIQytAaz/td95Y\n+JKrRBVCnIR/wB5qMMQ982RWwqggD763XLma0c1AIndsZL+dXp1zET4KBreoxn3q\nRYzMIsZIL2mAJoiCOTYuOGrOMVuaQn0HSu3K7bU+CpkdLQ/j+ikcQiI10IL9oOcO\nU9Gnt/hRyUX66Gk91RIpYXhla2tIYrg7ezrAnFoZIZCb891JjFtbSEOvAAK9F5d6\nfkkjPx0432o/v1c5GRFPAgMBAAGjggFoMIIBZDASBgNVHRMBAf8ECDAGAQH/AgEA\nMB0GA1UdDgQWBBTFzrk7QkXAzQnlaOhIOoNdbI6rGDAOBgNVHQ8BAf8EBAMCAYYw\nPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRy\ndXN0d2F2ZS5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVz\ndHdhdmUuY29tL1hHQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZ\naHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3Nz\nbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvWEdDQS5jcnQwHQYDVR0lBBYwFAYIKwYB\nBQUHAwIGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFMZPoj0GY4QJnM5i5ASsjVy16bYb\nMA0GCSqGSIb3DQEBCwUAA4IBAQCA2N/WVTGYRGNTuvF2qKWPrQUx0/6pKmGqELl6\nNXs1bwRXCci98SkeNjiaa2dHEwcGR43/M1Y0nekXP8QCEFVqGOwaY0pnTb8wL+CI\n/HTp1zfmoCYNvtzt1fIq/+9ynLYEjX8rsrf51HIEjJJK8K3k/Ub3cFT+yJKNN2YN\nJS0IvJYlbpqS6VbcInwLcW7WvJmXUuL7t0Vtt0d2q1h5UdnJQP+skiOmN/B0zPut\nbRC4v5pNGJJmwbk58UlOSeviH2qzDGutamOJ6dFNWqQFoZorAT7fUsr3WDA4HKtx\neraYdCIRJX7weW9xpdMNsVO7Wy/Ma7Fz9fzKnOH5mnInBOof\n-----END CERTIFICATE-----\n\nSecure Global CA\nSecureTrust Corporation\n075622A4E8D48A894DF413C8F0F8EAA5\n-----BEGIN CERTIFICATE-----\nMIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx\nMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg\nQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ\niQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa\n/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ\njnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI\nHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7\nsFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w\ngZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF\nMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw\nKaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG\nAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L\nURYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO\nH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm\nI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY\niNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc\nf8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW\n-----END CERTIFICATE-----\n\nSecureTrust CA\nSecureTrust Corporation\n0CF08E5C0816A5AD427FF0EB271859D0\n-----BEGIN CERTIFICATE-----\nMIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz\nMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv\ncnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz\nZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO\n0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao\nwW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj\n7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS\n8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT\nBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB\n/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg\nJYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC\nNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3\n6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/\n3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm\nD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS\nCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR\n3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=\n-----END CERTIFICATE-----\n\nTrustwave Global Certification Authority\nTrustwave Holdings, Inc.\n05F70E86DA49F346352EBAB2\n-----BEGIN CERTIFICATE-----\nMIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw\nCQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x\nITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1\nc3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx\nOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI\nSWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI\nb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp\nY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\nALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn\nswuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu\n7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8\n1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW\n80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP\nJqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l\nRtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw\nhI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10\ncoos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc\nBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n\ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud\nEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud\nDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W\n0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe\nuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q\nlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB\naCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE\nsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT\nMaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe\nqu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh\nVicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8\nh6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9\nEEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK\nyeC2nOnOcXHebD8WpHk=\n-----END CERTIFICATE-----\n\nTrustwave Global ECC P256 Certification Authority\nTrustwave Holdings, Inc.\n0D6A5F083F285C3E5195DF5D\n-----BEGIN CERTIFICATE-----\nMIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN\nFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w\nDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw\nCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh\nDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7\n-----END CERTIFICATE-----\n\nTrustwave Global ECC P384 Certification Authority\nTrustwave Holdings, Inc.\n08BD85976C9927A48068473B\n-----BEGIN CERTIFICATE-----\nMIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB\nBAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ\nj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF\n1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G\nA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3\nAZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC\nMGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu\nSw==\n-----END CERTIFICATE-----\n";
15
15
 
16
16
  var PKG_NAME = "@hpcc-js/comms";
17
- var PKG_VERSION = "2.89.0";
18
- var BUILD_VERSION = "2.104.39";
17
+ var PKG_VERSION = "2.91.0";
18
+ var BUILD_VERSION = "2.104.42";
19
19
 
20
20
  /******************************************************************************
21
21
  Copyright (c) Microsoft Corporation.
@@ -2182,6 +2182,26 @@ var WsWorkunits;
2182
2182
  ECLWUActions["SetToFailed"] = "SetToFailed";
2183
2183
  ECLWUActions["Archive"] = "Archive";
2184
2184
  })(WsWorkunits.ECLWUActions || (WsWorkunits.ECLWUActions = {}));
2185
+ (function (LogSelectColumnMode) {
2186
+ LogSelectColumnMode[LogSelectColumnMode["MIN"] = 0] = "MIN";
2187
+ LogSelectColumnMode[LogSelectColumnMode["DEFAULT"] = 1] = "DEFAULT";
2188
+ LogSelectColumnMode[LogSelectColumnMode["ALL"] = 2] = "ALL";
2189
+ LogSelectColumnMode[LogSelectColumnMode["CUSTOM"] = 3] = "CUSTOM";
2190
+ })(WsWorkunits.LogSelectColumnMode || (WsWorkunits.LogSelectColumnMode = {}));
2191
+ (function (SortDirection) {
2192
+ SortDirection[SortDirection["ASC"] = 0] = "ASC";
2193
+ SortDirection[SortDirection["DSC"] = 1] = "DSC";
2194
+ })(WsWorkunits.SortDirection || (WsWorkunits.SortDirection = {}));
2195
+ (function (LogEventClass) {
2196
+ LogEventClass["ALL"] = "ALL";
2197
+ LogEventClass["DIS"] = "DIS";
2198
+ LogEventClass["ERR"] = "ERR";
2199
+ LogEventClass["WRN"] = "WRN";
2200
+ LogEventClass["INF"] = "INF";
2201
+ LogEventClass["PRO"] = "PRO";
2202
+ LogEventClass["MET"] = "MET";
2203
+ LogEventClass["EVT"] = "EVT";
2204
+ })(WsWorkunits.LogEventClass || (WsWorkunits.LogEventClass = {}));
2185
2205
  (function (EclDefinitionActions) {
2186
2206
  EclDefinitionActions["SyntaxCheck"] = "SyntaxCheck";
2187
2207
  EclDefinitionActions["Deploy"] = "Deploy";
@@ -2192,12 +2212,6 @@ var WsWorkunits;
2192
2212
  ErrorMessageFormat["json"] = "json";
2193
2213
  ErrorMessageFormat["text"] = "text";
2194
2214
  })(WsWorkunits.ErrorMessageFormat || (WsWorkunits.ErrorMessageFormat = {}));
2195
- (function (LogSelectColumnMode) {
2196
- LogSelectColumnMode[LogSelectColumnMode["MIN"] = 0] = "MIN";
2197
- LogSelectColumnMode[LogSelectColumnMode["DEFAULT"] = 1] = "DEFAULT";
2198
- LogSelectColumnMode[LogSelectColumnMode["ALL"] = 2] = "ALL";
2199
- LogSelectColumnMode[LogSelectColumnMode["CUSTOM"] = 3] = "CUSTOM";
2200
- })(WsWorkunits.LogSelectColumnMode || (WsWorkunits.LogSelectColumnMode = {}));
2201
2215
  (function (LogAccessLogFormat) {
2202
2216
  LogAccessLogFormat[LogAccessLogFormat["XML"] = 0] = "XML";
2203
2217
  LogAccessLogFormat[LogAccessLogFormat["JSON"] = 1] = "JSON";
@@ -2256,7 +2270,7 @@ var WsWorkunits;
2256
2270
  var WorkunitsServiceBase = /** @class */ (function (_super) {
2257
2271
  __extends(WorkunitsServiceBase, _super);
2258
2272
  function WorkunitsServiceBase(optsConnection) {
2259
- return _super.call(this, optsConnection, "WsWorkunits", "1.95") || this;
2273
+ return _super.call(this, optsConnection, "WsWorkunits", "1.98") || this;
2260
2274
  }
2261
2275
  WorkunitsServiceBase.prototype.GVCAjaxGraph = function (request) {
2262
2276
  return this._connection.send("GVCAjaxGraph", request, "json", false, undefined, "GVCAjaxGraphResponse");
@@ -2504,12 +2518,6 @@ var WorkunitsServiceBase = /** @class */ (function (_super) {
2504
2518
  return WorkunitsServiceBase;
2505
2519
  }(Service));
2506
2520
 
2507
- /*
2508
- Response structures generated via:
2509
- * http://localhost:8010/WsWorkunits/WUInfo?reqjson_
2510
- * http://localhost:8010/WsWorkunits/WUInfo?respjson_
2511
- * http://json2ts.com/
2512
- */
2513
2521
  var WUStateID$1;
2514
2522
  (function (WUStateID) {
2515
2523
  WUStateID[WUStateID["Unknown"] = 0] = "Unknown";
@@ -2672,6 +2680,9 @@ var WorkunitsServiceEx = /** @class */ (function (_super) {
2672
2680
  function WorkunitsServiceEx() {
2673
2681
  return _super !== null && _super.apply(this, arguments) || this;
2674
2682
  }
2683
+ WorkunitsServiceEx.prototype.WUPublishWorkunitEx = function (request) {
2684
+ return this._connection.send("WUPublishWorkunit", request);
2685
+ };
2675
2686
  return WorkunitsServiceEx;
2676
2687
  }(WorkunitsServiceBase));
2677
2688
 
@@ -4029,21 +4040,21 @@ var XGMMLSubgraph = /** @class */ (function (_super) {
4029
4040
  return _super !== null && _super.apply(this, arguments) || this;
4030
4041
  }
4031
4042
  return XGMMLSubgraph;
4032
- }(Subgraph));
4043
+ }(Subgraph$1));
4033
4044
  var XGMMLVertex = /** @class */ (function (_super) {
4034
4045
  __extends(XGMMLVertex, _super);
4035
4046
  function XGMMLVertex() {
4036
4047
  return _super !== null && _super.apply(this, arguments) || this;
4037
4048
  }
4038
4049
  return XGMMLVertex;
4039
- }(Vertex));
4050
+ }(Vertex$1));
4040
4051
  var XGMMLEdge = /** @class */ (function (_super) {
4041
4052
  __extends(XGMMLEdge, _super);
4042
4053
  function XGMMLEdge() {
4043
4054
  return _super !== null && _super.apply(this, arguments) || this;
4044
4055
  }
4045
4056
  return XGMMLEdge;
4046
- }(Edge));
4057
+ }(Edge$1));
4047
4058
  function createXGMMLGraph(id, graphs) {
4048
4059
  var subgraphs = {};
4049
4060
  var vertices = {};
@@ -4088,21 +4099,21 @@ var ScopeSubgraph = /** @class */ (function (_super) {
4088
4099
  return _super !== null && _super.apply(this, arguments) || this;
4089
4100
  }
4090
4101
  return ScopeSubgraph;
4091
- }(Subgraph));
4102
+ }(Subgraph$1));
4092
4103
  var ScopeVertex = /** @class */ (function (_super) {
4093
4104
  __extends(ScopeVertex, _super);
4094
4105
  function ScopeVertex() {
4095
4106
  return _super !== null && _super.apply(this, arguments) || this;
4096
4107
  }
4097
4108
  return ScopeVertex;
4098
- }(Vertex));
4109
+ }(Vertex$1));
4099
4110
  var ScopeEdge = /** @class */ (function (_super) {
4100
4111
  __extends(ScopeEdge, _super);
4101
4112
  function ScopeEdge() {
4102
4113
  return _super !== null && _super.apply(this, arguments) || this;
4103
4114
  }
4104
4115
  return ScopeEdge;
4105
- }(Edge));
4116
+ }(Edge$1));
4106
4117
  function createGraph(scopes) {
4107
4118
  var subgraphs = {};
4108
4119
  var edges = {};
@@ -5032,7 +5043,7 @@ var Timer = /** @class */ (function (_super) {
5032
5043
  else {
5033
5044
  _this.connection = new WorkunitsService(optsConnection);
5034
5045
  }
5035
- var secs = espTime2Seconds(eclTimer.Value);
5046
+ var secs = espTime2Seconds$1(eclTimer.Value);
5036
5047
  _this.set(__assign({ Wuid: wuid, Seconds: Math.round(secs * 1000) / 1000, HasSubGraphId: eclTimer.SubGraphId !== undefined }, eclTimer));
5037
5048
  return _this;
5038
5049
  }
@@ -5093,6 +5104,13 @@ function formatNum(num) {
5093
5104
  }
5094
5105
  return num;
5095
5106
  }
5107
+ function safeDelete(obj, key, prop) {
5108
+ if (obj[key] === undefined || obj[key][prop] === undefined)
5109
+ return;
5110
+ if (key === "__proto__" || key === "constructor" || key === "prototype")
5111
+ return;
5112
+ delete obj[key][prop];
5113
+ }
5096
5114
  var DEFINITION_LIST = "DefinitionList";
5097
5115
  var definitionRegex = /([a-zA-Z]:)?(.*[\\\/])(.*)(\((\d+),(\d+)\))/;
5098
5116
  var PropertyType = ["Avg", "Min", "Max", "Delta", "StdDev"];
@@ -5983,115 +6001,117 @@ var Workunit = /** @class */ (function (_super) {
5983
6001
  if (request === void 0) { request = {}; }
5984
6002
  return this.WUDetails(request).then(function (response) { return response.Scopes.Scope; });
5985
6003
  };
5986
- Workunit.prototype.fetchDetailsNormalized = function (request) {
5987
- if (request === void 0) { request = {}; }
5988
- return Promise.all([this.fetchDetailsMeta(), this.fetchDetailsRaw(request)]).then(function (promises) {
5989
- var _a;
5990
- var meta = promises[0];
5991
- var scopes = promises[1];
5992
- var columns = {
5993
- id: {
5994
- Measure: "label"
5995
- },
5996
- name: {
5997
- Measure: "label"
5998
- },
5999
- type: {
6000
- Measure: "label"
6001
- }
6002
- };
6003
- var data = [];
6004
- var _loop_1 = function (scope) {
6005
- var props = {};
6006
- var formattedProps = {};
6007
- if (scope && scope.Id && scope.Properties && scope.Properties.Property) {
6008
- for (var key in scope.Properties.Property) {
6009
- var scopeProperty = scope.Properties.Property[key];
6010
- if (scopeProperty.Measure === "ns") {
6011
- scopeProperty.Measure = "s";
6012
- }
6013
- columns[scopeProperty.Name] = __assign({}, scopeProperty);
6014
- delete columns[scopeProperty.Name].RawValue;
6015
- delete columns[scopeProperty.Name].Formatted;
6016
- switch (scopeProperty.Measure) {
6017
- case "bool":
6018
- props[scopeProperty.Name] = !!+scopeProperty.RawValue;
6019
- break;
6020
- case "sz":
6021
- props[scopeProperty.Name] = +scopeProperty.RawValue;
6022
- break;
6023
- case "s":
6024
- props[scopeProperty.Name] = +scopeProperty.RawValue / 1000000000;
6025
- break;
6026
- case "ns":
6027
- props[scopeProperty.Name] = +scopeProperty.RawValue;
6028
- break;
6029
- case "ts":
6030
- props[scopeProperty.Name] = new Date(+scopeProperty.RawValue / 1000).toISOString();
6031
- break;
6032
- case "cnt":
6033
- props[scopeProperty.Name] = +scopeProperty.RawValue;
6034
- break;
6035
- case "cost":
6036
- props[scopeProperty.Name] = +scopeProperty.RawValue / 1000000;
6037
- break;
6038
- case "cpu":
6039
- case "skw":
6040
- case "node":
6041
- case "ppm":
6042
- case "ip":
6043
- case "cy":
6044
- case "en":
6045
- case "txt":
6046
- case "id":
6047
- case "fname":
6048
- default:
6049
- props[scopeProperty.Name] = scopeProperty.RawValue;
6050
- }
6051
- formattedProps[scopeProperty.Name] = formatNum((_a = scopeProperty.Formatted) !== null && _a !== void 0 ? _a : props[scopeProperty.Name]);
6052
- }
6053
- // Other properties ---
6054
- }
6055
- var normalizedScope = __assign({ id: scope.Id, name: scope.ScopeName, type: scope.ScopeType, Kind: scope["Kind"], Label: scope["Label"], __formattedProps: formattedProps, __groupedProps: {} }, props);
6056
- if (normalizedScope[DEFINITION_LIST]) {
6057
- try {
6058
- var definitionList = JSON.parse(normalizedScope[DEFINITION_LIST].split("\\").join("\\\\"));
6059
- normalizedScope[DEFINITION_LIST] = [];
6060
- definitionList.forEach(function (definition, idx) {
6061
- var _a;
6062
- var matches = definition.match(definitionRegex);
6063
- if (matches) {
6064
- var filePath = ((_a = matches[1]) !== null && _a !== void 0 ? _a : "") + matches[2] + matches[3];
6065
- var line = parseInt(matches[5]);
6066
- var col = parseInt(matches[6]);
6067
- normalizedScope[DEFINITION_LIST].push({ filePath: filePath, line: line, col: col });
6068
- }
6069
- });
6004
+ Workunit.prototype.normalizeDetails = function (meta, scopes) {
6005
+ var _a;
6006
+ var columns = {
6007
+ id: {
6008
+ Measure: "label"
6009
+ },
6010
+ name: {
6011
+ Measure: "label"
6012
+ },
6013
+ type: {
6014
+ Measure: "label"
6015
+ }
6016
+ };
6017
+ var data = [];
6018
+ var _loop_1 = function (scope) {
6019
+ var props = {};
6020
+ var formattedProps = {};
6021
+ if (scope && scope.Id && scope.Properties && scope.Properties.Property) {
6022
+ for (var key in scope.Properties.Property) {
6023
+ var scopeProperty = scope.Properties.Property[key];
6024
+ if (scopeProperty.Measure === "ns") {
6025
+ scopeProperty.Measure = "s";
6070
6026
  }
6071
- catch (e) {
6072
- logger$3.error("Unexpected \"DefinitionList\": ".concat(normalizedScope[DEFINITION_LIST]));
6027
+ columns[scopeProperty.Name] = __assign({}, scopeProperty);
6028
+ safeDelete(columns, scopeProperty.Name, "RawValue");
6029
+ safeDelete(columns, scopeProperty.Name, "Formatted");
6030
+ switch (scopeProperty.Measure) {
6031
+ case "bool":
6032
+ props[scopeProperty.Name] = !!+scopeProperty.RawValue;
6033
+ break;
6034
+ case "sz":
6035
+ props[scopeProperty.Name] = +scopeProperty.RawValue;
6036
+ break;
6037
+ case "s":
6038
+ props[scopeProperty.Name] = +scopeProperty.RawValue / 1000000000;
6039
+ break;
6040
+ case "ns":
6041
+ props[scopeProperty.Name] = +scopeProperty.RawValue;
6042
+ break;
6043
+ case "ts":
6044
+ props[scopeProperty.Name] = new Date(+scopeProperty.RawValue / 1000).toISOString();
6045
+ break;
6046
+ case "cnt":
6047
+ props[scopeProperty.Name] = +scopeProperty.RawValue;
6048
+ break;
6049
+ case "cost":
6050
+ props[scopeProperty.Name] = +scopeProperty.RawValue / 1000000;
6051
+ break;
6052
+ case "cpu":
6053
+ case "skw":
6054
+ case "node":
6055
+ case "ppm":
6056
+ case "ip":
6057
+ case "cy":
6058
+ case "en":
6059
+ case "txt":
6060
+ case "id":
6061
+ case "fname":
6062
+ default:
6063
+ props[scopeProperty.Name] = scopeProperty.RawValue;
6073
6064
  }
6065
+ formattedProps[scopeProperty.Name] = formatNum((_a = scopeProperty.Formatted) !== null && _a !== void 0 ? _a : props[scopeProperty.Name]);
6074
6066
  }
6075
- var dedup = {};
6076
- for (var key in normalizedScope) {
6077
- if (key.indexOf("__") !== 0) {
6078
- var row = formatValues(normalizedScope, key, dedup);
6079
- if (row) {
6080
- normalizedScope.__groupedProps[row.Key] = row;
6067
+ // Other properties ---
6068
+ }
6069
+ var normalizedScope = __assign({ id: scope.Id, name: scope.ScopeName, type: scope.ScopeType, Kind: scope["Kind"], Label: scope["Label"], __formattedProps: formattedProps, __groupedProps: {} }, props);
6070
+ if (normalizedScope[DEFINITION_LIST]) {
6071
+ try {
6072
+ var definitionList = JSON.parse(normalizedScope[DEFINITION_LIST].split("\\").join("\\\\"));
6073
+ normalizedScope[DEFINITION_LIST] = [];
6074
+ definitionList.forEach(function (definition, idx) {
6075
+ var _a;
6076
+ var matches = definition.match(definitionRegex);
6077
+ if (matches) {
6078
+ var filePath = ((_a = matches[1]) !== null && _a !== void 0 ? _a : "") + matches[2] + matches[3];
6079
+ var line = parseInt(matches[5]);
6080
+ var col = parseInt(matches[6]);
6081
+ normalizedScope[DEFINITION_LIST].push({ filePath: filePath, line: line, col: col });
6081
6082
  }
6083
+ });
6084
+ }
6085
+ catch (e) {
6086
+ logger$3.error("Unexpected \"DefinitionList\": ".concat(normalizedScope[DEFINITION_LIST]));
6087
+ }
6088
+ }
6089
+ var dedup = {};
6090
+ for (var key in normalizedScope) {
6091
+ if (key.indexOf("__") !== 0) {
6092
+ var row = formatValues(normalizedScope, key, dedup);
6093
+ if (row) {
6094
+ normalizedScope.__groupedProps[row.Key] = row;
6082
6095
  }
6083
6096
  }
6084
- data.push(normalizedScope);
6085
- };
6086
- for (var _i = 0, scopes_1 = scopes; _i < scopes_1.length; _i++) {
6087
- var scope = scopes_1[_i];
6088
- _loop_1(scope);
6089
6097
  }
6090
- return {
6091
- meta: meta,
6092
- columns: columns,
6093
- data: data
6094
- };
6098
+ data.push(normalizedScope);
6099
+ };
6100
+ for (var _i = 0, scopes_1 = scopes; _i < scopes_1.length; _i++) {
6101
+ var scope = scopes_1[_i];
6102
+ _loop_1(scope);
6103
+ }
6104
+ return {
6105
+ meta: meta,
6106
+ columns: columns,
6107
+ data: data
6108
+ };
6109
+ };
6110
+ Workunit.prototype.fetchDetailsNormalized = function (request) {
6111
+ var _this = this;
6112
+ if (request === void 0) { request = {}; }
6113
+ return Promise.all([this.fetchDetailsMeta(), this.fetchDetailsRaw(request)]).then(function (promises) {
6114
+ return _this.normalizeDetails(promises[0], promises[1]);
6095
6115
  });
6096
6116
  };
6097
6117
  Workunit.prototype.fetchInfo = function (request) {
@@ -6423,6 +6443,11 @@ var Workunit = /** @class */ (function (_super) {
6423
6443
  Wait: 5000
6424
6444
  });
6425
6445
  };
6446
+ Workunit.prototype.publishEx = function (request) {
6447
+ var service = new WorkunitsServiceEx({ baseUrl: "" });
6448
+ var publishRequest = __assign({ Wuid: this.Wuid, Cluster: this.Cluster, JobName: this.Jobname, AllowForeignFiles: true, Activate: 1, Wait: 5000 }, request);
6449
+ return service.WUPublishWorkunitEx(publishRequest);
6450
+ };
6426
6451
  Workunit.prototype.WUCDebug = function (command, opts) {
6427
6452
  if (opts === void 0) { opts = {}; }
6428
6453
  var optsStr = "";
@@ -7603,7 +7628,750 @@ var Topology = /** @class */ (function (_super) {
7603
7628
  return Topology;
7604
7629
  }(StateObject));
7605
7630
 
7631
+ // Ported from: https://github.com/hpcc-systems/HPCC-Platform/blob/f0ed9dbeca49c39fb55aa28fec295c89407ac663/esp/src/src/ESPGraph.ts
7632
+ function safeAssign(obj, key, value) {
7633
+ if (key === "__proto__" || key === "constructor" || key === "prototype")
7634
+ return;
7635
+ obj[key] = value;
7636
+ }
7637
+ function xmlEncode(str) {
7638
+ str = "" + str;
7639
+ return str.replace(/&/g, "&amp;")
7640
+ .replace(/"/g, "&quot;")
7641
+ .replace(/'/g, "&apos;")
7642
+ .replace(/</g, "&lt;")
7643
+ .replace(/>/g, "&gt;")
7644
+ .replace(/\n/g, "&#10;")
7645
+ .replace(/\r/g, "&#13;");
7646
+ }
7647
+ function espTime2Seconds(duration) {
7648
+ if (!duration) {
7649
+ return 0;
7650
+ }
7651
+ else if (!isNaN(+duration)) {
7652
+ return parseFloat(duration);
7653
+ }
7654
+ var re = /(?:(?:(\d+).days.)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+\.\d+|\d+)s))|(?:(\d+\.\d+|\d+)ms|(\d+\.\d+|\d+)us|(\d+\.\d+|\d+)ns)/;
7655
+ var match = re.exec(duration);
7656
+ if (!match)
7657
+ return 0;
7658
+ var days = +match[1] || 0;
7659
+ var hours = +match[2] || 0;
7660
+ var mins = +match[3] || 0;
7661
+ var secs = +match[4] || 0;
7662
+ var ms = +match[5] || 0;
7663
+ var us = +match[6] || 0;
7664
+ var ns = +match[7] || 0;
7665
+ return (days * 24 * 60 * 60) + (hours * 60 * 60) + (mins * 60) + secs + ms / 1000 + us / 1000000 + ns / 1000000000;
7666
+ }
7667
+ function unitTest(size, unit) {
7668
+ var nsIndex = size.indexOf(unit);
7669
+ if (nsIndex !== -1) {
7670
+ return parseFloat(size.substring(0, nsIndex));
7671
+ }
7672
+ return -1;
7673
+ }
7674
+ function espSize2Bytes(size) {
7675
+ if (!size) {
7676
+ return 0;
7677
+ }
7678
+ else if (!isNaN(+size)) {
7679
+ return parseFloat(size);
7680
+ }
7681
+ var retVal = unitTest(size, "Kb");
7682
+ if (retVal >= 0) {
7683
+ return retVal * 1024;
7684
+ }
7685
+ retVal = unitTest(size, "Mb");
7686
+ if (retVal >= 0) {
7687
+ return retVal * Math.pow(1024, 2);
7688
+ }
7689
+ retVal = unitTest(size, "Gb");
7690
+ if (retVal >= 0) {
7691
+ return retVal * Math.pow(1024, 3);
7692
+ }
7693
+ retVal = unitTest(size, "Tb");
7694
+ if (retVal >= 0) {
7695
+ return retVal * Math.pow(1024, 4);
7696
+ }
7697
+ retVal = unitTest(size, "Pb");
7698
+ if (retVal >= 0) {
7699
+ return retVal * Math.pow(1024, 5);
7700
+ }
7701
+ retVal = unitTest(size, "Eb");
7702
+ if (retVal >= 0) {
7703
+ return retVal * Math.pow(1024, 6);
7704
+ }
7705
+ retVal = unitTest(size, "Zb");
7706
+ if (retVal >= 0) {
7707
+ return retVal * Math.pow(1024, 7);
7708
+ }
7709
+ retVal = unitTest(size, "b");
7710
+ if (retVal >= 0) {
7711
+ return retVal;
7712
+ }
7713
+ return 0;
7714
+ }
7715
+ function espSkew2Number(skew) {
7716
+ if (!skew) {
7717
+ return 0;
7718
+ }
7719
+ return parseFloat(skew);
7720
+ }
7721
+ var GRAPH_TYPE;
7722
+ (function (GRAPH_TYPE) {
7723
+ GRAPH_TYPE[GRAPH_TYPE["UNKNOWN"] = 0] = "UNKNOWN";
7724
+ GRAPH_TYPE[GRAPH_TYPE["GRAPH"] = 1] = "GRAPH";
7725
+ GRAPH_TYPE[GRAPH_TYPE["SUBGRAPH"] = 2] = "SUBGRAPH";
7726
+ GRAPH_TYPE[GRAPH_TYPE["VERTEX"] = 3] = "VERTEX";
7727
+ GRAPH_TYPE[GRAPH_TYPE["EDGE"] = 4] = "EDGE";
7728
+ GRAPH_TYPE[GRAPH_TYPE["LAST"] = 5] = "LAST";
7729
+ })(GRAPH_TYPE || (GRAPH_TYPE = {}));
7730
+ var GRAPH_TYPE_STRING;
7731
+ (function (GRAPH_TYPE_STRING) {
7732
+ GRAPH_TYPE_STRING["UNKNOWN"] = "Unknown";
7733
+ GRAPH_TYPE_STRING["GRAPH"] = "Graph";
7734
+ GRAPH_TYPE_STRING["SUBGRAPH"] = "Cluster";
7735
+ GRAPH_TYPE_STRING["VERTEX"] = "Vertex";
7736
+ GRAPH_TYPE_STRING["EDGE"] = "Edge";
7737
+ GRAPH_TYPE_STRING["LAST"] = "Last";
7738
+ })(GRAPH_TYPE_STRING || (GRAPH_TYPE_STRING = {}));
7739
+ var LocalisedXGMMLWriter = /** @class */ (function () {
7740
+ function LocalisedXGMMLWriter(graph) {
7741
+ this.graph = graph;
7742
+ this.m_xgmml = "";
7743
+ this.m_visibleSubgraphs = {};
7744
+ this.m_visibleVertices = {};
7745
+ this.m_semiVisibleVertices = {};
7746
+ this.m_visibleEdges = {};
7747
+ }
7748
+ LocalisedXGMMLWriter.prototype.calcVisibility = function (items, localisationDepth, localisationDistance, noSpills) {
7749
+ var _this = this;
7750
+ this.noSpills = noSpills;
7751
+ items.forEach(function (item) {
7752
+ if (_this.graph.isVertex(item)) {
7753
+ _this.calcInVertexVisibility(item, localisationDistance);
7754
+ _this.calcOutVertexVisibility(item, localisationDistance);
7755
+ }
7756
+ else if (_this.graph.isEdge(item)) {
7757
+ _this.calcInVertexVisibility(item.getSource(), localisationDistance - 1);
7758
+ _this.calcOutVertexVisibility(item.getTarget(), localisationDistance - 1);
7759
+ }
7760
+ else if (_this.graph.isSubgraph(item)) {
7761
+ _this.m_visibleSubgraphs[item.__hpcc_id] = item;
7762
+ _this.calcSubgraphVisibility(item, localisationDepth - 1);
7763
+ }
7764
+ });
7765
+ this.calcVisibility2();
7766
+ };
7767
+ LocalisedXGMMLWriter.prototype.calcInVertexVisibility = function (vertex, localisationDistance) {
7768
+ var _this = this;
7769
+ if (this.noSpills && vertex.isSpill()) {
7770
+ localisationDistance++;
7771
+ }
7772
+ this.m_visibleVertices[vertex.__hpcc_id] = vertex;
7773
+ if (localisationDistance > 0) {
7774
+ vertex.getInEdges().forEach(function (edge) {
7775
+ _this.calcInVertexVisibility(edge.getSource(), localisationDistance - 1);
7776
+ });
7777
+ }
7778
+ };
7779
+ LocalisedXGMMLWriter.prototype.calcOutVertexVisibility = function (vertex, localisationDistance) {
7780
+ var _this = this;
7781
+ if (this.noSpills && vertex.isSpill()) {
7782
+ localisationDistance++;
7783
+ }
7784
+ this.m_visibleVertices[vertex.__hpcc_id] = vertex;
7785
+ if (localisationDistance > 0) {
7786
+ vertex.getOutEdges().forEach(function (edge) {
7787
+ _this.calcOutVertexVisibility(edge.getTarget(), localisationDistance - 1);
7788
+ });
7789
+ }
7790
+ };
7791
+ LocalisedXGMMLWriter.prototype.calcSubgraphVisibility = function (subgraph, localisationDepth) {
7792
+ var _this = this;
7793
+ if (localisationDepth < 0) {
7794
+ return;
7795
+ }
7796
+ if (localisationDepth > 0) {
7797
+ subgraph.__hpcc_subgraphs.forEach(function (subgraph, idx) {
7798
+ _this.calcSubgraphVisibility(subgraph, localisationDepth - 1);
7799
+ });
7800
+ }
7801
+ subgraph.__hpcc_subgraphs.forEach(function (subgraph, idx) {
7802
+ _this.m_visibleSubgraphs[subgraph.__hpcc_id] = subgraph;
7803
+ });
7804
+ subgraph.__hpcc_vertices.forEach(function (vertex, idx) {
7805
+ _this.m_visibleVertices[vertex.__hpcc_id] = vertex;
7806
+ });
7807
+ // Calculate edges that pass through the subgraph ---
7808
+ var dedupEdges = {};
7809
+ this.graph.edges.forEach(function (edge, idx) {
7810
+ if (edge.getSource().__hpcc_parent !== edge.getTarget().__hpcc_parent && subgraph === _this.getCommonAncestor(edge)) {
7811
+ // Only include one unique edge between subgraphs ---
7812
+ if (!dedupEdges[edge.getSource().__hpcc_parent.__hpcc_id + "::" + edge.getTarget().__hpcc_parent.__hpcc_id]) {
7813
+ dedupEdges[edge.getSource().__hpcc_parent.__hpcc_id + "::" + edge.getTarget().__hpcc_parent.__hpcc_id] = true;
7814
+ _this.m_visibleEdges[edge.__hpcc_id] = edge;
7815
+ }
7816
+ }
7817
+ });
7818
+ };
7819
+ LocalisedXGMMLWriter.prototype.buildVertexString = function (vertex, isPoint) {
7820
+ var attrStr = "";
7821
+ var propsStr = "";
7822
+ var props = vertex.getProperties();
7823
+ for (var key in props) {
7824
+ if (isPoint && key.indexOf("_kind") >= 0) {
7825
+ propsStr += "<att name=\"_kind\" value=\"point\"/>";
7826
+ }
7827
+ else if (key === "id" || key === "label") {
7828
+ attrStr += " " + key + "=\"" + xmlEncode(props[key]) + "\"";
7829
+ }
7830
+ else {
7831
+ propsStr += "<att name=\"" + key + "\" value=\"" + xmlEncode(props[key]) + "\"/>";
7832
+ }
7833
+ }
7834
+ return "<node" + attrStr + ">" + propsStr + "</node>";
7835
+ };
7836
+ LocalisedXGMMLWriter.prototype.buildEdgeString = function (edge) {
7837
+ var attrStr = "";
7838
+ var propsStr = "";
7839
+ var props = edge.getProperties();
7840
+ for (var key in props) {
7841
+ if (key.toLowerCase() === "id" ||
7842
+ key.toLowerCase() === "label" ||
7843
+ key.toLowerCase() === "source" ||
7844
+ key.toLowerCase() === "target") {
7845
+ attrStr += " " + key + "=\"" + xmlEncode(props[key]) + "\"";
7846
+ }
7847
+ else {
7848
+ propsStr += "<att name=\"" + key + "\" value=\"" + xmlEncode(props[key]) + "\"/>";
7849
+ }
7850
+ }
7851
+ return "<edge" + attrStr + ">" + propsStr + "</edge>";
7852
+ };
7853
+ LocalisedXGMMLWriter.prototype.getAncestors = function (v, ancestors) {
7854
+ var parent = v.__hpcc_parent;
7855
+ while (parent) {
7856
+ ancestors.push(parent);
7857
+ parent = parent.__hpcc_parent;
7858
+ }
7859
+ };
7860
+ LocalisedXGMMLWriter.prototype.getCommonAncestorV = function (v1, v2) {
7861
+ var v1_ancestors = [];
7862
+ var v2_ancestors = [];
7863
+ this.getAncestors(v1, v1_ancestors);
7864
+ this.getAncestors(v2, v2_ancestors);
7865
+ var finger1 = v1_ancestors.length - 1;
7866
+ var finger2 = v2_ancestors.length - 1;
7867
+ var retVal = null;
7868
+ while (finger1 >= 0 && finger2 >= 0 && v1_ancestors[finger1] === v2_ancestors[finger2]) {
7869
+ retVal = v1_ancestors[finger1];
7870
+ --finger1;
7871
+ --finger2;
7872
+ }
7873
+ return retVal;
7874
+ };
7875
+ LocalisedXGMMLWriter.prototype.getCommonAncestor = function (e) {
7876
+ return this.getCommonAncestorV(e.getSource(), e.getTarget());
7877
+ };
7878
+ LocalisedXGMMLWriter.prototype.calcAncestorVisibility = function (vertex) {
7879
+ var _this = this;
7880
+ var ancestors = [];
7881
+ this.getAncestors(vertex, ancestors);
7882
+ ancestors.forEach(function (item, idx) {
7883
+ _this.m_visibleSubgraphs[item.__hpcc_id] = item;
7884
+ });
7885
+ };
7886
+ LocalisedXGMMLWriter.prototype.calcVisibility2 = function () {
7887
+ var _this = this;
7888
+ for (var key in this.m_visibleVertices) {
7889
+ var vertex = this.m_visibleVertices[key];
7890
+ vertex.getInEdges().forEach(function (edge, idx) {
7891
+ _this.m_visibleEdges[edge.__hpcc_id] = edge;
7892
+ });
7893
+ vertex.getOutEdges().forEach(function (edge, idx) {
7894
+ _this.m_visibleEdges[edge.__hpcc_id] = edge;
7895
+ });
7896
+ this.calcAncestorVisibility(vertex);
7897
+ }
7898
+ this.calcSemiVisibleVertices();
7899
+ };
7900
+ LocalisedXGMMLWriter.prototype.addSemiVisibleEdge = function (edge) {
7901
+ if (edge && !this.m_visibleEdges[edge.__hpcc_id]) {
7902
+ this.m_visibleEdges[edge.__hpcc_id] = edge;
7903
+ }
7904
+ };
7905
+ LocalisedXGMMLWriter.prototype.addSemiVisibleVertex = function (vertex) {
7906
+ if (!this.m_visibleVertices[vertex.__hpcc_id]) {
7907
+ this.m_semiVisibleVertices[vertex.__hpcc_id] = vertex;
7908
+ this.calcAncestorVisibility(vertex);
7909
+ }
7910
+ };
7911
+ LocalisedXGMMLWriter.prototype.calcSemiVisibleVertices = function () {
7912
+ for (var key in this.m_visibleEdges) {
7913
+ var edge = this.m_visibleEdges[key];
7914
+ var source = edge.getSource();
7915
+ this.addSemiVisibleVertex(source);
7916
+ while (this.noSpills && source.isSpill()) {
7917
+ var inEdges = source.getInEdges();
7918
+ if (inEdges.length) {
7919
+ this.addSemiVisibleEdge(inEdges[0]);
7920
+ source = inEdges[0].getSource();
7921
+ this.addSemiVisibleVertex(source);
7922
+ }
7923
+ else {
7924
+ break;
7925
+ }
7926
+ }
7927
+ var target = edge.getTarget();
7928
+ this.addSemiVisibleVertex(target);
7929
+ while (this.noSpills && target.isSpill()) {
7930
+ var outEdges = target.getOutEdges();
7931
+ if (outEdges.length) {
7932
+ this.addSemiVisibleEdge(outEdges[0]);
7933
+ target = outEdges[0].getTarget();
7934
+ this.addSemiVisibleVertex(target);
7935
+ }
7936
+ else {
7937
+ break;
7938
+ }
7939
+ }
7940
+ }
7941
+ };
7942
+ LocalisedXGMMLWriter.prototype.writeXgmml = function () {
7943
+ var _this = this;
7944
+ this.subgraphVisited(this.graph.subgraphs[0], true);
7945
+ this.graph.edges.forEach(function (edge, idx) {
7946
+ _this.edgeVisited(edge);
7947
+ });
7948
+ };
7949
+ LocalisedXGMMLWriter.prototype.subgraphVisited = function (subgraph, root) {
7950
+ if (root === void 0) { root = false; }
7951
+ if (this.m_visibleSubgraphs[subgraph.__hpcc_id]) {
7952
+ var propsStr = "";
7953
+ this.m_xgmml += root ? "" : "<node id=\"" + subgraph.__hpcc_id + "\"><att><graph>";
7954
+ var xgmmlLen = this.m_xgmml.length;
7955
+ subgraph.walkSubgraphs(this);
7956
+ subgraph.walkVertices(this);
7957
+ if (xgmmlLen === this.m_xgmml.length) {
7958
+ // Add at least one child otherwise subgraphs will render as a vertex ---
7959
+ var vertex = subgraph.__hpcc_vertices[0];
7960
+ if (vertex) {
7961
+ this.m_xgmml += this.buildVertexString(vertex, true);
7962
+ }
7963
+ }
7964
+ var props = subgraph.getProperties();
7965
+ for (var key in props) {
7966
+ propsStr += "<att name=\"" + key + "\" value=\"" + xmlEncode(props[key]) + "\"/>";
7967
+ }
7968
+ this.m_xgmml += root ? "" : "</graph></att>" + propsStr + "</node>";
7969
+ }
7970
+ return false;
7971
+ };
7972
+ LocalisedXGMMLWriter.prototype.vertexVisited = function (vertex) {
7973
+ if (this.m_visibleVertices[vertex.__hpcc_id]) {
7974
+ this.m_xgmml += this.buildVertexString(vertex, false);
7975
+ }
7976
+ else if (this.m_semiVisibleVertices[vertex.__hpcc_id]) {
7977
+ this.m_xgmml += this.buildVertexString(vertex, true);
7978
+ }
7979
+ };
7980
+ LocalisedXGMMLWriter.prototype.edgeVisited = function (edge) {
7981
+ if (this.m_visibleEdges[edge.__hpcc_id]) {
7982
+ this.m_xgmml += this.buildEdgeString(edge);
7983
+ }
7984
+ };
7985
+ return LocalisedXGMMLWriter;
7986
+ }());
7987
+ var GraphItem = /** @class */ (function () {
7988
+ function GraphItem(graph, id) {
7989
+ this.__hpcc_graph = graph;
7990
+ this.__hpcc_id = id;
7991
+ this._globalID = id;
7992
+ }
7993
+ GraphItem.prototype.getProperties = function () {
7994
+ var retVal = {};
7995
+ for (var key in this) {
7996
+ if (key.indexOf("__") !== 0 && this.hasOwnProperty(key)) {
7997
+ retVal[key] = this[key];
7998
+ }
7999
+ }
8000
+ return retVal;
8001
+ };
8002
+ return GraphItem;
8003
+ }());
8004
+ var Subgraph = /** @class */ (function (_super) {
8005
+ __extends(Subgraph, _super);
8006
+ function Subgraph(graph, id) {
8007
+ var _this = _super.call(this, graph, id) || this;
8008
+ _this._globalType = id === "0" ? "Graph" : "Cluster";
8009
+ _this.__hpcc_subgraphs = [];
8010
+ _this.__hpcc_vertices = [];
8011
+ _this.__hpcc_edges = [];
8012
+ _this.id = id;
8013
+ return _this;
8014
+ }
8015
+ Subgraph.prototype.addSubgraph = function (subgraph) {
8016
+ subgraph.__hpcc_parent = this;
8017
+ if (!this.__hpcc_subgraphs.some(function (subgraph2) { return subgraph === subgraph2; })) {
8018
+ this.__hpcc_subgraphs.push(subgraph);
8019
+ }
8020
+ };
8021
+ Subgraph.prototype.addVertex = function (vertex) {
8022
+ vertex.__hpcc_parent = this;
8023
+ if (!this.__hpcc_vertices.some(function (vertex2) { return vertex === vertex2; })) {
8024
+ this.__hpcc_vertices.push(vertex);
8025
+ }
8026
+ };
8027
+ Subgraph.prototype.removeVertex = function (vertex) {
8028
+ this.__hpcc_vertices = this.__hpcc_vertices.filter(function (vertex2) { return vertex !== vertex2; });
8029
+ };
8030
+ Subgraph.prototype.addEdge = function (edge) {
8031
+ edge.__hpcc_parent = this;
8032
+ if (!this.__hpcc_edges.some(function (edge2) { return edge === edge2; })) {
8033
+ this.__hpcc_edges.push(edge);
8034
+ }
8035
+ };
8036
+ Subgraph.prototype.removeEdge = function (edge) {
8037
+ this.__hpcc_edges = this.__hpcc_edges.filter(function (edge2) { return edge !== edge2; });
8038
+ };
8039
+ Subgraph.prototype.remove = function () {
8040
+ var _this = this;
8041
+ this.__hpcc_subgraphs.forEach(function (subgraph) { return subgraph.__hpcc_parent = _this.__hpcc_parent; });
8042
+ this.__hpcc_vertices.forEach(function (vertex) { return vertex.__hpcc_parent = _this.__hpcc_parent; });
8043
+ this.__hpcc_edges.forEach(function (edge) { return edge.__hpcc_parent = _this.__hpcc_parent; });
8044
+ delete this.__hpcc_parent;
8045
+ this.__hpcc_graph.removeItem(this);
8046
+ };
8047
+ Subgraph.prototype.walkSubgraphs = function (visitor) {
8048
+ this.__hpcc_subgraphs.forEach(function (subgraph, idx) {
8049
+ if (visitor.subgraphVisited(subgraph)) {
8050
+ subgraph.walkSubgraphs(visitor);
8051
+ }
8052
+ });
8053
+ };
8054
+ Subgraph.prototype.walkVertices = function (visitor) {
8055
+ this.__hpcc_vertices.forEach(function (vertex, idx) {
8056
+ visitor.vertexVisited(vertex);
8057
+ });
8058
+ };
8059
+ return Subgraph;
8060
+ }(GraphItem));
8061
+ var Vertex = /** @class */ (function (_super) {
8062
+ __extends(Vertex, _super);
8063
+ function Vertex(graph, id) {
8064
+ var _this = _super.call(this, graph, id) || this;
8065
+ _this._globalType = "Vertex";
8066
+ return _this;
8067
+ }
8068
+ Vertex.prototype.isSpill = function () {
8069
+ return this._isSpill;
8070
+ };
8071
+ Vertex.prototype.remove = function () {
8072
+ var _a;
8073
+ var inVertices = this.getInVertices();
8074
+ if (inVertices.length <= 1) {
8075
+ console.warn(this.__hpcc_id + ": remove only supports single or zero inputs activities...");
8076
+ }
8077
+ this.getInEdges().forEach(function (edge) {
8078
+ edge.remove();
8079
+ });
8080
+ this.getOutEdges().forEach(function (edge) {
8081
+ edge.setSource(inVertices[0]);
8082
+ });
8083
+ (_a = this.__hpcc_parent) === null || _a === void 0 ? void 0 : _a.removeVertex(this);
8084
+ this.__hpcc_graph.removeItem(this);
8085
+ };
8086
+ Vertex.prototype.getInVertices = function () {
8087
+ return this.getInEdges().map(function (edge) {
8088
+ return edge.getSource();
8089
+ });
8090
+ };
8091
+ Vertex.prototype.getInEdges = function () {
8092
+ var _this = this;
8093
+ return this.__hpcc_graph.edges.filter(function (edge) {
8094
+ return edge.getTarget() === _this;
8095
+ });
8096
+ };
8097
+ Vertex.prototype.getOutVertices = function () {
8098
+ return this.getOutEdges().map(function (edge) {
8099
+ return edge.getTarget();
8100
+ });
8101
+ };
8102
+ Vertex.prototype.getOutEdges = function () {
8103
+ var _this = this;
8104
+ return this.__hpcc_graph.edges.filter(function (edge) {
8105
+ return edge.getSource() === _this;
8106
+ });
8107
+ };
8108
+ return Vertex;
8109
+ }(GraphItem));
8110
+ var Edge = /** @class */ (function (_super) {
8111
+ __extends(Edge, _super);
8112
+ function Edge(graph, id) {
8113
+ var _this = _super.call(this, graph, id) || this;
8114
+ _this._globalType = "Edge";
8115
+ _this._globalType = "Edge";
8116
+ return _this;
8117
+ }
8118
+ Edge.prototype.remove = function () {
8119
+ var _this = this;
8120
+ this.__hpcc_graph.subgraphs.forEach(function (subgraph) {
8121
+ subgraph.removeEdge(_this);
8122
+ });
8123
+ this.__hpcc_graph.removeItem(this);
8124
+ };
8125
+ Edge.prototype.getSource = function () {
8126
+ return this.__hpcc_graph.idx[this._sourceActivity || this.source];
8127
+ };
8128
+ Edge.prototype.setSource = function (source) {
8129
+ if (this._sourceActivity) {
8130
+ this._sourceActivity = source.__hpcc_id;
8131
+ }
8132
+ else if (this.source) {
8133
+ this.source = source.__hpcc_id;
8134
+ }
8135
+ if (this.__widget) {
8136
+ this.__widget.setSource(this.getSource().__widget);
8137
+ }
8138
+ };
8139
+ Edge.prototype.getTarget = function () {
8140
+ return this.__hpcc_graph.idx[this._targetActivity || this.target];
8141
+ };
8142
+ return Edge;
8143
+ }(GraphItem));
8144
+ var QueryGraph = /** @class */ (function () {
8145
+ function QueryGraph() {
8146
+ this.idx = {};
8147
+ this.subgraphs = [];
8148
+ this.vertices = [];
8149
+ this.edges = [];
8150
+ this.xgmml = "";
8151
+ this.clear();
8152
+ }
8153
+ QueryGraph.prototype.clear = function () {
8154
+ this.xgmml = "";
8155
+ this.idx = {};
8156
+ this.subgraphs = [];
8157
+ this.vertices = [];
8158
+ this.edges = [];
8159
+ };
8160
+ QueryGraph.prototype.load = function (xgmml) {
8161
+ this.clear();
8162
+ this.merge(xgmml);
8163
+ };
8164
+ QueryGraph.prototype.merge = function (xgmml) {
8165
+ this.xgmml = xgmml;
8166
+ var parser = new DOMParser();
8167
+ var dom = parser.parseFromString(xgmml, "text/xml");
8168
+ this.walkDocument(dom.documentElement, "0");
8169
+ };
8170
+ QueryGraph.prototype.isSubgraph = function (item) {
8171
+ return item instanceof Subgraph;
8172
+ };
8173
+ QueryGraph.prototype.isVertex = function (item) {
8174
+ return item instanceof Vertex;
8175
+ };
8176
+ QueryGraph.prototype.isEdge = function (item) {
8177
+ return item instanceof Edge;
8178
+ };
8179
+ QueryGraph.prototype.getGlobalType = function (item) {
8180
+ if (item instanceof Vertex) {
8181
+ return GRAPH_TYPE.VERTEX;
8182
+ }
8183
+ else if (item instanceof Edge) {
8184
+ return GRAPH_TYPE.EDGE;
8185
+ }
8186
+ else if (item instanceof Subgraph) {
8187
+ return GRAPH_TYPE.SUBGRAPH;
8188
+ }
8189
+ else if (item instanceof QueryGraph) {
8190
+ return GRAPH_TYPE.GRAPH;
8191
+ }
8192
+ return GRAPH_TYPE.UNKNOWN;
8193
+ };
8194
+ QueryGraph.prototype.getGlobalTypeString = function (item) {
8195
+ if (item instanceof Vertex) {
8196
+ return GRAPH_TYPE_STRING.VERTEX;
8197
+ }
8198
+ else if (item instanceof Edge) {
8199
+ return GRAPH_TYPE_STRING.EDGE;
8200
+ }
8201
+ else if (item instanceof Subgraph) {
8202
+ return GRAPH_TYPE_STRING.SUBGRAPH;
8203
+ }
8204
+ else if (item instanceof QueryGraph) {
8205
+ return GRAPH_TYPE_STRING.GRAPH;
8206
+ }
8207
+ return GRAPH_TYPE_STRING.UNKNOWN;
8208
+ };
8209
+ QueryGraph.prototype.getItem = function (docNode, id) {
8210
+ if (!this.idx[id]) {
8211
+ switch (docNode.tagName) {
8212
+ case "graph":
8213
+ var subgraph = new Subgraph(this, id);
8214
+ this.subgraphs.push(subgraph);
8215
+ this.idx[id] = subgraph;
8216
+ break;
8217
+ case "node":
8218
+ var vertex = new Vertex(this, id);
8219
+ this.vertices.push(vertex);
8220
+ this.idx[id] = vertex;
8221
+ break;
8222
+ case "edge":
8223
+ var edge = new Edge(this, id);
8224
+ this.edges.push(edge);
8225
+ this.idx[id] = edge;
8226
+ break;
8227
+ default:
8228
+ console.warn("Graph.getItem - Unknown Node Type!");
8229
+ break;
8230
+ }
8231
+ }
8232
+ var retVal = this.idx[id];
8233
+ Array.from(docNode.attributes).forEach(function (attr) {
8234
+ safeAssign(retVal, attr.name, attr.value);
8235
+ });
8236
+ return retVal;
8237
+ };
8238
+ QueryGraph.prototype.removeItem = function (item) {
8239
+ delete this.idx[item.__hpcc_id];
8240
+ if (item instanceof Subgraph) {
8241
+ this.subgraphs = this.subgraphs.filter(function (subgraph) {
8242
+ return item !== subgraph;
8243
+ });
8244
+ }
8245
+ else if (item instanceof Vertex) {
8246
+ this.vertices = this.vertices.filter(function (vertex) {
8247
+ return item !== vertex;
8248
+ });
8249
+ }
8250
+ else if (item instanceof Edge) {
8251
+ this.edges = this.edges.filter(function (edge) {
8252
+ return item !== edge;
8253
+ });
8254
+ }
8255
+ };
8256
+ QueryGraph.prototype.getChildByTagName = function (docNode, tagName) {
8257
+ var retVal = null;
8258
+ Array.from(docNode.childNodes).some(function (childNode, idx) {
8259
+ if (childNode.tagName === tagName) {
8260
+ retVal = childNode;
8261
+ return true;
8262
+ }
8263
+ });
8264
+ return retVal;
8265
+ };
8266
+ QueryGraph.prototype.walkDocument = function (docNode, id) {
8267
+ var _this = this;
8268
+ var retVal = this.getItem(docNode, id);
8269
+ docNode.childNodes.forEach(function (childNode, idx) {
8270
+ switch (childNode.nodeType) {
8271
+ case 1: // ELEMENT_NODE
8272
+ switch (childNode.tagName) {
8273
+ case "graph":
8274
+ break;
8275
+ case "node":
8276
+ var isSubgraph = false;
8277
+ var attNode = _this.getChildByTagName(childNode, "att");
8278
+ if (attNode) {
8279
+ var graphNode = _this.getChildByTagName(attNode, "graph");
8280
+ if (graphNode) {
8281
+ isSubgraph = true;
8282
+ var subgraph = _this.walkDocument(graphNode, childNode.getAttribute("id"));
8283
+ retVal.addSubgraph(subgraph);
8284
+ }
8285
+ }
8286
+ if (!isSubgraph) {
8287
+ var vertex = _this.walkDocument(childNode, childNode.getAttribute("id"));
8288
+ retVal.addVertex(vertex);
8289
+ }
8290
+ break;
8291
+ case "att":
8292
+ var name_1 = childNode.getAttribute("name");
8293
+ var uname = "_" + name_1;
8294
+ var value = childNode.getAttribute("value");
8295
+ if (name_1.indexOf("Time") === 0) {
8296
+ safeAssign(retVal, uname, value);
8297
+ safeAssign(retVal, name_1, "" + espTime2Seconds(value));
8298
+ }
8299
+ else if (name_1.indexOf("Size") === 0) {
8300
+ safeAssign(retVal, uname, value);
8301
+ safeAssign(retVal, name_1, "" + espSize2Bytes(value));
8302
+ }
8303
+ else if (name_1.indexOf("Skew") === 0) {
8304
+ safeAssign(retVal, uname, value);
8305
+ safeAssign(retVal, name_1, "" + espSkew2Number(value));
8306
+ }
8307
+ else {
8308
+ safeAssign(retVal, name_1, value);
8309
+ }
8310
+ break;
8311
+ case "edge":
8312
+ var edge = _this.walkDocument(childNode, childNode.getAttribute("id"));
8313
+ if (edge.NumRowsProcessed !== undefined) {
8314
+ edge._eclwatchCount = edge.NumRowsProcessed.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
8315
+ }
8316
+ else if (edge.Count !== undefined) {
8317
+ edge._eclwatchCount = edge.Count.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
8318
+ }
8319
+ else if (edge.count !== undefined) {
8320
+ edge._eclwatchCount = edge.count.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
8321
+ }
8322
+ if (edge.inputProgress) {
8323
+ edge._eclwatchInputProgress = "[" + edge.inputProgress.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "]";
8324
+ }
8325
+ if (edge.SkewMaxRowsProcessed && edge.SkewMinRowsProcessed) {
8326
+ edge._eclwatchSkew = "+" + edge.SkewMaxRowsProcessed + ", " + edge.SkewMinRowsProcessed;
8327
+ }
8328
+ if (edge._dependsOn) ;
8329
+ else if (edge._childGraph) ;
8330
+ else if (edge._sourceActivity || edge._targetActivity) {
8331
+ edge._isSpill = true;
8332
+ var source = edge.getSource();
8333
+ source._isSpill = true;
8334
+ var target = edge.getTarget();
8335
+ target._isSpill = true;
8336
+ }
8337
+ retVal.addEdge(edge);
8338
+ break;
8339
+ }
8340
+ break;
8341
+ }
8342
+ });
8343
+ return retVal;
8344
+ };
8345
+ QueryGraph.prototype.removeSubgraphs = function () {
8346
+ var subgraphs = __spreadArray([], this.subgraphs, true);
8347
+ subgraphs.forEach(function (subgraph) {
8348
+ if (subgraph.__hpcc_parent instanceof Subgraph) {
8349
+ subgraph.remove();
8350
+ }
8351
+ });
8352
+ };
8353
+ QueryGraph.prototype.removeSpillVertices = function () {
8354
+ var vertices = __spreadArray([], this.vertices, true);
8355
+ vertices.forEach(function (vertex) {
8356
+ if (vertex.isSpill()) {
8357
+ vertex.remove();
8358
+ }
8359
+ });
8360
+ };
8361
+ QueryGraph.prototype.getLocalisedXGMML = function (items, localisationDepth, localisationDistance, noSpills) {
8362
+ var xgmmlWriter = new LocalisedXGMMLWriter(this);
8363
+ xgmmlWriter.calcVisibility(items, localisationDepth, localisationDistance, noSpills);
8364
+ xgmmlWriter.writeXgmml();
8365
+ return "<graph>" + xgmmlWriter.m_xgmml + "</graph>";
8366
+ };
8367
+ return QueryGraph;
8368
+ }());
8369
+
7606
8370
  var logger$2 = scopedLogger("@hpcc-js/comms/ecl/query.ts");
8371
+ var siFormatter = format("~s");
8372
+ function isNumber(n) {
8373
+ return !isNaN(parseFloat(n)) && !isNaN(n - 0);
8374
+ }
7607
8375
  var QueryCache = /** @class */ (function (_super) {
7608
8376
  __extends(QueryCache, _super);
7609
8377
  function QueryCache() {
@@ -7879,6 +8647,66 @@ var Query = /** @class */ (function (_super) {
7879
8647
  Query.prototype.fetchSummaryStats = function () {
7880
8648
  return this.wsWorkunitsService.WUQueryGetSummaryStats({ Target: this.QuerySet, QueryId: this.QueryId });
7881
8649
  };
8650
+ Query.prototype.fetchGraph = function (GraphName, SubGraphId) {
8651
+ if (GraphName === void 0) { GraphName = ""; }
8652
+ if (SubGraphId === void 0) { SubGraphId = ""; }
8653
+ return this.wsWorkunitsService.WUQueryGetGraph({ Target: this.QuerySet, QueryId: this.QueryId, GraphName: GraphName, SubGraphId: SubGraphId }).then(function (response) {
8654
+ var _a;
8655
+ var graph = new QueryGraph();
8656
+ var first = true;
8657
+ for (var _i = 0, _b = ((_a = response === null || response === void 0 ? void 0 : response.Graphs) === null || _a === void 0 ? void 0 : _a.ECLGraphEx) || []; _i < _b.length; _i++) {
8658
+ var graphItem = _b[_i];
8659
+ if (first) {
8660
+ graph.load(graphItem.Graph);
8661
+ first = false;
8662
+ }
8663
+ else {
8664
+ graph.merge(graphItem.Graph);
8665
+ }
8666
+ }
8667
+ return graph;
8668
+ });
8669
+ };
8670
+ Query.prototype.fetchDetailsNormalized = function (request) {
8671
+ if (request === void 0) { request = {}; }
8672
+ var wu = Workunit.attach(this.wsWorkunitsService, this.Wuid);
8673
+ if (wu) {
8674
+ return Promise.all([this.fetchGraph(), wu.fetchDetailsMeta(), wu.fetchDetailsRaw(request)]).then(function (promises) {
8675
+ var graph = promises[0];
8676
+ var meta = promises[1];
8677
+ var metrics = promises[2];
8678
+ var data = metrics.map(function (metric) {
8679
+ if (metric.Id[0] === "a" || metric.Id[0] === "e") {
8680
+ var item = graph.idx[metric.Id.substring(1)];
8681
+ var _loop_1 = function (key) {
8682
+ if (key.charAt(0) !== "_" && key.charAt(0) === key.charAt(0).toUpperCase() && (typeof item[key] === "string" || typeof item[key] === "number" || typeof item[key] === "boolean")) {
8683
+ if (!metric.Properties.Property.some(function (row) { return row.Name === key; })) {
8684
+ var isNum = isNumber(item[key]);
8685
+ var rawValue = isNum ? parseFloat(item[key]) : item[key];
8686
+ var formatted = item[key];
8687
+ if (key.indexOf("Time") >= 0) {
8688
+ rawValue = rawValue / 1000000000;
8689
+ formatted = siFormatter(rawValue) + "s";
8690
+ }
8691
+ metric.Properties.Property.push({
8692
+ Name: key,
8693
+ RawValue: rawValue,
8694
+ Formatted: formatted
8695
+ });
8696
+ }
8697
+ }
8698
+ };
8699
+ for (var key in item) {
8700
+ _loop_1(key);
8701
+ }
8702
+ }
8703
+ return metric;
8704
+ });
8705
+ return wu.normalizeDetails(meta, data);
8706
+ });
8707
+ }
8708
+ return Promise.resolve({ meta: undefined, columns: undefined, data: undefined });
8709
+ };
7882
8710
  Query.prototype.submit = function (request) {
7883
8711
  var _a;
7884
8712
  return __awaiter(this, void 0, void 0, function () {
@@ -9678,7 +10506,7 @@ function locateClientTools(overridePath, build, cwd, includeFolders, legacyMode,
9678
10506
  }
9679
10507
 
9680
10508
  // DOM Parser polyfill ---
9681
- root.DOMParser = DOMParser;
10509
+ root.DOMParser = DOMParser$1;
9682
10510
  if (typeof root.fetch === "undefined") {
9683
10511
  // NodeJS < v18 ---
9684
10512
  root.fetch = fetch$1;
@@ -9726,5 +10554,5 @@ if (typeof root.btoa === "undefined") {
9726
10554
  };
9727
10555
  }
9728
10556
 
9729
- export { AccessService, AccountService, Activity, Attr, Attribute, BUILD_VERSION, BaseScope, ClientTools, CloudService, CodesignService, Connection, DFUArrayActions, DFUChangeProtection, DFUChangeRestriction, DFUDefFileFormat, DFUService, DFUWorkunit, DFUWorkunitCache, DFUXRefService, DaliService, Definition, ECLGraph, ECLScope, ESPConnection, ESPExceptions, EclService, EclccErrors, ElkService, EnvchkErrors, Errors, Field, File, FileSpray, FileSprayService, FileSprayStates, Folder, GlobalResultCache, GraphCache, Import, LocalWorkunit, LogaccessService, LogicalFile, LogicalFileCache, Machine, MachineCache, MachineService, PKG_NAME, PKG_VERSION, PackageProcessService, PropertyType, Query, RelatedProperty, Resource, ResourcesService, Result, ResultCache, SMCService, Scope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex, Service, Source, SourceFile, Store, StoreCache, StoreService, TargetCluster, TargetClusterCache, Timer, Topology, TopologyCache, TopologyService, ValueChangedMessage, Version, WUStateID$1 as WUStateID, WUUpdate, Workspace, Workunit, WorkunitCache, WorkunitsService, WorkunitsServiceEx, WsAccess, WsDfu, WsLogaccess, WsSMC, WsTopology, XGMMLEdge, XGMMLGraph, XGMMLSubgraph, XGMMLVertex, XSDNode, XSDSchema, XSDSimpleType, XSDXMLNode, attachWorkspace, clearAllClientToolsCache, createConnection, createGraph, createXGMMLGraph, defaultTargetCluster, deserializeResponse, get, hookSend, instanceOfIConnection, instanceOfIOptions, isArray, isECLResult, isExceptions, isWUInfoWorkunit, isWUQueryECLWorkunit, jsonp, locateAllClientTools, locateClientTools, parseXSD, parseXSD2, post, qualifiedIDBoundary, send, serializeRequest, setTransportFactory, splitMetric, targetClusters, walkXmlJson };
10557
+ export { AccessService, AccountService, Activity, Attr, Attribute, BUILD_VERSION, BaseScope, ClientTools, CloudService, CodesignService, Connection, DFUArrayActions, DFUChangeProtection, DFUChangeRestriction, DFUDefFileFormat, DFUService, DFUWorkunit, DFUWorkunitCache, DFUXRefService, DaliService, Definition, ECLGraph, ECLScope, ESPConnection, ESPExceptions, EclService, EclccErrors, ElkService, EnvchkErrors, Errors, Field, File, FileSpray, FileSprayService, FileSprayStates, Folder, GlobalResultCache, GraphCache, Import, LocalWorkunit, LogaccessService, LogicalFile, LogicalFileCache, Machine, MachineCache, MachineService, PKG_NAME, PKG_VERSION, PackageProcessService, PropertyType, Query, QueryGraph, RelatedProperty, Resource, ResourcesService, Result, ResultCache, SMCService, Scope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex, Service, Source, SourceFile, Store, StoreCache, StoreService, TargetCluster, TargetClusterCache, Timer, Topology, TopologyCache, TopologyService, ValueChangedMessage, Version, WUStateID$1 as WUStateID, WUUpdate, Workspace, Workunit, WorkunitCache, WorkunitsService, WorkunitsServiceEx, WsAccess, WsDfu, WsLogaccess, WsSMC, WsTopology, WsWorkunits, XGMMLEdge, XGMMLGraph, XGMMLSubgraph, XGMMLVertex, XSDNode, XSDSchema, XSDSimpleType, XSDXMLNode, attachWorkspace, clearAllClientToolsCache, createConnection, createGraph, createXGMMLGraph, defaultTargetCluster, deserializeResponse, get, hookSend, instanceOfIConnection, instanceOfIOptions, isArray, isECLResult, isExceptions, isWUInfoWorkunit, isWUQueryECLWorkunit, jsonp, locateAllClientTools, locateClientTools, parseXSD, parseXSD2, post, qualifiedIDBoundary, send, serializeRequest, setTransportFactory, splitMetric, targetClusters, walkXmlJson };
9730
10558
  //# sourceMappingURL=index.es6.js.map