From c2d3ecef900cbbfefb4c621a1d2c157cb2c8f7f4 Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Thu, 4 Nov 2010 13:30:38 -0700 Subject: [PATCH] Removed visual tests from `make test` --- test/canvas.test.js | 685 +------------------ test/images/.gitignore | 0 test/references/arc.png | Bin 2859 -> 0 bytes test/references/bezierCurveTo.png | Bin 1836 -> 0 bytes test/references/clearRect.png | Bin 505 -> 0 bytes test/references/clip.png | Bin 2567 -> 0 bytes test/references/dimensionResurface.png | Bin 189 -> 0 bytes test/references/fillStyle.png | Bin 586 -> 0 bytes test/references/fillText-transformations.png | Bin 2185 -> 0 bytes test/references/fillText.png | Bin 4228 -> 0 bytes test/references/fillWithStroke.png | Bin 2796 -> 0 bytes test/references/globalAlpha.png | Bin 480 -> 0 bytes test/references/invalidStyle.png | Bin 556 -> 0 bytes test/references/lineCap.png | Bin 615 -> 0 bytes test/references/lineJoin.png | Bin 558 -> 0 bytes test/references/lineTo.png | Bin 1015 -> 0 bytes test/references/lineWidth.png | Bin 538 -> 0 bytes test/references/linearGradients.png | Bin 1290 -> 0 bytes test/references/pngstream.png | Bin 1743 -> 0 bytes test/references/quadraticCurveTo.png | Bin 2386 -> 0 bytes test/references/radialGradients.png | Bin 14960 -> 0 bytes test/references/rect.png | Bin 477 -> 0 bytes test/references/rotate.png | Bin 1550 -> 0 bytes test/references/states.png | Bin 645 -> 0 bytes test/references/states2.png | Bin 619 -> 0 bytes test/references/strokeRect.png | Bin 605 -> 0 bytes test/references/strokeText.png | Bin 2942 -> 0 bytes test/references/textAlign-center.png | Bin 1615 -> 0 bytes test/references/textAlign-left.png | Bin 1631 -> 0 bytes test/references/textAlign-right.png | Bin 1656 -> 0 bytes 30 files changed, 9 insertions(+), 676 deletions(-) delete mode 100644 test/images/.gitignore delete mode 100644 test/references/arc.png delete mode 100644 test/references/bezierCurveTo.png delete mode 100644 test/references/clearRect.png delete mode 100644 test/references/clip.png delete mode 100644 test/references/dimensionResurface.png delete mode 100644 test/references/fillStyle.png delete mode 100644 test/references/fillText-transformations.png delete mode 100644 test/references/fillText.png delete mode 100644 test/references/fillWithStroke.png delete mode 100644 test/references/globalAlpha.png delete mode 100644 test/references/invalidStyle.png delete mode 100644 test/references/lineCap.png delete mode 100644 test/references/lineJoin.png delete mode 100644 test/references/lineTo.png delete mode 100644 test/references/lineWidth.png delete mode 100644 test/references/linearGradients.png delete mode 100644 test/references/pngstream.png delete mode 100644 test/references/quadraticCurveTo.png delete mode 100644 test/references/radialGradients.png delete mode 100644 test/references/rect.png delete mode 100644 test/references/rotate.png delete mode 100644 test/references/states.png delete mode 100644 test/references/states2.png delete mode 100644 test/references/strokeRect.png delete mode 100644 test/references/strokeText.png delete mode 100644 test/references/textAlign-center.png delete mode 100644 test/references/textAlign-left.png delete mode 100644 test/references/textAlign-right.png diff --git a/test/canvas.test.js b/test/canvas.test.js index 6648744..eee25f9 100644 --- a/test/canvas.test.js +++ b/test/canvas.test.js @@ -5,28 +5,9 @@ var Canvas = require('canvas') , assert = require('assert') - , crypto = require('crypto') , sys = require('sys') , fs = require('fs'); -function hash(val) { - return crypto.createHash('md5').update(val).digest('hex'); -} - -function assertChecksum(canvas, path, checksum, msg) { - canvas.savePNG(path); - assertChecksumOf(canvas, path, checksum, msg); -} - -function assertChecksumOf(canvas, path, checksum, msg) { - fs.readFile(path, function(err, buf){ - var got = hash(buf); - assert.equal(got, checksum, msg - + ' \n path: ' + path - + ' \n md5: ' + got); - }); -} - module.exports = { 'test .version': function(assert){ assert.match(Canvas.version, /^\d+\.\d+\.\d+$/); @@ -160,209 +141,10 @@ module.exports = { assert.equal(50, canvas.height); }, - 'test Canvas#{width,height}= re-surface': function(assert){ - var canvas = new Canvas(200, 200) - , path = __dirname + '/images/dimensionResurface.png'; - - canvas.width = 50; - canvas.height = 90; - var ctx = canvas.getContext('2d'); - ctx.fillRect(0,0,50,50); - - assertChecksum( - canvas - , path - , '3ee668a413ca0409f60728e7f2224886' - , 'Canvas#{width,height}= re-surface failed'); - }, - 'test Canvas#getContext("invalid")': function(assert){ assert.equal(null, new Canvas(200, 300).getContext('invalid')); }, - 'test Context2d#clearRect()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/clearRect.png'; - - ctx.fillRect(25,25,100,100); - ctx.clearRect(45,45,60,60); - ctx.fillRect(50,50,50,50); - - assertChecksum( - canvas - , path - , 'e21404e97142a76c0c8d14cf0fab400f' - , 'Context2d#clearRect() failed'); - }, - - 'test Context2d#strokeRect()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/strokeRect.png'; - - ctx.fillRect(25,25,100,100); - ctx.clearRect(45,45,60,60); - ctx.strokeRect(50,50,50,50); - - assertChecksum( - canvas - , path - , '130c5457e19da9d35b46970c2c3e035f' - , 'Context2d#strokeRect() failed'); - }, - - 'test Context2d#lineTo()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/lineTo.png'; - - // Filled triangle - ctx.beginPath(); - ctx.moveTo(25.5,25); - ctx.lineTo(105,25); - ctx.lineTo(25,105); - ctx.fill(); - - // Stroked triangle - ctx.beginPath(); - ctx.moveTo(125,125); - ctx.lineTo(125,45); - ctx.lineTo(45,125); - ctx.closePath(); - ctx.stroke(); - - assertChecksum( - canvas - , path - , 'eb265249dc3d0fc7dc2008d2f5b905fa' - , 'Context2d#lineTo() failed' - ); - }, - - 'test Context2d#arc()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/arc.png'; - - ctx.beginPath(); - ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle - ctx.moveTo(110,75); - ctx.arc(75,75,35,0,Math.PI,false); // Mouth - ctx.moveTo(65,65); - ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye - ctx.moveTo(95,65); - ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye - ctx.stroke(); - - assertChecksum( - canvas - , path - , '82997bc57c3941afea72ba571d713160' - , 'Context2d#arc() failed'); - }, - - 'test Context2d#bezierCurveTo()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/bezierCurveTo.png'; - - ctx.beginPath(); - ctx.moveTo(75,40); - ctx.bezierCurveTo(75,37,70,25,50,25); - ctx.bezierCurveTo(20,25,20,62.5,20,62.5); - ctx.bezierCurveTo(20,80,40,102,75,120); - ctx.bezierCurveTo(110,102,130,80,130,62.5); - ctx.bezierCurveTo(130,62.5,130,25,100,25); - ctx.bezierCurveTo(85,25,75,37,75,40); - ctx.fill(); - - assertChecksum( - canvas - , path - , '5626a53780d77aecc490ec807ee0bc63' - , 'Context2d#bezierCurveTo() failed'); - }, - - 'test Context2d#quadraticCurveTo()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/quadraticCurveTo.png'; - - ctx.beginPath(); - ctx.moveTo(75,25); - ctx.quadraticCurveTo(25,25,25,62.5); - ctx.quadraticCurveTo(25,100,50,100); - ctx.quadraticCurveTo(50,120,30,125); - ctx.quadraticCurveTo(60,120,65,100); - ctx.quadraticCurveTo(125,100,125,62.5); - ctx.quadraticCurveTo(125,25,75,25); - ctx.stroke(); - - assertChecksum( - canvas - , path - , '4995ce059b78d8b78652d9f6d2d1a6f2' - , 'Context2d#quadraticCurveTo() failed'); - }, - - 'test Context2d#rotate()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/rotate.png'; - - ctx.rotate(0.4); - ctx.translate(30,0); - ctx.rect(0,0,50,50); - ctx.stroke(); - - assertChecksum( - canvas - , path - , 'b364d4572f8b4fe03e1290235dcf2e55' - , 'Context2d#rotate() failed'); - }, - - 'test fill with stroke': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/fillWithStroke.png'; - - ctx.beginPath(); - ctx.arc(75,75,50,0,Math.PI*2,true); - ctx.fill(); - ctx.closePath(); - ctx.beginPath(); - ctx.fillStyle = 'red'; - ctx.strokeStyle = 'yellow'; - ctx.arc(75,75,30,0,Math.PI*2,true); - ctx.fill(); - ctx.stroke(); - - assertChecksum( - canvas - , path - , '603b1e1c8a4bc0048c9a0944c83e82f4' - , 'fill with stroke failed'); - }, - - 'test Context2d#rect()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/rect.png'; - - ctx.rect(5,5,50,50); - ctx.strokeStyle = 'yellow'; - ctx.fill(); - ctx.stroke(); - - assertChecksum( - canvas - , path - , 'a670979e566eafa07e3938aec9e2b7a3' - , 'Context2d#rect() failed'); - }, - 'test Context2d#font=': function(assert){ var canvas = new Canvas(200, 200) , ctx = canvas.getContext('2d'); @@ -372,33 +154,10 @@ module.exports = { assert.equal('15px Arial, sans-serif', ctx.font); }, - 'test Context2d#fillStyle=': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/fillStyle.png'; - - ctx.fillStyle = 'rgb(0,55,0)'; - ctx.fillRect(10, 10, 50, 50); - - ctx.fillStyle = 'rgba(0,0,0,0.1)'; - ctx.fillRect(60, 60, 50, 50); - - ctx.fillStyle = '#000'; - ctx.fillRect(110, 110, 50, 50); - - assertChecksum( - canvas - , path - , '804d2494db2eeda204ccbd6d0b48265a' - , 'Context2d#fillStyle= failed'); - }, - 'test Context2d#lineWidth=': function(assert){ var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/lineWidth.png'; + , ctx = canvas.getContext('2d'); - ctx.beginPath(); ctx.lineWidth = 10.0; assert.equal(10, ctx.lineWidth); // ctx.lineWidth = Infinity; @@ -407,251 +166,34 @@ module.exports = { assert.equal(10, ctx.lineWidth); ctx.lineWidth = 0; assert.equal(10, ctx.lineWidth); - ctx.moveTo(50, 50); - ctx.lineTo(50, 100); - ctx.lineTo(80, 120); - ctx.stroke(); - - assertChecksum( - canvas - , path - , '0bc6f64d58f326ca7ad3ade4426fb90f' - , 'Context2d#lineWidth= failed'); }, 'test Context2d#lineCap=': function(assert){ var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/lineCap.png'; + , ctx = canvas.getContext('2d'); - ctx.beginPath(); - ctx.lineWidth = 10.0; + assert.equal('butt', ctx.lineCap); ctx.lineCap = 'round'; assert.equal('round', ctx.lineCap); - ctx.moveTo(50, 50); - ctx.lineTo(50, 100); - ctx.lineTo(80, 120); - ctx.stroke(); - - assertChecksum( - canvas - , path - , 'd5b84ea10a3e6df723b702a32329ed43' - , 'Context2d#lineCap= failed'); }, 'test Context2d#lineJoin=': function(assert){ var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/lineJoin.png'; + , ctx = canvas.getContext('2d'); - ctx.beginPath(); - ctx.lineWidth = 10.0; + assert.equal('miter', ctx.lineJoin); ctx.lineJoin = 'round'; assert.equal('round', ctx.lineJoin); - ctx.moveTo(50, 50); - ctx.lineTo(50, 100); - ctx.lineTo(80, 120); - ctx.stroke(); - - assertChecksum( - canvas - , path - , 'bf97d882a0e99595109fb4f564fa41bf' - , 'Context2d#lineJoin= failed'); }, - - 'test Context2d states': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/states.png'; - - ctx.arc(5,5,-1) - ctx.save(); - ctx.rect(50, 50, 100, 100); - ctx.stroke(); - - ctx.restore(); - ctx.save(); - ctx.translate(50,50); - ctx.scale(.5,.5); - ctx.strokeRect(51, 51, 100, 100); - - ctx.restore(); - ctx.translate(95,95); - ctx.fillRect(0,0,10,10); - - assertChecksum( - canvas - , path - , '65a027e653ea817747ba73053d48272a' - , 'Context2d#save() / restore() failed'); - }, - - 'test Context2d states with stroke/fill/globalAlpha': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/states2.png'; - - ctx.fillRect(0,0,150,150); // Draw a rectangle with default settings - ctx.save(); // Save the default state - - ctx.fillStyle = '#09F' // Make changes to the settings - ctx.fillRect(15,15,120,120); // Draw a rectangle with new settings - - ctx.save(); // Save the current state - ctx.fillStyle = '#FFF' // Make changes to the settings - ctx.globalAlpha = 0.5; - ctx.fillRect(30,30,90,90); // Draw a rectangle with new settings - - ctx.restore(); // Restore previous state - ctx.fillRect(45,45,60,60); // Draw a rectangle with restored settings - - ctx.restore(); // Restore original state - ctx.fillRect(60,60,30,30); // Draw a rectangle with restored settings - assertChecksum( - canvas - , path - , 'c7217b183c3b47e76a0454d8f5a8b424' - , 'Context#save() / restore() with stroke/fill/globalAlpha failed'); - }, 'test Context2d#globalAlpha=': function(assert){ var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/globalAlpha.png'; - - ctx.globalAlpha = 0.5; - ctx.fillStyle = 'rgba(0,0,0,0.5)'; - ctx.strokeRect(0,0,50,50); - - ctx.globalAlpha = 0.8; - ctx.fillRect(20,20,20,20); - - ctx.fillStyle = 'black'; - ctx.globalAlpha = 1; - ctx.fillRect(25,25,10,10); - - assertChecksum( - canvas - , path - , 'feb3e3c4bc6aac5c9e46f9b71b4504c6' - , 'Context2d#globalAlpha= failed'); - }, - - 'test Context2d#createLinearGradient()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/linearGradients.png'; - - var lingrad = ctx.createLinearGradient(0,0,0,150); - lingrad.addColorStop(0, '#00ABEB'); - lingrad.addColorStop(0.5, '#fff'); - lingrad.addColorStop(0.5, '#26C000'); - lingrad.addColorStop(1, '#fff'); - - var lingrad2 = ctx.createLinearGradient(0,50,0,95); - lingrad2.addColorStop(0.5, '#000'); - lingrad2.addColorStop(1, 'rgba(0,0,0,0)'); - - ctx.fillStyle = lingrad; - ctx.strokeStyle = lingrad2; - - ctx.fillRect(10,10,130,130); - ctx.strokeRect(50,50,50,50); - - assertChecksum( - canvas - , path - , '55f80d7d33000904ca366e0cfe363079' - , 'Context2d#createLinearGradient() failed'); - }, - - 'test Context2d#createRadialGradient()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/radialGradients.png'; - - // Create gradients - var radgrad = ctx.createRadialGradient(45,45,10,52,50,30); - radgrad.addColorStop(0, '#A7D30C'); - radgrad.addColorStop(0.9, '#019F62'); - radgrad.addColorStop(1, 'rgba(1,159,98,0)'); - - var radgrad2 = ctx.createRadialGradient(105,105,20,112,120,50); - radgrad2.addColorStop(0, '#FF5F98'); - radgrad2.addColorStop(0.75, '#FF0188'); - radgrad2.addColorStop(1, 'rgba(255,1,136,0)'); - - var radgrad3 = ctx.createRadialGradient(95,15,15,102,20,40); - radgrad3.addColorStop(0, '#00C9FF'); - radgrad3.addColorStop(0.8, '#00B5E2'); - radgrad3.addColorStop(1, 'rgba(0,201,255,0)'); - - var radgrad4 = ctx.createRadialGradient(0,150,50,0,140,90); - radgrad4.addColorStop(0, '#F4F201'); - radgrad4.addColorStop(0.8, '#E4C700'); - radgrad4.addColorStop(1, 'rgba(228,199,0,0)'); - - // draw shapes - ctx.fillStyle = radgrad4; - ctx.fillRect(0,0,150,150); - ctx.fillStyle = radgrad3; - ctx.fillRect(0,0,150,150); - ctx.fillStyle = radgrad2; - ctx.fillRect(0,0,150,150); - ctx.fillStyle = radgrad; - ctx.fillRect(0,0,150,150); - - assertChecksum( - canvas - , path - , 'd078f5993eb962a5b3fdde5ca0864179' - , 'Context2d#createRadialGradient() failed'); - }, - - 'test invalid {fill,stroke}Style': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/invalidStyle.png'; - - ctx.fillStyle = 'red'; - ctx.strokeStyle = 'yellow'; - ctx.rect(50,50,50,50); - ctx.fill(); - ctx.stroke(); - ctx.beginPath(); - ctx.fillStyle = 'asdf'; - ctx.strokeStyle = 'asdf'; - ctx.rect(100,80,15,15); - ctx.fill(); - ctx.stroke(); - - assertChecksum( - canvas - , path - , '2ba95ccadd5c38949a5ea493dbc78e08' - , 'Context2d invalid fillStyle did not retain previous value'); - - }, - - 'test Context2d#clip()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/clip.png'; - - ctx.arc(50,50,50,0,Math.PI * 2); - ctx.stroke(); - ctx.clip(); - ctx.fillStyle = 'rgba(0,0,0,.5)'; - ctx.fillRect(0,0,100,100); + , ctx = canvas.getContext('2d'); - assertChecksum( - canvas - , path - , '6199442d05718481ac5ccd034239f6f1' - , 'Context2d#clip() failed'); + assert.equal(1, ctx.globalAlpha); + ctx.globalAlpha = 0.5 + assert.equal(0.5, ctx.globalAlpha); }, 'test Context2d#isPointInPath()': function(assert){ @@ -672,86 +214,7 @@ module.exports = { assert.ok(!ctx.isPointInPath(70,110)); assert.ok(!ctx.isPointInPath(50,120)); }, - - 'test Context2d#fillText()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/fillText.png'; - - ctx.font = '30px Arial'; - ctx.rotate(.1); - ctx.lineTo(10,10); - ctx.fillText("Awesome!", 50, 100); - - var te = ctx.measureText('Awesome!'); - - ctx.strokeStyle = 'rgba(0,0,0,0.5)'; - ctx.lineTo(50, 102); - ctx.lineTo(50 + te.width, 102); - ctx.stroke(); - - assertChecksum( - canvas - , path - , '8e3632b45c8a6c64d9e7c669f32c7cab' - , 'Context2d#fillText() failed'); - }, - - 'test Context2d#fillText() transformations': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/fillText-transformations.png'; - - ctx.font = 'bold 12px Helvetica'; - - ctx.strokeRect(0,0,200,200); - ctx.lineTo(0,100); - ctx.lineTo(200,100); - ctx.stroke(); - - ctx.beginPath(); - ctx.lineTo(100,0); - ctx.lineTo(100,200); - ctx.stroke(); - - ctx.rotate(0.2); - ctx.fillText("foo", 150, 100); - ctx.font = 'normal 30px Arial'; - ctx.fillText("bar", 50, 100); - - assertChecksum( - canvas - , path - , '8be28247027694c04dc7381e6294c53b' - , 'Context2d#fillText() transformations failed'); - }, - - 'test Context2d#strokeText()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/strokeText.png'; - ctx.strokeRect(0,0,200,200); - ctx.lineTo(0,100); - ctx.lineTo(200,100); - ctx.stroke(); - - ctx.beginPath(); - ctx.lineTo(100,0); - ctx.lineTo(100,200); - ctx.stroke(); - - ctx.strokeStyle = 'red'; - ctx.font = 'normal 50px Arial'; - ctx.strokeText("bar", 100, 100); - - assertChecksum( - canvas - , path - , '423833c443bc49b6aa445831737fd600' - , 'Context2d#strokeText()'); - }, - 'test Context2d#textAlign': function(assert){ var canvas = new Canvas(200,200) , ctx = canvas.getContext('2d'); @@ -767,94 +230,6 @@ module.exports = { assert.equal('end', ctx.textAlign); }, - 'test Context2d#textAlign= right': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/textAlign-right.png'; - - ctx.strokeRect(0,0,200,200); - ctx.lineTo(0,100); - ctx.lineTo(200,100); - ctx.stroke(); - - ctx.beginPath(); - ctx.lineTo(100,0); - ctx.lineTo(100,200); - ctx.stroke(); - - ctx.font = 'normal 20px Arial'; - ctx.textAlign = 'right'; - ctx.fillText("Wahoo", 100, 100); - - assertChecksum( - canvas - , path - , 'cde33254c5c6de39e1a549edcb23d93e' - , 'Context2d#textAlign= right failed'); - }, - - 'test Context2d#textAlign= center': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/textAlign-center.png'; - - ctx.strokeRect(0,0,200,200); - ctx.lineTo(0,100); - ctx.lineTo(200,100); - ctx.stroke(); - - ctx.beginPath(); - ctx.lineTo(100,0); - ctx.lineTo(100,200); - ctx.stroke(); - - ctx.font = 'normal 20px Arial'; - ctx.textAlign = 'center'; - ctx.fillText("Wahoo", 100, 100); - - assertChecksum( - canvas - , path - , '31b217e572ce2d78f11c1ecf21713579' - , 'Context2d#textAlign= center failed'); - }, - - 'test Context2d#textAlign= left': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/textAlign-left.png'; - - ctx.strokeRect(0,0,200,200); - ctx.lineTo(0,100); - ctx.lineTo(200,100); - ctx.stroke(); - - ctx.beginPath(); - ctx.lineTo(100,0); - ctx.lineTo(100,200); - ctx.stroke(); - - ctx.font = 'normal 20px Arial'; - ctx.textAlign = 'left'; - ctx.fillText("Wahoo", 100, 100); - - assertChecksum( - canvas - , path - , 'f22146910b2df4b96550611f45dda77a' - , 'Context2d#textAlign= left failed'); - }, - - 'test Context2d#measureText()': function(assert){ - var canvas = new Canvas(200, 200) - , ctx = canvas.getContext('2d'); - - ctx.font = 'normal 40px Arial'; - assert.eql({ width: 126 }, ctx.measureText('Wahoo')); - assert.eql(ctx.measureText(123), ctx.measureText('123')); - assert.eql(ctx.measureText(), ctx.measureText('undefined')); - }, - 'test Canvas#toBuffer()': function(assert){ assert.ok(Buffer.isBuffer(new Canvas(200, 200).toBuffer()), 'Canvas#toBuffer() failed'); }, @@ -888,47 +263,5 @@ module.exports = { err = e; } assert.equal('currently only image/png is supported', err.message); - }, - - 'test PNGStream': function(assert, beforeExit){ - var canvas = new Canvas(320, 320) - , ctx = canvas.getContext('2d') - , path = __dirname + '/images/pngstream.png' - , called = 0; - - ctx.strokeStyle = 'rgba(0,0,0,0.5)'; - ctx.strokeRect(0,0,320,320); - - ctx.fillStyle = 'rgba(0,0,0,0.02)'; - var steps = 200; - while (steps--) { - ctx.fillRect( - 160 - (steps / 2) - , 160 - (steps / 2) - , steps - , steps - ); - } - - var out = fs.createWriteStream(path) - , stream = canvas.createSyncPNGStream(); - - out.on('close', function(){ - assertChecksumOf( - canvas - , path - , '04f2e1b4338de2d7451194cba7d29970' - , 'PNGStream failed'); - }); - - stream.on('data', function(chunk){ out.write(chunk); }); - stream.on('end', function(){ - ++called; - out.end(); - }); - - beforeExit(function(){ - assert.equal(1, called); - }); } } \ No newline at end of file diff --git a/test/images/.gitignore b/test/images/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/test/references/arc.png b/test/references/arc.png deleted file mode 100644 index 0cc530bdbb98cf57e4bf5acaf0bcacf4f2c43d41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 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 diff --git a/test/references/bezierCurveTo.png b/test/references/bezierCurveTo.png deleted file mode 100644 index b43d4cda32355b7b67e6dbba30b8b4737a20e9d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcma)7c{JOJ77jm>Vv?y*l?f9jYFEn;6=hl#O=4?BZMBxpjJ2W6dm_=0H}-uUt$m3g zh!jN|CY??(Em|R(wxJoRC`AXQOf65(dGF78=bgKqbHBU%b?=vX(G3SxL@0tlASeNk zB_76+Pj&=+=-Yidst*G=#2JSL9ek470cP=G1`k!$xh=p0&RaW(W(Ve@z)*pgty4Ic;SRM3(YliSldppwN}4vO9D@2H9}dsJiHj6k>Eb z%PfEPEYXE6+e?fmxZsXxq@9X$)_GcU&9;HJ7(l61haQHfaE&Biyrw z`#Ymol)_!d!_8}gJdPACu;)hHM;E+=#(AScP4VPs1Acx z#T6a?%c{GTpV=yEgoVLKh0|`@OZs9NvDTQ?FioNrquF^Cx#1%xaJ?+@C= z?u4{v%``sd?1>aKBJ2k(BuwtmQmvrTxr3429JCDb@*2JJSwf#YW-F_OJH1p8O3)OQ znpE3M1X*NTAzcK{%-^`h(yp$fPK=_j-84@>eYs%Lf9__Wdi|F0aQc_J|BzK7!@MWQ zdKzG?97=FqgK1TBZP^M)KX)wZX146>j>45 ztb+6E`eQGEkL~6DD&YNKIhlbFS$2ZA>*G<;Y5{%f>egw}Ys%rIDcozL5%?ml*#gL~ z`y+{vn0m(FrqC*T_f?Xe6|SNxQ}1n(qt%FON+=7t>aJM`y&f$Vwx(02a8sBOMR7$f z$CF*U?dMloA85a8aBDS&otP0(U_>AC+!L{o^@ythPy1SHC<2GyFe9ACcgP$_PWxY9 z$-2qiFs;I?J96o5_oZ)&V)@nK$CaVi19|0H^VOaiVMl2{aw(!NMP=x1!(f+(*Pj?- zEl1Xq%~c=Uv5rn?=|OT@d{%u^Gr$=1e_?!azLkgFryk8?ZjfA-b^2OGO;?sr$&5^> zVHw5i>w5beFt`Wju)->XXU94=q2&h*T{8aAb`JY5uBKU2NdFJ2D8%c5|7?lHY{A74 zzC?EF#xI4)>_2gf*cbY9s;@t9t$EAbBCA$35U0`|Ou@OVzxuuHut{?R$AqaDyrb{E zBAhZ@HLAkrq_-ltGsL?Em+&j5=Cw-b70*>ZX89kP5y zLm#w+CMq|lM7`mVBA#ZKn1UrEe?Af<-`buX^5rpkMc_Qf{=VF_>`Ny-zPxMYSrULG ziLDW%5}^hVxl};i{zM>j$|s9M_!hIXo|g(-CmvW0dpflB+KlLOFjMKSA#u(5KQ`9D3E}da~v?enVrv_fxGngCm4L!wF^;W7(%~krdz1u0p!MY*f>rR9HD& za()ONW3;IJ-2<8c@oNK-{Pm=%<-ND9?Y7mS#1BYz9@(t9-we$&i z8ye)(d-3}gG*9d!6Cm(OtnVNGfB*ge2QmD=kmb33@RI5BJ2jmYi$k&l5ggsH9p{4S F{{~B`T$um> diff --git a/test/references/clearRect.png b/test/references/clearRect.png deleted file mode 100644 index 20a25fad3820fb0829a0abf29df234efe3b06563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyDyxmw5WR zvftun5fspP8sOl}z`!`$)5S5QV$R#!j9kqI0t}A2|Nfu;#+<6TbVf#+-2~>yK8~Aa zK%MAd*|zwSbCnk@Yo4!qUst{UBJ+VWEKH6H0>l!17n%QLY&E}n?+brYvx5K!OCykI z*&TPuzVei7*;aXh;LVN-94t)^13}0vX8*Cc_6vheKQG)*@2WiQ-T4nlgTe~DWM4f=_qbL diff --git a/test/references/clip.png b/test/references/clip.png deleted file mode 100644 index e0868359957609e7cdac06d5baa1df0aa2137e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2567 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 lXRq|AOVqu?J0a&g3C9-boI{0|ZBlji^c diff --git a/test/references/dimensionResurface.png b/test/references/dimensionResurface.png deleted file mode 100644 index 0e8e37e4ea5ed5e7588f114c0e75a735e0ce2d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^MnD|J!3HFM&0uW?NMQ zuI#tCSp)?%o(4EL1BK!}T^vIy=Da=6$lG8baNt1tKihmYkFXPSo4(DQX=}eBkA2Tk ykKTz=%BF5vJy#@F8U`gVIYvl;1!yn`{8-0aoyM4)9wHJC;(EIJxvXyxmw5WR zvftun5fspP8sOl}z`*#%)5S5QV$R#E8+i{oh_E`&)?3l?&sl3BkMN|m43hg)&mR%r zGdZvHG!sxe2<%ytKYx$zZT|8<=l?ca7gtSx$ykuW)Tki9F#yEtFAa>>Uou)(`tVyY z+jFoqItUB|(NbE)5Py3a``8V5%8pg8_O31X9(28i!9J#f%N^G@s37V^R=Q7qzwUpFSq+%OFTSIH;wp; zXo$yM_aT?9%@Usnl2F-O;WHPEf6lDQyr9K2wW#QaoIdmRpA}ABXVlcpHA3Mzu(TgJ zYv-_3565vW^mH2&{vzfst7+Ychq zioh%o0ptOy^C3VQutG7j(S9kYW6QJR9Ab->=>6W(5kftkc51oo#moSh zm|+Pqqy*3gG{NEw-w~nEJlt5A49eTP>Q?|oLeB;4*F)`9Qz2T_d+nE?dj$t&Y8i$U zE_j5vKBIb|+O91DZ%(~Hb%wDff)F5y^6nizB9)MPPXOI-EoKpxx5hIZUhC4oETI7; zr543oK$|XoU6OieqoI>#pC7OG=5UmuqDEOHVMF~rTa$b*UX}tpoeYf$ZP%YxIp~xo zVL&cSyItrE<&x){*Dr6>C+W)RLiSM8jd4?d11YcWNk>O>*75$6ZzF= zI-713X0XmA+$ly+@{7RF0#D?XeW4BeqL|7u0oCgH`hbc>-SezYB1i;UU4 zC1xAG(&jJ3sr@UYUv?QE(^GM5{-Mbwpsg*>wzYuz9FtC*ozv)#bJ#pjm>66NcqNrm z?|u93mdto=wSQ-OaxKJlTf*e9i%bokqB!MARGA5a-}87Oe{h^>WdY__O}d49IBOGC zS8WQ-PL2b909?I|SnBP+cN~UC7RZ3VisTP_@$47`HX_|XZN;*BAf@G|9ZaIL>6yP? zcGHf#o8KGn#AcTu$f3!{w?QQTvC5b&OH(~qz{ zv`0{BLhj#Wd?M+IGZYxe6@AgA{U{*bN@6@Q%lYwpe#9&{c>K$G7K4Du05fKFQ+4*tF>+vQF$pY!3awaX*jqIE9d) zG8SBv)Ksi0v?(021*J;T10PwEKucJTu5cGH_VGY~-4%l6yZ%9CAfA_xiKUxVA2ih3 zhh8Jlr&mpW9}{Um9bGHX%Ub%w$+B{q(r)IVkZ@?R@uCSvHX$+IahV_L0vKu9NDl?8 z=qTfKh1eg&;y3z}YUIvF|FFKZcjp^{5?aAfU6sCML@xMUY-5rvfzO8=+vbLHiiRI3 z-L*N#{EJCdzOcKwqo+G-^n;=6m9Yq3>}cYBHyV+0Td)Bn(hw1u zyes&Ue5L=s)fK%=8_dcfho;3}o^Qsk7(qYTibl&H&hG;wriD;AE~I)+p!=C^W^{GM zO5u}%s7w|FJfq1Pesgn_KsJ*Fo8r44j}~nR=Sg7#m`L)vg~OB&_eQGply*8z`86L5 zapc#F^NuQbgRVv@sx7?RFRfaC=}aAa&oJx_bVkV~o08^^&pvIW)dQ>yR#ezBLYZdcv{bGSL5azEB&IEW*^^T_MC`|TOg z<7PwZfP2-Xj-|&&+^jpQJpKYH;cMMpy-qk;g#;6Xe&7yx6LYhf-W82Clj@hZI^SgB z4?k*aM<|qK2~X?mE_9W5<_GY)eh&Wt`MyvM3pB$QY;9vX;d~#gzM3QmiHK z_GJ`HZ{$Af@6^OVmDFS>XNx{KE_?Bm$e@^;XjfResDo32|4+C-V;86oLf}AkAkD>{ dPe{WfW= diff --git a/test/references/fillText.png b/test/references/fillText.png deleted file mode 100644 index 5789bb5f8fe6cedfd581775ea7b87c59eaa3a09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4228 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 diff --git a/test/references/fillWithStroke.png b/test/references/fillWithStroke.png deleted file mode 100644 index 87d9b6b8982541f280669dec1819ece9361f0f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2796 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 Vg@ULP^O!-pJYD@<);T3K0RZ05tsVdX diff --git a/test/references/lineCap.png b/test/references/lineCap.png deleted file mode 100644 index bf907eb41d1d7e439ee220980dd78c78d7f6d0dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyDyxmw5WR zvftun5fspP8sOl}z`(@m>EaktG3V`#y}7p&Bw8=d=6RU8rM>+lN2IE(x#x7&D-~>w znoAfQC&UEVKS=L>&XAKMx}MQ?$21|Jc?3WMBcJComE)(4W9!&$lkwYD)rxa^_rch@A}iY$H0{RiLo9+~ywN?fwWl5(lIC0Ek$(NwtT~Ue<2;JuI`cj2p8c7b j-1U?|bl{PGQ2dkiu-8d`jbCAVK*~H_{an^LB{Ts5owLmm diff --git a/test/references/lineJoin.png b/test/references/lineJoin.png deleted file mode 100644 index 8d4b70beeec8e7cb1ff24585e3a7e3599711deaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 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 NO`fiPF6*2UngD7iH?;r& diff --git a/test/references/pngstream.png b/test/references/pngstream.png deleted file mode 100644 index cf4f4d9f365fcd88d33ec72453d880d676a9be59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1743 zcmdT_{ZCs}7(VxMx3)u|mntA%EiJ4eVY1Ezm=nrJ`5F|Q8s-Ay!x43o&@R&qWL%DP zvNm)SVFBYxL84As0?UXSZiTj4X=eb@pkf8L%Vo$9I%u~bmv9*#{s|Lua&q!K&->;* z$@{$L7+x#N4cHgH4*(F5pQm~q04#lH^YdqZ@h|kwdi?GE52niL_s2n-!lisS5wzAP69==2h2d(>^&U@aR6J8OV4wZ7rFUtb z!y-=`dr?fMwdwN&j4LF*{lSe`E|vT;le6$?u|aZPPT6FzLX@#`j2n}{rj^yBH`UowV%>Id|5zG z=q1-hwoswHTa-}}MMP_qFO#bxJ zn6-=Txv#TKU#`Ex_Dr5Dzt>YA@4E}#)*p+9Ln|YCTi8>XU})`~fANIXnHepHSuOl0 z2bl8;%$!ARbg*g(e5#jh%cxF1T_)AD>R9;HP}$9@_rn^YBidIA!C)3~)Ttrykr2|V z^p)ztU@oy*z=g z<{VxZB&|#J-9>i~BCT!gpBKS{R=%Z}t99N3yU@!2*8uK}jP@I31K7i-8!v?8{6r~S zmr!1Sp(Z(WgjU1wh9qz^SXmc`&3Cd640VO!@kslqUL2VR)?+B`L2O>fIs}Bak>SZn z`*#MhIS3Z; zWyP6F`bkKPV##e@$?c7w_nhCqo%1`N&*yp0c|Ok{&z}$5o#H4jgOUM(K=MvxlE)7B z{Cm5kcCgyF=H3oT(Oeu!pzVL>K}UJkjslBvaBOoi%*(IBTvky zHVuxvmK+|aaiJgRf9K`VYV4}j`E){yX@sZk`_U~jUuHszMCL`J&0oLnjc+y;TZsVX zxM+PV@xEwvbIdMN%jtJ3sMU-CNgBy~gXnzh_z5omu=Pv@neh6#IdrZ%A*t@?FG`Tl z=h@zaxBZ+vwe2<-k^m+sY(5%pB%9yUukw>JnQY^`*>Z(_t>VaCGKNL^KJ^Vc3;79h z1AhuW=^s+N`vd18;(Rw$6=EQz{Go%Qg@3&v8;y>TX!%Z?*F=QlRAC6ZM22OO)RyP! z#<=p!l4I}i((iW%fCFR%>?nz2xj3aVpcmF3aCe0xlv6ygxs+{(B>O&2rY{2eNn747O zA@`<((wX|={e|^$T~xda;~?;cMCWk^9kbskbE`b}J!a@Behv1)@{(6k~I)CjOF${S0X!oS>=hF1AO)34|W1Z4~V0j?%? z@vCH!f)P9xU1v=3{2M)|<3YU)N9H+%+OY{$?p)p!oTS?f z_st-(Wc=-lAbZ_mV#Cm|*B6W<;FzAFYo2#}&q0VRFWH=K$|Rw4bCqW9KDDwd0`G~#0@g*#RHzldt&ThPU{6eXBJJ=p zM4Iy`i)dRUd!yK7zkTvk#rB0c1&BYhcA~NOrZh+ zv{}=`IQ!(e7YR~nG*dA~Ok1!OXzU15fjL4m)ZOLCyV)9cmnUiR_Vo&}xEKXgsJiKj zawh~p(_tl@TbyH7^jTfybh_y&C6AR-8|l~1Q3lv?ZJ-#)7-eQVRYHfIO$_z#_cA~2 z#N!{;*mf7&5tGo0nt^;MGcAi77fMX=AL}^yXuK|;l6KErb8tKq6s2A$Y zmalMb@}Pvz6r5Y-@fOyGZpBS3K~*HqfyetWH&EgG!hIHS`lYa;TaVlF9FEl6T>oU# z5(o=FBwpVMa6;f}c~a`_KEzb#weD(epW-iydKahD<2dEVbY*l6&YGd~6;67Cc9kPW zEPWkp1;?Ts4`z>)Gis;dT=|4#-~5f}Hb_6OfIMnnRdweUMQ9=1M>AtPxC@*&7%6(tC@s zL(^dr)`dh?X1?6jv>}iP6%;xap8XQ2A=*g5kU*24BKVYXy7s9Uy#=9~q|GDOEvBWt7U z*2u@Xkv@M``$QMtJ^i^t@fCfxhAz27lJCAg1r#zx?6gb741-PfsUPUnr6fbCF`w1t z8NPL*0^KK`1uZ7s(nQB5WFSYDb0Sf>xc}7p~7a-9Pi4?WG%zESsAO7TOY?==sRolw7RUF zaR#u&d@KKQKF>Rg%`cB{#A_*=8kt80%xB_`vErQ?y}>rf3E$Ee!(`9qLc(q2tB8%B z8=8B2)$XciE*%#39%R|;XBUtTg&ZnVT;b?xs&hu1hy!+G&QWTnU*d&@aS0JB2HH(jVPirjP&tU3@R#e=?tG(=!*%pa& zr83U?$=1SEJ~+7hZL($F`I7iOv2K&CrE_DX0o@v_>ApNrjDpq7=S65orXlNR1=E$;RDj4@sp1SIShrnJUOh!@U33a=S{B z{_Oyqp-M7<-)IQfSd9Cs5>hZQR4`C!u!eiqS(kn^>sZF-!wXGA`LpNw*Xpe8crr)# zxzl(9)cbiBi!we?x(*Qm@CMv%0j+Kf-2_4W*?O>Qi<*>l1OFO(EWx$0NO)pV!H0h7 zO9S*Du)BHavNI(rIJ%QN9<0s$@p9ArV(#r59z8i)I(dBT^qlo`o#9==^^1(Trn%-w z&D$m+HZjv}`JLP|f3ep)|Ie!$Zt{2L@)=WLxIa-#`gI*MT62W-J{&Uge!--8cexSl zU7VhH&0^4q#|fHU0}Sqb-^u9KOW~gr(4PmcgO|OD&BM?29;cgkOlr@qDqGT)+`gDH zZxq&Vs8%^Lz-rSG{BE>Zb_jt+Q;jOlP9a?Wluy%|&4%YH|NA|D@V|X8=1kMtHzdC`uu1zV@l*Rdrepg8{Ep@&#`S6T@@aPI54)Oh z2gZeM5;0aURdW1j&cdYB2g}u#-zBf#&hR5&xy!Xx**_kAncTY$@=O0&MuFwOxpX+% zkXAdSu>49Mraj)AMT^`JtB)3-M%WaDbs$B4ab~c`ee{KqJ?|bzi^FtErn~qs?mZ~m z`_3Qcs1L2QJDly4^xe*y(aEr9R;I{cjS~{^c$~e_A4?2VTezR2+;9loC&Sx=JS21d zM~2?O-JSA$uN<(K*&cb#Z~Z3H?5Q57xA-Y{77Z^; zZptI^k4JaGK-lXa=u%MZ}$Z6CoL zIxtq>8g8q5IobaG-e!_o9cY-xs8#2Rs9$+aQ!#RftsL~jS|UBQif>3}HYLNJ$u&ZD z^p2>%Vz_RX`~7RIQ)3@1k1&#o3t|&XDSJUXTs@F=^H4WOUUbDDH004J5Z2US^J-%& zi7@n;JMMYQ@Nf>+7C2zSUf3R7A6yG`MTw+yUW32h8*K&Q8J++OIw@FyH@^@i8*Pw6 zWj0jga%q2YaOcO*{r&OB@>detD4{dTH|+pT!f!35RTSC0s=p-*SIG4uJM@}fBmIxD zzJxDOGfQd65)oe``j{fMiM9C`vVJ~uBsSt8ui9x5n1n8_{mkm%LKKF9Vhh7$(r_CO zZn>*m?j4UIO6y9VAur^i(H)fDX}5R&*s*4TRhRx4j|WjxSHv7$Ni*>ug_(mTF(CZ; z6jV-r5~r*8*F&J5NE-JS$uD|~AMsa%w;>{J{=i`r`9Lc;p?9yNa=*CjB)Kh9nm`(4 zq&`(+h_Zt9)0U?r?AYJ^K)GaDm0K>=d~BjCrpc^bF0!AIRQnHi2(XUr`m|yXV}z<6 zB%j#>tKs0K*|ZoS^-)cvz@PfBBRx)CyX1J$fy=cZqPSmm)vXG~l%GX)OXoT2e^S3# zJfRtDsNIf%2mUz2Ubm_E5+xY%9s%$?h}~hgnQ9O1MLXg4!cT+NC0nI_7$wd49Ul_- zMj!w4FK$m2?-M75R%3O!h?2gKeN8B`_%A2Bf0Q1=Y8JaHf^mhNPxVEOV5ou+n-~dH z)suIw0BLdZ43zPkFW)Zu2q+0}IjF7`WY1EhStA%_@vg+J?l^qPM+MOiHTDssyh~MK z`ASDs=5|)EJ91t_|Bij#-0H8XO6ZIaFgr_;`MNI2l=H&fGea8)LZY6OBB*XgJ7gzd z#A3qw+=r*bN_;=7{R2DOKtk;O#Bb5~E%Nsc2ZMU24^^rLYgrvpvNUUP)}Mhph`_ts zyC)c*RWc8$LNZS>@1RI>N}=t$QBqKj59Ldb;Zo59Cd6nA%AN*v25)Qsn&O@>HQV1E z2nA)ql`=;?{P|6wc-JucZ9NGH0we_;AR`tE!biTmz?7&kV8;7hlU{H(Kh9|E|18@h z3@bJ^W|d-sL^e=Orr3}^$b@kWTz-Kp z9e=0*oTa2Fn6DRj2FoQTJ_vqXewAWCi=Xj( z{+PJhlS1;+t(M3m?-;rRLyX`L$|n+`YQi($s06@iK_9Yl zzD14xl&{tXvX5qexIDp}kTGZedz#l_)G^vj;Kt1jHjCsQI>H-Ook~w6zq?hbP)4Ha z`MXq;Zt`XXzRF=Q5mXrN-xsHyxuAKXw`wtd`b(w2yB5TG8wrDww6Pmn$c1LAuwrniRW#oC*-p!;i&)580iu3n=4w zkBCGDY$^iPA!=;6`k}@+g^UjwE9le*SI!;4h4 zmz9@|T7CDIkYxGdEXy02Ii?vU*Gu^6=RJSWO39Y-TbO{pr-;Azc@ibT#CvC!;%4`E zvr77pT0f&x%;ae&x!Ey^lb__QSW#SVs8cIarm z4V+`XvFjfgnJRse=WiO{5N0H>ZR0Yr+o>X0%4Ad4(wh3Z59-#>K4e z)z%M5UdSo86p!cNuUGy4My9{|=_HOj2u zHLS)9ZE`8mfGEte;ziR-djTvUN`8a3>!X{tabg$jF1D3y?R^y1Cso2X$C0Wo^aiy< z3e6C^AdquF^PNm~A$lVLLq^(Q$E6j3tAnT^D#4Jmqi{e}j9NvJ5?KUEVv_U44xs*e z9qATprU$N1G^;EuibC)QPLP2xYP`dY1IpG0S~R{`nM*PQ0PL05M2)fxd{mK~8Lu#0 zEEe@hEH#T9ST>#Ae?TS{3nI!%pq&`rEE5w3ls*gi{C(A`YC!mkYt*SkJzD($)e7C$ znqB;_T5$yNGd|BBV(@bGpxlQv8;XV!0djl<4_D;QDjiJ6<9`L`sIr2P!2};1s zaO=PoNi#IQ)g$}NxKZ4n;G?@y7_RTHF?nM~I`Y@t*fSI6hJ;#G#l+vh>^nEunBjj$ zZ8Xay%R8N8CKs0KyU{rV3VgQRr=4e622xm|pz15VFBiZ!3#p){M^MT^(j8Af;6sCkwD6mj62#Ayi#e(_g|09OHz1 zNRg+ngT$;;heuOrsxZQdH{9-^Z#p(4O7LWp{z(cj19tRPKGDqb8l2|hn7;044AHOq zCcTPr!cx}#1DPnD=72qMZD>?)>5rRqiPaCiQmOpFDLe*kx#);_= z3$O@q109_OB++ByNMz z79vEuLm2RNOOUlQ5+4l9Yd9e83jVnbvRRF8`^Z-4hJBvrh#BeSZM_VCJ!|$j0e_uh z!g*95S32yTaXg2xdR@L|GZ7^W zaX_2017E8<-!^*}&;l}6$>$F!wmp$&)Ql}rcBT2Tok)|`WcM&+AuaEaH1UrEI~ zJdcw2!^cO$hTDsO*Q*Smo7B7r$QCmK7!G*4_8wdm0~#k461TWeeqn+i~5z zw54+HPVk1kQtY`E1TU*=_S;8H94*&8hqT;m(pFz)PjyY6liIooMI!kpR61W9(e^98t(B^bD}Ga7*-F&?a5;-^f|)0X@om_{72fP)=+SM;rqw|Ls-P}tKilaRy`M6FtY`68HB5Z0 zkOxvs|FW=1qVI%aLjy~3H^4QsOVf?xKeZ!pg#@rz4Ev6y<}234?Ko@kq6H7xt$nCdah$#E~2y<$R2XKOi%RW7ni` zHEl!?2)fx{xCGfF8M+jrOkp?GC*MO`Lye;6~6fUOW5q zCyC~m1C~+@LJ^+x3ASAmh6O27qCQ!!7On$=;WZG{w*9q0aTZ#gG|KlMc(^tB-@@r` z3JNOIPz2n|g`PF_zvUfj4cm0}P{AL^eVV1J!6R2e=$7sBXYAebP_M^L`X++n2To6T zE<&}J+exCzR`Eg-M>sjxX$lPr!RIUPxv2>Uykgm2)uQ0wT2JwcH2us!Z}T?XPtqeIRpm*wrYrT_p+5r%nDG|lGlSO%%n~{A zC)BTv*>^a)s!CwW4GU*Is<~$j3xOx!>{YXKSJ*%=)bvWKPJ~S7xkH+jU4g$R7SK8} zE4)v7tvxD|n!wQQYTy9(u`h#moPNV}iiG51{jLy!!!LCZkpo~D|B&Rgr zGSVuRja3V`l3+Pceb3lNx!anFeqwJz()Wz+I>$T2I@fGMzS(YU> z@HU0S4TtU2HuNC<*LsmTc&xbmUt44dLHVUk=W4jD1eqY66ZR-Z^}JfiYC#X`J%Vd$ zvyjA?l*!o94bOx>G2+J0gueBHPaC)MshWaz1%i$hV{6uu=BN)xHG&)!73D!@a~?~t zDIvZTm6J0OMNLV;6VVkGN6ci24ap{H%Ql(oUhpfg{6W8R#|*6+Rj03|Cb5TxZ9vYtJcx{>BgDt_-kUl~b8}1`ks${0^ zVL(P&1I+5tBm2YKQ%mdRMe*n@Mux}`Rhzt;0XR~Dicq!7|IUAzuNT(T1wjY_iSg}I z#9LCTHoOAHcWQG~MJyiKN!Z#rE-%K8@YDEo8_)_8KXm?|KII=!4D3({wZ0U_jdvLp zm7>*YFfnw>pqG-Y8HV6}8*dL*Ct@q09Stx@nUpk7E+eTQWP-{N7CWL<4=Ygql5->pi^b`IRy?l;d&YfpUIG^R-Mkz_?;B``!ZX&HyiqteO3 zR(rO)q<_QLV9zfRyCj6#q^;OF+1QOwg`oAZ$IMpRwe3K2lm%)U_{ux~)&y4eJvKXR z2IBN+>Ec}6Xfl66iGLZLSNIBI2mBbuAN!~*HZh^oOxrkcnLEH?W*xIAzg!1iYu)LP zDwQmcQ?go~9V2pbiwfJMTmUl2>0#si^-u+)nz#SQWP6zh_vegfl)|!+ubK>M?O~L# z1~G*(CFFNK&%d1$XhK1HsHDoahG7O=K*MS{1AuLQvk!Mr+!%fBn49zHdY?z)m>}l~ z-V^hfaY()nlCI<_);B;pNQMp^7`2QSWdXZKl$5v6hCIs!`ust=`rIVc3t1Sr;(=3g z;E^u>FYngK2#-v4>ASntRYSFRfdm`a;G2H28ueHFB^b{55x+QJ@$L0_hT(nWeAVuJ zx$kEilV6`wzXlupiBtt|D{-t=UNoOAQi4cpMRFJjREFvYC(*A}Ukj#k#TIXKA#&6- z(U}FU9WeL)3lm~k&)S2ke*(-<*N|*)5S4T(E9+-a&FiDbaiBt=FUTH|DF{*E@fsR1 z)2|}?@8*RHx(frd~se- zxITSP`}4sbd_hcy(VE}EpUOF63weP?`N_Y@qIb7KMM0%>4}#$UP&{RGeoUd)eYH9t z+4&n44|N*4eusI0%C5IUA>*qvx{r#O=K5`g%B4B!AZLmqtD+BVx!=8j=Pm?-*9-v{(aq?Gf06GM}hXJyQ#IN~pK<}MP) z9tfX9y|S&?NKB_JrupozLbq84Vzzr4-jFs)j1GD?wiE&?u#ur>WH5Z)42FgVr`t7;D)~CP5JZUX42dZ#VTfa=u$6V=W*fjf7dr#3A zjg02B=FxTiK$xQc^QL}`sA)Jpo019Pi$M1CJ!A9zQR7gdv;FnwLL`mRdPSY4EM$TI zJm&l>FE3b~a+6`*sAU`X-YVRubz}bL1|RBjm_C&s>$tYYUd1cJ`(sCxpKzCQ$M2-u zHXf%*%oYr^rnjye@dM@VN%6J^G5$z!lS+zlW+2>$$PY^-@v=O23SoI(lo9=v_C)gD zqVfQcCS}Bgg2t4a%wr;ccQk=f#?72pHh5h-aRW(p*Roa=qiHcQ+V6b_Q?Qol-Fg?_ zHL9>(edhU9YT~jS*x((GkMRNJ!kM(&k55Dt=3jn>={3Il7F(WEXwZ_rgxGDN`R@N` zOX2n4B0BEP=1yqJ>I?u&FwNJ$F4c5)@!(<7I^k!31<(oht9#-m9jZ<61A4#ZxnLy9 zuP0GVI}%j{7GPUV(VrSdbX-VlOg>0Iy;qLDN9{-bLlkL_$V%Cy=smyz(K3eSGJ#O` z;L6%z(PdxE8z$|?xjm8hlY@@O&6bTm zm6DSM>x(UnXF8dQGGV0w#Lx&NT{M3eKj*3`B+$0h%C z%B;xlFNj$gR4G{x*Nza~i{amx_Gnhkv8#ANO$a8r*&wIFc%aZ65q8ITg-4@NLV7v>kBA10~e<6$; zMk%n3dYzB9w8I=h7>PKD!gvLK#U*MTsR7+OU>#xI|4-;;#%>PZD-dey`!yhe&hTlN zY)Rs904K2C?&DicRm)Atddt;N_F=1j^te8V*UtU3G_-$(MA$Y>wGZ2wEYx<#De=;j zNye9IbcyYGq|_I2j^k!*)5k(E?Ak2{>4xm6AzlRiUo4_6!I5VGGYxyv%Uo*!FDdV{ zOZ&h@4PaU?2!_9hamz+Nh0)h(mf#OScXPr$4_re$M}3zOw=R}(yitk6fatdkzmOv- zpfMV)dPQ=ai;Ym8i4IU+hz~WAS*g#UZj#xmhv_zqSlP^#BXKXHbo|Svef2fonq+!l zy|Yz(-c&IEDxXV@zY7FjMdfk?ieX-h$mSsakZnUXfMtgz^w)gFKlTL+C3YQ4g(<+E z23iN%3UfN+n!qpj3UT(fXXrrA{Wk*9T0%BYS ze|v@2T!;>RxUad)zM^xD1n;I=_zvHB2LAE%Y;pJe=!focMpYaf+9J`-a4A~xOfKCs zMfGwpaD<>C)&Lje*1ttpYd3O9bIGrf1MnblN7~NnP>WFAs4eX5gTlx>F5io`Yem$q zcXpS{)%A+zI%AyEcmnqLQ&*{4$f-Qh_UNPSkaIF99^4#$gIc;pyQ_ZEOa-X&SPdLDK>Gl{R;!#?DK!eHm_3elHWbY`abgiHq)Jn!o0LSb44CMN0- zo!>EMe&)gVto0tC$ohZJOPqW zmrMw@hx`;}CbT5$9YczvW;{>Jvk?WH`wJ{#wV~hBFRsDa3P{|B>idnjY~!k&;zv2Y zyo7=N+@S8RnJI^BiZ;GpPr>giHxHg9MZH>h|Hx5Ua%a)sHE*7jts68KGo8U8O6%H; zB$dyK{GEq41c|gB+uNm!T;DHT)=4y9$OT_ypyP=G?g@{sEq-+b`MoP{dMs(^qDOC;}c<=k~n zwoiYgRERL}oz%Dn{sUDP(u&LW#hTdp#St&Wwx>HcNP;H~dHna{VV|R!>iFHapPC!v zT5W=c+qT_<=3J&r7(|3jy2L`dOM;xxxxX5xZ;WFt+KSzE>_1nv0f41XB#E>qLD_x&>C@9yId<*3-Tq>Vc% ze!HF(7>lcG&NW}#))A)xQ5}aZYkXSQYgoW{ZnhdGIVf%cf0LGMae8&8^@S<-29}9_ z3Q8#K_!k6_R2t6h0anF$_Dg1=@N3rldWZ2dEa%0@(TnN^T4&(42)u(T(4NX&)l?vH zo=b$xm;R!e!+BT`1S9obLT5axc%nY|w-QkGNCuT1E=`R+@YCR^$Lx*Hw3H);?8*4o zO`JE^7e)53s(1Dest!laqnVRICL8x2xf-@OhN}3f*(&r|D)gFkWz8&71`6>-)krjf zr9+y?h*wE;B)7waYHO#oa;e|4f4}gkc19*(=6b^{JkVadBGKWMse*BYAjnW!aGYcO z0c>{VB>f>iaLyAL0vJf!cUS%4C}B^rZ?NKC8{1UT%WTFnZdcX2H^q=w(!CDOH=#$v zbitH8ca1?kcZ`skAn-kBhwp|%R_Ak%K-P%&S5N+ENPIfeBYo8`CpbSiJucpg0H_J@ zz#ph6?MC(X*H|PYgC(L!=7$J5#b2&o0?@Oh%GMAE8#wE{mGrgX56?hw!DDix*!%%_*>M_pURL5IxG;1+7`f@KR zr3dt*_m<|6ZlOlfYHy6Gx%?v#9K|T#!l9czrbjF#W z3`iI=HhBT%i9|T-f(8X4nL&)~$=@xjOuM}vBQh0XB<~>Pi<-vFcm_lDa69aI{LvD! zI^?OJ`$NaYU)wG}OrPEs^I**H6MVXX5t{C#WzAe+KmebB2}$gnWn5+uuyJWg3#_ZqO%(`)5Z8szj8s&TI=Us4zf^=uiA7(V%wi_l7X{K7{9YS8q)ADFtW)mj*I{Vxk%dgR zhp6;Ql~}aOpkbwWA*_}!Yf&!|`Xgw55G}|4(271Z^>+K9`KTXvR_`B{7eZ!cPH3sp zyX$koko8@A5e8gl`{0HEK>$F{C_>?eHcfL?6=D-(l25B@;sj76Fa(21Kk0)ci5KCA(w?R^!ed zp=D!i=foYfjtwLy=jorKhJkahJmX(2byE>eN>wk(;`6wRzUSx`$14V0h^}EiTkwiQ zIf`PwFK7?~ukPD&MIhk|3GpqG{n5LXj0TC0aJKl|l`nFn1JZ0iQ{Ha~jUdAcGrv>* zOdJ?rifxJVv<-6V*##Y_^h38PBMsP4dE>oOT*AXltTfH(%xyj$ICQgDra2U>x zZF#7DLi%KRYZ zw4MJw68%%uU*?D55?d-cvTuV0b8xM%7 z#LjQUx-Zmxs|dU({qpgVAj~e4P(4Iddc=S++A6^8K-!cEX`6-<-vmw(N!;6(ugllO z%r%u`-2Ju_@1RW9NS3cTQul+Uz(m%r7&Bcfs!byj{U3iSl*N?#8*UgHYXs!YrEyJT zO1_uy9~snFQ&=pqb~HmSr=uoX>1eKG+^*?Tp$V)AP)+5Qf?U>ZSs0c17WOialYG91 zY4oZ4ahVlL(evuHCM{r z5>YMk?}amHZ5Z(M7$LEGi+8WSS%rE_rJX2i9!!&$4c^rh9{OTh1$HR1yGSpO+q4Wy zNFR9VLJMH~$>ObVg>cV4L)F+FQ(-KX<|#RU9iui7xS-~!xZ3p8Xt9_Z@!V|u#B(}) z?Oij}=XqGHH*<2KvQk8c;{_1O)@n?kIAL-a)v^6r^4rSAHhTJl#DvtJ9E)@Q(LR7@ z9*Qh?3cWbS`~yd`)@=U+`}Cvc9!~f`e`#Bl)*Bx=1G|LdA=y~AQ~FdBT|?XV(F6J4 z_F>Y;*ex~^8ZY*a_*&))4c8xXja|Jmqb7T010CNSd^&fv+{7Vhz%W6%Ruz3ik;=-1 zLAMZtZBGEGiedF$ET9AOBYsVnp{*nKUtiHt8lvxy_ssf;930^vF#^ukfYv^ua{NkJ z({`UD!RfJMfv6vHzKNnvix#W6oyvdtl**p#bY6TTF+HcYc)zB7Fuhn-?bx${Q$2KI z{u#ZYE_TI$c14GF#UKea90|ycCM6;)85-g2Z?g+TKEq0z1A3|UvxywEO<5ei8k z;VrZ$_hj`s&M#=qos5$U0;Xn}5h{OwV7z(xflZDI$&|FeY?sI=d(^vF)7y^g z#7oZ(O2qt-VVRJpZF=@6T8Dx*=&Uo-AU zT6nFPQ0sR3%HH<+2Vd7Vw#l!}Bdl*tHtJ0U6y6B*UFpTCb;VJwPGH1le=&1IA;uiP zjHE}n$rV6L$;Tx-3eC3>L^BHgSqHbXfFxg$NmjH_4xh+bn19klegb3umAK(#i_=RX zy{qU6drr{y*d%lwrQacaYdr` zDD>~G%$yV$Q`4`KOhbO-s)|L33DPu<28_BRCxP9FTy%7b`W*F~e>t5wr=_QI^w zvihYip|{In3!2JsN+U;(I6a?wK<*sh@x7+IVYr#LM{)kOr1MT%4ft^Txo0tQ22C5| zNi@t0h90559!$A~&j17h|H7(H8&U6>;TImXSiX1$j98I?eyX+%O68Ee5yky^&-Kmw z(?TX-jb!fURb=rA-0Be$(-140?d#R8**Yyw{l(O*7w$0}LUnv3rf7KcgjvR{xq<{Y zgb65mL%+VX+rG*bp%4c!YH21{IXK9D$|X@sGG~B9-P~YMh?6lobG#kv12f-Zr+wj+ z=#D;T4xa9rz=Kq(juX3|K$H*{#?FF0jz!hkLuOWx7maFAp8DHwjw6b}^Su43Z}~12 zyyhSM*2=TkQEPTq+g#X%UiQUcl^yfR23c(3swXVnlBE)Fj_(jw6$A=d@V=kmNT*DR zV~!8RpE$5|s(8Bph`D1F&lpq4&u4(a5XkeFK!9GtZ<2_)RL-EyfG}vK52LBAUQ*DR zGi$uJKVzqevh$s1D{nbBN^pO@`hG~W{opL?ydznuY9cU(_!VV~cgXoPnGB2t&JYM0W_po*ft{uy`outj#Yl~kSsUJKff7Sn+t}o8 z`6LM&O(RQPXJK{XTOIllqEQBVl)0x0J~@W4!U<6DfvCwG2EfR2N9=XN?5{-RFTeoD z9az|7d5T_DO?S)l=I|&1PKoha`4|~o01AQ~cMWt&oBM)nxF*ehGT4O8!rPf-!X0;-P|CU z${J0I)h}>A17+lbo*IbXI~l0DPe)A#)+Ge-Ggrh;WWW!cXu!a!mF`c3zj4g3SCS$L zS3Byp6yD_zYeB9z1LhH1#KTnZmmya6U75*nXV3snSw5fe&H5lvDNpdKk+v)OKg z#-+brUMR}!Tb0t7Ib*kI>Ix=X(b%@r{eB(!=*N1=x*Wq~oY1gsYkaG(761?vSo|Ra zI_ZoXGr1)_wA{G_qj(Urn@qRmaA(U)FuTC2*%q+op!ALVke=5i=doa57-qEo@%t@%7PXCYs3WD5`4H1S*+qFJ#Ks8Usruqjlxdz!ti zQ!0%|=ey8@jsx0*5rm25U%knd)h27lu07it;eU~d=o34wm(j}zv>QxfG zKs-$dK`NVyiHDw4J-3WDIjFt?Z;ymmzw)48P3$=d^}>+wkSe7h`6bjCc~U(;Calc^ zqM!cjx7WrFW7s|&kJ4D5!?r(9{zr7k*K~a0kY?V8XHNof-Zxxlmq^1*s@0EX+}7<7 z?Gj@$^@XPH&S{V%5L133Q1iz!kcwPHlE?gDXbv)c$ABTP3z`5 zejjLvPNkb|yfi%eo5+wQ>8^FC9C?ElShfS|`sNNLWnAz=yx?(LhF-#cB@14;w4#sB zCyi|_>DtEWJ28Ezg;A8aKgfD4oBsnCtf;&+WYgLfn_99=aZ_za{>PuqY3h1{Q$iqP zM(VkP_Ci2`OA*D%mr^i_ey!<)#pgnF;CrhoJC61!_f{Ht2F7eqbQdRM&ovhy7!V(JvVi zWt?^-IkyCURb#+1;=P0`rr^!Tf(BURNv-E*X`k2%iww8rJ1%v&d@sQAUus9rUJ4)= zX$9}Fp$i;#h?Yr>M|%25*O6Y1%7ADr9cCWNa6UVCL(cShjiQ77DU5LV>GVsVkdlzF ze{K55U&3;$I8la_pBKqNrxa8#QqF$i*phUH$Pek?QqBb-IGGKvR?6^^AB4<(F1I(dRL>FH*~tG`p}u z#Kt8|^a}AJ**RHZCnl5-0js5;f5kxf_^lh~ANGyirBTj-eXIz-)hVil1)A6Mg(3J> z*(lj45(mdvj3n}`_iIEeg1zVH34dWdRfR@DA!Qv(l8$awlXA}df)AXNjmCY}hsIGs z8u1XHw;K&`oqtrYG3yS^%>c8%D6;^ws{98*QlU(LGQ>zoyRW~f_~0pK9ROaSbUU6E z+<>4@G}*=Xj{4o+f_#%tuQnaMs+@q8M(6cq9-*)*q}oO_G=EBlVCtW@YDwn82xptM zi9eecb*&YpVor3(i(YS4-vlM&tlIhgIfA%$13 z_GlXXdT8Mk7lPxG&6aaQQx{a58^wv(yhbw(E({*L$8dE01)EZ>R0{yubM}$}Ym@Nm z@wnkV>?;ru8^|T*e+SB}WRZgBM!|5Z$m0Vy)*rpktF{+>TEqP|HloB3`O9ET(6DoY ztb-idMv3Q=01)IMvXQx)mm`6p*psyZ*u-T2Umw=WsIHW^Hw6&BBoI`h;^+e7A9*aE z4jDZlOEQ{uPOX1M$$VENMHt&-QfzAJKwqU)D5%gvO@tV04Oz4zLZdH7&wuF+O1xgw%ZM^1M4yxmw5WR zvftun5fspP8sOl}z`$7V>EaktG3V`7!@NTQA}$vTk1V<~)5w}BY=VyF(w8@;URE}7 zWhvWmPBY&0=>A`v3=9XV+I}D2l;UHQyWy#5-r)(auPIl=x3h15{C3*<*R$BiwG|MWiPHWF=;_-znsb2J9QHgUf+#9smFrk%;b; z^on=$(fL%WLEgrNfmv3#b%Bt^t>+nD8_gZm#@N`bRHd3(7u~Wakq`Jh6&-Z2s@=n6 zF_3h9E-9Ks7Jz)c{)WEuaIvn(-{5E$r$*ZZk-osD;P zVDbI;&^c@jvQI4%n$^y;s7uoj-5sc|g!Ou|TUr56xecG9dlo27*)a0R#!1d7pbGS# zSrE$z5TmU6M=Z=#`&O--6DENuatL9kU(EYT#D-y8hZuN~DGh$(7nZS=j-~dcg-?bz z#~^daZCDH>4#+s~Qa>J{!4WwBG>PdlQfevTG)>K6)k$NIp*@@jya7{;i!YliMw7ky z9t7~B#Inf)cm_?%exDsHA>TnztSRZD=T{X}*o@ ztsoHfH4!F|D>xJVv#0uc4pYw+5JO3)*Y>51=yVm)(zlCf`L8mbgzQeU65&$vHOUC9 z0<3wwasvEW9Q8&E_jmA+r&c-G+<}^Oi|akib2Ici^4$Y>I4%|1FM3{R0!b_df-W!(mQoTny*M06B->_(A7OzmH z9rUKiNnnqP*G*%C)rm{d5}cMj#!b9rFFxT?+GRwWisrpGBi_lj&JL>CY?1_2-58I1 zuwo@&XLL%fJH(ewyPQ){g4q)in%uR;;;be6x{Ra2^Jkl=n=fInL?khg(+7YYTeRr8SDwMdh-?=)lK-d(!C~ zYS+zR^-7qFck2;0S=UK#HK)E#x>L-j>|*9Ecq%R^t}qy*M44@ZX##~yF<8pq(c9w4 zCDXjbIZqc#A^IW^MDNp3Ry1I*F`G)nYo!rI}N8c|H<#BY-QmU)C`P7SAk)Qna=Ta{rlah^uFtp zh3JOe>HKuZt-}e}tzed>0owq1!baNW|! x2g~RruG;Nz;F6FguJ?a}^;Nn4zasePHq>-t@KU(R1WYC80O^!JvF#+|>c5VItiS*O diff --git a/test/references/states.png b/test/references/states.png deleted file mode 100644 index 3c4b2497ca9f3474d9db048698a5eae85713a469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyDyxmw5WR zvftun5fspP8sOl}z`&&L>EaktG3V_a!&PGG46P57JrV^wR^B=F_6*;qX*X7Aa~$-| zOker?gb09RD64-u8XD zd(B#TfBqd4RGYhjXUfzL#5FT*Y#G+x6RZcD9ei>MU#-_N6m5 zDhP0pPJ~;DzgFCH_uKWCg61D;ZlAuaEXUk<=luQK|7>g@vHi2KeX#LE7ptR!01Fdw z#Gj(-YxeOKcPHoXYWn|_6RWO+)4y!4QT%_dvdKY!gQbyZ;)DOMzczQjz53E2{p01A zhT~2O-#`C;$!MdqK7wfXA^YQ@*YSUM-b$s1#UAX=mG|%8(Yl)DQ{wH-x%=nH9oqKx kGAJ5|h&-SYn~r+M!#4!2XVvoplMDlcr>mdKI;Vst0EA4!PXGV_ diff --git a/test/references/states2.png b/test/references/states2.png deleted file mode 100644 index 176aa7f76bd9b4e24b610ec9fd150cb7660413c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyD^(0VRH?feEDGbBG%lV`@0v#s5&s8}_4M^k_Tl~o zd1eIE15Jx4duR7JOa0D2sSSO+OpXcyEO-gO%6E28_pPn`Ubv=mx+W3k6LK=xLoKgs z@7@i+_LEtfrO82o11~Y>)1BJ=Yv(nr-rz_;B?rr)O~v2;?tGQ{!yxmw5WR zvftun5fspP8sOl}z`*$5)5S5QV$R#!wtmuq5^WdzJLEP=mv3O6HaVqy;o=riN5@3X zE;-kYrq`3tMK(PDdVcXo-87ITXrQ6HZ1cs^d*-|N{->>eU;BOES~-U4J_-UXOpZhn z56iwb{Qq)w-pX%2|CQcBHGQjM`*}GrO)jk8V)FEvm2tLB{?~<0JU(M{_FsKO`^=s5 z|L*T!U8vi5=FFdYGvimg&w26u%$>Dz2PYbHurxXd(3xnteUeVI`*niw-m_;uzY>(Wn^Q9PyYc>eVY~HP&*uxK3ve(sDhO~?+b)^^ n+urieRBO_ljTRFmaBFgTe~DWM4f>ejB2 diff --git a/test/references/strokeText.png b/test/references/strokeText.png deleted file mode 100644 index 7e12af18efeb1320122ccd08d32d89cc08baa64d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2942 zcmdT``8S&h7k(oo6(yDigW6Rst*uIH39VA2ma4UgB+9X*6;=C|Fo;p5qll%bt(~bQ zj#{RczDW5x5oWqbityUU5KCLz*go^~_Ycf>?z#6l=iYPfbMHC#-1B6)IN6D!bTy2*+CPT>ew#(<=Yich#eg0VUI6vLvqH$Wg zF2Blq^1VXqOUJsxkirto&wtWm-+eJ$5H+rJ{qWJStH$zRBLS^2%2P^cE8wL~jSPvc zOqYG_$+VbCnp#Y%*gge?;$d=PL4exEqJi%aU>f>@bA@&K2W;;2TxDxUylBnzkX6kO z)a%0V$C3zDjgvOt%hI0ci)#^-UHkt11>2LGs24GqAiyYLqKg5hKJ%)O(Qa4n=jcMg zkOrIc2WXagKOIM#NIe;DCu1sG*{255Rd5wD3hn>9Uo5>n+uciv3!@8?ZYZE|DBoL9 zueI;+i?(@^;6uT3Qelid*?~HU2#f2_qCR+r(nIzLb|E`pUIG(n(jODiw&`KiS=5jc zWM~T{z?6h=$o(wZnzibq$6z#=47Rbq3m+P>N`aA(_6@;F>wRIy3-DKXoCQ2k z*{`l|7%T?0zy+bhPpl+ciDzZF>H82xfOXkx;9Jml4wNQXQ30*0X)jkWNJ`TfdyB9w zX%H9$vojt+la(U^7?_z6GbKew0+|*=D#tlG_SKCGma+XTeLD^8!wY;k%Qs zoEt)6m}sOEeCymg>#*KUYD6z|;^-E$bbnJLy4P@|Sj&ZA0bPM`c$Pr!#iL}6^{m7C z5ximEYO~6^2gGYI)h1c3q>>Q(MY3pL+|1gk*!n&@${Jh~h-?vZ69`hIzWjM*3WLSXwbT%wbZgjx_3SGpN|W zd;5&2>{r#wvR-j@WN(d#=!PN2Jv~g@`PVsUD*8i$a;XG-w(zr!e$v1n0lY?FlKG>R zqWXZ&!KMhYXhVAD#rW=N^R2j9*_zHoxgDnzr{6Fg=pAA9J&#!;>19*t+fV@=$p^gwBcTY_pv*Z5t;DAXOOAdSFcGtcutDUsB_mWl}yeI+x z=KfT6h~&&PtCzjL%@y1k2Nc_7xv%(pc9iDN@X!_S6;xLRUC$WRktWNSvM)1uligO0 zOT()nB2wq^2FENJL1Wi46$9td2|H;0*G*;|uKVSNxQQ6*RgYF5PeLSdpHTyvAQ_Lu zjq;Byz(LFKlXuwLx;nYWoVwgd5%%uGYHDr~9sTL+)SyJ?m2vS-PapWWq^6#xWo_*+X&EG8PmI(T|^q?U0+y?(#(x-5IFS22I_P5?@T65pEsJG9PbUg!Hl8wnBS@hdtK(Z?|jVs@in~9GBzV|JSP>Yy$ zZ!&tIL%KOV&g3MB?AHmm%u8H;Q$^-(ob}kIizT)&t&*IfuOQpF@l|JjM;}=`!sf3$ zNlr4r!k!6!vv8@r8suZj>-B5v>1&$?#G-pQBcq_Ig{>S~T zKBgz%_e&SOJzFlBk9H2PO1O(`isH&zD^TesA9Ylfhq3kWAv5`)RiT!VP|G36o^Gtv zxT{qbBUzTB;)|7$*3Hn2w|sZX>&PXxf0pq94RIm^hJHGHD59@;uN<9l_e6}+iK4RK z2j|~=u240NxI?PwSb)uFrcc&x4@S&wpkW*&EYWm)4nw=7LaIiOCiZH~& z?|&kX6BuMdrV)iB&~qYx5qua$nBz0Psd#N&FgFsjb*32P*AKmeXu zz!(&iO_0|;(9|sjme)=+^~fGF9L5JLgPOvDqwtZU@6t`R@2|TwWl=CvhktK=4SuBW zsEJsZr7iz11NSV#wdp?n#o*F?yBUF(t==1ih&LnUZw9gkw3s`K)P+Nfk;#~}G=;PW z%|ZStR!UC1kwyO@;5_x*1_Avv5$b2m-_-p-kxl;sm3I~l1U0U9s|w(y8DfX#8QI=P ZaG0&@gL<0#?y-CZ?5{c5G+x1{{uiy3I}88- diff --git a/test/references/textAlign-center.png b/test/references/textAlign-center.png deleted file mode 100644 index ce25ea6310e913124b5b41e3341c546ccd88a203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1615 zcmds&|5s860L96inH|ekt3#t?g<36jkzZhGei=${e#upfGEG;gxf-ODVu&2w$<~21 zAAwm4t=3wn)Kx1Z1ZGENZwjoDVp`JV={pV;-=hRWW%eiR*Umlne$Kgnz`f_vQt7@v zYkY7xoG-AGwtJp`ytB90d^YZHlFh^Ga1xz{bHCG7)lKnyv*;v{lCY?MiRW^^O(5e$ z4-WSM3ee*Aa_h(YQ+^rFS)fJD4TloJHD?x+()WJ4b?3!Z#-AuE{8w?pqsFF)xU{%S ztG&*D_*8=b=2^(mfv#%_#x6?ozWCQ3`L~`5X*D+jS6`U86GBEoB zs$C#MWG+Nzk9OBu5<#VyuuR!jPU2bK^aU>^LBR+w)Y+`#Mi+^7(Fku@cH|20l^*5s z#58YDpYqsG{5E=eoQb{a_g<7tRdoPW0t*dfw~*>S7tY~_>E`j%VnvqwBCmMiMk|G=$B(V>4v)7*T#00TK1Irp_{a11~8W^mB z>418xc2MP1d=I1sPPZMNSqM}y33aJ~C1H?3oKXuW94m7t0P2fyC_Zk-1$grEgXZKy zIv5i;?I>+MQWe^uOaJ+x-m!FScQZr*XHMjdo#%}0;keW!O=g{jsdsbH47tqW{u1jU zMUoW37T?pG2b$Y*L5=RNJb)^L#Q-ZAL#T7lB?vzuk#dtf~TeUhaSu*|Jo+1U~2DIv-*pmP0qPpn#Mte#|aqw+hVmtk7< zuiQa{0liZ6NE%1Xn;aHJ8hZ14Gx2ixV~(r8zD()ha9oW-M8TbN40SkfaArf1sc(sl zExi*5?xcV`qz@~?=BQ=1r6%(6$6ljVI_+)oSW+Poa@?DZ?m$Vqn64sQn`ndnr4T9E z0wsw{H(FNA9K_$ubx6#rdfsW>Wm68JLE0kr2QU*=BYu$VFZPVanT z%kI3@W5ln1cw6025M+HT(jZTxjNjqezju*Cx?Ae4X14=x?in+T(ko|yLlR?keBOO2 zv>fi9=%%RNW_NbHzAl{JU`Map(fzXgEKs{GwO}6~COF2g*wM}oXWod#RQyQ#QOMs) z2eUpmn0>eDu|V(MV6FB!xZ0%^mquAweVM>qm|%pKxaI79evMj>t>6}@~6T2`;xIGkdcFtnQ{Zl3& z%IBGN=&%J6S!*K$6rb5wS)MfF=|2uIIzy7NDUq?IHfTBz%*tt<_RpG`d44B=`dbZp zjSyqz#e)U4$JwpxlpW>mn|fLI@XcD*5YO-Ed$b+@dkrH%LQ)}IYV!ubFMyCAOh;NM aul=8$nyyIu%OIWq100Z$N^6SGuJ{iKZpNzs diff --git a/test/references/textAlign-left.png b/test/references/textAlign-left.png deleted file mode 100644 index 9bb3765eb3b74e6c6f7bf289e90590b4f138a6b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmeHI`!|~h82%&{m#FJzPF&C0Q?jG3t-4L}8Ec z3lkXd*?qc{ANnZj4p1RaZOdtO_~2soU2NAIJM1lknm=;gn;)7lwBcSgqXQ_=XV{NI z;O>(@;C^M!G^2Uwis_I?PL1UV+=a(gmz#_SM*Ht?aFv@!2Sz~z!y}bl_*M~@NDvXZ zbXpPX>qN-FPsT1KoR&-FzzX+W!gfE_*9Py#NAU{n2B@XMrTJBM1BgYOkDW9w?W5p-hXNyL6*U(e`{4JozcF2UX zN{Q2Yr!@hcDV?$0A6x=g)C3*pi?GFTac#1@&|(7a3CjdvC2^Mf^?grE>GqmSoFpf9 zH3pS!zo)ksWj)d^C%k5TC2CKDmTLlSfv zU>-Ne8`~)lR6bXCZUbhl8Wuvd<$W5z%8bTNdZG0mSnn0%)a9mYxlDWw)}`8GM;o$d zo&7!qw;CNe9&vT~AS|ya07q(MbY~DZPrb)~bS=hPt4A|B&894Gj19-cb5L&)adDi4 zbfWCLJfigSAl?j`MwR&|ydV~M*To7PNYf{hWBoQiSy2;XW94YJ;9w%uQVf?I`V6zZ zOC7T^1sll%TwbTrv!Lhc?)RHayqn~c;KC=Xpj)D$i#Cz;6nE|O)|j6gw2m<&l4A6Q;a%=qxu4u?j*wC!qGA;COO%&h0+^AwQL@Wou~Hp5n`^=i;4*Hq)Y|a!asm!v$QF zTmacj!APxr>?;RO4m_0~tb{nV3Mu*Yx4r5H1tX>UWomhV2+`J1cJ>&#!D3b%vM$;P zo7HCIvB{ArdWWsHZV*ad*M`!w$aL}e7_Ke@A?B`tG@g)|H;TDOmeF!c3XyfOb3vWI zA1*0T+eJ~^!oNNR$dL`@cxZ74icn=bX<&48U;fJmT9%~pcpG!@n zL|;Q+Bj1pM=Wcv4!6Rb+8f}=(0A!8v<2XH)9x+U*u+37b)-na==Zk7BM=Gi7W?CR- z8L%NUEg;Ul{MLfX7gVs&80l(^bon3u?!Y#bUD``sH_>u|%(BG`=I7Obs^z5T_~YvV QntT8-=yxmw5WR zvftun5fspz6kc!@s7A`u#WAE}&f8nw9bu^q?H|*Z6)n*)Rhy6zxb}!bAlH$eH)$@c zx{G{whq(qg&S0JtspQ3Nd}u}Ng>9!7xn4e+vPozW_ll)%=8H~v33CN{&lP)beb)T= z`u(>eikDT^Da?Ov`@W|5OU?N?x4$q%H!5CX<8HLOBcHobAmOb`e(OJ@hTn^Q*{am5 zxR;n23uqdQNR&~m@SXYa0pt43|0eJHcTn$jRpZ|SfeZf2*SydDy4UpRR?7*#UrP(8 zmu_yX{QBO!Jknl#24@cYw|W13FNa)w=3vMCjbS?DW~tZHm~0Q|A22;|v-fNG)$7~; zpXI&sKYli|B%4|Aw!*;VyS@h!6J#&2$J~yvFS=qV(Ca;$x$)xVHLI2UUu5wC2o2KJ>#(OJH&kt6zzPWRC#`k|Sve*{< zwSMCLK)_(H-ueYK3-s2XmVWhV&aN8w*tp9T^KDCOB9s3tvig^J{Dy~uzR@=g>-~N8 z7Yw)U>a)FDaew)%AFqOE?C$*bzJFy(5X&c-r-zM;W^HZ#G6KR!PY-RooIS-l^0emv zWxg``z`(VbUX*B;wC6v2eBivRUyQ$O|&ozMQ6oXfqKX(rjH5YQ)J+^}0i z{PJ(9*X*xf*M2QEK0cdKX2G0CCA-q+-2UcO8+%ite$BppC0xbj3$D%N5pUfd0{iUr8o$uZ7jc(>HXU-HE#yVn}-3wdRepEH;T_}xFpTE}d+wB`rD$v(TYdnXlH z?|%C`c~!(E=bZ~=XT8uB40w0p>%)H;-K`H4_xiFG)NeVtq=HY$SAuyW(zlH-