diff --git a/README.md b/README.md index fd7e3e3..1e12363 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Usage Using streams: ```javascript -var cplParser = require('node-cpl'); +var cplParser = require('cpl'); var fs = require('fs'); var cplStream = cplParser.createStream(); @@ -26,7 +26,7 @@ cplStream.on('cpl', function(cpl) { Using callbacks: ```javascript -cplParser.parseCPL(fs.readFileSync('cpl.xml', 'UTF-8'), function(err, cpl) { +cplParser.parse(fs.readFileSync('cpl.xml', 'UTF-8'), function(err, cpl) { if (err) return console.error(err); console.log(cpl); }); @@ -35,7 +35,8 @@ cplParser.parseCPL(fs.readFileSync('cpl.xml', 'UTF-8'), function(err, cpl) { The CPL object takes the form: ```json -{ +{ + "isCPL": true, "id": "7b1e5649-ff30-489b-b74a-c2e1060bb590", "text": "AIDA-ACT1_FTR_F_IT-DE_DE_51_2K_20090217_AAM", "issueDate": "2009-02-04T10:34:09.000Z", @@ -60,6 +61,10 @@ The CPL object takes the form: } ``` +Non CPL .xml files +------------------ +Any files parsed that are not a valid CPL will return an object with a field "isCPL" set to false. This can be useful to determine whether an .xml file is a CPL or not. + License (MIT) ------------- diff --git a/lib/parse_cpl.js b/lib/parse_cpl.js index 60e1b05..185a2d6 100644 --- a/lib/parse_cpl.js +++ b/lib/parse_cpl.js @@ -31,12 +31,28 @@ var createStream = function(options) { options = {}; var saxStream = sax.createStream(false, {trim: true, xmlns: true}); - var cpl = {duration: 0, frames: 0, reels: []}; + var cpl = {isCPL: true, duration: 0, frames: 0, reels: []}; var tag = null; var level = 'root'; + var firstTag = true; saxStream.on('opentag', function (node) { tag = node.local; + + //Test whether we have an CompositionPlaylist tag as the first tag. + //If not its not a CPL. + if (firstTag){ + if (tag !== 'COMPOSITIONPLAYLIST'){ + //TODO: Investigate cleaniest way to close the stream at this point, + //so we dont go through the rest of the file needlessly. + cpl.isCPL = false; + } + firstTag = false; + } + + //If we know we not looking at a cpl, ignore all events till end. + if (!cpl.isCPL) return; + switch (tag) { case 'REEL': level = 'reel'; @@ -52,11 +68,12 @@ var createStream = function(options) { case 'MAINSTEREOSCOPICPICTURE': cpl.threeD = true; break; + } - } }); saxStream.on('closetag', function (tag) { + if (!cpl.isCPL) return; // Are we leaving a reel? switch (tag) { case 'REEL': @@ -75,6 +92,7 @@ var createStream = function(options) { }); saxStream.on('text', function (t) { + if (!cpl.isCPL) return; var currentReel = cpl.reels.last(); if (level === 'root') switch (tag) { diff --git a/test/cpl_parser_test.js b/test/cpl_parser_test.js index 78fc09e..9964397 100644 --- a/test/cpl_parser_test.js +++ b/test/cpl_parser_test.js @@ -28,6 +28,7 @@ var getCPLFiles = function() { */ var cpl1Asserts = function(cpl) { assert(cpl); + assert(cpl.isCPL); assert.equal(cpl.id, '7b1e5649-ff30-489b-b74a-c2e1060bb590'); assert.equal(cpl.issuer, 'Arts Alliance Media'); assert.equal(cpl.issueDate.getTime(), new Date('2009-02-04T10:34:09-00:00').getTime()); @@ -54,6 +55,7 @@ var cpl1Asserts = function(cpl) { */ var cpl1TextAsserts = function(cpl) { assert(cpl); + assert(cpl.isCPL); assert.equal(cpl.name, 'AIDA-ACT1'); assert.equal(cpl.type, 'feature'); assert.equal(cpl.aspectRatio, 'flat'); @@ -72,6 +74,7 @@ var cpl1Asserts = function(cpl) { */ var cpl2Asserts = function(cpl) { assert(cpl); + assert(cpl.isCPL); assert.equal(cpl.id, '3a4a95d1-6947-4752-8c73-57fc80111973'); assert.equal(cpl.issuer, 'Qube'); assert.equal(cpl.issueDate.getTime(), new Date('2010-03-26T10:35:49+00:00').getTime()); @@ -81,6 +84,11 @@ var cpl2Asserts = function(cpl) { assert.equal(cpl.type, 'feature'); }; +var notCplAssert = function(cpl){ + assert(cpl); + assert.equal(cpl.isCPL, false); +} + /** * CPL parser tests */ @@ -153,5 +161,16 @@ describe('cplParser', function() { }); }); + describe('parseNonCplXML', function() { + it('should parse a Non CPL xml and return an object with a isCPL field as false', function(done){ + var cplStream = cplParser.createStream(); + fs.createReadStream(path.resolve(__dirname, path.join('not_cpls', 'not_cpl.xml'))).pipe(cplStream); + cplStream.on('cpl', function(cpl){ + notCplAssert(cpl); + done(); + }); + }); + }); + }); diff --git a/test/not_cpls/not_cpl.xml b/test/not_cpls/not_cpl.xml new file mode 100644 index 0000000..2930d7a --- /dev/null +++ b/test/not_cpls/not_cpl.xml @@ -0,0 +1,307 @@ + + + + urn:uuid:000fc733-c946-4838-9860-6405398664ef + http://www.smpte-ra.org/430-1/2006/KDM#kdm-key-type + LION-KING-2D_FTR_F_EN-XX_UK-U_51-EN_2K_DI_20110908_TEU_VF ~ KDM for SM SPB MDI MDA MDS FMI FMA.Dolby-CAT745-00000096 + 2012-11-15T15:06:00+00:00 + + dnQualifier=vVfvxXz1gOzEDwm2NoiJtcy4REQ=,CN=.192.168.254.3,OU=.cc-ra-1a.s430-2.ca.cinecert.com,O=.ca.cinecert.com + 38981 + + + + + + dnQualifier=euALhOREgsBlRgEmpIpae/W0gUc=,CN=.DOLBY.DCINEMA.MFGCA3,OU=.DOLBY.DCINEMA.MFGCA3,O=.USLINC + 5296 + + dnQualifier=83dFtC7r82Wk\+zkEjbUIbyhslOM=,CN=SM SPB MDI MDA MDS FMI FMA.Dolby-CAT745-00000096,OU=DolbyMediaBlock,O=.USLINC + + urn:uuid:3d32690f-296d-458d-b12b-e7bf4c8d3784 + LION-KING-2D_FTR_F_EN-XX_UK-U_51-EN_2K_DI_20110908_TEU_VF + 2012-10-05T00:00:00+00:00 + 2013-02-28T23:59:00+00:00 + + urn:uuid:def4ee1d-0446-47de-bb12-3ab541f3944d + + 2jmj7l5rSw0yVb/vlWAYkK/YBwk= + + + + + MDIK + urn:uuid:e6cdd059-ef94-4811-9f9a-7eecf8291e30 + + + MDAK + urn:uuid:5bf7e0de-4720-4888-bb6f-3c472f139352 + + + MDAK + urn:uuid:1a535639-2dab-45cd-80f4-ce49bdcb60ab + + + MDAK + urn:uuid:62dbaebe-883a-4644-b9a5-34b831e86f90 + + + MDAK + urn:uuid:744b2eb4-ab68-4099-9af8-29adb0784693 + + + MDAK + urn:uuid:21538017-24c1-475d-8681-25fa3eef4974 + + + + http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-picture-disable + http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-audio-disable + + + + + + + + + + +Iji5RF1KuTu1xzM/yzEaYJhvCyd0pAdDMDg25VE6w1JDldvS7uhqTDltCaj+2igHKd4KatrCAvb8 +ml53f9HlHML9PnpspZLxPmmw70Fl1rR1+kKUeQTJUMWDjJNDeg0L8DHjeg5Vun0LX9DF13aG1r1M +E7WR01wayUs7kU8zzyOsW0LW++2z9S5vwdNDbxQM36ysWzYlXh2145SVul63VNSEriVKmZb3WLmn +8SLEnf/3nM6u7NbS05mSOibpiDOVAs/PuujnMobvOkYhlyL8BWR6BQZqGxcj+2YvFj+vKgMpsung +DiJ5uc1VJaROnI/ayElhBmeMktCxvTYCrW+9iA== + + + + + + +M7XCVaIRaWJRHvDfOtDlWPKd6pCcvLjI8fUmkm3BebWorajKLmQgP3kQ7g609I7uAD8iljx1gcJL +624KmO+E4xist6jyaf82/lhuxPA8AyK8TzeSvS8zppLWp2eFEIyXPv+nB5TtusE1HCh+wLlcIkUr +U18PnddR9KSd0gepwJAptYqZn3OUPxiYxA/agFiI7L6LjQkKxg/eqZsf2En6pkZuUfG+9yc0kC9x +YsgYbHTo6SIEj1HXgEoV6cHShfPMBx6QUU8FPtD12epbFrkrbqOtr9O9F0Ewij360nIewiHGRyuY +DbD3o+feKkwC8MkWUWrD2ZUBOXY66De9ydtKLw== + + + + + + +We+/H0WhO2DHkiN44unHRzYPfXVswheqBn3C3ZtB1z+NGsbxSKbrTiqlcWhNX1Wl2BDFyxAV17t+ +jGiy7kFLruPFxsh0qlCMGoDAUnpP2pdtYYQu6/e+9pXz5VeePomY+1/DTFyU1C0X7b/v1C216G9Z +65hakz+2LtSA9Df513rHrmhs0HRC2FEM8ADML3Vpe9S9Kqzp79AJUuFF27ZJYBi0tAQLO3FOpbFc +O+1qQQGoJZqDD2rwi0hhNpNpnvUUp9koA9OmltmFf5Z1KHu9yuOSd9gbWDcLp0bBpo+mtigCO5Fs +vttnwpUvnuFRU8z7SupREUj8xwJTyITkY5YHvw== + + + + + + +amyjHucar0HM8SLVL3FhneMTsnafFB3oOPGDK/NYzFPEuoFDKS1KgkNYSeg3xIKuKSfPrXieaODQ +4ctGzKAtbtXFmdkpnEUgvoWxQbJcgkElFT6QN9PRSKifQuQHj/j61nI6xvE3VlbFshAwJogX9wak +qSbTsZEa+YMvRE5zldqeEeUvbp9K2/+GWQRtaMOyUbPn8PWtyXKv0qUIqYCMv3uvNgrdGqpPtiag +yNCXNN8omkmyaCS03MrJDp6sWWKPpkE3NueBnlP18XFYbv1yBl7y+DzSJw+kNS6J0T9OzRtkbpxK +6Mu4Bzp+hxKRgSG1fK0QbcDpiv8wM0T+Gv++dw== + + + + + + +dDcY/P6BsIt8hOZC+0xMg79PS1S99slEUrCmRQa9DrpQdg/O5iiOwYoLXwZyIOSVOqzEpstibNNh +FifsuT7jk0Tecma6jqXdmvc8CmkZ2sXaI0U0oVu4CIcKZIbq/hhvQQLaPhgflHVWtm02wrNhCcM3 +Il2aGrkEM1AuLlCZJkR5aMv/LSRr034j2kJLtOpomFBTZL++ONI5uAB9rSAI1Ip++Gf6IqCbRFPZ +9DP1aADs11LgIzmv1CgvV5rR1+ng8whJdJUGXe3NkYkrOZjjC29DhzxQAhIixER+97BuToKoHk52 +ZJ1SwBz/AVEkj+K45luTj2nvOcTFB4Z/3+9QiA== + + + + + + +MHzRUvwxdstuqWLkuLLlLVye0iwYTL0Vh+/aG+kfgjMNs+2/Ndj/NSSNsixhgROwkLQqoYyRwx6y +XdUXa3CgwJlZT6ker91WPXTgno9RAiaDvseH3XlXeag5D/UPgVtqUvugnkkCdNJBjhCoO76gPdcK +TdftxoRh2wD+Iwybg/HJ/hkziSmRhu4OI/HyMDBDVWkZ4+/vq2k2IPV5UaASZK7XMzlr0ec2/el+ +GlAXOUcCV9uzchY5nwaRGXC1PI+1dMlKQHq2Ou8H0kjupDrGR0ftEDfxTX01tLKz/QooNsM8tdsr ++EKTi7vyIdrMOv6BI5kHGElWAujcOxw9fMZTnw== + + + + + + + + + oUffSHkJYguRP3rRE6PvoaDdIAtAK31Jg6B+uJap77o= + + + + iGdeGfhks26Ic3Vh7+UJEBlX8Hq+LZNggpyadgEgkGw= + + + WqyaSBfaA3ypXXuNesYYB6lVxgZs3FgMLZwhMz5pdDyRdooPJR1sroVeI7/CPAXd +JB+QyymfUQLgFgfZkcOKvT1LHEfRroFebbQc9ZhVAvXz7m3+hVOX5K+9FcX2AU6k +jCMQymdUwg1qOH+k+HxHuzJVwHOszI8y62Uaa/phofj0/lxNDE8tr5FTHblaHDZ0 +Nt6WIgLka3XKEUbQmU3DB5b8jajAQJm884mQon3benYu7NbA9sa3ePdLJsqI9Weu +5CmcSOEIHWBSFMIRkweBj51RopW1vXQeCeyy/5+Cefm586uw7MBx76kKYeqBiHPt +34za9OuWtsTQUxQyUR7iZw== + + + +dnQualifier=vVfvxXz1gOzEDwm2NoiJtcy4REQ=,CN=.192.168.254.3,OU=.cc-ra-1a.s430-2.ca.cinecert.com,O=.ca.cinecert.com +38981 + +MIIEeDCCA2CgAwIBAgIDAJhFMA0GCSqGSIb3DQEBCwUAMIGGMRkwFwYDVQQKExAu +Y2EuY2luZWNlcnQuY29tMSkwJwYDVQQLEyAuY2MtcmEtMWEuczQzMC0yLmNhLmNp +bmVjZXJ0LmNvbTEXMBUGA1UEAxMOLjE5Mi4xNjguMjU0LjMxJTAjBgNVBC4THHZW +ZnZ4WHoxZ096RUR3bTJOb2lKdGN5NFJFUT0wHhcNMDgwNjE5MjI0NzI2WhcNMjQx +MjMwMDAwMDAwWjCBgjEZMBcGA1UEChMQLmNhLmNpbmVjZXJ0LmNvbTEpMCcGA1UE +CxMgLmNjLXJhLTFhLnM0MzAtMi5jYS5jaW5lY2VydC5jb20xEzARBgNVBAMTClNN +LmRlZmF1bHQxJTAjBgNVBC4THHF0WXI1QzBuMkZBNy9ZSkNXeTBwSno4eEJwTT0w +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkNr9C7ahGRVajMzt0cIp0 +7d6V4h4DkzLTbFTMYPU0xXqmPGLmvpIZ66ooZfm7dJcokEdpOh6VgfNBHnKmsQUx +cg8F1ofKgR10bzA858wxscaZLiuidlxnvX8ih/0lCYvkyQGqBXm0YboVPQz08uyD +VzQPLRBfbHwt/ZCXwAMDLRs5Qlm4uZaSP6R296BxJ0vT7jnfGX42OffZaJlm+uoX +d0vKYLGtywLuR3prGjwtB3iD4NTc3P3W6uKS5AAOAXcefhsYCQNkeYM0iWTFYlo6 +8fZ35Zc4aIsp2MaL0RVquwfN1hRw0+Tuwr0E2c5fB9AkGpFea/VHm85H/JXpWNXv +AgMBAAGjgfAwge0wCwYDVR0PBAQDAgSwMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYE +FKrWK+QtJ9hQO/2CQlstKSc/MQaTMIGwBgNVHSMEgagwgaWAFL1X78V89YDsxA8J +tjaIibXMuEREoYGHpIGEMIGBMRkwFwYDVQQKExAuY2EuY2luZWNlcnQuY29tMSkw +JwYDVQQLEyAuY2MtcmEtMWEuczQzMC0yLmNhLmNpbmVjZXJ0LmNvbTESMBAGA1UE +AxMJLmNjLXJhLTJjMSUwIwYDVQQuExxkRmtrUW9oMWNJekJ1TmJDQjlUV3liaG1L +b0U9ggMAgIIwDQYJKoZIhvcNAQELBQADggEBAGY7W0x3zGauJSGZhjYG8OP3AXN9 +dvRjChn6z1zXRFIlQ9ECmbZBOZTwHYEl1115gJECH6GEHNSPeKUDy9+naeUNdVYm +NL535xA7lwTyRXp+0D2I8VXf0vE/x7Q8rEkYLlQ+JvPr4YmiFcbit24/U55ehOJ9 +2pVdtpglh0nmtd1mvvPjY3+ZtIkc6It82yV13AV1aj7pXUz4ec6ZnOQ5GI9UFQW/ +b5hObV8X7VOb9jIKL3zzLwKuSgcjpDoIqrynEoC+x2PWLkmS6tYDZxasixwbUBLY +cAcS6BoN9Qmn188npCiiruBkwPyMs0TUIT3h0pt6+tjp3c9dDCGv2tjgpD8= + + + + +dnQualifier=dFkkQoh1cIzBuNbCB9TWybhmKoE=,CN=.cc-ra-2c,OU=.cc-ra-1a.s430-2.ca.cinecert.com,O=.ca.cinecert.com +32898 + +MIIEcTCCA1mgAwIBAgIDAICCMA0GCSqGSIb3DQEBCwUAMIGBMRkwFwYDVQQKExAu +Y2EuY2luZWNlcnQuY29tMSkwJwYDVQQLEyAuY2MtcmEtMWEuczQzMC0yLmNhLmNp +bmVjZXJ0LmNvbTESMBAGA1UEAxMJLmNjLXJhLTJjMSUwIwYDVQQuExxkRmtrUW9o +MWNJekJ1TmJDQjlUV3liaG1Lb0U9MB4XDTA4MDYxOTIyNDY1MVoXDTI0MTIzMTAw +MDAwMFowgYYxGTAXBgNVBAoTEC5jYS5jaW5lY2VydC5jb20xKTAnBgNVBAsTIC5j +Yy1yYS0xYS5zNDMwLTIuY2EuY2luZWNlcnQuY29tMRcwFQYDVQQDEw4uMTkyLjE2 +OC4yNTQuMzElMCMGA1UELhMcdlZmdnhYejFnT3pFRHdtMk5vaUp0Y3k0UkVRPTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPBTSPhpKBPe9U81+hAgaV1 +yo05zLbqrpfyXuM53NVUZ8EE1uFaK3zqolABYtWM8LAUXzv2LD+/og0DRPfPAj66 +pT4DA34Xf5mNjYzHt60Mfm6clUxSQ42vdqto8fb9XnGcwgKuSyzGpYrJ5tTD/aiP +pD6FA/0IQ3ecAXWXKDXOIP/tEzQxcPwo9AkvSXp/Ne0MBovia3EoDx75DFs5BJ16 +UTFOkATpDxw8e7rLeNkXrwGIpNw9vWYn3NiZwFRTN2w3Ck6APeJNmns2dRciy44m +Glw5GV4DJh5d8ZXiCnRk2nhY3V/UxY4FXhoHxWE+wKwEPzHKfcnxaHO1zPCoAM8C +AwEAAaOB6jCB5zALBgNVHQ8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV +HQ4EFgQUvVfvxXz1gOzEDwm2NoiJtcy4REQwgaQGA1UdIwSBnDCBmYAUdFkkQoh1 +cIzBuNbCB9TWybhmKoGhfKR6MHgxGTAXBgNVBAoTEC5jYS5jaW5lY2VydC5jb20x +IDAeBgNVBAsTFy5zNDMwLTIuY2EuY2luZWNlcnQuY29tMRIwEAYDVQQDEwkuY2Mt +cmEtMWExJTAjBgNVBC4THEsrRERkcDF5R1dsbmVXYVgzVUlvSVh0QVFUMD2CAwCP +xzANBgkqhkiG9w0BAQsFAAOCAQEAGL/6PXYURL2DOJmhCQ65Sv8CJTBaNWJagVdM +AYOWAJHENot0nPd60CEuM7Ct0cdyEPpeGgBRFRqdNie2JshCeF+AJo04suBmrv1w +9Kd9CyAHsRSuMX3GcNq8r5MekxuzX9DOmke4xZIn29XgqM0iq3JcfKvPeAFrPPPg +o7chlGljzgIV8KyeA3bIDxunP5akKE84wYD0DUDhsp5+BxTazMT6vTq9ekHVvjxP +p9dR1EPV96PJ3zno7Y47wYy2x6P7z/EhEmA0MHLV7F6Xgdh/6JXWRMpxoqaGis+F +XXihVTpytQYDjkszHzu+HTFKHmIUKzePAdT9qZr/dwFZ5Gdivg== + + + + +dnQualifier=K\+DDdp1yGWlneWaX3UIoIXtAQT0=,CN=.cc-ra-1a,OU=.s430-2.ca.cinecert.com,O=.ca.cinecert.com +36807 + +MIIEWTCCA0GgAwIBAgIDAI/HMA0GCSqGSIb3DQEBCwUAMHgxGTAXBgNVBAoTEC5j +YS5jaW5lY2VydC5jb20xIDAeBgNVBAsTFy5zNDMwLTIuY2EuY2luZWNlcnQuY29t +MRIwEAYDVQQDEwkuY2MtcmEtMWExJTAjBgNVBC4THEsrRERkcDF5R1dsbmVXYVgz +VUlvSVh0QVFUMD0wHhcNMDcwMzI3MDcxMzU2WhcNMjUwMTAxMDAwMDAwWjCBgTEZ +MBcGA1UEChMQLmNhLmNpbmVjZXJ0LmNvbTEpMCcGA1UECxMgLmNjLXJhLTFhLnM0 +MzAtMi5jYS5jaW5lY2VydC5jb20xEjAQBgNVBAMTCS5jYy1yYS0yYzElMCMGA1UE +LhMcZEZra1FvaDFjSXpCdU5iQ0I5VFd5YmhtS29FPTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAOxGeJOQ2NzJ6mEAu4Ni+YGrI0fqwhZvKylDgbafJtFB +3/2GTEyYZgCETXyX2YugAh3iie34SUikY3YeF61cSNMGUvKMYxogoo98eK4KjA5l +T6xPZcRvBL7ln7GgKd4IdwdG/3EzUjIqR78tNcnl/cgJ10bGWGgcNzAzW1Wh+lfG +b+R34liZxaQ8snb1rSJ/VVkf39ueq2V0EhYs2qzFEcHU9Kha5VTtdP44xDvOF5Sy +22ig75CdKcJHdgDs/8PJsbrFkvVzb7sEdS4lQ+STJdEwMTrDRk0i+iG5hxCpZJAc +NFr4bXLu5W8MFCQMDfIHpjaEy84xaGtlLhzvHK6mUAECAwEAAaOB4TCB3jALBgNV +HQ8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBAzAdBgNVHQ4EFgQUdFkkQoh1cIzB +uNbCB9TWybhmKoEwgZsGA1UdIwSBkzCBkIAUK+DDdp1yGWlneWaX3UIoIXtAQT2h +c6RxMG8xGTAXBgNVBAoTEC5jYS5jaW5lY2VydC5jb20xGTAXBgNVBAsTEC5jYS5j +aW5lY2VydC5jb20xEDAOBgNVBAMTBy5zNDMwLTIxJTAjBgNVBC4THDhPOFc4b1lI +bGY5N1k4bjBrZEFnTVU3L2pVVT2CAwDHFjANBgkqhkiG9w0BAQsFAAOCAQEA3Qqg +ixs7PWXx0lT+b7KUAtQ6yIwqJWJ6ZP6AiVi+uo/yiKMgziKw4D+/x5Uq2qOgorlc ++jTPVr+Gln7IV/HwSvc3HdduGeNy5dg2LomkP8gqIXRkd8UcePji3KUtnuax0jpy +LXymO+mQzZiFPJY99xthgOTI0ksjZK1ryxbC9S3JqmRDtj0kvZyT/lvDHS3xwitO +vm3Y7nYOIXLDdC6NZdsi/GaSSOOO0KQJzgJ6afFOlzYMbz1/sSiOd60tmIuztSbf +exEP1qeNXRCHIRntXOfBlXJvGLu9vwVOeOMK43MZjsQLxgfv8MxLYYwx6crkhWRm +Nk28wnTwGFz93rhRSg== + + + + +dnQualifier=8O8W8oYHlf97Y8n0kdAgMU7/jUU=,CN=.s430-2,OU=.ca.cinecert.com,O=.ca.cinecert.com +50966 + +MIIETDCCAzSgAwIBAgIDAMcWMA0GCSqGSIb3DQEBCwUAMG8xGTAXBgNVBAoTEC5j +YS5jaW5lY2VydC5jb20xGTAXBgNVBAsTEC5jYS5jaW5lY2VydC5jb20xEDAOBgNV +BAMTBy5zNDMwLTIxJTAjBgNVBC4THDhPOFc4b1lIbGY5N1k4bjBrZEFnTVU3L2pV +VT0wHhcNMDcwMzI3MDcxMzA4WhcNMjYwMTAxMDAwMDAwWjB4MRkwFwYDVQQKExAu +Y2EuY2luZWNlcnQuY29tMSAwHgYDVQQLExcuczQzMC0yLmNhLmNpbmVjZXJ0LmNv +bTESMBAGA1UEAxMJLmNjLXJhLTFhMSUwIwYDVQQuExxLK0REZHAxeUdXbG5lV2FY +M1VJb0lYdEFRVDA9MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ztG +Pz71+8WrCu6NwAbIUetNjBORWcqXt7a62UCEHu5mbb/ca+OAV90gRPLL1LqbzsJU +u8DoptMYhsQ/+d+Ln1fIUjsJhQIJKn5lQxIhiIPJ6iGeKo0+srN/ugAOKru9h/9e +I9upHpCOo4lfyIKHhkHZAWkkIeSzyM8/VqYF66TGsndjofiwHW8LG964EFpRWouO +j1reAP5CUc9Ftj8IVdEUcIcexClzwcJqwePWQpjXne5e3w4lRI8TgBiCz0VSgXk1 +9oSEud3n4Pdo+FjvDCOCIWYHMYyjLB+/atnpShCbsstYJ/cc68ad+W27y88HOYSM +9PGYuamQbUtid9zsIQIDAQABo4HnMIHkMAsGA1UdDwQEAwIBBjASBgNVHRMBAf8E +CDAGAQH/AgEEMB0GA1UdDgQWBBQr4MN2nXIZaWd5ZpfdQighe0BBPTCBoQYDVR0j +BIGZMIGWgBTw7xbyhgeV/3tjyfSR0CAxTv+NRaFzpHEwbzEZMBcGA1UEChMQLmNh +LmNpbmVjZXJ0LmNvbTEZMBcGA1UECxMQLmNhLmNpbmVjZXJ0LmNvbTEQMA4GA1UE +AxMHLnM0MzAtMjElMCMGA1UELhMcOE84VzhvWUhsZjk3WThuMGtkQWdNVTcvalVV +PYIJALhGwbfi5fVsMA0GCSqGSIb3DQEBCwUAA4IBAQAPYRpoaH9vKLut/HngT3q7 +x2GWz+QKMxbDKNY21VTEleADF3jdWWz+pUf8adnBS3TScMQtmWWUDIXSpXeUQI07 +4ptSOze0pk13hP2VqZWu5DYosL2Y9mDhW+fxN/15EjbzwpM7/KUPGPOdL4ytSqqT +wKSApLAK/9yWrchF5OJup1/zcIBuzNP0v5wi63XPByVU1RhcWseyYbwxo452mPB2 +3JOUq6tr3vvFfXagVf8/0wFTV3wtAXpNPQKjhMvz5n4/N/EFqXrknnlcY9dWopFI +uLIrGE9FVxvsNJ1YzANC9Y6/vCKaRalwQ62W1nClQ/WzQn0C46hkuNxTI4diIm3+ + + + + +dnQualifier=8O8W8oYHlf97Y8n0kdAgMU7/jUU=,CN=.s430-2,OU=.ca.cinecert.com,O=.ca.cinecert.com +13278513546878383468 + +MIIESTCCAzGgAwIBAgIJALhGwbfi5fVsMA0GCSqGSIb3DQEBCwUAMG8xGTAXBgNV +BAoTEC5jYS5jaW5lY2VydC5jb20xGTAXBgNVBAsTEC5jYS5jaW5lY2VydC5jb20x +EDAOBgNVBAMTBy5zNDMwLTIxJTAjBgNVBC4THDhPOFc4b1lIbGY5N1k4bjBrZEFn +TVU3L2pVVT0wHhcNMDcwMzEyMTQ1MjEyWhcNMjcwMzA3MTQ1MjEyWjBvMRkwFwYD +VQQKExAuY2EuY2luZWNlcnQuY29tMRkwFwYDVQQLExAuY2EuY2luZWNlcnQuY29t +MRAwDgYDVQQDEwcuczQzMC0yMSUwIwYDVQQuExw4TzhXOG9ZSGxmOTdZOG4wa2RB +Z01VNy9qVVU9MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAph/idpSe +h3CuscvGWmU+i2nZcyQAWJkztubSvukI9OMyLdLcXA4b1sRpxzkzFJ4NGyloHoVG +OW3dhm/HrUdbiICHgEzMOJq33bBvZvf8OIw6zbSkTJCu2NbX8rBkjxs72i2ANjXJ +LBJz4hHi3KQ0027fZRQ80uksUA96pN4xSkUEdz9cm2IrjmIRTXBKxxL7VvG2sK4j +DodedAOQPMczKYeA4CC64cFpPyl9s4mbZJ6roNahBX3p5zmxk9C/qWDEZeiJoPQS ++gDEfRJFTLOkH2/onrE1Gw5/ErBzhZcfh6uOYUt3YlEYZDN6cJuUyPr3BaSI2rC2 +vB/Ex8HioTm4rwIDAQABo4HnMIHkMB0GA1UdDgQWBBTw7xbyhgeV/3tjyfSR0CAx +Tv+NRTCBoQYDVR0jBIGZMIGWgBTw7xbyhgeV/3tjyfSR0CAxTv+NRaFzpHEwbzEZ +MBcGA1UEChMQLmNhLmNpbmVjZXJ0LmNvbTEZMBcGA1UECxMQLmNhLmNpbmVjZXJ0 +LmNvbTEQMA4GA1UEAxMHLnM0MzAtMjElMCMGA1UELhMcOE84VzhvWUhsZjk3WThu +MGtkQWdNVTcvalVVPYIJALhGwbfi5fVsMBIGA1UdEwEB/wQIMAYBAf8CAQUwCwYD +VR0PBAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQBXNS39cY/a0bIUJRqL+LfI7lIw +EY6sXABbwmUUO42Y/eS7gbpacJnSKrGtdRFWhoC0cCNR1QWrn4IOsKNRi3ed0kCo +ccMjlaUFnUhjLUW5xQSx2w09v+bUkPlUm2hjFxOneFPbSCiWTrlmDFRqPz8+rvpT +Q7tMBqEDNFtjrB/8KJmJwajf5CaamyFPqc2aMYj9B7GPtzcKPQlbQeAGf+x4l7Iz +Y5iOkXqv8VqwxV3ngjV9RlLfPN3OhoBH9jTXV8kNe+mkzqQhhf6HYI50FDOVR6yC +C7Fa0KtH0mnRwmZZKW/8vPOIeffauUs2BVVGz/K6Xvk1XWPz2O34IfGIC8r9 + + + + +