From 42b1d7510731e3b3fe5bfc785a1abfbd1ad9afa4 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 10 Dec 2013 09:53:33 -0800 Subject: [PATCH 001/197] Update config.js --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index d92244f6..ed6f4b12 100644 --- a/config/config.js +++ b/config/config.js @@ -19,7 +19,7 @@ config.baseUrl = ""; config.arrowModuleRoot = global.appRoot + "/"; config.dimensions = config.arrowModuleRoot + "config/dimensions.json"; config.defaultTestHost = config.arrowModuleRoot + "lib/client/testHost.html"; -config.defaultAppSeed = "http://yui.yahooapis.com/3.8.0/build/yui/yui-min.js"; +config.defaultAppSeed = "https://yui-s.yahooapis.com/3.8.0/build/yui/yui-min.js"; config.autolib = config.arrowModuleRoot + "lib/common"; //for yui sandbox From e5ee8c53c2a9150133cee5d5cce6ac591cadcf0b Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 18 Mar 2014 17:25:52 -0700 Subject: [PATCH 002/197] Preparing for v0.5.0 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c34c988..8c8c076c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +# 0.5.0 + + * Adding feature to Import tests from other descriptors based test or group [ Details - https://github.com/yahoo/arrow/pull/200 ] + * Adding support for webdriver key object and improved error messaging [ Details - https://github.com/yahoo/arrow/pull/200 ] + # 0.4.3 * adding path method to return installed arrow directory [ Details - https://github.com/yahoo/arrow/pull/199 ] diff --git a/package.json b/package.json index b2f704ee..7e8d0cf2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.4.3", + "version": "0.5.0", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From d82ec0dd587ab072588d69ccb28b9bb6ef9710a4 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 18 Mar 2014 17:37:31 -0700 Subject: [PATCH 003/197] Fixing call for setSSL --- lib/session/sessionfactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 80a707f2..d7286435 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -188,9 +188,9 @@ SessionFactory.prototype.getFactoryTests = function () { //Check if the useSSL flag is set from either commandline or at descriptor level if (testJson.useSSL) { - testJson = setSSL(testJson); + testJson = this.setSSL(testJson); } else if (this.useSSL && testJson.useSSL != false) { - testJson = setSSL(testJson); + testJson = this.setSSL(testJson); } dp = testJson.dataprovider; From f9ea524d4a3cc46e59e71c8416b6cf9b66be36ec Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 19 Mar 2014 00:45:50 -0700 Subject: [PATCH 004/197] Fixing demo tests for import descriptor --- demo/mocha/test/import-descriptor-test.json | 21 ++++++++++++-- demo/mocha/test/test-dummy-mocha.js | 32 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 demo/mocha/test/test-dummy-mocha.js diff --git a/demo/mocha/test/import-descriptor-test.json b/demo/mocha/test/import-descriptor-test.json index 9827e8ed..04e82121 100644 --- a/demo/mocha/test/import-descriptor-test.json +++ b/demo/mocha/test/import-descriptor-test.json @@ -11,9 +11,26 @@ "importDescriptor":[ { "path" : "../importTests/finance-descriptor.json", - "importTest":["Test YHOO Ticker"] + "Test":["Test YHOO Ticker"] } - ] + ], + + "dataprovider" : { + + "dummy_test" : { + "params" : { + "engine" : "mocha", + "engineConfig" : "./mocha-config.json", + "test" : "test-dummy-mocha.js", + "page" : "http://www.yahoo.com" + }, + "group" : "int" + + } + + } + + } ] diff --git a/demo/mocha/test/test-dummy-mocha.js b/demo/mocha/test/test-dummy-mocha.js new file mode 100644 index 00000000..06ca1062 --- /dev/null +++ b/demo/mocha/test/test-dummy-mocha.js @@ -0,0 +1,32 @@ +var + Y, + chai; + +describe('test-dummy-mocha', function(){ + describe('test', function(){ + + before(function (done) { + + // Initialize chai and YUI + if(typeof window == "undefined" && typeof chai == "undefined"){ + chai = require('chai'); + } + else{ + chai = window.chai; + } + + Y = YUI().use('node', function () + { + done(); + }); + + }); + + it('has dummy one', function(done){ + + chai.assert(1==1); + done(); + + }); + }); +}); \ No newline at end of file From 521458db885602613b7afb9b92dff324f1369f30 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 19 Mar 2014 00:55:25 -0700 Subject: [PATCH 005/197] Fixing demo tests for import descriptor --- demo/mocha/test/import-descriptor-test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/mocha/test/import-descriptor-test.json b/demo/mocha/test/import-descriptor-test.json index 04e82121..be96716f 100644 --- a/demo/mocha/test/import-descriptor-test.json +++ b/demo/mocha/test/import-descriptor-test.json @@ -11,7 +11,7 @@ "importDescriptor":[ { "path" : "../importTests/finance-descriptor.json", - "Test":["Test YHOO Ticker"] + "test":["Test YHOO Ticker"] } ], From 886a9b6e7b7f6fe90ca94ba6082caa6bb6de47a7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 19 Mar 2014 01:19:38 -0700 Subject: [PATCH 006/197] Preparing for v0.5.0 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c8c076c..ecffe6ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ # 0.5.0 * Adding feature to Import tests from other descriptors based test or group [ Details - https://github.com/yahoo/arrow/pull/200 ] - * Adding support for webdriver key object and improved error messaging [ Details - https://github.com/yahoo/arrow/pull/200 ] + * Adding support for webdriver key object and improved error messaging [ Details - https://github.com/yahoo/arrow/pull/201 ] # 0.4.3 From 7998e451549332ccaf2a6252b31ef9f52fb23cda Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 19 Mar 2014 09:53:01 -0700 Subject: [PATCH 007/197] Fixing tests for import descriptor demo --- .../mocha/importTests/finance-descriptor.json | 25 +++++++++++++ demo/mocha/test/import-descriptor-all.json | 35 +++++++++++++++++++ demo/mocha/test/import-descriptor-group.json | 2 +- demo/mocha/test/import-descriptor-test.json | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 demo/mocha/test/import-descriptor-all.json diff --git a/demo/mocha/importTests/finance-descriptor.json b/demo/mocha/importTests/finance-descriptor.json index 46754bf2..dfab156e 100644 --- a/demo/mocha/importTests/finance-descriptor.json +++ b/demo/mocha/importTests/finance-descriptor.json @@ -28,10 +28,35 @@ "test": "../test/test-quote-mocha.js", "quote": "Yahoo! Inc. (YHOO)" + } + ] + } + }, + + "Test AAPL Ticker" : { + "group" : "smoke", + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "aapl\n" + } + }, + { + "test": "../test/test-quote-mocha.js", + "quote": "Apple Inc. (AAPL)" + } ] } } + } }, { diff --git a/demo/mocha/test/import-descriptor-all.json b/demo/mocha/test/import-descriptor-all.json new file mode 100644 index 00000000..8069a76a --- /dev/null +++ b/demo/mocha/test/import-descriptor-all.json @@ -0,0 +1,35 @@ +[ + { + "settings": [ "master" ], + + "name" : "import_test", + + "config": { + "baseUrl": "http://finance.yahoo.com" + }, + + "importDescriptor":[ + { + "path" : "../importTests/finance-descriptor.json" + } + + ], + + "dataprovider" : { + + "dummy_test" : { + "params" : { + "engine" : "mocha", + "engineConfig" : "./mocha-config.json", + "test" : "test-dummy-mocha.js", + "page" : "http://finance.yahoo.com" + }, + "group" : "int" + + } + + } + + + } +] diff --git a/demo/mocha/test/import-descriptor-group.json b/demo/mocha/test/import-descriptor-group.json index 720eb573..aa684f7c 100644 --- a/demo/mocha/test/import-descriptor-group.json +++ b/demo/mocha/test/import-descriptor-group.json @@ -11,7 +11,7 @@ "importDescriptor":[ { "path" : "../importTests/finance-descriptor.json", - "group":"func" + "group":["func"] } ] diff --git a/demo/mocha/test/import-descriptor-test.json b/demo/mocha/test/import-descriptor-test.json index be96716f..aba4834a 100644 --- a/demo/mocha/test/import-descriptor-test.json +++ b/demo/mocha/test/import-descriptor-test.json @@ -23,7 +23,7 @@ "engine" : "mocha", "engineConfig" : "./mocha-config.json", "test" : "test-dummy-mocha.js", - "page" : "http://www.yahoo.com" + "page" : "http://finance.yahoo.com" }, "group" : "int" From c7731c5cf22e51fb6234eff8ab4f801e16632570 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 19 Mar 2014 17:53:32 -0700 Subject: [PATCH 008/197] Fixing doc for custom controller error callback --- demo/mocha/test/finance-controller-mocha.js | 2 +- demo/mocha/test/proxy-controller-record-mocha.js | 2 +- docs/arrow_cookbook/arrow_in-depth.rst | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/demo/mocha/test/finance-controller-mocha.js b/demo/mocha/test/finance-controller-mocha.js index 0f208d42..68daaa50 100644 --- a/demo/mocha/test/finance-controller-mocha.js +++ b/demo/mocha/test/finance-controller-mocha.js @@ -54,7 +54,7 @@ FinanceCustomController.prototype.execute = function(callback) { webdriver.waitForElementPresent(webdriver.By.css(".title")).then(function() { self.driver.executeTest(self.testConfig, self.testParams, function(error, report) { - callback(); + callback(error); }); }); diff --git a/demo/mocha/test/proxy-controller-record-mocha.js b/demo/mocha/test/proxy-controller-record-mocha.js index 3f9ec010..58662277 100644 --- a/demo/mocha/test/proxy-controller-record-mocha.js +++ b/demo/mocha/test/proxy-controller-record-mocha.js @@ -34,7 +34,7 @@ ProxyCustomController.prototype.execute = function (callback) { console.log(record); self.testParams.proxyManagerRecord = record; self.driver.executeTest(self.testConfig, self.testParams, function (error, report) { - callback(); + callback(error); }); }); diff --git a/docs/arrow_cookbook/arrow_in-depth.rst b/docs/arrow_cookbook/arrow_in-depth.rst index 83da1456..8f0048c4 100644 --- a/docs/arrow_cookbook/arrow_in-depth.rst +++ b/docs/arrow_cookbook/arrow_in-depth.rst @@ -1341,9 +1341,8 @@ Example - var record = JSON.parse(self.getProxyRecord()); // Get the proxy record self.testParams.proxyManagerRecord=record; - self.testParams.page=null; self.driver.executeTest(self.testConfig, self.testParams, function(error, report) { - callback(); + callback(error); }); }); From 31c8ccf0b2c7faf6078549cd1d55c502ae19841c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 22 Mar 2014 23:17:27 -0700 Subject: [PATCH 009/197] Removing actionscript --- .../action_test/test/locator-action.js | 52 -------- .../action_test/test/simple-action.js | 24 ---- .../action_test/test/test-quote.js | 18 --- .../action_test/test/test_descriptor.json | 42 ------- lib/client/yuitest-runner.js | 34 ------ lib/client/yuitest-seed.js | 6 - lib/controller/default.js | 2 - lib/driver/selenium.js | 113 +----------------- lib/engine/yuitest/yuitest-runner.js | 48 -------- lib/engine/yuitest/yuitest-seed.js | 7 -- lib/interface/driver.js | 4 - tests/unit/lib/controller/default-tests.js | 6 - tests/unit/lib/driver/config/action.js | 1 - tests/unit/lib/driver/selenium-tests.js | 73 +---------- tests/unit/stub/driver.js | 4 - 15 files changed, 6 insertions(+), 428 deletions(-) delete mode 100644 docs/arrow_tutorial/action_test/test/locator-action.js delete mode 100644 docs/arrow_tutorial/action_test/test/simple-action.js delete mode 100644 docs/arrow_tutorial/action_test/test/test-quote.js delete mode 100755 docs/arrow_tutorial/action_test/test/test_descriptor.json delete mode 100644 tests/unit/lib/driver/config/action.js diff --git a/docs/arrow_tutorial/action_test/test/locator-action.js b/docs/arrow_tutorial/action_test/test/locator-action.js deleted file mode 100644 index e2e830a9..00000000 --- a/docs/arrow_tutorial/action_test/test/locator-action.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - -YUI.add("navigate-action", function (Y) { - var buttonNode = null; - - console.log("action initialized"); - - Y.namespace("arrow").action = { - setUp: function (callback) { - var locators, - locator, - doc = Y.one(document.body), - node, - buttonTarget, - i; - - console.log("action setUp"); - - locators = this.testParams["locators"]; - if (!locators) { - locators = [this.testParams["locator"]]; - } - - // all locators except the last one enter texts - for (i = 0; i < (locators.length - 1); i += 1) { - locator = locators[i]; - node = doc.one(locator.target); - node.set("value", locator.text); - } - - // save the buttonNode to click later - buttonTarget = locators[locators.length - 1].target; - buttonNode = doc.one(buttonTarget); - if (!buttonNode) { - callback("Could not find button node to click: " + buttonTarget); - } else { - callback(); - } - }, - - execute: function() { - console.log("action executed"); - buttonNode.simulate("click"); - } - } - -}, "0.1", {requires: ["node", "node-event-simulate"]}); - diff --git a/docs/arrow_tutorial/action_test/test/simple-action.js b/docs/arrow_tutorial/action_test/test/simple-action.js deleted file mode 100644 index 396d10d2..00000000 --- a/docs/arrow_tutorial/action_test/test/simple-action.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - -YUI.add("simple-action", function (Y) { - - console.log("action initialized"); - - Y.namespace("arrow").action = { - setUp: function (callback) { - console.log("action setUp"); - callback(); - }, - - execute: function() { - console.log("action executed"); - window.location.href = "http://www.yahoo.com"; - } - } - -}, "0.1", {requires: []}); - diff --git a/docs/arrow_tutorial/action_test/test/test-quote.js b/docs/arrow_tutorial/action_test/test/test-quote.js deleted file mode 100644 index 63369bae..00000000 --- a/docs/arrow_tutorial/action_test/test/test-quote.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - - -YUI({ useBrowserConsole: true }).use("node", "test", function(Y) { - var suite = new Y.Test.Suite("Quote Page test of the test"); - suite.add(new Y.Test.Case({ - "test quote": function() { - Y.Assert.areEqual("Yahoo! Inc. (YHOO)", Y.one(".yfi_rt_quote_summary").one("h2").get('text')); - } - })); - - Y.Test.Runner.add(suite); -}); - diff --git a/docs/arrow_tutorial/action_test/test/test_descriptor.json b/docs/arrow_tutorial/action_test/test/test_descriptor.json deleted file mode 100755 index 735048e0..00000000 --- a/docs/arrow_tutorial/action_test/test/test_descriptor.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "settings": [ "master" ], - - "name": "controllers", - - "config": { - }, - - "dataprovider" : { - - "text_enter" : { - "group" : "func", - "params" :{ - "scenario": [ - { - "page": "http://finance.yahoo.com", - "action": "locator-action.js", - "locators": [ - { - "target": "#txtQuotes", - "text": "yhoo" - }, - { - "target": "#btnQuotes" - } - ] - }, - { - "test": "test-quote.js" - } - ] - } - } - } - }, - - { - "settings": [ "environment:development" ] - } - -] diff --git a/lib/client/yuitest-runner.js b/lib/client/yuitest-runner.js index 397223cd..9deee118 100644 --- a/lib/client/yuitest-runner.js +++ b/lib/client/yuitest-runner.js @@ -9,40 +9,6 @@ YUI({ useBrowserConsole: true }).use("get", function (Y) { - function loadAction() { - YUI({ useBrowserConsole: true }).use(ARROW.testBag, function (Y) { - var action = Y.arrow ? Y.arrow.action : null; - - if (!action) { - ARROW.actionReport = JSON.stringify({"error": "Could not find an action to execute"}); - return; - } - - try { - action.testParams = ARROW.testParams; - - action.setUp(function (error, data) { - var interval; - - ARROW.actionReport = JSON.stringify({"error": error, "data": data}); - if (error) { // we cannot execute the action - return; - } - // wait for the report to be collected before executing the action - // because actions are supposed to navigate away - interval = setInterval(function () { - if (ARROW.actionReported) { - clearInterval(interval); - action.execute(); - } - }, 100); - }); - } catch (ex) { - ARROW.actionReport = JSON.stringify({"error": "Exception: " + ex}); - } - }); - } - function completeTest(testRunner) { var YTest = YUITest; diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index b0efc6a3..f43d2a33 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -14,13 +14,10 @@ // ARROW.testLibs = []; // ARROW.scriptType = "test"; // ARROW.testScript = "test-file.js"; -// ARROW.actionScript = "action-file.js"; // ARROW.onSeeded = function() { /* add test, hand over to runner */} ARROW.testBag = ["test"]; ARROW.testReport = null; -ARROW.actionReport = null; -ARROW.actionReported = false; // try to catch unhandled errors if ((typeof window !== "undefined") && !window.onerror) { @@ -179,9 +176,6 @@ if ((typeof window !== "undefined") && !window.onerror) { if (("test" === ARROW.scriptType) && (-1 !== name.indexOf("-tests"))) { //console.log("Found test module: " + name); ARROW.testBag.push(name); - } else if (("action" === ARROW.scriptType) && (-1 !== name.indexOf("-action"))) { - //console.log("Found test action: " + name); - ARROW.testBag.push(name); } }; diff --git a/lib/controller/default.js b/lib/controller/default.js index abcf2dc8..29e6255a 100644 --- a/lib/controller/default.js +++ b/lib/controller/default.js @@ -166,8 +166,6 @@ DefaultController.prototype.execute = function (callback) { var self = this; if (self.testParams.scenario) { self.executeScenario(callback); - } else if (self.testParams.action) { - self.driver.executeAction(self.testConfig, self.testParams, callback); } else { if (!self.testParams.test && self.testParams.page) { self.driver.navigate(self.testParams.page, callback); diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 6c5e37a0..28e3ecf1 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -257,8 +257,6 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { scriptType = "test", testJs, testJsUrl = "", - actionJs, - actionJsUrl = "", testParamsJs, yuiruntime = "", appSeedUrl, @@ -311,12 +309,8 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { }; testJs = testParams.test; - actionJs = testParams.action; - if (!testJs && !actionJs) { - return callback("The test or the action js must be specified"); - } - if (actionJs) { - scriptType = "action"; + if (!testJs) { + return callback("The test js must be specified"); } appSeedUrl = self.config["defaultAppSeed"]; @@ -420,9 +414,6 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { if (testJs) { self.logger.info("Loading test: " + testJs + " from " + this.args.relativePath); testJs = resolvePath(testJs); - } else { - self.logger.info("Loading action: " + actionJs + " from " + this.args.relativePath); - testJs = resolvePath(actionJs); } testLibsJs += fs.readFileSync(testJs, "utf-8"); @@ -521,7 +512,6 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { "ARROW.testLibs = " + testLibsUrl + ";" + "ARROW.scriptType = \"" + scriptType + "\";" + "ARROW.testScript = \"" + testJsUrl + "\";" + - "ARROW.actionScript = \"" + actionJsUrl + "\";" + "ARROW.engineConfig = " + engineConfig + ";" + "ARROW.onSeeded = function() { " + testLibsJs + " };" + seedJs; @@ -596,105 +586,6 @@ SeleniumDriver.prototype.navigate = function (page, callback) { }; -/** - * Driver interface method, called by controllers - * - * @param testConfig values from the config section in the descriptor ycb - * @param testParams parameters for this test - * @params callback function to call at the end of the test with errorMsg - */ -SeleniumDriver.prototype.executeAction = function (testConfig, testParams, callback) { - var self = this, - logger = this.logger, - webdriver = this.webdriver, - actionJs, - page, - driverJs, - retryCount = 0, - url; - - actionJs = testParams.action; - page = testParams.page; - if (!testParams.lib && self.args.params && self.args.params.lib) { - testParams.lib = self.args.params.lib; - } - self.testCallback = callback; // save it so that async wd exception can be reported back - - function finializeAction(actionData) { - logger.debug("Finalizing action"); - webdriver.executeScript("ARROW.actionReported = true;").then(function () { - webdriver.waitForNextPage().then(function () { - callback(null, actionData); - }, function(err) { - self.logger.error('finalizeAction: webdriver.executeScript error : url - ' + url + ' ,error - ' + err); - self.errorCallback(logger, 'webdriver.executeScript error : url - ' + url + ' ,error - ' + err, callback); - }); - }); - } - - function collectActionReport() { - var reportJson; - - retryCount += 1; - logger.debug("Waiting for the action to finish, attempt: " + retryCount); - webdriver.executeScript("return ARROW.actionReport;").then(function (report) { - if (report) { - reportJson = JSON.parse(report); - if (reportJson.error) { - self.logger.error("Action error: " + reportJson.error); - self.errorCallback(logger, "Failed to execute the action: " + actionJs, callback); - } else { - finializeAction(report.data); - } - } else if (retryCount > self.maxAttempt) { - self.errorCallback(logger, "Failed to execute the action", callback); - } else { - setTimeout(collectActionReport, self.attemptInterval); - } - }, function(err) { - self.logger.error('collectActionReport: webdriver.executeScript error : ' + err); - self.errorCallback(logger, 'Error in executing script : ' + err, callback); - }); - } - - function initAction() { - webdriver.executeScript(driverJs).then(function () { - setTimeout(collectActionReport, self.attemptInterval); - }, function(err) { - self.logger.error('initAction:webdriver.executeScript error : ' + err); - self.errorCallback(logger, 'Error in executing script : ' + err, callback); - }); - } - - this.createDriverJs(testParams, function (err, driverjs) { - if (err) { - return callback(err); - } - driverJs = driverjs; - if (page) { - self.logger.info("Loading page: " + page); - if (!self.isMobile) { - webdriver.manage().window().maximize(); - } - - // local paths need to be served via test server - url = self.getRemoteUrl(page); - if (false === url) { - self.errorCallback(logger, "Cannot load a local file without arrow_server running: " + page, callback); - } else { - webdriver.get(url).then(function () { - initAction(); - }, function(err) { - self.logger.error('createDriverJs:webdriver.get : ' + err); - self.errorCallback(logger, 'Error in getting url - ' + url + ' : ' + err, callback); - }); - } - } else { - initAction(); - } - }); -}; - /** * Driver interface method, called by controllers * diff --git a/lib/engine/yuitest/yuitest-runner.js b/lib/engine/yuitest/yuitest-runner.js index 2e5da3a5..3b2ddda9 100644 --- a/lib/engine/yuitest/yuitest-runner.js +++ b/lib/engine/yuitest/yuitest-runner.js @@ -61,40 +61,6 @@ yuitestRunner.prototype.runRunner = function (cb) { var self = this; YUI({ useBrowserConsole: true }).use("get", function (Y) { - function loadAction() { - YUI({ useBrowserConsole: true }).use(ARROW.testBag, function (Y) { - var action = Y.arrow ? Y.arrow.action : null; - - if (!action) { - ARROW.actionReport = JSON.stringify({"error": "Could not find an action to execute"}); - return; - } - - try { - action.testParams = ARROW.testParams; - - action.setUp(function (error, data) { - var interval; - - ARROW.actionReport = JSON.stringify({"error": error, "data": data}); - if (error) { // we cannot execute the action - return; - } - // wait for the report to be collected before executing the action - // because actions are supposed to navigate away - interval = setInterval(function () { - if (ARROW.actionReported) { - clearInterval(interval); - action.execute(); - } - }, 100); - }); - } catch (ex) { - ARROW.actionReport = JSON.stringify({"error": "Exception: " + ex}); - } - }); - } - function runTest() { var YTest = YUITest, testRunner = YTest.TestRunner, @@ -138,18 +104,6 @@ yuitestRunner.prototype.runRunner = function (cb) { } } - function fetchAction(actionScript) { - if (actionScript.length > 0) { - Y.Get.script(actionScript, { - onSuccess: function (o) { - loadAction(); - } - }); - } else { - loadAction(); - } - } - function fetchTest(testScript) { if (testScript.length > 0) { Y.Get.script(testScript, { @@ -167,8 +121,6 @@ yuitestRunner.prototype.runRunner = function (cb) { if (ARROW.scriptType) { if ("test" === ARROW.scriptType) { fetchTest(ARROW.testScript); - } else { - fetchAction(ARROW.actionScript); } } else { fetchTest(ARROW.testScript); diff --git a/lib/engine/yuitest/yuitest-seed.js b/lib/engine/yuitest/yuitest-seed.js index c50f306d..a073df73 100644 --- a/lib/engine/yuitest/yuitest-seed.js +++ b/lib/engine/yuitest/yuitest-seed.js @@ -14,14 +14,10 @@ // ARROW.testLibs = []; // ARROW.scriptType = "test"; // ARROW.testScript = "test-file.js"; -// ARROW.actionScript = "action-file.js"; // ARROW.onSeeded = function() { /* add test, hand over to runner */} ARROW.testBag = ["test"]; ARROW.testReport = null; -ARROW.actionReport = null; -ARROW.actionReported = false; - var isCommonJS = typeof window === "undefined" && typeof exports === "object"; var seed = isCommonJS ? require('../interface/engine-seed').engineSeed : window.engineSeed; @@ -52,9 +48,6 @@ yuitestSeed.prototype.captureModuleTests = function (cb) { if (("test" === ARROW.scriptType) && (-1 !== name.indexOf("-tests"))) { //console.log("Found test module: " + name); ARROW.testBag.push(name); - } else if (("action" === ARROW.scriptType) && (-1 !== name.indexOf("-action"))) { - //console.log("Found test action: " + name); - ARROW.testBag.push(name); } }; }; diff --git a/lib/interface/driver.js b/lib/interface/driver.js index 3ea70618..c83e99f9 100644 --- a/lib/interface/driver.js +++ b/lib/interface/driver.js @@ -33,10 +33,6 @@ Driver.prototype.stop = function (callback) { if (callback) { callback(null); } }; -Driver.prototype.executeAction = function (testConfig, testArgs, callback) { - this.errorCallback(this.logger, "executeAction is not supported", callback); -}; - Driver.prototype.executeTest = function (testConfig, testArgs, callback) { this.errorCallback(this.logger, "executeTest must be implemented", callback); }; diff --git a/tests/unit/lib/controller/default-tests.js b/tests/unit/lib/controller/default-tests.js index b46e35cf..7d4907b5 100644 --- a/tests/unit/lib/controller/default-tests.js +++ b/tests/unit/lib/controller/default-tests.js @@ -81,7 +81,6 @@ YUI.add('default-tests', function (Y, NAME) { var driver = new StubDriver(), dc, testExecuted = false, - actionExecuted = false, navExecuted = false; dc = new DefaultController({}, {}, driver); @@ -93,10 +92,6 @@ YUI.add('default-tests', function (Y, NAME) { dc.execute(function() { testExecuted = true; }); - dc = new DefaultController({}, {action: 'action.js'}, driver); - dc.execute(function() { - actionExecuted = true; - }); dc = new DefaultController({}, {page: 'test.html'}, driver); dc.execute(function (errMsg) { console.log(errMsg); @@ -110,7 +105,6 @@ YUI.add('default-tests', function (Y, NAME) { }); A.isTrue(testExecuted, "test should be executed"); - A.isTrue(actionExecuted, "action should be executed"); A.isTrue(navExecuted, "nav should be executed"); } })); diff --git a/tests/unit/lib/driver/config/action.js b/tests/unit/lib/driver/config/action.js deleted file mode 100644 index 4b1e3c8e..00000000 --- a/tests/unit/lib/driver/config/action.js +++ /dev/null @@ -1 +0,0 @@ -actionJs \ No newline at end of file diff --git a/tests/unit/lib/driver/selenium-tests.js b/tests/unit/lib/driver/selenium-tests.js index 63875953..6261b825 100644 --- a/tests/unit/lib/driver/selenium-tests.js +++ b/tests/unit/lib/driver/selenium-tests.js @@ -299,67 +299,6 @@ YUI.add('selenium-tests', function (Y, NAME) { }); }, - - 'test action': function () { - var self = this, - driver, - config = {browser: 'mybrowser', seleniumHost: 'http://wdhub'}, - executed = false; - - function createDriverJs(params, cb) { - cb(null, 'driverjs'); - } - - function validate() { - var actions = driver.getWebDriver()._actions; - A.isTrue(executed, 'Should have successfully executed action'); - A.areEqual(actions[0].value, 'http://page', 'Should have navigated before test'); - } - - driver = new DriverClass(config, {}); - driver.createDriverJs = createDriverJs; - driver.start(function (errMsg) { - var webdriver = driver.getWebDriver(); - webdriver.scriptResults['return ARROW.actionReport;'] = '{}'; - - driver.executeAction({}, {page: 'http://page', action: 'action.js'}, function (errMsg) { - executed = !errMsg; - validate(); - }); - }); - }, - - - 'test action error': function () { - var self = this, - driver, - config = {browser: 'mybrowser', seleniumHost: 'http://wdhub'}, - executed = false; - - function createDriverJs(params, cb) { - cb(null, 'driverjs'); - } - - function validate() { - var actions = driver.getWebDriver()._actions; - A.isTrue(executed, 'Should have successfully executed action'); - } - - driver = new DriverClass(config, {}); - driver.createDriverJs = createDriverJs; -// driver.maxAttempt = 1;//Added for test - driver.start(function (errMsg) { - var webdriver = driver.getWebDriver(); - webdriver.scriptResults['return ARROW.actionReport;'] = '{"error": "action error"}'; - - driver.executeAction({}, {action: 'action.js'}, function (errMsg) { - executed = !!errMsg; // error must not be empty - validate(); - }); - }); - }, - - 'test getArrowServerBase': function () { var self = this, driver, @@ -389,7 +328,6 @@ YUI.add('selenium-tests', function (Y, NAME) { testRunnerJs = arrowRoot + '/tests/unit/lib/driver/config/testRunner.js', libJs = arrowRoot + '/tests/unit/lib/driver/config/lib.js', seedJs = arrowRoot + '/tests/unit/lib/driver/config/seed.js', - actionJs = arrowRoot + '/tests/unit/lib/driver/config/action.js', testHtml = arrowRoot + '/tests/unit/lib/driver/config/test.html', config = { arrowModuleRoot: arrowRoot, @@ -414,20 +352,20 @@ YUI.add('selenium-tests', function (Y, NAME) { }; driver = new DriverClass(config, {}); driver.createDriverJs({"test": testRunnerJs, - "lib": "," + libJs, "action": actionJs}, function (e) { + "lib": "," + libJs}, function (e) { A.areEqual(null, e, "There should be no error"); }); // Without test driver = new DriverClass(config, {}); - driver.createDriverJs({ "lib": "," + libJs, "action": actionJs}, function (e) { - A.areEqual(null, e, "There should be no error"); + driver.createDriverJs({ "lib": "," + libJs}, function (e) { + A.areEqual("The test js must be specified", e, "Message should be - The test js must be specified"); }); // with html test driver = new DriverClass(config, {}); driver.createDriverJs({"test": testHtml, - "lib": "," + libJs, "action": actionJs}, function (e) { + "lib": "," + libJs}, function (e) { A.areEqual(null, e, "There should be no error"); }); @@ -438,7 +376,6 @@ YUI.add('selenium-tests', function (Y, NAME) { testRunnerJs = arrowRoot + '/tests/unit/lib/driver/config/testRunner.js', libJs = arrowRoot + '/tests/unit/lib/driver/config/libs/lib-one.js,' + arrowRoot + '/tests/unit/lib/driver/config/libs/lib-two.js', seedJs = arrowRoot + '/tests/unit/lib/driver/config/seed.js', - actionJs = arrowRoot + '/tests/unit/lib/driver/config/action.js', testHtml = arrowRoot + '/tests/unit/lib/driver/config/test.html', config = { arrowModuleRoot: arrowRoot, @@ -476,7 +413,6 @@ YUI.add('selenium-tests', function (Y, NAME) { testRunnerJs = arrowRoot + '/tests/unit/lib/driver/config/testRunner.js', libJs = arrowRoot + '/tests/unit/lib/driver/config/libs/lib-one.js,' + arrowRoot + '/tests/unit/lib/driver/config/libs/lib-two.js', seedJs = arrowRoot + '/tests/unit/lib/driver/config/seed.js', - actionJs = arrowRoot + '/tests/unit/lib/driver/config/action.js', testHtml = arrowRoot + '/tests/unit/lib/driver/config/test.html', config = { arrowModuleRoot: arrowRoot, @@ -515,7 +451,6 @@ YUI.add('selenium-tests', function (Y, NAME) { testRunnerJs = arrowRoot + '/tests/unit/lib/driver/config/testRunner.js', libJs = arrowRoot + '/tests/unit/lib/driver/config/libs/lib-one.js,' + arrowRoot + '/tests/unit/lib/driver/config/libs/lib-two.js', seedJs = arrowRoot + '/tests/unit/lib/driver/config/seed.js', - actionJs = arrowRoot + '/tests/unit/lib/driver/config/action.js', testHtml = arrowRoot + '/tests/unit/lib/driver/config/test.html', config = { arrowModuleRoot: arrowRoot, diff --git a/tests/unit/stub/driver.js b/tests/unit/stub/driver.js index f35429b4..3edc4fb5 100644 --- a/tests/unit/stub/driver.js +++ b/tests/unit/stub/driver.js @@ -37,10 +37,6 @@ Driver.prototype.navigate = function (page, cb) { } }; -Driver.prototype.executeAction = function (config, params, cb) { - cb(); -}; - Driver.prototype.executeTest = function (config, params, cb) { cb(); }; From aa2ca1c0e78ac360028cf9fb96077578ebd8784b Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 25 Mar 2014 10:27:05 -0700 Subject: [PATCH 010/197] Upgrading ycb to 1.1.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 9da004e0..493cf6b1 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -216,7 +216,7 @@ "version": "1.2.3" }, "ycb": { - "version": "1.0.5" + "version": "1.1.0" }, "async": { "version": "0.2.9" diff --git a/package.json b/package.json index 7e8d0cf2..89c5f139 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "istanbul": "0.1.25", "uglify-js": "1.3.4", "xml-writer": "1.2.3", - "ycb": "1.0.5", + "ycb": "1.1.0", "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", From a40180773e8f88d69b4e53c0ebf614cf85e4cdbc Mon Sep 17 00:00:00 2001 From: Nachiket Torwekar Date: Mon, 31 Mar 2014 20:10:38 -0700 Subject: [PATCH 011/197] removing unused code --- lib/client/yuitest-seed.js | 1 - lib/common/tests/markup-test-mocha.js | 1 - lib/controller/locator.js | 1 - lib/driver/selenium.js | 2 +- lib/proxy/proxymanager.js | 3 +-- lib/session/sessionfactory.js | 3 --- lib/session/testexecutor.js | 4 ---- lib/session/testsession.js | 1 - lib/util/arrowsetup.js | 2 -- lib/util/dataprovider.js | 2 -- lib/util/errormanager.js | 2 +- lib/util/mockchildprocess.js | 3 +-- lib/util/reportmanager.js | 2 +- lib/util/webdrivermanager.js | 3 +-- 14 files changed, 6 insertions(+), 24 deletions(-) diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index b0efc6a3..9e8e62f2 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -194,7 +194,6 @@ if ((typeof window !== "undefined") && !window.onerror) { YUI = require("yui").YUI; //console.log("Injecting share lib seed (YUI global config)"); - var fs = require('fs'); if (ARROW.shareLibServerSeed !== undefined) { try { require(ARROW.shareLibServerSeed); diff --git a/lib/common/tests/markup-test-mocha.js b/lib/common/tests/markup-test-mocha.js index 7d11acbf..a0fbb5a6 100644 --- a/lib/common/tests/markup-test-mocha.js +++ b/lib/common/tests/markup-test-mocha.js @@ -40,7 +40,6 @@ var self = this, testParams = self.testParams, - quote = testParams["quote"], Y, chai, warnOnly = testParams["warnOnly"] || false; diff --git a/lib/controller/locator.js b/lib/controller/locator.js index 3dd7b8ac..766b6c03 100644 --- a/lib/controller/locator.js +++ b/lib/controller/locator.js @@ -8,7 +8,6 @@ var util = require("util"); var log4js = require("log4js"); -var async = require("async"); var Controller = require("../interface/controller"); function LocatorController(testConfig, testParams, driver) { diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 6c5e37a0..502c9896 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -63,7 +63,7 @@ util.inherits(SeleniumDriver, Driver); SeleniumDriver.prototype.errorCheck = function (e, callback) { var self = this, errorMessage = e.toString(), match = false, matchErrorMessage = function (regex, group) { - var m = errorMessage.match(/([^\n\r]*)[\n|\r]?([\w\W]*)/), line, ret; + var m = errorMessage.match(/([^\n\r]*)[\n|\r]?([\w\W]*)/), ret; if (group) { ret = m ? m[group].match(regex) : undefined; } else { diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index a07c3065..bf74beaf 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -6,8 +6,7 @@ * See the accompanying LICENSE file for terms. */ -var http = require('http'), - log4js = require("log4js"), +var log4js = require("log4js"), fs = require('fs'), path = require('path'), portchecker = require("../../ext-lib/portchecker"), diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index d7286435..1ec0cf00 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -7,16 +7,13 @@ */ var log4js = require("log4js"); -var TestSession = require("../session/testsession"); var DataProvider = require("../util/dataprovider"); var ReportManager = require("../util/reportmanager"); var LibManager = require('../util/libmanager'); var TestExecutor = require("../session/testexecutor"); -var clone = require('clone'); var coverage = require("../util/coverage"); var fs = require("fs"); var path = require("path"); -var os = require("os"); var Servermanager = require("../../arrow_server/arrowservermanager.js"); var PhantomJsSetup = require("../util/phantomJsSetup.js"); diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index a9a4c01a..13ab56e2 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -6,16 +6,13 @@ * See the accompanying LICENSE file for terms. */ var log4js = require("log4js"); -var SessionFactory = require("./sessionfactory"); var ReportManager = require("../util/reportmanager"); -var FileUtil = require("../util/fileutil"); var WdSession = require("../session/wdsession"); var TestSession = require("../session/testsession"); var ProxyManager = require("../proxy/proxymanager"); var clone = require('clone'); var path = require("path"); var os = require("os"); -var fs = require("fs"); var async = require("async"); var sf; @@ -46,7 +43,6 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback var descriptor, testSessionsArr, - currTime, reportObj, reportManager; diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 332cb309..455c1584 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -6,7 +6,6 @@ * See the accompanying LICENSE file for terms. */ -var http = require("http"); var log4js = require("log4js"); var Arrow = require("../interface/arrow"); var fs = require('fs'); diff --git a/lib/util/arrowsetup.js b/lib/util/arrowsetup.js index 353c3457..d5f69995 100644 --- a/lib/util/arrowsetup.js +++ b/lib/util/arrowsetup.js @@ -11,7 +11,6 @@ var glob = require("glob"); var path = require('path'); var url = require('url'); var async = require('async'); -var Properties = require("../util/properties"); var log4js = require("log4js"); var LibManager = require('../util/libmanager'); var FileUtil = require("../util/fileutil"); @@ -21,7 +20,6 @@ var Servermanager = require("../../arrow_server/arrowservermanager.js"); var BrowserManager = require("./browserManager.js"); function ArrowSetup(config, argv) { - var __dirname = global.appRoot; this.config = config; this.argv = argv; } diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index ccea5568..3ad39065 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -7,13 +7,11 @@ */ var log4js = require("log4js"); -var os = require('os'); var fs = require("fs"); var qs = require('querystring'); var JSV = require("JSV").JSV; var ycb = require('ycb'); var path = require('path'); -var glob = require('glob'); var ImportManager = require("../util/importmanager"); var ErrorManager = require("../util/errormanager"), em = ErrorManager.getInstance(); diff --git a/lib/util/errormanager.js b/lib/util/errormanager.js index 77b919e1..160ab2f4 100644 --- a/lib/util/errormanager.js +++ b/lib/util/errormanager.js @@ -51,7 +51,7 @@ ErrorManager.instance = null; * @param value for placeholders. */ ErrorManager.prototype.error = function () { - var i = 0, args = [], arg = "", message = "", errorCodeJson, errorName, key; + var i = 0, args = [], message = "", errorCodeJson, key; Array.prototype.push.apply(args, arguments); if (typeof args[0] === "string") { message = args[0]; diff --git a/lib/util/mockchildprocess.js b/lib/util/mockchildprocess.js index a9458a3b..6af41fd5 100644 --- a/lib/util/mockchildprocess.js +++ b/lib/util/mockchildprocess.js @@ -42,8 +42,7 @@ 'use strict'; -var util = require("util"), - child_process = require("child_process"), +var child_process = require("child_process"), verbose = true, counter = 0, path = require('path'), diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 0f9a57d2..9a7a2316 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -97,7 +97,7 @@ ReportManager.prototype.addTest = function (time, className, name, failureMessag ReportManager.prototype.parseYUIResults = function (testJson, dtName, self, screenShotPaths) { - var l, m, errorRep, + var l, m, yuiUserAgent = testJson.ua, yuiSuiteName = testJson.name, browser = UserAgent.parse(yuiUserAgent).toAgent(), diff --git a/lib/util/webdrivermanager.js b/lib/util/webdrivermanager.js index f90b1009..50008bc0 100644 --- a/lib/util/webdrivermanager.js +++ b/lib/util/webdrivermanager.js @@ -7,8 +7,7 @@ */ var log4js = require("log4js"); -var fs = require("fs"); -var path = require("path"); + /** * web driver manager From ba2e802d5ed6fc5a373baabeee659acf269417b6 Mon Sep 17 00:00:00 2001 From: Oge Nnadi Date: Thu, 3 Apr 2014 19:30:22 -0400 Subject: [PATCH 012/197] Typo fixes --- docs/arrow_cookbook/arrow_intro.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/arrow_cookbook/arrow_intro.rst b/docs/arrow_cookbook/arrow_intro.rst index a6499b78..bdd45489 100644 --- a/docs/arrow_cookbook/arrow_intro.rst +++ b/docs/arrow_cookbook/arrow_intro.rst @@ -5,7 +5,7 @@ Arrow is a test framework designed to promote test-driven JavaScript development Arrow aims to completely remove the line between development's Unit tests, and QE's functional and integration tests, by providing a uniform way to create and execute both. -Arrow itself, is a thin, extensible layer that marriages JavaScript, NodeJS, PhantomJS and Selenium. Arrow allows you to write tests using YUI-Test and execute those tests using NodeJS, PhantomJS or Selenium. Additionally, Arrow provides a rich mechanism for building, organizing and executing tests and test scenarios. +Arrow itself, is a thin, extensible layer that marries JavaScript, NodeJS, PhantomJS and Selenium. Arrow allows you to write tests using YUI-Test and execute those tests using NodeJS, PhantomJS or Selenium. Additionally, Arrow provides a rich mechanism for building, organizing and executing tests and test scenarios. Why Use Arrow ------------- @@ -30,7 +30,7 @@ Core components: User-facing Components: -* Controllers: If drivers allow you to dictate *where* to execute your tests, controllers, or scenario atoms allow you to dictate *when* to execute your tests. Arrow's default controller or scenario atom opens the page and executes the test. This works well for a large number of tests.However, if you require more complex scenario or more granular control, you can **easily** create your **own** controllers and **control** how and when your tests are executed. +* Controllers: If drivers allow you to dictate *where* to execute your tests, controllers, or scenario atoms allow you to dictate *when* to execute your tests. Arrow's default controller or scenario atom opens the page and executes the test. This works well for a large number of tests. However, if you require more complex scenario or more granular control, you can **easily** create your **own** controllers and **control** how and when your tests are executed. * Libs: Libs, or dependencies, are a way to include any necessary dependencies needed by your test. These can be things such as libraries you've created, the source code against which you are testing etc. .. image:: DetailedArchitectureDiagram.jpg From 253025431a8fae7e6f04190a9023a6e0c204b9f6 Mon Sep 17 00:00:00 2001 From: Nachiket Torwekar Date: Thu, 3 Apr 2014 23:01:25 -0700 Subject: [PATCH 013/197] adding madge-graphwiz dependency graph --- docs/arrow_dependency_graph.png | Bin 0 -> 1433315 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/arrow_dependency_graph.png diff --git a/docs/arrow_dependency_graph.png b/docs/arrow_dependency_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4c74cea5735e1c191bc58c0c941ecb466843408c GIT binary patch literal 1433315 zcmd>mbx@q$nkNtl79dEF;2wfQfZ!Tjf&_O7!Gmk#?h@QBkl@m|JHg#)++DhXreXWL zcV~9)?A$xG`|nhp>U!%fs`Z@b`PoCnXJr{IjJFsF2nbkmvQlaY2+T z)?iGsI@oEVX9SAJvQvHuS*rog@#q-pCKrcT=osoJ(A&k&FPPa=K8uL9zPsi&%*@oO zej44$8dV%0DgW~cfW?QmsDRwlOG`&ht+TbA^yQ~)L4(JdjHq~Ae?R@v`FqWR!g_J* zsL04Ar&myq+}^O>8$KcillQ$nH}2om;_jhg*yM>ZSdZ)T8kJ@GkllIM+!q*tm3?SB z5%l;}d&bVrzI@qV?3tdMnX$oxEEfE77_j`Ro18l)*FU{Vw#R)1v1UV@xB~8 z1HA^FJmBzA=qg_SyfMvM6WPk*yWz=MjR(%T>gX6I1Cx1@${2v1^(5zHWY29MI$1EC z6#^PQHhzQg#{hCNrB|;5hk?LbVKD2Z%fJ2v4ftqahu%RuU;A74!Ge2VySvW9?E>U` zA${dou}bW*F%#d@(hL7MQs`bI_LV_v8+jPunHQWrK|1X-FaBh+bGUf4us(WN)6uYb zUpLo?_1ti6)4EC?KQz1v9xJKf7otiSF;gwRw(6}C7UZdF7Sn7f+!Xoi)D6+P79Giq z!o)=-v`m#b1m-6!caG%`MrBKAU9n#~`%T6r{ATa%Ns#Q%e6cFW{&E7g2}*$U?XqL! z>^tAbG#n_*<>nZ=JgDy0^5HaDj87~iMRhy-byNm-1p8)X=0J7>zn{g4qTx{?{)ZJ{ zNxd=f1%23Yi>FU>z+;;!X?^ki;=;~u*sW7fL0runr$Om{kHIX^@O@?=O!1D-{n2Kd ziJaXI!rxp&NH?H15|yKZ?rFBESNqeKR>hve`H5kKl=O!np)bQuOn+MBcBy5v*&W~i zK1$OAtQ1ZEX@L6Uq{}32`QS6D+V2kExhgX#Ep?YKzd9cQ+#qKVreec#4_1W&B5C9#% zFHkxXNcdt96sQl?j@qKLWjc|pJbEPGThDTMd+o_=Z6t1gtKK_4-S&vNzMNd_>5v_H zt;c>O@)Y`aeALxVkdX2})deF=M+QaRoC}Ty{gn|$^ zuzPpQgy>jQ?=UNb$(#JND{dJ9L8zA8qDA+7PQ~%uBX3CitzK zYQogpszN1tYZ`G~P%3VMDjsg-L>$_O)3R4Gl!K3clH~NW$`a17(`i%xM_q+59FsNC ztstR@Yr&#HBr|Tm?|WdoHo_Ye``88j3OdNEz~HKtvMKWks*0uh{6XHp*!+~4<>lWU zXUEgzdImF&D}QRmDy{4oXWexT<^ZzKAWh8_a~;y6Ti|%oZEE{=DXgAA1OLxlSkJv9 zEqq4>yqjyEnsUS=#jg^n`4}-JQZ!d4Io4u_ zL?-*Y$3iq&r8aW0#K#{gvZ?peOMMPUy_rR`|-$Ny4ZiNXgdWQtXBbDpVN*O z-W=#07$!3-KMa0WIJdFu7yJr@5bmS6f(gH{-Q(r<$H2e2CG;-M-UpICuDm@~x}((| zzJOI##|%D6C|JKdC1n_X6APh)cq*{;_#& zz58x9Mv$7;1cbaKsCPmN8gLw>Y8U9pF{o4bgEnz5g3&45?a7_(f$j~l{6J}r6G|;c zVz`5^`rf~2Bie!?>MY&$vY5-ri%dH!*`v* zAO={=@kOtvSr5OCcG~q|i1P!9O}?Y^#d}%fTzr26BGSz2;%?1ghtZ;k_6?#S`yiar zJ*K>wM^DVmLH~-<^B1C87eXjEBw$Wa-13Q4kysNS=!b__W@?MU)!RbP^BGHk>f34@ zScoUmqEF6xpz`&NuJO2-YuXr5DRwVs-MNp!8`}leU+gv}xGgqr3fn?GBAthx57d$y zT`QK8&f*;pmcR*)Py-EvFli`@xi3Xqya9v1J_|b2X;a3%5S6q z8L3MX03=-=B%8bmUiV(6n)*5L)x6YF@g)%JHu}$ZP_PK(V`m!-iWUO9!AaBg29jS13;zy}@Lch)=l&QdToU3#g{Nir<7~XW?y6PU#^o?Em?O+~` zT?KIOmxQwDYLq>tljiMa(R!4+S)H4Tgem256(^hUH`0PBob@l1^$zI^3jYn7VNVc~ zG7mQ2p;ORxi!8E~WXMz;R!scyN|C`z-6}~=fS;st*wbw}+Gt-DurfLvLW_U$J4o0XmjD#EbYQ>K*EQodI65CLiYWGJcNR3nDH_PA{fa{ zQdX7z=-?M9qJ@Vh^3pplZ8YG)yrkPJF(aaF2ZY7G0&`j z#eq5k5PW*}CNx33kE`7PI`=S#l?;$O3eN`Lx|Q?razZJ&ul>kWJ_@_gFO<_MBd2M> zjsobrNRxX3w+lOO5r?Wg>8|IBDrY#Xs@j~uUKcG|c;iF%bRv6eBJ)Y+K@F;VL8}JY zTyeu2oZNuO;6aJ)E+WqByHiEW-PtbR6iL=31-ro%4A`(adut#Nw zelvJ|^!|YmshMW40ZWU_`V^2-gumSyLiR&tbd5Tn2}SBbO#)+=ZV+niBp|Y6&Jp zyt9ZW;{AfDX&N1plCpcB|JoUyQiE$in*ksB6SF&+mQ}xC^smn!T*X%k_M$>2hGQ~? z4(~HpIU(ooxWXN0!I${p7f%e&pzOF|IlfS*>3(ff(16kfWA|VYo@3Hk+5#kY@Y|}n zqEO`QfY3Y$IX9zU>35ZtS`?XbSukjLHzxZtCH{ai1CJjIKq>!LZ*%VN?Ei!v=>o+J z8_P!WbD9V>|NOBTrIOv-s*iy3B?QNJnpM7ERJ?c*on}PsCE2_)&4R}8HDuT4V-Fs1 zN2^dEH95#wPv)bo&8DDAN?UyXm3P_&m9=lQ=40W{1F*diEPUO((DtJ8d_L#oohqH~ z{z|+JW&f}NXukMBB(_^7hKH$|yzvG=I#Qt?Fm_9~YOK|5pOvfg`4=GBnfs|je)O_= z`9;nwz+f;?#OZF^q51FMY#T9>hdo1?3c}^Pb%D{34&*;O8Ss6PJ_zZx`(`n^M#t>; z7Vf=w1bYw`tdG*<6#8CoY2J_=4gUVvd{i~&GBG{2{~My%|Daet7X0cC&*eG)Owg}) zpuumD|KoF@T#Ut%eo4e_R%Q*`oqJ!4Sc@fnPQuyJ;e$QA0A;Z~;u$Kw@>tYWmaWhV zf_U!yoN(vpzIIg3jdFfFffQj`)Y#cPfIlI9$INja<(hl(Wg~qU4jcTD4L<~MRIm~d zrP5tq%Du;LCp;e3ZmiQqG05!k4>D@ooZcSQ5KbCuPQwYF?4hK0+|Yn4P^sO*Ux9K zxO?$6?HPQ3&b+xWbLF@xn*nw_Va@lK=7#Mj*!+xI^G$mg$#ecPC{ZGTsz<3tdc)D= z%{osP3z!K#4$TP>am9L=xhXqRFR|SJ3UtdmQXkT(p#50&@CJ_u#nO^78MMp?Ab8G3 z2BRQGkNpMs)_zh~if@xpscsYA+Ee4MAUvb^;0xZTY{3)xTqfPqg)6n)PV~Qgc2l!}e~})tK#tjip=UOqc7} zZxw_Nf2J6ibS0x~d2;&XBFb!AHu3yJLJ5`g(rn7E2mtU*kUeBu;KLd*KSk zDvJ3;ZD40aPTPHk-rzjxm*}`}c1r#wvKu_646r;7E(72bR)XXHba4U!#w*AtWQ!u= zVC*NmnY~L}%0*dFy@_H|{Z0()e$Yuyh$p%F124`A1*zok?CleZq(z8b4hngk6Pyfq zxFJmfGY{zrFv#e;{7 zV-)CBpeqCX=gj`e2*@VU$60gv`Eb=njDcBs@gUyOI(VqCpM-fJcefch5H)Fs2n+X} zTzvi1;BUV=A4WMor|14~m6=v?^l{0@PTZIGx{;qUll1w1TRa+3xcwjowWMS)W?{R7 z=!q1a3>oQeOfr?8v81dbtz`+Xt>aKAbLO)siLLbAsG?T`?W088GROHVy@BiWiL#vQ zN8@g1f^mD7C-%n%6QYb+5f{CS$DlEpMKWX;lD+mRW7-GkB%mXw*C&wAJ?7pfTk8U{ zwkl!VL4DA4-@Gw0eg9&{YSQefV~SU- zBuAV2+pUD)jfv0k$+Pk2WYNGd%DDq%433?}tY3*fEN&#poU~kbpVQ&ep3lF@n7wP? z0Jy(8#>8chXnwgn7vT71wlq`9Ho&r0Bh?~8Dq{>RY+|K(1vstsT9ULWi&ftrrK3fjvplZ6wJ z0f(U|nOnN~hNdQi$AQ2zgBuhO4@5w1kNDxt)S(z+wblD6di+k>X*V_ z_ewHG|EMIDBiX%oB=d6f&L-~rw9;O5pZ8iN8n{v^jeW!7B;E{IHPX%uZg>eeoVSNU z!-KGAyh&Q{A@#?Srj)tlWi}PK`_cUJ3+1sf>#1o;{kqQOGuZ3Z9T?X?XkqwVtAcF3 zfNic>K?Yiec9_YU(abek{wcuR^Cs0LWYXeN?JutXFP9-2BC>!fjY#81b*D%!Bvw7f zIIe3oR|%#u!U+`il-`~AMq|Y&mirK?HuMv#%+F5vH+s809R`bW$b_;K-y&ij(E)rl zaS^jWqUjtGs4-^0QN19f2s})Y^UEGXWLDHS;j)ostb5ri^TICArY}vmHk{~c>{=3x zfyh!iG{%&WwTd@9!pf7LZ9u1!j*^)C<(v3W_kN@ptfmGr9gdUXc)3a`=Fbmas2FwGSce*93h8D=73n3-{+Q_{N#6k;JHB|lEx%%>nB zIZW>EW+Nd!`4RAhoz&Ya4Amq$O+Am_m-}xR%Rf_R<7nc4WEgY)k!49q-|uJkmK#uG z>DGRW;s1?{4bKV1LH6r5hOwfJ_$z`DDH<|@k(jj*FgWK>t2u)xPdIZ&$bYKh!Y0!Wf{=L#?C78#UulGJt0;D7&q zXE{K5baL-dMn$HDMshOYP6>6NL&6nh^j=)1peuOn`Tk+*P=3Uy$ZP6w@bf~#5Xzg1 z{%8)!{^9VV7-AvvTxL$r4aNs?(Ts78%6F^5&7G&8GC8ya1j6|{-xV;x-_ zQ$saJ#8c*&vgem^HK57ck)cx`7?hv*`~fZ$4yaymQ)`v)M%`LCWyEH?tnNfo6dbTR z4bd3#uyHaF7ZWxa)C6Xk9oa~X(hVrQ^9X;ekra+M)1-16p>z!Uw*$CggIr)%z#`-Q z{xM}f(dY1Vd+Ed{(_Zu@s49lp5sh_hUYf~OqBx@_p z$bp$M(~pH@AFOqCvhZ-UMjj#U)WE>0p|ZHA6q;$TR}Jd=1>@(xqC;@>pzAfn4r`IQ zt(2dBH#%tJ@9fFcFbpwA3m=c=n^MeW%nN?z58xGIRfrl{0fj>U+UMV?(8c)7*mzl) zmvX8YczEeq^^SS(oP&pTDN(i!hO%!idQQ}g$$#FXJrchWvNVuf#mK3`6zDwI5ds4@ zbz17HS!`^MQLhBQ6OmI;e06RHXU$qtKYj$ay-G}*alLL+UKXknVceV%KT(AX^WG!= z!D}!4V)Y~i`FW4;y+cbh#?wTRCI%hX1~XI^h5sf|cHxG{sU#K^eUOt^OzP{Ktx$^F zCbmZCFU0;F$T$@jvvy?Tc8=QIR=!OkMd7#_X)gQnm9Y#hA>0|S;Z{!u}=@G1UUSIV;8)5R)!6h4U zMt_iY5(~r@FB46| z$v|j}gMgkyomsQtqdbI+C)Y4GJD6bKq02t~G zs*k`07TwWXl0FWx9(Lnnvp^sIi^HO?UYxJ)ARF3H`rF~Wz0=Y?Kp>gaY9LURjRB2v)3J<{?hX0BoO-CEG`5`0LgaXa4RZb}PXGy6w+(bQ2@l z`I-#WIgXBBo|50dLLCqAY_q7)Gf^9G2I{{tGiTW>N8EzVCUuB$yv!8IW$YV0T`0|z zqTwp2cGPw8ik1~`oNuS2^|jES{pya6uiLV-dZDL5%Oml;p*N@Gi^7Y!ff|Bn;E843 zgFT$pC&2gTjn`;6I1p>+Op4nh=Mv=GF%T-qFdpPka*2GyI1n*z6jVd==*27j>grs) zs;6q-$7eFX5(n0N0=<@S6uxe3FY8*n2aR^_LFa9K4j^lH6ZcCT4E4UY1;S7vknJDZ zTUs9n?%z;F#v|>?!%xvL2AJ3Ffr?V>pJ4g6SW@&8RHQptQL%-B^?Tiv+nM^@0vNo1 zIeOtdaV;ikmyorYh#(4JLxeI81rGRuM3%Q6ViM;lOOcg0e#DQ)sB>&CZWJeAe{v%8 zPX4tJ{-Te-?LhjQl)C*($O<3F?W0CvP7W9B0}DR>@<5n|7S_neBHjbeaV$H=Ay~U? z*OKL=%DT3e-3Q>r>XRGv6?AhG*Qk|XQJokhVQDh@Lh$6*DK`*{0~A@qdRkXS%_|D! zTe3`}bOkTEk+OQ6k+pm;89S-d0X%i_Vm3@@l%yNHBvo?Fty{RrDyUqEpoAF>@qD)$H5DENyD7H$GR| zDjyexTZ*YW-}s#)ntE3T-KT65z2Cj-e{Ywp=3Tk!lx$b-AZrAzcKHC7gTf3Cts~ad6wG+UF6y_Pk+cV zW?L_ZjFv_^bI2S1_s;P8jXL;9)PlFJ08)R*SCGAcmTGuPTFW{8g@V%4wosE&Kne zhy7P3aU4T@dMZQzm*#nnfMB_fz*?4J=CN8SJ8-JNwm-T#%S}%o7ekEnL;LVoMY?={ zyrf>Cj7zW|I-S;ZgioV3F6c!d&1;r`VNGP^rY6d3im$US9SaJ+HI)J}%O~c#+M;HO(y9E6l~U%1m1b z;1XDN5HGi}Vd=m}*mK`<5!cq$jWsvlk^A~Jz}&)0{V#;a&ri=_kobZH>G=FSetn(L zu3~!aT1-HYw79G+0`qM{(C*)?%D-zy|4)xXD2ROu1qU)61C0AA=JGkbQR#EY9GVDH zW|oD(y!w@S&G`>*o_{bjqp=lrsTKN|3-gMZZ4VQp$E+nd?OP?O;Ei6zJf%pk7!TNF zE1y@*f_IZQO(D_o2QZMC`_RR!Bn;+v;&6NQtRs$szExQS;HX^aBTZ+TCm{vQ4mbOd?HMR9e`#Tp`PE9^!W*K$8*RD34Sgd&g zGz&M$BAu;&5~nS{sbbq%WsJ}&0hUQJ{MVC~WfJi1E*vPaS6JSLd7|D`pgz)&51meh z{k#`GnDF%l;eeQ2(2XfxhkREQJ<_MTdczM3zwau4)Ig7Wg@cfmtMh?8!snARJB?*R z2{WUGDRO^k{ZKsN@M2YeFcMMgpa8m@qwbI_Ch@%&9*ES1j&2WDPWmA_yV7I;O&%$LNt(JHkMK=cW`x7V#8t4QvfMJ6<0GFzozP) z)4>*f0wdve2@C7*D4K9|CdUB20Z5=D-WDC|hp%`dKi7HL{a7BDM@EU>`uAi1Enp%x zgew+c-q=7ztCgGDGLA4Yp;0b)0Z2$IgvThBoKD|$2n*+jB*^e#PN~FAEZ6vFO#*I7 z3cqnh&J^~ zB^zt`&`$V~42YeBhu5rzDXGH+>H!|l`<0`wrw57)mjGw=_V%8Tq=#D;@(ST6&EU85 zx2a7|jLKj(m*RLleCM-V``xZGG?DI49wr|f53SV91E5CGx%Os2L z$Xi<ER?PG3y7L-0)#yVivXBvdX-#_Ttyk*w)4Ve$TQ_ZtgvG;?=Q?#RK|XrtZD$8JQUuKhOJ_<=p9~*_~2FMeLEj-~|RonesSj z+~0a3E^dM@GppWb_wkH*CCSqdGfR^zliM9nZag!qu6DMiRkmM+F1)+Wk-Xlz9xFOX zx}%;>jHw)VD*f`!`RVKS8d4J-8L0`&phN$ym#>~LijSv;)G|9$(USXPPZ$E*7k0S< z+u7SM&lGluWZ$?RE#Bot$6#rbQj&gvjns6zd9C^pAi_0NnOLvJkmThLm57epL-Z&l zLLwm(l+B?W*sef(VbE#QZc?BF(G&W*Ut9s~b{iLWa}TvE3vqN=X4!37>@~di>+$~m3QopMkH{mYeXmeAu`REWjCgD`czEc0)hjH> zP&F@EA^Co|s)z$p^~A;?&f?b&BT?hbd$+ea{VRtd&g*>LD^B-Y_qk~SzrHu9etPXnQDFLb z$BBhXI_F`%gAx!&aXC9KLpgL_z_}20t-yZF1)kfdiAyf)Mi6aFjq6X^OIq*|(6)Tn z;Thx_GR_Dpx!2xEI=7~%4m}T8iK72Y2V-RaGF*I~n;3PT{o@b*rxekWYw^wx`VI-L z%V%rflE!~_2siKHyKy`5&Sfzro59gcQ-k&CHYD~@QA@Nu$%b-%1Q>T@F24Z!4h17` zw1&nCJGE&1Rwh*Fuc2WQ)ivfnzBscfJ5F&x?>yZI1@=ug!l@qUi4J@x*d-!i*hyBw z6zqD@jWt2nXlQHVCbxVJk=K)K{IFotI>R*PnqAveT|&~1<2pWcBWwK!rtdCtgti-IPWBXOj;z^ZR(d4tk4!v# zMbiGRq3WpiXCzMH(>*$qx{jJYEt=XuC_?+$8S3=P!u$62is=$8SU`ZXLgdw0ZkLu2 zE22X9Px0jD=3=$apQ%yq-y~MmR_Cd~0Zkvhk{Fe~w|7u|!<>TNih$J&KVP(>eG+Y;cSKiy5B|QLPv1~OY@zf%^y6+mg%U@o#1Gwg zynfNoc|TA@!3%)Eg7tU2TNu%K2(L`@>oB=l4mIo@L#3o;7C&uLh#@s^1j`&0E~4RO z*Pxv~J)C(q{O4EvcYyf%J@RLLk|(>n=7hy|SxkMwTzC0_uL-xq2_%Oz5`QW^2K))9 zz5@sxj00iq02wMKfR}RZ`9vs=pn((61L<)oZ9>fXUWj*|uUrh{alv2=wl{dD89_#Q z;p|Ks5F|y##3L^M`&wuX4W^xL)`HjkUEeYP7KoL3E}4%>Kosa3?BX2o&bNl6(IdY4 zbi}6rn!_N95M>WmAC4M1nwN%pMTK%KHwrb$X>7F+^Qsp&D!>tru%zAhf$Xw&B{BR5 z$9vJ@ukN3M+E655G^q2-Os6#?l1k6#LUVT5l_ZKs85Geq6I0#O7Z1C7IVf6u6S z5FiSjUqlDRaVRXH?Hpub(9ORRE8u9UGrOQjGZGIt!Zjd8;ujI3$Jh0sa8iUYR*Q16 zCKYmXar3j2l9I+fe4}7Q6jwd#`|+{c$Ikj|V$oN6g%-j*W%cxoWOF=}U)-+3m^+)* zy@=M;Wt@DR(XI+DhUiY87uY@3_Bm$<46}?d+H%PMipzPZB7Y`DoS5**wsGB-Rq-;D zf7J6Z_t6}XK@FVM$|?23DB5?)v@}yJ zOr5j`q*2X%d_E6M4%Cb8$(_VS-y8u%ns?8eB#|bP5RTF;EZ)ec9G#4^*rngkPh8Nu zcqFcGcdu-1wXM}{Z%ex2NLmW6*{R)rbm6}~N@4n~ zp08!1B^DZD7t6P>uyE^3rUqML?ENh%^CdRg+D{w$J}k85_KCaz2O`%I{@M%6r&e1l zNVl<==N>V_%$^OwRXu^Rv=N~F@jao9Q~166C1$vuSh=Xr z=Ww}zXC{`_>wJ}%G2Ig+Q$m5a(E3|>8_Br)bnwEPYuj8R#ApSRee*3E}sS-Ow@FR*P0@!FUyH@Yf-|v@_0Y`z>{^VI3w-^dB7@*8dU!N5GR)R+ zN#kP8I}qm^#I`14n3bKKI920&ZD;KBv9jU5h~4g0#3hZ7ufSJ0+VpP0-zvj-6>xB% zjSl`*Yz+YWvq>4j{&>V%n(x?OHf}b*q9nZmU3`br2dki2Kr{*}YOA@u{X^IHoe&Z7 zfbekH;W5@J&G*gx^oc-#nf&g8j74B@e{b9b&b= zDcq59@ELc!KVYz%RIN05m00Ynwdi3lX-j>U3fJoGvbi|&ly>v}z%d|{??Ho{^^Y-9 zH#mLCe5u3k=M#YR`RrS+6&bcm(ztLpZ;)@s1po?nr4DPKKO&8bC@2qCUo!dJSXrl< zlv@LmRZMeZN^^bD!0Dj8=esr^vir$@7es`?0u>J z`C8;2?7ghf!0W>8KIi-tTUbE53#80SfjnI#wt;O*PTXf^1n3q-%9F~L&-ASlmww&v zKmKArJB`OIJ<^EKe_Thm8D!Ty)QysyzOX3sx!GplDa_Re5^oc^OGBYaT-Vb(ef{$M z5Aq>oou8Rxez5x14P}SicCxy+-a?jX?Up%GLxF2q`yP+(u{I^Wc&s+Ul^w%>G_4b+1`ZwYU|fpmvYeJ#&A3+KxVL5;%f|4xC-7fOB=l+RPsV3 zVMAaJQLphOJE0Irv?F_~!(RYKixxNEs}?ixKvq5>MZ@A=G4@5nRhJ)i_1^a2#B;+ z3f$;0tQp*H_!tDd!TRCdkLd?d*ST;sgh`q&}gywD##EU zk?yBVw=KbVC{AlB9_zvbye+t?InQ9G9Dp!fza_+`Jh0iVaS3xmos=_j<&h>L#B6;O z^N52|Cm29i%kW;d#8}Q&g^qz?a`v-iZYJR!+boEmMN;^k^2mMG{>_(@!$!F=MJ{1< zgNS>P5?bo*BpAOLtJGZnHQ-%j;Qa3pwLE5-mki(=;N{LgV8{(myrChvsjTYa6dXd| zQYY3u3?oVHJCh}CP<5I-0ihJG&`wDI$1<&L)^t*^r!OWuq#ZADyB?vOh&f`lCLH() z*XWL>(2VwUXCq1~i!QQ@ChR0=h1^Z_Bwr$&orp#>`){s`@d7#(DmTW2H|NvRI$6Yc zF*R6J%R)Xh^_+~cwylY#SNEH5lY>6ycpS<@wUP83By4}VZ>au)zv0-3RMZ$1sVQ}{ zb9_i?D&>8;=Px%0%Qr=GZsJ~flyA0|Ogy57r$|T+$W&K+r1k~c?u{D>F(CZsyX0cm zuhHYX@bSB@flcxY21g#RpZp)W0OKhZOLe?l0zK=N06R%(4UiZP)H%-UBS3obM1NMnE4#zQGCVh(h8JO9` zctUa{;lqc{xP{=55L7l#Pft~8=?8Q3dKGDEAQqg5O@4OIV`XJUHk`mlN5)6P#7ttD zoALCtn0InkQ1sh3C(2Y*7{PAy0RYxqZc?C1=dCqUh$;?}aWM^;chNaNgAoj z!txn6JTkW4m50ajvFW9OnYvs3WafzPJ6;@rV&k3X!$~2r^|zUbB;;AEencbODdFMY zGa&)F7*D^|L@kM(!kX{SBQ~uZ?4kz%g%)q+UgO*5hE$&J+ZXlm-I3J5o;Npgv~NG*MQWC@A(*K$86cID6_w4y?UZF4k$ z+tf2N&cdyz4RIijjy|%&l?~^b%R8(L1tmNpqCA zPo$A1(%-~6xKNgmpo;kZ;v6gP=1=(Yv~rIYq5%du<}j4WKPsC@3jXfs^Dy)A>$osy zMGf*g;+059GhctqTv}oxAv@6!E*&!uy8$=I8yRKB;(HUT;8MNGAQw_FVJCb;UZa`k zRYld=<3jald3GP+8A%P0#>V!-f?%BC+~G-U;PlwZ$O#UaYYU9_54ShypzWEisk0+|B`)30O6(zFpUTj zNeYpcvK>ITubIdz(U57bVYlU8w)Eb>6!tHPkB_%~z;4j#5>Y3&bj$c-I~QbBH*v9g zd&*t%oCOGNX10e$Avvh34^j*N)<$d@JQCgTBoJ?M^xSAby6< zOGby`l}=Yf)9u1t@GirBze?qw-Q2Z?#Z~xUOhAQR<9j^`4(_b^eHUMUnDUH>h)P_^ z<@+=7^jQ1&$j&yh)pK?IGz5V8@`sQN9FJ!5I6d6H9b-;q`pZBN`qrCT;dCyYS#fMP z=h`u%zzluRg-j1i5)oP({{F3A{4mO#WLBji3#@F8n}@pETZCRLXC zMjX4toAky<+LqKaiX6=UW_IobDF8ko#_yJ|rrf4W&&Z~^Tm+Di&!R^?o9%bTIdk#C zEPL#c#4ns_{Z8mJ(k?;8Ln}w5Md%qa;$pI!piZx*mdywsBpW%|X;a!-FtSN_C>xvp z-u`LtYg*ohr;oe#iSyOYvD48`rqg4ejhc?*bfARgSB9dR%g_&epp-pAI~@B%iJY_j z%LJdeR4FPUAqjZ}o8sSB^%~^-v@*ZPWkY;HXlH$Y zqiL=Fxc?T1{FmV5E(Jcc*82gQ2ehRc_s!`|U$G_`GeO^bGfB0Y25;f%`#htT$54^T zA6!<)jlq6hPeRoEPy8$;09Q~%Ay|G&aCIVlK{3HhZGV@vR$3!R~3o9q^z*-6FAR%sOU)ruw{VY4(Y z7D2ONnx4;c+}1G;T0nFb!L?E9{7#t^^CFi!*EFBW)3G$`^wiy#R$vV^p@Jw?<6uYY z=uSN{D@)OXY80lpW;RR8<1`Cyg?)8>HO;92&LZO4A~I~zvZc1udB=j#aM3*)XA7Mc zl8|}qjORT1OGhrW_ss{dylX&Aqmb~@0_W)cZjeXaMTXqJzkjMeG`eDjp{eU#&CyD* z5XN${tgc(F0sSLNI3S1;gEN)bfqLG_!jq@(-Gx&QJorqtM`$U3KZRr$qV}^w4VDs~ z`wCOkcH3!{`yEo0#1BY4m4(X6MpB2ck<9-#0tE471ak$D({e2eTld$Ywn%HlEevk1<_UKqHQ$BtN+Lc6YKuuIoY=n zzYu~6OZ7`F@4^Aep@WIG*Ggzn*^&|8oRINx$(`P!3h3iRGO}AL!j{?v3u_r`wdU_y zjfMUg2o>b4Vm1Mlvh=qpUGXV$!(yc!5f>Lrtj~a zR8Md|Bln!)=oFM+#&oOj)F5Rq_12f7`tEluw0-)FPl%h3mp5l4=?)JMO&Do&b2AZc zYr)l}`K#+cihDZ*E0;w@^!YB{qA9)VD|- z;J|?3=k4Uw0w;$G($YER=J0g-$CUIhR7*M`cyD(5v9`(Kc|r?Wn=mYFx8W|au$$Y) zOexC2h57jlE_-Tu1YV&VHxuz<0s>8W6O&|u9WB|MBL}iDgJ7(^akr*_`(FS8-o|$syau=# zaHu65IX|;P(=N<9Ju_nqSmap+Vz&t`?e!$uZ68@{&daWYHr@G zD)rbJJigF)Y?+vzX>C*Shi8wp2J;IepABeSiTzt;iL%vXQ%LJV1`vp5Lw)|Bb)`rd zpHa|326Ql9At1>6lCeHMb7`%wZ@M9DGWhD1+n?%K6%&w{X}LA@z2(=Ym+ujxvf~*M zG8tG|Wlpms>fA^7R9hL1p*tzEwzd-fy^D)^e6c4sN$VY&bpR@;3#A)wBTNN>7yo3v zpn!Hh@{8$eTCS13FRFV;l6oPy9S5tYaU+Ht6&Uvt@aOG(k6kVvJad9~*HB^M&7}u1 zQR#BWBPX}fYG`P954$M4ZIEw_MQm-&C~AcUxL9STr!SUh`EjU_df|ZFb(T1pScR=C z;BKj_QL&V?*L6@`UD5-Lw~P`v=0fR%-~kqQI`QK;&rAi(U2OI|$L%}k@Q#k<=f*k4 z$A;0+v@No)=KjoVd0X7xF1{>yCKtv#iu-*<6gf);v}DNufU*b+^L?jIN}}Zjaigu+ zem>>8J=HVXtsWnn7QxIjwamr!S7BTf8JTl@e^R%ag;zIWYTEV|v3i1ox10D)3wx95 z`DqNhun4DStU>7y{Hot^hI$oy-4ZcjF}GMFyH^{^CHsX{5TBcy?z5P4yT)-Oex3N| z@+)NBnmL#lc3H1Un1!2@;h9axZ+K^ze_Po&v^v^jpZ%u;0BQ;*zTbSlNqOwz?h>6FB~Nt+?Qh3M#{N*~bdz6)1}R*PJLEP3e~H5U{OCpRaVTZokGu7g zFc|jNMc!9EKUg(iv?r-)C$MT$I%)Z-yR-2PXEQ7D?)QThqO@KR&rlC8{aT0}8eaIl z3valIi3#5x&IcGFJAWqZM~Fl_VFi98=Qb@oo_AZ07x@3D;Qf2$`^O8nBryr6tSryM z0fyM|jxRR&z%XpeL`2qxz=*=o;|fj1(&kEaLZTG+YmK{gXz*V%*{tP~0d;U)ey8cB z_fCrWpWc|ThJ&jzmGhA?qqQVGI6gQbAW9G#UWi1vNn!-WU+;G??~k|Jh>zR}BD>7b z8Ks1VmN`8?r4nX6(wz@3oH!t%T~(9|(F1v^hAy{Lclsh0TurnZ%F9{g0I)aB_jByK zdof0`3O3~U=O^b?8J7QF>NK?yRTZ5=Y`dDtY3U!@5_vi}7r|T2D=k!b4?nvy%fJKF zq{xt)(`rUGHUWk|iH^xOh;QjW_6kSPiAMaoO!FI|S?0ItYW!Xu5*)D@acD`0m;B7|UYPt&dLNaUv_%2?;$ zW>;S`#wX^yvjC!~{hS~ex++}Ovf{k+I)&>9(}gJcxKW@rA*%LM$!WMmWH%IfD&jMA z)ky6db#X-@xiOh9nV677b8oS95VfV4| zJ|>I5{&gjlFu?X>X_=*5)ZYQY*MGf%y7^Y8umS3%X9L1^i94%E!r83rb|8IdY--Yt zjDmaQ%4uym??>k}p;NvYiAb&0)-xfI#`*1geiCI?v#s2=(#ce$` zHr9K3eciZL5&|EAgskj_uHKurVYh4Pc>b|@Q&ObpYNV)`WpI4)y()I)wsmHH4c6sC zMYqo@ai)oOi0S0)MNBI$+AXTDrfb6`A~IY_-T|7Q7qGHw-UiMKK4hK09#HCd)O#T! zW0@**&sQ2CK1=X(Y?DRAv>4oF7zLXT#kfo=+bEAAxJ1@?p= z8B~5(qR+BV8%DlH+d%B$iRZ1_$DIk0X&)zY=w9pkDgGz>TuRuC`;Pnby*oWTJTLOx zs&{4i3?4)c#C18(>~z#zzt7g%*@7r*`?xCr8ueitu|D@Bt!j`@bu6rE`)6R`yZUn+ zN^iJl%MTe>ZN7o23p5(g!i_J1xHY!i$J^Aa8s5I$^DD535KLdGapcE6_@CC=+GH3N=3c{pz4HoBh&GaVTVmCNWqYfi|}qb`tbr80(ki4CW_iUF-A zMnI}mu6v#2ao7#(40Hhe322w<5A|7 zi*vojIO@j3e%{7ITR+ytJ?!;}#b($$Xy}9UbqWy>)TkroRMCe97sqtdg;2c%P4Zcp zS*T8bKbdvImOGOGI$mC!hYfTFGT1h2!O&nF4rrO;jsT|vY_-+m&<1-hOB~%%b)3$E&rv_*VM)NIC8Rv6XV&j%byrRclm!iUARK1XD# zzL@%&9q|dT{44q&qVEZ3;>cBp9~JE=k7+pt%7YAFm1rO^N#aPv;2Zf={`OwCW5 zRkye6JblV##o047u4WxyrE_k<~}5)FHv);w~;fJUK?j0q!|# zb#&yf+{b|tZ4dI|-#oywP=|+!#*=)pL+&5EDxs>%jHaes`>Ap!M9G=Ix-h2QS1IFA-){)z5TqKcW5Ip@+jnE^{KZT*jF(f-O@ za)H=D`vKaQuoqLkscu69Y5^DfeH*Bo=4A2P?IUybWRn9jVP6x|(rIcC0^};YBS+6` zts&tO8k-;At8o{o_ZC}uaIsD>E}G3dl!QG;)2gknR}mGv=ET1szBpzSUzPxNUnZt# z72oAP_r34iA)67HlaoGK-~9tJv$j6iA&aZ@ovVF%cEo(V!i%pwf|>}(y&Gq?>Oz6N+1))O&OM9jj6b>$J^C)5%4Bnw?i(rl!u{^2P|u~o?<@F#`j9Qkj=a{GaHtYsb!C=qyf6sjJ|%A&5&72 zB!-Ek@TFuvLm-UxE?kcuODu~3Wr)5Q#Yq|XmRJCYfX`@yaS-db-sFUX5+RYbxWPC^ zqxZcOunWm6s=zsu4}I_ti1qpfdosHR*!GPyT}H)o{H-k2^>ap=rX0#VP(iah{e0T* ztxnTN={t__FsZ4kVFP{Dg9hq>MTKjf|a)RoXyPh}>L z^B;AqikWCdkq3uIu*GOOZ#SiKFL@fNkY}JOSud}omgBSiel6?U$DDR+p-*lW8xEti zoA2x!y>1^rH6qO=>#uK7MQPP*IWV_7oFwb3%Be8>GMKD=fAskBWc;2w0d&vkx71Fh zcgOi}EAUq~_#d8kaNr93T0!3@O*n>eezVO1T2z@o@-T{1s-Aa0j*+S7W*`{jXeZJW zM0O7mP!I`EZEz5lZPPTW26O36O-;e?!q}yjPT-(@$fEg>lZAB}Cp6%1^G4uW1N@I@ z-{y2ltxb=_K!^{;GxHL2&9%(MU@chV09oo7cR7&xtvzmgd}gK|}Z$y>x$K7k*Nu#BUF5`AD+{e*HZtI4CxK>TOZ;m?788 z>So6e!sYP^IK?Q@<1b4yaU9_N)8XPnNs4F@sP#e`Oy^T&P$JF(l46cW6(RpV>@#fN zgM$x5?d?GQ`=J;f4eYtpNYxrsANVH7H&ema3X-XxBZ#OAY^(8epgZ`O=DA&1ry25W zcu+15D6G*VyTgs0*Fv!N`Uck)1ciQ^KZL`+j|CrfcSPtFf>(}e5d(Q=7D-=Z`sN_X z58eGWuT!jB=Pk=b;9Y$uzRSNuD1BQ6$k|vV=pyhX{9(loq|IPzz2EOT|CM5RPg;Yrf zxdynV5xr_)HJ*EF&2&Z|LvpjTR9IkNzoV$E3`{S@%0?J#ZWd#^Z9hNPs< zmsEkje_!$G?L*O8db>aN)wH;cD0)8UJYsb@e{&n2xv-L!Eq61uZ-`P}v5AZwv< zfilDVb{-18v$Vb*5$rt?p3aDmXPh)!1$qIds!^gr~8EyN^=}l!>k)0r~)Ze^&b{wW(ZF|GU>9xYf>2#vvzV2fz zHDF0(%x`i9G4%Fsp528Wao!NUL}fz;N_gyYCU@UX+0@Ma7N3&%!yt>zdg8Z>^on}k z8i*GupLdV+W=;)_@g>WwGrsPi!+^fvQU<2s6cGQHjH0lo?qSgH_-B&`ewehrp`qF} zL)bJ(^Do#5*M)emE#wI&sm;xrHs?+B>;_K~uPLe7C7I0bO6t8F0B}8JiB3)ba;X#f z`2GsCHKYc;QHwz8^L8^s2IjHVg=2I21JK&=D%N;lVy0C4?po_;6Sf3)^bbKFkh^Vj zzs2&p=(UEl-#L3zJWTexKk~j)_PW{UkM!rf>djbp@6=vtzkqq^g{RVe^t!);-Q*1p z?O5v>PWHdNO!Gb~zgdpZO)#14o#ro2z`AP(oz&ZWUN?62<{7%JO3*{UM&Z0#y6%)Z z+S}KS&7E)=8dU>%-)4B39!C}m9;eowV{H=gddOP$)W7}jK9v8+D8P$A$DsPi56WNr zx4)=dmGCD;ghl$wpnLQB`2$UvMFnBq>Q0yR%k$50Xp8%zrde&)!pPF2SgfZYTSvtn zXZ&r^Sl&1OuQI&Ba<2W3{`xI_XeZ+}D54ZylsGk%=#@IX}rST&XZ- z;}DTC0yRU;uiM+20y%qjW3AiU5PWuOJ3>V`Dq_Jn?b z`?WvnsM zVEbENVEUJ9YITmkqJ6${aao+iWDo_guO^}G>}yf`9D^fQPlJ7<#2k^k^QFbbgI%9T z%QY^TSs0(KH*?(8D0{fp#(oDcw2#tZ=+!|Mw;Ao^;2XJ|piy$(z_}SiUEIi2X{=)ai55uA&PLPU<@fzwJPFPJp zQ+4~swt38d0X@y`963;K)=1d+$a5(N911DG$2R@Yipa6C9L4-0!`Y9#s#c&kgj?~? zu&nz1*0sh;%Yahu;P9BvLdkZmwuJS#vJi8k1z%R1`g3X>=eKnWV8=4wx0F z_r`ONWtY{~%C4^`a<7dj`&aW#V&a8EB+2|!S9hR1lV6bSAmzUU{uKCy7&V;kw z13%p8m9^i_5$3$><5M=?6npCl-j0h~u(LWWoamRRSP_w1TQ%vPO2@$y6Kxbg1?_5H zr^fdEPV&@i%Sg*pu&v8+|w~+a6F})}Laa zS0Z3$a(@^e8$SiT1}8HNM@Y1)9QumxfQiiMZl z0W(xbFT>b@AO)RBjAKK+spgo^5%%uQ(FZi1;71P1j;EYNH6+|;#a9J-aX)^%A^;{{ z&ewZW)mwQ|a9G_51q2f8*W!NOpcza^RlI&tM_>U4T76DW8H+0R>sXUK*Jn)tDKVkI zEx7jar3)HLc8<9 zk7~H9o2r{CMgg-AX}^rPUoewyxhLa~zTft~L{CafhD}eOFw2oT%~{{A*2CrQ&%G&u z9STR@H=Ew^dN-4`39gcIx3h^f-8UQjH{*H+ZDNK*U`?x2E$ZI21#+U+%8+*^%1)ImpmW|7>1&_&V@}gw$)^`48+L5}yA; z-5n<1V%+Yd9Pg`efUTAyFLKoz&lFmjG@Gb1?skU|AHP;M(?Fg1u~DKGao5Vo(qf#w z&$AyIHj`3xBQtI<5l8i0RkPYKJmweSTi@?tcV*shVVA@E=E#G1mlvxUePZnw=s=@G zs-W-NW5)ef^q>%_SdOI&#>=JiyR20Ha~%Sb-Gq$0h6aKT#Pl zpDam0*&!ECNkE8*(k?hGq7J!JjlVFagltM;d>4~G9Gp<$3+ym$79^+VmodnagOu#2 zMFRd44C_gw$68yxcUqk5>*%ubV1UK^Tgm@#t$RT6Y?%PHi>3#{y@e3<-Bw%Twd#J} zCeP0iY}^6kWoNy7u@B*Y>)R^#h|@&=6OlbnFG$&JDT(uPt)dOj7<^$~jEarEKX`traf}jUS_@n&3ABr8j8ecJw)&mX`1Tc|7I7+3_cAG) zl*B4ks7L`@ETmt^{i`fUl(7&4@^)3b;to7VJUJ?r_=1Jo!Lwa7U1FJzwhf_^d)0q4 zn7we4TuJGZ1nVsEjX>3mNorrEi@ z^49P3dVe{%^rSGA@3=0N>oPx;=Q04O=?q+4M6$AK$6bf%NgAwTm|C@o+};{~x}115gm4q;s3X1u1>yB9(w=JQYo!qeFOo8c#A-tL0c=;OO>x6SuQNgf9Y zYKB(d{`jZ%>Rv=&0P!LHWv^k!;vRJ)KfSx5V|>o4kG|u zpDrs>sC#h<^aIv=J@jADCHzOC={uuS67tgMS_r zpwg0Tj-{L|p|$#D`uLEO%eYw|@3FMFYlqXPteshbE=e+MoZXv`d7#eeo=#5RoYHgq zH}@7(m=k~*d(E3Oqa>2Bsr_=*p~$1L{C?qXp<;O(nj)k4d&f2Q#qG z@QSAFFBCrfK&LBoiC#o~JyfpEDJB+SRglx`)Mwt4#(h6W9y&z+2w8!u1Daw8_u9@p zs)li?Z??-ucj@&M++I(OFL`cn{20UhQ`I+fC7Hm4jz_QRA56PjL!Rf^vpcU6F?lxoH81UKO=3rV{;hEq zgL1vjljr8TqQlm6?VCS5M9q64pHB`**VA0`6M7lSZf|gvF1bYD$5l7lZ=n%7{N5a8 ziB)04r0r|AJyZMYNo~aQ@l5HLfdLNb6vxFbsW?wn5wJUPvTcoVK3HpNmt7o0j(*O>5c$G9*%v^+X;W+lF>h3vN#V zRSd^yszS*|d&+qZor451TpVXI$Cen?=g~hte7sOxDhs2l7WHI@TT%hquptt z#`x0FpHE&s29w2lCf8?1kjJ(?qz>WVR90*rzZ6fqdRMH_iZNNf7=?_iIKDoFZgO{{ z;Bo-*aeNXd@CfDq`q3ed;$qvsZ0Bn98%s95qu>9$lwY(Zai*LtaP!VPA~cuD0ST!d zcUd^+7yO78JrytK`RQj`kz_;W&9kP)<~1P?XgYaSz&t(L^S@i8E-vJSX%fYc?b-uA z*Sor{9y0UZ+~QgZ`vtcta$_L~kO2wq8{%fPT=7-8EXR=ku33@K$D?KD&Ox}w$5*Us zcS1t#GwURr=-=WGqhiph4$rA%nZS;hNOO%_*o)1$+%Flr>$n12!_f{B^+umx77Ddu z7tdsVqLNMi`Fol)Po<`Qe2-0x$BvP*SJeOuxTDGcdKlxNipMEa+m_9@QFz8OVvx+; zaa*c41lGOxR7kYnWPs52E~2>Xu0~2eDKv{wJZcL%ovkEKjh9)JHV)UesdtOSLI$p( zs`N+a)_CtT5+v2IvK7DjzgHS|aL^(^|5SPUie%9-Abf|%@6bnmpXw1d5vt)}x+)*+ zr80X2F-R_n&xa|al_>)qUC%idbN`b}g>Gv&2JM%3sGrh&69CY@l@|_V)Al{I4VYpV%#?dll)G4$pSZa8V&jc zU*)tu>hbldLUVDymLKl;9n0;k0EsDh0|&_mkL3=FpYOr)4SJo%Y~lNTqq`29V+007 z*?vx5UU#n)OX>W7DCg;S7t05~GTq#oY~R=zC2?3W{FJ7ASFY1s=x6u}4Vipd0;Q#; zh4#aTpU+=2l--&lnd7?p*%Yresr9vQdZaQ2(j(;-TZD`j*(eh?_P1P z*&2NLxlbyECZiDLLV1E#WbuI0nw3i|+NQ?*^CiY*K#C`%pPzF!nU0xMb&(`QQkRf4nSE0BwJ;Q6IoTV(B4PhQ?NPew(xt|&ZXM&|mg zEQi;9Y9x*xL7`J#K(Y*M2!_O!$id^YRa*u-%s(G;4mrS#yZnRp1rF1v!n&$I_8iYSXfCNn6xgRT$4SoD^a; z9HwDT_f$1*_?n?pyikd9dXdGMHxwHke_!pte$xKWcU$yPgqWKzalzj|AoBz}= z0T-o;y--)7#^-9>CoW5>QKB|!yoco^exa~L375g`BMx?30OKq5S28TfRiOXuDd4nkhQw?Owo!u21H{Wsue>%qHO4M-V+j7wEu5 z$`D>st`f9uq_(qZVQ0*BZZEKHZe^$BXw=H!^>ng@U#^ z{>!p`{7$A9eoT&k->@ZZON)*o(D4|}a41di%o)Ez@n^6~pBN~kU9o2vYkUg+%mjL6 z@aFS*2bVvjoQk|RwD@&)<+r>dkF;#aZMgh;7IBtNNyJDxM(@U-*4}az)G^?~%9bWK z6?jQklnOO6f1;E``0Evi6)}8v^E22>@YAl+`cRA4Ej7ewRRBs8Nh!fhrwL}p!zz+| z3(sRjXUgYU~<_qr^=?H7R=XIxVB|g0vt~+in~0cQu)P{PCb(q50g$#qh>9x zYP-WX46Jv_?P7z=>vcme$}Ap3{VtACDFG5&_Sye=yvk0CoW*%or`E>7pE8Hzb^ecI zR&SmFSj>amA}c+dDyU4^K!L}osu4tGv@u&l19slmoU3(zvI}b$^m0xYo{o`{nb2aMYp@$DS8dN--!h(AUmK|N5{$P1t{o}hPJKxb_>QtvO%`VGr9YaDRw|yyPWwymnGx9Ydh87z zeoL!oVQTbvo7rT9(O|ptKK1TQm3Ge!Kyq{jh7~*2zas!RDW{5L(0ER#kli$f&=GUR z%0WOg#-_?bOjmmv9gZe+r|EKXSljk76!dK_N1l$Ul4W!qc_m!`ap74V%VXh^6dMJ8 zh$tmCzZWtcu=n4hB35zESfge=XCUD|*HUsmbl%we7T$R4xe%yP@ma*|RD|TYIJ}_L zw>Bi6Zd>)n_9Ppp1ewd%M+dpluNrc9u|<}U*IZ9Jma0GxKL&%++rjRs++HU#E1wNi zJw#lC4Rb0|!m|!e#TK(fOQVzMJnaZ?wa6qhsPIlp?;hWJZGbvwfT=hqX(LhJA?x`7 z!i`SsCyWf0+!KiM)9N!Iw}@)phQ}2i`-s|E9d0buz~8u2g0)|Y%@UMchi1A8_NThsy{Y~MJB39=mR0iZ_W^3QfzL%(quXjvf zR+-g4Vg#D4ZiF(odHjpbf!*ux25_$Z{tit4;dKFNiby^wGqX!q#-xkYrLt#Wi>+^( zyv8((O#%KE`ii`rucvXByRYab(4#``UcJvyqb5vZv7_3Z_xODZ5uo^6aPP7~MtUEk zc&y8|ruhV#-jbOY!|@)y-a1cfdcVhJ;43MraD;&GitmKHL@EiOVRSg}K|>d?=W~_h z3zg;`!qB-HS8#;25U1*Bv9smT>2X#ZOa1tfUfqcQxSBo*G-#}n9(b<>MTdcCH$8slQEiB#$)f%%4qffM z#kz>8yQY}%9WK8!EepG+Gh305_^lt#{NnLCWGdAj_4->UA9ltiscZJM%mk1wCl4t% z;4$8$2q5oYC}&Fw7LPULdfXi!b{a#pgDoG(!C`ky#(*AcH&v8eBp9rmFHJ(HR!92e zSs)~p@fyn_voo-6*1K@;nw}%rRirOd8d5 zIB9AJV3MUqgCGTf-^d# z`W>6&<7uI@3o29bztK_jDSTT*s+B?j-kYSR+U#1YVQqsUb2VLu_9hZ?SZP0}(@v*T zF_X;7!sr{IN7|ilPY1|O?E2g~^Zu@L!7-vpn)W#|sW|zEN^Cq3sc4?$WbVzSB zvB^NZKiFuS;tG**OlmU99cRD(BD=Cu^=K(--rVVT?o9Fgse@q~$IsU6>fE?!Y zeL+yIusK#+J1b5us*KO}*ZOso>!35# z0CHmKQC**5(XN8!(s}Hjvd1DJlVg8I&6P<>f*hrW1LpY4FJ_46mZ@gF6}#mEE7ahs zf2BJ_tad)OfXOd8vR)2(R;=A+MYPHJ*?G>#E*XPbg1h%Og|_v@6FV`4Co8j3$vh@F zWy!UjAD~mzk~^PqIlM|rv0{>&RBqFUGn$A?wg=*Rt|^c5aYEdc{xCNdNx^@eTnnC` zF&@oGm4M8Y>VL^>PWT?5w3Ci6W0gCgVkN{;7J(cIM}8)IYo^-Jtc^{ zop^M1|6o2k75qnA&XXa~rq8)C-=DUTvtw#HTo}h{y`$-Nb5MjJdI~6{wSrA0n<^KuHgfSoDJPm>kXadlQY(lONMdE3*Vr2X$u@-OPhRFXdw zprkppu1Bn_P8J~eTR%OF68cw<{|Ctak2sD!5-3o7(qA;tA*!q;VdiFb&w1r|Vg~r{ z%CE1r$9m0TpCj+RjeO@#ZS*UHP`SoPgUf!6BJBDbAIZ{TvwN(s@_+uZfD`{Ih~nXa zt5~vBTX>q_xB;VgHkmrW1Ai6#)anK&Kx;CPSLt|#MH5L8#?Q7(AS&bjV{~`>d;?K| z7(0u5#=B5FQ`VNC#$z^8R4pxea5YK9`MN>>O0`t!Rr4b9l$f7D>L=Smhf{LEFfidU zB*k2K0H?sm#YS5YVcv@TUk^*}9d;z$`%~h%?+;3tmneK3{8nnStF0#e+tZULNIIxC z_lg5hbA{Et$&HmHZ=l*git06EuQWkFtaO^CLTIcqRch+SbFSsGHMlUJ zAwj9+D}`k_?{fip>EHp)0PFX#&s96{^LpM4+J}8#2ZV$Z8YOT7#}U3RXxgQd&r)nO z0aP!m` zuRj4>UcYSeAXs(mDWWn#M*bKg(Bg7PTWI52ET0v1G_AfF;Vo!BHJBMkUoh6r!9+AQ zvl91wWO|hw8)}Db2P`dZFKYCv>8xNPA@G=5JT6@POs7T#@mk8WNPgKLFl@&M9dF%{R zLjUl*K01P<%gK{*0h~BP-eC!@G%G8VO_Pmf(2&%u(r0GWW)0X|xSa06>6zWxO^c*c zGZV!iI?c7vI37*sH8&a0zl6NmC0sZsEJ)5oLw%Dh04V>s>z1Bs&v-_2FV40`hglac zFOT}Kr^93~#bL60!UWZMQOA+%VLG4XND1!K=PCuV62GEdP#+gK(DHbFzc^W~1{L}+(=@9bwmHB-=U|On zrHj$ZCm9OAUiz|Lg>Zr$Ak;5~x_an*hejzQ>&2Z2c}lpcWYT|Jv69M&IcL}^uS9=> zkRGs$B_449t@in^RB%Js2Y+ho%u|Uove9bE>T0t@Z}Y5OoH7g7>XkV;Fo^$Zyr5G{ z@$|LP+K;%PTl^+ZUq~th`5FIBWvok;-=B9}^jL$I?ARX*k&)+6T>u~Pnz1d{$?}=} zMfxPGg9&$pX6EOVxEa92{Uh4`=kInzKLX{B=gX0p-OG4#*b5H|e8w7g%mQ~vE=-sOP|H^pN#Dv^h{^xtY;!H3A6u&4c0bs(z1|=g7%uxsv$g({k(f>-DBuafT^1Q77swygR55 zN)b5IqIxnk&&ox@npIVzXYO$F4Vpr-F721otpB0#u`nADw<=fG8`Swx?t(1FThU$ z^k?=>eZrztBUh{x7BK+fWZ^$g6Kf~qA%h>;WZI${4#Z~=vhN5^7JErgm+R#YrQnYM zhHGPM61_*^W%9$R<%5o9*cTZ_r)nV-N6(RSvROSA5N2<>Id`X$-b7UE1f$4Eny$M&5JDL9dI!E-J3x59H&mp8sVzh(=ea=WyZU#JOZ z&8ctMJxj6}`hdjLb0Hfmj!`QioODsve0m5-=)50XBcY@m?PFjCfy`SXCaPG)T!O8* zo{GQyk!G6*1*66h%Y(GC`SOxlTKII^G43)+ugyb{UR5@$7Sg&3=utvhHQ*Kq$hjuUleGunU7u%g@HWfKmq9 zC&;7Z*np0tQ)*&oGoMPaLoi7W#LHxA)OcqGV(p9OD0^bc#L|9bD}?E6UG2;oXjTcC zX1qUdbKciqeD3)(M;ZGk35p&3c|MoqbtuAHyU9Vc4hq01QP0K2Ve1;`v7e|>A?Gr8-QA?vqp zwOA&5$*b~P;kh!(uwFoq6ZtYv`k5@BSUKG8&!1>4{;|>$FBkF`WzD=NhWj?cS@jL^ z-HuSOntIsvLQT(}K7F123&yDY)bEMsod(<0c@I4C8^sRN|1afr;f>6RZj|-)*j+)$ zXf*1h-eCTa)VVJPaOMN0g#Nhnwm0MP-yv)HWbV-XJSFx{=n6r~6+9%5D@z;_WjH6F%awL+yJbGPF zyZud>l)L7?X90|k<*jZU!E3B0(SARu)(#w`@B%6+861haQ;Y3X@?Q?Wjj`BZjal%sqhU)M39*<)BoK8c6b6Y+&`#tIp*hKq@j`cbN;e3F78;St%j_RgcI zM!U>vt;}$7DHbQJEcAl=tR)CbSp?~qMMkx%2n@S9FO>*4OiS6%P11Src8fZrqnCGr z%UCa#A0HrHJo0$N_lV2~tK-?<{c~B9Og?)1r(*(j5a)G3P^{@K#<*GqWdzP!JoKNS zUND|f@w228pmtq*VI}IE#bBd9w@#OFX<M+eu)^UAKPf+v7Vu*a_=E)@rh*TZsnz|u^>Ir7I zlQ*Vpn3R&S>ak2ZQV#p1b3R&~~XtkhPWd>J?;`3Ck-^SIrt!g))r(VWb`v0^Df4fA`6JIV%`k#JK z{9phX@FewZKM&*8u!$vk4(l8{h6JqR0vgMa3*Z z!$oUZXHmn-CGs$K(0ZHRKnI`_EfB#5OZN{%O8kt1o@S z?`I49kFy+ugJhNWWWmfBsKj>1zIX51Qkgay{xIzP?UkMn>Apc7XUNQ(c1|+g*=k4O>$ArgyBR~t zo=nhp$5+3Nx4nq*nBFVp<9fEGQaV|9Qv*%j#=oXRfDsvs2EnmVn(1$o4T9dEMgy@&)z*#6$NdqTKZuMOMg(eo{nL{S#yV?v3ck(D9Ml6j z_-o!!<%04C(WH6>pw)-+>NMr;C-2f`&W7Jk$JgrbW`|wv8c7xNn5VRPoUeb-^g~lP zghNSc6fEXk_F21=OC}Cco%?ymQJ+<_b{~kQMd!9@jvOdVi6c1{q1j5gNv!rl? z9k;Y&(N7r$)t2d`_MwH|K;=bby1X;?Y*uL&w!EFv#b`;f*QrxbddzGN#i9@)98?%x zp?5pUGmqLX_q5%S(VNy()?1hn$&2A^HL~?uIWp!drA1TvDl$0s7xN_a zx26PtbALrn=$pt+fb+#8+TxoOJv*yQ6OR^;JU&+IFuF~~dgnVWY6C(*=IRiXICSj;wpp*x$CWF@(>54{51P#MtO6V zpCt&SSuE|l1A$VhV)<{4jiD5da_n>8(1);QNEOaE6OJ)V)q!}Ff$kxD(D)1SvqZN$ zSS7zrPcFxH)onbLvs0UDDhK}HfasJhq{E23CEqLN#?-0LuQR->F&YvBDk5b)zAJAh z#a-2t0gXXuYJ1z3B!~}6%h$`t$TgePRE(i+rO*k0BSAWEl*zr{n~h&-(do7%!=X&~ zcN?RgTZ_$HI&F6GJ)uhi648|QjhNW~a)19NxBf4_W|H}`dv1-@$8e7V*`$e0uf#+1 z)$I?F978Sp*hX>Zp=rx8-cZ0X5o45;l5H`$mzo<4mhB~{>`4-qe6uWwf2*gols#*@ z(sP$fN#UI5(g$>6{H0Cjug@bWG8ryp9+=o01XI15yc%na@g|bJ7Y_0)lrPer_%k1% zT&$UedevB>_vUs1r}!7P-p*yv+gGeg`j=qFiE;~XI;D3%MH%i=f$Z4$jGm9s-zQqy zKY#x!{Rj3$wm8{C(ypK!k{MW5CEy%}wppti)w~n*h)7Rcba`+0*@@}y{pgAWk?F#m zb)m%&1yc-$;9nQ(>ZN!(7lF(?XX4)dd7@^*ju=p2F0SYhj}Lb*6-VyevwC~5vx!bP z;>06ER2?eHbo(7L`I|RJiw^lANaP9d0rJc(?yPsWAI@=;`5ZWF=?*bSW{n2#bj{^= z!@L_xV9FIb!!R{nU> zqDapRsSXG)BqtCEr&sD7wT(m+Z-|0G|BdQhRY3-?bjh)C|5em+yPpYo&`1XD$x@4* z0V8nxX@l>kA0ba$%l{1fZer zdst+ikaaRJ;pwm*;Wv@_RW+H@9F^C@Bvo6lC(roB&<>o~u08-`%UR81vwUE(FY+zX zWbvdg-}Wi45mdJWe)RT$*Ece<_~a6?YPeK_DbRoG7Y`5-oRlI59cDB~I zM4`||g6wue)LunH}2lU1{|D zyPq#HMyzgF_@B0kYSby%(H=I6p0dZj3p8H^vst;#4>J$#8-y9U4|kAjV5N?~0YNEk z0AsOrs-Z%7<4JEedLu=6eyl2)&J#8eR-}-FF_h@_Q#ONBU?>@pe@f&P2c2xx#(9kD z;3#cd(C>BvP3#>={FcJK8&p*7+VXXw0aR$&`~{N4lK73*Q$2|V;S|ycEPBo;e|Z5O zeSv&Jd0t!_7}sjFQ%6W=G{4e9u4!zla0W5#vL0+6MStlY&7iCHWp_^F#8xWLvni)g_aMkHFKgfroohj`swAju?8Bxu$$ z2`4eHXKS!TH1S{_9S17ay@<8PZdN9gcDDKgq%DCHIUt=7ZRZ_>eFF3W&g;Dq=q&Rk z@v^-yV(IV!80mHKh+Y+xx-vfmSlVx8V_pm#l88YK3y;6W6iA2;@fE$zC=kz}ilf$; zasu}I%zYeQs&hNTyxN|?+nQ<5stKvnTykb{A1P6@E_A+)I$61tD!G31H3#0fUs$dT zb2(lQ!Cc{Xq?g8x>Q&S7bW4eW44O~_n8lP8J)rA9gH<~#p~f0FQjQLjEB9$!`h z?)3ZnM};I%t;N@UpD>3Q=ob~jvJ_Enfi5YLi@m`^f6X$87GpC|SQjDy*I%Wuz~|`( zdO5PhH*l-ckrk=&@`~}CQe^8K!qDa~0V(eX#ZjACMc|W9mENhHT-rrTtu_9p)?$u* zR-a~;!+fc+UhMm{iMJ2nA`p?_;xF4$W}tOc_B<*OymU zK}J%bV8O?TCJ`@()84~3(7^xJs{gaW`OE73_042g0zl>$)LHR5#I82jrEB2>Ko(^~ z(~hd1^T|1b$9~h=iL@&{VcQN)QB`6QuKjMY1Zh{5c@gRM<2gAMH4!pVJ$j{g=HK7c ztk93Qs2C3jxRUjVeL%wfC)1U_`nXNP<3Znd=Z4*i++66&?$_yk})iSq>F|e}BAcfujRF>A6OBloGbuT;4&0OJC4|VHH zmtOn_(S0A)s*uVOnk?k zM{bQFk)Uc!#2n1oc`qM;SisFJmsk6L4b!qD*-v~>dSctLd)0EEcxU;u0UnzO_`)$o z{(?c{k#Pw172it%%`b=IdE;(xl>BI7rV2Y<#iFfX%nzd-)wd^IErxf z0|gD9Azmf(nARt9pU3vavypA}XP)M!E7dJA+GB1;HPg^>CIL-4hUM>gr-&-Me|xxR z3kMl36`bupBm7;T^Lu20bO7o$QIq$=*puwTmvHsQ6|&D0el-@=Dww^B;Q(21_RP&e zXXo7=$llgjc#%uSm+mnq4cEP8k2fZ0Pa~m8G*yN;h}@8}xV5S`EX#eqE{TY!`0~2^ zNQQT%iPUHd7+^=>an)}^70&w#=oV=B;X39+soxp*ekD+k-!_Pcx1l?i`E-Y4#5|OW z`fyrbN}xFRD3ySxCU9UlNt10ph-5w^h&qhlF-e+{A+$1LX_|I`{rUW$tBHZ%?$n&1 zXw{iF>Rgov7?^P{#U_g%~w^BZCU zS+0%st1b6Rb7m;!fty=;j5{aKRNjU6C9(A79Tw`gGU-nb<7aC(x-rF>gPSIsJq^lu zHzl7=?bJ+)t?apc+tz#)$H%M29Bx|eLcE<~ogd<8ZrupB>>-}7-38TIdNN2Rl;f4G zMsF$A4Wpf&Z?tW@4r`4ss_q1Zlhi>%`|Csk@xv$C&!ew5+As9K&wvlp`w}V|q*fGw zx@%Xi%;T;VTzz+G}HO>{n}FgV6=K?MeOgsXE$PjVJ#C@R5xo zn8K8KiuoW7HFZIyWw^9qgoL}*;K9)9r+Qc9ZL>-jIdt=uM3z!Jy}KGuNFv03ILVkD zz8P|H&K5vAIBRCltSR3in=QlBhC9LA$8NuZ)U(8E>*swIiE9IjCyRU91_kP1L@K|D zALRD`iIDx*lJ>uU24;2!8_D{eYHUsxi;y}n;Vm>ws>B;OxdpLX(rTqgQF;V7+`pzK4zl#_GOl-!$dqCg;X)rH{IPTb!4 z>D>{QrlLjs>r~(4@`sik{?|Y!Q|uR-7~b(`XoJt@1deN|_|JHaFHb#a&pZzwLghL_ z@l-02f1c{?%alO`aNrGrjL84lDQu1~%rIYk-r=5!dXA}M*8FhtDt2I17Slf^V&@p^=O8RHTkYve5N>13WP;T=^uz= z?B3|CFKFjJd>VNgn;%Vk`XkwAX|502QL5M%xBGR(R{V919j~`U5pdd$7Ysh(^_wLY zv<%{}T-yE2ySuhBbj}3Y7cHD#*Osw~-kz$m9{cr{&2ek8=c!k>Gr*i}+!+I7gzG|Tl$;jM>$$Nu z;K8LV0AS5+mNqu2h~Z+_+4J#MKc5>k);o7Hl^JbzvONls0lE0Jmf2`I-TDEmOp%#} z;)9=_=<6OFXT`enPQzcAo(3JOt7nSl5JTZj4m~Fi49Z{1Z_c`ue}gH+&8t5TdEbYBbjo5g%L!&Hf^_ z^H{DMaBSO3b-ozD+oaxNB=(O*JbARYG%LngNXRUE+Mf&f3+m(h2p z-*tF$Yf$$WX#dYMowMtQS#z1%I|?d*q&04x!FE0J4*7LzZ$Ys-JZTLk$~)f@U`)-o z_uvxZsCT|>1ZfztfwE1vuep9dkMF9Gp4rBEdvBpb3@VLi`7Gr=d#w%f zFeVeURyY|gc@6j&3kFk?gtE_7(o)yqcMXbMd2-~vKh$8(RA-8kSYMrO9fhQHTjDr= z-U4P>rQ*DTQjhlHbS}*Im{LoaUd40B>o<``T*G?C`cRy|9nO1D3L<|_=0rSWDm7JJ zRMgoYmd?QBZG^P*a$ijyI*HHnFGHivEGA$X#7Mn{#IRw(OD?ePwJ;J@!TA>+!UaHM zg*kP%#Cg2ewm$yQBG5dlzmK@;G*P}Itp-WA*e3s=aymav^xi%enqQOT%iuOQuADQF z&pzLt;XJ{0vd~fwWQu*}Gju6GwfYcr=VY{gi;?p*SDK(=P^)ZyvKp_L@=U|3RKJL` zKr1;@h%Z|ByD(U1i;w z2k`U*2W$hFf!{z&oJ=Qz%8_{-U)`W(*x)##4qTLCh_q)4mc}kmLK5b3*_rO1AyO)} zs2F1nqaOlF{f)B8q?d{;e~@$fR=n=Pnv>JOsAnPcIP_WOANrH|hH&sSw_^CVH*P@? zF!g-?d1f7Oa%gFR$Ph^Yiq98s-wH-DQnmzuwrwjQk9S+R8^UYw(#G~oDPJa0( zM@a?Fs_jocOwxBhxcqOg)Bnfq`metpa{k&Oze|zz(K~6tG*N=B3CYD3YyC*wb-iKi z))$RxKzTXxd>S&jz-lkwVcU7F&U1u4!29C5p_5*e7X#uY;L`ghiOAlNk=RWHh-Ldq zA2kG9b}BnBI6D-vKJrv0bFjgl=Ay8Jby%Z80wB`4{T)+^&w zsku0WfqhozmekZtuKeVBA@|{aq53V2e$wxfQSPG6;lbCXhnEgfB$m;>+U}?ED*R%xXE7b5IW}ss5q^0J4#((=Ka~gP$Kx z1Ydxc!!4#l={P*B{U+x)MpE$?qgfK}yw=sMUi0DJnR>c~|J3R3VjHHgZYX63qC@R4 zvG@M5pOy6|#(u2y3PHWeow(msbebIGWZBh~w%{xkx3(8NdHSi5rCyi}5Im|O*ZGpO zCQ*Jmf8SaUoeKPW;X2)~--{=|QgCU%K2&foUM#Ka5LayNCi!a^W$Loah$~5?0HwCw zMELRXt4O+fvxqxYT89Raq$4+l`$Dk3l^b_y@@1xQBdZiRn@G&PbUC^0nf{6XDQYWn z3E<315v@>Y4?0(`Y`3e@1WmZRw&9L0V>fnY{kFJgqGX1EGFRFZ0>T5oASzz;yN#n@l#-n++(hetDhTlgkDdAolt zza=C7`K;9LG@P9y3i%3Fj|t#Kw)END+O9v#sekNJv!=$1Y>cUz1AUt0-#rWz2oyhX z2mWBCMgZr2hs>3C2hpCDMpjmV23vHbk*yZuts6E|L&VVSV?AQVCD`xlbs)l9`{Cul z@`qOcS<>G4@Us9sHbp1>y0KJIwoqrlilqmA9AV#CVzy5_`HRhxhAlREV}`~>YS*C( zHJKYb^uvq=1Gp3t%~ls?&gRmHYH}58oJ%`qC*dTi+q#DjmWb4 zfxt`Fo2MI}%z;O#xFA8XX&A@Znltb7ar!a&I1{smk)bJMBer&K3I?<|Uy9Zw`vLlj zfHwX*&ZPIty0bHVSY0v+MV?OTI-gsfz2RuNwmYbA1HR8d6cb^Q~ulmmgc? z>H@0-Kae{+GshFD-Q<)2gLxtrO;Hz8O3;5amv2Ja7S$ag8Vd&&br;ErMl+{wWVnV}iR(`#u z=|Bv1Yt<9KtN3N~r{`9xtX!2PFMG}Q?c>AbkrXMg+vZH|-*SP(Ze(un*?_M6LnNfD z8O--dJgGU9UA9S4CnZ~aUHDyspm}f$1b-vd-~i*XkPRICh%?D^MuGp(O-hI8b-gs_ zTb!lGXU#Kp7}2lSDS#?S&ah%MTaOoKT$P)SlA^ehZ{$V!><=jGy@S3QK-di1FgbrC z>_Cfc%8VEwJsF_P^XUrn*+-+_f|xY>6c(p ze0I_yLj;eQvz5AQ@C|>GiQIJ>pzon(RI5j=8Zym zWl?9RQG6izNuylO^H}T21JU_bzhsjLz@UWataB3MCz$Kkpc3Kt=Q~5p(O3C!$s^$HO8 z!67Amc$qEJaua(@HYji0iMQn($E9D%k3Wk!&%`J1%r$2-KRfv}S}^z$;M1nGFm+C% zBfyNq@%MLX@4cmW!1dp{^t%`L``Fvth8FybGk7+dPGHP(pWKjiQQ^6&Q|$4rCdGU} zp>Im8p;I06&fxoVryE1MpM|VR`jOGX_PH|14}GMKV|0&jph#R*Vm7DyOwD!C@TtoA z4@r-;v_me=B4mxuP-d)aTgfLi++8S?^?=N@_Bxw@?!%ausi2JljZS?i7x$axml&ST zB=ZFDyl1eSwY5U2c_ZCbiZBF_)4Y&6r5vZ?y!+g+u-(6pJUyl+*mXKTLYTFJG*tG* zA)cnY=cBl_Kk4VT^%U2P63uGgg}asRgXy{$q1vk_NH7^J9+$iPhLU)4>-ea6!FFo~ z_9MWFX%TyNTtH-z49wv(w-vzU2OoFBw=q2F zuN@%d`Y(QeXK$x)SE1{$aTK?|i2-H8GQiY$i^GeQ?4DhJ%L{UvD3+5Oqw9_F={XGG zQcH??9JBbM_T8;-hGj)tT*~QQJC?OiJ88@|%T~Cs%^>Yf7y8U< zbB=2L;+;{x^5UgCx|3nJt}{}whEvhLM%hkVmE6VJVnus-eGxEue$f*hAvGjXJ|SF> zUMfB>Cs0YYSU0|_Eo5;Q#9AUvVf*68>0goLe7-^Gs9nf3Xm)!zJW zyl4gu_j%h1jJcj&r5EB}orL!tajuc#v^AFx*m8{1M7T<^3WF=@?c@=^Kps~W8PaS$ z5j7p{S<32wE-au)$Fv~CCzSDiAd&DbMUBop2G|6%m??K4Hln@>x;}KNz@1#tEEP@) z+FMdCHL56R6W^t_E@-t1r4as#$Ht9}mz?>e)6-ufZi9{@OF9$1`)RtM}@)WaT*>&fQh?FRLCob zT_N~>qO%lCUAQk>mSW8TO;OyycRVH^)Mt~;GR>@_SqXIN_5$a% zF}iaoLkp%YPX>L#Im6U#QUrH*acG3NF4^~T#Mp%3$X|`xTbb z;VFofO?MBLmx+=ide{5tY!qw4r{4)vznT!QKOb5YwB?8&{sw)g&EpKC;g~6nIeMBh zwZ(=oDax&KFY+#=3q+2N@@5_0wQbxUXG+o^jvpM!>|*>3rhU3?5mvLNtrL=S5@FRD z%o$%l!ChYY%%%({Vb$iZuHf#(b@Woa*~qYFEf_IZV(c~i*oq9}iL(G{49fcAeI&*^ zysfA-wphgj#iz6MOM1d3sum=J7?Qv`vL_b=yKTeI?IhS_ZuNI@2iRbv1O;lODGcr) zu)TrXUi7!j9YV;e1+RNyhIWub3kFuYJx8RO&~KJSe_A=MSvdK_)UjtB@^;mw!_KQP zQ%f-w;vgSh>ayO+NX3?4f%N30#R|s|cKE>0%Dqad>PsDX;_b=N0h_&>8?Tb`chQD} z_w1)fpZ!GIw~_GrgPWhzn%?rwUFVQw@XX%RN=oo8mtOmHM?v5tDtZAv`>WVWjC08H z+(QTJvJ9DtTi-y-FjnM{&7g{)Gt;clpe?kFLLL2)p|qL(-Z}9U^@Up2FJK!{#R~|L z&A~cg&o=cY@&iw=?DxF4Zi#Z%(ufA&Z>j|c@=oT*c;jox zFi}a~cqZv1eGzXf;eE`sugzBMh7F$J^bl}So5mg7PtTw~51sY}g};7$hw{8K&b;ot zCT>ZAAk*o`H2x|`0^a(XVVr(LwBRl$!x2N@f)Kq{OGGBooJhV`y$>rX#37!yQ-~hBB${nuELCvO6H*>cBc$1dnsTp@%~s$ zjlg!t!zU4E^5ku9k<$?VZlbGB_eHp1dY@#{Akl6hNrk;iHo;+Z3f%z2LVWJ9zId2I zkx>u}*fL&~Tl<-_<5X$V#`1d74|MD^c=feKpeHX96+*6a1w$fRe550DWOAdGs8C-H zzjG&t=sy;W#&u)~6R@b$BH1?&;vM3KOfvnsQ^NGR5A4%lot;=}*`u<^t$)OuF+X{? z!F39o&6M^+*Yd4|2hmz&F70ds9-2c9h+IqjZ3`MiS2iutcxQ~}&bn)8+p=^77vZlY1Yg*Dh}f>oBmLJbN-8^d0Da8^o>Cw|)UV@44mRsc9fMWwr0< z&X$nYol_*{5BQ9Pvx#DpDP>dba%}d7*uAtL;INM8Rf2)XCW8ur_@td-GR7<5^p^$F zX&r@lXk)Yc;bP!mC)J4;*107&HIpVUJ2mI!7Le!#=|O;3?d9rD+tPk36htqP(6Wqy zo;qtlv+D7qQFqG^{ga?0TvjBY?G4sb`?KA$5?&b;an(8tXzLAY$qj1{ zej5mFH#=!|B~;hQrJcHHovx)U&n z*HtrlbKp0@-qtEFpH^yQk~=n#)M-xDMd`D|Bkyck)o-=^E1(h`r7<)R)c&wyKXIyA z#2OSixFP#Ban2}D{Q*SVgk`m+AVQ9%*~O~L@qC%~A%Kkkn7RYBvtC_y^x`T+D@gC# z_vHgURn&GL1X~ab>U7k)AM{p`fbO*$^m5;)N-uP!P;!Z9cgC#oH`Z`*+M;NHog+}( z)OKmpwbO;HU1^AMZcf0SNZwq3L;YW1?}vuqY_caQ;PCP+fOJkcfKbYlBStJe ziLPlK>*c|2=EQ2*!E@-sda--P(X#xmmT?in=cGBvjiQ_!==JFt2GW)QzIS~5IE8fO z-7fpX*)>_A0|NlzD%byercY3NWu(7J;z7%R{if8gA=}kz7{Xr|bDz zvb{rOe9L-UuL9ZWV0_m!)M7$L6vtX7`A%v5-gfjBTsP=FKA$zH<8?0={I^|6M7!iq zvUF5yHVA{)t*~!f_LN78jDj7hL~N&yL}4nKn=ibE5|5Up1ZCIL6&}6L9UFnT#ru$L zyjetSMzCJ;H?UHsK`SaEu4KQDeKqwKQ^Tei)?Kcawrulsvn{>qapDIH(_cFCHs8t9 za7&jr%Oas&LB|0JLSQ};D`>S6cR-$Qt#oS7mHa}c%dCDg5sddUC#?Jqa4NHUI7<|n z>Y0EwyLMH7vW+UUSIi}VN~@}1LyG!a9c`!y_reeJM(xY`g$I~KG}?RTRsdr0_oP+`DFS<94)g-XXAL>7j8pb zmVaWpSCp`8)qn8QjuYpoB@3zSbjRN`8usVe0AdmKBb2cpsvKuR|Dm=$TM0;2DqL-f z!Cf1sYY&K}2Tjf0E;F`d3=Y0Tix5Rg+41|ux3ek+#d!q7GR3H)Uq#*-Y!=UUFMj#E zwL=vom3f>YloOKRd*FandkRH=pbUUOdeTXskL7^J6ch-F+s4=*5Vd(o-~~RRh$@b3 zg{aJ{SK0<2^v$wi)YMb?Lf>#Kvs!S5SKWmxS0tYQB>V`bWp)nHx?z4ZG*q!?%33Rx zRKsWB_~m$Lb0-g{ zoX@r%`R{8jI@PdeH~`|0Cb8zC!VF@#p1nd|YH;nK2U0Nv!Eq&CvO77p0@zbMutv;FVsnJIx8+;5A)E+Frcr-< zu6<5u$<++K+fb>i>pEy!o8vQrFpAz;KdNqU!R`=ubxD5a4Jt))2&ot;6%q1f7-wSj zd}4@~>E!u#eG%)t3W%WLFb-=Ez6A1R@-*Mjd)AY?CsA{uE_~Ls`1YtW9dT9yn>d-& za5F&E`*k=In9^p8b#<6Jj{|;II{^5C&1!h-N8IHm;X$)3YY@o{$&b&tlY_Umcf0wuCLAMmu85h#JfbUXd*c-U$Z|OiA8Oe3y=|FFLr_T_&JyFEnBR|0&9O8FztUk4` zmD>tE98RJHxn*oEMWH6lQ|McFkql%QlJV@Z&z;ahKf2XPV)9u{cJzC4g)8AY1%v;T z`&Kb7oxBGTx_?9nP7#ca;gv;YP5rI!IxZcbb0mS&n39ed&b<}4Zcw8sDDJp3X6)KP z+;u!JB8f4u`hgm+(+9F6>CN3WC92oFc7}h9iMqY5YxZvwx&`Ck=ALYlvNf;Go#<&W z7xU&_9Kq)`_|GygRueU^i2)?Y;39;b7v^`l(3dt@g61wP)`hF#R7UG0x}`S-4ym(< zE07iR>|*kid_xwn;EKw(?Lw>|C^khtfp_BbA>|EU20F-+ExZ!WfO+T#WhXYBArk!af?hF zJ{3aiAM;Sm%-EL(yhz*eZJP2j@*01dV%k)GV20CdKbLhzl6whRP*PNHXhCMY4#nLi zpVk*mSL9TfLnJ_uPXEkn*> z6ki^2Ien5@J2lM zmN9!d@@J{g<`sZT0hRGg+<_oMP%eNNR~& z=fR7_t)mX)8`gQ!%gt2xSgpbDWFyj&jmp5eq(;D6erI#V;S^{}tQSzD>|m*NSjDi0 z?^9elR?DqZPXF<&(V(b~jcbLbj{*o6fbwZ5h_7$n;0Q6&Kys}2WExmb1XP-IHaVHc zKNz;x(|)Fw%n+hG2*$S3qRjmc-n&?g{X5&*f4;G43iM$K|D@#?yUh!5qqT?iT49+! z=kG3P2cG(tgsYg&($`JUjPQ1GReHQWSz)IF^0q8~!c3vDB~1k|PieLkYHkUW8w};( zV<^`d>~8-bVN8ZObm{8v5b~4|Rj_U^9Yj+RK%iiV09MTd{3uW5P%p zwi9tvZo2XOx&;Zm4SyPjamDCZAXp^QN#LJP(PY$i79J)E!6oDc`$8hXjBJ#5;) zyFp}+HoZZuTj>N*aVv)n5VxT5J)&&Gjo#~WX$&kmka+v8bLBEE zvy;=h@kn@py^wO7-An=UYt004qSb2Hp>sNMB9r~Xo;bL zeA3M0UGsNP!`AUrs)DYM-HB7tNTA^59N*+Gp~B{358)~PJEu*ZP{wfz95FmN{m znSU93|26)$V8^Rk0H^TxL>!X{LSTm zm4t9sub^PJwmRchK2J6c5^)_0DnoLT7LN}1(}-TkG(};?Nb4gSF;~3Wnjls^Ljinm z0!x&1i%>W=e57_FpH9(duxm|Pp3=#uc4qZXi4P|wdO$hDE^Ht>3oFlyCa z?0Thw1TEiKD|O{Z#nG|qTX4~MZClR*4*7@p<$R6w9?q?9UHQB}vyiJ)=eOBpf*5~v z{3*>_eLHSvlT`?b!&$r08)Gy#+;M)*Er62$dA`-^267(mrjhX^QMOVm>qw-?X$&CZRTJ|NRSQCZ%Q)Eu~XJAx9MQC;vY))!xr$f~A#m^QFiR>rYrvi3NH-5{~!V;IX zx0&F6vt4!-sc;|_;lX3=>9>68XL*1eQiw~F%9K2>0!A`duBJ-t*doITeC&FLH<=}; z4rSb<`9La=I2Vk)o>YUo!s|z>OM)jsQfhbk4uh!^%~Z?|9@+ONXdPfJ)HXdYT`K8m zsc*E~eN>-2z9_IL$n+R6g|2@TMQsp(YF$scBM6sE22w^QH)r$;Nq%x?so1Z`Tp!Kx zlChEQ#}3H*5M=TBiEC%(f$UP-n^G$=2iCX*a+&i4gD8p~jDZ@k;MatlrIqC-^%qDM zD|5E2V8SS*doPtE8x%0$rQD2+TGS;tH9RP-R>d8=GI5(2b9TGS_elwJkiTqR-Xxg< z@W+^VxYXMQQ=NpVofCgdJ&>muOfBQK zw?n23=DT0GI}EUb*PE%x!DrE`S&x&QIFLR~zQec1{8aX}qqX@I2mMk@AiHuZ7^xO^ zbN(^CO5IMdc}x{mz{b>9efw(i0_!|tDz6dlAlY9<*kn+Y}Hi&w=eX~x>TI& z%(o-rom47BN7MZI9Q74+ zsYko*$WM;?ra9o)ClYspf(&NiGc}lW!qOwu7NipbK5!Z>I3AG#=AhaSx+e zXx0SUr_qVjwV0A6+76&+7F)f~UkqhJE&QZLCd@TrMprn2a=q?%KdS%=vLFsxr-g91 z$s><2jC4wXLsioUj>*Q>2%sE5)qRPTal5<~sZMuiS$jSdqkD;_=QB~zHdxxp=t`~G zN)!CV4l2t<%oJPSx7dxpaWkm%+Gi3Dd0dWcN6=;Ogr4{)lgtK}NRU6XZdnxzxx(3{ z!kUZZDfqJM$Oaj+3ZW+bz*1eU`lj3PE|F%^RXJMk@V~MER-ko5w%9WP@~B}PaZ;?> zUeRvdz`6Q`226g-W(PHLsw3Zv7Gp>Q6YGcm)ac)cD3-TE>@ZH*^rwoGeqf&R{pels zT#D9%IsY;ry7`)V*^sx{Hf1{?JxgNyyL&Q<^LD$ zEOdWwZCQ+03G%%E>S%d1k7fIls|*OuWl(&E@A2wyCBDpjuJ!;DqHg%0YmkxSoVbsz z|2?!!HSYIPWo$PcWyRh3zWaa-L}y^0^aCl2zqY2_*BYW7DiKF@O!}uBfm6W#fRUby zm#X(4Jb(Wy5Z8XRkma4PMtfVpyW~bx9_7ars+HGDL%3%n41g2?<}KQ< zAKoJ0ez+;wdTd%>pq+JtQgtnU!4@qOrIY!X2}r~H7$Y@mb1}Kvuw5hw{naF@OF4e0grcxpzteC&bySB9@vS_vm((Nh1v2 z8(B}Ot7IOSY@qa*Zv+Gc{``w^^1MNi?}x&LL#*j19W3!h?7IDa-`ucj!aq8{X9|Dp zpS>L!ooW8n(8m}5MOh}GGrvl1J-y?&c-F4mx{XaC#_|sQhEJx5Tj|5LZ(EuZP8%a# zsv}eip7-Zoyq&J*vBa&Cf3kY!$LHMthvwVHOApNHt!XCVxFJvfB!l16op*5bbFDrK z)Fn%$OqZ13)4sWK@BjN{@#WHP1qC(vZpU+`nY!t^Ait-2ClVa|E`N1LGZeM|Ldfp) z2kao4ON1(740Vua*cwYo@Y=_eOrcY^iXr`@`Y01(*EPZBv?(-^hiTk<+6mseHe&?3 zZOEMZDou97tI5mD(o43&HC`0 zXdKgwpn9r2q9LY5(074D+12YdGa#(<VI?m9%lXCR$1$O~xYx#gaH>aLJC|f2h zN50xwjCLh@QCschM~enpm+L~@|M8J5aVafL*0-u=imw%XU9be-l@Wa|gHycvR0f<9 z(#kr`vZKFO2%mpet+4LWtGhh=-fr;H^|P=!nNESn`p7!TrqxH%G{J_)bds@TKkI%2 z8aIUpV?1Zh4sG`azV5`$^wH{g5dBjGeM?W*es~zTTBwh{EedWWT#0zp+q8JiCg=j^ zd7_%aam{o<<3KoU&(s6INo9U4e0@gqG3R~SCg_<^Qjz**t)t04ZEH|EvudC^imFpM z{(QgorM&rX@{`kUE)|RJuD+(A-Eb3}#?C*l5+fyB-K$)2Ctq>9fqquMX>aSa`>*qD z)|Y)6X$LkRLzdt5A~<3bvtK~CdAiM@bTa%DUk_prpQlI@4m~V-T0p5ZxA&J41*8Kz zVpMZP!c53C2Blu*R3PZjU#%%0Wfr)7CqJU1L~I$x&up;J4VTW03AXg3moJmw``@5g ze7-bUQI?coP$Igt(j(UKB8AStgv9wL0Zh~Z5gQuOpv>>H)sR|jT6>FG{P)MIj$LkC zqIDh>qqbBKot(c1&D5vPZ(yvpFU<+@r}!IO?!K`2d8TT z(72}BWtFhFBn7=f&4@B%R2LIW>DAO&k#39D+qV(+nI-xTUMUp>skNpD+T(4#h`!q- zH-IO*qa3tH*Kt}J&q^0n#aW=~1M${&J^Kx}-kWil-^0S9_wgv()cgaJW_5j+>0|Rc zN#p8<191MYQUVSA?S$8p9IUJ#M_{MnRop}slj%gqr!(!ZPu+4PtEUn%>%;seHFnI> z-uGhaY+Qb2h)_A-bYi`B<)cEfJc?J)Nee+8B#$v$5m4geV^STtkyZpkSeA=YBdvgN(oJ487*_x-s zHyFqyy59YESz^onX16Wx>nvG%x5bX|x(%zn$2t?Mm0t5botA84S1&o8OcGZQSeJt?S9V-GMapCKVO`@r4a z*z!}qSU?7q%C6%{AT{FUoC)n(-um}Xht|a2$qJQTfd+4=&u$|;+GoTIVmEDFATc>2 zpa=&vMEsOood>KBy#*4KW?$rSV;y`QAHA$Y$@ZK*4ZJDODn(&f z_Ox&F891!%$p?!f8Hks{yf5E0BzNbRGf}SMc0Pu-*g`vq;o6A(w5f9kD7wN#3$GnEpN(O;Oka4;xft5qHXS!x(&c>0H1hQ?r?5!2U`G{h(-M@v3bS97 zd{Yax0^us`f4y@5U6J-4d;5Oq53IJ8@__TzYI_0z5agDLyc=k~;qZgA`i)Zfm5B!j zYWXLl2iXk9ieq8##T{KOTE;}%la^*`vARVs2dvn-b2A*j0ULiz8a-M$<5CX53`3t3 z*3U7Y!AI9elnK+U8|+Xp z+9~1rJJ(VRosy+0VbQUmySe;lt4(wg+=ns0YFE@aXSubvyJ{VDbelYs%1!an#w^SV z!9jMzUpTfVQSnB?vHYUmFIS&vthY&e?BN`bHf$CsX>6A~Y{Lg;$#!{tf ztljQ?#*^^lrqAofVeOpFHZ&eIB}Az-WX5A%d5O3^&l9_{hP1TE8p42{RR}TOiH>=? z(1^?6kE!=gIF0OOJ^QS}tAeoz)as?-DaP@WQsE@But8)AH6y^4u2PHjA%0F#t{HtH?nub_x@zBvapP630`%Ruf z5Lh=rWADuHb6Q>u-cyy?NzbTltwavK71nX^&Y;-%CQEu#pVJh@Sl~nB<)OF}V5Qin z2d>6Q3js>-eJ&eI&d6M~YnL6UUa{Q(5TSTa~&x;|z?6{+Ra zaS*pTD ztZ#}hlyIrawV3_vX1oP4wVT0gG4u>vUT*Rue|TUO)D=j%O)s11@;;@)@=AzMt@~6T z-QANLAt|n7(^vKITrE}g#;-g(`Z*e_WIl8B3cZL3j(y#%s}=+CyT*XBP+61y*y4&r zi$~pByv_*9ybDxYKZO=+Ys~Y5<7Xf$e4up1$R%}F*p)|zDkaWWpKM&lp?RZL-+>AL z+H9Sc-InxR5@25leB?vfrK3CyZJ&Sc7i`-seKeIEahrM*ce`bh+?(gGvuUnJa+cn% z8);uO(LKrDts8WHgoiiqy_o0rMQf5$+#h3#Q|OKR?v^A2Tjz!{WNm=W_x}(?|J3bE z$&}^hO}8#T_I_D&_eT?SHCJa;^;I)C&PL^0F~z47XmLkXny_Bm0xJfSdbx92!{#vs zQJFlRF`Ir%fici@_bWD{BJA>>Dl6Jkj{zSw-Kh9s^4O-b9bq09;@caYdsAB6mN+wp z{miHkrCfHBQ&JR^^RPc#hHX-4I%-S>DT6*1&AuI9I$C^19w&#lzn|`8cg5!Z-V{e* z7%ZW(_;uqw@v3RI)nE(d>19q|Ql+lULyo>f5&Y8wraM=!-m_2KHzE@q+oeGZH>Zz| zs_$VEOA@$r0$AtR!ByD{ftENn?W=)i)X#nHZG8A8$0^6!QgqArdq=?XHN+&} zM|B(FWufJ=_0y8UeskGYI539zvRWv)zeax5&Tx7XSY@^ifxbwcASdaelTmFMWuk!m78j zQGC2xy=vWN>chh!ax081D4G3n5hwQv>7p{FM1Bq>q+;4AucUQ3EhQOwWqTU57!y_c5gJ#e4> zEKoz`L0gX!I8{;>xuaycccJ$^bU!jHGIs$9xj(0?+f!ym;*dm*^V5QnDqOcCCP=PY zfw(<$Pf)x0SI##5PC-RuzeVS`Ec^^`~Bx78ejW?k)syH!~1(hWN4wYs1?S#HfPn93J>x)LV=<-`F z5W}{9^HcL-?x4sJVM}SY94n4EX&GSUsaF9V{FF?kHArjOFo$%^$|-v!-GQ6H>rDUQy^Oa|-hvQsyo zi8Cp4H*lEM-WhT2be4B68dhianca!esU=0u1gV#xGU2`!%oxMQAKDkD16N}<_f!49 zBqv?`{tm?HD~~RQ2&apNB2umC4-yw;jdWb78paj_e2V*S&MWYLZ}VIgRZlGq%dAx% z5cpF!e^Z=gT@(z!-0LYBY{Xkgb?KMqhR7_!fqg)=De27hTKur;70+FlEHVGk`%@NwR^AB`RYCGVq}s8v^xLvJ>hsP(F$^22O_K|J zQEn<`thP&pTfvwN^9m<4i5$kV>anf!`}?AMJj@gmrH$PU6(RS0VrN$_PC&d1kU&%%^OI@i^)87hC!|t5w@_aHb*+Yl*;Uc6Z2%@;*f-$*kf@K%oS}wH_?%oH zIT%gA&g-r3IdYzA#=$$~+69Iz<#s2^0jGiD98g}D#Es?c*rueP#2ci;uMWNX%LmOY zlv<2`U%bEKp9kmPDha5^I3LwH;#e$MHin(Y6v)_SxE!_bQJVAMla|SYTX65n-Xg}9 z?s1*m8{9PEoG;$P{29c6I^09YaMi0hmz@QDJ~sBkHw_13DXZ*49*@CaSQeTITd-AS zw`y>k@&Z-v=-I+|Np%TL%Lv%XN7Vm*AopLxx_@dZ1$$lIG4Wc=t zt382NuZQjD-g)`q%^=^@t;ACtB&9kPVC`*J^&}*7M#}pQ+|8J6$wOXs?-};bPR|k= zO^j45vU7nrI}7Un!Pr{|#r3Y+y1yiZ1PKIp2qCz;LvVM80Kwh8u@KxHf=lD>P7~bS z8w>94joq2G&c1clJ+;r>|6tY7)iq}|-#f-L#@i93Pa&@HgV&d5=pWJasXK*j;}EWJ zrq9Wr{762NWx-xc6|jAgM-QRUEoq*mPSFcQC0_1b^L;^qerq)yWdup_VM`$8vK7!K z*oBbz;1Yp}wd>m5PO&d`sHr0@Xojj1&X$|0z?#l$#n~QxR~Idd3KGXBVN> zMbOn$p;SD=_Auw~++LAb9v92@FAbXst`kb!g${B;&FWE@61RKWQX&oq*^wIhrQ@?6 z8yD$NVWY?>XcoG{74+I-|$#NUxI-M$qMjd;+j9KNn z#TM&w`}J??rpSHQa^l7%GlvrP8}!0a%rJ_KQiI1IB*!LyREZ`29Q39EGZ=46``YU? z-?d}=ADic4E;MI0&qanYKY{QSt9Wx}X zxIy>e&1J16@#=M63)aGf>$u~*qqi(WmztOJIC6d&x540b0oSPpH*X70liu+(uLu^3 z;QzSdzZqU{F*z=x5=>OsiO{81GsqK4wpaya?wj;OAYIL9w_iRy@z& z8Zc6v@|_Ykc5z4$dIiFOd6Z{khH^*`O`|`&wXaO=X>8`QKYet7?(rXF?1#9hBLVsw zh72XnMYHk28_shoZJbY;y?$u!cxX-bJ7IULYa!2@`ZzpqB+kx!0>;_8QAnzX-6HYx z&s2}S!S3W4i{32~f>VtH`YaO2`grS<41VcDr9Zd|jSu~_H^ z)?2sl0Agiw_&g{QlKfF&{SWW^2%;s7=|Y=sD;wDQF88KaFcXrrd6dacbV$uwyQfN$ za`soPqm>6?)ODcM-2LXL_)5cAJu>ySXd17V)?(yjnjh9Ytr0i38zcOV2unL8Sdr<{ zO4Ncvp76)svyKl-%yFe7Yzlv7YFzHf!uYR9(D zN?*}Xzev#|ovRurnpo>0Qf1FeNogj9N1(wcO1(10A6Od;*6*;h2a1=ZS{np3DuJGC zx>~&^cl<+6y5FnbjD2Y=C`2ZuOkNDuj34EEd=LVNE%V4iVLkF4MGh^FZKC($Qd`W7exH`0lpe3g>)YUuLq&fwN4Tn*b<8?hc8yQEIf6U^Ab&vG98qyw-kmu zf9e^XP>Bh2bC5n>48skA*Y?!0fz-E#?fur|7-zC>S29CJ6f&OU_uoIHezCaVhT)Wk zNyWn(9nS6fq#q|0%A4)B8*)h~;d~i89$7hV1JCqopOd&~n~nd+p_19ML#a&{`6xo6 z^geW@g)ebT{>7uj)-FM(9V9bTdCRlv(HJCAN~Xu-`#it*bOLv@_JU)(dL_qQ-U>_0 z%y@o-|0h0rceA`vpuZa28l!in0gDQ?sruL1F(T86JTprDA_Z6ir!ypT+^`hZ-&|`G zb~GXzWF?XGr=o#bur53gaQZ7|;M4*Y9vW9Gb|AtZq;t(~gGnSd%k{E0qXm6L-R~Uy z6IP>LaZbsG{(V*~@;UaJS`#D{BXc`36kx8@aHpNj+cv8^N%-U^=!l^0{rUZKC7hYb zi?o0p(Qy>2-6TdDNV~!PU9m9hfZfzWf)VBE{bga5`?+c}!+gFK^>VXQw>(E>p#x5I z?(VqJB`blIE!0f!Rh+S+QxA_vhYyBQog}$xDfIOwWn1a8>#)+O=g}XF-85z00>-*g z1`_)Q8$Lm&;g8NGF*PQKx$?(1drOrSD)--{+O8h1&1Xw1>R!(OWS;Jk!QOrO8pbv# zduuz%x)+h&CYt!j<$cFTGeaA6LQ>Z=FJjvNV?;W7MKXyP{0S{*&S1J#!C~w`RlB}Z zy1*{4-%jFXy66McotMWQ%2zPYSYT8z$mhaJ#f6sYTJEP0(ONI2F>aO!l=o@7JI^CN z%p8^A(@wTnXV|bQ;!ALKVr6BTqj^=;YL%cl4Tfqg1J#TawR7`4t{I3$8cFv z{oP|A$eX-KP|VNAadeec>!ptr-h$E?Avk-R+rZG$(2Z*GY-*7#Q)$oHyUmdP7SM3| zB~~cj>xnjra`VQY@o#g~#(5?;yw-naegKK@cx^X}>Evgyn)-wYza0jvk8(&SXhbPw z35aPfpkY!e!UM~=!`01>p*CnAW8MQBxkbKzH{2RhV}p7te}uR^q!tT>o8#^M%&c}l zHxfM*YpT_Q{`T2d#!ZF53asN>Ai(rYDwisIP-MO<6<_exeCUeHue7J{YMHdR7EaTF zNQGxBZqrOI2dc7J0=ntG!6~d}8xN-){n3KYA&a$UNN>lvfAP98?2M*Sa)^!M1iixk zzTOom{K~CbFCfeL#}q}(PZKdgh~w?0{4Ad(K%W`Tl+N#|Zq4_;|Ne5f zm#c%SZ-V?=v!fVQpMEc}d9rt>EKT^;T@+J|6VC1FT7P#iYG7=JMD93oxZH(80BK5L zP#U~$ryOH+&3;hA`o6^c5F^m!J5@#0OS|iQb$RLZi2gop)ZCm(IbS+(rdTC>m-@q0fgCMI zPJu{Y1YY3!FWG@~Zq^!Ow4v8pwV!nwtby*z!Uf|Po#%_~;o!&nOC*2Pw}ElKq?pvo zaJ^wzB7yMc3Or<`_2LcXY zbwFf*P(+{kR31VqhfSF2Xljnf<&ODe?py5!>rnM_?Hsu@j*IyQ8=X3}uDNT}Pzb zs>i!i$O8lD_9Rlk8SEhNiAu%Fs;?eC;9i57c76#29=>g+-W|>c%gT{&N*!X`PTO1q zbBx0wRQC#ZQu-ig1>(S{&7*Pc%L$03a^vn``zRqH1;$0`)8vQ)HgkPEV^Le@N(=Ya zXUb0!*fR`ZmdJx-JmlwQsJe{<$Y!P>bhMrqkkmwiwe+SK2?dVjzMS25b9V3iBH#A> z-(~6l<3;@TMfV$DP4Vm6b_5%}^f^GE3%lfdQ^)=w6 zXtgRSn%DC)BW7jCi0;3j*HY3+gqGY-?q1$}YHsA|5x*&|M>3ohcN_XUETP!)lBQ|3 zDGRtb#e%<5+>wVwKj}n?g>$wtftO}MUb;zgHqUp3Zh210YX#-Z{=ugncz%p9-{=wU z>5cMe{Y%Hu$e#&N>$f#2Pn6sPj#(DDn9p4|jS`>HqZxAM5 z=*Qj0j~yeWB5Q_-^hqQH^t<~n$0zCFCK>o5N`1C8aGR{-_x1*@K|lUQf#d8tT7nbi z+Cv@O&f^PDDg`2HIXvyl8Jrkxc$_vc4n+{SD{^ta--X&a)M39UWOxn9yGgkYUtR9k zlI2Uubca7j*&ywa;kv_qU8q3P^~3MOWb@@a_tJUX{lo4?s+q#R3c=4qx_OfM=7Gk; z>R<2N&bs~lb#i+>FS~RF!mqqglz2nN6&1a17tWbystj<7t!lj=ESx$i?u{Hw`^RH5 zHUuBa2pDuxx(mTLh#hRyU=xQ~1#~QB;X5}TS8Gn&<)#QgDExD~*5UTZVW$VnCH@dZ zDSv_ik$8Q6P|B~Dhi2Bfp@3&L#|ZT)Kn9vJ9cRiX9JYtJwUSC-jv_RA=hezn zC$G=UBh)J%OO8tb9-8z{@wN4{RmuqX+RUUin@e625+72CZbwcm(>6D4uoZl~&B|lD zeA+cHx4b0IY{__eN@W~z$B8GYbg8YsxrT%zCk{kanJ>DzyLO?;UD1nVWt!*w2eZc^ zWs4U`Bo>}Tx_19->WTjT{X0_wqK|ZE1ZsJ1bwc!xG@4Cmc<8eCyR{KqUZB9 z{QgoTn+(lOfg!RGWR=WoBE)`F{_UKCasuGVF zh;69kShacOUoyGARcpq%1)CuAVZwr!L|P)y$SeP{zwL>)aWHrMW4+sS{j!?B+U=Ag zI{xuEPiSiX;*Rn8qX1~yqfJ1A#@@^qc=;c%h-#hpodI7#=Je}9=wfggtT$tN(&4xq5M1~F6Rf#En9U4nMAWZkXXhCo(g7k64s}(3+ zz5C;zbvD{~Y5*wVwhX!*O=95%?@7)MnRaT)1$y7D3_kGvOZ~pui3d=jxQra{u~`-- z>90;mh_9XzwkKC!u8hBE`-nT{3@49&HjC=&3U*h1hoG&!AJo4qjL)4zTjQ%>bnuU4 z`T`!w!4(9gS8YgkgueZ_VY>y#E2KvW;3R$SY&NmtJ2`b{`nE}P{WiFXMDaDlFDI~#VPf?sNh>(*Sw>KPTBu8$B-!RBkrSh)VO|FaS2 zndm)V6OJFLO-IibJBg$Ok6@&RO~kD*1}DQ}sFCN`4-N%>56sZn4qKry;S{A@X&+>3 zy!w=&2m+P&vX8=@F~}>5l1VI@#QSTvS&V&u?ACtIxR9OA{#k7D-6aLOQUlX8PX8$1 zvBwIceL8B4-Si}`-W_$$n}#W2uEAr2cCn;|Up+ zlqx}eof2;-yqHBu1p=yI$DO0leM@%YYdlUJJ|`ka?2(Aghi>Ea)ecc1CEO{)QYcyo z5&rRp*=$l`$77%#82Uai7DZXeC|+@5fOM~7vJF|>^QuqM}(Pdr{ z45B?+Xco7oi2nVh8ZX~ErKN}rIf9To7gsbQ`1RW%!>LC9fH>Wmoulk*D)0{k^fvc` zIK*yZ1avsAzKd&u$!Dj)|zc|bnyi>P&W^afg}KkyfOylRy?URDg;_?sTj@M4g>MM!H65X##E6$2Ttu)?aoj>(EU-~ zVd!+&sIZZuLnkbl*Dea-|U)aiL@uDtzkoBxMF}eouoA1t9 zQwJ;4;VQ{i2?|n1YL!a&(gNU%$P4QI&6;v_^XLBmIIjHSn=xZ(bU3> z%^E98Qz=5<*ng`LndEAeR$AqQWj)HS%%n&}O2J-F7dEQaiiGhJW8lw*aE=rA!#!Ag z%r#i6#V=A353X0f)bS1c%!n{b;eVghoqqy)Ejdw`GC^p8&iv^R30A3w>9+$O0$|8e zQamhphtOYxnc(SMu~$nemx;TZYke#{IgTQUo6l=y)~2ZCfHqKlGcmZLSgptGT>J=` zF^WdwX_Eg>4dnmx-S1>HE*C075@#5E)`*V=6!({)iCTIrugO*=Zfmw+K{-jNUGR8s zxs{tzsT#Mnj?+J1L<&CA9Vx_k!^h3Xr6>JVXRsze%;$66S_ZMGvjQfF%$*C-oa}&p z{EsTN;Dv$adKR}D1jp^=4|8g|<77Oa8No|H2uxmXvH!5@(d z#JPV~8+CU_oESZHSt?iBw0=*1l~obh5tfa11IDW^ z2IW!gZR0sUvD&cP-#*QSx?26pl@1pBRU6T&<^|~%N(H8*kL`|(pNR$fU}8(LWmX>o zXK-!6E@L6@q6u$jDTkmba}BXrYf>o`qS*1^?-UXafAc8MaoiKFlZ7l}3~Q_a@pDUD z%L*R>-TE{$Oc^+|)s-ys&R{aa<<16b$v8hY`=0}16Tz#RM4qNmIN5K^m_UbbPZ@Lg zvTmS>#|f-2H>_;uITO~$GTrFB%Zcrcs#X7&_kp=;9XAX{jf~4@Y1XH}Ry80Q15#&P zq$(ML9*I>i4>+-Xe*boHzWV=O#7Lef?qc$~>}QhIdUzG&mL7s+R$;E(`;?!-9p?Jv zUot^5W%e!ucNLVFKk?X>yGn0qM<4(I0|W1(O7i=Vw7r+M8^4;gUho@w_LvKur#^A+oa^{71?S@j}} zCtUmJ?#U&;Jkm{Y<+F<+)(MguWOtlt{6Xct)|riG^GFzn7p(RTm~#T+72#P8zF~~m zD5B#~l0lb$w5p?@WU|=V1z^wg0R=J)9;$bPR1fq|dvRatK4L2JMDC z4KuDc7OB?WG$5TT3eyT0CZEO$yg3)$UMY={c{q)G><&-hk}f=I2XkrM9(!}|Q6^OC zU|uh2bme4Fnw%RmW<1tS@Lwbv?6&Ixc-M+s(+$xf0{8C~9aPy{ql5kRrm*@NoErH< zL{08n#x0ukx4ksm7~VUS4xgRQ!|Vvl6@CTyDX}1w-iGR~kQ~s})_-42fq$ucLSJIH z*Vq++-)d&((cMw>x{=X`gQtw+3vfqxw{d zLRI{JIdgSuXIx#3T`S^}<$q!kqDmi$f5U!hHQY zpppgc?_AWDc}h%6B7(=dBMP8I)h#w~!Ko!SO{<6HJ9 zb>LyU1d+ZAXo=$8kjU}6htC#Jeh2XQo4W(!jFt**bBroqzb2frb=)DGovnK#6F~{r zH!Mru*i8D6-8%=KG%?gEb1FjhO=81GIT7IFO;$BP|55pw^ERR@aS91s?yq zRz`TYb32Xxy3)3gsw=jaxeJ5~-(93f9Xtu3ZnqCuw6}Ffk>!esO`rNRiGHm&=z8+n zZocB_?MiDT%eF&8*5kz_XUs-$k#;?{W~*!F8DmqDZFdAJv{=OB9R_NP({2!*%2Txa z_*DKHpx61}eqKd`e!cYnv`#iYKCW;#=Y`1oI40j(e?3u8tlwx!7HL*{TdkL3dWy*3 z(uO8+*I==Ns@oFr8=2YnZoQw1NJnAb+kKweiyYEEXgZpB$ysGne(pJgQKxylp3QSS z@ZpR8rH}{wq@9_!zJl#n59(k0aueRXYiD8U66I;~9@nq;-{;Au$wHZ?;s@7SpMEPw z|Ca3dEl)yIXRX_g3UH^1KK5=;9-89QEhAR#heo46%cX0$cyCD7q+o`&`ljyzmI9QH zveD`f-w_7!hV)(SFP&{`cvo95BKHfhMq~Ujeye_JO*0lHxLhE&2Iq}I$loB-=KBcX z4HV059(VwD5iTBkLu9f`Fm=$bTrYiz>th2}D{1-kQf=zw24i6IlxXHjCPS~YDdeKH z20(uk0Q*;Ny;Q4m4`$fzHWbvFb0@6t%&@7Y?Y>rDsyo%$?qu6!cD>8_uNXkYUBeW%K388f3CVH5%k5akYX7|c zZTI8bHTOt5kWX;O8lsVa&dQ!ZDp==lTAk^%WOC?1(AB;!7BHN8vzUfn4S z{+hS|Y_Pl7=ue%Pf6Fix zk0CC~m%YXO6D``2vcT285uZe~iSd#O5z)RO{n(w9*_CR;F zqHi@Pr7!7g?WEgTyz_0;y?!5fYE{~ZUs#g?1t{MOJB}i>c)gZO1Vf4Scf3VO-f9Ca z1TBm$p)MKJDnT27vz}|~ekZv9@q^86{?(H`?2LQl*|9m;YKC!joKc`=d-MkYtq#Mn zrzUn*LO5H@u1qa_-@M(X8h@F5rG7)cu&7f~ zu7FMRtabi@JcBn1aIV5PJ-h!3B5s&wntckJ$vGB{sekd1Rja2!10J`Ps@gs?4vv{| zfyumMT5z?HMLBHT+%A&U%17NrGg7d|PE4ruot%UAlhG8?yZ|F`C(dR%lnkr*t=7-# z(MNLjK;YUx>Wdz%P0EZq{9m=={}*omXazUmKG7VX%EZMh)EvrjEK6?z5&9f=z zD=1@l(8u3s_LW#GLRz1^7=^O>*cvmX{=|w5NG5t@*_Ae1#8w{qggi7) z9R}^P_^>VZlM&8{~*L=nzak zy%3I6Qaf6#MQe7%={~GP?Hgn4Y)+^?vJ9=NC+wlW&n;^G9afe)lVmN6WGwt4V z2xj4blgUpok@NIDPcBW2&+66Qf&mji@ZyCh%f?%TVV6hT9K$1kKax%r^~93#ih6vQ zXwzbBF7`(!;yO!agDEx2znj4c>({8vNDk}cZ}A1DW<)ZZmNNGnHuV0e<0Nm}LOo^K z6R67J}-rceyt}3^)d)l(QFab1jZ*R^! zflX1QPblFl!RE`eCwCZDWmptZu%rlqR_#`N+T!3@cl$%5!@-OXAy3_Cl|0K=kvleX zt8|}F|J4OBAw{F`?k(b~{cRANurT66abQk5VlJcQjCmlCbNt>N^wyC~xl?$%TF?4O z&;|B`4IQwb6jafIT%K1i{sz&)SaLIutE#%qS0Cwf23EAL{1zq{IpzW~xapWWg1W?L zaxD{0skHN0=E^dVau*4J4)RrHtp~CkrdFFJ8avf}6_*Lm=spy@MDT~Y*x1;vyCIBw z&&RuJrXQE@(a_K~xIL&i5(GXzIqKtTH3zr4oer&K@VW&UWG&^Q+J(v$a=wjj@&k6i zhL0-G_cS%r_-a&qLkqi4cG#aHH^ANa%GtAE~Sq)i#1|=tiJyLf)6Dus8P4` zNfJf2m74$heu5=w=Gi2ZBF<>uqO_B;f|l>+76f~rNFjE|eR>o$yX>ZvdU6FBLd}%ojv|ExNf?Gs{g?q$n^5QZ9 z6E|EgUFatcoODa5kL5d?vmBCo1-z`G1=YSUkrFU8`G8~=6a)#AM>NQlN*`e)Cv4JP zr7wl0FM$mBntC%bN;+#w3D0+Ceuzu8?=w+i77It>c}@hHNjjBL;E+lm;;fkSM0DQ= z{&%93{5Wi`A+9EmifJ=OA(@<(ocz84ulS?clHTKh^b*fSe@*_%-A&DOfm!rpF;jJA z!oK3^JU@4ZR9bo|btt`1Z-&DXU`akR<3o435REoYSHWDy7_j$3!|U^ebAm5=`l2 z26|tUp@dgYzy=>$U%-gPAix4{K9a7tkvuSX<-~TIB^JD<`YVZBKGDpfCJlgm#>t|DmT66Cx&oZ#5Ks_v*=< zkjBf;o%qQ-!ts9yi~R3G$s zrR!AU(QFR#s;L)#pen%D^E0t1H?ouJ#kdp@6lcDQJ6&!I?s!?SD!M%c=th7;6^5WM z=0^#=&2jTK^yTu&Xj4uq`Ikr(&uUSA;xfmFmpvDOUiaS2*W;-)DR|=q0 zqNHD|&;I{Jx6YU z089-(kdUIZk+1V9t#CH|NM)@abZg)(B??z+8 zX+^Ue<#mC%&k}41aIGi=ghM|-Q!{8o#67fl;t zY+Nb%sxv}R8DCqcY^|ckE6Bq8fYaciNOrVqW3egf^5@z#PoisN_z~m3#U+jEu=|M| zeX?_gS1hIqwARnY@Z4xEKKIxwQA#_Rqp*hJ5o>~!#lX)H{9jyXJXdxA_7Mpk%Av zga0hE;0yd6$f{v~@wKVy-O>js5%j-~w=gz&L=1?!>5zby!Mdx2^smM=|1XWndky&E z@Xb`N z0#uRS>IXOuG97SQmwEk--MffsPxo8+w2STfH=E*o=y&WGQLU}-U*Og7li@~#FR;d= zRDuIOY))(BqrR?nc~i@sy7-G6c2HOG1DoFxfdsBA(;@etqculD_OxWNOX7Ny^p3OP zD(_<XyKRo=Wxdb(6czd%&M@>J??!r@w!*wKr72HY&k5KIb2SNl zg+CsNl6mb$>y}R7sz25Njz~>Hr{jmqsl`KKiCk_PcDkqp3*oafy?_|EbP>;L6s>kG zi-0ip@k2vh_SiGL%>zh#Z9k*oZjeY^bRmX-Y)J4#>OP5}UEfcO()=tO-WJ?)(A=bV zu+>_1X3QJHj}WJb8>1b@Sh7B!>4op@Cf5RaqY3DFmC7+j!Dz;`u_s4f=+y@Fxe$5;DoWm4nZ2@nf^+y}5oh z`l~iv+IK81yJIv>bev>gA$m#l4=95o%0_3|7F|2Ouh!q}e6(F_KG{iK)<{nj{9IzO z)F2q};c>>jeN%B=XWj2iL-94RxTmXXoj%YvOs8vHj0p%uylS%k2rp*`8MENK{_!~f_bEFdsSWaM(GF<{b*;k#S+my1nRF5J@7_Kkj18oV6 zCgz~^TEoh!-K;l6JjiISFxC(r$O1mRgW1Z45u>aZ{TY4Pr=!~ z!^d65bhc~Y{8KO>h#vW7NTtdC?K(+r1mPQfpIHr{^L1rX9gIN_Jf~GDF4$yfCiXck z6+uuzt7Z#mvA*smXGWp^bserJNN{gXqghqf-$y$sWwck>kwhwSBV43j9(d&<1}PQ5 zTM@hCX(sm$YKK{(-j~6J>~2rw&;!C1H=wG@xPOBXQh2$}U_KYMd721ZC0`Cd&5tlhpQ(<{F~mDf?rF-y-`DDa_0uOb zj^}1Y$nYNVD3;?kP1vbv1m<&9CQn?v9UU#P+rtezCK}|`;QY6it3}09Q-br=_Glnh z>2l=6wCS(z!e+hjRxS-f?TuU@lcshSYrl?k{L^22JK*spALIEg4rA1XhUEE-{E$wi zoX{tB;vjymH~HQgr27v(q%D#6_>sl|TW{)esv`#6^mMTPo#Pc7(G_yqeM>&fZmr3ThBIW8 zvw?COPqa0IpWnEU#x0hv;K6O=ilPj%{)B$lt7$~4^;4-TZZQ5xcigNZ#m7&L#L@x* zD6+anYVYj`5p1Ex!Ind7QMR8EsHXT!`#3Vim1u!4<+-20`eaRzUH z>$Pg_HnOZmaU15tAa1z==MAmZauj< z*7{z(LJ0ISU>c~jm%LDIa^(JY=OJsh=z3A>b$5oMlJa9p{dm$^z~q`pt_GR6CK5=6 zYBhA0ys(%Ine0_+Efq9D3hs5@towUhQ6hbz_J+-&L983y6X{YLD}ltH7cb0UF9uK9 z)Me|;mDCgTM~x?frZ!b&X}eHZn{@lf7fZ{n2EG$a1vAM!l$S-uTnsFNb1yPLwYdX?6^c-nm8u^(w&)stTg<#dwXOdQ~#d zA^F~{q9}RUqe!YVegFN15A8|*!u8^uNTW0Cb}^AVmXAfv9De%VxWW3~XoR{#zr*~n zz1`zdd73+L)r*DYBGhX>mM_!&)IESNUHnpz=&_UZ_-m?|QU)NQ5M9U({v3(ZYvVUrdSTU@Y_iR#WwiE294QP0%N;A&|eaIk(xPkuo zqgAfoVhQdE9ZzzBWmi zHZz=q=jBNp`wOX5)~R^1O~1@68Livs7}M@PzvX@S zSa-mQ?ReG+#+yq}l+ zd_&bi?bTyE5-YwSC_~}wWtXkgPs4m=s*muHurNwn_mIQIr-yB_&9+| z#@fz~cZ&+7||#POe2v}$A^s8kLPz60B@!SV<*gaSLLT?!<@9a zjKCnxTPlRPIKd_I}2^tJe=bGgD zQfRxCV0LDOQDq>Nuu&A`9IXdK5P8)d?8}(IPJrnDmZ-{MQ#g9AkRd%&h$TWe?KVM7 z`q~@cF7LOPw5D;><{-v=W_3?!d>900eBq5}P{^`cS=GTpDrzRkDbV^7Dq@Z;I;Whzk1QMV`dRIy||^_zvH%$jc(4PkB|6ejM5SK97=v zw(ehKEsRoE`#ig4tD9nhkP8rSPG8REI@pxgY<6^|linUk~ z{eIoN>&1c`SguebnbxAtgKshZiWp2Xx}M;4twd1Su0B<=IlDXL&GYw@IPie0itCN5 zp}D@|%Khb(>?_pkMwl69WdxFoHhI*6+F1Qch%!{_ zwwCBl%ag!@z-f~KwaTX>k9L&v;Qnv!m;X-4{zLnIqQzaqU?PI>BO}a~9)i!ObFkQl z1uQ@Z%c97<38>v=l`!I&P^zL)0mnGwK3sn^0tC8)mpF)jtX@s*Y9-K?)%F?2XOe2% z!qaJLLUUZ_=`5kMA{C9dax!7TNxOE!Z)vwFKN}#_7WKEaE~x$m5vb;CNXwZ1zu)OE z7I0ze1L5O7`{9Slwg#fRb`D;?n(2Rp9B+Y1|Ig4pf#ZvkbqG`3HI!b3-l(2zx4@CI z97OU)CyKSsV58(n!v;rGu0x4{pLD!I+y4{(AouIVne1mLa?MFOlNRmh%7GdJ*P_oE zL#JyXLXjnJYNF=WpIE!+#IJ#M$9=mUH}O`YWUXG|D`_a6m5yq1kRFmyI(Ge<8V%9? z@;kCc$_tr~`cOe>pxF`1seIF^>;uj&5XtC^5R9vh1CpwrFV0n#TQR105|mO7E{@X) z&NF~nrwTU3=EdraVyd7SwADrWfx9l(yAIT;1}XH3wissbl1O7dJDgKpY>0I`6`_18tyx-`f6&t(v(iX6| zf5Z}p=<*Y?>$;91P+l~H;Wj!?GEYw3vdhWX9Z5gb$C@ax%#iNc_&)+|O(81yM zL@v3c&@8o&`hF<)>vi0C?SSO%U5`^JmA|a06#zv{)>$Yd(5NBNKHt4!HS^iR@S*@# zo$t*$Ap=zq!D8Wsf0COw|F-M-C-um&UD|nPIf#38Y20z%$B?c0Sn^Be9-nXGTsj?x zuxvO;^9*GHEq_2vNj}t(u>3ANZlVN*JY$mCpzA9j`Oe&z-(}FUrJTEfFCtd^5zB$M z4vUQq%{F&6=OZS#w}=V7Ky)!IYd3J-jzv0*2{k;g2Qwv!AOCdndw4xRrYy}Bh6K|b0$V^LjMY?cS6Ulmcr}zrZ&v~t zA?^g1y`Ex3eD_BLg9x+NOWe0#3P9Hck*Mu;4tNqxY*tXDjNZ0C6FD|_SJRwc!aC}^S-q*KT0SM~!zuS- z8{q!38p(=Y%0W%O9g~)H+#|74um^=dhjZwraFf^^n^m0Zz?w3a4SjGU-gsUKmRA!S z&*R;`1%ZylYnyH>5&fu}gA?ttyU$?fce zi--7b9wX1;slpkM4RtQz8nJTh5hp4&+#1otU2;pRi#Ha{YTYQGyIbbxSf2D%_gYKg zNhk6}JQ0WW4|!its%03v;GOV{>vADcl>3l8Jo5xSkM<*`8I50sJzry?mD;7qFmnG7 z^I$)8&_0>bXN~QDfF9kPr>Rr}I%{Lniyb4K!ld=DTA)JF`;hnXVl>Rx)9Jq72+qRK-U(VBNZ#~Me;&h9~Ga- z-oTsAJ1eA#6BGi6DK;pdbNSt+Kgd$_>95wrz?Y5(YfjelmX#vAw1<@1vXmi!vmaIGMO_4 zBCaCuDli|^GM)+SJ;Xtz8)Rniex3qJV#?CQvb(z{3Yj^V_Ece_7OPUBJby~AW33Ve z@oNQ?|8t()pLX6=R|J%}fsl`}O_Yjx?-hvnF;Vl%t{R_VmGjOI<3}dXU>aUP$${=% zcjtb+MG#y-j0UPKqENC^PPbN|g~=nHFP#qTIa7Va|CSW~{dWGvNMCXkKEvS(WCDAI zbOd!#BwdY_Kh0Dt?tXxrMXQ_<*iZKqkgGj9+d^LGQhhJ?aJ!&@37p{#Gm!Sf!W(e4 zJccO)xn0vbPy!_1BA-t8mSh(H87A>vSm+6P4>ORgz!2fKqsD?i&)<$;C=*Dw z-BPr^mJu!WntEGzt-HDz;NWx9L!Bn#^e7sR#GC#v8BhR76uxkrruW3sKFf6KUL1p) zLNvlK2xy$Shmsrx5mdG2l8E^rhrN=?3#4_Ef(MC)@7y!jmM+0?YCpd-e;SMZ>IfSc z%Z>TeWdr%87|r(EaA5zXZyg5E9T)1oZeWb^c<8hW@`f6$XF?`&CcMOAS*E(~RP}|t zZV;YE^W?7Biu~0nA3YUH3PoOt8;gl~5U~DN#jihP``)gm(cyB&DZ|DGfB>Q@wc$Gw_ z>==G)gKS`%f;^fb95x-fx@uZrP@0?OE#0)1i<+XPl-l?lojC83sP!;6Z=-F|&Hm%P zeHoovp5EC)rAlYnQ?rd<1}6cd=KZT_Y+rd$mCan^c&|sT&GQP=U6+2{&d#W|NqtVM zNg-09dZ`iK8gxtO2hiBd4G&>?R5U|Qcspr-pS%PH9krn)uWZSXy&ID)W%07RN^KLq zt?d+JEj?h6@O&K!^{$YY%S&@#QIv(+(op?O$GC+=NbCpM9-msm=cox1OJ14tx+3oB z0A>xPHJ}>$obqh5-t<6rOg^Vcyi&<}#bxvR`Qdy^FrbLBc@AKe=nIZEh&O+4H13w( zS={wC9ZEt4OeWpplrrbskGo80ts|T)fzFL29p5$rTo%rg*o95d>(W5qH>H8^SR$vzi+U~@5LtNX%Gb3Qi5V0ON9&) z(^1l4Bo#tcjD>tqKMmfj0=s%UCYV;6c( z?XpDA`hmnM5Bt*yzYPPK^CRxDyc@AEWKF9YB?gD8WSw~~y^G~qM!-;?lMBm>OO$e) zjqQQvG0<{B=WvBbZhh!w*v16EZ-wo!ADR{C@=)DGxt~GiH^z_u+eG?*Em0G~=_4qS z@`csXAZGS{OCW4A^2a-hqBx;aB14%`9E~2sMtVoYM0J0^F4gu+OC&<<>OT25&~{6& zpN(aX8aVgFX0pHaI?8bp!6&hANE|HGAxi`giG4*uXI~p!)^5unTkf*#b=Xp(6iXct z{7DgBYl~>KKP~#Z9OS!L?>JY;!N(57=KHe05_vurg68=S zxpQl9E#jq*TMg#sUHts~VhmiH?-mP~%`J^zZ?q;sM!^!$?9=?NCj=6(+Nhb4`vAN^ z4|sip8z2)*ZD(^`2)(&1iaL^rl~<+u5pKC9dmZO2Uo0-gbG#GlFHj=)s6#a2JeC;X|QAGxNG`e9T0dPm?V z5lZ~-^*TSXfui;|WHryy!wLAH$E9p!NOkVP7D-Be*&n@2+<0LQb8hV^ed;Ka) zXHUIraeG7L*N*NtS5A0Ek( zVbD@JX>T3)uBIfIX?`N07OX1KW7^(oqnU@;9xLyo0!ods=^%UZ5QSVM$%lkl_Vl>^9VtG}OVNY!yH=<1Sb<8RExUNLcDSkEj+DW;N3n3|$g zRbQ{SJ?`uBIc?g8M*!QsqNAdYu2QtQigtA3o}6?V_JHo8f;;>B9f(aCy^jy&S+%v3 zp9Wc;QS(EKa9D zFzQE-8z|q&G|~Ol0&8Y%^PCWQ5b~7xCN07B$I>?5*ehjU;-h7jo81{Oov<>Lpia!o z9a6bx4}vOkYqmf#M%TtR9m?(PG za&4I=SVzIkTyt`c3fR5~va(c9*26?I+zgzt*|}ZORb#X^;w*jo9i7;uGM`D!xWmcA^Dg_xDqe)IeBX<0K4TNk?`h2_uCBS# zP^P?+I6XXgTJiQ3Q8f4ETfC!ek%;PQL6Mu)(VN}TM+`;9DQTU+U%&kB9~+KWhwJ=g z-1cDDqK{*`pX|zhMUufne4&PLhP?5evv;v-j?S*<9WgYTYEtYe)_R&E3c1bF&qn%C zaPaU#5RX7Fu9vQ#UtGDZD}x@jnqiM%*^xm$GubGzg?HAKf|bVIJVKANTBq~HW_+ME ztmTDU8B)Pk+|JI#@bHu2Fq80y>T=M-%*iGCTYKeTr_$0(-tuoDU2KrXtZ5=KU zEY%I8wxa3-JR+U99S^KDcL~w9sQW@wm9+dbh6?Eeq9edzdW$t-jE@x|I|~!qRoF`^|d@G4*yJ_Ik8OssS$heVIQ?35+myNKGl<|Z_PBd25-vz#Sc;(G zcZ!aq{-&g9%LgLx%-dT==;7k}bcYIt*i8dDfx;d^^-0byW%g9J$N~IRMz*#R9ai98 z2yEM1?tLO};1N|f0T4+35#EzR+imNXf`Fkd4<<^yde?fqWq$RK_L0RDc`$DQN3`5A zW%pvoJYyHenOVM9O^jM)i>of3E~Bm+yTSXg>Gi#!{S51wxf%2s;h6}|bdNjBOVB=VYGS ze5IuSw#fhQC;M06y2YueuItV=oDWs@dobYRTUbkn34i1DYm*80C-m5ao$gi7-pw-5 zEZjv!J&->0&CB-~7ptNEl!46Gz_(haT+$s20`Y!+?Q{AV1{nT9AQE(qgpcaR8K-hr z|JVCtueRX2i`HoF#-E^Hb&NnT*QQnu#9jM47-M+1Wnv^l55a;btX7ykZGLOlvvnIe z>@T$jYQ+$4U={#UaI`zHYKsm=UyrOc9JjG}=@5K_i7%QD>&u^h1$iO7(@}W}l+E}1 znBSeVOeyVbIj+B7jh$qpAf2o9FdaQ^3UF!GtYM0JJZmx#2&z=s;9~kzPvDHZN3t0r zlQAb}z3;9HJa{vP&A~H%btGYCU7zf%Xd3=`Yy7={Lka#Z+36g2SCcbGZ$a0u3~qLt zW^X$_qM>7q^2k@q)14)lU(4Em$lOX*J(;r?_Qy|EtAGtp+$^~p>flL$d6^3&|Nciw zZ~^rfNJ2Na5%uRG+}c%}Zlpd?w9?x&@vC1x;gQq)thB}-V*f@XuExl}ErhWy&lsA|YxK~P{He^gR~Iy^ywdfsb4>IzPV1NP{_fgQ zU_>f;XV4`kC9^GAN~*QP`X-dmcTZw-lf3h!;((%VHnDSv@#vT$sO_PnZEZvlEUu=; zodJ481RAYr07y*n9A>Wba&yCwmDdl$XFTrM(^&X*EQT?sA?UNoOe%CD(Ac=3fP=9R zw$Ka=c1#ovxwyD2C}ZjR6)5O%G22v7(8t*?@GkSKKNgz^JP%K;c8b!*S9Hve4~>Yw z+M-B3Nt#4_;2@(E9Ifyq^w^^$phG&a_}#q6f!`M2nh1oR7O26mV2ajnS8fvv z`6Psd0nj5TeC^omSaaMl8d+KBmWhLdr(={?QaCs^-)${| ztnICt#;?z9R8A6=$6<{jvxni# z`#H3)X5;RgoZtrxj)dia^%&=ye&yD0C78ht!8 zH0-AR02PrqM_hS0G9e^A;CyXdr-|oWwon>fnKrq+3}@x%cfL(G$yZZSK}lAc{(&zo*u12L($OGBI~!FWK%o?~+8%?HXsvXPg( zn)5;Mq@0fkZmoC@yIADB8Ll%_t>qJGgm!?R%iOKWu=?Uhhx}5{NYv1^w0iiYZ-sh# zPq0qj=*n?*J{ezm0}=JXHh4U``NcWQ|PNk%HBIJ$ZADQ`oJ^*mC;vkY* z=)9%(dnF4Tott5od>i!^4)omNvPfZfUj$CZ!h2CE6urhI4b2HnpLonK)Senado}?d zCUSXsX!?nP3=&09sOVyWNd%*PMnLVeolId&W&6Vgwtj z?_*zLW#4s@iaPfW#_~sa*0y`j*tu`iQSbjrgV?c*axoVz%nWCCgLh#(aU<_ZA3U7# zWkd~25AJUFf!{=K49)!VwOD@DXIJHXc;~Xdvz?hcfjI#aPWM6IGNT9YZs&sCT5sf9 z#aGP{e)9PH`sUXl26gbS6qfDhudT#(&#WuC`4*itFd(j&l%0+52`t>JzYX7snl`8` zKmN(1EUE`B)wcj+9@e?(pIZ=%EVxv^=~Xw=EfIK=bSCr9GyPw4kakj>irU)OChNtg zU0O%t#+rC6@#}Az=SOm@2dl3Rqk`fus|H}%~wecl-SpP=FfOUt8kvR zB%bgPVfzA1WNdDpQ-=fj<)6IpPZV4wKt5Sq%nMG~C@i;?+1u0BJ7KnTg*F+-^F~69qSXgY-!{)g+eZ^0Z2sDkLKI_QzK7TigNIjd)s=O5#ta#8 z1~k01>#?&ttX;#5KGhxJvBleTvWyyRHav@C@K<5>zpPZ=+xEF(Y-Qg|a-pj&TO*>O z^ihfqlF>sc*LNFSs;MBn=sGT##SrY74e6QV9R*UzRc|X9-Dy5W8}qsRHf$$12>ASj z$Z$uXk_PX>dBl##!@89qHE(Cf%@$`qML%7&#OSz5kI;`t=k41Dq8pyE3gy%yaOB#R z-1z&)!(DP`o-H@Ch>*(bnpnQpefXZ99>sE1Rb$EuF$4}?>b2HUyLJEriv`K&JPDwd zZCk+8OGr#=@I$rF_DlOBZpCDck++Os$!yH$Va)ROJ7~h23dDD1HULL=JgPWd=t_q2 zzI8H%FDuK?Zt)V-ENw&_2$^b@X+N9)~GtL}OjPkCp%3o-)27b@#Hf+^ljw~K-J zK|WtEUJUZZ09?8i-Z{Uu0p>!FyQV0k-Fc6ciN5Z^wmkceBT_R~<3=0mlZi=om_fo<7Jr%<-%Op<^@rJ3#}D%YOoo1R znq~EobW9x;+SODhXn+@{?P`61CW<=oolSV$Fz;%vUH=`?s z`}$W;55e3V^v9ir#Z`f)AC(Ui1!D~R|U!I%7 zu0PDS3Xcdk@%ZF8A2`=nNs@||Id}v3NO7rULCDA`vgg0!3m*5_|KU1-?XA#7AdDJJhwX=`fg2@HpOZ_p1oKf zB+P&U4d1+#WzVB+58XVvo%9mA_&SV)blwx44ms&iUXeN~952KrUYqLcGxfRRTu~v} zAtq)x=}B$tK3W1{cmE}QQ^J%h`!UneWAzs+!!Pe;tlJ)vwr=Zk7|O$gaKdM?y*K}L zZbR&F%d`3X1QlE^WnU{n)qIUJH7<7_@7nTX%l$|t+R&Fqf45vrIHlbR%=&M~Git@9 z9_TfVJi4qa@GiTY0UJ1h%QeeVyT{t>=)t$^jJGIoYE=EP;W z>6QYKqOndx?vK31y~AZB3@hp%i_ZSPAj*gq!FZx0UJsHURUQ-=OQ!Tarn046nGosd zn2am-gB&*y=x~g_zPBtksl1JjpFP`=tM_bJom|#yK5s*m6}e*~s%5h?>vxuyZ~|nf z|6RdU_J=f5K*!T(?`{~Fbese+T4E!fl*rwOTS5|jABmq~%Cd4sAqYY~dX=ZYw(9qB zt>ZJ38_&#}&+`MVSelx$M{%OHP17GFnomzw?0#J-mj}E13y!>R>O0){_+fNspS(hr zR@IX72euKF2GKsQBi$v1$I@ue2r=TyNKfkMVfQUCB>+jcxcKIe({z?;pB{MuD3oO6 zxeW#Nxodr*`jOWLeBlrFX`jREAd%IZrlbfZrKJ@<&Y>w<^&0_9XjkZKOQIBA)@=(B z33nJ9^f__jPnm#G0K%*Tf8FRJPqm8Ou^6U0{`AI0tI!9ML5Y!5oIV3AR3G-70Rnk{ zbdUVfkWLh10r75x(xsu$qMN? zKY#^F;)Sz6{)@WHf|B18UsZMb6$^{RZVn5RK;St9^R=KiYiMYd<877M4!?u@bx+FF zweeJu_xI!mWFS=1zu^ydhG49Aba&Fz^L>?1l$0KChB4;2i5rkN{K+=QubW zaCDIf;oxd1VgRA|8e~V+?^E8M`}nc>GWg*s*Z4hWC33|-*DB|8&rzb|%$mST*N`)d zhK6xPNe3yg%64*&%FKG5c<~{E!+)BfIv#7|2^#|j-}=PnSba4QOviV#;+h(wQbOWnO@{uyDtF3D&S(U6ZiS3Ytf77S_{StUQgBsdSt$ zkyX}Jei$%F6S{?)dhksVU5ILJwR0|QoRmjOLJ0W&ov=i^RWSlKJ~30=aDY1rjAytu zOUs3+IHyDEs;Z=EO9#sgVXrjHnn^@N-U9qqb)Q7;-mTqRlRgeh7i{OipPJ5CVw0-k-`C> zBXl;Txp+N?evUh@&*(orSmcQpU+>d9vlRrlaTjZ zd5h%ZxdDpx`Yps;nL$e^p!Lz`dyDAIx~w~VSn_Cud}yr>$p&w0o{h6k_?*W309r*o zH~a^Z;lm$gsfv7wrYz$`1A(2}46xgR{7jB>UvuIS%kbUb^G;Wn=~u(QF=zag0fysH z)|9#bfe;$oy#}>9{mJp^(R7WsNkpeHIl-jJ=O@R`o!VCUUwst+a>jow=-&tCitY3B zq2Z}{CJV9FahZ}Ng4SuGs*<58BQcd-VFgq)w1C7ZPrG`sT@Y?v{kh0>fpcyB=-Xm! z?kpg@9{3(oH_l7FX{KqTP<8(wZ}bbRefO`w#Qu6G`Bwd3uJ6VxBMbYm2u$;6yFgd% zN}A_X64`urkDjDnbR_xL+gWYyzxhxYa)B5q`HFe~JnflaydlB(y_FWDMgJM!$+jiO zyXw2{jz}xSfoO% z6ZA95fdOq`@Uq1A9fD;37h@MwG=4fcM=!&&`DdCLhSm&I(M~9E*>py>CZ*FlGqLFr zQw!r*SVw`iK`d3Mv4|On^$sP3K%r0C5cACsEH*88xQ`;*jXdN!rq3*H^YCsEJbx56 zqSLuS3R=eI5K-B91kB5(61|4m;dFHcsi~P{yzabm@=7w#nfL@6e`IGPOG(YqGl+zZ zkDt@C4!+f@`}yD;Zdmn{97OpCH(_R(jAN0c27I|OD^ff=Lup?%0$as8okwl}OvS}7 z$VLr)Kex6Stf{G4gl?GeH&o%5FW4J?K0702E55&v4b^paj@bGYO^gbMN@E1j2_Unh zre%?lJG08kDGLDGBYAlXM#nniK}N{hlMjSHeJbGc7SCw4^Ela6G~K_#K#;l3TvgzA zYjYw+Toy1PxRMxtg!|y|e2!L1RgO2ut zuVZ9KtmEcGZ1kEP2*A6ly}N zS?a>V5U0ypFs)}6gBA94=NAOClBR`j7TRr4P?RP}H-49#Cw>9YX)(<|Kc8ZJd^(`l zU1zYa$g?OR;X|5G4XR9Jv*P(fa3R>-ljBYZ)ca6vrlUJaNVV1fuIJTZaYJN z>&@74XfFz-pKc_!1u4vv+%C2?N51sCD?9j_wvpfKlma`;Z|jVqsoT(1zQ=iKIU2)G z5t6KO(**K{FP42F1asjxxSwmv2|Hn8F>JLN>Q1N{<_t)RWAi!NU(iUMQJo18y=zqki|N09PJRAX!8I|UOXbT)kpX^ueH~WI}sJDnK zBH7^|YPdtQTBSUg2te{+G3AnljJE@zL=z$+Tw*FSCtxqZ?B^w&Iqz98tM$4#tjbCj z%{IuQjGUgM3HNfk7GJ5xXbeuqEO-;ZCcxfB>dLZJa)oSjX@ zr*J$sk`59hfAizJ#Gg9U5F%U#=r^f-$?p+vLs117Z|?+V)11A8=YD?jJJJV^AuiTP zQN!M;Vy!9dT=hy82qqvmUSk^stc{!n&U?9&qcUjnBq04fZ5#;j#-Gxn$4{`Z4?&8@{-FB|v z51;Y|V;(MKf3<#8=;TjNkUprVFfbSDg#obzL zn^FG~X#WR6?8hys>Ojdx z27eFw-Yi5sD0@0HAUM(2E{jKmLDt*Q`IYbfNJsT1E@EUlW7m}C{}xHL5#U*ll%Dc` z8?R6NReiDnKqBp=oUq;%{L;Z3BofN1{)VVuiaupg6={eF4yd4-mW1_&mRf2%U#otR zgl4uBlJqW%MgiV~^@B|DF;{krpTl%i)+8TL7t_Lrqe{Bwy*XBoHa@4sXOEd!=8hchdq*f>|}KxG#5L?AMaW526W~LgfS- z8;R&NiEO~j?E?Jcr*Hto8^30gE`^@Ke%M#g-8CUj!B&$WJgqQYY;`7>7o}oQ0-}&A zL`F_d5U6R(#Bdtw>lGv=sg3(_7+qYrvYUlu8U_Y@)HU#b)Rx7~gLY$mCEt$#cUlq# z93!Lkm!K|HXv`M?U?gSo-$1sul&ioSldX7JIh&*?D9YL2^;}(}OZXL^0rXHfCPwp> zu&uDFswNfXM}AV$wBJh;ky%+bK-w>*v->#O4m`h!YVA|Rq z(h}kQYYy!EEaeBzqimXS0kWtDfC>IyT9Q6oanu{)&$_c{UbYNDEH``7cn`q_ zQI}jWOGU5aYD}QrRv+Nu@bkpX-bWKSE664V)yhBUc1b_TxyjPHR7XUFuOS@<`@*`Z z_*z&;O)oVnhi23a7b00*kdk$CQ76~wP`q}KwZxol>i`8M+Tri-Ki_7~4_fNh>@v;W|L$;N>Yxo|U$;`64 zxWTIPTG#8NE1ely%8ORsbsIbk^HaKv894+%^7SV~{CjRskn$HRc}atyKJ%-JXbL(l zU>sBk?|kK1Od2jg&F0Y!fyj*q=CbES;#B+m#5w!*x2WDP7Yf-~$4%<+S}SQ@o>- zD^-YSg`CYXuZ}_ZGLb;L9yWUycW^xoPHV63O`@>1t<{tj=FSSc3yz29r@Fu3d^h=T^|b9M|nh8enagIRY}nGE|zPtFcf?D1|jdA*sxhF_I0lHMkP=d zq-KtyC9 zo(kog+&@siAG?C~c0hr+dgWA%pkJTmE2!XQ^no)g%hHk;rRc`rmQ`2q3$NF40iu-yn_=t9`7$o#PPoqb z8XIq|7)4WS>~lvoKA;%pT{-s8U#*L>z6roGf-j*9huM1yGo(-Fsah(hm<`K~CVU52k&zc*JYnSOG4#dUNRhI7 z>f4z=FW?)_3rdE1cM7&bH?jQc&qU$9kt5V+MP%HvQea$3Y#m46`3m_WW|VA0O|~o z$7Bn0gj7`4NIxb!ky6fm1>{+2eW_}8{F#CQV_Vz6ogFS}RTwR$hagt+lkvzfa) z$-sc~d!1+*-!yo2t(P&3F{gzp!f)S%W7YG+xx3qQyKUamxs9n%L!^9Pk(*#(8jABj zfD?b;R2I;u-iccL{{7zZT!AL&Ej++RC+qY=$7uO%+99l>=G$;8(yHR8kdDmzuV`$>Ic{SA{xn!ZXj~GlVf(6gw?na48IOZg13p3Tu|moBk3k;WAT6#V%u`PaEvtBvMJBOQD-PO^FHA7XW`%s*4hVVziTVqTBa7 zQN45(oRBBs{j}6 zQX!wMSsPr>ghO-@Y4&|B&V_@^3}O_xw=SJF9~+o`4DNmI)%#Rb&R0EGS0#{Z1m^2M z6@p`8wThcIU#4|6R6`w)7U5{(xI|dewvpTV&G!L8F_#((4Cv@OI=b?<7bY=P$Ad#qIt@0xD;F9m!GrNG1a7B(($(o+^f$d=>XnePK3|1Pi_79lc5(bCU z*#8YE4Y;eviC5?omzSe89*rU(hzrOXqV|<@6u?K%ox3L=g#w^5p6n(_3`(5Wc<(`D z^}!5_?}_+^v@ss9tdyWvR&B1nhu$S5J&@S1)~B>hA{ulRyR!ME>fe>?f4g9uG)BipVL!P~O?@bl<=^>nQF7u;*J^&U-T}x6 zjrm5`!0$Ii_!I{eDVA3_hDc0Ea6AY2@puYnzf}fkn4_d!oRI9A9(X1bc%pGA5*k=L zbT}L)rYCD&nZ>03dusGAH%x^Cf_U~rrLjB%hhLwHL7ry2)>|stH0G}AU)_2)PC3{Z zDg`?55r*s6dP*jZ^bpdPNCEe*n0A6lLMw8m4^^rO)pM7 zEv%y)HN@qp5EPRB8nr&Zlb007YA|vgf$F3!k;OmXZ44!d+g8txyR&MRDL&Dox$}OZ zSl^@SLTRLf0N?35H5)cldZSAcON^rHO@fAwmd#X0klVmbKU%C&mi0sF%J9SVK4ne% z7ys;P;loR`w=Qx8PL+ip_dvmrF#va`U>G1=9fJVKIB~HqUH`k!U)$HQj2^xM`RBKA z1x0kS9v zkjIp)9aH2T$UlEBt$6cR1qnIiE7-7L{9J&CNA6IJ$jT~IMMM7^z$~3Sfk2Pr*~|}m zt!D8FuyPa>sCRXnzY-9L&|`T0I>yM_Its8FsHN(cWvJNNhIkp&Tnt$iGE?l3iIUWz-ZC*>BB5AhERm&W;p#8P| z(4(tXT}W?uCYRf0Yt(j!Wn};Gu>4YGb@g+6;8*OXI&)G} zu)^%h+&dT)4{l~kaviJfaM=QJ3Ct^0^(_7sITE+d#}xOmFs%bUx<~2 z{#1)}fadFIevg z)sdC$`wZ9;Pbp-~G~fmXo!=WsNA_&sZ{9(r@@#P8aBT7rJkb3iF`jn(LEG^r#)(hf z$Ek#wzrw;svwoa#ot-NcJd)JuI}MS+VPYCiu{csFUXJb%d3YlhkpR`wqQ|N|u>OAb z)Nl8VahkDT?C#29PF0fdLUiSq!yQyObaxim{SFQeDLde)c)eq=BT3)G&uHvQ8MavW zZlIL1{SLRn&6`$pDLJU3{x38`VvX}NNE9AJi#U^v5D!BY4d)tzBOMY@_$~IOx{o~d z5gHv{;Gg}GmxD~_ZrD|cIa2ICw0MoX45Y@bXPr-V;J+wZeMmt!zeoz0tz%|3X%R@% z4o+_p>((Y#>M^H(y4^fEk0GElmY`s1yO?n<7F`|YUx4yd@i4I;KbkA@7WOiDxxZ)Z zdL(4|?Sx183;F()=^^xxSuq$imHY#SvM4X!7%-;NFlzmo)A*1flsm|mJ2yHV^kP^T|l7jgT|618(C_g~v%VPDx(dKnm42FfXu{V5^eK z9~ATgNMCR~J$s{Lz0rVTMAhlaB*g{Oz^J(GoBrbHlv)Bn2*FkqZ}F)(nV+kMI@}GB zdnqe@=K!DTY_h!j4)6QG=b(6Ho15cers`AJ!n1xaN%G4eqD>$3ktt6@w~Suc(*B+Yts^ z+vTlQE9NiB%z$kh%u|&Zo61JFl5PDa6!Yzj5I{G&<@`q!Cz+SHKOKg_mNzyNme(H* z1!vC2ujv3Nt*@MPta5Uw|4+tzHfQ)+H=cnC%e^A)ifFY2-b)OJ-YG^c6|H537va|L z#b1QaeP<^TI{bvKvz4rtfLABpz8sC_8NHS=`;%>Jy>C^RguqN^XYCiZnRe>d&bd+| zCB!3y5U&A$Hb(RR&=r#C1HRq70toA08T(3<=_r(AenqtC@ul=4h9T>yQv(qG>{m(;_8{?`mbrn1R*2`A%h!QaZId(?=nO` zM^64(+;||De17dr~iA zJI`v1w{k`OD}bvmZngBnu3;*`zE8k{12E*2k&)pCG=pitR^Z^)kWMgzVcaV-ypp?w zTX9QEwgttE628JsPLtE|KN=flA3%n!OdM_$`PQVAC8*r=^e8IPZ@zt#6(_7&TltH&0X49Q4&vNRT?$D8;e0qtx>E!;NyJSM*I0PU~r+H>QY z`N`NKbejXF17Dn0`kLdeqkX5*eV%$Mw@-C zH*-Zu{5q#zs#clASKDk+uB3h|A9!?%zIQZ}vWk{3uJfw}uEI z(x1cioTBC8g(>?(DTD~n&@)@^GdE}R8=Q|)fue2!ypy-~JKG=A7zv4xg7dMl=MKV)KUk&785$_F7;To=joX5L1BeKSnjtV$C-7-hOBwF_bzU(U1XT%AJ01(3(%D` ztg{!V$zdn(N6Y5QT8(#+XI`dn=A;FHCZhx2hn#s--YD+b zx37OUGmHIaF7!VTRuB1$a1yE5 zKk@^HulNcXDJgQ6ZPK?&BPx3J4urnG`aK3@Z@_;>-M>SyHXEGgV3nyVb~NR>4Pd|dTc79J4XlC$k253a4?K8zVDnnQOG7l^&I9~7u^--D4jkS3 zXEbMMg90V|5MUCU+oQ?Yb zYV7;x+ZxRy_yh{Y-&+FKkcu!W$d>5Gg53OULn8h%`d22srhO`$4)b#ip{$C~LRP=s zxmg~PY4gA=?3wTxnP^IAy8}m&tkYR%AQe5$+)WJX6d)RYT|d{@Bg1>X9|k+fLHP5c z{~_+T&mz@(H_%gchYV(w?dzRfq$WX*J{`UFG&uY+ST3c3O(ei*+4Xz1qEbU*z$6Dj z$ae`V8cULeko`^OH``N9Gm<~cRd#yZ4s*4B)7aRN>fwV0 zcv{p2`&+|;V+VdV)JoJucSGpr2R>Kh0}Wwm59okK`On4sTeH@thHo~Ef;RRu8b6h8 z-)(9?9@Z|{O90()a?Y~Lhbc<4p`Qhaowh#EUY>EwsfH(vXt2G_#A_ zReL1~Ge!V``|RJExRL-ipkO|TGRDm z6-A}HRY0nUii$L)cR@j=_ufS5y(N?YZkk&JR0I@A0O>7&bVvZH(rXA(5~+cN5FkK+ z5O|k+&dhse{^uM%@FQO!tgPg|+I>Bx;TCMybe$L1JnU_)teoOUJg_;jlgYt4jdeB8 z4iMe5qhp@7`gzj8-_p)FMVOo4i&{Q+!?ipGZS@mJDz7b1=__nTvIf2y>;pqQEiU7Q zEmy5(-gcLm?oj%grfM9tI?oCHTF1X>yI^;C`(ymJx{G$CpMb=%4<*Q8+2Gr`9h)Uu zm&wwUvmD)q$~P84VEO(Qn|-Jhum^R4>D^;{)#z=yGrfiW{8{$-Cy8?Jl9F<2Yhl(< zKN0lN-kt_91|lI<&W;zo-%a@DTxe(j-)VLL;)8vZUFO&Pa(hBNy}cF|r3;lU$hx`^ zNokXu;wpxOgcN)x?eNeK@Nq&#eb$VUi|CHQ=fP8AP~95 z_Rqw`+aVk!BeT{@TV9eTdNo*)+LF1IARAyLJOe_PP!sAJj)NiS^zr|+*6=>9Aa zrJw&LUEA0gJ3ahh;zMbLU@QEJRBhJ;*7e)Xml_sklgr6X59oo9>fR4}+ss27i4BV3 zPkIxoH~285wmPr=XW@v7(6&1Sftd7&Gt*%l{UVj{s_1u5fgDp2H(A~gQ*7w>>W2We z9w8KeLRmJqKBK7DOPhN?V$PLohy@t-_eV>svsjh&!>Irl7yVuD^dj%^$F$59r*ED* zG;Ytb>AAUV%; z?(6QP*%OB>sxk!fE!^d7l7IITd%2cVA(IXc7u{xmIBEttEM-D_SrmEG#F9$)l5xyH zK7B-0If)mL9X@e$t}eR(A1~F{+aOGUii|owFvwENpu-((0*BiM>XhCY4n|J`>wi*G zT|n^jv7TNW`;#!iTfd0BZ&p{0A8Xtcym8}MV`U{6&^C(x00q?*RVgKr+>f&!D$6e1nY-KCZ&}Wi?k$L2vcl{K4VM3Ri7Q2jHd_x;omjqy_T*aL_ngb9`-> zvQHg_38w1&YPnVpsUj^eM+urab3G@s1JII{{t7vN98|)bmSDQRZRy~YB(7EcuI!WeEO1Q@t z{alrmabO9z{tS`x13GSf{sG+lmWe&B2xcG>u5X6|?*S{b2r3^PcttQ5G* zkj{7c4%^wwX46adR1jNKB$ynrms2?Y?XV?rXb*@)aBcl)!#9u313C$2=yaxn^_%KA z2A_GC4h|N8a=Hc{NpmpQ%WcSTltY-jNTd8odS@hQ`73b=0MNqryciy|= z@)|CtU4-)Y2hjg1Guog1t*xcJW|wyAN@T9vk9lvXEN}in+`Fdq&h?mkPcAco{HZBJxKVlfp=o!~l_wuQ+?5vXir+(weoRVjV%gN_S9|dJE6>G%H}jt?7Gb7p z5z{pYkDv07dpg^`J6tS#cCmA1@Fe?eig4++fo-b#nd}2#C)P+U`|IadmgXEHe=s&y zMOqmfzx_i$>86VGZJUb?zBxd=&cHg1{aj3;fxZtzOpNp65&uzG>a6+yL#d5Qr1i=K!nf1>8OQ^1s#Q!&eUiY*Z3+u(5rzp?}Kg^=9x+RsHEroE`BdrUS&; zpV$;Wz1BIZ=Pw+5tqD8WzTfmOdOMI3=@k)06*^3;Am?;F1b)xE2<&rt5fw~ZDU@*N z|DoOsKngD=44Ug#xcfs3c3T_x^W@YWELEPz=MwzGl%0}wW%z0S>IXV9@5t%*;o%l? zu<*~O?CQbVDfOwkWasqydvA{Zl(|K+fZiXw zo^Vf16JI*FeittwMdqI3uHmj;_>sfnvtggjyO>kl&n~>(QFnQ#(ilnb|2e<)+Goqh zu#0CEnfH$F)AHm!sA&4>-JI_Zj>WNn6s#S8ssj7?JtqD0#9wtEW_pYA*Z`@!Xs07h z!$7^;$?Z9}5THNPElGb28+Cjr(&=>VFKkBk1v`|o8?XoJaq7lGlouFOvNqF4fXr&7 z-fd+^+N8en=)P}vs`%4?pY&~cXQ!s@JuDj@EM2P)Xm>u473LQHjXrw6n_T^9YYvOM z=V|DdrnrJ9@n%ZuH3G=0%(Ltg&sw~A2097PpJQp?20ZuWf zkqSx=>dN2w2Trn|_??t+y60_wHXGnE4foQKg#WUB#{_ zU>Li?0n`8pYWFXHov;Kn+iREYd1Yq1qes&%T<#~F{BZ6G#UbbvCtBo&YU=$@&8}=7 z%cYt)ppD04Z*y^PALPHzxrVg@r2Vx&e0;veMHI=LQA4gmcE89LQlziXn(dymQ4)Ij z!aTJES*%681kaJXA5?quVVg3AS@?|ze{AvMIwFM10{2+bFV?6gR9pIhng)XNWi8+yyM-g>}R-60|NjYa@aB6 z!3wiI-dykx3fLfCJ>^YOUEVpVpPuF#nKn%VNc=Lest?a1*KTb|5ZM>3#7_h3*0193 zi(h}y&id}Ls{PqBM;-G7?svDe%C7KEp7ap?A0qWU%XeMey-&4j64&LqP;z$s{QULy z>4t$uH|&8qGp)-{x(+tN#!$s(VcXtzSTon}|80|mg}QYjcPC>vOEI~kn#t~L4S$fOx<9p&T~HWYro-2Y9B z`40)rvkm+`iyRRumhQQ`(tOxWxg^j1nX*Bftgz=@fdRP3J>v(5yPNsyi7z^|nqw*r0?&}%% zegC@;>Es>tH;wl?|MTb6)IIarm94`oNk)NGXTXhd!-NCCN>$45xAgWjukoPsl|f&Z z^GKM@o3wj@fbTSIWon>GWr@e56d@)CQ3JzV2SDlQ)-2L`0?^L8$hPf8Hz$dg>77BE zDK+_U^}!AfSb3zMq?lMpn3qQ2f;{0#$Wi}HC9zlPmlBdADb1cl5UM&!Fk1B>ezCoM zn{3LGsK!7RY;pGl1NgmAj%#`$bqLXJdHOVO-A9uJFY_w?ii@h| zor39Z6dNvOiK;&eit+n;-t`#h3y28xu;l#s?dxxLQ(U^h#yKA)oK^wEGU<;nFagk( z`PK{K+)rO_6T7m(VXVS+xxag`{s(pX|0jRq7tfSczT=QG|KcO*S@SmUT<=puE_a-) zK+PyxN<0S~!(8)zAtl66ds6=yL*LWj_jl$WCTb20zfZaI?ZaKuQv(`CQ;`h95o1i+ z%&dvoAEPDiG2&e=zv2}!Hz|E0930C?W(vL}BQDNnU|{ejF)=nHgPZ>RdEmk8zP{(v z6Qtj%l+MmPLHT=EKYZxDd13Vod-}Z!*=J||6f7!*va!E#lFOJG2w~1i=z3e;?0|;7u$V#*nNa6emntGxaa+%*)>ZD!;v=h(!cS;|NcOZ z?N=}yDATc#oAYNGKk>YSvF>V2p{}JpI-$G_CIHKS&bM~ z8%6H6SGiwb&tKL>Z;JGPL#N2()|FWtpt_igZqPm8k(R#KjUK?2zfb?aP{-mepwK9P zrAF|_uQP-NdkBj|l_ZvTkrhx1Of~@lAbrNmC`6X)8OM3TBGC0Bgw8pF@7XSvXMgfA z{4GTPQrD;qR-RD_cp;h*7<%@j;~ZZT`6rNZy4+;(R7?w4_?LUyp*~J#?);1KjK)n~=C}kP_2p&f*IaUg`{qK>2j2P*2==1srAtG?te&W_G@Rs zd^bL=WSR?kTxkSMi|Ay=uW}cJ3AY$nDWwEqOL(Ibmva?jIojPDZyFkQADSzH&f4w9 z_dUNyt1<|`Akd=$sr3yAbxix1T$UqOz%a&d_2|&?C;#f@sKM@|uzZidk%*RH<;&hb zriB)AT0BqJutv7}B4F)UNtJ2AUs|D0fZ#P8SQ6lRqUp~HXm;>MubNT0ii&``JzH{U z8;#c!yRqBpcjK&+Y9wW+IkdTL9L)?1UkbBHAzl8Jvr-leNrI-e&h%gmFdY+W)HF*M z+MkpM#VvKyixV2|;WjVsL+FPeef{lWE1U`1t3xke`qQ=S2f_0wVHpWRuoU(d`D_4r z&IycG>N9(E&>+cWLxWoD4G%MOrtl2NrR+hCvFeBHAqUN+$X3Kke`sV%Zg^&LX-6QF zI$ehwBny2Y_4AID$`k2$Ff9V?vJ_%12S8|huZs;$A?-av7XbBo(JJbC*(lZDs zk@=27X(0*lfDH{C&N7?nV+trX<8 zLqngmkm+5v9Zk_d6kd2x9~CveYqgE=G&5ra><*!6gKaBI z!pN9)?)n|+WRb3x7C2#Rxl{4t*^#5ifCcl_NbUQ##dUM9+3CsWCJoKyr1Zq>+soBR zD?Wv9EXA;)aB}pEueA##j$yhxHhKt^*p;vQ7H;z2*LiMFg2DW!`a`Q{W%@+`z@B}- zf*r7KZd>}_-P68MIcI8zNBgM6QDxT2Q=fW@Ft)GpvqKxX!8eaheIg2yTR2L@!Usus zFQl^aGGTo`L%{vdhrwKbfTV%lW=}XJw1M<+^knPHXS1!H=IZ8TDQ2DcI@Htsm=(jkxzxk_TgoY>F{uMk34ng6h7U8Q%SUQn zpRtQblUa>zp4jw$7jI+bVNbyRDXRNKT~egT$lvoP%S5K~kKbQQw<|5q2wFg=|CfBD%4U${~ih36(`<3l7RCJRunHDFnn&ipI%Qn^~ER z)m$4w*65L9eef*3n=WX!WJYC?OEK{#f)udHB;R|c^vvdxf$(xnza$1;V_6&9n zQEQ^oJ8cF7`O0-3Pm|sdh4W7%BE|zDe1SD5?{PSSu+>Xt(1$E&P$k9Tm;KkIDP$R#p^kYqTREu3*u^@r>VJIIT z2L48yp@3vj^ny2yk7bhhgSvX28mkYkJ9ALj?>ldP30S7#insm7>!I_k#&K}nLd)at z?Ad>(i~mo)fc;Tq%qR1^Y{G0X@t0R4eI87;XVe5FT-&-WVr%_k*-5AGy-D+fu`!K4 zXA568;YDu#R*y>qE2SUHCcdNq&3JNIs;ri)8TwP588$iTn;wYRX&M^dSYI!5@Vxr&&71puV(jT7R~fCPWFl_b=btTq`s?kvMGH=tjAvzJ zHP5&p5Cp0?8*EXOCe!1hw&=E~ts4DD?6}{;pasxPSp>hU78rQR?MFq)z3jo5Im;_s z|F(nrZ>VqpNLl4ne>@!oL=`^g_|U+=>nWU?e0LVFHK9EgRtvujYYt>sPHiFT{tFKM zTcKdq{lsuCpvofVTA!7QHbo|@|G&}-zyLF+KfO`m3XvvSqtQU^g@d*xg)55?=jsX+ zQ#h=1GoXL3j^)c-8FF}dH!4T50020cmy~h1`!Xs_oifpGJfE-xoT{`Gp0iTGU9c-$ z8<0M{b}%y7qyL#5tFLT1{iWdHC-h4PqZqv)9bpbTbY@Ov@t9t>#-n7Fe=vE#8)!pZ zs;sRx(9oglEjr6BgJROI9QOOxq#^VZEX!@@<$d!OLFeVfr`PP?G)V-#b)FJda+M3EcU}bjR-DbQ^ir%XSFepTE*T zP(Xzh6(mJLfH-FG2FuvscmFxTju+8*`I=y52SIK(<(Z_FDw@zrB?P{_y$X zb$MIdOw`VRa7E|kkIaO0nfKqXcme<_jA_Rv9ruUUo?2VY?`)7!hOC3RZ8_by55aDN zbVZPtP`Px28}O?HF}GrpzI(*1w41Kg`E{2y4Kw$OpPaT5F+#oDK>)&fj{7ia>NitF z0E#l=r-x^}oc%docKRQ^4GEgn^`lO;dFF3h>1z>RMhs`)HMZ&dkATm+M4+)KB^~ra zF!B4#JD&pEzb#6ndRO9h8{>iO2A9?7(dC4SDV(np zmnuI|YE__vl19HY`Q-Zb;mnufx{hzJ7;|5OC$6_$LJ9~j2%c1aRb8V`u zfQr!j0gH_a-v*}lq(NGKCiiUs+0!`-$;iqjJ7RmU4h?PeZ7I0^Xlw$v0|5e4(@B|^ zeNB1$O2oAsk`aizsmXE_rIQHpn*(&RZz$kPZEw5V`>B{pblVG{@Y6pM5TF3JzxVjs z&xjoc{gyP)Da5L^dk-&<@<%1y_Ho4CMwvq5V$0%j*3`wwQ_tR?di*Sp{qoIQ8ipR0 zsoHXNSLFKwvi~~uUtIvh$=ukb+Z=L2LcRUH@jrUyo~_>;Do9qecxm-<@#(jlRv%wI zzj?>ku9B{^WwF?9@F=d!lvVuHX<(byptPj4v@}$iXUEtKWajG8G(Ug5kK}Juum@?< z-{($DoQpV~Jg}sdNf231Lxru{gQb+RHW+be8kP0u@uYa1ysEndd{ebb_dR}<`jvzl zu}@m#kr(%wp+C=%Bj#SF+^wdKdQ*4?xCmQc=o5TPaa@UkG0t3SU`a*n`$Uj}g#0VK z)zif}%*AT8L02o{&V;t5(go?$_=fXJ-hNcKRvQ9~ zBPIxYH@2SGhpTUI)_vD|aO#Aq`NcRS2VNnch?gwE71@pl6>;9fOkS%nsNUs40bN|! ztPlFF21V{h6}VL{lQqY1sJyg?V^?rcD!CKB|6)1pM|ZbRtN4WfnEP`Zg>LsB`omlL zf!Fg(mGX*s}Fu8=D*ZNoknv=M-N_SJzg2M)>^(tM9tt3HKE81DW9Y|HzGct^gqMCr-FmmpXqenDOa&%;^47--8>4L=u1!+Ca4 zS+As`ysXX8KKz}Xoi4H`yXGgVMbuqvVonz0)xF)hH-z1p!RWTA3q{Q8xF${ctjayM zpdcQR%oF(}OHEl;{A?PHXbKfSwv8hd)t@7PtXr|+Ey9^}R8OZ^Eav zueR58RYRDcKV8#JBFvCB*sSB@V{<#w+M2|mrLDR7K7%m?qOPbCoN?@c>Q{qm=M0%N zt)M{0l(sR~`?Ko6PyWS;E4$TfhqNiMxAes54);I}`79zlb#n9tH>4_@eK?{dBgWkn zg-$KaDlS)^?0>LZgRw;oZ**?O2EndpxzwJ)UtaognOLxQAS9V3`-d|U^to=hRE1-g zQsMl4LK!$>IYd@0wu)~;qXNf>!?lL!S`)X{SB|8lP*vWkdzv%t`;6z+6^`boSWcc+ zDcREA6BR~`uQSy9?P@n;1Q8)yK@KfG{qSfDios5ES54KKkd^Ix|KXqgC&P?EdnXWq zy(mdJY0oT#|7bYbwjRQ@f^7lLh~nf{hbTb7^A|%m@8swu;+TAI_`y4e($yeat^lvJF2 zogd+LC*Y4f-SI0SxKIYvv-k4z8R@gUVpFU174k5nLiwtW#uqsM^Xks>T&i8_flYb3 zfng(88ZpegSMUNC=iVi;>O_O(BN?Ki4(h%A+Yb*zLh;3g>-$@a62SIw0_#B_zYvy}x=@}VBg560Iaj}oMR1E zxFT@o!u7~g|NgBF&OQ^$EtH-kN=WYxENO#Ah7AKcPc@RldsLZa@6 zVgi~aHwae?)?5+RuyyI>Z4<*uzu=n0i~oE*z@N|9QjAus(IOCNqL5C1KhCv9rwL&_ zt&s{36u3mQvT_SC8t7@IHtdHrQ@}FzBVDJp^`sJ+d0MRo~&Kd+PzpB zB*cn3uHl}6?bvD=^OAx}lx zM9Ty>9J&$xD9GE6m=r}S5&K#E*V+a>pIs<3pzUf`xta1 zD64QJiHcdFVlCd!9nGqhwXV|GY8kN^Kyq#_DuXBE+m`s9z0TE_cPFy3mj$58b22Md zQY+dHXxMN4(}{r#VSmYs%Obnycb0MYyH)W1R`rKsP}T3#w=% zal2F!=Qou{Rfm1b$Zj5I%X5j-%NH)G+RI#6<=Wf)5LFY>PlQjk)7p8n$5 zT`V7P$U+HGji?IT%ax&LCpLX7vIK6BuU05bt}7hy2d;1*3|ISq)y&!5xXB( z)6^8|IZ!;gzFw1%kTA91X_Jx3S^L+^$$d@VU_Z&k7)dEPuVkY|X_HK$j_sYD$DFzM z^J09QobK)UC#UL#`JdfUDz3n~hjOQTcso{0MOR8hhf>&AG-4bYt9-Mhr0UF#jI;#! z)Vdb^E@Wg_c2GPc_K(AMbNAj2C&uBruLkic@yy&E+q+n+vJ*!zX-z~0mczYwJ)+y<7||#!EG6h{QH&plVCtcDtcppaHZZtXwOfiIOHdf3b@& zzE#OnVGtk4Q$fg^pZJ7%_@$qHaGU;Or~81u^H!5CSGT&=PN}Y~Maj#{x6A$@=2sRM z>#K0{^40=soNQvCx3~AZq=Zqv44TZ#M!(aw)hBBEqm$25Ak)NuoJFXpy)s+W_ zW@K@9wC0CjrgXWt``B={oELGhK))%^5iy&2S-9`bJ3SddD|G)3J|3^lcCuk*+56mG z!_PFYf5F)aoGRu1V|(Rd5p;1RM=)rAGdD)O6Qx{0wzHBwDdr0n@7$#gPhK_Ao1h>7 z)onVn2SK#hT96a70!=jP&O9&?y&hVtCH)HTU8T%1WF+t16{_1rGDe{DUeTJ1bskz( zWMpI{;Dn$V#vn5JQ~UAj8ELka<72C>Oeqz;EUuIjE#gsTNfHRS<1Kdmx(Eb<nPZ};e) zro<^N9IP7G3TY3=<-_+ujyXxW1iPK7v{s~7no6^)9jx_IJ9khyHBm=T>8SOz((w4T zjVdMD`r_Wi!=x_#t;JUVfr+^EjVj1tzt&y`NNoDNH!MkjCgQnH(HcGqC+--89_}m_ zklwH4_V8cC%?6bg3-7oW;>x`3E)qMtj=vnLtPJ4R5Xcoemr+cwM@{<5hD-o`FFo$I&@#{mR;$ESyr8_ATCCy(hm|_@q^X=b&4rHs5Q%%xofl(|!C%UE zZbX0|IU0+(Ua=b*>F67uUzSqJR#bX;&30OB;Gux__>SSk!q?+Hc8_p}7B<%Y5CQv~ z8U!alq8tvdDk;HpibYez(37#PRhxclnFQ`d#`WEnGV#3PWVQ$iftI`xL$JXkU!^N) zXxG=a(xV+nx+suGcI&2o1>ZW6(CUg*LYLQ*G^{H)X1@GyEF$IX&W#G&k9|X~AzYNO zl)Um!Lf*)};R5G0a^n0Wa@o?(bpk3D3Pr^dTwQ0!uQ-iY_rqj#^cI5&0*2ZD*o0U{xE3;mL9wQmij?{_O0$q8;Vj>9c2B_By-8C1uuSm7#mOocgULh3|m@{6WW^NU- zVlk{teK;I4DaX>uOTRdI9Uq#}o;@qzagU|F+&L>lQWj*ctHAGn52DL_hCo*a7V@ex zsvpV8V7-Hn`sSh^c>BMh$$xvjUT>dqD@2{TgpXUSq>sC^*OOD{x!Zr~e6lRhA?`wy zPYsVtorm4kdp~FDQF=Z5b0c<|E?5{7u^Ko;xMO69m%8{FR{eABg&i+n(!BM0hajA> zA7d9c4Ih`@X!je7h?{OupQ)qYxL51xJYB2hIVWI4oT=h%7N~KId##CAE0Xqz33O;| z;S5QycQ2i@Bu@X7_N;YxhZocEk(HPNC2O8fkLliUOjk=~@6X9b{>A$8>*?-mr*e)c zpQJ8$q_(xt95#EviHiF2X5C~*SxvqRxbAkjZ?{<5#{IJIQjSeAa)y*sf&5yyXI)p> zhd#{1>}1amT^UZo4;KLlWS&Q!W8>VRl5#7Fk`ns5iyDddzJ)wV!{Err2}j3v2r3PQMhJv^T%hqB&|15F-~$SJsm&A_fb)YokgfCKDk_QW!^tt!@F<6D zArjp)oF0Vz-!A=B_!+8YM=eS)2k;VG3N3tV6>4K%YhA@3^iQdH%(P5tB-5gs;D-EF z%B9TDJ@qcnr+;OObrwoef4$?Ispf*RB%ei`PiAW zK#Vye`jw2Et4``<;;^A}Y5m9D)X~*?+d!_tn7TzZ-onk}r>j(Drv37!1iS`AVY|Yu zrV8m&&{IVw(kF13E-7sw=D1Nk^c!A90=~?a#p)0urn_axU5!qj5D8jSdj5ojG%9x7 zqv$a@ILO_^w}Mqf%VkXB!grC!c?}z-sENtW%E`qLv0I%cg=3+2OB7IZ9AbGyW>Q`! z$XE?pvI&2_s-oD5v^z!)#ssqoy+G^jyb;cM+y_ha&FC8SZS=L0WIwR4A!>DM?}+F5M@U zzzh3nFucsS&9dk7;bpBE7F<@hkHU3hu!c1HRT*id41wZuwHrIS&)vi}bTAK^h|p6n zs`3aJBzj&5DR|P48Oo+MXnlFrszIUFg+~PGZ7J#6O@?%74Yx+WQYy^FS?|mgSF*9T zet8>*eclQRjo_TVv+!AJo;J8Zdbw8rU_x`}NGr$Y>n6{;a3lZ1&Cp`%^q~z9U+Y+` z@>C;UcAN*1y|zHUFYP7k%s#b$mzcig_vqQ8vP5FsI4mz+5@0N{346b`LY&`E)d+T^3W?A<3*m}*N8|-eZ0NnSZlbWoI z%;j+5c0~^Os9KnEv_ILwG`+nN!PadsX8xS(;hOOLpRhEhRtYZWyF-WNjVf?wr_@vi zh!y_uzIA>VLGp_z2wAWjGYs8>=Hc$_BJ!PfZ}~(ZEFEQ0(O4LM`n_1Rl$^uU@hRh4 zDF>DlWd`?lKO4@)y9L4`odg2cf~;Pkz&n44z`M0BiLB?2YB9@);`E=6k!cw_!G-Np zCdtW;`N1#zB;SFg+>#wkSIJZRZxY-m8_c@)&EE*?oL~UDw)yLfyk=w z3+$j+KMCGQ#1RYF&<6_9^4yC5N96 zg!A&Za`#->As40w@+III#2uIIdoc zHROa@jVL^JOExg)?rZX9KpECnu*Tpn?=W@PgEcj1%3ZkDMc~lGNl>XcYg`@O?Xz_m zk>ULr8CH(GnvP>7Ek+C-fv!g8g@=i1DDO|`#S)y$q?B3Xvt1UOnIc#&c1{vjj$I9z z7=NK8R80DWS1zGMyX#k=@9el6R8U>AO3?dK&RpomCu_E?TLfLZJ#0|p6}%i}gQMiT zsVfC8L9%hjb5)msnJpVI+IWSokVL!CRJcSuI@K1v6{2U;P+)AMiB7Y{J?oH#SE7U8 z=HL~>5y2w(lu$bTtq1}Nl_!-%6}A<&d*!dN z$e;&M%BK~I><%SeW-yj)3Zl#aH1J^+aISr8yr+ZFymcWtQw=&(pw9bXk~KcC6AWYA z0-xMKYUcP`f2Q%6$wm}=YEhchq52NREMPIX?3g;}j$4V1X04eb)337gyJ+p`jt!Qg}I7U0wZXkeiF^8?d7-TiR0I zv^P6D8PcM^TMZ5$3oZeBZ68`#3XvP8X&G-l5Bh0?Yt{xXJ=pz23&hZ1W5L|L-G{9* zmhkX`CQHTP7=P<`apcS)-;%WQ{P2RH!%=;HBb&j+@NzDK%fzthVYL&Doz3NfCmJJ- zJvO%jlv??m11U1;eHVcxu8Y5QlgSNavYBJlh7G%BG4X1ps$M!>}};cU)^1Y zVeV>EUtC+gi!ho3`BzSeR)APP*HuKeP=}EduY_8UKmBHjzRDp-9}HW)JLaKd3TSFM zrQ80(`S#Y(B5Eut7Dk=`J@(x_T?ovpK?lP#ID&1Gh!!gtoCC^sOl`2==i2tbz;f z?W5IrrH{CS6fsV`^H_afsJDB2YqK5~T4VU6BuOy_)bX$_2JE81N>N($|Jik1HMZp! z07FskDJ9{Lc(8i+T5|K;pF+HMknyCeG5&d}fkP91VQ6^-oiS&{?X}kDw4)em>Y*s+ z;K{=|7ivM zh7X$~=N6)pw^np=lCRJGxI1f)plpBfT9B-lOmCNs<5q5Rg|$qiLQeg1h+vxoqt)q- zzh?2>xP!b}%^U!$+pr1V+_V#VcN1N)@_3GgT^?G6U z%~RKQe*Jt+NA#VH>dohPVA&pjZQem8Lau}Vlm`Q}yfY5pTS45zqU->G`M5 z5QKdys>MmFU)g@UA0xe;X5>3cVs_FZ&6)K!(t1HZlLP<`*rIH;=NCL_wrlH(aka`( zXC)2fj(qS;F9=)vw(zrN{Tohie7vDzIMqZ{FaKbSINm@K6C=VdNc@ZFypFq@Enhk8 zN}C#2+zD)1cletN#R;Y2TwY#Ih&*CF zeRlGGc47d4rdU2-g4u}%PF$5Iy&V>nS`nIbHed1+*JXx(?6sCLTJ*0WqXFGnZ zFahe>dC7UDZYojf68+&`L%l2Y*A3;$H-{UWkFIi>FA5`WUa!nOw;=ammNb4K!SeBs zp%3yh1vt&F#b60J750sDvE%|Q9TVeyOatCeULEA`#k?Viho{cL^$gRRcY+k z14qG_&~Uz11xbJzIp(nDHOd{@{rq+^!t>v?os656GS-(}eOf2$AX|sehb>EJ#mj9- zXAz{GIWzrKO@;WK?7H#VPbyYlSezQ3@#oiAF-OXB!*Y!ys;bBRx8(0BtH?=TJxqWm zLV9##8|uZ1k^HK)Gv{kTItPe>8n)sCjablD5Ey{k>2rFh01mi+Ji z9SS!e=CCZ!YjaN7?%u1_i*ogFqxr!UwGazobtF;gDznjhrO>||3GwMLWsn+v`s z3jG>}?<37)VzB5J3a>F8?>y;aoXsYjvMCa~R#srAWlXj3A#=I=h1TjW>=-^>*&S zQS;2TiuXbyESery=f|GpibSg<1}F!I1y4>@%)wPHk^}(a`fBbnEe5O3q)5z zCA-JhwLf3ISN<6u_;5VgA*@_{_)2>N&jJ^tTS!RzZJ{3ZS?7Em`23xpXHTE4D~TM+ zN=TrV6&K%%eJg`k#A(v)3U)9x3>}!-lKZ_ z+);2WEw24@{rs0$$d+8}ixYz`Tz5u0ReI0?VO6VhXLg3C8^KIG3P}|h%3*#{-Ge~2 zCQtt{){;Gum>u+Ijfl-61}}FmA=K(ZkIrxeD{HhfC%p#I3!LZ>9_~e$SO)QDO~6`%{MV3+Z-F@)jv-J)r2&~!~@ zC0m7*v-;m?leE>8m~?BspDzR|BsNjIy!5yVV^nrBFic83UdIy%j zQt^lwHg8>0V;Bk>%IFGGv=Q2feunngI^vv}d5ey5OJYPv$P3}+#ba}zo_^a-`xzUo z#2{vA`KFhb^Y^4}xMPFrD-|W=xVm4p%8b+3Uv9Y-7F!OyGb>kCCdEl&(K_XO`-__E zQeicEAAWnG28T2wNqNDJn~JKNeBWk3+7IvX*DDl@$i zI>1sG!>VGQvh|A@1V)a@cQ-U2#B8NDgJ_p6P?p0`N;o9k1X{yX|>GbR)PC&Cvj08P9?F z?Yvj=TlW!Q+Nv9(+w#tpKoo9gk6VM|)Umbm$IX+Wjw2h^{FN{QEeJOqIoC4noTk!x zjl`|A8a@?HJ{zEyQ|{Ors5t3#Ucr*6DqDXjX9}jJm@%| zxk|Ym$oCGXj`ZeTP=|oZNt61SI44jL6tVAlpgG69zzm#bG~+P*|2pjd($p(i&IIDc z^`L+j6_n$s)PqVxTg}wvop9aTH*4SA&XmtLiVNJj4S5$g#HJP( zq}{CkI{`F_LcRKpOf>m|Zz``+mecGkfo49NM!#E%o$^+f9_#2NK;;AbS`G%iyE%N} zHqB1_VVjTc=YBm?r+Qn-g@+$MuHJhbX$M~W+9V%fX<@?KfoC&~3A2P7guJP*t(`)* zOuCXNu>npp@&7v(x~)5rwQ=;o6Xt?8zrFsQk#eM`pJ^d#LRS?L=!?SQVN2@vEEIH z^qS>uCzbd_k&G4Upu$GYdc!>XewLlls^twR8Bnjue%sqrsd(I$e(?B_tK#6IFDrTb zKt3jzAgp8M6-pb=U%ms=Aum292V2&yH%Oe!?4H4Q-es}og1N$(qax6gsLwEO(;|!E z`#lz(8gI>rca^YZ;2>y=b4a2EbY-7B5HG-&6*!5_gawO=y3+usp3}Za{Asxc{Art48zaU1#h z#7V6j5rvr+XkF;=aIr`zW<_0SlK}+zhxUDtdm*b^-hIYr4kmKqU0tcUy2xPWZE1{GAd)8zV;@$VpL3V)`G z_zZ14Kix-ti;_x(*KQyFHFp_a^^MkzKj;G!mxgs>3HbA@lqHP{XI5oxxXI?ef(Mm5MYL)UmOr#{1Sv5W=mtY%|)^(?eZL&L4z&u{V)` zI^u18>*Q(ZZpl*t<0aeKnJg1MLz^E2t*Qh|&yjiFE6BL7p+Rm*dkw7_54fjuUE?v& zu+Nnlf6IxGvq%3QZC@UcWWN19SxwuNO?z3|GFj%45) zYDiDtt(r?KXBR$;sz*~y^*pxAz{~e7Rcjg^pLPExf#c~Mq*#nuUE^$fcE|H^ z(z2Q>&Dtl=C#SUU?UdYW)}Yqc|H>W2UhzX0P8Q8~Gn`fIG0&%1wo_~N$+CklWG1P2$s6R6Uq$MBbQnxdbXqkK)4cK;i2K@y^l*{UR=*su)Ky3Bqw;v(Bg%oO7lbTo2yvzNJmIXcdGUmPSZ1*Ukqinf74Dp_} z%N-TDNz%SCva(@mW6ASi30M=O`MCXIdn#-?ygj*eSOw-4u%RYb7yE?wt8%lyeS%+v z&12rLY^peCS4)8DBmQ%Cy)|J$JMP$q8n*s5cAZVmUWMlN(+pfyn5>@hLr$rEI@t2UnTZ_-@TWa57+B zdiP%F7vCo!_L%L^2*6q|cbaC@Zqh7n>>$^{yWLf*LH%L0k;tGR#!gq`j zYOr7r$$#WR8ZH_D2hF3Y+1d5r=?_juQS!y6hLYA`DL;kY*VmUINN4awqVkb4%gggx zCbO?Z-lS}TZ3q_k>i=e@kfoH&urRc+&8%1MO4Yo|FNlyziWkvMe&_uK~!_@{w(Q|Px- z_f6R4&objDVCOf<4;^@0en@eSrtN;-uSM(K@Nu*2+qycf1HRWpuL8WlI5t6_P$7zw+rvGH6A zMoL7#e>$&?!GL?LrR(>GFW<(QXE+feVZxPC*@L_FA z8jB00Qo4KWv37NX#s_fH_WE2`z2wD(C<>EGA)JK~AJRdIF^<|=&jvpyt>zx0fbNJb zp8{6J?6Uzd9cSCA4|C<+mauO4!+%~Q8^!yp>RhcnxzsEL zhd?0OdU}w6<@T^F1H?yg*}Z$4*jz4TemSkZcW?1>gMBHpLhLs+c63|@&$IXAjt#c> zf`?y-UzrA9sH&L)kkuK@ex zN_3o?RX%keTeg?SATtyd6|+brdQTAFgyhkCT~$pjXK22ytt|(~m`c|dc6n(U8oH+h zjfP7^?PUDO$jF)4Lzn)dH9r0QAAiF+-T4EsS{Gi1TNt&t)4_t}YQUovZqot=(;Psk z;N~eAi*s^v@SUBV%^v-+De?|IBDaK5_tv7Kq7`H(QBIo2wA8VsfWj`ehY?YZR(IT0 zKMS+C)n-YiEzh1k8(nKdx+gQZ_qQCwg2G&Cx~mRkBdsVmNW?ddTlgw4Yex|~Uh%{> zYPr0csYW{udSdNu_o*>G<98*S^~HZ1?i3vSzHjkDSr3*Uiqo=EDJrsUNvq-@cZ^Iz8)4ONS9^JNIWUv40aC|4Ddnomi zQ_v3vbH9;yAfK|V;`^6dqVCGqa)*X)sFw}Ah`YI3y%RW6IDk%c4bT?8c^WFnc1Kf^ zQT=Oickkw|fMXhH8(`L%|89XUMp{-b5zsYv?aDu7 zsH(6iBupL3l#iobhB=(y`2b+Q3;8`V($>^83d%Z>9$UJXm&2^E# z5~ykP&3M><&Tb+2@HLU^buMf>nV1I>cFXKv0*)P4Cthv~4RK8xd-K*3RR>w1?+1T>@ z>1VOn9M>acv)n|;er`6!d%3v*%zcpI8K`T_KB{@UN7I2 z7djW5Wo{Z4c7q%y>K4D1#az~M@9BD)ayROFW%VLXH%Y5)udc4H@p)ro;ryVvj66azEKf7x5g727bpMF8h`l9pE%=;hal8a z8;BY_LFVJfwFQO4z3I-%s><$LQ3aC)^a+EOF^!yYXv(dlV35W`gqPbp*i(dQ zZ{7)X3)wqH^#0gb6FX;}+(eFMa3W-W8;7+WnLMrbNs6{Rvwytz+O=!h0sf@^l4iDn zy?Cg(~rEgecIVpc-{eKlU|19p@iYn{se(x^v*wRpun~<*dQ}Rv>_4AR5?G9Zs8^ z<^( z{qpTUvQo4NN?r1pDGw;N1`l+lrz^^>Uta`1?sE`c*<|u`h~MK;vV`kSZ+c+FZOgV3 zm`;zG`c95A=c!?3W<=9pMeCEO3rYGZucQRbK^r&gyVajLa|Rv{qAI!Hq@~55sCS%7 z!2-sIh{tQnvprF@TtiX>i~f>VT;T*x(g>-aL3Fe25f%5nLKdzSQ^YF3^782q4^vKM z&q}Xf`QFv++90RBnv!RFSZN{QMNsAtRsB&p_Mrh~zcPSl_5ixy0>Qs{Q><&M3*y}IH<{K2Kx^Fjc_ZmrJYa8#~|0-H5< z?K-couP>l8q?*?sEANQ-jEgdn*-IL%8nyX08t@If`h5-tB(M|evEDvDHsYg@U6Ol9sl$r3^$E-=J%U z!R=x86aG=zl|mg8W1y;%>_H}@XQgEUFi=pFXca6dDWG&-+OiE@qahY%cX`4Bd~wJ5 zpmwIGd8nHM(Nq(W=BTb-pP@ZN>*mPMvY)M@qQXg*Eqh^*nG-1KZ10s9`4p-f9s{y(L)yzx1$8MmtiZ9&qh zN&l-uRgeFev;dwf{p(H*iQ&Chm8%8@9(|;R5?3n7$hKiJ6(NzW@GvPH&VU9;)w+jg6%nT9=#Zoo7e|gkEV5oQyP_ zdMnHAug9@14d%{FpkKfAdC_y@;^N#uH@*$?{DuK8+2_&Y$2YvzS=svPr~_hM2~0mu z+U8_us|MDgm=`H8#p_p|&)yZiPw90QFR=z}B(zUZ2dp{=9}7}iucITOUX8`1Pzp~c zwC$Ps0pwIuU1iAzv;p*~;EJp8P~{U&WEdP_3%b41m}tMVPjnQ~of?>R)L=!!OUzev zHC#VEFn*!_Fncu85Vy(?KUc~^ER_leFwujau!PP*y{Ov8n7G*LmLPdy-kqS>zEddI zdaFTSX?)9+l-N>q+`w*5@BgPp&27u9@!UPTcQ0cBAQl%{MkLa}0}rynPS5=QlNw`nIrwPv}pdI&)?vO9SR?+oRd337Rn&Qq!~t-09lKApABIVzI+p zB3Ri}W6BGgjOQ<2yyyr?s_>FGt#T6`r*!(3j{;}_WT5!;3=epU>NZjq;_i&P6_TWq z%9bzQvl9`yzw>&kZ-}?R=ZQ&+Z$dMd-(1$EkB9v0 zMt!?Y`LAB(Y!4Y3@n``ck=e|8{0AxkM#bOw=BE0NjH!Mt2lAm$V1b##jh1be;ZgHt zRxa`eBiZ07>0GF*wt}NypG+}8d?3$=UK#Ipzx=K8}YFJvoE~}YO06)h7GEAtCVM4 z@L6+)S3e?RZg2fJ@qn+WyuHPU)AuSGQXqkyxe%~};;|M}?z3x)0L_;-tndcPfmSfo zi%5BWm-Za{Lb8NTE~XRQbH%~im;P<{G2?{}gbZlG@*Sw%Jwz73AX$$e?`ZgAa>dHF zfv%{YeaEwa?kwlCBz?^LB;|N76GT+^OWyRmclRf=cu6(-b$}4zgQ;-&*d$eDQeu5H z!2tJVoBL3!)t?C2!8ERzJCx=vfUJB zgQ5q(;H>ku!9)#arbY_(-W7d(xEXHB(0$sB6h=+%KcA3OHSR5oE`R1`>r1?&hbuNI zg}*3F*=rx%Nd58u3mDDooqOrhB~EpOoQFWx&fMG~OjZFO8M(yO-CZj}OFG4;;zYtz z@DuAC%KqTg93D+{btSr={Ovm#$2pgroVZ*90}t3ZI?;>8F_re2a-vNQ@*!GEQ(xcy zlJcD&J0@jBXcR!R5DqN>ph6smnV1LI`_6{xH$eyIESvS3Y{44>1c%SgYk)z{S3fK{ z@~CGV*yK7uI-IrvY)5x_pcXA*`zO#0l(|Zmxh|HZS(E>!xOV(7OaH9@Xx}Ss0v_M_ z{{5ApjS>)WKpY@%3VVn>R>4o=b$}1;Oh9%QC`bm3gyr4^n{?C6{!KXlc?Lr4x8(tb zR#)eYQ3eUsS?Cl6z(Q<4r=SfYYb($R$<=5yJ`3W^nhN%vq@=ST;E6f^JZLw zXgK>4jh{|W^ML0<*c5~#K?$3Cry!2YF`a@yYHQL`Ebpp2~Rj}B-_kBrN59~B3 zk~+$<`CXbc1eU_Cu|AeuboNDyqxv==oWr=mqqW_Mm=Uos0nfY~p&m&3{a^~#j&NF9 zHjV;&1x5v=W=+8K>A922ia46FeKz%)wUl4~tGxA%wztx9>0j_5%1Dw`R9qZiy{WzA z%|cVawfgw@?4mR_-U1AoEgTM4N=!%?tzQ82#vj3hkMf{fA^?`iPGN;mANY(4Ae`Bd zVyGY%LqSEapb>WJ(T1p_w#L-S#2 z?;GzO%IA^e*X#K= zo=n>3xXm*cac2f=z4(F>sBr^p=Bm_u$6~H5C&k_qxksh4=hrtCh+x!pd zY<30UA?&&NPE>hw7GW^agrcU*JMN5P7t%rRO^S$noq1NX915Dk+wfmryf{p05J^$C z>x3HDXk);K3BlGLQJJUmF^aMl$)2cJTl4u{t_)o`P}-8KuTZ3dhbLX_v?#NG(HpCh zfohF=@QUtTmgr4v)~i6+R%E0x&lFVL(SryUzSv*~O;JCR!#dusYSlI*jnz~n5T+ku zFwSQK?UkZfrqjVKh-SbtBh8UIBt&U>+ZoRwnjUSpmF-C(@vNS^eNRR20sj9Qnua*e zZQb@W27^hYrWnF&NdQ5D8kz@)+cn8LUeyT+3GV_Tta<>ow(iNp3CL09gMOh4 zLXs3ygI|MKThBfQqAh(AinXW`z|C75l?IGImW*P_MajwXa%fdZj`;ZS{d zD6f@2174dzc~f(zK!Es1to2n%3KJaX` zf?7}j;ic$xLJ2bs5u?uB{Ml#AyDd{%JFn6JZfsiy3K)(lNOLt)m7wL*ER4I9VD-v#E2`O7S)ERQ z7DR0JY@T}3eMHL_Xp-p|V*3L0k_D%bd-PQ=gZz{L{Y` zpSZt1PIvQ?`JaCCi;HrueZc_pCV;FRndTXs+eY&FgM-fO;bFWMBd7)0Rg(W!cI|LC zsT~$DxK-TEkl4$C9s1J%cIQzIr-Q15B)0V4WaYP`ea5T%ugMIh`axJ?C9+^kA*i!7 z(BNG#3cewR5+VzM#csp#4)7msc?O6R|3tvfl9J-IT$+V$9v-_InC~iJZ;zvz$1CiC zkNxa1Afhs3&7Ey%2(6iF{RfoP;Ve@sxD+rU(*t|h=;Yo$>a*{$Mtuvw5I<0()mUk& zR@d8N=>#mUK3YxP3Xiu6#9^cL@kNOcFB9$e!^k1T=yX}OF~Y_mgL|>3n#tCyLlP1k znXikwG*Rpzxol;tBLQV7$BB`^lGDi?QPEU!+>eHO(}zAG3cq>%|H1pth0fKuUh+X; z5Lm$B?p!Xn4Ll8il>weh1`8T_(ZPEL+PRN>iPHM@>$}D!ZE^2^<1Czoo}TV^msSIw z7$q)ei1l?*qYr_&U|0x{@bC>PHLPocOikp5LN8W>jj{2~57|w~z%cq*EWesCmie&u ztZ}aQK;u2@+(8aUqaJjYk&@%6?tX}heFB%%0xsC?^5yM<;-cP-6Z>b}=t|9%k7(&N z_2<8xwA{Qxz|&Kqp1>&?RSl8BxTK_FW2_ntB6_THVXBMcN^UC@;_+<_i8{;SLyc8s z?&afg=+Rf(%AV)n9*BwfBE8P|95Y`v%ddR*?m`_YFVAd5Q+L;cefnc4YO+2NG;UXl z0bkdr%1TQUHw945?d=f(N1Cu`d$7_eeS|sc)=K6!H=hndnllKV9@%`*+_P;gOUZ6T z6a{3o-J_#!U&(@3D?=9ylm-(BQTlh^bm9fRJBsbo3Y)D8IS4qrID*HhdL4s9J}61o zsE<0s4U~uHOu5O&##+I)I%aX<&S=7@rp7gcKwaCdlqau93FyqTCa~b10tJRk?Kq;W z3*g-`w~AsFv6D3ebKv;@F6{8Re<=@AB^MVL&il7jAnMM8;PdT!`C}mPSD8p;9;x35 z37G}O9y#RL78we z#Xn6CW=Y)L<_dOlJ?X}FE~9Ly35_8&d$?Q5?@SI(W3?#JdBd|Fc%FLsN#&=lil6lC;GK*c--x7z1!CAu=*j zJ4M@LbEJ8W-j|}oIivX}PM++Cj3Cr8zp7s=eSd7! zk;pM7t|#dSwvCm8cT1hbqZD-l<*ipD$zngc^O0IJjkcD(Y2g|5%*@Pu(4Je*8ypfcNjsY!C)=YI-M&jl`Ob>mgB20s1fmp2_>dR6|RzAxu4&B}PBZDf1_vGj3{>O*eQVFPCM>C?Ho}i|S zvLg5BCtrtpH9csEYcxA1j$lAa8nv*pvO^%aR*`#vhA-aLAIoINU>>BWrKL^iw+K}u z#6oo(>=@XT_e4qAF4&iNmPQMrF*&}p@z1pTk5F;H&a7h7%RASkhiyys)pW<%DJ9nv znkYR66C1^+)+Usxz%6mi(3mHP7H;{JTY&H6TM4C~_lo}AN)T|%U7j%G&^Tu8h#u@@ zf|iMK3m00jdd_ctsdx8kPc)aui{el6S;p76z#s;O zJpR-j@DcgczT1D! zg1%omx7CBt-)#VTxOnQ2MQg9~-Smu+*ZrrY-eQemM~FHB@KP9in_%yYiyhrQeZ&M3 zRs;JPTGwbrKtrchQ%nJQ2PP0LKWb$WqiJ7()#sGwKZoGd zIN)h}a-9{CqN+|nrXj3sQ}7WYmYp-syFAh)TEPME(L|gCJxW%c*0n?GAShWsO?x^{ z3Sj*%ShOxszk>IotO7afwCkcak+KE6*1`chv(xr*a$EeR0)$A+YfFPnVJ8 zQDLbATkP)sqP;Q-t7!NDXO;@%co6!1t0x|V## zWD+A>_K5U-m|+o4%N_Z>toY|IljFZDn&<52wAvK@5n49;p0vF7wiy9@st$1PmSf{{ zfV>)7gFjAmS#?%;+tuEPI!|WpIi6Yy)(Cq=p_IZktG-=@t`fQFa7+Lr>nU49a_X9vY146%`F?fQD0Zr0rB@X zetyCaiEM8Os8r8O_d7Xd02g~I;7+@s$%|@eps5pRyQ;Y4 zWIO~zf2(=^oe6GS{aNt0%kftu&Ke#9X;V*!L~*6%$LWPmrW}7*(q<>8Y<`i(u=7H| zl)%(XedVawZeJo3f}>|C%n{E*F$LK>sW}Qap{9!cR2LTx(j1v4EzJ`y6dPk3*KT-^ z?@X)6pZB=~CgWm$AwXNE2RV38kbp<*=yo#Ay-1@Q>gPUtjU=}r3dOZ_cfh4)M$m-O zSZaHkqZ-y7xXf8_4UD?WwsAp=TNnLG;UI95kBS&sxxy>Oj(tokTjFRO-JOUi5Fe!+ zB^>J=+!bSNB|l>y(#-bwtC!;|Z_zw`?$V`dpjOK}F`}vu8U{^VS)Wq=;6W8+I0Otp z*`R&xwQFq{=9E&b)#G0U z@d{~?(V;YZnJ5F%BlNVG0eF2)h|u74`!Se$rKAcOoYYy!V<=!)z}se07|esV2`b2l zl6b(24&WySTGP9V?!sBo7H z$PWS|ShwPN9xap)Y$G(toEIn@E`}OQXt-ZKp(_%u5xMry+xnI3_P5tJZe?R3Jz@3g z)!2GMi`6jjKS563Lod(`K(H#LGqb7vuk0G=3{S^F;?!} z4J46fLV{;t-}{BQnKKDY2y|x3h)$A$6ac(ODKtpQiURq;VJe%@Qvli@6MaqJ3ep_l z`{t4uk{m#-c0yB;U>c%yaO%~sl}8p9;qkV>7Ba;ZJ|Zg0@S>9MhZR|$#qK}&^8L<_hLN}Dhdqsljj0mXH?!)2 zPNbs_2cwqU9j~Ih)!gN%=5}_tz%o<~i#}1RaYC4Xds-X9s5T6pD3+?Y6at;&G=wsE zcQvIJiL-B@V6jeV8re>t+Ts2>4CnUDY1L$Mt#J9%-9^+QeM@exL0~{n0f8pkca1rU zH5MXT#+~(4%?A^L%EO$KHIj2oTl8}TE-%oiG=ELFuZ`FanSz@{AE(Dlc(v2`T2--T zMGtnR%WIP$6O52UrRo8XbvA0qi78_R;$HfkBx&MDP$93Rk0^pCxWWxp) zHANjADG>|*oL74f##q|Gph|lb@NUE5DUeg#W&~*N&3NGD?U32BWy=R`2--slwE05v z#7%M@eCpk50g%IA`1vXbM)JtrTT+Ecxc}R^;s(D82aqTQz%NS&0=}Q@cPV4{7Jw;{ z=ZxNlhLbH>jDhk%VYNhd$r32hL4!2AT6qN(QJ;&6^DQ=;nIBUe{p-Mg+1!8>$bro& zw|EZ;Z~(ZxGoBl8d4y#+O|&n$@>Fr#Ho}|}hYp37kJc)WJca2Wo%F*9{e0PN*{U9H z>*stkuD_98We=Tmc76q%=I^F<3J7O}_advFJbwHxu{sva0#gVu;I~w_tB7-Tbv3Rz zJGje{@@m+9%QRY}^4cXdOE394Z7ep95?kC1fM@Uze@G4z$f1Ud&`5XtDygGszMp$O zp|!uRXqSvj@3=24DudF~&t^9>HIk9h_3TN#x_(t`ay?cpgZ^;vh7-1>>_&TQYtUBe zae9^olE^J4*C)0Pa}ZQo2|>%L9S9^T)B5QY+HSBd(~r0tjq^kWm1CLbH8H+4KFT^L z(UV=sOruoPUy{-b+`syn{%OWj-MM@Bg#>k2ne{JVFiJCGHUlucRV^8&bWk^YMVXmO zU<50ouo`A{md-9;t2jqKZa*~eT^{fnk`BbvG*aOk?Hr9Jp2Dd!9S6RfV|HfFYLDfc zZs;CXRXx2~Dcr^RVgK0W&UUX{`mW@=VXj6KFMbRzc?-5o&kNf!FrON_g(Jsrv@{i- zU_2S7cMlCxn#_ipYAuadXw8~)?4HtSPxFbYqU$^bZ@7Bp3U0 zm)T_L*~A(}uK!X0h-tE(5-tW^}7F1J1h zI593GIiNO(<#ge~!8@-W77+*;y6Y?@o7As?PNAK)Dd0LU9nOiV_bjn!YtVkQph zfJvJmK*a9ew=W^uXZPjc1u-!(FZonMb>K_61DwY%!Q7V;5OF83RraXe-H$>MQPaQI z^xi+fFsIbk)=hxo-mgCfU`F)Mo6k1~L^>S!ER@b|n)_^#&Kif$;PPjwR>eN#infX! z-tG1VUEi127t8%jUV3G)d8-c4TEO&>R}=Sck2h*;;FQS;;R$K0z3wp+eDOA^nKB@UuVgX6?#Me$qoPYRZ>x(g>D0e?sk*Bz;v?u87r%8A~(ThjU7NND+m-K`Qm+Eas3q{T4!EQT%X9|1wMH2z$VJ%(C1yqs?!_GZiVhz_3hAVUiv62D+cIlII}Znwt}4LIn=7; zj6}vgefsn;X?c{Pv}C0^w+a$l9+tt-a_&aYOCOvigbg|ff9%HgLAhK*vXT~g$ zMVZSF4OwMbpRd3^lr{AT1%b4uxM|d_6I4Tx%!WJenH}AH`!|{;Aqm$|6j50G>h;ak zn)vHLwORWV-cNN6#KarA*LZ_Ok}Zsi%{0;EPN7+~bi~V8_1>9;`k$Y3fAE5Vy~oP& z)Pnai0gJo8547)rS^4#za3)02t5s7>0}K$|<23JdsckO*2Yga>d~;#Mj}}gpF8{ai zOwN&_cHUm!7GJeWcyeY0y(b;P5qPvv@?pa8|1zN7JY6t=?gDf7iW+L@KAhb|3*7##0w?t_G1G5GzJR~wvmpi zPoJ)sc(({R>P(?-i+=txHcSQ(U87xI)K|c4(FfG~(SDqJ0^eHxbRMN}J}8`bg?WE; zVhCn!EEovEZe6xO2aM~4kLx2YUc4CB^yqW2_vY!sUllk*)^gttt*T|)Ra9bt#80b0 zld|jxCxKlhjYzZ^`yNyN)MJ-APzd^uyazd&0yt_Wkagc(uX{1|OFrVy`}9RZ`X?`_ z><$4wmSbtB6;%pM0#kA3W@a0eEwh$Jbiavn-nU|5_v;2kwDWolksM{8@u5&|Fd}SO z7Je6zl%2#~-C7M#pFFD?kT^IyK;zdWWanym5*JE0T#{a2ymsLoEdTGAG?<_*s8w zC-~Y{Ja9qW*@5UyM~JTlUMo;|m86h|*@LfZSXttcKIVqL^aMxsN78B4iP;Sss!ZmM z$3KCIJA&8!P38V~S5UaQkxo}$rv|S`9EQPQYE73dF67@0_v3VInzv;A&T)Wk`*p@e zS)z-(otr!1ypT%=&Z*7PM+T2Zr@RE_ASM{+!q&(Ko(L9_7@)=NUl%HZ>SM(Kkp=v7 z{ZpRro-Y6$c3o7Gle*K&?P_Y8Jkt?>y$x2DmI(&4XV30O4+6g>X!=hC`1|{}jXe5X zGI(=-(XR@E@AHB`Pj54_bV%32EPIkA5aE;-FJ9a~s{%~Ck5b^$(>btmm*C5K1XnV- zX}o3>Y+3br*8lJ;8ggF3yN+%Wj4tHLrVNW zo#o4y|B=4*H~9JZcreH>wj^?&)W`ke$^*ygY$8}2yNL>_Ymi}%IDq~?~EJr7jl zr&ct2)dNP%aeU}?zxCw6gQ$ycZYqYmMuT$4%Z(U*??y@%B;-7Pyn6@m34joK2(-`V zBKe1oUvyb2dqduzrk}(An`s(k$c-Bdp=8DBBDQo*J<{r8o8$xJ7<2pfZQ?xZIjUem zAQR#cX;NSl_}O53%8UP|<8Yp{+uv?N`*#QM&x}^NY}H+0Y8AWmu&vC@ZY=>B>u5%C zSBelj_qCWlhgn<)Pp-G_R9vwTbdvEtx}nvhSR&Z?=h8H{c+dg#Xc-rWBKd*`?-^j{{J!#ya>YyQn0*KDgTF+Ct ze5K(M5KwdniW^6;cn4*2QNLYC!+{Red`xG9Pu&@wJBvysVA2Knu1I$WJNXp=!j3O; zaiSC;cn`MT{HK5WU+>HNc`lfq>I35piXHaz!>Ue$u07xS1n8{>3g3a9got3$VV((( z!&!muM}zs)@V)xLKucQAB36RY^h9lsgB4Sw#ySCGkEWoR)F5!sN5NcHZC~HTWOg5G zc=gJaubzg^bL91uH@CGZ0$E%eHU|-vukFxt1MVCU!78ZA>&&ICPZ&Vqa26eM%%3G%efUHr&SB)8wcuvzaYYR zDBZd|lMf6=(P**Y6)1yDE3zndY;3IWt#Yl}XJqp~?AZSdC+L#i(uLAe(=DDcl#uc+ zytv`r8RyK2BRSKnLEj{kOcCTn{<>uM$a0Nd<4>z~!NZ)W~g znU%oLaQUV1u!87f6<{Emo$b=|K|jT!U)of?@Y=yW_!?v=$sXC+M#Uo$DNh^$lw9v5 z@NemWYg!rL419z9RJ0ImiGyQHHN(lkfi~jBq?CLbz%y=}ENp+SB>i;eJn}ook|Tc7 zgDhpv`Y<`tAeiX%#YfbW@=fLy$7eU-3Hbg8sP=9stG#EfNX&kGp++Shd|60oS;DZ*5 z0(J!T0T<6Gq{@$i>4aCjV4-ePZ>ZxWc!0?3S749JPp<7bv0ze*0`&Ur0P#`$!uVIH zV+I&~VNI{c^0D$%per5y{rBJR@}*!^`A@fx-qpbHQU15`C^N3<{^UgixhqUr#95?o z`hHY&LV#NqH8oP>2+V8uwVn&c#*R8TJXjDK8fxr`89OozIIp|7Qbr(8f33Vc%v1dI zd#WlJcHRiIu4u6CjoN*8)r{Z#jpO*O_f^hbv3>jYrCI}_xm{)H5=Utn*~F}TLrb<- z3*La9KZTZ{bdx{y@zun$fEYWhu!1RzB;tJOL?&{dxtyx33rigbk*VaU?(Yd*AfM=3 zszt2*`>rn}Xyp~w8IIm>a&+%>U%bI~Uy562qyt~t0p|g@N#FLU0pw451=6iWikFt* z`2_T>nusK$rVbN2F^2e#D7rZ0E~bf2pj4?AT2>6=5Vu6yA;2jI-^yLi{v1sG!90e< z%ZTcBqG5MoUd0qVf_|a^%qp*n7c{M%|B*7c@pifhiu@k1ER{^z*--JLsYhCpKGHx9L_jR+l!wuodD`( z$k_#DD;r+F{QcWKLSCMXXbTC*QF{#M=lifN`442V>hM+NKMDYhT|_FFr`-vL=$T+# zR@2aP1U$aj7BrKi-?cY9{#H%?50YQWmYsX|I#yKSsPdwuON&KU12GT+q&EOIE57qG z%1jqSb3>uenKWuk4SeOgJV8R++rYeELmL|_(rM%DVyQ2BOvY+T4P+hA2gLWk>`eca zR{-@0o87)O_PA`cPFO78+7lECz0B6PLzgD233?wJLoxIx8` zr9h2yx}nf_-~!8D1MjS>pkdY1u)MylJ@R}nvAO}Dv|$@g8>i`84g#>4nc(y}(ftRM zxHktZ8e#SetXELfn8xr}x80ZxbsF7Ll0?+V~UmDJRdN4nLMu4JgTSNyqQcls zVP*>lHntt!IAzvWd;F_y4Ci1*?w`8={;GuqtG27FVDbZ+ z*bVL)X$Ky4D|gY?(qUXeWwsrmj$eHI`0-2K-stbKc*hTMYi%6@{L`-h?{Jv4>yjNf z?7Qvu`pk&E?_`AAcWP=XY9YIJK3($TlCZR#oRfgk0GKorNP!q%U_PRkoQ%LIru+nz~2Q(rFyDiR;fqt5r{E{Q1#dmzw-P^z?(ETHNABQySH$fh&#}z zs+&+9GieM+W*bj&<@f)02=PY;Ryn!?gxo5$woQdPz@ZcvPB~ z1t9eC2+e$Yb$Yjle5>olC`SyZVH@*4a#OXCYR~l4RcK{D4fx_bo%2{QFn+zi{}K?} zqlo=0ihKeh4$?2%eK-Um*H)H*5m6wk__ZAf3k!qNVIltBX9D!Ow{w7#A`OhI%+Y<^ zGi_mRzU3p01|DYgFfXrBV{mvl4(x_IrWifwfAQjT-)*piGGHa#C_iQTEFRgtL%r<% zFH?}oJP5Q~o&pZ-_x7XE_!D^K3DgX#-qW{Fz&#f3wY0Q64tz@08yd+JUJy&S0MNrN z!;l%hs{*a-5V%7=XaDvUcRD+5!)tmK2Xyc`ISq9-Cr+HW>oo-7%RdCqO(Lz@pchr> zdTZU8>9DeS)qHhsy%YPZ+3;gd3Sn-AgaWY7N#kBt)`_w7SI}CU{_2b6`RGjb00$lz zRdfV%JpD$>(7Lg;8#dSvkzNS?SF!k=4CUm0g@rN4(@t3X>S{%8u+6`44ds8wpriq0 zHNcV#^Sp8qQ@x!YP%1;`VeJ%JFX031SV*zn%l>X}7nkE21G}7BkR0_CEqG*!M z)tnP6ru5g&Lqz|*-VPmwzMEHJs|oF|_>L(&KSSGXb>xSO(uwx;>}&(3~G z+75_)pb^~R)%ES{EuGgtNDJrQ&P8^YZUrs)X&6jiyCit}F!gDGe#~dO!<)AY1|*7q z>Iqs8L6!O=1uh4xap6FqJb}hw$RCx@11*4t9jy3i6`>N~hKI$)XP}h|0E`%21f9I+ zXx}ksS65vATany+XxOHnEd{%84pvA-?6u<;SDoC?Bb&2}UE6D+ZA*h(Zn^7w!1(h6 zR<2rAOP->TUxI^0%<;rFS1C76UjHLB`x7%g?Cp~V^zQ;bU#*`SC^i zW!Rg0KZ_R?^N{zuyVZRceRiE@d}+N~Cg2b=PSx%rh`)mKRo|~&x9$#5tcX|M9(=R7 z!1z*4kQ^{@sppmp5>~8UO`*G!RY5-~DBk$(HgpCK{XB*LtAYFYugZ7J8s~+x553si z$GjM~J0Bt1+i`dn{4=do~1Ah_|pkSG9|4(MF~q{RC}LHDL|R^e=*Jpc*@ zd2n~UM!uk(8m4m7^juKTS+E{rwzG@N9V{&1Snx!Z0@Mb6D8@}qrwX4^_4vQX#Kk29 z-i_R#s|X3(9rwWwddik4y$ezpn4LX5`9eMTcF&WcAs7BSL`UA!GMK0o zXa{NRV|xCx%Bi_P)CF{)j)F@T>qvReUO*QGEGa{a@rn9@mZ0YY?qCnKp!e#_T|ZMS zULFd$B0s!`^!rR8HZzD+7KQ*Y2Gw&wHJgJI*$1|B$3a8lqcw)orm4y|_d8zB?U-L~ zGX^}Zv0&287I;<_!JgM!fGnE3CVtZwmF(L+#J694b71~J==cXY_5%8*&jv^@L$ATg zO*sO{0SCe>etaG21DeJt)Q44_FDyr5w33{&fR3($&7}e&XtH~;96R5sWgRt^fGBik z;XPV>e-E^WYdX}o9btb4`>Rgh9C%E6S+`gMdUNRA~MK+ z^5H*UN)m&mh^~5ml0vYpJzE|tCElCt>&7GZT~m zC!Wgofg7IxdqjllFRE|@TpmQ_kuhZ2CJBjFw|@c_^+?8^(D33evXq$Aev5X`5 zZNt~uh>vM?RsL1!&eR^g3SgL_m3Tb(Ve#TuKxbA0!%9mf%SJryEVFI5LOyC@{uo%o z9Sz3g)Cl$$F*C0Fj1>J1VDoqH+h{rmvOCS5Yo2M5%<*`S96D4xrlm3U6ku??y{4mA z@q)+gBLMXntXP;vcn!YmEBF6s`wplk)Me{qFQ^fR)}$0)(Ohp#+GOfT4u{i?>?*jTEP(w!)2O{shUD^jxpJSS&d4G7~rIolBjT!*L!z>&Ny&olmXeg1G(Om-pP z)iRCej7pvrm&J{QgSKgNbHsU!6{k*k#dI!Q1$JjX!{#V4p&=UZjl6cY*QbDqD_)u)%oJgGe-~ODGEks<0yIG{r!S+&Z+4l20tBE$ zlb}z*Z)Hylp~e3VKjKt?f~Skaeq;aNW=rQ?=zLEALvjLeii&V=0sCw*aSj12GcV8z zTokDPngQ~03zhW;fcv&hrF+Eh-{c=Y(EqP*_{;p+9nd(tr&WY{so(Dlpx>YpRYpB1 zu86Tp_qI_tEp*Jjijt`fEj8a)NgX)Bhs%`Gp~j8@LBLg^@CSv6CacTg#3&vV(%xbL zokWMm<#p2Zw$&i%w^Niq6+Rm8LOXSBVXN5U@!=zq9OB9OXhf%7{X(g!a*pKX+Ioj3 z7aXFnk1LlyJ-tZQ~>g( z0@RXRvpx^Uto{u>BS`;Dou_yR-*45`F_jO-Jge>cIEQLsD2I_(x2U5)^%#)yUH}j& z8x1XU@C7q&AHa8@M=xztTPnbjiepx_S;{#4S2^teGXO1S52releIfCRBXvVn=g%+3l#VGl#{-Q%CjuT63ZK%y4M{$AP(d2gg-2LSJsE&((X7J zt!z;28PstWk(Qk7u&(h%L|Io z8zM}iOO)-+?4qJ}+tu~;n?mtXpns2as2;>IK3;uf6c`k>P+J@Dr;T#2ZDRxO zwN1iy(0105Fvh*Z!!;vjW^4aPXyo?+Uw^ziVA!sCJv%K;!J#|gkNuzrXuuMaQLXT_&8%oa3M*-|;`gPmr_I>kzBXfY#v zwGvIpLO;p?{*k@@mdDypzQnHE#PAbMa>!?3PTUN3$yL4XwIvAI#SuNNYA=0TrI83OWm9f*rlVuAQ@DW(#9|j{0z)`Q^ zJ$dR>PMd>~6{4GBltUCRikb>4eN|CPnReH8@Stwh4~ z^`oGl)o^wOgm*FvBN%7bSv4J_&TaCsgpmzNovVNArAiDI%|C)&B=ON-SYUh+ z4&e5#fhc(DgU)?an_F#Qf`fnTGay__9STuHN4T}QosWwBEP0x&vfQysw(4KGMrBZ+ zI0WtNc?FcA?Rz?9dH8<0U@b~$9y4t2FZKQDMgQ>6*V@Oa9A{8bC^IoJT|>MCY@S=4 zDY6i!GiE%S_ffcf@lCM$r7uHV4+utEfz?4fZOI71bM?2`{Fm4A-^;`?&;LH$2C@8F z#zEU^Tb(Hpl$-NrfKflvWl*F3jg+ba2Rxj0=URCpF_TnnwE8Au%>ddL-&$&y>AStK z<%LL0gM+_yG32%~#_}o|2_Ty~QT)t#lWTjhvbaGM-NjbR+B1k$AV#> z%cF|2PA3yEV+8gf+TaF$Slcz12Fd!N#k6XCuJR)?1Iv)qCRf1HsU715|fdU!AO7+L|LO6uwLgkhshHyEjLyY?7=X9rE&y_ zNIGz7z9cUWG3SXX*O8a(2QP{3k`;C zGr_OG+$W;tZjA|U?-MYVNvWMkD+qW>=HD30=n~=K<&9ikUUtjN%XAjcjnF3fR0OG<`2$@f43Dva$0 zu-BbrShv>)Z&T`EcBUs2FT6+{%9DYmZ|s0iW#`UJ#SU;rzM2KyB_(iD#HPqvYGV`m(q*|B?{0i2`+6@&|NmQw!gxpL08YzNr*iv{%v0$ z6Z2r~JQ`S^QmK{I$2WVkZ!ULA6IG0jalOOgnu@`plbJuw zCjM`N|FsZZ_W{Uo0EEBHG!eTv^GM0D`+&=EIWqvafSjZpO=ZB9fP(-uEeV3xE4S|% zS0Op{gX9ML*&s}tD_5-7ha2Vfx+T_o8^@Jb#9k5Z_f?Lqb^N8$fcmmup4>a{zLNd2 z*n`=fa&6k$p}RWfzJvol!odOXjrg!a#>6nkE7YaopK7DlBI!%jGprT6b2+r}j& ziIj9eWaQ+WTB)_Jkrgx8V+D3c8c<6I;0}Wv& zyd#T9RRQAa#(HK6Wx;l4aZw`|)MHM}+ur?>*JHp26XGo}N8kipkONM^^s}AA*&BNeD(|8#Tsl;wCNDR~Jygj&2STh^vKq#X_42cH=xeJl8rzX2w$*rJnL{z>4Gmi9mISm5{{oegFKoTsv9yfZ}=* zc7A$Y@b%bFV~g+8vO>&mxXv_nIx$}FTk13_1%@Tjz1I-wo)#FUfy*E&cj)21j;p;B+Ze zrYIu-ek%}Sj$1%WGw<&nXNz~AXcZbds7 zi-dSh(T%uAHwsQJiH zoUGYQ%zKgs*{biTon0M&RlSC*lkqc#071~KfGfqTvc@C3ABhy3)??O37Q9$)?RCrh z(o3&vjjv-4^-LYD>uP{~elg-OAKBNiWmLaTTvNGXaJP3;O-eFc$nuVl_VxYBchg`7 z`!}9izjSV+kPh`xF6ea8Kg=0q5o~Zei7&T18kZw3fkS$IvM+=mZl3e5KN?XjT!W*7xb9ne@vyW>;U) z1=Q8N5a%-gxDR3Sv7-c1U5^|?WbBm9N|)&8O^x+OCpYvOVDAewhD-YAHun-6g0ymrAyJ?%fnaakMW=2RiqD;F5HjJ=wezktr3{_0uek+Sq>GJGOz3c!7$$^dn61 z)Agrdq=4|e2j0rlrDg3)e1y|V0tU+JKS7=Js)_@&eSONx4fZk~irZ)h&MD{HZfsDDq8KfcKhs$8n)EN9%hOZ-q3YOgG zA#FFU)eZCe5p)<&FLhk0fnDJ3Yj0u2cSNEikUfI4jLfnAONST}lA=BZ-k_tkOVZG6 zHn3Oa%tc=o<-15sSjvKR45~v6{b8nZ^G~$=8~2UBHyf^HV_$Bixw=oA>DbNqDn4tm z&}&I<1_jR#XXm_9(SuJ>tlN!knws-Q*qA7s!Og{Q&I&AixC;B6Xjb2aOZ72yN{E@vEKkR3a#_i#P{h)QplC++bx187M@_-s_3sT_F!To94*E-?(;E zHs(V%tdw&csNle`$d!QMqgyq&d*uwXf5vCUAyRVj^856K(w**!((M*LZ4Z#PPxMB2TD_i(Popb6r)_ZJt1k{>|;D zc}0F%8h4*G&veI$_>P^+m4C%;?$dpq!4L6)`O(TOZlZSx!+}oT78(@4w8yM_@M(DZt@tDrUpme{J0cxY zg?3NsfJ8# zBfkGITNg9yuD_n}VD#vA=q=|v*J_Zos@RY#`OjmU6OyBa#DtvQ<}rkMWA8RK)e%ZT z+DVKGT)M$UjP~|g-?(Dmn<%`F@2_xp83%f-NJ-Tp{HEd9&Z>MQ2JE-=Rj=D= zhgkI)S@hw(?~Rf6qw#+pes=ZKZs+lLvxL)lrl-|0F1bZ7xz8OZCOi!cT72(Rlb5CS z9G&JuEEbepS#vk6s8q9O&;N3Vm=F-lzlzkYZ7YZEynY6AG(r_0A%!(}zkYVa+p@X# z)UqS|yzkL_X|Newxmo7Ya-|v{Tcfst0XL8cz5v>l_<_PQL{CFJaBEtr%77|cTU+Pc zaCSz;OZPU&CSUC}n3ni)6#K38@V~ToY?*)GEZ^f_E|>4irayN3?b?1ri>`)(ZYD!s zwGXH&ocu6};w$b{+A(N~HpgO~ev*s<>ppu@Ro$pPL6 zSEASz-_qG>XQ=$d-jL{M!kKT6uKvT6pz@e-z z5R^((b}Q(Q`_eNq6dkyEc@r%KMMTb1n+97T)*Rd`UTjU(hbEANJMYE>KagX{Y2Msy zJqfxPr7+eIM`m@Lj|59S#N1uuj+@)<#>TppAehf!c_YPw;8-nJ6|m3$15esY1e^^l ze2%43h(Pn51yl?UPM~fwsr68&u1ZTO6OogvH-J4_fFIm#O@Co|1ftm-grEeo__(7^ z#?rSepdyz)1TajEG{sJ~K7qKBKC3gbu~egqdHDpw)x%KH#kFkVvIp2Bxl#}&bK=*n z-E7t5X@QM##`|UJK9X61ZjWldsVSd(VPTe&dPvde$w+tO z&!v=}fl?=^nrdrMNUK8E3lll)+!ItopfP$qfO)KpPiH;=Cce{zfpg?V=B1B*qW$?0Ee%r)ESLf`2J8yPxP@%nOQPiCCoeoqH ze{8ER$WEsB?sO^ z#LUeMd8VSRwLg8Z=Dm4W>CN-iuVR9-qI`SMS9`It+}mRn5q@;Es^-`St8T|soNXEy z7T=4F_w@)&SkZYr^L|d%O94K&;7U4tq_c8nE2r~7MOD>JP&t=$x|jZ#1->;B>)c;r z%r3;&H+8!G7WR!velXTv4HN@_K$l9k3cTU8GvA zkuCGAVSl{5D#_42G4qcu3l&8FZ(hJ(wln{;Z(L&AuDa1&}#56y^ z`5J3bze1vjT_LAAwomb9(9&Qp%gQ=_RwJjmB2v8_>B=c-rGQnVC10iX7sf!7ifNZl zgeQv*lonPRc@z~yG@)M>*Qn05skYB)k5%Lo9$oG2l|G}td0-MEP`*a1N_d?%!o(8u z{>w8pIF`8Vl7I1HjHq??vWil?g8|4qJgwFft*%4b)!JhEdMb7jcMbM)a!zS$rkczz zMso_7%*@5mB+K@Si6n(N+)E`%K|zT_^>@-TGfN4rr~_5+9YHYYgf^3LUn{5HPxypB0%mm;t1$V`~U7$0xz2J5B(OTr&S- z%|Xw9VY8~4mV%3&iU#wfb5AVETjoqtu$@`joLNAGq5_>&WG`+=0ByR* zY<`~r+YDob9I?y~5%%;f5xVm_dGIFf+R+vT;>#l>+P2BNt*p;iPn_zW$Sbci;3;U$ zsw?e(&s*4*0E3Lh z4AKOe%{mamj|tcokq;5gcGUtRz8A2xqiVVu*|9XmEkL-4y z9Ua+%w~T0&|K?)$x8_fizh4f)@>7Z2YppVov|8hDia!CsfKAf*ZYEHK$Aca z90OpNZwk8`*{`bMPLf7@4}DiKTp9S8{q=vD2woQLTU{SLeE6{1{XQc+08N15SGAdW zw?~b2wNH31K<3{8?NFfOSRlfLhTvDbk6R%!HF=Jw* zTQLRErNuScmBj@@OPvY!fiWi&m!y=NCe@Tpdav*U0ZfMFojY&ei=mdlsQw}_(z7*s1kiiLq8^1(Ac}z20|WIJF)>tV`#Esk>TAC^6?sE$kpM-> zp50kPPz3I7>KJEDwGozA5D0CJt!?GrapA98l6rcvZG}5{N%ETpSsr5#WNc2C(d77! zvvZ4b!}jNNCk9^XsLI6ubHq8X5pQD+bYE+wi|Uya+EHcx|MatYPYqyQXI_V zr}aD*mityEiQ}7N>q4CaWNZ%fn$-G$_{fEc3ux`C9PJDU*#uc>KXuMJlh+0aw|v)!qGshG7!8Q1@c7 zRe6;wmX5)cxIVyub@FSU1lq!7py-n;Qny66T~lbddmmWVOZshn6&m93*z+rD`J1Hh zKm1`lZyK$T05|vLH&nD@8_4a-W+NS$5z;#~6%^{^w;k&!w?I9jkK`oAaz+Qu7rOu= z3T9{jWXGlgQH){tAVo+V_3y~qp#3J%Pr2Hvn;a_&ZH0YyFU`y`I$RgZnrXGHRI1bI z=GHb8%3s|*z`=*!7W&{G;9x+kRWB;P<^e~2NU6~+MIo=Je0iIx%d5oR?gz0o@JpR} zq2qXi{Kca-i7+1%1uK4j!Fv~a(GYZJ8xALqCRCmUmV+SC;6*`X0z5R{ppQ})ijHGI zd&H?`w^!(dI8uiUb|H>%aBj0io%@(--(Z0GY@#coE{<seCXxtsIY}2i%E#nHejm8f^{3Zk<=?Y-pElLu*i6B3cKN}=WHwvb@&om6fQp>_ zRX#O*9kE@#MM>>yd;j%4OQzOOvH8MzH`Tv-9&CYVuj;5I@*ZAnuU6L_trn<1Q?9ti zX3U{2!{1^&%2_@>FO;ezje}>sqcH^+nZ}w+vA3AP99xZol5TuI9DB=NU*FrMqJKdD zrdtP3enDRJY`Wr&5af#z|0uQ4+(n1N_1v_ko&LLDVAtFz>#3C4R6uK3N+&Wi|43t@ zo{~1jk9=q$2A>Oe4CmRUe@loQ;Y*WmE&(JpXyyt?g}}|m80?DW16Cy>@_A5L*w&>U zb{=w>{HE~ABejN&0o3H$0*-v>jhR560`Plfk@ipvWtXo{n-Kcn*?9eWU;l_5zU<$- zx_+GI+hzA10hc;VX#Kkw42JaSmT*cnsdoa4m_P6LRr%@wTnww0fbYrpO=dth$9+V; z`=(SJ8n$Kqb^OwP@>xtw^G$+YTaP=*)l=O>>~>V!`~GsDo}P;hnr_Xx(eQkr%M4dIzPbB5#@_J$W=xgD9d*9SirF*xD4 zDb|8mZ=l33j}SDQTXsBEDP23Cb|NPi7B7@6IGo>o@RFl{MCl!`*{;-ZEQN4&c`|%K zNKo!#E@d{!XB8(f8A)d&$WbIg+_s*;ixg(L- z79W;Cz9bZIcHoDP?zJoZvukg)8w7a>?52)y6QaXfS5*e*ov!$c%j37jqc_%4h+65* zZrm3*CawZ^9*&mEER)TR922ywX=77kEHB;Wlh;Rfp)sX!)7xUQ8_)VtA#DZ2O!?fr zu_{+e)YOY!^na~F2oJlwtJl@0G?$Oq-e?B(vDzz-smj2B{nzgWtN+AprV@4Hu7VR$ z=!+i+kc9tyh<`jkmvsFVi3gG^K|`r2v-Ef->^|`HZUvh+)Z4>W+kJG!9f!|TZ`Q2L z%&TL5n~sbulLuPw9S*P6r>-EA1iN}z z!^xBF2Pvi1%asVRg%L5Q;n4Jwh7qt$0`MxRju?Qv9xE{0ztc75`&#)H9>KDc!=>=x zPgO-?`g*~$lly3{?ednTv03l0U0Ll!PDjrqvppv{3!FK(Tdd$r?^!oR=dIxV1+&6I^Hj`Tf0}9D_T9B2Nq&%%&V;RuZmfc2%Y`ss6mL){3~Pe)e9GLo zxEQC$IJKHIQqXYvo`K5iI!EuvV*Ow6mP`XeCLG3(FP?vGuG}lMI{N0_2411))O)s1 zm3&!^ho}RO2hzJ%q>F1j7VLeSbl*Ka>JHRrjzI7V&Xw-<>rZR>`*m;myNH|THJPUt zMRI8n#%U?3F}@6@N;XDY<@~RTQrWi0S?&AF{V6Wv(i`}R><_RsdJstxH~pW{hUBJ@zWjBu1d-Jl6d7B82o23mA z`Si3Emxpq)e~JwS`crw#ELk3=MtP>#82j#ew4BPr^NVt-Q&B!meVK9L|R*HN%ULerx!23SGHtj z%5!hJTrqbV`9&;bY5|HLH~n0qBlVI)!@G(dLpco%D+}ccO)5H9Xvy?TfNFi%d(V@R zjwkO<psDzD`V|RKWvBKkipx&Ax9o5!>pSko=9tx-A_ zO^7BQq3*>nS#c{QF0x|kDI72EaWy{{?Rc=_ttBlQ23RVdo=}DnbqgI^*RXqXDw6{>ZLsghhyKf z>ew6L?=Jqs3&2A|H%SW0^XNg9OYJ&@soY$D*1%Z4j)SH~!O z;Yp`;p@V(Y2+U*M-H|A+50r@m#m3?UX%y&7v(*#DE{cg&di-&_Pj~;o(SGw>4a}=V zf&N^SPv(v+CBL++V4di_%bx=O_<`AN;_8IRdgg_VCSM{C2VYsjn4%gmF)4_6Ku+@d z`ifFBrKz7c{slSAPL~_++<}Fq^6O|Ty6Ps_hs52SHggpH)Y*gS;@(k^_uX95_FY{z zVI5@D=fE_b`{7gYALg{E7q3yDzV9xSLUdmoxX$WbSsD7tF+s&l`yRaV*n(8Xw)AJW z*Ml7s>7&Z@wN0KOQj+LOmlCtRoq-QhQ&9<3kOBG<4mR>fi@d|R9i%i~VqacSYA*nt7$}fb5wAO>|m-$!n(^}O60)LxYr?@Tr(i$J^ z+S6YRwE<#3UMZ>J4TTWkgyYJRjn5JqmyxsY=O!)S^xIy@({6 zc8!vRt$6Htxw*Cc{OT(hbSrTkR(4h~T1vg8-m!~OooSGTV zOLv;>y&~?hn5IXXv(>p1Q9tahRkp_3AM-dX0qv=`&g{>5#s9ej)`(8Jyho|{ZM2Py zI0Zg_*0;_Ig>PcJ#nwfKu)4mF`Zl~q?WRyDbG_L?@b$%F0Lp!6YNDov=YfH@%*@76 z{!yLP3btiW;S0457mM7jWZelT`8N4ClDhI`xbDBP-d-IEpq&{^-#dyJ8jtqey6u(2 z#jyKezmR_qUBC=77p0e*;#fY9BW+AJjN5j6=BrTqG;&EiPvZf916gtOYqvzjEDLg< zu-;s;O+$Bm+`H*}iorkipIR9Y$Y$fmMve0!J8N^pU4tQ3*NByeiPe zhL58)1$#E>%luH4sPWw3@^+|@{{CM~^uXg>ezyhLc?cB}dGup0`6=VlpRw>8bOEFu z5!>!F6}CN!VCY^YCu0TH9{PA*7aZHQYuEGO;M*WJNnrm?%j%u0Y3KHyJ9n;V(+Hrb zN?BZ7|MAE?qqVTF4vn@Z;-`yicyaFdlC0Cy9<`~EWI{E>3^u(uH!|fCvLcd`;ne)_ z;qIyFX=CqOAgjv2PfXY)aaAW-nXJ@E!}O;U-kGW?kt4oyS@egV{Yae1gh*8mn980L zxm1_G#+f_Qm%O<;g!CPbciS*g3luC&Q@A=&E6M3@o5_4`7;-o0GOLC95@!`fnAE9YkKq!?Jkyn3Yn|p3L$d0VYg%J z(+1H^JeK{f>>0WNm(gq6bjwRi7_?O?HeFVk7jYu^*&n+HjMBQurmIb{&bsUVtfD(X z^ze0}aD@#a-5#AYC*`$5>J8#N+LNqlk{v2*WVhxWMB0e#ivscNZhB(n$I+dAu)@1; zi}I+AH4hW& z6fu8$hyHzzs<`?Zi`55GKrGk~M}Oi(2Dt6*fO)x;+cWvg{IhIY4Sv3+?gP4qj~wX- zLcnaRCVTt=!>CCG@2P`v?Dyyx83DZ{ua)t|tsgFl|G+g*#c>Ll{XNbaP);SYMmZ*bJ6^&)qc$RUkUyva?-$h>BAqy9Z!Vm83`R#@NuB zOk*z5qlbITM>kh{pE?dF-7nqXe;)s>0KWZP;r{)XpxMp^^mAkEc|gUe03<%^yLWH5 zem$aXkY*R8<@@S0QOfIc`C`K=QB_ripGE6kry>&;3mM;04@nT~E}q_2=lXmCGI-eV z7`PA~KOhe--S6jP+NnKmBtAp3uU{#Mo;WBZrU2GI$-0Kr{UA3tP@81z16jTNMBXDi58ZiAi*Z&cL7*Q zXwQVAq1Ab(v2q?s5OeC4ZenH9H994i825bng1|oxt=6sGXZ?3==!~<$)AaSTr}1+Y z9fEKOLF0qXUA_Jnlf~(~>l>j3H&};fKFN)W<{4Ubj3HFIkV9D^OM#+pA1-~fy-2Iu z+fHno!=h66A31%7ot<4tSs4PfxvlM!>*32n{1-LvzpH^GhG>@8mM{wpGU+;j6%(6P zOkl;ftko#li(J!T0Bg-JkI1uC{=?ts()~|gcfse9y`z$&GZFG%Q~Z+9Ij11EN3##? z-#4??#5Ggd#A)02JQ+TRxhUm&xqeO~F8=$v17uKx*YdA5_gr_wz6kPW_7-rT8@S%W zr9;216D+pHVkIkptM^NFErk{=@x)7kfX`A$)c7>#>&HM6T%)|J&3B)^e}PRpdw>Q= zhaYwr2|8z<2um$!zWCx-Z$2J9i>GA$j(zmf`-grh7O7alKe!Xi47P(W(@AGfg9XdC z!3Yvu61KjluLJ!wnO5(rFc9Ubf|d9EOA}3^5X>b&RT=1xE-flJ|L5`J>CMe5N=iz) z*>-{q|9rrIJ@kLztGu_nfvB_;CLkc7JcJYu1KrA0Z=+{Kn`i?_YR9~fb-Ga7mx@$q zu;D)=FLabN;s6Cb&bmmWXs2mPS)j{;RSK?lRQ9wGY|S} z$l_+6gt6cDBs9W5$6VZ)O>|efru`FctHtF1qLJkO<`sqMxTMzArq!6GdsmB%OVuH# z95KV}Rd(2%Js9r})yPN#@bSGqWjlQC_8#RmQ1HnXHN|muFxwFlMvbIwl0l^Fc~`NP zUX}bMwJ4DOjI*SOI$t5h@s|DM?D6BI0XREdKFTIz0G2#!tExT+!lGP0<4SI6Y33B| zgV(NIn*ow}ED-#xg0gPu&Drdi9OVwX@xB5=LfW@(`8-e=I{*8b$#0vU|06CsT0@S=fLYExMR!6&0Rn zj45AL{wTgXw%jg1Z{@+ zx-I4+Cubv^Vs0Wo+^J#lc`}IfKCuBi${?RB8dQ~J8eu;M>CQ`mL*MAYKP^^~2Bc{U z$o6qyeM(fW!sy2{N*!M#H;xf9a-CBP$mW*>x>hF(EOzbuAuqczw~!z~KDRxs$vzvo z(^>rS_>CX^Py5yUKkj!IU2eTnGr3{OBvO;B!J^S0R))1FulE==xYd>ll|k@t4e56u zOoIA%qKEAVt$js(M*bi%4I6I4-rJ3pPc>4?jxEZ;JExm|%^zvk{2B4)CCdzZFGwB# z;q&?F!<;rs1GoU@fN5M4uu-LEcras$CHW^z!<_~kx2TxR>P*k`&`=DJ50hWMnDf}9 zw?e*t?Hc#D(7H9?b3u*$Kai|`4FA6;+_chtb)cnP1Zk{cD4CGl)=32sr!wxe!?60!a3)vwzhl-WrZD?D`r|+A0=S?u@`dkN=yj6a2f0tUh>;2359{C{k&$_vR(j0%D7MddgP|gs0EaqZY_h=ODHqHc=iUd>P06S(Xkhbh?CBWYtf`ONcx2`~A88b_ z6aW$uWD$LBLV6@Oaw!*5u`dW*jl#Q0bJ!l{mDJm1G3oG+%M2CJzFoEj`LEsA%?p&x z(Wb<@%R0_7vc(C=hju@rqtOE0Fav${B%g5pdU)RFu=93ft5ZfI(C9lE>$;S?r;qR2 zYmZil{PJf=o$HIGIJcAy^FejySYo$6@lyX=0sV`@9EF(8KYk7m1$z3pPu6O|4VQ~D zs*d&jwP{OQB~2W=)=<6<7d173j_G+w2yo>nbo=<)e^>*GA+XE&yqc z?q7EDUpPpo(4PMoQ}Wk%%p2W}xA6oXplxyq*4|Xi4z@6j92IRGt*%{?X_>mAc59+~ zt+?6y3P3~J(LjhRb;^AaIaU$I{e_Ry#N4V=a@k+R)J41|`=siKo=QiR##B$d z+RC9JZ3V0oqLt+_$^u>aS+^K}oPFf^?XItvWAYxoJi0NhQUMIC<<*Rl)$IH|PgAW5 z#_z-dB6Gii{}+t98@c11`v=F&+wxh+`Zy`gR86u5mu3>O1ai;vr>t`DwvIoeS>t<} zg4xOV->od|*V+YYOLqcB{n7rT+L_lw%7Ob&G1%s(9L83h&WrqN9nT&i<}q*JP8>5` z!FTilNfVEs)^&x~A^!q~r*fiseocYj)oH)R!@o^0|J~nsExZfVQ1Pj692da^V|wv3 zK+Oo#{5e??nj4-cCY)GcgfD7@`Hbb273;-)`}ScZmJf~{?yQ^U4LA=JmGjwE|XP*4z<@vL)OmPuXNaCv({Z=Qafzjslmg^k2< z(0}>V!OQi^Qyt+~-A!{nYUVaCY^*6bc+p;w`xa76JQi~6grTxr{<<%UQ+T}5IBSLT zcs*0iaI2wSA3h{F^@H;a`#QQ1HD;(K`ABc+7Njq*-sk2cV4VJ408nQ( zz9O;XA|~rHu;jzR>s3B-Q{EkZ&L!F!xw_je!eDt+Ud3*_74~J@#_Ush6Qtab>l!o`&Si9h3@O|adR}B)C({O-CPY; z$MJeo2&U-PojZ3NFIE^T7^;wEUHp4ab;ZQxln*Y2(1G=j9{CJQ^syY zbdFBBE=<@3Ly~G`Z0IJCno5HaW%p=A9EWdLjll~mR95QkoPilU7L)itlz?buZ402VOaZ+a%8#p$`yhjhFpTa;rVQT@QkIqFpBpQ zNV<}ePf#4IwP}e76-V5&e#l~cv(w*5$3BifOY%@|AV7ygxM(s*dx*t>6OqM=m}ug=XTPutio2HXtBrmhq$ zNAdbNiOUO_4aG|)$dLjLGZQ}L8Lu`p$?1Y#lgCO%lR+Eh$7<@=cc0n}=jZm3C=K

d06JG@XfJjl7@f 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%0AcWkxC~NN1=@Xw ziZnR;L-HNjI*w9tRoy;EIRl*`?vBPCyQNfP4)Ai5y&?b)t}jnI_eT>pjP5~NmCY!b zYt7Nppeafm8wO&4{G`q8t~A)u^>-Z$G>b#1K?#>JXFJ?Gf%gD;bTI4lR%(ok=fyZFY}LDxNrD zreAqX(Vyr|*E#v^uG0{i2v2?~sa?}W{w_RArpMc3YSaQyINU$RtR4l+^@55@igcyL zyidD*lKtx?ubY6+MRPcCib9C-`1-s+v{Fwi&|2H>63v^9?wd~ZL$l*86+d`bcfBv| zb)R^;uD6n|jyedJB}K8kpBU$~&q3NpW9GK94l`Q<$%-9r^_JQ zj;TbSaCfkFI4m~GTx{D_@DayQVQB68lEY5wd*B%`-f<1d)Z8%mOC1zHD(iqzag>i5 zh)RZkgM;UKk$zdrJb!z}H;Z42O^rI!(%}S90247qg}O}x-|%IV;!^7MNB3qSO%_koiX zb^oDF)6ySNCmq|)wbLIs5%6DU$x4M`ORqm!b){g%p8WJ=*eT_^yDL>wp zO)+-q>aT=8)!~TA50l-f%tT$r;S)Fg&dKQ#RpZOsSzLndJT*~CM*=^We)9D%FeML$ zzAWLQ&ZYA;hj{4qc%FdeJas{GSey`SV9ZX6~oBL2AIS{;99M62375uKSd-? zuUg2qQ~=?3vt{+`-?12cANXk*M9!Sp*TNDC-%RE(L^z?w-Njs}s0huqa9c0X z+|nDsO(msFfRkdIimIpI_=uiGN_Jd1xxVQy{FsD+->CNcDGP%m*)beiIU9GC>tVm+ zGm=4=`Q50X-?E@bBW@q!%)6X)-ph%`F^gr{+50Mip`iVI6U0P;?J?P#7yeq_NI56Qkw`1 zNKCk6ZQ3*5Z?B39=i=)@6|A(v+?<#3B8Vspo04GhtQdauK^W7NZ#)Kh$RM|K(JgA6&^7%t$UCZcL1j_%!8K zB!w#)WKc)Gr!{@sb{cj>d!){r=~AefIkKyr0fDYNb1W(*VkUl*IekyeCnoOr3r>UH zz|A6~I?*dyk6Er$5+Cbi_+V0e055k?^aW;Hnrs->xdO^`+9v(&-^{jz9C_Q9rQ7U?uAEl)om`_R0Ht3lua42+orF`}Qoz&mg`I*39 z1DR7LB6XQ5$d@MF-Bl``Fb_PUy*Y9rwpme;lw`8PI`%V2p0QdyxpmP7nOv3`ym>i* z##3+ka{}aRujJLg48$n2y$HS^Gb9?zg4q}!(8uh}ThG{#K8~WF(t^;W&}ACV-(EKO zqi0?hWEhfN_Pf^(WgjdEHU(@H3Sd^tpv=rp-l$?xvEY=~>Mj9QCHqLdac3ZtjX-jO zq7@2G{qsy0GTaFWSkyP?^Pgmb3)Gj~oPr3L>>g2g8Ei$3p5snK1S5REjujB>3_#|@ z@4av3z3nxf#?>UjS#-q^Vrpfn3i~keihY?Dp5S2-e7lo@S{#2R zbQPKG9-(u=$-`8~wt_0c?zS^`2lspkf)Pa(aW|$-LO9$r!6aeLAzESH`CellEOzRS z1vK1#lMn%PW0(#%?ZKGkbCCKI(!dH`d)favfA!t%e*quRSfYa)qjf@50*jv7@JXt* zgkPN|M_D3!?R&FFbZ6c_(EZ^f!hCX3j8V!_8pS2_i;1oK_xcq3!q%sptL?XH-$Y-F zxyBU4>#2Vr(cgL&mFsBUV+kc?*-?1uQH_-LR>7SRSgduF{r__7#Q73uWbvwdjf@(UE%Qp1CLCx>jvei7iHALskrS7M;eRz+*;Y!vC^ zYg>$Yze@49{qUq}X&MRe8l-bnvh-msu4*K#CV7KX>$ue~_Bxc5WmKa(&8mFXFURgm?08)6H-lYWob~1J zJoNVYU9%oE#{_=4SwVHz+4Is2m%gYx^9nY^+^8IFlrzz`UTLyLtV+fl?j0+5dPE~SLpvS$rn^X|i6gQzHeZHu&;)lqXm`tutyq$qm2tB(i_UF) z`N}}@OqM4wnI-94&^)CkMx_$a>-)^nvBZHLD~t%Q zTpim|h1_@F+avfrWXj7vd?gcsE?O!kziLiR`-=uCh; z;mGIL!fyGavH@rE0B+LKp9InU5HLWeCpS4`7_UewTOxY3d(`n{r2su)TL0Ca<|!{u_*+-$=ssUX_%#zqE5eFPT=^2{MJA zLsd%j2&E>DkeLfM07HGGp`qc(`w4dwc_B^MT07!}f#IL4{dwXUE{O!p=6}q73_OJN zwAGbMX$);;nmcUyfhu4^`&uu}=g{imqF}j2z*96(Z5zfaSkv^drS7{YRZPk%|ec+kxp;=cb^PZik3jR_KbQO(j06>l9cq%Fq) z5CK5AlrqQ`a_=+UG=Jg;{G;g@5h%;7T&z-@!@DxF{9D`^$zIb8y!J<>1E?KZf1RdT zx{d~M_&LDcdvM-hE7Zb9eMPv~0F?XeSQ*ga-_I{hlP+PHwpu&y>X$ZU+#N0!snvY} zezbG&cHe_Okk{*cU6oz+_=yLfj(AK$MR!$B;chUXs%G%Vpgit5%{zo1H+vgsm39W3 zL%=7WFUtP*&`vSZ(`)2FPUkrwGGa(C4QiwqAQNkMGSSZc(u+^Nq|V!!dV|nDQBr(N z&rG7OcDRFRXzSfyNJ#Of6E)6|qyPg&PA1rEyfs?!ODfjWBArL%r!B9J|N9V+v&#u^ z;~oZzWG8ddk@N-=1!zDt-{q*LS@Tbe18ca@RpdkW#al) z1b&R1H)9|o-|@V|+2gv046nzvr571t;Y;hhH*G4(jS4{VNN3<4Z9%M1Eh8yX5(tfy zOesl%;u%@qvDAoqL6^x@n}A(;)p4R? zrQ=rzvi;sI-B2qnIDnKMwA68YG-<0-;BQ7#z>ob1TkV@5A`2d;51>lKz??4_YPr;x znZ#uCX-O~L{SmgVlnptAp9ZzR45n{ZhrVd>a(!En zpzYN7UizP{!yVIpV8E*)8Y6AuDZPFWUO98f!ZveRiXB7m#v$X^JiP=GIMcUxd(6~& zMwCGL5@**5y^fTb6Az&>S8gAuDHR$?VH@PemlcL*gjk%`X)9!^XtLSHF58rmim4z& z*Qvbu7q5`Qi$w=7cGz!bCjOf0+>hj#zOe(Je@AMmTotMrx`xeD zErY_XizOagHoRJ{?u1_SCH(DxqU?$#^0`ZHAna3|uQ1^Y#i-E@UaBaT%hK8WSuIVy zmaw{d5p>t({)4Iq+_X?X(SBP?)IkxX?%c64>@=my60S%ExG4HP>QJzcDso7^f~@;So>v3ugcijyzKI@>w%pZGNN zt@%v!Q&fM!qz!pW)|luYoOrWsQgo{?g`Bhs?Ob%R!IWQJRpUT)Jzl0)?|Rq*Wvdxn zF0AMiN|zpvYzka@Sp>;Us#^6DyRP!uhwb#MF)*^_>Gb~S^GkCj9IL6DWWGeomCB|7 zxX$~7AGL@zfK4UUtnDSLJKkkiuX@^G%FLw}Z^~c+vHIh}plqJ*U*u{$=ldNeyV7iCs8v3cvMsnhx41 zg~rsl65q2BV->YcInuj$h#=^pZSMA6df0*jZ2VaD8Hi}*UVr*jnzm`0TDD^giJa-> zI8FnmDS<$D4&LSjtLTA-7He521}r1SS$BSyP_>s>xujv?&AhawXL2jkvBPxQ3<$oW z7`*{LkPE6_K5q~H#|!M&*Kr-S<*t_uEe>8gWKZH`vOY3i)V^-VBcD@EXo^M7-?`RaNsMG0!l z?}r6wGQ!UG@17-Edj($MN>Y4#8l~@D13g8n+u-pVMYK!p0UM5vOAy31iN^m3#4*1a z_I&3@zZKe*aeT00BZ25r7`$NCaCwUS^rc9xk95D}e1T2}xN9e>1F$tJgN+W2{w$)l z?-=-vC-=~Geuuw8XuPT>2=PQoR_ zcDMvXTh$7fPx8QnoVRu*FTDq{3H)pV)}}F$PT*~MpgME9+aJ660~1rvJ9l*t)H!@6 z>*?_}&2*b9Wm)PJAE9vWfI$==L9fp?jXP(gnoHgJDoY~n*M_SDVYQ3%4EbWffENQm za|<7zvlj&n^9nQ5-dGVu7c^GhY6iR5m$~-$mu@IgJx|}W6}-B*bn75da}$I}G49o4 zVaY&^u{*lX!E$#=>TN)hjWeja|nz{e#sL zc*agm!L9qZ=4WFuQ1B{WnIXem6mWVQFP!*&d-qzWPPj(6{lUa_Wp&;xxRtX$VS?CJo@H5qaKzDq+0Dzv|Dg9O;Zt-~jwpW%WT<|F zhkAo7BnoKJlmhz%ggu=Ha*sTJEQ}f^+Cb}~`s<3420QO?xa`_n9vpwB(*dr@sTUD}wY?0MgxJr{@f80G%2$dM<4W;mv z0m;)VIWO1t|5jEORttpEtcx;ogw<}=uGty^0dOU4`Tdpjc?FIA&+Kxgd4#>vWr&<9 z?WF{8>*m@N*L0A4dZkbF-&p`n#h_d0ocE)#K)I3S4{jVof2)w|?Dd;?4IJZ=+1yLq z^*!jS@|FdgKmRQVjM!Xl*_h^PmA-=C1!)_X;&@Ch{$dH>CBkh)9}8UBJ4<0qXrd)- zQaKH(u086B?bQq?`%gB1*n>3VM}QGre*u(B4QKYuCj)ml^~u$}ls~k-(4!-1XK%{L z@}=|607HFD|JO0^juKt-U*+BqqTQ=5w;)0ie&?qa&ey3Q>;Xo^z~RfH!si1WZ-7s+ zpf6%6?AK23VirLR-xE5R{>iZQVa(PoFwaHT8Y_;rfz0gyLZB4+oW z{_Cm(R_(prLX!c0Z|yPN`WQPMDE(@+xJ=ZQ!YiKUF-tFZKG`i|d?^=Hu-}@mu!TC( zq+f{6VaT3PcutV5@=(ZF{e zcKmzz?#uhb9dCBJdAdod=FPQ9(I2@QHi`~aC|i+GGx6-{u3T!VRan^a0BQ=u4AI~D z!Mkrg)T?|pHzsBUKPR$=nL8b~0F7w7C9jz_^H@YT_bV1B`t`{<@^kUEHl~>a1meZ= z4U2BoIZx#kWq&-Ymr&tujqyditIMy!UV@UgWBYcajLY$Mw=TJl)bOXyC}xZEgspEM zR8lz(8o?y0+;?^aEU zt}X!l4(o6iw;&4_a%P5{lO6@~x^R85A^j)G0*=8&pR0?6e7Q)1UcA2ZwKedk<(G!A z3+4%$G;8nAGzT5&^i(i5z&%)sJ0(H+p6+eWQmNQ%qkkvGGe{GLYe{}l$NY-FgonEe zGX5yxW@~~Nz1g3?U}q=*+jnP2Jcy)BXY&xA&9*MON7B=O1ml$D6vSKct(QxhuRp;w zdSIf(R5oJA&vh~-{<>VSIT@-=CrqhqN7`%?RjLq}#`?=tET)wp|9`J8vS~At@WG#G z=K~=S_nfP%wM=WY*7e&BTZXjgt$ku0l^pEWJ_Am6cy#O0=-oB0dT)m&RW9ct5K+*J zid4bzY+;>SuZZbK*&%B0|Bjn3%9Q{9h@u{~!M%H${_jWUp#}7F#=oQn&wSiA<1go`F}|(NW~6u!(A7JEc(C#2-L+QnZ3D&Ru0OrsH`UWC#ne`MVwG60yOmcZQl4ZMN)^Z2;of={PD;l``5JUP}N#s zDj@jxRlqh^yjZmAYiId}G<6K+M>q{{u zUlL2!{Vbj{{`Lvs@O^|XL}~!=#!88(Gr91i?7^r7PqmE-bi+5TzSnqWUi(_c_7V%z+VTn(zT$(@o;*ObZr zM*K0AGe7;qhijSFyrpX&s?eC;{anH^8Xjn1J^%Uhr&NO2U?oc{RcPS{QD@XGfX+t) zyD1Hjv3JeCS|DZ9{K@r=`Ifx@e%$%liE0Vz_$yhZrh3Kr5GC%a2lL+dS`eIcCRlsv z)Smso(?P$nISYSkjj@<9nK5da>?SSIpcsTTjpW$R${%>}ArpwINkzuh~48Gh=o#)ssR0^(IBtgf;caYF>_oR?q)(LhglKa%DNKn9vGcb;00l~ zC*W>mNDSX7E9h|5F8{bH|5ne63S1?O<2a?580zwKkj&YM@{HDLZy;JscAs=q{SJCe zDJb;lxlUjDU?m_DsBHr0m|WXd;Y}c%C<0=0KQ@Qg(s!TL<(4X)O|CEfua|zf;m0gD;XSPPtK?; z$Htx$%cgtBu2%PF$u@E_s>YrJU@8{)J?)+PA`HKiFn*M6>-Y?yXRFSwUw2AUGL^{q zj4CuVQv_yHPJdX5^^Qizh2oBL~HGKKL{vXv%F4h%eP(T zpCve)VW6RS-s`29yE9eDQeO4@yg-M?X^&z+(jSdEGWfPIw*3?$+UCpE$GhLFP{>j? z-G!i(HK$S~;q+bXlm1(z;}Jv>>V$4cpnDtl3Lnbobe02J zbak!t@o}2=ir06XBy|24GZlOf1%UkR-KTfNBECV@Q*P;G;e`9^4Z?Z~1op^~Fu`Zl zs8prJMcSIkRTDuLPb@?VUC?3FUT=`0sD+e*x4`Y+D@sM}5{g*wORE4jF@|t@_mxAA z6ZU%jIYO(%`DnqnCoW1(CO_e{gpkrpvHBk2R`q7Z#BnG(fr~OqJ@HF!XbU4VaVvpUs1N2U%up-qI4RMQ)f z^6(og2`MN0Lm^_rf6(!KXb^88jJ|#W@GZjmz&%4iW2T=(egtVqp19&?7%^^8|)CC7Yd+G9TH#jM1>GF?q3b;}C&V^!hvCd8`%hrbL&cm>~}z1P2Fh5pN^hyilH z*Jvo(I4!*9a{cA{o@&(oz3y9K6U$Z-&E47QMED>Sbv?y#69~fnE;O;e^y5A~@mpyJ zw&vY|W;tx2+z^|1EW6iMmEA(`k4wjYJ{_oDP?lR(Z5G3hSAH{d+4tacX$KavSHuGz z&q{-3c_9#aew<7>&1kyyYi{%D;g5=!PR>(=w~h7vW+k~FlEcyU;Oh-4ll(VfZX%=| z><-*MH@$kIsDa?@{@LPqm72T89g?mDgBM{;sCVrrYTcqmQQTw(@!|K;> zIe=K^o(?}GhDm|bwC(I`;a!rg;Zar^L&~u`Qat6RIOa#d0Q2@;edcy}2A)V_rE5;D zyz(_mAAzP2i6TVf5BpVb+?F7$LT@th8y zp)b>Gb0-wijBA-)pIi1o{z%%Uh-babWFF6&=5F(#=HaLoX+X|H$amh>4FihTo`ly?_5}7PXZk zF0)tD719W7s}{FVy{OW@?)ePcbl2M|_A(F~|`Se;6Fw<;h@g zg6qZYduBzIfUC321-E6Epkh2$4vD+x09a&u=^ZC^|10 zw%0rSm-LPZAu1Qg*~|xXpO(lk-zsGY?upAd3Lw0#dt5VB8pTU%HEYBPt#$C`Fu_B2 zW}-C|A4Rs|w@MOwYB=I0qPK12am(bwZNPCah@-DhrYPvW@o$MZPPv}}>iOD4t zV@4CrnFgJWnyqtmBamArIU6-TJ4Nn~FQyLYwjNL$Sph^`JO`>-F02nVV}*+PtD2@k;=zE0~beZd#C zoU8nqt4UwXswah@vJo|@{cIv{&CNlCjXtM2BdV30x7F>(lQrDj%T?REGT+-}A&{H~ z0xI`ktBbd+S)^yUNe+Ih8u>=WMhYrHvC|#)9Fc+i=1}wVp=Waw8-QqaA^2$ODSas# zoc_VB*{L-CBdVL&@a;@rMjx1^ERt#DTQ6*c#eGSx31nR(j$ z`LaPU>e`I%mPT_1jbx#dMbM0{S4%Lt+r9SRw(nyf#NGn5%M^{ARp6OW`IGtd9^rW6 z8ODOaqc61q#Vpnri5IUI>Jd_MPZ`U6QLbyxBJXw8dM1VAC3kOI{$Vt92>7WJf1%~i z##yos4SB@DnV@N{g3yq*_3(3AI zPS+klt)gWhw)~pnzEQ19I7s+MdfcY^o~NCe_M>F%_R(9=m1afNMX0rSM*PkJ;&C|T z{$dMxOE<4eUbVsp>NTB1`vZ6f?xny(t2oSDA|5TwwMVwDhTg@fkp(@6G9n#2n3HaL z$LT>C<_xK;=c z(3G9M0_g7*co_S;HIM+vwO9^>Uj<*BeFGzBiTEj@a@q1ErZlCkOB3_rVmD}CX@XT< z?kxe{6%!rj`gcxnl8BSD0^sI8$RAz?^0!}eTm`*g>38;+nTw0J|@%G~7rsRK!#MWongf^ahixhZFXkD8m!c!=o&aZ>AK_xBQ{{?p6U zMyimZ%fuuZ*^F(+Wy9PyAzl`fVIqHlhvNCx9lsn9v#SC!DBls{kT4hf#!Y;WUKUkI z$o=Y8A@ZFeWDyfVfPo}uTm7ZU_b7^NjUdg8VBf1!k;x6nri`Cl`Z%fA>_E`O|fti28^y=I1xt5T3-j;Ddpn(|4#{{5+RRiByFW{>q3 zd5-V8`E71aqAbNyUJsSzqZ_R6*xCT3d-V*|bLos1)!t@rI?0CJ7!|IUK49w#EYleB z%W-L9&YEFKZ4`(-8XrMfNl9DK2Sldg!+$9fv6{~7Zmkl!FZME%F6H+zkbue>O*tw> z6BRa{pURsEGr@X3*T2F!X2 zOEO6PKjdqp2NK7>#W@o4Wp51Hd%-8Qzgn+x{7G%smcdXF;YBK z$l^7h`Q#;QovllK!odr`Jk)t~QMQ;4dxh;?<%NzF4+VVq8I7H(G;z(1TX%(@>E+z3 z+1mBOB@u9bTogd`R7)DqYkihbjnCldC_L<}ZriT^2+Om9!L#w6*PV(DzTTBu!Ltl| zraJ#eL*vCUb2baeeHu@Nd{I64^d+GV4tpiPBq>efCHR@~y^b_5vo9y0#+IFQHJa$` zkWij!V>iEiKG<)u=6?>AsG9HE7=n$Q*sYus$fl-9j(qE4Siezh3SK&xvdJzp1rLKe zwapVDxstoCbD)WW9@7hDZ9x}73`-5$txfzba>iteW<1Z0-OxD|HRPId*Li-scb{puNqq&N z?W2CAw4HWDCP(e`C^Si9s|B*seG7RJ(Pl$;v{q`2xGyo#pc_rP~ zJexxo@cdS)M5uK9C2}Luy~r)GP%Vj_&hPY6EW0;ik3!M+7l}v3%H6aTLffCqmj#zx z7`~7i8PEzMcG5fCDSZ|Rk*3?<2gJO=&A3{=_+-8A_M-Uw3XZ~hGpgi)tu?{A!3}5| z-~S?1cZiw4F2LDcB+IoUtP}Rd3J$WZiwQ&3CP+nQL@s%{*)Gd$ z#v-Ab*fiaE#1}@nP+jWd+QUK=bk)d}Hc6-&ntf znBro%0(Sdl(R44NJM>Jc{=G;C2(WA`WDC;z^AZ}W=wO@MoiH&Zw`2b85IGeZ5Aa#a z6|osk;aZHkZ_ryvLekZ~S%;NL*q&L=Pr47}eGqG{Sm^_O#a>ukI_=efqji9K^sX3I zIxMh>Q(aW0BPMm2Bcr_;+(g`yEB$DM;Zok;H;u)2NXrAkEo-@;^(B+ADh15Z{#Z=2 zxjTCO_?9?119`xAE;$Dhs0bZ2q4ENB5>$}>2_&7{6179f#Ds#}5exaerX*J$5(LfA z4;n$8mp-eYJt$fmzHs$Ug13Sjb(xGpsU>w{52BNPzwjObUIUpQg|SoMaW*`{zV^_x z<=4zOr5?u&``XMWntn}hbC%~fk=GgN!OLyAr+5J`FouXze{rdZv>@Cf| z+$amn@)|k`aZ*7Cg?{qPAjFq@@-rTrd`7kUrWbIZ2?9QWuU?llgGv;a0<$T&J*3XD zr1i>&iAoP69&Eiem1AdeU>BeiZ@NRTpN`E=WT!nx{Z8985|m{Zl%1&?2Wf!PyqOF6p>CEX#94FFQauB7QQb=62-CS4W9m9>T&{9yZCh= zVpkea8FnH+R-<9>xMWGr$q`2pKtQ!eC4QH5hWoNgAAqU=WAr0v#$`M2?58+Yj|K!# zPZz!dmWd;(LDX#yf8^zI({;;~Zd;(Wczna-^tK56TJl1=Rq;@bvo#BvDQiHZGcRFV z-A3<&pH`0!C@^BO15Jc(IUmCG^fU!Y_QbZ@ka5W#@LT-fvz%KjZZdMtGkoH2JpJv2 zrrJfEv^d9$WVwyMrWNh$X>SCC2vbSuT~cokx>FhWTF7gjW8c6bVLgsZFXk;}^yGaZ z&5`EcI*;!NaqRrK`~HlhF&Ik87GYD~(OOGI{Ioe_`{EI;lh=Q4jz=_dS;+k~0ke|6 zAM$L&-l^w;+{apr_xECvh;%9AgAJ>sPT>OqWWX(P#s~Ghbe-|Mv^xwPf^?%D-9w%` z76?h?u6Bjm%&!!z*W+SYWo>gr*i6g{4dDwsF#t69*|V%j}da+O6j_yzC6x>v5*1jL<;OD5P>D7 z>3)ek-eDp`9-_uY(#8;I6TJ{oGDTCm2ut%4CvP+F)$mHLs%BcxYi&}K3y8!ON%a|R z{B@lS)&IlVTSi6whTq?IK1gRLzwoXpL8z`rm))trl@5{F0J{5^-K?bU5+O>TEXzpIz`F~r06z z$3W97`}43cCh7SA6y@`gqJAB5a0q^nd5rz!MgPt4aDva}p}i@Ni?5#_Jax4h@2&E} zgvFGk71!l??+d%`2f(g+>|BKR53TZ&1qs^JU$HGN-+!OZA~{>ww4X~!ou3fljdWi_ znlyec+nAZg)UR~1LqP}W<{tnj+W}0rOM2{`FA5C*1R@n6w|XOaglLecZ3D~ezZC7& zi;iJ!C>rL!`X~IucdUFEKt0Ejg~*VhZB?$ql@Q7IRt)aYyp}EioPiLQK=1XQ~iucaHU*uBoHkAc;*6lo4GN5DB6MaH*YE; z_gJ^_-u_(ONWO)6PDz_qupABGupB3XX6!0~B9z)LGETheW&Ly-DYyjZO&*LO8iWwc z0lz4zqrpQ-II+#2;I|=KC5&bDv$mVVC^!mquhZHlbDkcB5^;J%C-+tOS_n3KbzVJ6 zsCfnabYVhegxXFEZINkj(HfB;PFRT}ip4jseaRG5P8-+A&*6R6k4(+8^@{H(@<2uW zP91U5=1$VRy+{TjTX{Mfh|~k0hJ-SnOfh>oUAvf#Z&T9pU`N(FT)SntP3A^@koZcl z+(IGbW;F#Qc~=Z2+G3Z8pkXMdJZAXm_RFSwqDwjnF38JB1XKe&*Vu2&Tr+e88o)BB z=nx&iA|z5zZ#GTcim1akn@+0I*l`7X zSiy?4L4F@Pc(*UXy68aQ?hj0glllb0xQ+UtHfnmCKgPKI)U@t3#-mV#Yn*M~b^1*{ zIOmN%p0i(UDKgnq|d&8HE++wzZ%y?_h;#; z3`tmO^JX&rJPE9vVs87h6YD$BToIBVrn!AT$ce^+Vv>d^6Zq-*SIL3OWZ~9@$&$8+ zp_7HK_G^=9>A!tuKN8Ye@R{wI<+}0Qp2+2$ylujE<_FB5*G|F)MdDu}_7;+dR3;$K z)OkYzf%Vp0O3t18N-lN?<#eP9oqXZ8rJmxsk33;mZj~x=+%Vs|>mU-xhUeo`N9At=Z#)Juo!9Mdzh4y`v+1jN-AKBk^&1H|_L>%Q(Fm=ApfHG~|#74IK^>%el|> zjC+A#kiko5w;i8(T-og|3}L>kJ-W0%Ucxle`u542$Y*K0uFhe=x4Us4yy-7hX~?dd z`Cz>sJ|YZ?M07Q-I4_&8HZx-yCDBvFYQZl3tx9IBjo1R%)INp>^9jXDfd^}YK>`vt z%5!Z7^RlG4akew5?sEvMC%)&2{$nh;nPafsev@R%TYV|0F zf`7EF9SBa$uNK|hZ~684!`ld`s1gH1q4tNTBd&8VzTfc#2j*}ZOG>vU3vi6^H(i#D zXx0%x{=&J)TWM`O0AJSNtpvM;3T@}q#72qox8em1uE?cR0Q|Tb!-dm2 z&q0RM&yY>Kns%}cJ56e>n@E&ky=&Vm0!$oMF$e+m|Kn!*zLe0(_MZzFO%KvM@X2zL z9N+#wN5KE-;HnhdF&rp-oi;+XQ;2s&)~E4wNgR~FY?^(;QyOOjDm07)31zH1f%4Nm zskSjJfcR9ZnOoQid6xOE>Li2%xWD5pg46&7BLXkRDgjg!+Qm>T84G)gm^ zmX!6u)m(LfphKRi6?mgMC`I7f@GasiCa1*cQ;A-+en=?NH zM8;i3Cqc7EDMHcX7nY}}7D~38BaUhzgqpzihudaAesO==Tia zpu>3ej(+*MPrdc;6zK+$b*u50NVQ0U?@%&r-_T1B5u za#~UnZ+XMdo2&0*-=pTh>5EYQSM%Uq<-bwE7s#=U7wb-70e+|=v0yRI^uUvliP2FeNF4;`!bkFxMI){wndT(i# zYz9=l*;*sEpQ9{;>gHd>cZRL82h};AWGwf3w-2z~Ur93n4@Rs)D)(*y{$VFVyynWO&SO~))}>R&t&XECG@Om&wrD_XfW`H`)z zT#8-AASOz)n-DVr{B$v|`~9mif#pXEu65nA@XZ;Vb-o6ATofGcRw^#~kPWsh84j%X zF|g6+N@rvJN>!~VZzl1z>upkg-pKy8b`|c1_h4ysR{uU?w4E_k>_Ce+!Vp(0|C5Iv zQ;85jF!ezFAPcrX9^KE9D>y*fuv)5-l1x+NQm9J&zBC~w)7e|Z)VYT}t2pkbeic9nCs>*+eZjE#|_R{;G zgo`>JA`JU12v~osQ$4*2uDgI7Jj<0@u%OoTMDy^?HpTh&1Vb~Ra@gB-D^m-r<`9RV zGkC=9;dglwKA24u$o!ToTeKZdx&Mf8?FMt~c#{4=eJWt)Io!G8Ij-@Velv-fS&?(@ zcv40DFXw6d7fX%oeU3q z+J1ltk9rEMWf4CUHFq*^a@`~AmjCZ1>1l@UjjwU+1i1g5ssvNQ;TqFgFF)akLoR!K zJ3doifu$Zc+ooIF+GJ~-AidbzV{^sZAq%~#*QYJ23%`RAoO}Q0i2YLd%KUrCKjem5 zuf}iZQh?l86D@fRKGgpghG8Ybv`EXlz^Sv(&FO;qSud><1znQ5eu{x?2p)gW}R1`>&nB0WX`{Zz$9E~ayc)LcU_s3ca!;BCSe;j(6`|w`G`H7(s>bxQp zBkNi*o%`#v(X3C_^szbM9!J6(l5_z?NWHgUp0$*Nv!%J>0vEZ4Z4>%V9vJBYrDQR4 zn?btR)l7vT*dh~~5^js+9KvH0WshU0VT!``^2gIECAf26@ z&8S!F_5y2gPmiLC`BJMlYN#3&vKA^>APh<(^j&SE(j_govw(;SeUP6mXvgexgC>qj z(cq&W^)n{~0>_^qM)hGJklS^kL*UTwT>rL>kI;{BAUN%cZ%KMfWq+T_ zG=4Oy6tLaWV?rSFSvYFDap>N$zj@${@&28G3lVO1fyZe@v?PAK6pNc@g!9h0Kf-G` z*U_V2DM!!1^G^0eehIX)XQ};~0(j|I9_-PC_Ee|027{Rt!T%GR7E$J(R}F?3E1$v< zJ)T?VgJt0et=pjD)2IQ-xP95v@33jhF8acL<6I`l^8>pdn8M5BWcd{Hwt!)gH-<9E z@pF*x%B?vF0`x-of8Ty>Gt}Mjw50Y0-h#|Kgy6L^_BVZ;F_wM@wuW_AJg(a=#IBt% zUMx|bJ)?dB?5`$qYeFkE9}lbUJ`x%o2Hm|)izk)@Qbr`$tB}%7p0uW&>$C}12JcU7 z#2H-Jw=uDp#g~V37e{Wfr``g?{9(A>s1Ub{fZa{ais|35fGFn+5aF&H@r_sG#2+lZ zt^I>+D+P86inJ0C*+BS6`zU3bL&_vts`Aq!Gi%(;1WS}9HsP%$S86D%CLq$3j#PvGsk$Zb-P8WFUzN)Kl2zO#b&-0=hz6EpEYI~u4D(^9`{uc-IJW4 z+FSm0=#Qss@Q4uc08SG3I)%aA7I_=~R|_kK-O}xQ3&w)w*bhem`d-r4szgV#0F4C` zySDjHu};JoZ|uzMkV*{SsAeB+A4l8LU)B&|`ZLiO=~%w5H(3v62rzm>!)CXW#`&f0 zBNY?wPdb8;izek_1M6*ePR$Wn>QymbQXrin!-|cTXa*7EQ90v2q;b%r8yy~rk+Mz( zz9i;KMPs>D4;!#w=|FC$W}HswKUULHXd_O?vz3N@T%oG%{qU16(i5EyVoa3H=eN^oC=Kz&J5M}@Ig*BY-k{)*D;_U?mMsey(MrH@@7L}%|>4j z(^K|3+M}t2`Fy~4Lov5R^T2}Yva;ony9Iq;`I-FepaJN;EIR%47cD?Cy`7JICGg2j za_;RqOU#AUH(%;?MlrOGJsx&=jH3Lobx_wi~&JD5Zn{G(2h=lg}(qx z5F;FS@0P9na9b`?yKJ?C4zVF3o9Ew%>0=Kd~=XvsS7fL?(5$UU_lm~Xo zojR0jj0SM=vc->I>d zxaZ;ftB+;3#YNBWL1!?^Fk2+WM|@nfeb}%Q#m0|&%G&kgwLZDoa8|rbF$Va?Q{s*= z$WYQDrV8^K3OWfE{0JsefzVdR(9z8QfKSB70^2mf#s2xwuuDj%VyQH|^?V(A(ytgP zIQkw{p9$t?wr)*(R#pkB$dlY_mf}W`Porg7mj1*SHc-Q?yDjGcJ(=4!@Kf|7h*ZBK zh|4iS*kkUGcdy<^B2Y(Y_p`CFF=eOrhW_V(vbHmjw|^&+nYjGB^Z)M1HKpYw<`8+X zinbgWRWo{f4tcnPObl_f+l|WAPP){qW4uI1BK-xIva%xK32KX}kIp2$VqjrzUzebj zFa#0(*LA)^dm*dj`nCknL^ESNYJ5NB=`(leXF5S*@{@o8 z(!zLW9t54iiAXsK+&vHe3`R*90lwxW0^h^Ce8RN|WNO?n@_uP$;*; zrs33P*UF3|x~rqLTbx1%qEQ_|5=%>gW9TE#{^X;Kd3g1fD}9iZEoG^cz&pzv1|qo5 zWx4^UMz8&GQh#d0jjyQx^$G!fI?K$UcOaMf>4G|?Wfh~W0Iz7Tvoej?2)A5Pnf#?5gZfI5Jws@g<=)USg1R)W^ih3Iw)V5y$eT#U`5 zU%ya>vcPRm#|-N^%POsl+t;sdNx&N0(&4_59Sh`%01(&01Lu1 zF9E!HUpJ*cp*%K+t4~=uNDw!9w=?@9y>TE+w^N@UKUbuFA}+h|M+#vdl+f2&bp#=L z5Faskam+RVn2f@omZr)@3ltcKvD75kzut_|VuPJX=*Y^v-$Zf_fNlytb8(zTAa}n{ zd08T}aVu9|rc*+xyV`w=S?~nW>->-Npur9mOFylKa zHbT5`Z$EXaIQ>j#t4B6Snyd*y+UTvB0XU1fbVwlt9!mX;qRwr^H~MIii(JW~K27Rm zj28l^5*XoFa5vD*~>JKfYl>i}IYJ0Dk0c#n2OdCq;L zh~X;fxdxq2(~#I<-a_x}T2ocbaa&dzah>evWNkwz%KfSyCGSQo0%QvKR0H0xQhdNz z#WP&@F**#TdtVr;MdmW)h<1yKxH-{{b9wVKS&Ibm+Va*S-YZak118q6b|+NvrAl^M zx!?%nw0i%h6|YVE-{k$21o7-$n(LOrXv;M@;^hYxlUwJd@WsZJq^|3CTiY9ANu&Q5 zT)>@Y_NiZJ;*PmSQ>GmYo@Bja7jjw-V!Him6<|=-Sa5?8>_&$`^LP+(5x;NQ^N3|uO<#Xac3*B_o?SD4qg+ug-q z{g*~{*Khkk^qYOpFvtI5PIs~Pk7#uiDX=Vl_q%fO#jo&aFh(YO?m-Tt41siseY($A z-2qtS>LVBs`s}CV6gOPy0_84aKU53==zYb5C5}Wp9nH!RR<>R58HkNN77>F0VJD7j z5A+c7`{S=mm8-#l`n=Z9E-j*6z5TeFhK`cVPRm>99WU3pVVw9w_3rFE_?hT4dsTYv^U)%4C7PSh%m+VyZ*Z|;Uf_}bcxg?SK6KzgYnPUx&06GD!2p9>?)zm8cC$FT=No@Nz}$65Y+OZp~ok*N{fo zGDYG4l|UJ$OX>k`Yz%;=skfQ!yYhh$nHhs6Q^5NXRU888@qKp()^Q={@9u%+Bo(o_ zKwyc|i4wKkTqJ%&8YljLz1Y9;w{QgIU{d65$v*#LM5Sy!K+G`-cc?fnox)m(x1q*f#Y)m61e1 zS;ijUpqnKTLHE`!!uyH9;%0*(dj&w$f6ovx*b(9+I}lZ%#07!$64l0=;wa}RsbC-^ zqaiT+4r;lWmw;&Jc^6ae#7JvIY`D3<;1n^dX zxa<-Eq=n4#*asI87|V=@|C?TaLp}3yBFx}7^g)Xbpi{k1Kk*3vYUcLpl&#~BGkQsZ z1qOj1PA0QixH9w|zUW!JT`Fb#qfM3^uT?JU+$O44xc$UFHlb_t^AuwaE){KVJBUsT z^934HGra*m5K3e;oQNW&%%ZEAb^}6?E9Y|_^_{&#Ie;?StR{d9wPqtc<1u2bwZ21SAiJ2x6%7x)A%j%)FcnPnVyEy!7 z%iaBAmRksK5G;LO%LdhuGzmqDu^EmENxUBR7YBi+J-Pm!wG*aZd$5-=dQl*5d26g_ zf@6}I#nllhmVM4)M$~ryxH4SBhVtZwl>~`aqCFUbO0*Yla8a+@ChSEAqbD*C>EW3% zX$#7w-nU)eklB$9;`Ql8T4H1UmZje38%unY>2B2<$Eot{hHF1`=D!Wx8=0V{7k5dg z&Cs95SbMDD(t)UP8ZW&p# z|4r#Hh2QOyjdeL6{^Fl{U%R+*ju)GbW@{E4tX$Wn0zvcG^44lxbcwo4g{tavP@`mi0tOp70Gd_L^rt-5 zZ?;Dpt649pqPq``QHCL#>#u=(i^G|m(!nWRlqF6FV6Mf1P94a8$oTWu*DA-k-J>DS zk@wh;nHYOvwwWIju0`AJgE2E4A0ugKt6OOBYx(gK z*k3g$3xcM`@7+G-{!lBZ&1j4FA#7!V?krA%tSRqlHU?De3QtF2EAYObA#RpGeRTRW zq_k4MMHaL#`WLX_YK6CNQ1tRE*Ie7234(fRPSLt}&m11h*kcZ836yvHRX0UDfYcNr zE9v~ZG7%u{NCgE@-J<~_{<<&wjhwQyNhQH9Rq736KlX8y25x%lO~b$+*>%V0Kv?>l zjLUT)m2=5FN|a@(1)B4um`X9Bo8g%>;eB{Ky_MJ+#0NDEM}N9i!Zl;?7>2X_KH_uo^A+2+ie| zV`UOIAj=&Js_Q#8$%c8WZ3mtm`@wB!SC4F;_b~Tf+A|QJh~K&xH8z|4!m2y(Hwlce zOR9g%=6Ht~dWB4iPNI;~LQBwvYB8A>u!=$tXjz6;ahYgOvfpOwwh&s;T z70vR~$Rj2F{wFWAjXK|eN2R6Us32|D4!n;WDYe6Ja6s$oNJlmBr@4ascJ?$4wz4I2;2TDi#0K3~Bhv1$CoDn!+6y9HfJC5}??- z?=AS7!GFUSGQ??n3|i@UmJqZEU_2tEUFNeD+g7LTW1dBGMWBo)qUE#y;MWEa399h? z($4eIYE07bQ-ehG2PUKUUnAX{asV(Ft6dZ(o&2rr}I~9cKbc2aTf6z-)3~i^C#d&Jo_~vx7sq} z+aI2Hff>9@E0O1mq)r^fJgU-rGYteKkC29K(QwJlTuCc29kD8O>X>zZ z`qa;f>V6E^{nYVLcS$|&PGy<1#lnR^DF zg0Psc#acQ~i?78f&X`?G-`~l9GQ2nY`UP}O(Y-hP}+QuO)Z*G2(?Yi~EcxZMe- zvwjUTGN29gCi2o7Ht$}XPoZ5-c&4MReTdZD|X0Cnw=nKmMo7{#X;73GIO@fiO={vCsH#auO9LM|% zNqQO^3kte)&D8(>fGi*Ca(?_(WT-12(KS?IR=HaAhX9Wq(X6JdZm{h3Rn}d^6Y_i( z=a*d`>vr-mJ7JnHodu6i1djt@Mn=z9bD%$IEeI(HoBI;p<_Vfk&b8|=Op19%^UcQH z+8bWDx)F^}&kcmyS3_nTe=LESYq%|(;{g=Z3)1^3RsOutje76`v2S}kvdZJg3K$5{ zyu4!;V?d5f+7Rw;XtDY8jKXu-4rBx8O!UL|yu(hK$77t8apE|-6%cz(jE(a_glJ}y zXj5{Ncsd9Kkmf}`DqjE`fORUz3(sN73xL0y`$4tDLfTqZczFd7L3U#oWrlapDrdx} zi}RNL?m+ah*%qBIn(m@gje=Q>4_zNqrR|~XU36nFfk@E_paaN#<-i=n!I%BzAcIXa z^gb^8@dJsMmew3KtH?WOcArnK=QV&vl2zg2z3`d$deNg+sZ&>E7K}oU$tNvO24uUUxH|y zsgbPN2J1i0p)lBm&p&SEFU*wO-gnkNOB@`9+yE7bCZW0iwGZqd|0{wiF(sbUmrmx6 zc7z3TAu+5IqBg}gFRcGw(j=(k>4~SdVByS6vbHCKhp_wlyS?np!m%gM;v)&qXm%`N zo|@0IjoJRmUI=~&B`_3PbSIG|tX3+o$bPjRVS-D7F%c>uS0^ej3$q?@y%DuInB0C# z)()?YP;B<1$h`L!K}C~9Oog}sJ|6N_UCAvQEI1iBeb}BIInwfPoX+8V(7kW`@2&p7 z`PEr6n51$X{fb+enz@J?nZ=h#1F>jR;p`nPD<gOFN{43^jM96ZDB&4_s5F%;&ZGm=x zMlCBj118V`aH;k|K zdbK>(_>ph7W@|Fk?d(EMzA%y~jJwmT_Sz`Wh`GIVpCY}J9n-jo`+cBlyma;^8(TK~ z>Rn%%f%C7FhQp83ZO@ypJL}`O+#XN-KDS;mq{83x(rfg;K4TU1-%Lg_Ie5pJ7s_qD zO0{(|h}Uuwi|(&;;j^Q{dIV-~ zAnK)MElVKNAMs*5MZjQ^mmeG)EJuy_cLsq|2wRob`hCdyx2%LJ(5;N4)Sr;*t-SO$ zhl7nrrnj_}OVb>8JqBp&cEzn1dNRz8vO@on-pLu49 zOgQK39ruZ%hNU0{i2&%M=n3S0A+XL2x7&y3epN~q5&iHu6LQQgD)Bqy&Wd!U3Oc2}Biif}zxVHH4<;f`S_M z#AFt^81?h~zA|BRtVG1G?FefXjH2?6EkmaQU}qEjvHA z>q%zbDOtsc>2_yzjg8Ef`JK~V!$fHQjpWwj-@!4sJDqM1X%lA}Bw#%m@TdDbJLe!&%h4{fV2-^h;7WhW zVQ-dupjIrbL^G|o@a>wr?s2$YbAi zdbaQYauXy<3B#oZ|CPxzt46n-cgS-G1DeazPZGZ#F8#bQ;o!9j4r z1-mwCdMdg)doRn+rL8q_QAyJ|K&`xUcEC#Nv2R@+ulr@b%gK)A%;@%x_z*i(LAA#`PdBk7a^Uv&`?wO+d%KkA6hNldg5 z`&{WR_IWe#n^27O+Jn?>+YUPt-%&g}gIl?+!CMLslB1<=$`!lce%%fRP8Zt*;-mLG z*A7yCJg10asnew~O*~y&wFlC!abllGABb|51_792JwKefHej22G~*{pdr+ax(66}o zdejB>KL1E@tm=T`q9Wa2slDgcb46(W3a{tqe*Z4mi{BkVs@QXFt*WVY*?2Pvus5J3 z6^s}#hHY~n`b4$-xZ;z)i7!(_a#34%LBTIr?~3J0>A&Xm8{wTHHJqQFwHo*)-^ESv zP>|oY6>Jc9gh1^H{L>er`wNX@L~o|1rf|;GQ#UR#BTc_r9X?90p*6(XT2IHN%H5T3 z8k{UD3wS1fu6#{#>!Fe>RCw)l{!O#p=9YYGQo2@yqc_7uF>Wk2(KRdAE`4 zq@*O%Yu3bscmn=f+Cr|)gh^nFt!%v{)k}h!0(x+K%uU;7R{!bM!FDl18#U~dnTaK> zs%noXmiUihkM6-_v;Qq_+cqqMb2Pg>VnN&|dRLRTh*n)6Qa@N2^Df)wM{}F44zkk6 z`LCw9JL*bRyXs|w^jvsSyi+r{_c~d>bk0S49|UHb#UN%Sr3QblE6v5Z={4NTV9i!c z)bvyM2aZ~hCs9e`j?LL#nDfxKBzr2CTDJAc{p&1KP6Y>tO4{&vx2OFaXYRP`k8j=m z$#fodR0Up#AnBDwa2RK2l@K@MAhOn-+^0aE!zib$&feL+e)Y@soGOiG6 zy)3D)Oi*_dTioBul;)R}WE9_|XXO=H7|w<=@93=YE}6C}j;7PrVLf@{B3YV6J;_|i zoVBfsoY-|tRgRv|OE=IP9(8JzbNK0|TI{0cZL8eVHe@p0Ey$$$j8?jCpVnp5@#6cr z%2Q@8TBSa{FRHdB_6PHuM}C;9L7wtmmWgq6g`m;qJ+Q}_)eh`T78hnH_9VUs{Ql31 zL|3RZv}aStjP26r*rZ=FrDShF8O?J5PI_dAJE1+^7(blNwPlhvEBj>kTeSlh-nVTJ zjw#PRhCrIdqwDVc=i57EH!b)yn09>D);jro8VgS18ut9#=8^Kd6~C>5x>k-r}DB zZ5#J-Rz{CvpMJ$;OfV!GJ+&f%Z;7y!nNVhet#G zFzchy@Jbf#CQX%(=Z-*!C@P}`1RBa_<>{U%wrvrtKU$CP`oOm@`pJ8mJ9HlcyY_^= z{Zfsx_1&^6zU(#%Pk2~hrvmLwX4KE4&U<0M%8&-VTjiGBAL@UiV)-A+@~C>NIlAt3 zU|AWtpL^*&=FE^T$oM%pSw7hGL(cqsaa^VP8}?$eHQQOXTy5@^5L*=cA*^O~ot04# zYg@gfdKM(H5<19aQCbcQ+D&%f$<=r`XK~XY<=V5G_qj*H+E6Lu!;T!uuSX3GdYh7l zVPQzH#=Jcf_TGoEdZb)@EL%cXk@~i_rDrv3G+fViGztb( zkS(zd_jR7etcUpJCgclm7i&iv86|jGBO|QX9w?Y zd9xe`4HwjCg`NiCA>hc`F>H5~Y$MMeZQ}BKMo*<7+C}K-=;&WCSfK(Y;Dkax#kb1J zCw}_hwqK)_bquXC01DUp)6Qj|o&l3U`dCxiX413F+YzVXyK#bOtK0Nq>k-Z9?ecxM z^gQ0@!ut$iftIs<#DUbeJ(S8XVTSG+F)ppmowvVY_p6eL&It?c#peQXI1iCC3Nnwr z9atN#J2C{Wx&8Y2({&xo?cw`2X9%y0p;KnNbG!SEHTub@Z%c9KVx0XMC_`&r`38zn zy*X9gdzfsdiU3Z1(Tgx#ag}9kZ#$%xk z`cegK5$@j(<42Kj@a6XRw=ijSG`sJOp3+3z{@qyY?M+JHQuP;?W#g~7`bgy}COjJUXeT#RX?DNs`)4OqspwRIpK^A z%>Sh|;`QiPuygAh6*kg%(JRVuzxk|oE-uW%eN~R0b^(K4m$;G_Yp~=~-ILRmsPZ<4 ze%{zXM3yjnFB0gN{t@8mWtX-MZ1u!~;zI4ggOY`Y8`EzJ$f=4nQTH?dv>De&Mmgr} zsIEh1((6)xj`B|FjvhJdPvaXM$d1++?U8?WAXOvD5>HjYN}m{rt#m)8N?;QTi7(%F za$?Z^)r~tCx1HqE)r>k*weWs_)A-ksc!*NAXZy(EXqo&c+=$N*kWkx>9|*wWb$I9eLTG*T z1Dk-u#@|1Nva0Iyn!AR+{omtfG-uS57%O6?W?=8}1O;=M&L|Ps(^3FphMZFxszMF= zF%|B2mwti$u{~l^Cj>`UoXI`wg$}P=rLL$}WphC6us)xDQfFMf+DtM{>Zk6$N3goi z-Qx_|9V_8N#0DXQ$CSy8yOyOX@qK1^0BXQwc*TCeTDKj&4dy_>wN-6;H7 zd$9Ji)^lhj4c&h)>Yh=ImeveB;-2jHy zn-3%6Wo74@o6^bML`S~O{Awyq9KG{{P@qe~xSaDogW@GZd%eE0wgzXvQ+tI>60Wt& z(PZ)KTk_Ik{Z*%hX~xwIMZfQ{q6h(1;~&$-wQ)_@cX2XLDyzI<&jrQe%Ihm9isL)aOs;hlLRRNO5@o8l~+WMnGj* zSshmOm%U5WM3kdbU~peVDiTCrCfa9EorkwjBBboo9CrCV)aBj{Z~CJr4)`}qivKvc zn9LEGW99u*Y@T&u9>hfUIuXem0g90pZvQ+Foy~|ETITUyfjgUWU*7Tnte& z+=J(yMPPI&Yj)GBpuH$){TVDumRpsVVm!`rk?`H88d2_@n%YLJ@L{|pD*d4ffTVav z_o4I*!5?T~&~JOnsk+hVJyblj_;ph8iS(ufJ7<6jZ&3X+>@IOS%a>srF}-VSpPzOO zP!tP~%`(ZxQT<_Z>`3}*8N=_*pud5;jt5h$+!~Fc42`bwbgdbrWU94PtI@Bjx;gI? zK@Cep>OU91KaSh@MPm4ppe(<&p?wRG9D}pDe z3@PHK!qHy=QJ;9-v;8Lfq?g6_&Xx!tVHz)2@7+6kP(a(6hd6%WGeIg8WS5?jQc>$( zImcwhVly(FRW2|7azd^{84<$_Tq7er=$o*h z6_$ia+n9b^RGV3+l4dX2C>KXgT>Gkoa&w=s-_jx#;|Mt~(bto)udOX&mS(O{^r5AfLt28TWiJq`4(N;% z6m*ln1g%608A{J<`xFqIK6ZT-9?~Zyp+l6EMy$Z3fAPvQytdn-(=AC0Rfe~iC5qD#!cym36~R9EZ)`k>SM79@%4r5Qr~+snm?SvJ$7 zO=>?~SZBAc&VT>@LeH1JYD{Q>Qn|EKchye2VX0(4M08I?N9LjTN;y56=)0EnLwRMN z!^r+gzR6v5wfLM+2{-0RM3PEYc^98wc#@ix@3V6Em>BnWkhjE%YS2s}gTG9Lw7GBP zBdk2?a+Fsue^H{oro8Sz#_z}GXr=x7^(&X>gOqbO^romqB9{=_^io{myoS-5)qfKW zc9-*}_~ZZ@!?;LyEHz&B+wQNizN}N=Ocp^JOIDnDykp#YP0J?M{)CWW^+*uSt`W4sf8k!%r zVxDCx-1& z13R_*y;r(h1GN;J@)L_9`Ye^nYCxjx4}SAa(C59)bBgcN3Q5;{9wqHs#nBWw{!79Lj-m$DrkV*%Et&H8=rH<(Ij6>MC{*+Ol? z=M)%MpSC@Ij0N1fNoly3uH1i9Ud55TImQ<&L^=VV=*5w`v zIKL0^pN#aI(XATy-6>mMh--g&KUp!7fzq~NmiOlabXVo?yqlyh`N9{b#fIOW3%lWe z7spHg7i(wv6y*cAdqO}-r4KsaVn0&~c#VbGG7DtY zvPzGXT0}XVXe=;FS-?N)e+m5IqX_jK@SRxM1i2~_kZ^GFPtBGLsnwVtmg%2AZr+Ks zHA?Y;28D=pOO+czj8CJ@Cqnz@>ydIX<4xx~Ff}Sxm$p97^(Fo|4Ivt7JfX)Fz1rRFXQjn@kqWnepU4{%3w8nq@ze-^JBYg25)ICo&^NA*he|C(0+ ztC@>Yuxpmww&zIYt5ION-ZH&y>dh;3IgHBStj+3QTYMpB>>^qp?tVJiiZ8r^m%<@& zKOJshJN>O2B+51QK-WlzMTSRIlneS)O==T$dbeM&rQ{z*=Z)9b9@BXPBohhl_pcyp z;)F@Zmv182&9{xEF+OxzZkfjZRCq6GCL7v6ScKcJ;ZK0mkYPyqEe6-PHHF9e)1W^= z!%{Nqz_H-ou>jooBk@JKlG4D~#PN??)EJHj8n9&@n~9?*Sr(=*^WPElhfzDd>$G+{ zyR3tMtu++$vgy$a))$7}Hj})C1(v!ykU%t1Cd9X0VNE^8dbf9J*#73@VjmPneRvM^ zC*N%{3xW{7KIFSDoBnJKe;S8JN9#Uqt{PKPDr1U}wa9|Q3knJ<62ES z;uRI`?Qq89<>l3!1jTxiir~zOyAtjH`m2H6Ao}`s__NCWm7-DhQG$K6YAmx62V2{C zU8Vb4@F`CYteBjxMPa#QMIoF2?Lc3M@;`7To^bu zyI~AH;bu=}l{slJc;LVdS=wzKcpJppzu<&nll5ZJ2I}N|mCPoL(~$by2ZyiVY%8o; zk-J@U`y6_5&Z4CB1|#=sk*@wIFj%s~(7t5_$}xRiS6)sFBlN%HQbY2?6;eEAsw=y! zm}n^7XEo^Bi*Sr`h;x5j{Xha07KJ$w{B}%}8pJ63iF#UqbSdV4>1VORhGn?(J$3&9Z7x4~k*v0JfUZP5#A9`#guW`0KjqC^1G%d1J&eW!VTusy zA6o|-M?r1=pV9w7IMvDfe4nHhj^Bi&<(z)|glB@IBO|rH92vZ&&Gj!*>fn@7&(eB7 z|64U0QKQmiM5+w3|KSysnwDk@C!6P*j7~^M(CM3ft;AQJoyXrs?cY0EDJUqYS^er= z?fY;|O-)@3hx{D==4lj4A**rn+J!U!b>VAZiH$R=EgX!A*aaXh{G*u{fUJf){BYsc zJ}Pe=@(M@!V)MvyqcBokX*kbaFkAqSE1a%OU!?Qg8HYkfrbU(JUQ5Dja&< z2QPuOAIGlew*4x0!xwhvH(geB_n+%GK04l+XVv%l4BxfXON#evucu|_9R2wx+t3*u zS5I%%y{;r|6u7$hXF}4^@4B(;+)$BnEmW4$Z+bWAYq#L=#6;55 zkQi(?&GC(w{s_|1@tc~1z=u9_fzmN;={ieNDB_j#h( zx4U7PyO^^UcG^#gkaB{c2fKO0n%croSKBBl=?2CRLyJ~v58LfOFHT-8=uKahgGJ}n zTdKsS3kRyix|1o_G0m_JOH3X!YptsBGC1$>_^7N1YQU>_tnN3N97dhO%3sJ{HuG0u zNdLo5(@+9tIJin@7B#gfUtHFgPw5k#X~v+vR@q+#syNnHZ|{p=3m@ZY`Ui=;W`PRs zH+laH?n)DAC$;@-ZsPaD$P|IoaJ+YmgM(vf)jhk-GzYVQGJa}ZAq$kn2}oWtH}JT95GP$N3}jC=jMEE&^LWx3K#mh#3Y% zZ!TQtA?Jk9|2{vdF{_9>wFKM6S#8nUi0%o!L0VlQKUtnSDJ(iQdA8+ykoAsL?<3YJ zi;oC@s-?lDUVLfTdV5BYZEmGR;zlO*i1y`Vy@(H#LwBfs&oh|~ftF>qW3m3A^XS6_ zr5mJG-^2~{{dLA>^0?)2cj*|T7AQ7gbeKvp)Ve+;)8)t-=XlU<<$90htcavAdB$wk z(-yH*KvC$7gYZ`OOwYu;4)+bJBtr~rZv}yz+OWU_mzQv-u8u#YB3VX|gEnd}N&y$6 zn_(^22-jqB0#0lo=glpK)x1Qa65yGQ-XaVm)_OIp+`?+)s{qch^lQlWFGn!lZ~_o2;9mjK55ZUMs{oKV;W- z*V^3Hh%E!9&DJ-qtARzGoX#^9c#LV&qK^UpMeRZ)GjcmlyWaWdMf*Anc$AS7Vhw|b zhc=~9wu(RJw5zZ5`H#l{3xP+U-#2)(-PofY;BJmuhAZCzU|KGJ+#Bk*SS{{Vck32U z*p`L~?T9Zu{ZVb0S1%!>z|W7BL;g1LH1Mp`>TW+OE;b<6o9JKeJ zWc(x>|Nnnp_7HjoVAq`;1XJ!f22;fiy!BB89tdmN&aDg`E6L66>Ns(uLyZ4)NlO-j zxvZVRim3w9s2(s@9ZjeS(jba{2$ekwioyHh{t#Up^64MUsh;`L@fEK1i_tTGBm)`b zm$?j?{}@y#QDiM72t-IsM?}bHe+QwlqFgX*|9SP@aKI*dnA5(rM1gmIXr|}Q%e9yH zH$RUEmU$glMNnx_27mu?LwN_Z{_K%Yp6KM`s9&izV8Gm;`%oQ9r^{G7v-#Kqv&Bv7 zP2$UkLBywpTc_up=YK1>ln`ZM9z0GL`HAwWzdaY*7%?SuX%s55%>LvZ5cDfdooU`c zC(^dt#T{ZM)>bP52G6j(kpu|;1hhFyNIr*Q26`eNcD2$=e4E{r(s7#d)$ux)YPPx5 zmseKe`aByXJYxPh+v9BPQ%nnIW1n5`su5Bk1{FgX;MX+Y#@UjoZZM&`9NYt^R#$-D z<6;sJ(A8jVddHed=)2|9T6fxTclN?CkT4?BzyF7Nijc4trq!PHSbZ8TD3WH*#zA~Ptz3Vvy8N7#>&cIF zSEWp`cj|7wD&rG1W~csoY0A%C)?-lU1h^9T-w)Y*`H~&zVb1XR za}5n$Mp6EP=R~!SSszw?GB=e`Ta^gh^q;_EKi#Y+l_jXC-dw$2%`gtZgrQyaO zlr#Z&hc8u1mN7i-GBo2^r`aSG(2oB~;MUV}`i38_R%`UeDgJDWkK5d4MQiI7%jP5h z&W=Mqg~Ubgwm?ItIH*xITIPU?ie#w3;as*H7p|`HHu2XdCG32Aiy0H8pPK~wuGI5X zcAn4-Nh;Hb^!J=j=>fj+MbFk9Z7<0bXNDUG8x{yI)0A+&&!T)=Qj;XH^k$#(;MIwH zAD8xLPH2+Yp{IrYxON}BD6Bm1v79Yb8Gl0aUFMO<2Du5%T!dKi$~$M`^XV2vGY#AR zFusPB42*bHaJ}`#Mxx(*;AF<-@8?W;vIm{|NBWZa=zH`*C1HZ>FZEA|Y8o$fAP8I+4K)!0n== zU{TrC5%~%{NhHRz5k3-r)uJbB9Y%BMS4Ax=Pu(<2vm<*j&T5&0CU1-zK7!nfmR-w& zC_xJbD@YqPm4Cr2`R;{O;G88GkSlqzn9K>|JSI0)h<O8Er23c^oigujzw zVv}W~DbxU=rJlyxMnhw8q9#@IflXK_$ClL@BDAX4FDBoyj-wx3nXNKX{RbBhM09T` z_gqFn3Y%%EPL$S}g5?d0)KlL-RSA{K!>C0KX*HMzH#oH}uc&AczxB-jOhL$b`{(b( z#8gDaGrX?uwT-(l<+ST|U?T)|nBEJr!xT|IQ>vvGXA?KJfu*6Z@7v7A&$8ENblh@O zL14!X4~`Y^12RlKB}+rhsVt3Ru93_4>oYa`sXE^5R%0Pxod*jKKc~;o(*8`*m*5uq zP36&{7~nh~RR*j3{WvRCmM619bRHQYq*iBIPU8Iz)!Z8j#XHu)qoaym@QqM6gST^I z6F<-2Epgy+77!2+L^etq3IO2?+Vkf1p$9zlNEEaFh*Ov&&P{Vv<4HuA_2He6A@oEp z*RnucX@(dC%lu?@$7pSBH{~s*o3@yz@zADH^eB#4?L|(v)u;q0#q_#M_4y&UCmUk^ z_b2o`Cff935#S4%08X<3xy`2PL!)FW`Joqa$>|JRs`%wug!}Y`QSsYn@>i?+!peZ+so@rnSYRVf`akk1e9_$tDR&O3b4DE zbbL!W>WNS&!JcG!Id=WUQ8cf-TKh1~p-bo*#ffq64}&O=&Sd2=xrWQ}a-TY#g##`| zb~QR1@;9t*f&VO~_p2%!lmpymB2}FPw%6p^24YdwO(jcQGg^IpZ+HImNQ}#4_XBhz zC6Fkvz#cBTTxT6Wc84lBVf>ir74-2NFeP0_ifbni>~=ga*9-FF1cBcbcAhk@Ily`V zdDGrIGP?=cm96VX#6^6ZR2xSN@wT~E?7;#_Wf+D}4nN<+{e6nARq!GsH!Z!E-^BDI z_CtB?O0vJETTOjEk!q>;K+Csqh|VB7Wz7%)q}!e6$YQb`zcjdFX0d7wb3*vb3D>;k z{uE44%abnL3hypDA&DXemW!bQ{C#Vg>q%l+Ydz90vKTW%$Taq*5Ag**%Y8z{v0v=H zx&Cd;>A{8@4Hv#G!y?@F1EX#uX>ClsA)9P&lsUQXa>*{;A}dr*;p%g(I8A|r<%=*g z;JXW8ZG*5^Oi&|9$$+Pr9&urZ{Su!ryUPTCeJ^)T_XsW*pr@yYChfKCheFM~fK6Ez z1VmQ&1(Er7Wk5$L2%Z1YA2rA z@r)~f2yeeubqnk|GN=$cR{$b!e!@NNd^u?mb>&U=y8NMnx-nnLg)tMFM`qTqcIqmd z?w}|6YDk7Zny1E!d!w_2+=h=io~Rvq*tXMhjH8oiXv2++6N#1O=j}rp2pn-jE$DTq zO8E9lCr@|uzcahht@(vqH)Yd@?dBFw{yy670a78-HR9bh?GC6g=HiG~#c)*zDEM|- zV6|M)OJM)yM6h-??;G*)>%eyOx6fG6JZa!!yB=U_&-Y2`nZ%inO?!8q{_JN6yU{u5 z_TZBGaY$D~;{z@hjU46i(fqhU-^9O51F~gV@qcubB3Te0AXXj0g1Md)25BfA#H^sS zi{(sT#ln2o^Imp6T=|G;X^_A{+`jGx6kW!DoHeUP1!nAQdo~f}K#+mW>W#O{aFI$x zL{w0iZ6OBh`_Hre?uB|IE-r55CWAKnK8;iMcL`o?DU^@8naaoX!|>P`uK_jdIkWf6 zs?-!MW@hH{J{fmLv{o|C=yg;VoL$Fnf6huztWUwftBnPKp>k)}zXLkHq^`n3o@4y0 zwfYW!g+Mp1t;Av`OX4f+!ZS(D<`Z8SSG2PIbCSRf>jSCc)OtXyZK%y+%Hqte)}m|p z^&vqD)j-rNneqijrF|UEk;f;i0qAW4n-O@~_3Qow0+!Tqq0so<5r+#S!7;LW2MFgx z$)37^WW!Hu8v`>@$t{YCST8RxHfP-NL!-b1X7H~HMv-eNnv%m?t?dy>H5S(;v zeJ}+F`^d^+~{5kz`}{YR@PY-{}v%mbtd$rnBMtf!o9&WT83VIv*}`> z157AQ$!iQbCaMy%CkoeVo$s4Wdym|Lz`Xa7>`BVVzHTl3by4=dZgiW41XpU| zb#C3In?V>2C{36lDY=}}O6xmcZQTvSvo-YvB6HErFhCjczj6tWuEhFT#3JFR>!n-Y z3OggYTdR8tyF=;MJA&Aaug_LjEDcM=L<%R=zuM^!&fy9*53ijmU8uv+*LRG(4`}aX z-h)1juJCu)~V#m_RFNJXGTE(%tb4TfZFy?-o=Kmy)Dr zRo^U^b`T#qR()U4uJqSY2kgZZDoQi>=k*09$R>x$U^sp`*tW~+s5E-~`TfUG3^Pwv zlQzB3$`@-W?J+(vUPUintZcPrC*9n=D$FKI88=aw9JmH{iGQ)^H7Jsf08Iil?*ctv z{54V-c8hiuExf_^jPR!nCe=}s;BQabaD#uuDSyXs)@8F%f3fU44_X~U>ys5?aVU0~ zYTh*$25PsBR);i~o>7gSo$2G_L$!Kk<<6SaGie?PoTwa@Zr(4Em)FoWZ5PC=E^ukM zsVO(^ekIhOlCssS@B7Co9<;M#6Eu7bzKBK{U6{wHLjKdk#K;&6G|}|PAX~K{LRiNy zcg#Q6UBnUM{!hs|=p{4|`Zd=7rq^6(wWZR^43WZXn|LPBJN7MeER8?SPjL2T8=RSD z2K~mC^}Ob#HcIdFzHw(t(EqRiY`a3g!@c{_uR64QHB4|jwxWcwnH>RB>EX@R*{#@v zOQa%ZQ@R>ZNsRPDS+D%)1q41!5jwtNY002q1oHoF_x$gCMOO|W;khhJ9}y9T62Lo} zdu-!#_lAZv%eX+30<{pS0fxG6P|sEn;xQde_u2a zCqDDGzEdpDD)!?@(kf$2vcNdL^{ZYX>&@R4=H@hXBjcGiyaqwc2G)~EGr2^egirx> zia#V&M&DmY=AnE(09IUBzh~^xeW&Q012E4G4l6e6cn>e$WBrTS-myK^dxwWu*KFRM zl}^M)#Pc@}-vJ`&#Ofj)5RvH0GMYuyHLIClY9$RRU6=oso*S?Eap5R-SKW3mz8brd zhHEfui+4RFzY4S*$x+vlBz`&X9>11nv58Nk)HNB3COgtKKgaMfpSo)`9|`p#Y9i_k zZxOspe{H_97Uj^fXZkfJ^k_ z*%6H%dwPZy>x=nXEV@A=EyH(K6X_ba>LXng`Oe07uNG>XwXYo5UjMt{!VI0UXr=|u zY$Ud3R$D5+UHK?Z;umpfqxdiLS1~(s{ec2wjnkHlLd@)v<6Udkk(IgPA^N<@&>`WU zpl3NLy0vw9-v;(4%~~>up+C{lq_`voIH>TyMpYr!zYZVq_1GN)zy=OYA@RC5%hg zV-g0Fu0EnfdqUSGy#QnL?ok$z^pr4jQVIwYeC>Q5G&g8()GBjxRfkDuXM_C#%e#)@xob{S_bG4!^lsI+dpE z^G;<%g*a+&?2q^A$1g(_uH_CkMA5;(^Q0>LdC>CNx^R%<-*;jZ=LBmp2Mu5AEiDxr zwng`Q{#yLa8Rq!B3vehE=EON4Nl#h2;?BO zB`CmA1RRSBmeQA5kt4<@?Q(^=+jX_Gh>NX)c_OGKJSS*7ge?6ed?xc}Lfvdu3qUvM z|A0yv1F*~y^Rzx6l;hLk>v1?CvP}3Lf*}xlCM9Ku&xX9*VLQhb-yCv>@NN;4=on;N z=9kZDngfK-qRP((D&mw^en|M@K(G1%jOS?pgxZ^`+S~8mDAr(ZCs<3L=YO_HL`l$q zR(Dt0j3!sRM~;uXCun@i rIsr)J>mDJlk#5~9Y{=tC6&_2YFN;)1#84^$RK5Khd zncIkI_7i3seoYwdhmSIXZA&&5I~z?6GocJbdXE6@nr2c(?8bbV-v0xeu_2WXql=W` z{2Uj5VUew2XQn}^Si+t!YqV})npq1TNWm@>YQ1{8axI`TV@^c#!fEJ3dIzmH&TfR= zWh3^m>1Z<`kKONgRcse02#Mc)l=7Qusm$HiM=qs*%>g)qGbKyA$!U$Rr)a3(zjAkR zanW*HA}3=rDg{EQgAdnh>|}g)990kCOfMP=YQ`a86i9<#FV96Un|2{s900b}|9EC$ zVez2c9YXmCG$6NukRPvsXdPX4k1^dMZ8f{l1rf96yf(EH%FyPfyhqq03-J4vO)J<7 zsG59b69Sf_U+eRYSdAVhPipMOe61@S6Yva|Xdoqi-hgyCGjY3Z@o1hL3O#8%KqNR% zp)${?c>GdNm`xSGWL5z)57@rB^TVSdySbg~aFEaOfr(qarIzdi+7L?0W^Csc-++w* zQ60J+%i-Q-?DA|rX1%%lA#2?!TJGfni-MmYn|{>uW)a>Gkj-RuWH;!fx{9c#9l4!U z^VKPJO3rfvQp-V}11srL4X8B3{GNr$K zUyc|qj~-#iNr!ui8XXH$MxOv_z}oTXcdhd$FgZwSFPiT1+%abHlTCa5K%K=s9AB8w z_|$XVXyrW~0?Id(A|$!>DQeiK(yj^~*{=5~U~co@1%X9LX?VMifP$%uvQAv#kC=Szqvz_S$!#n3cs2gzbFv2Zodx#ntVd-U8*e zJQ$R-_^+;8o@SKBzK6&t*#Co)3_KNZ>YgrG*e^QyirKcDp*V5B8p6@hNk_AsKL3|z z`UZydeXS$qZx?mw?iv{(9oJv=Bh|Li@jYWdC&9xvH%-IS7}(h<54FskD4t9X#R>#a zD^-$#-Trw8!b!RejA(pP*|&UEhJovjfBy)VkJgT-cjo=XXP_=}lJb+Xq`3GCg?YV( zx!h)$%%?7ypvr}a*Wnho7s0CP0uz9rF5MjH_}aUB_!oY0?_OESv~FQ8MVQcsd%~ag zp~?&M7V4FecskG3j0?uKvT4Q&l@E0F{3R|w_>8i-6nTdBuiNqaB-O^tAcl>*cIgdVX**MkBgQ9uVuu=v2FE?MXgc!hB$4Tm&6ALo@g8D-8*DOi@ zU=i>PVnV{f><^)eR_3`O|mHH$~_MzJz7GEl+yK(|0~V1Sa3k59ME zpTmpMg#d#4Ky_w+7DYNfu___Ob z-1RomP6DL$ZZypmTz8{k1m&l7;FDk!IPEKpHy5J3dN@}r9B=EIDBjCJ&~t(&O{Xh-Y0fU6@B2%TN-V5v<#6e z0xPX-$})KT08C^z(}kuH8ZmENr2$MNjN$j!ioGlS9ILTupxk+iwZ><5`#!%5WorvF z0fYs6OC$tZ?@%s75__jHlh4<p1fnfz{yhFO^|{N6nil(#3)QR8l#ozK>Hdj~?yiYoqp!iBHlW zY1|7h?A*yiy8oi88h2Y`-1zxU`eWqs1Rrl)p`}4*^eexhQU|ituFDlpU00NzF%JXf z#aoxB%k@GDdH2;Wx%n%tvlq^Ob2ZU#SO&>PS*IHs8s6S@nHh?`P@VX%U5@?<`GUIl z@ApUi0gjyKJ20K4j5)ZO}ev{-;<#X*|yYXs6_Gxy0-pz~t_=Bb&@XB(MVKD52 zLUMd6>-hVw!=qL)Bg59;pYp-0))&5~6e7F4DB?=GFLJk>FYWxWGO~@{_p84nhcFQ ztgPWQhy=A`WW6${J67>E65+1KRd*HW6<$yB=Ug*%tozyb&`a?EP_E*DNAN7XUE4P# z)^(!yc%8pf_n(%DzSpfJWlHOXthY%;u-*J6tZi_@(hgk3Xf3d7DY9IFl$A z*ky<7ScQ%K#V&CMZbcl+-uBW(5?9UfOKQ;lE05cah`Fua^wpu5Afn`t)B z?I*UMX|~v(ZSTr~w0WIx13cH7d9zJ7bY0SLICj^TfMKZpu0E#NhccW9*NlCl)mQ}XU8^AfW^J(E>H~S|MIYO(RXVYGb{qsIOKHqwRKIrVO0pN~om0`+Wb?UM zS}6g6s`===({N!lFCtgtLHSMEbaX|7?gMRf5ye|Q-)f4ZaQZH-gk)iGIaWEc2zwh5 zc(PaQcJu#PlN>dSor_&Uo33j6#WCk+Gge9m_68=b8~jf-BNOe*dS!#3-TQ?7(JC4U z?}Am?*i{v9MJ~aN754}Gf)-7ivipOnlYf(|OcWXP=2EjPmoswQb`0=DD$1=Y?af0Lv(Sk(HFGtn3C7GIvE^)GnLF<-dA9(S%n#T*FI}1Td82U>*ea3@>pPN;y zfmoG_1{BiDoIwSuZ z|8mL)kjUwj6%+Zr#>GU+L4SD+aC$?xU|&E=NmP!vb-{_|!8BepdMSBBX$;Rc)HM=x zzw>ncdnP}HFENJDeij}_%JThP>|Znqc7?A6#`1MHnCZR#7@iXUq~e+hNg&wuw8E@i zSYfxD%}59dRjt5G{VLG*IX;6gaG~5hh0QA^RPk{@N0p~>j)*j2)@C@pqg{elrmvP5 zVq~^Rj!H#!t@UlQWW4?w%M=eXY;}wlHVyLDS)J+qmxN;XO1|;yQf7Hr7A5?Yf~);& z2syKLLb`MqtS?k=`$3DS(_sKgAJh7>{drtw{nwJRX2;;=`_36ITls9BxyCp1Mj@j_-+Wg!NRg$NmpIfc| z=-{{irWsL@ANM<*N>6N=njNtv6i=k$micRU>H3;jmJq4v0f4yGxe-aY8Eqz^01$#$ zpnxHp>3ztEW-b0U0S{ARnmStKJusSCLrd|iA?;b)A&`Jd6n{8SsR4kO4vnF2!?tJl zMK*$w<=0x=Y?p`r(bO_9rILI?7dML?oz8>KGjeg!y%t5nWno@&l&Fy9eeHYmrF>Dd zByzK9IL>dVV&(ZEKl(@HZT~o4#i6u!YCK`6VdSvF(YhbhKvC44?f63|?~w0VHih%& z_z}vSnIF{U>#WZrVxIGY1&$sC3lp zOQE>43@Rex=`r7`X?Z_bnkl=!crn8JDqBG!z(~WuAR$Q$UGZe~5$Unv__+Ap!biV+ zIi4gV4h77@ao$!MP?%^hD3~z}`qAoPg@ild-rs zMTmq2_eLk=fpyZBN>(ikv3&l}wmQ2u%S$AK?@ z&O@dIV?~H4)c#Jy`3KVxy*UkJX9)BCTe$@hAP;tn>K(PVra^r%Gd-=I!1ymX(d<4% zN{V=Pq@aMVbZl&F<@WofY%Z=Nuq2o`=nOcQ=py3eu2G4$FgE#94*Nx((u*^S%Ca)` z$E_YsdDu5bNNk=XU}OE>8A)22r+de6)RR9RE-fwXe0S2Qr@985wlt@%`!wh8H?Dw# zak{YNiyXS5YNdh~NfOs-TpYp9MwY+y+lR($x!WISu#GJK5e1uYgzt)b2G+R#a54Lh zW8uU|5(XF)zI+aU^O|2weii;83sZT7D5$y@LAGB<+})kFPHc1XS4yv9U-V}=01U9$ z(0g}rhM3gY_kwElpWMN8aYI>D@dbY^hs;k@X2lTsFXXd-tfZfg)Ea$ysHQ6}wTWpt zlsTH4;~4@vQsqkjfanL=QEGm61uc{B?VTk0V?0APlE36@AyB@GTteB9bzJrtX`N2| z6s?-xCO4gV;mD74>?0#5i=S&7SHjBfpX@DyrpZOwcz4`X4gB?^tUH93D}_{<$8gHO z!1AcC`7kZF2d^I|Lbt~qD-#J=>338n+Sn`ar&?9Z5RW}NGSP2o=aw6^->PQSk%3zj z_o|3*_8uWBu=}-kM*5}2(DT`xtHmwVIP+E50r4Css1G}(@?kkA22av<>V;rlH3e|S z@iu%g+rM~7JguyQxHQ4@ifGL#`T6)vA{0~jbbjqB$6B9DB?!cH3wm*Rk1`0Zc(i%Sky@^=)yK!QW%dG(m1&)*w!CO= zY&TmuZFligxILQbdJWlJ>WPWR>jmgsL9$WD@o_z^`4`Z)jI1ln`Lb8K`o6NEMm`uq zRA)pV8h&;cXmJg@dU@-WI7|KXzV(bW+c!==`F--aB zOOtp~8dK*Ta+?_Fx52da_l7f5%x@U%=!ysd1=!0lH>B7oX|7B<)l^R1nFYxq_pg4u ztjAjX+S!+!lT5m90%c>IcZ()psBGC=2?^f###vGljlH>Y;m_n6_=F?rTj9zqj8h%6Pa~SUnc9}p7e-p35$m*7Q=9P)ZD}xj3nAHQa^{X>XWh2RG%wGZ{%aD& z4Er{{>|3rXOZ>DA-#4Aqi;a{+>P9K{D#95?3t&VV=*sSe@yXi|O$eXU@R6I)?tu#*ecIhIg}vBH{0R3r_> z?%*3~gtaIddNc}D%otUm^|^@1Ij+m|+rPhlVcJf{dV?*X`==Azj4w+GJH?y-{OP=K z*!Qn4&oS%6pakjd;+Rt#ef*ovQHYN>NUnhOus-pJpuVkb`FI@l60$2&YdOYcN4Sb{ z|IVLuUmHphy5<_(oaTW-#{>EL$0FeNmFQWAn6Wk({<8h%cmP(o#$>r0vJuw0e}JIh zu}pnjY+o}l6PSbxiq>9fw9ain8|ki4jjS(B0ES`7;)H@v%Sq8nXyy;jkcwxZtkQ~> z;m!K$(xwOUTp6HeFFnk88c;pNp~;>vGtND4{j_yG@8|4q*XA2!pHq_RAHmYjK9PKr2+#q zpC6b*`jfg>sNL%W0~dZ_@UPiL!naL4o_R!QgNBFV?L&~YimRIv4zo~k^)2#m57ZM< zGm^Hz*pz5-adBe~=^1KYo6edKTjSHzXqtb~4)|;fpxrZ9-KR&>^7;6Bb>0Src2#Zw zbhbJ{5xD)ur8!i3J{@riK~z*`-I)E)4L}`(0_BH(GuGI`@XPK_MG?OMUZPTs;KBYX zY>n1X_Ni_W#d$|2VIP|$6&K*z+z4McQmhai7*Q{UFeUq-&V(84XWpM7z940c{dmz_ z(we^5SG(?mjTiLD*_8GBZ?eF@9jmWx;iihOxbdR}2_{`$#Xobr1TqnBLxX>@4B&xi z@EH|uusvk8y~gj(ed^>Y`VgU&iQ=b*6rs8;#ZknHE3xxj7py?9@(rECJr?ckTC{*P zf7XVw?VoNRhyB;0vzEVLd5U`3uo)8vIuBO=p=~M`du8`*6Tav-M8hBYZ*|nv3fv1m z(3$-cI`-W3k-5G7rR)Y6+KFmJMnB`?@Wb`GGd0%e8L)o|xUx?n)H8R+Zi7qKE@|BP`l1Q#E78On)Upnj}cLWx`Mq z5S7v-`VHi9y3F{rOf?D%pKbKd($s)v?pKQyz)2EoIaXMSU zgk)e_3MQP#@$^%Qs8tFIo1ul|$uYg8q0Ry_>L^N8@VXWL?kn@Tg#!YEkLTf(!hBsQ zR={kj8Il4LYwXL&XMWFA;+{uRU7=z$3?ux~SYNMo1ufZwc*N%KzX|zD<-?J zgZ?k}pMO9YAYaS)2FOjpdOLh1-XgNVrrg&qpu3PZ=(Xce^{~r}6K|pGZ>M^`Cw5*J zB-g`ZcxAtP?wGdc93P}Bt8;P?cdZub%DlETjRiw<BK5u8;PJiu8HuY-=K*Ia6S=1bOwl%WrFqP9O(}EKyQg{(G?n6Rk7i#N7EI zJMB@)^$XJ9r7!{)US#`#K>Y2Y-WLmTu_?u7{4;R{k+1#o(*>8ZjpfELH&;s9oLc>< zX%zHnHD-2H^O1OPJ@cd_Kl#Dd_q{t14gmBo4TZ)8el>BL=#$kX|Bp*;J9n;euvDcy zNo94JDTAVVDCy}sJv!BXf9(gc)bYDkwJvc?nDal+yhk`1M%&!DSFM$cuR%Y5rwMqv zw^+jl`)C|rXSQBxQ81vzumhCv7pOk(zo_t#NO*81koevn6y|<9rFku4eDIym4>0vs zbU~FRuoq%ECmMx?D$i+sKL0U~8;Q63!ADCw=0Kz~95)JCp=osoRmkh{ zl`77N4$0JsPJLdB##no8^DDFhgMrbT6-jQ=#X^Pc^LJG=x-rd_fCh38G#~uVwSqON z0iuff#aYVAL~pc0QRUK(E?hvkm0(ddUTz}XiLIGQdcTA;_2kJydc(YC{}sl493}$e zAf-+sYn6(TLM=O?@=!Gm4V#&xN%H#fdZ-&E zQn@Uuhq?HlhdswD?!e)~3acI-#?#Izd&|D>f%_UwyYv_4o{lPs`6!T?8`Y)(?gV~O z2|%#~#-np@6i(*P!fyI+Zs0KR+gsn(be;m?SlHa?pwFE0=B@91%p z+C`1?j3q@DuK*6VkHA7Jr?C*u?88>iT{+05(D!<6g*{B(Z0DxKM=kSVhRnHa6K-r^ z`gc4i<37rd%3WLO5c22urLH8fMV2Z@KWrZ z%6Enh2UFF+ZKX7pn@a|l&IK{$|%nm zW^la#fF^(17qOHllu*~JX8Rw=hL`5IHOVl2vdMeMyOxK%pQZBfWEZ~yfvq{|WfN9a z5QRxQ<$GeWQCD4iR&1BE^g9*{Ew@mWjvTWbwM@hWsLstTZy?HC`O{QW6k3hzrM^y$ zO~a@@&&;Oqn<(CqQ>DHd*`uexz0sDisc6W)>cHO}gpX&3^?AYIG2qu}nMv%jW;vYk zy%@&8f0S$+b2pU`o6mLP$H;*RAF)R|J3E{AVb0tYosxN(p6`zJdw95FBYY!Ar4=#w z0st1gQG?yWzqO@{j&Ku9s@hfeC41QYIq*Qv#wg{XehJTKVI5Jt4+g_Gv5vMn zc(tBFtE77C#@pM3i?89U3Pg7(OA+VneSE;v<;^u@?fFZLM+-~ExWM9fWRVLVGh#uJ zmfb(deOeL|``O5FT!i>mVX&Z}t8JPU={-!9{&}-|Rnn1&t;?giYcEz;w0V_(Q&T5; zd2W7jzPXL=K()WmjtL(0?1Xv$^@gZyjzRaNWnO&*&R(Tdx7BP9wQSVBw)j^tfAv?Z zqY2^Bku*9j*5)t7th%&VB!*TEItW~&Wxrn@J^cR0kHqI4#T8K$Yq>xpyADC8=a+A# zXk-q?gF3hnI$}P4#^fZ2I>4vxR;~huDQG8eN&Qwy+y^yEH4mEf%tbbVH>0^imXHZj zkyp3KOh-Xm9-Z0}r-6{XZkOBURu$M?&=)D>em7Io9Ns-nb@p6`! z0Z~VJgD(k5UlVphe%6z$G}<1t9$rmy@uOjha3Ww`m`0;*1j~C3K2wZn69;!s@4{zF z$gYD63y1M}&b+r2y1VaO`{tF>PoAx2`2EM^jj+QszLTH~rIgUrOgtljzlN-|&h3WB zDrKCiL`S8QO73bhHCV$1;q1G!Fqm`cXyyLoo!;Lte~8Z-H-$*e`NF(<9^sTk=OmP|Q_V?A5dyin@&RuuK4<$?kYPjBfG(6+3{0MKGj0_qidq&Bj z6@+m)2YQ&}yZ(4q9tGF?kOYK9qRA)%-DeRm3v#ykfQ*lC{xAr>p zQFl8`PZRn%F+O-Te1(qzX|pGHt;TqxzUEt(+pblYesHdE@obQqo2v~BM<7z0W=uYMuMyY_u62rf2x-i>i4D!a*u{y6@h z1^Xn11Ay*M($0=Tc94_oyS>ow(VVv7wPb-ohrV+k;8NlC_Gay-6hTG-AY>BE4u-1i zsJEg;wi@BW^^RsgQHF-LG(duCnB8p(*|1V5JCr-haVLXPRgvRc*Wf@X$kc4>rU`}f zV&1*fIOqGyv$wq9Z?R~8Y|cao=XLwskv>ZAHL#z-n!@%P++HPs3awM;J>BzVTGN0| z6Dd9k&Agb>x|*6^j-<}yiXsNwjYu0rCQ|~5=<3&)RO-?RAzVXNuaO$wRjW^{t{J6P zt{O=L5pF5fK@I`DDZWj8eZo6G`;ndOXoy_h=Q+ao`{-oTU%2o!{dhSUNBAk<1*VW#1-^y69gocp_746a<(ZSC}rBAF2y&GpFBVoFH`K+&Z>{+5!KWDj zSLICK$45`OQ}1o`1=ytF4Lj&Ek5(b-mJG6kP7sg3-9@>~6#dA4Enh%q2D-aZ+1`0P zi?Ty}Q(*_aT53fu-tj{ADX+A~3}`<*zwJE>IyWpFAB`nD)nO}z7}9AOh|2=>B36KC zJzQ|@evrJ#tmmpfqrs0o-gmEan}>9M5`l(RqdssCFi?hJX~a(jN9!W{#EH3+7`(?i zc`+}S(mI}oORu+}sz*Yg6Y6gq#&~y5;y{7c%4YM0GLewU4|fEn|3;*pX}ex zoUi8oJrwJ&jO4*}qBz1N_PtStf%gJr zS;<-FnBSp5Xj!EX(EObAFUQ-(cIx@$oo>9tughlV{qd4!_3rx4+X{QUNq}DITyj;U zqoZ>ImOh37y8tTX_ZKhyl#gZ%8Yp+aTAVd$wN~HPnq6AK5p+mmQU1>Gd)yF(!&lE$ zf2UcanV5KT#}%&SJGJ>VKK0{W9VaiW+pnd%lp`JkP#7yar|6<3Z|*q(KP=K-lkL+% zEj4}^9J|*=*2s18yT6$NEx9OPTx1Lol|HtRXp=mpGQ79KDl4T=N;lngDlcj;6V&il z6Ma8Y*xBhNGIYA)31nMh#C-hv^(%X~fk@6&;gkXp0^QWDi(o`mD><-N-W?p+5I>&oUc29 zx^Z&5U}(S5O*u)`Bgr^I*Mpgyo^E_KJYC40Hp(uJl?COYr>R*;x|~B#5>Z|&{zQ-@ z{7Zj{@nMt#BrIVo==>RzJn6@;zr|r;+q0S_66=Ti)Hyb*SDhzIZBru!!2+ybxtxGx z@gZRBz~Z=ubGxzxJf0H1OgKz>h0eEt?op0%-pWqm4p( z_cQCq?EdSQW9nDiZx_{ae-%>vAJF|{{UOJ~$K3t{3N=6x5RjuI@2_al<$YL~a-xej zNzy+QGZ;xk0hys0nO$mOch#u;Xr-Gg)S_BsG18ZbikV+n|Cz`>sep=8MZ5HIfubQ$ z$KoZK`Wy>CKk-dCo0e6GNqhfq7?)y*&Lb98lSBMJS!TLcMJ%T5M9o$`n2@P58CYyq zY3)*pCY&s_^>mENJR;PVo`APTjU*P7A%^61(F;G`uTSy>NJ5_c-`d-6S7_Lbw|hd5 zrwmsZVxFJvvM7#sgkN_SYL&O~C1s@XQ;gVP7glS&XsqQU(d^5|0kKAOPfba~jf!_e zcZ&BT(Gz#Fg_Sg&sKRg$^WT`$=_4w$m?Ek&m}E64l7=AKPNm!R9W=nu;%l98vZ^x8 zlI{19Q}RSa%98NiZu8Giw>QeARp8mpr81zHS`$YXG{foF_?%d)c~5hz+bbFfTqeca zNY8&=6z&nG@7GZHGJ(m#iqIjh;qdS=R?N#$H)Akxej= z1J?U_G0*XYfU7d$yCO&S&*O4@k{Qk74CHTSGqoxqb$8P0!D+`7JEG zDi^p28r(5OoNl>)%TRus7Ds5x(BIq0JKZ~;BY814T(}&}Pk??%8_#Ufs$Q5-;eYS! zXS~@CEUYQtl?u8SgU@SbPL{5J);GLo6lE4#rd(oTWc=(Gb4jHAmFF1<&rD|lgosX| z@}bJY7=z^(CO+NH{*VxO>nUgcHe{|84hu1_zkiP(PUA!aPfl!P?-aI7_tZYL6ABv$vcro;3he$s;{CK< zBVsD>iMf6J+3MGu5z$)ht{}vucR4-sh3Gb|G%St=d6n9Uhl|vV@tJeoA6U$+db-BA zCxpInjM@>feJN|Ec4BJDd-{8#etj|8>xRf?z39pbz%GO=MT_0X08s zh^@;&kpMlvCaJs2kE2O5*qMoN!-@ z@H7pi@Om{swu0}k->y+{?Ut|vY_7%bUL&#R54Hm0MNEzumB_(C1 z=2T(x%LUyE%Tu-O)%!e#O%Fvr?ChWGM&4WQYL9kpRh>_^M8hpX>`6Cp{QOTWFmVh*Y4AmxF*)M0B}VNE;9@O;I2*_xkJ zm9w9){oq?UI&uIgc+BEZ-FkFAJk<)>F)qjF(E@VOD~!zh6~4eomF&|8{||d)&wk&- zu8+_=37pA==m7?zYshZYeKc>;JXN@+f7?229hnIj`CVDfXUehiQJU?lI>UI(hq9kr=^MUHsOOFcX$@bNW81F{*O*c8wr7mICr8ZKvbp$ z7?hrI%;eXq)it%XmE{EZd83k|0RhtxwZin)zWWn-&RFDOgxO=H=c9bl-``;nzBN|` z5`G1I{FsrcD-$9H{#keD;4Kat4I%2+XA+a!7s%89L?isdM)owH)8Zgap-7sP0`RU>U&aERkr6P{2IzncwK@@gZu_V{pnX zr7u)2i%-{9zOEt5)HZG)G+;Mm4K~tg3r4$lC_{F&3j3w+EA2sdYF*lP9)gza=u%%K zWQ&d!1DS`2flaltHC5yR%BA#Ss#&IU?R(Zj9QrQ~I22@lg8NR(8R{pYEl!~bi*Ll; zei4dP*Y9wJLd$Qu@}fTMXB zXl;A*zw3l458r-yq!d+FJAo5rBn_WVq$dX|idbrX<6$MFu8jzf-B^9_u2QbK40D+`G|>W{QH}EDbpW| z1iHl?a#0Zs3|LsG|Kg+C4)$BDvZQjCOf4)lrS9Qs8#iFCs6Z-XoPu|r8xql`)I?I+ z@u2)`%1X?)L8zvXLirV3h!~ICet5Cj@quSVkGtRKb`mKzI)1JcF3+pM=;2{j1InxP zH~>jn`Z9gi{5m{cBTOHY*> z_UNNCuOAS_$DBEao2Hdc&-hrSnagkRRwLXVw8Hk9fjE}~3U`o}XsM3x+ppJugU5Z= zcIWvx9Mkot6OFVkxzUGt>`7e*?V9F9^_k5hR5Z%r)Ct+o*B*H<(tvK;jasDQM4vc{ ze?f)!BX((W|L(OWr}XWk#4<*m4}t>G2occV7BF6(GATOO+XO9!|CFmB>(BW~bMDsO zpaW&(+ZW@xlPDf{zNfDWV_;qwwE?4qDxksHw646rRexSS0#$>>weS6)DRga|~Lg+*mZmKO5xC<7c${M}b%L7l^?ztXgbXFquxi z{YJ(JAM-e+D_W?G^C^K#%gPK5H_Nx(64RQ$95Lqb_y8CAV%3=KyxwlS3}tx@-k-9r z@Uw4}k}f7seH<}~eE5!ES?U@}DN5RgY4i@?-rhbEmyNtFBKZn6;GH=)&`+}PMHtuz zVik!XUjG5q+F7w502OXJ0^JNl7$tQ)?q`JG#xp@f@xMS_U0rBveF5@i*v7X&r!4V0 zTX0t1!bA9HQq~eSXc+vS1#UUGpo!vzq~)fnwz6WQT%b1YN9v4G6N^;(_SRMlAEDv-V+nt@?P-VfkG`0@kdzr=Tv_WLE5}+E*gZegAkT9O&5@4-b!n?y-97 zW{=DKbe!|aFW)I4>`vrJy20@Eg7l$3e!v2?m<9;!oK6`e3tZ7slz&i=?81$b7|L!@ z7T7X#?3Nqh`M2h+p%KS%D3^$#eMqE@_IA}#I{jRgdaEkQBj^eiDB9oH*km#49K#-k zwAZ~>zPd-4MFB;FYLB%rTD4|jap`V`y7cO$m9~tQ7DM}aN_ph;v3KgWrg%6wKLv-! zotnr)dEL);d>4k%TVSB#Ni;4?pcKum4=V=H{KRFFUFLs(^xWVNKxps!M7%qq zCMhB!5(4gKOTQ-gz`y8JJCUNf1m^3l@Z!y4Px%1_eVDd{+q=oNf@Vj3ms0dLf+PX`i``kx&)EfCsZlkC6M>vyzoZH!WP956 zoK{d7y(oiYe<$KyX!J+e)dtB|LW1-gatGt$Iu$%B{UnI2CSMm zZ%0Uejd{_0Py;XcP_L%GHD(TDWs;yL%15bP4l`5O7by;<(PVBV>anv(ui?atqJU>- zBt>zl<-zKS2mt{>p1sL(rigKDq=ou;v8KS_d^C+i>TuYsGjZz4^V?`vFHGJwdt*I6G`?I8kHfu~2Y-M4A5Rav5I4UQ|Jy=mrIh@N|ITba< z93x0b7*3n!X1Oz>sT38ZNXu)8j7CZPhnUKHz0SSv;9D(pW0amOQB-Isi9i{AeyirM z`I$sIRfCaxtPdtN=Ew9zD8Y?GnpHwP#IUX`vpq^Uy%w?S%b`@mGS*j=w25@%;Gkq-Z??rD zN&!MWvs7ns+b+ni2@1PW1(3s;M6S!>bZ&*y?a|!r^A^yQ3+}RidwtR2 z@;P6+%0Yqxd(KqFF3ruUk4%Ej^W=UsuFTr2x~F(md?HrpFbargSmjsbNJ?`XX~7-* z4p#epm$7lH*tLW<;WMedT;eBeLpaa0l78n@_LOtS#o|9FJ2=0z?>@O1{8Q9xS6cBA_65Uk@{_1S_0!KuB2%k6~DU}xBcgk zZ38DKlWBE+Q$`a?cZVm<)c8QuT&vv7n@t|kuXRa2e8_jb0Nq|Bj@Ybs5;16$Hy7(Y z)=i!LNOPlIx#Ffa=skb^2X&XD)%(Q3|2GTZfCv7Dh2!!5FdMDtF|?HmOf;x zPm`j?C2VuVEAfwBx73CFwk`_7<4s!#p=ivjw)0M4zEg-O5GYQF+-Bko0M_nA^jAsS zg`o$>n~~xe;F~Bmp!BARB_j~@+ zPc_ukG4Ocmb*l3|C0ZmB!_sT0NR3J1ZF_&6)w@yQyH=au2@4YhXJi{(jyJ)b@d%w}q7Xl(- z#yq6$lG^K;Xdy1R7A(eZZYPS1(JFz zgC+eW<$BZaz*EZmS$r90<@JI5u1AUU%PQ_8a%lz1u2wN^<~s!FsHkert@Ku%ZtDH_ z%lW=gjG!4Wy^K1i%qz!en8X&<{XZ?sdt(_%Cu2^0?d3Q7q6*S_ zmbWFi$hD5VA#lZyq#5^!ilkBSEd$<28kif4%SG}8s3bxwM{R%oSS7xE(egF?F)?st zpXc&lLwgKZ_ULX@FG7YRGwEcJfN?bOP_+K7epJ$=%XbpV-<`dVe<#3Xv51SM7bFj> zmpvZ8`|6FYJU?$+#yNzHq*-a;TQ6?!b)0Z*g9QbzLlK7}t#377Qk-4z2DkoO)$Arj zVlnrMd6(95CwCvvh8F_+JVNE5NSY@C(2GXjW~lkK(s%xGtO52 z9Z5>y$r#7Qs}kvh8{vSaxFi{uRn_KsULk?ja0`#l9kNu}+GdGb2cZHnZv?jgpwaF+ z0Y;l&4y zPs1M+fQRYe!dL_yttR^ODw`hH)m5$hx6@B6dXb6U{upWGkJwUl7&-g}V7$p}i87D>T6^E;G>Lf8JB0W6 zKY+_(3J@!4Ow=O_Y)ZPo1L0~^1RT+a-NKZ`)+^0`xBuHRmrXS@IVwVE5F)Zw5V%2? ztX>0!6>%MMU0m%sGW-_T!=NwWe{qQ<9^eln&ptsK-DJ1gH(yaU z`^0Owzaqj)*5f{XFW~Is=zKkYY$wFPSH{T$!^sgRvh_F4gA(LJNk<%-a0j~l)`hH< zNh@kOgHV%6g_sHl1^%q`ZSUly=qrWb#&G$L)e0Z4`s|LvtoZe+xss)-gXI|w=sx|o zRAa0h)TQ6si@QX%OaG@D=VC*cl`q{v2}J8Mn2^29grWXw%lfyxTuyqoGv%DeM%ivK(l}j zblRn7aO!|ZRQZv#a^=bEc9Kgzoe|+0hZ)}NkTvEL!49QZ#0=7JYi!)a=XLsx)|Ukm zb2=c8pHU9!sUf9o#tX+`2?px14;+n_=jYO^?fkdUTK0K=bX9!RZFS+jjjAd*WwfUE zmc_ww$M$$>jkhhIZ%m$=LYbjL0b&PczD!ZcBu+X9&-Q76YSQ^!OVLioH(o|5(K&5f z>|3K@L8x4I{tY~9`6sboRFr3dH+ z*Sq|?#woqnw|o-Mp}WY4iHXw_$=TUeDlp&bc6Y(GqQUT9endn>73MFJCsN;XW`Opi zeDjgy^pBo^A<9Z_$!h9p=WI8;s;DFUgL(Kyf+$7e%WlZ1+ZgLYiyD0t3pIMbFwV8{ z{#EF*iYl6@*!yqb)P(Lp-FT(gRIhV`<(f^VL$#0U&-8zKHRB#1H6~lyL$R`bj-*%G z{bZLjNmiUcBHUAM2Y`v!+&@Yq4aPa0h8Ulfeg1+`?FM_rzu4PQi#4q2C`qMgp?2e< zyo9$aI81KeDe$mAE_|df5dCmEJg&LlyNKhBQ5+LNSa3S?{$id5rbhUz`Yu6Q$mnIK z>OKFDjo_~A-ZU(ni*F0()&3Uo4Z>TkFNONy1=1->Ssg(P+ed{TPjRa4UO$x^w!gPf zG^h^qlc9Nso`Z~NtqikS0llF*BECemCbsj(R*T(M(4(uWSZjhXsPk`jcDBxdL=X_d zNGadxcCpceIyPe|Eag-U)S{aLoj~CpJnl=NVed;4XrE7BHwS@&-gn=ZC>BoZ&9`-e zy(lXETY!CDw;}mA@$FZ^;pL-+^B*DaTfZB6f`e?p?S#t8C>U6EUxtvPSN!9iO&SoD z22=smN`&4sHiq=}oRRN>WHHy~D0@G&Loj|VS36OkwF`a$c-m^ub;4l?z)BUL&}Xs& zS@{xRTV8_EbWZEi`+6Y{L*f(BK{(CkGJOnM0ww1GTLT3V7Rx`2Wl#4uzN1? zD{_{I+t3iuPa7dm5T2DCk4KE$iSihCTPm8$GLBOuUg{II8a1vyMvc3Lh=#Z9f&vOL zadFNXuAHG8p*CRmW#+YUwt+Rmj>`9*swrC{eh(R&KG$h?ScfKo#Zc&!J0UhU_gNaN zzOwgI&E;L?PxxE@V+esQG_U4%dsNzG6i-Tm89(CAgrUfBzqq(=sbfPSc@9hQuf2pC zt2w!HJx&-$$ElEW#xAJ(zyjj`5guXu6&0$ zNDdE2?N6`$1K$0s3{^fqM-F*EE$G*m85Q|{DbuK^7j%)l$n$4=A^A3%n%7i$rtskM zjNvg~{=;xRCrEmILX!)panr))4^^(6tIuaIR^(4^-4+wk-B;Rs4Rd=h1i|nEYEOC_=^{75OOpZgo&~E^=UMrX%AF< zlE|V4-FW`1FZwj@*D_w=p6v(kXGh$TODT%({l&RCaYyivKZD$;o%G3s+nm5dq3e&1 z+iQAVw7b~APc7@UB-JDqjSL+WKuU_JMFAaodGQB@<)CQBZ67eO(yz@>nY(9d_9v+c zB~{KPj*csirG$eZThb>h4a$ShVG$83cRX+Xgw+F`vKdSf0d>w)9^RoxJZygS8gh^; z^;-e+rt~U@Ga&0p1#qcORXgK=|HVN{ja<-DY^QHHhFQado8aN$t)95R4YuHV>E))P z{l~#1mcgjtfDT_Fa}JXH8{&rBl@(b>#rWW>$6IS~rQbxh{9*x*-1fcg9GmylD7M)^3;uA*hb8PJ#5azi)c9USTMVNloJ)7oir7L$*2e63I`y=N#zV85grb%;i z^3qSi-2*5nD6iK657-^ryz1q){{=ilh-}C;D?#FFHj|rCwd|l8(zF$%|*d+A0H=)fq4U zSDLK_6AHjk!=lwfLBZ*yTA1}M&CT1-KWBdF;p9PMjZdMS0$Azu$ImX`^05eDpo-AG zeFt;LNv6J9IEbr~iWk%Wbi4wKK3@#Lt~A?~`OQjnasD~ z5zBy(?GC$+5;Wm+NHX^4`AWf2n*9E|SgMX9#;KUpqTXUAZ9$~RefU-2!@d1r+>RD@ zHJdVA!BSC>?K#d0ph=J-U>d~|a&z0Ox!wQtHaG0peFNx|TRz+MP9{Fq*)u@`?6_`t z>{PjdTEccBm3mSKbZCiioM}qr&5CEX>lpKg+YY*BkFzVm{hdaCWE_ScJvpvY#TEpn zr_W3eC2v*D4qWc0@ypqPnI|j@mMonQ`Di@70fF&02vEbb@Mwf3VLt!XZq$iTP*7%| zawVe)E#r*%eOSJhh(ouAVbNHzCtX}P$a6`U{05MYWi65Qy9SX!vGBT1EYa&~LJd}NdM@F5ONXu#tM_QaQ zGBu@swKZ;TZeCGe#HiuPlFZr=C+z|QEu?=9h!j#LtTx(aP*<^fRkeHrDHnuLSDCR| ze$WJ}#Q9}^L?<6{EHG}mg7b_ED!~KczZ2_=bx0cC9WP7_UT%jn&V2?gbR)(h2Jd(@ zi0kILooeW;i$i~@R7|c)En3^<)PM-3VqJ;-M7C^ER#Qu?HIHPom_x6KFoSYEZd@=8 z>hkyXB_0X_5W&YCpf6hZkQp6H;%i7WyG&>3D^FguU4(fB^DVV{3WEbu6+;-oXQ$2P!+H z`!>i}@x?7|ZPqHWSGyy}`{7@900mt}qiwzPam2jGgc=*3khQOFBV_WJ zEZvz|7@nSF|JjJ~q9`}UFww9bEbmITiieK}XZ$*qrZtNQyZf-#lcdbl{XYBE&P%t} zM)~<^qKhZqG>x@rz;&0CUE$`LK5j z7!p?o`lbzzAEK_x!WxnX@3P(YM(krGv&1G_?FC`y@25M7%JyvfuF|F!o5>Z1B%sb>!fH!z zc#MSG9;g|i1T_C5#IhKZ@l0O!rrOfBY~QHD_C(lhy}Gv6)}vd#1s}Zyz_6u+wW=(X zNPzW{atxr^y|G7H;XN-fv)O5Di&ovEJpgODWOm|JQl>WNS^-F|IuR?M}j$PWp| zm`-HV5(-K}CYWN);ySmB%;Hl3h^n#lK8x$c###5V$Ngv)=_d-#0Kk89_LNcaFO_R^ z6pEMmX=-GxH3|gMB(5BDnzL*MR4i+l&J39Aa62DdtlfMf+edr3QfIfKA_@fK#(3?Jw-gEQtXjNT;+zmUt8od0lY6~3`_mgRr#h#FqbEN&r z#}ZvV1;6E#JRaXic6a%61rdua_PbC$PP zjbQ?iFR?!se`G!F@LNy-1Y?7+XJ|-zV!={s*puIUq8_gxi+ulN6j(!6;zDG{VO`IP zONWITAqR+NMDT@|rzaiBJ1IgQ2a#o1z+11~Xsn^eZ%$sXZ^5itxgzM*G3pY0UG%U+ z{}McCk72v{Z<#{M@UAh zkS|{(bz8n%Oe6R6H$|WZl$nn)35!wHS(ey8Lqoxbmrxg30MxaFNWWIRrkqQ{8IjM=}oY0xY>jasHp5GRS32a6l$p}1@oC88Q2 z)h4?xqv^M0_*G~3C`GTqeu@C#_q5Tq)Ro3VJoQQiF|eIpulg%(`9wC-6-Y)6&+$Fw z=8~SeTU}B4VrYQ;IUq#_?WsYv3ZfT1WQjW*gKlk}2u6NXHFclKNJS{B3| zMCf{$8_i6v*Vp$hMOi%nt)z}R-Otx4<#Ho-`}UI%q>GIGKVE=pX4vnlrWPqUetx%@ z8f^{fy`L8@dB1ztdyXL6thI{`hVuEZxt;b^97ivGvyS-01cE$#4<_7LS2~QMx6DaC zIFR_IC#*PT{E1FGv1aRfMzKP(%7D*}%=C{rr82kVI?p3Fo8(x?dxHA%BgalhJdpS} zCkb@DXNdvR!`aI6GQZl==N)xx(Ov6K4*W<^KM=lCIru1?UNxtZKpN`^`?qOee_6_$ zrAntnrLZX4ccOU~v`Y+-G@~Ay@SXXHBIrgP8>$m>)MF#E$Pj_!Xz9?6-NLoE9M<8(5>+BmtW2jH3Zlew86lK0#yI?*bqhhaR=LwjQHBV{8Uij9PrGo-0$dn3Y zun;DPzQ>9MkgL=F=ZQ)3-xv##b*mzLn4~(Q>-9~biAHcIBf5OKaUt^Qvn z@1^w^Np#6=V99W)&fn+^cLY98ZuvnboB6?Hn85+0hHuy<0CqT)T{e(?S-(4k_t+kM z{VL?}!QTCi7~zgmx0Egfv>;??P=5&6$qg*w06jIF)tCQUj9&DdGdI#uv+A!&=hVZA94F>p%NghAL3yuRY!!{(q7i+ML@JtV_Fv+wp}mF5=Tw z1;X6DUVe;~IWIg9r=KPLGie>qrb@};567o(T13@el zn2`gw+Kg!GgThB9osYm5=5`Q(dHhedpf~DUtb+jo;fh)u%Z;Q*R%2<0qLKKh32-dw z!X>3w!Q|q1Voi&PQ;1xV4Ga7^Zj@TRxC>WXm4^Gi9MCUIZ3MXj9pUlYAKY2|c5D%R zQ0VkQySPF9a(mR{HS)qY zr_~&XIXe?_a93@qWub3-3JUba3lO*z$xIivo%T$5)F4z6Et7ULyO}LjXOL%<*%Fg( z{Q1t-Yh`s+J;2qUC^c~>2DMWzXb{kxv?VNBBrVt4dA}Ys0x`p1q@;A^m*wAG3&GL` zfj%)k(k+*wZM*@zRDMVf$n{I`W7bXk?amNI`ifIe5L>$3 zL^D&9-Uv^0>^p$|nrilaYV5}sTbB8dz-6~W#A!XNdj3YmNzB;Y`WI1NVDOC!37R+X z-F^*aZVA@BB&K_#`nk9{CC&L@t+{G7lUvv{mSzx;nVH>o#edt}*J7`ymq~p?Mi&!% zDS%cJN@72m8%U0QJwv%aG}LJ9JP0A!&!x0=a&w#CKI;ia;Dq8G68YM0I~H~>qosul zV4Pf}0qO6orUR(*cE)2bGOKRUc$BJlx3_bY*p#tNH{NTtn)>F}&(O(o`Y|yG&)@2} zQpegBdT2}$Od;j(A9BxGxRw-~tagEBKkUwi(r)g0WIe&micUxd!pp3!+XhC-ts&8Om>+$w!UqvGPqbOh@5FzKQG-aft z@t*C7Gvy6_w{T23e06a#2^&3&MFhZrs)de@4$-S?$L)c`2D|b4?#04Z^((PZv?Kn7 z`V{iOrrz`h=W3TB%03&t(lzYkNe~`^@v)tL9643JP0mDUQ+%CDBhar%qSfe=U+d@( zO=t*-jzdkMOr`9t@9%qcJzLRE$e5nL0r;3t=ih+cCFN2z&=Xjc|NZbO?LIrzQ#+h; zeX35eK$_xeFQsdh20h-r6(>o%C7(oNkVrIH_qp5)e8r|t<>#|!XZa|sw>nHSjV$8esv!!NK!`4t|=QKAx+g0J{tP9q_ItF=&?88pc?E9=u~MytY|C zo2?t1%H zRtq@4(m;dBK9H+bB15@tIWW^;LH*%C6oF2a5xyahpTPH=uC(aYb~^T?dL94)inx(> zp9`C3gZ5A1kUvfyr(w}39621Q`10 zqqhwz5ZDxCqgLaAvKp1455e^>?qJvXU>yY_tSadYLRpZj&LPT!+2nb%Cx!b#tflI8 zkKx2IPpdr$w|B4pm`SY!0~nO^Z|`U2r|0_-!<-$Cqr!&r?l#2nT%TiuoW+}U`{isoy9>!ZIMQhm7Fh31vxle&%^qeF4zAfMP zX}_N2Hk#;|&2f4`W}gH7Sz%W7a=JuwlRqQdUZ9K|VH61WB2hl>2;~_-#bp(#>Ie8z zm-8OI8$)176(Q(F7>iTsjeRr_xa>MRr&Z=-P^r%ml0|DS zr^h|1c?uXl@IrEGxrTvYpZ0n^25M@_!8**YCRB0DJCwij*!WfN z`y(o?_j#h;K1N4JhbOQZj4hei(0^L;@AwI9f&q@Q>&k1$ugJ(*-y)wyFxGnL#)grt zuE?AB5nKsPeTdoB3*dFAiZ=gV(Q0Vjtpom!2a8Kl0Oa}N3i&jfNsipQKnRn#jVq7<#E!z9uc5=Nd zQM{j?yH0SbR9y|T7i|zmC(P2f`C!VcQ}xjf74~3OyG{H34I%ggnY>Sp?~4#%HBBGu zM2B4COa`7qt6lKJcRM>@Ye3nnsu=}+KWWe4E)nrarU~U7z#^}}fGvj!6!5&FkAJ|Y z-wWgIR!>N-;_ODM)Zyg{7>ZDZ-<~-r|Ejr> zT0z)xSuH1XMHidwbK+I2s(pglr=W#Wm~`s9A1=4Y@DIWQA0a~J1|9f7GW)FA73!Y> zQaMUaHm5Ct2Kfxp?=xPcC3TA>dmz~q1&u&?i!##OLmE3)Cz3+j0r7x9l$Yl}QvgUW zj5&a=%+n}Ot(4vabR460c#CR@7N!RU;5fT^xly+^B*_7L2|n*6C~j`#tuEGCVBMXr z26a3&l9Cy>C3~A=DDdh7?`bDY=>CsAT1lm^B{~wjrBEdrOo+3FhAmFYa8xmWqML6Q z^K9td&cFe>O_5URW4Rs`x=jN>mL<8_AFivF_{GV=K`AU@p!NFaTtnT{#O<*{wtQ^{)YGA7$tKN2Qt}Lat0GUo4 zLkVhbb*kKw<+J^o)bd5#jp=;3p(}=`E@F8mQB&$~GD@2ro?2i_@r0JW*L+s#`0ue!> z2J-`YAfQLmLsY~^bA%0t$nKuqyOHk!;-zqhp14G>rM8xZHg5s@AF)>ypSzz65b3pl z3M^Jgh3KVr&D1Vo{b@C@*}5+|J!7{{HeVda5+!jUu=F&-T%6+&~PzV zuldhJ{(P|qd#z^GqXT{Hy*c=+shZD(W9{^|fV#2K$hlU}wZC*6(dq!^t#uAVsfjN< z*{LsW8>d>(ie$@VtA>Lbs*Rh5d^f$uRYemm)WY7?l9dXV#nG57f)N>>BhY$@> zq+)U&|Dz9FRZBmatldnv!-;sB7x;X9iQP~v`Ct993?)0bpggo8?`(C<(_8@yZ3Ucbi|RIY)tWez*-o!h``}iVbqJkh;t1j>ME@^MAI|<6*diU4pNT`lzVssUQ;&8VES9VAy-TAfq02rgANgp?BSSZNIOxMb|1zPt2wr~3UYqJc} z?BTz*NXS-^#H*onTZaSbsjlOh!qqNIW_q1Ag6IB{j|}_Yhysy!%d9;88L)N96p6i0 zdxgx8+^wLhUvI^(v_pX-NPE0$ z>!0Pe?5l{L8={>&7mx@?PT7&%5c!og+k`7;w zt0DgzfoML1Z(uoAM}NR|4BqRFKTU3p3Vat<2#Uy47+6}u10KvC0Q=uQM|2{WB0HE4o?;xaXOm38jLA(sL`WxPhOl0?1G{1>cac z+ON^xR_Xx(b;hszZL7JWFp13iI#s8j;C3(0eIEtsPvd-PcyFWs$g?USrzhlJ{)H=f z6Og`JA-x`+~+yo;=Et|eTrPK*#Sy0r2flW6Ti{ug1_l(N*%F#%NWr; z(q%XLa3v%leCXLEV!~0d-{-C~Gs5j?R(knlB9#pWNcyU!?M&pI9`Dp^aY|)34}bln zTQB<7<+Rmz8Td+TWAWJSTYvGVJn8M>oDZS&HGCqmFTu%YFW7ojsdo z3h!GB!clzjK6*ijqM6lnUQOW2n3qR?TAg2z2B@~cva+&dPppWOuYkG)1easn96>^+ z%Y=Rc)W+bbc2~*0%9fu6LZ>8S?;yXLV{>~*tLrjD+g}JzX1&Jhleancq2+zKcHPZW zR<^VJzK5sh;i3(ICu`|naaEt{OqUB~aflL_U9}U1IWlYrvc2eYra9Cl^27=qFGTXM z91TMNx=h9`(b=nV_B0Og-f|$aR{DMY%JE~tve;$VHkR97sN7K4a1chDgi~1m8Zr@+V_cv#n+Zmu49GjIxTqT913=-WvdAacm3sTj!#%M^El`hXo z4mSr-<;pcznpN3_TdvyvD^4>N#(LyO)B=Kn4T8eH>A>4H+1mU&wO(ZVu0ZM~u4VDK z97M3Go~F1wM#z&!F}pnjlu_qOB{9l%$K8P|?y# z4e!!dKXzQG&`mLhv?)KvHxkuPSea{cO4JpbYcY9eo3HVbw>~Z<#wQpmZnArV8`0Pyzy9d) zR<&Pksa z%?uVR^Wo*SyjHU%Wtms!CA=qmHmi*~yn9tZ*J_4(H9sCll*jpR`5+MujEy$Kx^IHB z7iAFv0U@*o?WkykD?blPe$sa@iJdHBf`+8(R6_L_5O=s>AG_v=#b;L>M>U-C{50&8)l_5cA}aS2J{ zLV=bP?*_?vs%hR~8_bDsoT?H4uFszg`1CjxlE#i9 z{s`gHFbkDeo?ns}0;832UcNyGTrZE*{Dg>xu}e4)v5}~CHN5TZ?G^1IpJL+Sfr4Lk zP5r+jZfj-1fB5jhW$)Tp{<!@gW=gaOXzgs))<6 zGE)xqkV0m9C0b!%BagfuL;{!-@*=H~2>CsbGc->7=3Tw3<##En5QM=L-7S&J>Z`DGgK3sbbjY`m6@RwI!nOR-jS5?-0#qWjCFs{;qBC4?6k zgyL!Ut8xCP*`6Gu#i5LB=Q0FF z7T*OO8jgr)(oRJD#;Xt;8AtPrwv`aqUfEK!!yRB=z=M#)-$5Q8zUzwu3Nt1NN!4F1 zZu&H1BJ($WLM&>zYMo_zify~!jd22LJKmI=zq5A%EyAlpfoP*({urBHO$2CTuW>n4 z0k#ZQzv>UiHU6WTx}ivdU$5fgu325d_cFzed{Rg8VzyXN;3z=qYGc}@9!6C%K;Qm2f5?r`9vQWO@vV3 zdJI)vHv(Y7qChrQlmEloTSZmbh3&$Wf+F3GfYM#kAV_zYfOI!3Iu)c9knWU5xhBkJECHOM+`f zyV<^}DkdqEgqOwg!8{E6jVQ;b;VmGloc*a<&pMzI4Kmv`Nh(TxO#}grTN!IAtWJ9g zc6ToG^IK~CwOeD&)2Xt&aTG3__kqdPew|@BGN4*3-(ogeG?}A(d*b9njm=dlv56Yn zr+->WLU)i_f1&xk{%C}v+zQPy;@@3e7o?GwET;0lsJM z7yMzPjdg-RJ{{T(u3jUTB?=12$6OKEUs-{>9ZspknCB%^vLWbhe7+$AYE}4M9zQ*v zK{8lnzyoAU0UwPAVmMwt*$23N3Fo$+3UjVo!(>ABEB8UkYYKA@6Ya^v-%s8$$DaDz zO9m`EfwY{E;Z|C@i$_~wBG9G;9JUtHIiUWJKiHs+H#*Vc89+&S2geO zS?fic-*@D>*uB}xM7ER>=rvIZJ*yz~S{x(X3s`ZrjYwlduV zc5PfXw&wi>+YqsvYoL6C${Ur4jsXWdpyAb&`rV%I;M+*;4!g9G0dQyc*?zgL>_P_Q z9R@0wvQ+bBW&7r^CZ4&Vf1i*0yPPpH53n%BODRCQoHu>l5@AZ6QY=`z&m3``lUOE! zHvOqlXl3yl74~1_|4Y2-jYh(w&Mt3boqP&F?Kxx*V0f!f(pQfP>ZL^l2G=j2y?j@^ zb*U$xc@kG;(vWnxw;{1734ZJD_PhmQINm^^tt<9KvkR7z&_&)M?(&;9ocK6lx|3_L z|ATYCPb&Q(03Pw2u+efX2N}=qtX=4CzuM>(YMkH=uyt4ud5V=uF;dh0z|#G`Yj?#KCMknl{Ta><$9mE_ut32p2e?&0tdnVTh~i75%VT^)h|YUW7W^k^ zv_l)^9Wb5n^d8I!mlz*us@v@3YqywEO_imVod45`oYc08qC7@HA|-vfJEK}7hW^qz z=Z0!)@B#5`GfMR~$0eqLV+&mcHdbLMLS_-{#84GWH((a&)H|B{iiUwfwkK?n{?b|p zo;zY1pGlh#jl_NI%uJ-+F-_Q4y-(kOfGGRAXlng-#$4yK7E8So5`$)G2>&O$cm+oR zGZNCgKHGlfgr9tWR=eu3&VE!m?6TNQ{LD6!K6f(Ohl22i&X-s7niOLFr`r+lQ?Ykv zlNyyCo}1-cjATqMA3X81%o~?=hpEQH-U<(T($Zh+jV(?WjAcbGD=XRX zET9T|%D_uwgTpTsZ3l=lXB+&qKY=a19*7tGXwS5~umw%Je2z_N$qBi6o&6Ypev9CvD5RU(Q#4MApbg}W;s<(J@!<@hJKt#UOe*4Wdg52#G z4C1{%M;?1wj}(T>>Z#-&{7$OL36B+#Tjuwqn9^EUL8M zY#6l=>`e-O3yiK~gLBtw{;S?QvV$oBCn=ux$yp#L>EnE zjM!gjtVUPl0yC%ntiRqa*9*lA&rPCQ;o0&{8k@2v8^8>G0KADCT#WCXGfx&tu;;~- zq4b()#R7Pt_~W?xe};WVM||#+H(lr?kjw723-KbiUgsgfle5ygq*ey%Vw0;U(W~Or zc-$D3T#?>l4bC#EKU&sYw(QsFi0*NDfwws++`C0bj|!mhjk~URaHaaii(e^htla3p z%mC&eQN{me8xQYk%|QD-s*ZN}VokJ;FQ|nYMk5~>v~LiAE)-Ov#kwUixx-KmIa=Z$ zU8^!17|ERBOdehMM;^>8Z`^l`^>V|QwnXrd{kaH$;iJp(in1^DCH@n>Qz z(PYGL&;3x-`CES?EKzi=(=Qv1<(z~^9?nsh$BGAuUQ(~DtHXbsyv?(lw@~jm#3AI~ zrDoFMr`MXh!DBTbeag$P{RIkd6~#Vsd=h|(bG6?1LQNRK!Q!tquITQ;&D5&t)3I|J zM`=WeB%L$gqT}GYeH=t3J5sp+9wur0@9l?|%7j2S8#~A&jpj+FL8aW;`ie#U3hHNL zjS_~}1UW+Q4=4+hNVrPpu*JZ@NC!y_Jo?QK-Fk8Fk11)COL+^rJ=D5S}n!YUuK?>7bq_;w_I*(H6R#H7to6Po?5gUs;QPE zuOh#E!dzE68^zn?V{io*8ifKD6j+2T&)a}sVY`J?XnCOzD`y>!Yq{%EcL zon1Xev!6pje{6&^FM{Xk=2)BENXzmIbnB@5zCI}X!E{f*@LU5Ax788h^bx50{9t61 z_15?f6t4V0>tay&{m1u7$d=jhXfL9D5_xZ5mrv8{UL2^d4E&fPkw2~Wxs$Z72Ul@NJyhumxm@9 z?W+E=RtKq}_a(Y@jvH5v+d?yhv$yCM4Tm#%I6ziz98;E$pQ?EWUy(8DRIPvXePtJ< zs;XM)|L9j1^E%Mg{#Uxg!cUS6|5Z6$25ls@0-p#XPX8&tQuBsqs$Zh0lz%E?xgK&! z>{uIiZ7>oX-#IvZnmsKFIj{p4`o!ED?TUj6{l*}G2DhC$($F?}!;y}FEh_j)Rn!j# zi4?WC*0_a?z2P`orA^sp8kZ&1B00=IFOaUIp{&r(PBDwN<-wTS<>BGOi~>i4-;FQr z5|b(F9QfTIn%sKk8VjpWW1h|~Liqj!a79CuHs5tE%j-d%ppOgAwz8=|=T``SJB7?o zB)2;)-e;Kz9%cH&Wc1SRSy5(i5o&B)ot?+e+;+n(xBgxrWj?O2n+id;63#9csMIQp zNSM;GkjR7J+OvU6oI%(_!EV0Y^URzrg6YPugU*72&8Wi{`JEKotdgT|cca`~e7iC^ zjp2O6m?13vQn~!DJ>2j^q`@6Me$mYDOrfh#ox71*OOQiR0V?ib8lRf~^586-Fa?M< zL3xOPxv>{Op&^|IU$>KarFrx@Bz8N{rah0SVxBlFLGfa^3%K4qu3G=t>P-2Oxp4s> zQ5R@ybnbQ!F+uyK*v!IF7A9{)1Le6m^1)Z5h4TNc5teOz%W)uLIbhMl1pP_cWIptj9 z`TSpgVw*T{fh2L=$T1lT!$(JdsqsrcVt)v~fw7%?Nxy>--v`oI?&?Taer_i|R{2S*c1gZFt^fz?!N%8A+Dh41JHpqp?6mcrF2Q<<6Fq#UgWco{~KsbdjD6y;uj#N@>y@-ZoYy zz|+Oc7V^o~);3|!LOy16RQVdrMP-At+=hDwzweW(GwPS!$VkCluXFuosL~HWa zn<1g(#z|jay~&JU6Frd2@JTLvM{AX}RQR_4DvW*51aEqNq0xVLW`oyZ>CaRXlM3O6 z)ZyWwuK!<$-+<1nff)nbGj}+HZP%~h7Hg9upUg3bJX({l7*?gy>zr>3irI0z20XOu z9hQd`jhGm-3jx9KF8YDYmMqPWEdM*XvBVdH6;LC_mZB_Tw>qswo)Kv;yn{S&1N?1L}nK~Yi^FiLHpq|u&SyW?{!bS`xqdVp;_l_{&GWfBU&&{wiy;(#q~YlTyxM3C zb=W?AJw0SV>v)p-YiuJ-UjgWgOEjg*yw&6@V9~2p(l|D*{L~MGgb*FwQ$r@{sEmVG z+42Tt>%xGp)uk%XJc1(oMM!M*f-5C6W-r zmlt|pdXS~_qp3*LHXk2ASam0FX#}#&D%G(?fLWWT?|_47u+1#Ok1)@a(DQVCa-G3{ z1oklob#{yZ$ctzNAMGp!NKS>=DP3#+#6kySqF_6093pF(S5UVHda=dU3|8&e@A-)82!_+-54K8o1Se^M~vg340@F(>7L9p9h5XsF- zgY|O%EW38S5u-8n)z6D>zxsGxmZZRCiitEH8j!xIc8q!^k)FVPas5xdjm9|PsN=WH z-uZQ`^M%*#OAe@xnZ{j#-J@pxQADSIa*?KqhFX@gpZww_S}cyz3gDnNuAA2ru|9v72%WZX{B+_0mb)d&IhFb)c#9Fz7ws=wqUhQw~ z`nKev>|{u--`;30>&;>!`%lXpH~4r26^$h!KUT zkhq$@CQL`S3+3gt>Cxg1=vSq$8g1wfUx#Yk7JtjvCwyLvpN?Cok^TmCXV12+ctGG+ss-Kh@u*e@hj4^XFHxppaY}RXH9a-#NFj^wBEt+Nz9*5 z7p#PDT$h?#aRoww2<$pHyH`~>BEC9lO01yFs>~Efn%rgS4I8yZIA-+)Cu|oy7j0Jh z>r*wEvyIe!D=&8!71C#(*X@C1;VoZuM1(iZl0xcb_gl^=XNitiO3G`>>h` z&0UOCzzF8Wu6T$~$rNws@oMOz6G(kD6F6t6muj<@O|#iGz6}oxYxGw1f;0>pm(~Gc z)ELyV?z9dT440@E@jpkqM|w&yEs(1f`o^G<;78m~6&zN%z6Dya#Z%-~LbJ-kKY1Uo*vn^}qCGi6?la#!&lht@=3+!e znVH>CVV`QwlDhizQ~MY3rsRFTF|%*M{U1fs?1@N2Vsi3wvnfznIZ{VR@*x8M1JKB# zJ>NIiOqOWb2-HT_E0#-RAjJ1fp*d9CV}*7?IWf;il0+PEr%JTjIQ$Bb#ej=QngW5G z+|RPeRBtHtLZxbKFNtrD;Qrz2h{uF;BuQ?EVWmNQ-{YaZqtvqa<}(Q8$?U_Q4CZA=PHw0kc_x)z=9I6jL08 z^ZIq~cRtt0whUv=J(d5Nu@Y<~cqVNbeRyV(LUF18A2Xc)SN5~3$7Cp~Xf>=v#s=!jmueWQk&gs>Kbi&CiO>P!lEZMB)VA(Ykwla0(XmGIm{PdoTa1UXlVr(lqHBC?$X~%XjM|%+!s zroSLZ{$eXGoNuRQAhGBe#9Sz2V`IrLCmgzkfs05v4*6T26<8rXyCi|ldj-_GxHs7K zpaD#LfGdS}FDhHye^gA`A7+-+G#ybzhC{FXG-mcElzrXGyn8>O4a;~C@Vh%uh}fkX zpO>;hZ&L%B_ZNs3878#E3&q%EI*8`g-qcXf2~H>!H873#zh~nEW|qMa7!aPd+C~6= zEgSThdA&+)H;SYZ)BA*v{YFVii94ij0txco%kFz0<>HT1P@xZza&%-P)Q;~qq483X zm**O&jy()9U+D(rcv&DeWaRh{ymPO?7owKlrMi|DM$6;UJG``MR6s3;??7d+lid&$ z2QFo;>$#EoFh;&wRwejl~Bmwh!>vn@-#x(G#zp|Ld0Qhy#l{I`4M-l6S= zmLdMCJMVAT6OX3(>-nIJe4g#RXux_#O)ZmV4X)qKhTC8&>up)-f=(>tYI{r^`Aa63 zm1^BLcZ+Cu(EOb;-9eE#*wIk2#o(>+n!EbXQ01!ZKs;k$y+7IKQFFhiFj&&{ zgJ8*aS$cXpRoh``1OcmYZzPfIqdGP)r-%QU!~xn(iVr&v4?ehT>%(Ev)Q_QXZsG<8 z2DieoE9~_2FF-NMcy}PLgZV?M#7DGDl76@ZCiaXGHFL1+e4}Iqs#H(}=^zq;orj;s zr6eUAuM>+=eni2gTls3CVH={DZlHb}_Wc?bnpmbut5$2RQDeVI42)$RpxX;N>F<)> z?Vt}VL_f&4sY!)f2&iEmQnQ$>+*%i^F_cF5Pl}n5=p)7$z(`LfiY(c;yyV z!#pvwSUP8Cb@p%=w8~5E%-=y`Vq&ImfG;uR`)n%m_s7ZcQXSS7;eE)y(n4TGyBB^K zvU^IkR}o|4>y?82)+LWKjE3eLqify~62CH0GW+1?Xf;EWZr(JS?d}IDJx9d8@%kS> zx`6~<+9~Hqh1=@izkj`k`rR1a2J58V9h{Ey;e!J3D31Yy(D}spL}M)Q+CdM`{QH|# zX`{*F&750IHeulIIl37-7pRYS>-UHw7MmqNa;8A=Jlp)x=5ups9?e(usMPGhuQ=aU zvjd>Hm;UOEaX)FO{9RG~{R42Ad-?p+?9HjM?0-y<3~;{ylgCP0y54T^bsAu*u+y43 zp}b+sY9Ms=WK23Hk@AM~_xInJc2}EcJ^~%$qfQc$k>?|*OV3Pju24J>>9u+as4iNG zFF%UZP|Tp%35Bc-zBrrfb%~OBF#GZnkIiLM{s9Cy>e6PwPBeB)2NB4j{{FH9QL6i{ z+Abe+;?D;nSQNX%(R=^pvY0? zJKnqjd1H6GmFa)(Vxdcrza(s#Y4aAg)C_U3t52vCgg&MvF17iR+}oerv^lN@?R>jz z_qxeH8vC_o6iM>PCm93N&h)-Qn#DrGMaY+JTnWDFWAttk^|@BT$QSubbO#Rh62=E# z7a>LBF%hOh^5>vsDW$Lg5HXWi7DSTKx6-qWz3b|3s^yeM+DL>I{#jKTsIP1z`CJ}H zTX+&#k|Dyj+Kzdj{zD>!nD7G4g4=U$bhjc8fw8`{#e9RI4CP1qh;`~IG$`w@5LQ?1 zCKonL%yM@NrpKY`f;IE?4jb}jR$$rRUs|^o8~eYVGU+z%Z=AhDLPK*wBZ#hMz4;I^ z8SyCExrE)`(4`Zud(*C``e#`k&tr{3oOcdHBLP5Okq{f zVx++y)z$}CcLtJ1IX=B#$+Cs=Db82K+|~ht*ylfhE%D4`jVHOtQ&R=v*2)ihoV^B5>Hc5S+lcLc z4_^9BrmZFSIrA`mSJVQo%|OF17~wz% zGvy}(DcbM+zB&`?Snj-iVkqjUF^T68D%wstx4+$YhAuMWe=gob9b((R^V`;bz@s@J zz-EO;9iHiuv>aRU)>PbbMAL#ebef5tFtQ1ih`1lJ_c^*J39myEZIW2D+aJnjTeTy> zFG$)%`)f%&`1ggn1S<0h>YlL0eC(Ani<}R>(o^^;O(# zX_JAk(T1@RK-_n1-InIyn`t@Z@)*{xklgbc}E$|B0Hyuo3pT$p$J*@z4 z;a%rO5r-wgvN*QgbXMgKtfLmrm!E3&OwN;(*sR7KtDjMFGrS#V*^{88`^moKvxdP; z;(N8II784rG)nfXcST^MUqdpHg*6ut6bzK>@F18CKail%2{Jq(y}HEzp^T1P%;VFS z06YqfH8??@s7|N`+vN?aB%|sQV@wm1Twgdob9f*kvhnZFFZd~K6JEwexFEszCrWeS zij9F9Zl4K46l zbZHq1>-r`8n7lj>7j>Io{3$$kFSWF^n0fn)L}y>c zFEn52rAU|!&CQ0>UE%?ydBWH?A^cfjnrMea!iSu$nVH(_b*S(=f8niz8|NI>1eQ4X zG@vk6Y%NHpoqgj1naX0LQCle~DTR&}$dLhCrf_=m5#Qfw8KjYwc|fShUFAyXv=kQ7 z0%w*=o-`KF7I6Ul^EymDeD8cLvHOac$M$E~8);Rec!_3cN-&4js&l?lI|`*X6qPoi zsJS3Cb{9!|sgZUv@EhW!H~X)3_P~2TLdcR(Kks#2m}sE|XeXt}=q=_WIT33&9E1&8 z;A&v6J1>cVK%zIw)JuFOl)1M~WnFFqfWG2_&*hG*G{Ysa5y-qM)vdKYK0ST^R3`M7 z`tOHKcFC8 z^L8Lp$SYS(s1aUzF_u8dlqnX$gv>mm+vd}l{SD&e)JMD93OsF8es>SdU~tx5#|dc? zA5Yqs?0|B@bs5~@ZS;Gt$eATpI&Vbom%s1lq(+E$iD%SO#5oy94*I+eOhVASZJGdK z&(l02J(JR6O9F1!?HEfCO^YPG$R02BrEfFtZTi47Pb}>HwmIg>9*ZG@&V63p=O#EE z3aIxl0Afv@+0EAtvDum5$;Q)VAGp0+Vvl(duAzTpYYR7O^G6i0zaHc zN=oWF41ngMFD&8GA7&03v6R?ra9Z3Ch=G=Mo^WTy8S}B#OXJZGv=DliC;9^gf%1x~ z!}IkPGe$qD|GOne8-DxSs7Dv{cpfKM9FNPr%!A(Cqvt*V5>^qhkIw>0#R8gWho?X4 z>$`3WW`wz1tgo*(C;JJ5LLjk@Cd?JVM$IzaIr0D=I6%A%eLJXjyWp|VC7Eh@>t}F{ zo?&;*&Ql&akStr;px$ef(RxK|tB)0mkpb)37g}v81Aq2UH6Cmy7 z9B^%me*<4QlY&))AhNOz;bS{~`~|@~R$14-UlgOyZ;;CtjleBzXcoYQKtk7W8-jxc z?$JZLYC&c8-Rhxp!=BGgs6)a5N3+0udh((jj-MHXGdVHQpCdW3CGqOi(er%fm&v^# z`&6SB&GuK|VUn?#DqX##^O{(F!G%h|GI;T>vOaw9#YjL4dhGQ3&CF|i7>Nz_eQ!gp zy!O`0Y;B^j?``+}55IwtVG4fNub{J74iTBj$ld;p#{wJ{MHhL{_dEVx?ZRmB#-rEU zlK=wd@KF+Gg5ZmhUzGh>qw3kqg>OI!pZtk&mV5j;{msMP(V^=~ha~U1Y9$RO8$SGX z?B1LiO;1$f*E@pQU*gxS+;zwjb_no+0iqqk2=G?b%8xLYnZ^iHu227Beh<$Go90L$ zeSot`>Sq#`ZmtWS;Y$(NZ?u$7WXa^ntDUj1o+>30DXDYWQXJZok9&)TX8~(^qB?w5 zNY{8=M_a>j{g60JQ3{T{Vk}^eL3FO2bT84!dWNZ9lC&RFGaTZgyo-k0JWzeJSNTxb zHYlP(1@)wFz2D>;&US$qJ)*-(owtS+WMXMP-L*rmy%8+vDtVd4Es%^z(0xD?w)t%Y z4lQ~+%3V}5$?MlL{Y!`W58pskW}Eg1+`{{!NH~7_lqT<@tEzcX)GjW6@Fs5#zTRFA51)6 z<#XLujzLB`5Dj7uFQiq9v{>6oLWMm;`0vvbrKH5fL_tA9`hWb^kq-fNHBi%;k0c15 z{3m=!FW}{z>4_&xYO^zh`bOt!IX%BcfX0S~cnXz9QBfr%VZz`ph=s^fX zi4>jqX`o&p?`u7AED(-E3$KuNjZ>y86h)On9fY#*CC7^RwQ{}5vt7Ox`bi6$Xt_s& z>95x7Z*jiy;SGs!d=9xt63aH3mb7P+*z1ZC1+;dN>EBo`_kHcvYq|xxro&#)2Yo6^ z1I+U|;OT3Q#v-#0L97RJ%2`K1c6PSnG^T*NZ5^_1AhLV#8TmURe&5>~sOtsQH>M(y zDALA^xTElNpAn-dW`F z*gfY6b^Kv9U)NJ(y5n&vJcE~E9^w7J{`d1#D+grhvOkLDYOUS!)ajwn`_b=Q{xFnH zw$sKP8KmOgohZMkbKSV>HcG7Ar(NHxC@ z_OPk^`}5zTD~N`+@(s1__h?+#m$-Bt>2s{wl>z035Q>kl5l{g!d?JDrBf9bxsO(iR zp}t^AiSXfHP-zhnkz&1ime-h_V2nP9*KCWtz(*jV{ECP`k|yXGdwIAhHIi>0frlnl7woijzkE|eC%;Md5SJLn(Z;N-QE7$I`?IpVvi z`jq)-`|#ty#5eEK%%8JV5mHX)bb4L$?;j!Ytj*gm(RvnyB}7$)1u}ZK&~{{2mCPpU z?Hg!f$RsmE_yUUQ-_&SH<|FY$rR6-9AIQ+uX@^B@Or&l*(4YX#cgO`jB8;bm%(`4b z52Ofe#v*8YV%rpl%k34~2ByRja8t3s>7Xwa&ts=+zx-ABcM5hV$Auyoc?y8f6AG$+ zw}Fu5rB#Uf5RR8R9wQ>3?Rgdgy?!C`wIin~i|Om!drGmOyz{=5{P=gjDBSkd)9ja8 zOiLQ(^~D30o}&?CZe|189@-Z}u^3YS`%B4a#lsfI;s`o1SHl}<^0FJr5)w56ybxB0 z%Zt0un#_05@qC=^iuUH_$?77Dd1?f^^UU^kk$k1h3A=QBCb%(iKf%tinv!B`MW-Uevd^%#@#Fa->TP-P7BjQAC%TV!MKz%g?)3t**E*({cy|8dUm)da5moq z0e6-tWrxqGZ`T(7An#bN)Z?xaz2R_|*BHmD;Iqv%;21~}9%|P!i1RlQ#*v|1d4)jO zPOq9rIV1Ov6CFv+kMg;pT{JK?=VyE$)o(klbn(h?3cKg4I{5Kp}gv z#mUxNE1!k&DEJkt5-ihe0&7VU)(^&i&*9a62S5831srd)U?)hX5e0geYyV zcBlw)bW&r|$3ZNdgCl_a+V<=>6^-8qNu+-^_C-gTp`_jO+=TASROp6-H1{BxtYZ;Vx@hEKm>)lL&bn2Y_2d zoB$+M9KHDe*nC@D3C3s|1-U*)|K}OE3*wnCeYrRHK_$d^6iM&iAek>QWvaL&$g>Gu zsjX~3@-$s%A)T`O;M$gd!p>@n|Cm%zBlC8A#?q=D~`A@D~|BZH5hOO&Ele<``TAsAr$EH^n!++7C z1BoM%mLYmm-}&7zHHv2<`TWkzh9xgB)PvaDT&7>T6W*{~?D8ed(9@Ai4AVLGf5y#{ zjS3&Xx{w?nu&9VC){OJIAAg&j(Um%u+?D9I`T*@yI!C*kuGBM25%FSf^)EE6Bx9}k z$z^Osp(_BPWzMYofa9Ytmgf}1fE&-rj2dD$KWpjyC^2DU>cS5>XK3{(eiR!Cy~!j z+klw(u~`e8$5Y19ikiPfv01r`J30Rlz6tKk-d^p}qw_rFvVU`SbK6@`tf70_PC6Um zDAnk&OiUZM{aUMp$g^Bm>gTFL35VpsWZkvoXmSKW47AD&XL|=4I#DnL$MCV3#ijpO z++&?vMZ;UnuXHF9XO}rxa$eBz9X+eb(gX5krcA;m^`Ab9ENWykKI3Kwp7$&CJqnl+ zyRLLnXS2F%)Ou3kG?3m z^~vcA^*1gn1_r%4_{pD3(MJ$!HF_n+hIMZHSQ`5FVyzN>D&lmodA^F$Ms7RqJZz8Z zaH+YMw3-YuV2;nA{`CMO&1LV(7%X2blDcXy(yI97x;tTTyOG#b<2uc_c>mD7NM_uji~5i+sCD{NW069{Z{;Ww zk11eqwmLM4rIpX+P#|CyS1{jYE5=d-tq_rjORYeDL1q79&scF1cfk?+?DRAzjn753 z)_Ss`YYpHPXA6I@(2Eu06}e)Sy%Py(W&*2W26BxA+Z@p0z2nIn<+fIB(ce|C-IwDp{5O(0}oKT>QWdIMV*+(zKF zOHm5Lxl>6T?%G~262fvm0I1S0C~p7Bv&qqJ^pV4TP!se)yl~sqA6NF~Y-Ejssh^Qr zcE(NFAVN~>BY&$zv{mN8e>|FV<9xAK5=|Cz%zXnqzswO}?H~%J#|Pk|u>xnQe7Q)8 z^6!~a0DQr!R6Z2%{TWn%tkIV-5d6OlfH+6*6zTT?zdyPd-H}9b;6Caiy9Ctvm@a$s z&9|bgi1%IZEVXh@8GvhhzvU6KKhx><+?~Y8F))+1CO=qDiKtvp zDS-h?!&dq8`?(*v2aIiL3Y9gPkyy~sms%(Vrx!2BvJW1KgNC6}tUotmxUCLI&275c zNWL5QMacNl*5?iflZ=Ht^WJXe@3QJE7C%32bgDDct*^ctee3EtK%cmcR~E%8H-8i` zSd_#p>C_hEc@@$m`Xk}sB};4=124VgYrFo@!Wit2LXZKL_{#hdH7Zo_vVYH!xJf8C zY!H|AbbsNg4KFzIY+xgcm|1SDO@a2^Rl-P1GY`E&FRpr-j?8H^d6fOf#-nmu>tTY; ztcO&k(SI@|^kIewx1VfnWJ%(K(CzL3;m^M5o5H|GbU`>4AL5$cpNTg_vJ;3j##%J~ zX6@2+n}k|5oJ+>CKN{ZEb&F_M$Azxd?_%n!HFr^$^WpU8pK%fk8$QocRux;cgD+rZ zQu+qAPhHyU^r@!vJQmyo5HM!a} zX!q-MOthMbk=_~Q+$qNX@NpcE^|c^1y;H*m)2#VbdeR7AQYweV@ZfavI~#=d+R+2if*=LLVI;BTU~a4a zc>1nE6|lxR2joUMo4?Wd_#yayM?&C0@NfW_FsYs74_| zcLIm~%*$qfFt}_QG(HVWvQZH#r44O0Hf42NX_Ga$N93hDl@uXva{y3rL2ce^7OUpJ zG(2Pe*c9J~qTCgSZ$?=n)>fih%izCk{LtjQA-klRJ517Xg}*NMr&gO)su!1(R34;T z*3K+UZQHBude6d6Uh-kRGiK_1-f0kPCVP$0Nv;%6=TsyLn>+uQnPS_z?k8OJJC_st zQutCbkY`$ngF*uP>|i1}JzdzTw;(-JB-mm&v!^uXcH3SOprX{YMZ<$RlB%W%=H9a_v^wbJ^ct z$wPAeU%j>XJ|P$4l)##Q$83g?&p|Z;hPLWTw>_#lMSp;+qhD88F3CsF77J95CcZC3 zYDV48pcJ=Cu1pNzuMB;j&Tv_iCD+r0=8a7?D+NIA`uUY%>I^?G#>2H5vu=Z9OZgxqW~_y+xBnZ6Br&z6-~egvz!b{ z$L0&0HX-kYtA%V`!7+52!N-h@<0a=S51x$ZUn_?HLq6{R0QY+F6<76o6Z%*Vq%Mzl zB|(AZjFIa$Q?^RXy63r>{zYBrNX%}j1}G?hWZ%e5WZ>epwVZEvJ(+OJH%{5gm;I6P z97Fg0kw{B!LfI*YMJ+9NMVA^1@$2Acc|*Su?AF&qW1@bJVD0Vwa@kSNYd7UI{6(?#o3K&($jVOatDqpZvVPpFsS4p zVX&=PD!)Y{XVxgjg=B;o1p%rjZ5ZILHuZnz%V2t!qn0YowV57am&(P{3Bbhq+HXJr zuvT1^8M6c!vIoPfqG%H0Pp_Y$!Q!SHmX?GKCrjXOP?U@}2RqL%4{UB%@BFouN9F;2 z-;1(rUPhu_Y4jnQ;^k}ah>r z47rTXAugF)lb&qiWG2V+!tB={3yJ%6Ba?*VbCo5nFI-UOtsh&aSvZZXM0EIRMBFIm zK4%E~DB}2iq$Ge|xQsNJoUcq#7cb-yM(qh0PB)1PHb}p{H8J3QqMW{%?kLumFF;!r zTNzOXW5YQ%<=0~2sOowX8xQLJZ`UVILy6V1KVjWww>4EWBpmd|GX|twmP@w24^cri zKfAZE#9+X0r*HK$)7!#N;>PX@b7@pLW`mEY&=G+efe;3{X2;IPt< z;x9s$?`SsugLKNs!|h~FMwLK%g(I!O{%en@sCGp>e^b0)TuBg_Wp>@wiqfLp>~81Ydm#)}Aj<vP(Pl~hhoM#M+&&16E~^)fhZFPeimMgCcCnXVR2a7B3Huh0b-!qyy}5Wc@k`CA zK11ynBneD?b5&*$de2CiRdVpVoUqX-#==0>VkLYPx14{-4Z%9YLCk)6^$+!2LT zs40DiHe!5+U2nG8p8sNRneBJ&SRBdv#zxPE)gQOY`96njBg{Npej+3xf*l(q5J48} ziI`kJ`g69m=-u9<>R!Ep`hpqn>~{L$;E<0nxV63H_vWnK=U;pdODGVF{P($047*qqFEo>LVCEf>Zd4mJUdZ^;!_g@=OM3r1Y&jKt|)A*i7F)eA}=-aBx zM*j!k^4zGpO&5S{14{QEqpFRN77L>PHNo>O0@(VpR)+{+`M$ojll5%Xn|j0mv|k=#Th5Nl zq|U$b3^#nE5p|jMo>p;xbEJRS-(hn^@#=6R*)aHud;+1f_&+}L>pK)Khf7ZGpUV+# zCOp7OG8+wDS1g;73mMCe+N=sCKYyn1fF=5>O#o8v7p>HN-z%RgtUN9Is{%MI`RzxZ zr(+M(Zhx;FY4yEx_j`^CtKXX}=^N=>eHEYUr7d*rqLt$37s!?J_ZP2yS|Q-KIY=x< z^p|yqbL*y*oeh8Lp!S=QJv@O|l_&7(9N%LtS9-9thALS{5wA|6SP?^+||k$YRp zDH@MQ`f0NDtkgP|8@p&Zex!BHl{tKS3$FE<<{{KV{ z|6kHG(9x+3B1CvQ0*KD#z{V){7S{3n0hWUqnC8o($+6?6$;j4@4%_jJ#mu~74ZSa` zBYk~ZronimFMKu}izHzE9xvj5Q*l~0 zrX1%`W@mjk*(|?1A=XmC81GPOl{$GEWdS#Wkny7S>T|t5mjmlgN9v90r1=}y3dR<} zxn@>_-!q0M2Kh246{q`SzubJ!cQf-|XA5!VTj?xsYlz7DSKNzD^E2&DtkuUjxY9Sp zK$6_Mm2jmP)P*gQ1SiTSAYR9&ia3ObHfMrLw;A9iEnN9El@;j06RQ>)_!i-P zd_yG9IF|+XA}+HzyL;?Gby)`E=__hn`n<#VuvgapKi1wdEb92(`c)KAX;F~|5s>aK z5dmrG?(XhVP!VaQYec%cV+iROx>I1NA%`0B`TE~`Kj)m+XTQ@Ia(OW`zq#*qf7V*} z{3OFH7Sgiv^z6&-PV}T_istioOB0GFtE=piFUM+2%Ki=R-y3>y&S)l1lHU;Cwr~~O z-s-HPY;lns>`oR$);AF{4oBB$x<+=xkPC|2BNF0@fjEYr6TrY1if;F8tv7f{1~jrI zknnj7QT&d9J;wS$4UDKVjHD zB)=#SIy?4PGI17paoUEF>};;l3e9hQx63)ir>;mP{I^93D0F@35}r)(0`nS7OEX=y|%4O z9;o?r#~*hLl=(pjuHGkeZLSISa^~zdoL)RWSjr5~X$sikuw?qD(|UIO(Qef`d{tn$ ztUZ=8d7ks@*Fs9fE^w3o$6y-{{yX7z=Mn~%xC$teU*NR%6l;WJb*gYMreXq^lM2AK zS|#Y=V_}D44$D11!zPDC2Zw>CSm9sUL=`-iI{h~Zu)l5hGZ#GiIhUs#MV8QOcg8PM zo_n&(1<|x{fv<+vgDbVr&~&hVFPbl-TV;B;3jdMsJ;S{pMS1avI5*td{7c z5%Bo##GF0PDZlLoe_NE#SM?*C*-{SMfY|lc&MQG@U{L%HXb)tgZ7rjHp)La~Il!sM z*IChcGRHZWH&}YW(!jBmoLHKZEx`Kc;cek)rP|A-ja@iI_9Xsz5FGywUY?gDd&qM6 z4wAw+=y&y_G)_v==|_LG%453XF0D$X)mSa%eXG8jwPUdEFN3Z0UBA59?&UHUI42z{ zQt{t+Ywbw)Qts&IEVJ0<9BcQ?RN291SgLT0&b`9XG-NF|B;6zs%@tu%k&o( z_j@Y?g;)99XldmV)_D!InyT&v`Yp0Tj+{bxjU4aSzMfHX!VH)=WCz-M-Qu~%*xH-f z$6DiSTQwnt7}JMw$~I*zf<9Y6f9Zw<1|_gW2-I1Y_*Z6BXbj;xTrnHt5gtT?_M=8S zN2$lq^}g{Bsl1}*KJev*7ea?6+yU`!Xj2)EBjtH{>K#4m-m-h{&)H%s3}&9#FQ0wu z!`)lBZ1|4t|A1KF&71E7%OebLbHOt|1L#%EUE##4CwQszb`im5eJZX^MxNE36}&L* zeupVP>deIq?y~uvyhFXJZ-!o04Sy-ZWoC*^!yA9!9!`adeEzq6T}fdwxm_nIb}oQ5VGVA%kkzvb7cS6zeL9M{v8wH26wL3$c_da z%O#=mRYzd2S=J41HhWlm=!)JHfCy|a!ykT;B_cIpUxYhTxzdussxO#`Gzn8`DHVr* zEeSU`p&`}x7Vg`9j3NXV1|&S*D9hrOwc~ty99K@_R&Srz-$-F|_4{z|IKux`2frlL ze&O&-3r+R;O{nt|r~`i%5kWbpqeNXP4Qh7VOy*{>)n3-aIsryIXECJM6SGr>`D zrL}3e5w^?5&N{8Hi4&>LW!oY?Pg~V)=L)v$d9<*>B{M=zqHJhnM0I`?BvJ=D0vi6n z!U*=qo+uNAi`& zxlCo=^@?K>z=9NP^m(@%;^|b0+$Kd4*Bc>2nT9CrB5P-o88|g6-BRim(`P&A0 zwxs+DL-voaC`(U;1{8p7jMNxd-2`ro0Czc0@~owK+16V8KJ@7V9nM)5|J}-CShG3l zsMrc+V8)1MIcfV0BS=X7LZ+E;LlYn!-ay28zuW%(77RQbWG})V*^5JdIlg+Q`=0bw zw;uJS@=4aq2PW9xIjFin{cru@zNwM8nnvgchoCl)G4WlX@|6dEFlgDceW|J66rP%;Rys1+m>dyDYHyn8HPeDAJw@j7} zSU(R2qq2mQR9l9hr&Ajv4Zz7gF7-&HdRHxVLwNP?ZlYsHd8mNd$bv()_fac5>cV)| z)A0ESwdwqE@WfTwi-&{D&^zI>-H#CtuXn-GS&6ds*9eELdr@cX;jX45OO@W){Bu*O zvThJir=1Zkc3Rj&(3lmNCUIwX7s0vyL1Hsf-+5glq`y0o9P$lEU$V)wBwIXKSHR8j zJ*yohB*o$pAs6xr0u%9 z=D?)QT%+-tu+Pyk!wss(1w5~x?k!d64B7tDQw{hF3v|Oc18)|CpAePGMv(YRuXX#Eq4zyfqRG~fwi#_^gV01$EigDhMZg6Z5s7;ld3i-6VSD0X51himC~Fz+L^?< zJgw_qC^eqw#hGYS2xttrX&x_b_BskmLdxWAKSBewDQLn^*S+9sKa*%oEugM(xD>)4 zwD8_%gLDjO9-E0@fG`8>m|XHgS=3NeMpBK#DXD&|-;WaMyRoVir}0`kyf@pDc0K#D^6i*Y{DkSafZbEpkA-q&!nD{dyRjV3@k2jp#cTpPZ|x5$ORV}zxn5XhVtco#bQZbdr)?{fn+ zWr6|M{QvY22zA@$YG(*4Wo1uy4}nP?Wh$Q`=>7v3^K*4m(`eILj4%XSHy1Ro7Kg{w zeZ@|OUi3V_C`mZ`Ig-c}ud1u$)lWX}pYRVx8EtOaTGaK=*cfbhunj|rSUsvLFyMBU z@S1U(_m!RMl}=~E8H*E>-utg%uFfvZxBywvU2oom#+jF$B?LSC`^)+6jK;PuApY*? z?(7BJooU10JuAerEn()^E_#Ej%#x6t91L;CS}}pTS8Bh@;w<+9l=>jTP6Q$Whv6{e zA*?(3JBr49tlgyG;Gpp_pm(@umhmVf`m}_Ue!J@@2_540H2DqZtLyya8%2Wa`9D2z zJcK!`iLWE0o$ER0MOYRrZezibz3Inf-zMX_Qr9~S^M2u82!=Z8zD>eyRp^cfvl2^d znYe#y)MGw!7DrG}&IC@JQ3stu66fHw>BrJw+JjpPeWO>;{_pG!92(uz%o+7P2iO!k zO9N;dpECrpAt|`$#{MdDt^4Bs8gXg_MleXJ~PS)DcJ@Sj(#m))}O!-+(3YT5n1)e-O45|zJkqNsE<9?@@*Z(_w~`Kvtl;w z(D7aT3hiy{N#+W%+NoYnS{yN&tF{&u3A}yH$vtmB_fo{i?a8A@R4=w-A=aN*;XveB zfE%)j)XZ}mm`VX5vGbZyAG~w#rjjaM*X@Q}6Dm`gZIcd)`fGgqn^}=XlX)!H)rAs{ zf-isa6xL-);Xt!8I|aA&(=ARarX$?1003G5(zFqNirTGb3!o1`%rIM9Qt+t{5{|Q) zMtK|kw>x5BQztMma48o6^T#z@@I^469-}l7%3CwkLDfKsSiwh&#$=CLJs73A^3iGL zGX3-2_!4<~%HuCB8USLlX5ug##)UH}WHCVGRwKDhkd)=&^JX7=gm2dr&Tzb7r}3vrMedH`TE6^ z2=Qz~Z06nH@Cg71)CWGi_|QhVPap#>cTPBH<(46f$N$dmkl+rr3KPjz&vNT=x}b=+ zW=ht<*Pth0=HHF!n|P*~rj6EyqK4b%<%34o)B78YDWSLyA{(!34wrF#uYfG547@G{ zp#B_mUI>T4Ho8LzL(;<@8@CSp9s@m7>LuG9Fb;y9PVK*7vL?7#2B#1)r4`oOPk^ZE zg=Kt_-V%AG8YCQiDro2ZehlM&@A<{gp66%ot9V$J)^Py7kxbTCS0rICPaZSxMA~f& zlZ_I4$F@YRQthg(g02^<)!(CPLfKqG=lt)-UHxBgQEsc+>?DUR#B<{dj&?j!Y-sN;I_ixadQi zM82oG_q~aL7STiRhXB|?n{t=p@XqR7s zH)9<5g-{0kej3`BoX#}8=u8gb_x>ib>D5Q8`JHmpyGkor~hU}+@A zbolANH{Ji7eE-80|NsB%1U0_8K8JGuqlZrS9z?c*t!OwXV}a+ltn5!ZLUc@`JdeGw zmnx7N*?&$B$uNygOc+={WUkK3>U${$qT>Nl zf}zQy#OQiqb;G`fAktNwNxzY-SbgV^wecHW-vm#00%f_{fE;XWeiN5&F`}X@knTio6)hP~U-V8d!XY6TYzR zbv^m@Y`x0{_sl45&cKcmTSoKm)WjOsG!mLzyys;JA!BCp;xI^awmZ^8xzr@tdapTM ztytFK80&*7bjzmO?Td?)qm7TZ@seMuBM~l06 zqbUMHon#l`5Psa}C26S%3XAfO)I_Zm`T8{lnM4}z;?4)oo?~v`-?cpGk zh+u;mQ2kuNn{oO)JJh&pqus4rctin<+<9v0Dpt36jBLZj=8&A{_F&9Ft~Z9_55m_G zav^n)+;`7ijxBxHI$DII1-m69-w`wDem-$C>#-KBI2hnEMm1+q)T})ig zZAKXalT4q)6|9ox1k5EWPBB!xtBo^nDol?ej)c9px5t=NJ002awR8J$XSJ zt}0KV7ufTz)q%)R*ar5+9ed|>cUO~IuE%{rPs9%go?2_JPXn(r@aqQ?us;W9x3|-N zFcBY8%$OT6=j3O5yCU~+nnx*`V<6E{UM4pCcPg_JVtX8OYo~^b&NAcWGMw|}zWbL} zmSpVe>uaTDd`(uU6or zmhGet|G1*diVT`wY|?ZQZE5kpxTKQ!W^|@_@xgX_$OKjQ@lPD0Z@<HfL(lIgUs4 zed|9YNpIo`XT}hv4l&18?3^Yk zve^4|Ro99b|6mK3m+Tdf=nX;T%m`Q~JdN%@*CE^(DwEO(^fj!b#gX_jSO%*}CCbYbqq zoQIaPsaIL}{vhcJJ17tj+&zGul~ld>i+H=-=&>mOV*OGe{*7|jwaUY>C4bxPSL5Ta zX8(RBy0{ChFzv~UrM2a1v9|+9W$MKS*V8*q(F4-2ntX*5iij@t!ik{f-%?phWAt-% zo`9$S67|a}zHcA9rxqf2r(#9s&bmWej;w8mH9F+V zJRv0&#$kB2^$n`Gz<(4QxI=Zhu}KWp#rt{M5-a8peP8sweE5%JbbBVyun;Md&^fqD ze>;Llz+!HMdsATm0LUl61~2QGck8nfg8KbF6n|$L+OAnyLUEcr{>495WS++M_}-S* zj^v=VZh&U&6{_iHjfi&TgdYgS^G80%m^zWGT|&>FPg#hv4NYcwdZI0t5V?8T?1$=i zPM_?LSJnD8G5w}PwYC^Nc~6qNR@3Pl`m(L8bfn#yptxRjjp#j#b@ie__V5zmz^~FW>g`b_ttv4POOwPR>YBnz_S?Nj$x5tv! zoqjt_5?KppTG)IP`Nr{mkpBMPE>nhV4f+>q?)e1jK5FDn9Z{d~9?{|Eo%+yEeDz-k z#xG7G3rdQQXpzUO&j1Gtg34P^-yfZTxx4+r-t*WxT!<$yIYZIWpW{p@L8YD zzxNe_f`exRP~xppPP|DnAe~?~Lr#G;%5kQ=orKgOhBArvxj3{$I%v`3V`;VFPYY)n z4cL;gJ4B-|U@YxJWDs$|+XgbX&$C?)I?b@_*xY3pMaw&bC1nP4BTfg`Vg_d^?1OT{ zJook5%`m#gbAIRQJ%;3)>v_I|28FMv7TMa8M|2vcth%P}ulxpgmLfvjHUeZ|4F zLmAVzM$E?b%0#4p*PB|RAEth0;lWt`80xtu7PPppe-`>sC}wVNpweAO&F36WUgsGi zf@v2QV^C3rU1Z^ql?XFb-PS>&l9pP|@+E3Fy!J<=w^A7u!p1Z0@5Txq5b^ux1Z)u9 z-cdTSkjFw|^AzRt@bv$hE-$3b%yAvar}M8V|MoF(sPkW4cb{vzeJK)nsZxa`vLYP* z@!H}HmL##kMJc=X?1CvmKaILimyxL@0F?moY)gIyt(Hkjzq~KlAXcnjDv+^%Lhedr zhu}z@9G+S$YQbXh>LLqoc zW%a3Ht2ZK+{L;^b4CD(xLfL^MQTi*>Lu3_Y)wi-0OJ(NG0O?Coq|8RQB!hL~`)lp4 z1<#E^mLiw%lGc&GeqU=)L(K*}2b3&c6+B9*$gES(8F6MZXogRumDGbdMKep9Wm|nP z4g%BNjQ0FHKNjT0k!i?&jmFE*F935a4|Wk_ULJv&TWfZqgOt>Nmef{@c5SN|Fuk%F z2nRTjdHg6xzWekqM9W!-UoMrz{aFN44cNq54|G7AdJ3PTK@u{&+c~o|_X*;9q(Jp* zCZm_YosVCe(YV9xx>;~Ij8eEhhSl&k5weDhJvhwZXnA(ea~9=p>qBPifi^W0d;W1_ zx7O`-?FpfcJ9~c5(o#g$REg;frDpup1B^oEBDKppO_oiM|HjSTSTGv#Gz!lo`I(#iwUTJpo zYKJx1cVf%hKElve@II{{%W1VNEWu7Q_^M=^!)V~AkS2rA4V<=4no%d4gjOjgVczie z%5kQu_smULRv5&Iq|D|Is+|PJq|BDR{tz7(NwKJieysUR?UuOS{sqF0V;RI(exKbX z`UR-?!-hFBOkE#S-!mDT?O$YYEL}?lbDgQfE_YqmGCwE*1i2ZN{SC(ldB&{AKlh!H z#+`hmjDIs6xiVbh*INtoI_p?2wBA z=DV|X5?f^0m>)Bg&~9jBcxGMa=lps`EuAf63y~6JsRyn|7dRV}EIv;lpbnRef+-CK zwmmvrGJ&| znOpuvC)cBMF7YlB60ku4#}FRR0Av96o%=ZV2>`w7Y^;BHth7 z*6on8va;=_Yf{(jG(1vw0e6YLog`>r&9jz5l z1BfuUiz$W_at4I7vhTt59)2usWtCrgWjWFZ@B0~YsQ5>85olQ#Re1@Ta!aSz{y;=5 zRL#R(j%xB$5`t{|92cYSfv5;qPC&Ge2c`XL$NywM3(5o3c7tTg>+v?($Y}oLj&K!J zoO_>aWlYZCM{b3W;L7<@uFoQ!%?Av6VyZ^-nVK&FLFP9y`R)!^&?g7vSAML@6>}Cs zFY$l=Pp?K%F}2-+NP`khLhKyfG6&B9-oT#7jc-#-nz`_XiE&)mlDFyMV{#kNllb@+ z7r)57^IL=QRMqMvW^gUf4O6MMTrDEj4y9h1hgEACW?7VOWA8^Mz(&3#Fi7Iyv#~b& z8Rjc2_W*-;yof|x^S>8pX8cbP%qCH77(>tdCONU^?BpVy*3+@(YxD-Y$t%&8tPip5 zC^nU3&YZrqmUuQ6?M2!5@g3KXncSETiGD2Y>{SxxicfZw7nabiWgTm=K}gqGjRrxy z0i&0?e`*ZH*<5it!#Q&WAs@8GYfc(ym&Ltl*UA2YD3^$Q-E$Y?>$-*~ggnT63SaKw znQ1g8@L3Z`sGYKSV+r$2=eaW8njBiQHI58A;ODt@P%bMGnAJ&FP6{*{Bo@*}On4n> zF{{E;(|g>^k4lUlJQoXi%BYgfxQq$jD~W7SM8#aH$^1qMjG6C6F+hGsDk2rf3dhs{4+lV`nVf6k&42bDHb@&nnl`lkZ2ZFC=^+sv-+ zkv`fYG^#=)wU`k_EJGnkEZ?`lo}u%~3E*w}P*%Y3*k!Q1Q%L3Aa2Wz%vD&<=bzhW0 z^&#S|#g{Uk3mKq=gR>ri-AnLreafa=c3JZ)%+(w~^10x;!3F7}tseqN#copIji*lZ zbQ%U+wYd`@fUv!W@aSH)(`H#?Cq>bt*fhxP?^*3Pj7lA z_Qn5ronr61;0K19Kq-<#-8Wcqu0gqqH}T}Hg^FP>3`|0ZSO2<&oXhmwL@!zM}> zsZ{L^3`Vy?4(L@E_#a!J@2fvcD|$Et@k|)Y?)x)9RX+fz?*iNDm_cnrqC!nzaUD*B z1fa|@cuelkL}!Qv4w8LKH^O|Qg})BC@Xtl0!jyNC=It{0ulGk*S;)A^BCof53WQfC z8<5i84d8q?R=4aofUEZ+tLeOSyi}j5z$RW}qEb>U;AUfBvl`6kHj6u&g{n`}e;zpVxn3F$qMw_R14mOoP2L4iq`{zs9!lRoQ? z?p9%{t3QTBBQ2?T)}sY6CyUE0UR?Om^%g}c6Saoqx1{%H2)?)6l(`p(PsLFBJ@n|;$(xta474}IbHQ}>+e%J8KTZ%wa*a-Z zNm_ibGDID;1jS`$n}_=``3jpAvOT6VWc z;UU%L0}GE_xPKv%Gl{T>bB>8EGG{oLqdD&n!Rr#!Tqrlt?fMX zaq6YY+XS^{=G$HVa?zY8^0KZ{CBF%MVaVm&FcSY5js%YB@5R(+CS6B4YTH`)o#~d? z1$Z}_MGC}Id8YXa%X7Jcq#i}`PqupP9 zt>NX*)haDSgSd>AwL~XOwN!Qde4b72s(ro;caRZyVxIkU5;?ZRw3h#&%jnYIgNV_9 z1#j{|FD7@N?1MHkXVWb{!;@$2DW9(-@^`BpMQAEJ@1CA}l1pOmJ2}|x&?Y|N_!Gm4 zv7VAPz}dm;7k49->!>5FIa5>r(p_*`x?Q&1SGUm%x4<=&0X9QUW1HJT5Xl67_4s7` zh8FiHrCF~c176PSd=|Q?jNB8HOGZB2(YQ~x^UvW84~fh^KUhTm%3tu(<-{O+bFwEC zCKaIvTW^Q!ok`%2>hK7S%y7)lWTGxOiO)nR5^q=yMZ3sIu+1<7n8u5>>8-}HTP7m< zf@L|AbS`boIN4Q-wG`&MgT!dQ)`{A>P+QG)6q`d*k1*wLd?O~{1odqX{ zleY!2lI0SyL5?3ZTtq?vH{%*o4A_JfTs@1S%V13D41Q-mJeBX4(f^T1F6F6<^&*6Q zy$WO2#Cr@NOeHiEX98PA)};N~xxI{6LuULB*OQAE5wo(L7V zs}wGlG<6{wkk9N18DH^Ue3PxOZG)0fcqbAJcU!ZqNhy(4g{>+uIQB8?QC#_-ZQfuu zIPh?)_1r%#_>g0y!yoWqPtQLIPImp%C(4fX=L%$53YE}mS!q5rmE&!M*&D|aSZvK0 z{OJV~YdBr8WNw8>@Ehf~kUu{@(!L>sq1n@Vus^~e%kR>*eWwE$TarjNiW+zxh7 z_l<^iu4vwXQ~{gh5Zwph;eVBl-ts=MK_VCnH67*n9Q0PixrIw;&$=61EcNzUzsCNL zTEaj7Uup@*H1r*j&)uy;YsmA(onL>bdCB|twY`^)2%C~jXJEq|O6habzam=1 zUh4`UqTSu$xr(?|N@{odxfgr~5pS^Do3b_D63V z0YXZeNF7Uinz!1iG5+Oo(~M6JhM`28Xc3UDyt(#D@Ng-YWVN-~3AbQo$!L6lCrhUa z-WMzXygL?WH}O$1V(4dHbI94gerGV&Fa3-RKru^2QHoh`P7$SwvCRMT1zO|XN&IVIWesaq_ zI5nx(TtMneGs7Qh{gOX<&$CR_kspODuEg$oKlYm#8`>j>@7& zT}b8i+=*mmH4T4kEH3a`;y5GUd>O5XXnL!j@**!RuN1j_b}KiGcqdhM8=AXE@qyNM zJqMDkz%wjWebM@jF?C~tSY>3!U2MGT=d`uoGHS3@;6+`I1)6A?&UUhA?Jze&{@$?u zN*emGS6qHZh=u`)9NW*E+VS6bv~Gm|LcR*XN6y`Wv;{-iLzG?{-F zhZ~o1>S{ifH|~LxJyvr(ze`fr5GjDIwa$2n!cLwF@4C86e&MY+l_I)TATl0YS&LW( zfN8tG4{dYjkp0DJKE068@|VrWu3^f3bHq3kWhe6L_BugR%W3ah?rhp210ZeS7{$gO zcBknIrMZcyM9$3q4$E^GS^pfCZ?&OUeYpN8rNVPW)5HI)d=zLXB`Aeb!=bAlZ3DZZ zaZXB~K#B#I*xxgdlb%(gxCK}QgRZy3`-9y! z{lu2h`p({-zRq~VnqA_UfWPfk-qeXqt=mV=s53jtb(iDK#ir@}_ec0YNcjk+uRzd^ z`QGcq(Op7bj_ESU<|RYR&LceiL3PlHkp(jII7MbRx%yT!vwB1tT;u=VQs`x7N&Ztv z;=2#7&K;lM7|nF_>M7ao%?9a5u!u0~WR^-c6_tHzt1NXSpD*@R)jLZntXdxZianMK?3Iw+ziV zhBKI&)x;E*0-&3HnRB**dAh<>`roN{Sx$<5nZvZ3{R%Gm#r4fQBEnYV7&-+DRxWbE zW&yv49nP9wo9@Dnk^K&Eq@Y#}?et8FVewFpjU7vRMPChFT_#JdnL^I_-*lmAwZ6f~ z-hvg0gD(}28z@XCRS8dmL6TgxAIb$D+#gjYN03H#;GiUbc;pUp16sv609-&K;=?U; zSM>#a7fABkYScOC)BSX_*i^Jp0R%3CL9? zkFXug81nGSZsv(XhH&!j)Z-Aw^E zmwr$pq!obMlazWqu8VDe0zWg`_vAX9@eEP{4Q(+_>pD9+%5-cseqsYw%YSYWVzlU4 zgH}Hopo$pzW=?M-W~=nrUcoe@6{rUkk~zN)xB}`a4;W(p<&#-~9*t^`J)M6sRY+@} z`0@5RGNdB#Kh1gv9S?fi+5d}wbl)2J4B(tTF~Gj}@2xR!7J*aGF$%YlD@HH)-ih4E z*S&>?pXWkL%3g-;yid=fzhV*5ofv{bT`x+LmY^E&G}6`!uFO}bS|LL#ckO9z2C>vn zu(8*DF=q%Pid_u;K0Dg(3xt)-Jrnv-OEOPFn{tM*pSZNHF=r}LbM!i{D4)t9nC z|IANswrX10m6ya_AnUF+rw7yC^7PxRr-2z!$7pPZP zV$GLE_~ki)JnBYg=(`rSt#}^?6AWqf>T>=cO=cn^(Zd2)LP$U65PMbo|Dp`x5>$q* zE`yLs*4o-TMB+kyirDnJEHMVzOf1brtE)KR4~8e|`|!9e_dg2y*kR%jR|dWKVz6?X z8x-Wi)K6ivJ@1oub=mFGa8tp8!kD2FXu7R1r@UyuSi9@tay?#mfOr0tOJfpgXfqf% z+na9~#=HF!Aq&FVHh2j^sik>^w~ABKqnUWgDG{d?gJLV3+5^w9ZL zlfo!o9J98~&T=5G7!(BiFzt+a^ZT;JuUB+lR#nlsRPw501Isizt!%cEJV{!WTmm!k zbj(D)aG>nAJnnA=#mq7 zH3>Jbz(4QX2~4a0|3Pr{4?ITX4rp#fKt;CZvQ!Bi5(RZ z%fX{?ZqrNU0-c&EI*OV5g4R7}btNQ!i@q{dxR-qxi@B4-g|Ez5AN;llE}G{c{83%!FhAL7L_wrnKP{bHE%_3GSOE& z2r)i(K8U5&%*j{IN;&pDC!t5ju;97@*N3nFXn1+3INrHJN_|fp5q@+$vI|!vzkZ1#zX`UK zfC>8II?@d-2x)&H+TNdiD2~s~nC+jtD|gvyxw%u~pED=< zSZl;;JHPrvO7n&$Z)w({ADlgI6JQzhYOMMiff<@j`U0v;y*d8b?$h)s0k)qF0ny|Rej{>V({27ULp=wm5h*)Le-l5g@jEQCRGLH+@DnTcAFDU65XBjtLy~1@$4ZdifYky`@&J6(&6V zc!L~Sp+xZ48gnhXS=)SG7VT$V2GrIA>@#o_BLC9haYay?WcTwKm||LaB_*mv`p z=Lbpiv0%}U*;cWAbscCy3DG$oS^Wx=$QSdBl$yk+lrGCUrOxp?T@-h@5lT5p9BWDC zpqgC7Ftrlok;9hep1KjS*0*(Ey(Glh;{ArFYkyhtB`c*-9IzQ1wIoN6Z=Oscfat+p zGw|JKZ*mmWcZ8y=dNO55MQSnKT#pm!hqUn454ii9>hJyIGSKWb#_lslc-EW-T^`e1)&VQ2&nv%=9hX=u~1YEK#RPT2L0~2>v0PEnzi>s z7jajx=Le!ZrkxtlWK;P5a-CfOb+Q=E>IR=Hd{7ULeQ@(vbbgmX*jK=1-N?n%w*d6@ zJ#~Fz7rRQs=mD;;@l=NEAf1tW+1p0fc)HrTlQ6MHB4RHlR`^~s%jv6LRUa75vdaFQ z<*{giY7cd;M`!E3vv-+DSn@IAKiUDJ??y}Ft%YJLZ&g9*R7v2PH%Ok@@E+;R#76iX zhIfS}egHc|X10fa^eai7Qc}~;FnRZtn`?ha`BhfJ%fbo}LVx}d1i$h}GOwgR##91e z=0|TJzn4D6QY+FGnksH(`#Q0cPwMYmFGN!{SH)Bzby3eCtB$)N+DT&d~#E^ju&Y z#o(YOJ6HjYd);R#gy-4SrF!uM7dHX81!yabKC-6n4pkf<9mPMns5p)|M_Kz%C2x|4=;py3l*PU z6MM4`Ovx@n0~5reQO}znNU`pAx?hxQPsBPVCnRdBDMH`ZG&hcv&1d?(Om%Ho`hNJ> z*MH{zfW5NmJP8oV>q0NgO@tovuI>evST-8wuH`Q_k6lz&-wdY-MV})b$Ayx222$8W z>Q2*J#1OL>10L;)FKR370}AXLiJA*52*m}eiO*B#Yjok>lE~PE4Ad2qFvie!H{@{~ zCQC8QDc1;)hYHQTyfi?n=iX=+?Yd?T3NI;9n$0DxJ;|pJ_|31<{H21H=jMs;_P#_) z(oRoRSc4I&VKi4b$5OP}JqS9I)tQ}AGLW=|iJrHi)wjt>2FwDyeK&+hx0miaiKmaP ze&dU;a|G|>EDz@>4o|YrHj?w@acD?ZmEMK@K#-UA%#yi^a)_lsAnefGX-{8E?zoHs@v5fd3YE(4 zP5)7DVrXw-f-5xTR%#yjm)?{#2)1*du|rmp9cT8CvvM_i(_l+aK`9JfNn;s|IM^bq zb>!1nLR{Z$g}r)y8uMWC7!$Nuzx#?sYAPLi{>BcAgwJ7cI!`MP0|P_0S98GiJu4BD z2J?S$@-~=}N*_Kv>XA11>18voU9PZ{0V)>j_CR(JMT*_y@D5@hY(z{lBrp-izcFy$ zMW-$kWok`Ng)GkQsaTMx$)!=wf_%&hR&MgNR@iiyH5kOJ9d2dX{)yQBb*Nam33*#< zYc*R5dB&1bccOoAByU*+TMAwXtQD1xT4Fv$?GFeoYG`MbikG3ytG!4X+soMNj<|GM z%vRQVGnpl&RKy)1KA=MXNjPVd6qVqkV+%_V5%~tf`yf9*MlDdJ5q^opYGqx)lPHPo zA;FuP!}7n3W59gv2moU>VN%yg<-2rofh@j0d`CN~t zwit`4{YhTY&7YTx1~faMfIK&j%Tlqxpv6be@ZMDhs1A`47Z*o}JRLgGBW{;_U)HJa z@nm>#SGF>h$M8b}vQea=JH;-<`4=~3QThNin}E$vTR8_+8UP&7PxKGktgB^Z;LMD? z9ftkPbNk|TM*ZL!@OI3z)H*DtlqpAajOF|M$CGdf>VlkZ7!fZPJ!g{=Hp}d5YuxugEWXjiGCArok+U@y`2p^v_Ei0 z>65-6nB{2^pEdG7en!jV+Q)Y#q@mF_el7M=+PgJd;VI$V4e-; zY?*&DO{+Tkc#4gK}|8wh5UhE z38g<}TEg+VYjdaqzbm>H5-F05w=S3=P(kubg!R63U^E_?Ujk^ zcHf@Mmvda`B-YybWQ;G%Kw(8myGVjZjt#=z34$;kOb9gL;f+u56S^d=ttn@4KM@rf zkWg&XLANE*J$*~`>BsyVOIi4h%Zs zmtKEGq6sQ)Pv0-mJc04oEi})9`lin$i(g}hA7}~v=Blhduh?9ZEoq5NsTv*Lf<}x$ zNjV%WhlE*cthwGMa(oqNF&{{v*jOGSfh%YEIJYDr>gIF=T9A{%i7V}6tT^7XFxumI zgc~zNPIogx{DEj$t)p+}8BOb-p0~oJ$Ru6>5EP9 zxZYmZFy!cguv_mF>(0v_<1-FsbG&eGo|C`6%L4+@dW>0MR2^{ z2AXeW9P$o9%unX^wvbf5B#RDPXvVNlH>_!2* z!?h5eYQJwPlfp%>5{khGY{}B*61?y(S9&*(?*{mVwrxc9w8f?tK%c}$K%5aFnl8cC zx3tyAYdpYcy`ags)!zNETF8Cp&v3!i${FoQdjHy7a^s(tQfFM!s}?g0NonChIVK=(cIzANRNl*Ud5m-7&^dw2Qw> z51-(YqBi#b>z7?_es!sL((u1!ll`Bc^OnD-Ehrx$6|?Z@GuW`llDRD30N0iqi11nz z@I@UH10%fVxlge=@MK7ugs@t}GA46h0og25CC79WU_|oXvW817fuwXz1}zkBX9((@ zN!wzEyUSA~kYoJD4?wF9@<6jJoo7S8!6oH*gURwTf-M%T%;npG2z^Yy=aPh!IoTl( z-)+&JD84(${BWQiZSe5E5@b_hm1q>*uD*A3)ak!_N!NYC#NJJ zH5u>wiTPAN&+~Akm}O^o(tXsHrZgf_RLU?wAhq?Xl+AvoJlbOLWhPzTZ0&m@VG;gL z;U_pHl6LtYvZU~SV-YEi$1@TAnY}y}BEa1LeR~7tTTBs<^AHRaRjG#HNS9=Yxml6A z?_N@q3)Q9`;xcacu9BN*E?R7)G1Xnr{r&48SkrqUbly8ZJx*<|X8$okR)hJ&nrM3b zcY}qYrqIX;vIS_*GCB0tQb|8sI*KAp_Z1$5aGuONSpGG|LZH>0<^liZtT)Q*(eaVz z)4+or&b`^d-o2F-_#Y{Ull4AA-w(8nb+8`$?cRM=w@r_Ckl>$v-W2r*0egRue&~GYOu}LHBwfrul-01_ zLNIVsLpXiS@oH(@^U1;H2G%sg<@<03w%dLGMu4wxJn6G&RN7tSJT~y~&J!SCa{nPp zc2yYqVu|N&ur=3IPDpCYGoXnfbExkBu=dtpRlVUBF9-^XG}5pMX({Ozkx){)8|m&A zkdW?>?oR3M?(Xi6P1k+>-gCyif4~{*XBf&}d#(4G&zzrWxy&5FW&7|#gOf;HvVJmS z?U72h6jkk_2KOsKc3t}WJ0zja&^;<-O0o5J(2+Mix+`HOryar$7K%sb%AjzU9o5pT zB=F#34yM+T4>UMm1d{ll%_m2t1jFL3KRy1kJb$>A<5dK&&EJ9CAFAgnw%FJhl}fy^ zaKmFbsZ+w~q*E590f{Qxtj$?s#;8wQWcQ#?pPIyUTD=oiY7a=H4sp3?GRta&1Zy#5 z4d#orGT|}G6T(RW%IfIN+gu(0)LEN!ShMdg;{n7r;UtWblquC5eG`JmOf_r7+N6gggd%nQ& zoKzD4kWo`S^@+y=ocBX^R+N86zSO|Cep33xy5FJ4zq1PCEW-T_MPe1i18tp=cG84+ zQbWRW2qNozoL@N=QPfaIWi=jgZMC-fApC~g7zde16%Pq_+nJrU^72du0EfUFO6IwC zHnNChKL((0&RQaCCVb$B5vbLY5+$6B=Y&BrUujNeH=ln$UBfAZS)R#UZ@uvfksT5xH`vRRCi-6%zy{yn$?o@^ z$w_MmiKopVWw_8sk?nCF&-m))mV`a>n3^c_T?m0njZA#z6J>brWitW2QhI(3Tg8tI z1ytXXTkbKy_%a?_|NX0(i-aVg=Pw4SY0&vpFxgCIeV?}7ArJvTf69yxGK?-LfBQ!nC+8Yv zO@!RNAs=Qcl-NA;9Y%&h3G}}ppoDo+i zE7HK4r+Ape?7h>m z@}}`S?nVOk2V6^hPv+bX+d7ZOirVSj2N=#=^MzRS&EOR(cLuw#S*=`uNC33GKK;-S*ntr8~&qK3Ld*4l+ngswNV<6{36zFQFoGnM1 zo|Z;Z08X;zOZ743qa$U1Xy&4CZk)QkEdLc3e+O3FydOh16R-5%5 zpe{o}XX&|%>5FAriUqx_L)Ty}DAXE7>LPWIKtcic^pY;R@DmfV(StqNL;Bu}sZa_& zXnw%otleGaSA%#pNhUQ#Vr+@AnUc?x(=~;?6s|KDG%5JJHX`*NTkN+#&M6r!QD20z z7H6%htMpFrkPD{v^{kHLgpGcH!W?w2@W=`G78^N2afqE1t z)GXQEw;lDoM5(rmX~)9dl%6SFBrA4EuwYtX_Qw3KXEtOZZKvGyoqCHgHVWm>nn?}A zifD*dzF@J-OlE{nZorfAQ>Oy_!*AIg&Tc01s(pnxY$;9hE3XxRsbpDzMC4ycw+UOS z*Q-U_9@%&g`7hfR%h#~R6sX5{qbBOn!j3R{pV0{mT_m1YrhK&-C>nbo9LRJesjfsp zq(dml)=~mJZDWz}<~xbNCx>4|kxlU)VOr&!&ah0$U5yJn32LV&gFRt6sZp4`&twm# zL(O3c=5W0J#Xs1y5>%q$@gsAymwUz4WWt;Ob}a<{p@Mvmt}=KQI_vGp;ko>cD|A`+ zt&-EG(fpgHn_Ab0&<1RzQo~HI`h*Kyc6_k|>|-poD*A9|0liIUAH?RP)}p6qQoUDW z{)8)@BBwmADJ0+h#ymsINNXe!pQeusG*8KR(?;JbxjUSjU%y+TN#O#AUu>D zM0GqAD;u(N&^TR&@Hj|30FE8`Hf<{%xN|~e5Q@fB68~~Gc+dz!E-oKZVnH6x4=+*IYu<&GDt4ddA!!_XnAKO1FP4ZFRXk1)< z4twP)Eu3rZZ+{p!$JjOZmrBC9?5NRh@59!n3-woNOEaw0EYY5TrF3G?cPa7LP2bei zo4T&kyASH?A1Y;u%XmRE26_vymmsM{_V$W_@-pU)cVyY-zoUpNy;J=T9qzA?sbX{? zDiqrY`gP&F<<%W0>&W*q~YrH)V)sOCKLDT(&!kpmsLH@?2U zzwM)JcZPpA6PY`T-g2;AXiaO_e6k_Aw1Ih={%OqNZQ6sM7Z-<9+H#A?`=)yP9*`z; zc-2ea_r3y(S320|2hv}~q;jL)E33tP1wRR{Ah_1nHOI?+h2n`EUTp@iL?Ou5!9k*a z&}~a(>2cvI+zr^><#>GGgOvM9!K*>#`Vvm!X{j6~2w@<4dU{=`{8-_j9%?Sk+~Ukf z`sMDYm;;iL4For;ZnT8=2=5UH2fPqai4nDUMy)&izk;pqKcGsb^@hmUHCHw3b=K8s z8@a3-WI;_Rb5`)eCV18S=QZnkt^%r@v8IDfXd5FN_D3#OLU(C9JJz-okSxi0QRsC^ zX78OOlPg6;s}y>+e3*$)4Hqh*9Ou1+Q1*;FqkYZnerI>J^E4=$NIqaoN#7}gh>DsE z{7P>$x&D4|Og}m~N&UgZf7~voc7Q&@-le&G_f%k>ZF+LKZ3_c{n$f1A*JHp*k5#JI z$v#i~SVIRrx#GtmzwTg!v3fHs=ETSp3M1}MUlx_m#^(Z+S>=96oe#|MbKpF0sQh7B zboxRW_eMreR)3SU`oc7yP}b(MO{B~t=kuV$hqcI}TLo`aD)D-4a%J8o2mG!Z>RGa? zFuMy*!7HfFk0P5nQeD#Yk?(F>4Mo~2;hR6f)oMEkyGrFQH~Jh@T;!PbRu8_%K!5P% zG`*e(>YL#|3zJE}SS)k7KcqafK5%gM+C#QVAC(+>3F3HvB5(BgZeLxB2i@pZiff0T z)DBO-K6$pe3R}t)MJ-S+&nVOS#HSv!Y6v8aODuGBL1cW^G~g$HlY}?jnojPfIbOUl zLqif}ewBCJNg#Ta+1ECMzvueSLnSd0?@R-MTlGd~Q%yB-{KC;ROS)PbcN*}Wb3IV>esuXZ zLy_IzlSFVQFsFREWD-wq{m1X*@OFgs0c<#h7f6@je% z54GM0`9ekd>X1Xq^#-94qy<< z+n&(WyYSW1QrWIM(6gNO<<@lONfPJIT_~9wIVYy@$M-4|Nu!M%;ol|Y*Prr(#@It2 zR$%V#3b~+1r?-`+*Z6l27sF=i4t?^-zA2GsWB!==XaWcn$$YL!{2Q(g7fmcbLbH@= z&Dl&U(^5U~#l&N!u;YAxMe7^(GqdV`@!YEZvQV?~)VJ@fu3l@UqT2BwM|Dx3KT>A` zS@}GiL}~_&LaUrn*;;ONNqph`K=`>?Z0^B36a!|F^ozn5VgZjxt1O$*Qto7XQ73p~swR1VGjXN996%7sNRiynk%y9T@QA|Sa zm)(INkp4gUq=r?UM(Qya%Vmchl(PC3;c~;h64wjsU zhwC54!}vU73fK{|RfqZ~jxW*ejwgj_HJj7+?ublL#wyW+@)lOHv6eH)+y$&K=#v_| z?KDky)*k)8RzUdNl0F!A?_ZBIw)$6WzsZxW3)J?ewW7 zzpvJs>>e2s-G zty+$s5f9;nes6e$!=bwI@8B*sHuubrDo(|UX1f9_WRj*-lUwr|aTR+}G8 z9en~MTf-g60kekhn)F=Z-#B5oz&hR$yB_V`!KA7{<1_W^M^RMF^F}w`F2c{!ezY=V zsDk|8XoVhoLX9C*>7~O?54*3M;u&-XKk;|RfPrzGK+7%*;hI>sb2w`K9494|Zr}B2 z4#6@4OLIX;eEHtZcJ*|vqaE+<3-LD6Xo=%4ueW#~%Y?@ED?Oh9(uyzL(!La*yMk{%**5E>%A&9amgX zjvWI*ySQaW?jf}st17#lZtQ&CsNEFy$vqhEb~}F?hB9g>RBLkWU%qQH)vzYMtAR9Y z4W1}5%OZGL3C~?cr#FP^imvGDA0gV$xU3M()ug>8H>Fg)Y;D>;_|hu`PB3Jbhi9(= zv@3>a}E8*DN9TNOep;$ zi?{PfvP|VD$cLDt;D?U}1%Kt9;BuVHSo*DAN){coy>4Lf>45N8__TlSFn;5H6i7)y z(?QG&2~g>Hr<$3ZMV6!!HfYqWxt{mmJSeLc(mU(oR@tp*%RfJ_m9SztEP8QK!ij=} zgyVj(mlxe3SC^42GGH{B7onV(%wiZSlvIuI^5u8%b;)-+Ti@K+=rGmaF$QlTJLvA% z4lPN<_ooG04S?Or2O6>6-Z+In!mpZK&Hg3;dw=wXd{z8HY|N7HU=Rw9a!0CFq z=KclE3rMUsOt?F%mN9o+Hm)1}=5OrKs^?{!`W5NFB`=$NMxrWC9~!t)tsmTe@L7-= z^^|_nTYRr)kR1Nv9WUF)NOA=GbA$i!Qk}H9ru*-lFxCBFGTC20k`-f&h8~D=Dnhi? zVuEtrT7Ift=ZntaMv;`E;m5ybBc4)}D3T40pf9V)F2uq`h;$p*iPQ~`#Zk`vZkJOTP_ zrDcn6w{Lb<%gFMvh_B0fe#=3vC%yF(xKc|MPg7i06!cEC2mz&S+ zRK~sc!1^~zl>6z;9#28{@y~c{_hQ~+@652CfWy|Jgx$g4zub!t7Aa8Oah;mGydE3s z%{fx8+F(^4cCSKs_T{8jdN{~2JZHqJS64zBcf9kGpPBsVcq^i!yB5MAoI*nlGe3Bp zTu_|ivFHrXM0lid%g30WbFgkD=H^u!Z!fwZd1gdp9#N*Ki$s{`%eP5x5$%yajb7zOn0Ii3`uBnhQFkp7rYadS8Q%PjELS3V|cq@NJOYN9#W@25l*m59`Sg7#O z=!(b-tJg&_lbg7hJI|QF_@o2jda5SiQ8Ww^nHv{IBf#aNXYe5Cnf;!R+r`0OmBTWsk_c&EyCe(vHjD*UXWbQpR~wYb8(G6mYN1 z-8*rRhOKKziobU00M9CBVjfgrzzYLTR+{aTQJ$R6Ki+?xkW>U!N?ToCLy!Jbb7T<} z@@0L~ECIZ}x|LnzV>7x_X62-Z;hDmC3}HC9eh$CJ#eRTdY@32~$O~~_4_twwY})(g z=4QYHHtSa!IbnL0`Bq!-(xc*e+7;uxakKTJ4;D&pZEd}dAd!|0Ch|v&yZ2iNO^Fq$ ze69}VCwqIwWUwljm886MF)7RP<*XHO5R4m|X8uz*P&Ysi?w4rBRBgjh)3hi# z4-N~?X{{glI=NVMJaiG7VeECE2)II6L zcD}_6%5Fpl8G9rh^$LWO{HqBQc)5HAp1S+hnX1{&o8HZFn@#sq$V)9=<>z*n`1LRZ zJ#MpCOgY*ihqL8b9%fN$sH3ke;Pu{Zf6nUw>C-vJ`>D-HiL-l>Yi$WXNf3QeV>QQ? zZHz=Ifmu$hw0J(!j^#>P#Ot<&L0Y$Oc+zSK#!X zFc!?}$*BlwI^HXV%7oRej)AsY=f`!jg%@mTeR9nhW&=rF1h5^&H%^tlaVB>n-FD)Y z8omPTWGh+156sO8qoaU?L=ez5*+Sd_jF9@%8m1%5@}aIsGA#!X@UjrP(zPPR^)UT~smg^*0Yv@&kR*CT9YXFIUl z%&aK=-GDX6zl25|xX} z>rC5kUV3_g23~E*eF!z6v{zcKefHwBt>NyVdSSP_D?VmfqFnxYeP!{8lyB#<%{4(0 zV?Gkw4z{1=E0Q@lfW(^l|2I7U8=(IWE>q6%Wwx$fS+liIW@be&C;mW=`3YCOXnIiP zdR>w`J8KIf$%(8#2GP_kYwquGG~FV2`I_d|G>GP#-GwXm+IC^{wcEzQ`Ep%DsueRw?f2hQsDxOI3crZ@8!)UmE7yfsQomikb%mw;E zw6x`kzRF}SEJtElNTWXX2bJFp#=h=!brs=*#mZAijtlKfI&UK;k3&&f+evVG82?@J z3pk&>FoBkh)rGLR*5W+j9z>TNfYy^HCSI1W_+lVex1YR;zgl4Y-m%5~zNVAI%d#V3 z?_p25pD^hwJYx+>-6EpdkDYj4Y6Y#+T&^L)_ooE#vwrJunjzg8Abzr3FP^eYEMIS< zb6K3@o*g1hERg;nY+KKo*O-qX?O3t%I%8bn&BP=+(vUP4)al_SY;VSzV6M&@LAB|Q z(SO_liKH~P|L&0c@DOLr7RTz*&MFauiqm;>a10cz zj;wKMI$sWS+3nR+e67L>4sM7cM1Mm?LJy@A*%{HjBB$c^`;J9YQtQ;sqf_@?l;<6% z!9zr3o^s1XT)NxFW4efIuejz(^zV;n>LfpvX4#YoLa`=7PWMe-L3UdFKdB5~y11)I z_pRF-Ns>CGrTqdM&_%&+@5Pjfrk4kVe`gl2`MV2RNVzSg9!?Kr&>X~~ucTvwu!kZML%~vXNxy@=m zZzUN^W4fLFO~GJCd1QJVuw^<-F~T@kSL}!Giwsl=YGUpQRZ5y{8Od$cD_=KKYZmE7 zUjF%OC>`))t#Nq~1Lx}Kp5j2geeXyRc@EZtmq*pSu#93%aV>MK0&^*;9l?CQu}v`Q zNoU9F7>7jMx;?7>!^d}ka?(j)EJ)?qZX1wK zNIPwa@a&Gq>ZBdH_MoZSRSq1*gv*9Ns6b9a!h4y4zLJOgj&sBBO0H1xaksUN{&?X% z-1*P!{=|Vte*V|6R$fPSb~NQFS|JBx6O1%l31Kfqwmh~x%vgRv(*_g%vUHo(ar2Bd z7hk~jCL&tE1Wy4y!04db6LXA3fGN=V8~p|v;R%P)Xu^-@%P40#xv6r0e+0n0`w7mU zTazw~T2EAur;oa{%4t~1fxMfO6_o*cN!6nN?_y1@kRddBiI9zhY2H%B3(m-u^J8&YLbidZ=(oy z0>A}>H>$x%ibm1J@k)ypJf^7C`-G$p*xqBr2R{3K`I;2WuC6ZTZBw?5ddC0~6~-ng zh9Kk5)k8$i(!m|z*`in`9~5HH_~_STi(+V=i*LJKF#+w*lN1Si8(erO4G^Qb5hoH= zP2P&f0eX$=OSP{0Sa8O^(cAfM!ZrbJr@eT4!$(ecTN5gi&xKNz=2L>)@6eBeb=9T* zY9{ux>W*T`)rpi9_jkQBiOcHk*vS)#vY9;jivqn6orsYesV?A(=Zl{;gs-}0(9-5X z(|qFd z*eN|$byRYLjF1$5V)=9_n)!O&RD=1x{GSFUUq_6_X8OflsJ41>-rFQk)fi(X92R*~ zT#O$8Ri<3X5aW*3@O?Jwt5^Gn`9Z_f?M#x1rzdy&@Q9m8>Rqd22DxmULyo{h6bL(vu-i$#3}<*aZVxeGzYBBVWVXKi}>^ z{&8tx7k;hUBAy1hkWv$Dvl>&tDtWC&0RP%MdZNwu!}v^(8z!bICAsbq0#L_Q#&L;--13_TnWTpNoC0XXmq3{tZbPW)ypS zY0xs%H$-MiC4Xql*1@_%yeIU8bh2ye^_APMK(%?zNXgLmO9qYlN$ydX(Nffj)V*B?x`DLAJ>EZ%EoVDaoy}E3J6S&FvYj2c6q)WcLrgV$=CC824AY zx*?S_<81p6o4X-Z^Le78Bgdn}PbO16bIwx*Z0WqtZ$Oj0Cuc(*s}RKHCjj!jahC%1 z-?*mssZuGteK$TwWO-#6A9#mYXNL%0JV1|^OmT7ML#B%!7wAn3j|Dya6*c{#&2!YP!YEZKg&iK(7LUj3N~b=V{fXS%(YCg@m)&n3MzvOR zmwTMI@C{bbdrVaOn`IfQ`y>rVQVi}BjIr?XzbPwGt5jqm5~3#SsY;aL1qTG63G{B_ zBK%}&N40f5JqK$xEId3K4`X+WRP5Apv#5WEwtH)siq@ru;LKIXbZ9XJbO_8%Kqb+; zgN-U7yuZH>Y9{EZl}cu!%uKC;3f=Z|(OeXAQC(Aj#ZxORRAE$WZ?8;SV0C9F_jX{U zT8K0EIF&?ex!!(YAN9OR;*RhW1mziWL)!L(1jKL;Qazk?p1nS5-s;JBS6l-arF%kM;oK!3@m9F_hNYM4s0wv zUPpv*YfYprku9D-q8Q$9nOqcYZuZA+J3)%PlrOA(ZGvyiWleqzv8#@ezDLl4xic1g z)+|({o8IBgYPz4M`(S&6J@S@a18{`id7P~hFjVDG1bODB3+0Yl)*+oQ(!PWG4&HCR zzc|5QJ#A91SYTHb0qd;lU9FJmt_N-~HYNT2Z)y^^;2Ao|ax}Aq`49ZN)k1DHTc-?|$Ur8pKd9v`_FD_SDwOdi`4tFj3yR0=< zFUFSjN8&AviF1Z$5^HetThMPQi`T;1aBj{A-k?XksB~8;-yi$W(o~5`BchiOZ z;r(zOz5^RBy6Gy|?_>?cC2#b!O}SOeFPCT(;z1n6pvkEo^L^t67Kx?DaAx^g)9Pr~ z3xTCohA6p%L%MpI$@rxcku7SjclzRu)mOaHwqS-5hfdwP*vX_UJN+2BkONDtD^uIU zzZt^)W2bBGvITD})Q&;O)d&pqBmcCak zXL#(xRwli%j-=L@ZLRII>7IM!?f>nT>&oiWg4!=WtgR-Lwbm3q*DoZ0KB!c1{z{=B zvoeA%bV}#DH*n0Y(hZIqNDT-Cd5E(3tyD{xU% z17Zb+-{|j;$b{5>A$uv)U19|2h}qVeC5NpK>>;>gsmty)G%sInX_F_jzosy$L=J6v zx-~4=t1+I?wKl)lZt@jMAmUM!y(ZSF4Dvavw0zFtbX?!`V7IyWVHi+KVe%Vz@vF=) zUhO6O>s zHdWu=XI$#mcWOLrh=$Q*8v1>i;XH>qDRNG@8b>WuNkXyUIj+?HRbyF}x$B;rZ_**- zT4+)ak*Y_BZxB;)I8W~DiB6T;a9-6H841oYC9LZR6MEld7&%4`$F{NBh4_cR@!1mk zW5SZ!H1t!!Oil%PA-U6AO`n~7=Eutc8(Os{>KKmuVfCq4b<(-KkJ_|B@-F>rkIZmDOJQUUnCKSeVQJ5^OcnYxDx~8=swNpS&k)O;_N{qY~|DRiTfkz zNygareKzhhdnbB)=9{KJB};n1@<)@&G_g%VcF=``F@WJx(GbC%Ffb)@lRqhK zc~E2+Y7O(1k`{yQ$H65XIm@>AeMNFredCog!nagXK6B*?adp2>IKyJA^x#t%c+aKHh_HG{ z$;lZHSGZFi7u~qxMfeG(3gq2>|D>^!fbvqo({!T__mDi3#V19gS)qhd&lIas5k}G6 z<{LDaOnpEhwhvq;zKIeqe9JE)Or+Bzt-$$H-Rp}1huN&kE&&;eCC+VndKE@803>4} zB#28RpqfiYTONHf^)TFX5sft+SsaMvV%R@CIvThu?!3#%5FQx2B#7H<_Z3UYRGUF+ z`>Gdq44F9J@~n`%cWNWPxXs6gghZSFo+%l&lxe|?q0vaDlzeKR51R_byR9?`rs?h-?6F4|1>ttDf(vG}YvVk?8tbs5?8(k{+cc?ZI^4!Lt5 zXHqS<$q_2>O=B@`OHUGtkB}gnt1!q!A>wAL&S*m96)@<>QmxPj`v(uc1T47`b40f} z0ES#+!h>bk)76!g-a?+nI#=^~mE85vwn~rEFo<^5o5q`_Kto@rg~!+*S6XNvL?aD+ zi)`4q5%-cW^Blg#6!hbMK%IY(kIUwcF~ZRcTweTA2YZ<);7M4@Hwn%eul@>c;`P%E z(QikHFiGbd5biG>uzW`AcfRl#GqW`5`yiheZqx%n49Tin^lDG&=NqmkkF+lkd8(L@ z*ROhuTxvg?Rkh{iFML*v%S&}V`BLap^T{O+OK_$&Z8OSz>7)F z0-z|m<`26=2%LjC^=z9)QORo^g0Sg#LpYYT8!gSzt#q#r=U8>x;fb%=1#r%@hJtNJ zkwJ4?md#fG?=(aXi$yCmg`LPc_j~rXxhL>$^5qBLK9PTomb99UoW6d3fj^G`W)R1V zC`k>oM^2#Zl5>Ogs7FDqK&54bTjoiZYcEKtCjmN;@bUh8GZ`2Ck}fBNQv~A4IR9{> z*>OEmpx=W@>?{cQHBrEAjKrExhr$|?|?+2XjI0p_w0~& z%9g;EsFAWOgGyz?@R5D&avJ3mQXiqXMxMN8w|`b9oLU$~z58$}T_?x&kwmvesOq=t z6TY-AxtZ@5$5r_xdahn{j$b~Wt4k9GV+$)3sm-GcN75Uxdt{4bd^~%5P%YKEm)Iiu zo58Nt>)&olT-ZxX)Ik*30*;%iefg2xaqgI)2E*TWea3M7r>&Ni4JwaCPEQske`g&R z29HY*+v65$Q*8~}?JX*(^1C86U8%VCx7M;Mz2_r9R%@nl-M@sZX9{&wz zXw;e3$7;SwmMG@!M}9~b%|E63oWt>yMX82rD&cqZ#;o+|M$4N%r^+u&{XB%e@KFU7v@Cht3DH z#aio1mrIjxre2pH_~7?Rpy+)bN$h)nmQFM9|-7v#qVNn34y| zIXx{iG$2vp(XNi5cl~d!x}26~&LPV$f9b+aZ6GQXwbmR3%ITVc@)H3miU*Hu zsw(t+#o4YQyUZV!)V%DQ!2q^azMrwgP3$^vs@bx+9}*>mP!Y+dCg*x%stGZKfZald zpk>$(-X+%Rfgmdf>-;|+pFaHzUqLg&`DhFvIlhDcL>GJ>hY$BkxBlgBR7)bUQd5Ic zB3p)ogo0Cr9GPINOto>mxfCh;Sf8S(8cDJj2hNw$CfYoxk?g_B|ep_%rlxAmHXA^&R0!B*3*v%kuICk2+n2860`v9|bf7u!Sm3WbW3)#hqmJYXS{*}9f~ zvJdQ#Iwl*HwrxF!!wB)VpuH$i8(w(vzd9qc%I|2U9}#85a>;FOiT zC1vdFDtG^3#VDcg!CyEN*kl8r_IeHr^PHU`g!PM7Zmdm7U8nv45-Hp?GE=kuYLO7Q^AJe;_{r7*wyV zE;mG5szEO%9Jub8r5&32;+VQfIGU0FjFky*uOdz@&->|0(WX($P{Oh0fI|if_+JGw z4be+OEZ)Uqv|msy^{`Hi;aBn$n(3YSJv0w5*#7yO%m&OEny_pAW@nX|UpelL3m19m zFsvaqC>2HN@S*DQOb?Y!|Ehbl%?$RB4Cc8kNOJllMeq1gUz;WaE|DAYpZ#ic^@c0U zD>|Dv&10s~J$u%ShS727Sy^V=M$~O=5jSfqMN&3INNaD%M7D@ojOVLU66bwJ1-88VJNo#k7r!%4A|b$ z+ucK}j|Ubo=*jPt#INy(lgc4X*$p45h;z6ta6c)4W!-8jfY`^sSF6G@AT)r9r$k zj$V^D;_6VNCq8TY5QlTz!h_pZg5#ql^EeFoc}T;EXKO`po8``W zA|}Vy`D}gfqL-;eo)2gKqZES81ptvb%9X9(l%&FL^=_p?19@8{fPN39PfTEcmkr;( z!Mtr|e&U+e_Aem3;GS#bmSoc3$384^|CO#*6d->rs=AM{71`YlF}&gx$R?(#8cHq2 zbw7QAKW=DoRDSpyZ4&gi|K&E)tVO4_{PuXO_9uU!algB}KWXuOMBH8mE$5gXO-Twk zUzKb~vN^4e=Gm?&xTRO=(eoW^^Y+h^crGH7>8&O-9r4ot^kiwQTkan+=a|Vxa9ojQ{MHa@(sC-Yq~BSJ3)w7^;;P zpEod>r)S@vz)0tdH6VPspoBStg@lB@0*~VM&?KC4%hJXob4RcKQ*T9Ld69||env3O zDC?s_P{2W8bRT2r(6g6F!wi1B(HdXd{qNLF3@0SuEzM^;TC)2!%{VU%2{{l?(R}S* zO}DUql!zu%{k;c&bKvAl-5-iP^G5o)B`ckwCl+%{Zc9$w?VyiU7pB5-EReJTt0wl&OoZOV@m8WH6CE^Wr&9z5_R zDlgM=MRvpPR;AbM>WpVpb12hST6w~3tzLb+ZFsr9crS2`ZQgV1$4KR7sKXX02XpN; zU}%{mZdf|bLtg*=nv_2O)7j!fvtq6^Wuu7rld@&TQ4#P;1_oGKLH#GVR#){5-|1!C zUxTHV$t20$dC(l;<|a!Np+P-~uOn3dtvu?mWW?lo5=JLZn|;h=&d>qjY&B60Gu-pX ziZc(*SR%}plW^FG$&c~qcP<}QhVbdd#2q9ooKF1 z=bHzl2ug+1U*JV7E+!+yWn`pKY;anK3yKGhMfQKKhHf{GZBWq~eF^0_9~2yLBi7kW zATTB{GR@wRESX;Sa@NfLc4@qBxv;l5hsnCxwEc0lfXipo`p-t|zVpIfwu3@sukID= zWDlbtzq~%%sH}dsL_%tDs`jyeR^ynBY7_`5)-Y1?XlT`d);{uaOEb_G1{QA(Q5Uqq(`d#;7r<=)wfgo;dkj?G;lK`~ zRo1Ci{o-PH5lN!G2#zzPC z^Hi&t-9Op|;@+1%c>+e`-SvtwmTEONLesEmMwtDf?au0=k#{f4N6WE4D{DWBZxhFC ztOcMX@e}zoNJAIFgH4tDI>w=e3dgn9kWoMY1YoWbPI`=GtzE9}$8#^`(y>G}7rv>N zO;A};W}LUk#b1HU@QeTD1;^k~)s0b>nY>tG$ZIzHq33qrfpOO&)I{zh0(6*GwrqUH zm!Yy#ClO~n$*u-&4@54mGH}y0$JzOESJpB<{1z(GY&bwL$Xuz7ut$n6%!ZqESqX_n z`m_BQpqLWDhFR?LGj^IA{TvvYmHTYwjHgLmKs^${mu2sl8(s5L^;NcA<>w<}MA4>W zloUD|Mf!cTtmmF^Ut;-8IZ3qhlfOBG)0dv%UW;70?mHuN9!U=AZBu`j6SQNF@tVXq zA3eT#krhnxlU&8r5N@Nh0i(LwmAMnDeybVy;I{jdu-p;;$0(6tCm*`dGtUl`Bs zuu$7>n=zPYpdUuW^8Wnx=Ri2za5>DR?-7@A_zMK{+#PpdQ%vRWc2?Oah@kvYTa6#j zm1f)~1HDM9dS2*tkS)-3sHq)U7ABwTpytro&h*NuW7!XyuF*76Q)SF3>yrrOJP$_XPeIpxOLQ)cVMabUo-4~;Yd@r zN(U+D_-!}Vc`dxPOj$p=YJ~#Uj2W%xSP%TmYM~c`bs59Mv>g)@az#TaT(;fYY-UAg zWVjoqrA;D7^Ht=WYvAA>gUDYF4)%eep_CMPA%FLu8z(L=E;1=4|Hyp#0#C$$*z9#k z&qoDMt5t1=M`}cEryd{G`dZ)x5h1r-@3^@|a*N@HPPgEXTtes6wFE+iHDG2zbX#rz zYHD;*(L`C%is|A)rQQ30>x1-=8$k zWQ>YoeDQVRr0_&_%>AC5{s#l-;HQSvdAJ8Y58u|v_c%LVmRK~a`R+clY0I`6Ek;zr zL`|QDaBbC7&Su2gxLD+FPa~s4%7>K{0s?Vi9$~#Cckmaym}vMgmecVytW$lcOvilIqgt= znLx|I&f&XvGaCW2dfKHVO+4Q$Z9El}Wxsi)_u^FuN-2kalDY!WQk%-I`y)8SX2atr zW_TQaxxYL#`QM17_m%2??xmB?i8HU^Dy?G?Ked_TVRqc&{lR3u5Xhrp#HVkLTTQ!< z;+ZW}hfo40Z*@-LoD>JgLK!q?x>)V6MzN`R{E;zvHvxPI0H9^Zcfbu`@kPILN5*5IQSx*>7w~6qEBTiR>Fay{KHoVhPW#;5jOfG zqKKoaAdT_eE}~s0r!F&=xQCDml$WW8Wmfr_d==IGBH(2M{VzvJzsFrUZ)zT*3i^#o zLony})*_f%zNIq2Ej1B{LOd5kkMg|tfFz>Qb7^+$Ynq$@#NW);_7KQ(IZF_;L<11s zupp3;n+Qq2ldt(m9Dj!dn1nj~h9t5$>=fLCca5u-wSb!*(1b2d)WoHO4nDZ6xwyPt z43aNf{p*Zmh6pM_#abTDn>h{Td-U>ARFArxUV9Q6{pE&L+dN4v`;orsQ-Yw^9v-|K z60#ZgsxMI=&+2R9T$8`=&dCjde zD?uYbNHB%zgJPB1`hje;0SI0<|F}W8ha=4|Uf{YW`+`0pY9QGk>8y&=#UaLq)>#1I zqibYgK~3Aj$`cr(@*Ixl4>Qw4%XGYpWdU?N&wQbJGF=Fv8{a+y`1fVOKcJJh9+(UN zmj%!Q6t-Z9Q}U~~xS!w$>y*LehDL6IgQd2=>FcGt5rqDgS4%@`~Pq=^m)9hR`&14hXR9v5%^`S*6Uxc3Rwd^9?nF|`9tg%fgW7;+==``&K3-S%#@j>qR*k_ zxxoCXYj&{GB7jWHs~oHWmY$e;Fw@@wB)IR1VgS9Y09Ty3TQ@l3f0C(dFxxN6GGUJ~ z&ndPsfMT4>WxI{&2D!@ub%)~+&j-@G!ek!D3X8Rj-7u1gX@Ft{3KIDpS?`!-(`9UU zGAW%9KPnQE-h&HbsU<=nm#^&cMf1y*kz^jK?iaIGA;f%tjt+Ciz#iV0&lMPne2Xz} z<^U?X&G3}qg8IMkYOpQL0mSq166bzWnR5bU%UtP7@lJ)TEJ z%Gg$uxk@GxmtS4uolO+@=fe}Z%EsIoyj-52YtA^zC!d~WTGl;6a+q)mE60vr{N+e& zDyNLoQIFk?>4wwtc$KIum@jq4Gb?a|Q0KbOQ(ZLfqn3OR*Uw4;nhF zwmFH4PsaZ=F&nj}{y(gp1`&{M>F)0C1}W(V2?>c!cO%{1 zY`VLfvwWZT`~&AXgE2N=_yFwRSo>b{p7WaQEhsCjaqu5sml+ciBi$r!?D6Z}fPnDqrqT$;XlDg|IA(|7YTnD9}0{6%62>&yd-8Og~^a>IgO=8mjoATBn^`Ex( zj_!NNJ*eoWFv%uX5%nWPcw~G~);mOUn+KuQv0sAz0aiHYjmlcC!aBLOs1B9?96nqI z#aRQ@Hp(qh6(7Mf?7Ly71C|`SlZE~lo!4PBpv7D>U0ythiA)q1&mMDoGe7hDC~roT ztNT4uB;(Ih_WHMTbN=~i6~W+UqVFcY9(B1vP{mua5;cbHL4Nc7WN2kUtPsG6R98_z z`n4&Ag%f33Od@?Ti&$x>6<4YE!q*iF< zCB~-L4Ti|)@ezDHnTs7-4IaQe(|s(mCmKq%htBg zS&DpvSFHd0H$2HJ75-En*U$H|&GZ+wC)z90S4Ue9LBsee)4)Z5=#F$DaTL<%GxYkT zZZtxFNEVzJ&MPmb(Zfqy8-+YerrwuS371cZ(~We^GskZK%Y^^``WNRtQg(gAu+D9P(Tz58eMYgSaYluUuA_CuQ zzF0>Ic{;hMlYGS9P=M_pJqMSQ z6(dZHQrjG>$vD%$T707D#Ea{sZ#HK+-oJlQEAM=HHJF@pfYpQ&K{&^cr1G$M8%r3M z%|H;?EcnmMkWlh0t0VBe!F4}{G@8%z6)4FOLhjS{gJnjT_#HL|9zi6uD%-^Vpy_`U zDtQ$XjuJKAFe3QU@_7+lr;DRY&UbWLzFI4-W=g4L@2_A|*q@cwDAe?p&ZW&@x%FAAInsnSzMFCGp3*B7x|9@|}*`Z*mC*b+ONz!R9DWsg0TN`g0TMDPqapY zE4Fa0z#w!bOXqcsrk$dfV!XEgP%4aZ2G|%5v2csz!bFV%)?Vkx@ueC`6$U66J*T$U zJ0+{>G`TJe{e!N-&KYlf69IoS2sy4-D%qb|PV(X%+6xk)>m$BjTT5mN0~wCHX|JE_eF(~+1Y4M&RZ_8FYkW6(`9lQu zbBeDvD~a<;t1HLuGJTi))Ne?lePl-$o-h#&MAvOaELVb^6=ugh9W2SOYriW zNIm)T5w6U}9&-yy@-*N9cfOYSj39uMuX0K>;AP{Z44!ligpw+!?)k%d*+{Qmk8?m6xAN zF-L}&^-+}F7CI&TcTvs6q1mtY-s&{pGB{jwSR+#82mm3>oH(Uqf5Yc;J8&jrvYjHt;1gWT$-T zqe5|Z3&cw-LdC1S&V6@WRU)yGMO!9FKz3|K>pn<4p3cs!%WOa{p~4LW8rkP;Ux}@6t}L+r#OSWH`%Bu0wyCrkY%>-!lsh4<(ZaF!06a z@bWYTJS-He$~f`#`K~spV%Iq;O|o8{sj{t=$_%AmV#5?uJzRzU6f#$|9=^`h?eTLj z=|6HCfp82IsM%eP8s5PwyZhl z>6d;Rpo-1mFEFYew++-> z_78rguO07tIU78l@B`T)0;t?dI17QXGvgh7=3l1>9E$}HU6*$^*9C#6NRLmgRZ}S= zj19{bkC%D$=rWjwk~V?1Rq=bT@B1#hF~-cnwR$lmL3F!mrqY~dVC4mAkx^sb?opxy zQ^OcS8+e2`R#o^tKmB*f@(FMtUHMO*0TW{^;#Pb`wOH~v<|H0k4`?p^3gG;hXnkwz z>#j?8zKCCtM3WG|h58tS{sqtE4=&96HNv_o4W|Fy1)^ zFlcj*-1%)OKL3skAUy*9Gb1k8eO&S3-*`i7oL3$ zj`oFKkJ5?_l8$PPP7DYu^(g^S+p77$lxu#or4U!eI{&~zdWRP4e5fY%d=Gt5WNsi` z`a}2(?2Zi|hiIm|IGr^I^FA2KV{CmhzdI(V27N{%j3Qm zh;ic;w3b383MM zCAQk=e#tCI8&~57fsxGVi=8@UYfULoY2vtfUszqU`=^|-{y3krb#W7Sosn?B8<z1{X5lLB)G8R<7?3Km08M zse{AUODF=uHLxBw?U6+{aJbb_0y^EwD(8MHmU<95B|KunOuV#syK!1qm+HWM6x8;i ztBl7;s?}koE#bo%_l5^=eXCxeo8Cci<-pnIo^0h-GyL+Nz7~P!&51AKt6Q~Jh--^R zg5Al@T~ayU3fx`<*WM8N${p(Nd?F5l<(Ws4T?%(b>DdZ zV>zmv%*0idVCoQE(Hiqo&Q+^c15uVoDUex;DzAq&W`C$v)L-i|4rN$x|aoPoB;C(@CM=~o50~{KrEH|HAx9z_K|o_uHmR` zy$@XKf9Ztsu=t!V@i$*103v0du1EP-lZF0A*x*kaJsIIlC2h0vHBcR%Lhih4(QBio zuU>cOJrrLki&XOC+HQ##oKwu0mz@~aD|}6r^E<;EYXU4UuP$@j$=zimx^-biJwb5) z4CMrK)@r5Lm-i(a_N;qOo$HE?@7o^kye92!JaV+bX3i@D=!;Jzy(2_15&cZv*<#yj z7w`0UqnNhfOxu*xW2%ZILk&R_;U%At@qcyiYw7dLeSll z&#?L#ED#w)v?%}?Q|v5TrW@m=MzzB54Q{-kt&$MH*x*6*fb#NFleUG5(Uix$9)Y3|$ zA(i%o8`cB$hNPnggFTtQZ3fz6E4uR2y=jIvIs*PKY9k@kj{W1DP@u$i&a1;Bxk{_m z@PT20%xhxfwfM2?9UAT~N)Bc0y^&+V_88Z{=di=ur#VzUKb^gYwuErt0mL6+kG%}q8z9X&_qvwi23db;G4L8Pa z{gRYQrP%|H2HDwg-16P}UJe%C2lt1i`xKx~mNM@+x;EnJHr*W!LDTuz>+R_>vg>7B ztrZ!&*EJmxiAV5d`lmi-ndaDT>UGSTJV|XbrYOvYw$~tdzB?$Ss4fRzuan#dEMa z!d&yx4aHsq!6IqsuwP$)gtFbwQ0M;KcEu!jpG;X_WTPg7kiUb$#$!thz z7ykE-re;jc1xHKh(BUq*3`xZw|M5!O{@DCamwT5q@95Mrd<@}+5uFaZ@a_>(pKY!R zZNd&8$jQ-no4-4yA1}HhIvzb_lxaFUsfy47_Mz$@*(|@&!v=E_i)GLTkf1=LwQxMA zPrdIyjoc`BZl307p(s=2<;`x9HquZu+&4X;c3*RGf!h|{GHzPtQmZSZ`bY8IUb~0? z<8%W3bJA>X{(AX$1P|!mmDO@ZlBe)R&Yyz`GKDl$SoZv+a%tQq;xA9KYy7vd*af=18nTg7g&)V zLT`U3mC7ZrHZJ?wJM&fT;>#X4&w9@1@V%vy-R6kil&y968-zt)%;Y)1r(0$aCH5DE zde??{c*5;GqR*G7xrkp-fF%&Dw)ex0Eiql>_-beHKjHfyU59DrrIsO>TX{+kbqKqh z<{KP~lK9tLKvV&C#Lpa^@Ws~7&${Q?a{X*;SSyl?G2?W8?+jq$hrgm=V@qI?RNlS2 z+}9gMZzkEwDzo?3!XNq4jwnzXe57#uev~_d++m_0eOBZlPT#^d;;fVD2#)^4Xa`fx z^qV`SNjS$2^h^I``P)@o{#pK2o`VbNrPek^17l*1923bJ7 zXS(8|((gKx_tKJ}Rw?_H6b8o1CKp@Uf5{|8tvpFQK+#YxB^`H3^j#j-x_|RaF4Om1mN&~R;3#CUp3q8dEh4bNl69b0v%zC0pf%lm?t-mj~Vwu z8?uKvUU|JZJUP>Y@)HwhTbeERm-o&SP>lRD1OXpe0vvA6XcV-?Q+>slL92=S{^Q!QhSq$6=I|Aw3o~|w=&hw5y6oA4o9V5|g`87xa5@8+o z(ciMv{WVZI@jNl^@On#s>g&RVw;Ma#ou6LWU7x3s4(MA2y5ek^?VP_~ z5aR3cfaUqC0dt>Z?_<4kc|KgbeVZO_$vzC@A+b|Q3KhWiv&g+L?=Gx+j^|xAr}>o9 z7D~bHD>_}~uU03&lAxc>xWC35ac3%3N}`fu`N|8YPIkp%iRt$44mnjhJQ1W;*IAc6 z^qOC-LrRb;c&Fo6?h$LMR0i$=GWMmW2aYMPV5^@aOL+YDFzf>lKOrhy zR?S@7%nW@^m~wQ}2+G)eB7UCiZsk3!b@#RFnx&xgkDRV4g|$v%CO-SH-rf+}6C z&04>>sC}GuYIQmNG1&Th@p*qif~&&I4f;FB)}^44V!`aMt}kQ5bcy!*Z9V&fpUXM^ z+IPQJLJIV9TQISY+%;2&aj=`;>F_=l(Vx2dC{3Oh8A#!TAIp#QM6)(uPnk0v(3R#e zbc11$ENBgEIGZN2Gwqz)PF9wDwaaufM^+qzf>>-;B(S<{e`v&$rt0#-?L$Xtgj&Nd zDSQ8@!1XjBPB&d2E>Jm4{|qgchUI0S7B72(f4l%Fyg&w=JGBel(E&XoWGPYLmI(a_#{<^K~`% zow%R67aNEAe?qut%GXKvZq7&>+WB-bgJlMwuh&-bLLZGSB@wpj z&*_BZvAjKQdeOq{2=yvnWESJ>Q?jl^oeq&wLS+bJ(QjIuU$N_Iy7k|k1|Pt_#<^gZ zE6#BahF@S`LG*b99Z5kaGrqUP2BlRApxYp`wR5SR{nWlu7eBr^e4;pg zOCBK}#pZ3}!bh{^1~(Ef23`INV4%7?D>|ZFEGybyW!Qu%LTMET@EBu~%S*6#@nn0* z)LU+}+Z1O)4`P7xWY6I2CYWW_e?lQbFZa+|{Df6qoj-z&s3l4U<|jnK7!|ZjCg3reN=<1=9dG+b1|3^S>*X{~$sC>(>>| z)izz1Q)iFAd)oo-!&a1jFd%8F&ao=+%gvYySHk;oig2}H`&?IZwzrS9-67toz3-hL zg#0Fj7fB?c-tL{wdiX>K1}A5g&c_?5x6ICP`a*}zlz;k}iv3^t@-+!XU;mzn`%Ch$ zE>H|-D3mm?))X8}MIZ{TbSbfeZD#}xg?7IN&&8)F?&)hWyV+Ot6M&w(Le4ej$st=y z-zTQ@YNzeJx)AlsOi& z@y@~a{MM4(ROoy|MTvcT;~MHL+}FDk?Mu8UV^bWweFIu$05v3(c-i|a;OWaTNQ}|L zW^U8|j9^G>`HCohyc2LuDA?9c0FR}7lf{70)Yox*{o7u-%emVhmDl6vVIecv?b?v~-@ZF-&{VYkeR24(*Wq zV_#rFZgZ17JJuQe{5z7&(coViy(U{{$r%TwO8JDGXR)mH^Kba4E-Pz}e;7xeRnHrh zXpMwvSVkb&%#QQ~z7M_$P_B!&2dzAr``oh8Hy4ZPCc(&B@K^8=dzxYgq6zUo2X3L0-Dm?M+$*$yOy_%kF?u*37m_|c_5lgOR7Mc>~%`TN_4RhvoZ zlT6Q`1jOZr9q^Et&-aN|X%E%S@nGn2B1l*;1=NHF& zdSrG?;@pe}ciN>(GRDgPisl&7IcQd+qFYO4dVP*yv(%E*_L}1rPXDcDe*SMi2ltg@ z#dbTuk$#Z5(ZMTrC>MqbGleH77SiOV5}3HG%kWjnBT*|2wqG?4RDsp zQMx_*Cmi^&b{I-cb`sCgqEo+{iM^L&=w{rB@?m7|nGSIjpu3}x(D!Ane}267+9WM% zE-)$yKk(p=YNKDOx0fia$SR>f_umK~6Je4$Vnb`UeRLP<9y@3i8B1akdVM;c&WMbJ zgt<=z0FXG+^O{P^@LV^m_g%&MP>D7*twyK5UEu|~$~7;Ex-U6Z)%d1S2V2GUzSUj> z-_%R`{=o?U>eDaNxYk@K_w$x6XG4yG2-(fzE!`^h5SJ%;J3pml(|AUTJ`IA!fF}Q& z0E-~9AYLcbB^dAmXkZ!1aO>Tc_njgnJKy=`+<}RB4A2-}O7pX_zw>4PS4{&mH#`ca zOFU;{17z92HW&~C$=-l(k)g?GV$N=CJFlT;@wtSHlK+Dr)c=z0Gih%WLq@aS&fSLA z#d3j`Vxu928U9&=#Qp2m7bJW4V(xn!zc5SGtHLO4e`S%olf^E)&R^U<+^6_7TU*NC z`D{G$_CtnPbx>B7W0zMLk3D?NRCJxI{VN!V?Y^4Eo5d2X#=%|co}cU&Wi|cPA~h!N zKqP=)#-7!XK;m#+ahqBva`9$-N*?YRZ|>^@@IYM&7#`*mZkOPr?m6RYom@!|nVYZh>`gXw>sY^zm@4;KFGu%DDmmJwS9j{}+4z{Qt%zg3 z=J=YP1s?r<-Agf2fuAqhVcVC8en`+%2`s6rnMg#8%c~({<$tqrcJ_OPa&(0B{ns)7 z^@VneP)J$;xw~{meQBShld*~7~^FTe408Xfh z;X&+=W#~}qzVynqcCgVW=itE2JseA(1qku#ri@D0r;X>)Q~dN#|Io%`9ml2!BAA$% zKc24jxJJIWt;GoM1XL>IOV8_mb`>^4dWi72?P7taNk4XmT84OHrXDV{_H)Qy2XXC6 z0=`F|eN$)diEVLKRyS*1-Obz3)pi^DS`oC5HGF>wtv#xg_(p2<_9m$Q`hT96`c~RO zy}eVVJ|n{_<#@8fpi|#9sZF#8+*H|4Vd9YZ*HB;&w)*gkc>3*51e*pg;V@?WIQK|YB$koy zA((MlTPNtbl(d*xFQQ^{3$|S)P*06)_)hB0^qQE*Ka678tFfgfXRV-SXg(5zi=1{2 z0iog|#PeeLaAzzhBs_c)tvxpNb(HFMUy9deztW4=2$lRB%bt_=;2|t1^l7*-y}VSt z5mNq&dEoPO>1JqjpOgu-`)YmO{7g#&8X9ml7&@0s`lla?~8vRTM6ho12>%p88s+ zUAK#aVd#zioOTXW1b>Ei;Izdg16K?K9v((e0OK1z>;prtbh_HE?{6i$4bu#ff#+mn zyaZO*nPot!=ZhE{8{;BjHpElSN1goe4j$e&3DL$ogGpZmpo<0b2MM0-pREoopP%ln z7aJT=fKzpv<{U(lCYu;axx2kMj2`r!$n3#~`HIwz)033dzLL-N5-lY3={> zr-hV-l#Ntvd{aK_Sw#8e`xf(;KepNjL$Yv34G^d45u+dl3P*Cw{te>~l=3xC{qc0v z8g*sk6IKDhnrp_3X3hmThiq}QO5&~C#bI}y;4l5o75Pk6X(7dXB%22~Np}mJR%!aK zRgr%qj}f7%fKSn1KN#KCGxmLJaE{67f-Q~H9sam^hGVRTbFF}FdI0H^p^maA&M>q( z8yDwo%=LRI9zFtPiy1Z7^ZUJorw>8q-S!7Yh%?-qs_wCGO-2rVmPfzMkGzX6g7e=n(x;w&|%iL03+bQFs{XpdS zHXOKTd6&GujmNC=Zt2lAf9A0+Pk7&_r#hS@71~B@e;HR*nMMRQxbb_#aiu!zNO}q) zp8ARW*G>QP-g{%NEGOFGg8Ph&;b*-8f|>BiGrV=R{TOBuWenZ6fI!;*M?64{-y=-AGzo#0|@Iyw+gCz<-A)CnXkDd$MC=K=tL znJ2yj5?Hy_5?AnimEGi`jrRQ}jzauk7DCJODl2f3F3L&q&q#mSFK9MlIY3-+${kYI zKUtJm7|=HMxFB;c>Fci3%R?%uWE$wX^!B*?aOHkQ1_l2)_qioNx5yIQ|5SNQfZ?F`q{WI4pT1oR3tjV`KKe0h~y+7W1Kx9G?zQ zQ5X!P`V1*$xXifVsm=d-DrbEOjDv)%&s%-k3|*v`HL3(^SOE}B^CU_D1!O^=d7q=X zsc97KL`!l6TG%$@2eBU>A6YYbd3ZDi0+UL-$1^wl1!QG^J_S8rEm$+~?|?(y+#Aru zO6+#ae=3jW%aB<5$KTT;`T3BNA|k^6SKmIoh3_!YeAY&}?lbsX$|i{qV>bE=hEh7M z;HC57k~b~#)d43W#K8sKek=0tajUluzOa^i)T8iT{`v3KPUv_04;{UXemUfszxAHY zA*cY2-pu6M?~KcPr(jvt7wxH|o*A(hA$}>IQ}|3U!s+fk*77>_8b)04LXVL6LsujGGS+;mCFy@N9gObfcf=zl=E13>46A$_K=;Y z?s*h{=dGsE-xwL2)ya1rm-7W*`RUM;2w4Nf=#8G|{C0+0eJhg8Y5xyU{SqwC z+kN2>24@7huc^V%Y%-P|_!-Tc1O!^cr*>69mbnTuFP2JX@3YfUj8GAyCKr}}OIlEo z^2mA^BR6fQ83N#CvQQ$>8Y79a#HeE^y%qC6z zdwbK9xGbrsA(`gN^PY`PhyP-VqdUI?W-(V5u^6=o{3(ZZQ@p6%lzoZPE)%+)UATOM~9lv(1TNK|)^Avv~y6l*og*v(;ddds?_T-N+-q zDk?+{co?qC$D5q;{`xO+9*#i>ci|ciuVI17!DKvFEIX~8JI^@OngW;-KMmVe8V$LLprxQ4 zxH_EzK?;zI%XK?n9S(jtE#bHdC3N-t#BRso<>pM5ho*fn+buPl;@dOoOsO*u8II;1 zj_0RqXo0?t;0o4*PLn6)Z5b{-*zmYr%m##rC2G9$jq=)$*O@VnQ1k8OrF#2uyZ_}E ze0X1`7Msln$MDoH zMA_&~e91rThLc=j(6)cs+A$U~!Kk7?P6Cntjl9F+Jeb535*aD&CM@k0Gweu{ublf0 zlNaqwgBr48(joye!*azcOjryWDx7Unq2OA+!_1Su_6YLC(jt8iLj+tWps=TFEJsvo zVik)okKgj-n^S6!E(0>kHIG$AYsD68epFJ=&P+bFVk-h2MwR}{u(3_i6eNU&Yrx@d%BvXx<;^yJI zH^^yp|72|wBG|24)UxonO9O*XXBzrDA2Om{&0%})cgDzhtp<29FHcTJhZkrF+S-oC z!7be}S5jcmYxfJb_s4tVi?DTLzM9E1wZW$9b=~v7q58TXf;go)KO%kzd0`k|q*RpWEtES^s@+OlYgNyN+St=WKl<3YWwHiEkDH1; z;el;se15H!Jdx#@e9ii}e*0#){)?IfaH2bI+}DA#)ObUN+FSuFHYJlkzXVB@AJwtB z^|DU?s)<+br992|hKYGxKB*qJ-r*R#T?u5)pr;&WhWoj!lrm3fZz;VZ5YWGpjHB_>6pnXce2b^8u33HV zr#m)H7MRBliF7K}hA|fUHZR`buq)tJYiPFNy0nsC0olNbL3{V^-EZ>UrNMuDFVS&> zug~*ym9&Q_u+#6`m|09m;?i}@z79OopNpujr$ozVd?*!gh2Kly@woXk&9cQ?N|KdD zG@5fSP^``_IydF2kgm`8SE*S;8F6%E`RP&pljXe3$m&?uBlnH@UX zsOppZn+<_yFa9jEDI?tTZ2`#?mcNP@JQ+El4Zhg*b5*Qvw`_sz`|8qwy=FAWWdL@# zdOb82?kR1N$-~1lRy{z~?={Rl+oB&>(e;cONo0?z{x_7UD9%|MesR-XK-uf`vlYdRZ%E>+hNX0R}1o+oZd0f50~k_%vSukV2`V{|SyE z?i|=a*$R1GN#ceVs`iE*r;o+lQorWNXqjr;N-mYCY=_YyXq zx%U77q7gbem1%Q^^5f;UJP;A7^Wz-hm~7YB8Q3XzZ5|MN(|V$!$dAW&9p5=dT1*yj z!-gq$plJb;h+bto(|6!x` z-)c5nJ1-?Cw5uu4mXQBDgz>8!3qO!rtEtXuZ`G*NK6y1DAi$)D*5OagA}s1Pi`AkE z0X2ZRXRzrIy!8hJKObBoUNMh0D$B)>qw0-}m{e&}ZokSPZq-ps1cP1F_eqsJPy)m0o%XTWc>K79iDOTZ> zI;}2RS;-j zgIAqErABI~R0$X|pU=489)Cw^sW4)uLRmWUIi>Ax^(1P5&aJ=|Wk%1fHu4_vY4s#dJ}D z8;i?!&4;rsS_=`DF+?DRWp}J_BG@E9P4YnTb3!^-qU;%tu~yml8Sk{=KESliZMiqD z^0gnp9D{KMc{RE0uSin06eXLW?dYE)F7H|`A->5TjFOVL{&X#gR15w;)6Xe~B?)V_5`Uh#+8J0|yh^Uf^L-z0DnM-eUuN zGoN{&aO}+b@X*E(&JM&toH4yQNY%TzjCc0?w9C<7!`E((AD(XXUa2*IM>s}51_R%5 zV3(N}w#=N5Klf5Fzahm3`9Uhtb~S6Q=2#s(Wk#FTjdvdcgfA=?xOHVfFbY+( zA>35*rLKT1%;YhK-yKA;J+|jr=P0x2MDAX<&TchG;l7Wx-t+m@4*SMCkI^Gn(L(9N zG=Bn_5*-NyrMU;v4|&jFI;P2IW;A^(b(al#j0*VWi1lp(jt zHV}oikvmMZ+ZgcE+eG%e?)G99JxqQxE%ps%+7byBO- zAwHY+^6UOTOU5>8#22LZjEiJv@Q8J1~Yr@k8)-IRw#7`u9FP+ME$P6?p9+>6x ziwlpu6o8HPuXTRHHvF1Bdr#P2_^(G z2O4Kj8Uu~cFFqChK;xORI|m+YC9bC>mL(m)3l_&2WZj*M_0sS$S~6cr&q_blO3e!G zAm_v?ovMKCpF#dw`%{Lsx&5R5@Xz;f_$(&BEFz319^m@Z|GtisT77B|i=|BZr0Z89 z`m|z->Gc-e*$WRPqq~K;`OIfZK~bunG3c7TCZ(lC1`ViVcJF0;?Q>p3ee15|tym-z z@%zDv6+bBa&g1#{RWE7uO;YFoW!zAuvb*0fpYpuLf)qV46&NwvH?>)G3u$c5r z2)Qui93u6PGHtr{#|t@JSiXK(dsnQ=jq-T^oZC{V$>esC4^;W=ywk?B+1z740eKA4 z$6T!?>76-y3}SxQ02w|@f5-i;55H+^-GlDUMEcQt-i46tE{0brcbYtm@bcV_K0pz3 z&7t-7qCJ3>Vg9I^*UcJz&h|4#5#t*VY|tXyNK1Ge(x)>KGmWt1?k1ANgO}IBx$Mj_ z;2hnyo;!0Jyid4JVmBau!#s}kwxxTTULuY^0LtV!k13h)K%Xb|EOvn11*13SqhoM2 z9Qk-(yHdp!JZAK#)%$05w4x##5?L$@f-TEtOyZEsQ~9fJ^Lu6sTT)GD{rCNBi(VHy znBl$TBNGF~g##Ieby~$*&G-NX9Rz_uXe>!$q+LL8EsjA`ZJ`kT_3Oz7<0|!$r$(V) z#NEC8eBEmlZ%2WqDT&)k04{Pf``cjFUD6Ht9Ax0*Q{+9eqgh$-1ddrszmLt zJO+nE`)z?{W6gMBfA*nhk}1R$OnoIX0#69LP8+^p040ogVR(1rZX4WIUgvMYZW{Rd z=riNdiB%u&|7-*PcPa4y_N|QxadiHn^*fYkBBLq>9{y}=s3>097_2hmzsAZ6#}J>M zoP5oXB>Cle?`-qbfn->`&0MVfLr+XDMMfS$@@e!JV?GTWq@>*P-fnZYr26xpL$F?v z;-ffqijt=PqiFgk{Lmvbjq_|B((2XrS4>E9m9*5~?!)62diogo1@pn21IMzhiv0wg zz1yUvGTt%T{*UK}YyO+t$G)V`7MR43hb}@!(--VU$+cM6pvYQeLH>BTz#9;#L1>uw8{kk!-1(?Zr*q%l_|-L2%rW>qX1nE2E`vYyR-HyU|WEgj(k} zhsFkvtj~9)-kg@4*8L*rJ1>tPL=zO?`j;ah{z;ZF1FKfkswuSfD) zNALC4k9ZY`(u1Z;mxxjKoX1|d?^HQ;{V43$X(QBVaM((&FnSDzKGs-5zix_0$QG-- zwDj4zIYrzw@gT&eCx&3HEeh3-6yI>?Xn)=w7I=J~zqpX}Kik~@b1p}4*=Sx6KBLt& z{yX-QcRQ{|lgr*SvbZz`2K=X!5x#<@1~Rwr1R-#%J@C;VNM)-e1;e$NWsj2)oSx~C zSbNF+d>j!KAzGT;L?pa!Rk)0`XrEIP`ayI(TcS2N$8?R2=<6H09NTaBhny}azwBho zK2BGXqZ&9IEvj<6r15!j?M;`2f$2y8;pX&C?F~5R^{dTly7nR7khGHDe>3%4+x%X7 z_ty_sRZr)Y~DlVuV~(LIfR)6^7+@dv!85X$+^7;#4nvH~e21e!f{MP^`!NLd*XBl|`ja zV+_Aay&2bZY5Jk8))na)I?MlM0RY5e06WyUhy^O zGKjPccfg)*bhZu%3^av1DUY|EtOf?}U*4@*)XJr7;3Aj(+6Y}<+CPfxkE^LDMi~vP z1KMPhD~W^RurD6-8; z38VDJ>SxOt}B<0-L$n#!bX!%S(TS`?bOD{i?!%_u^Nz+MU*Ay3wvC zH8k=~0i%?LV`U1|v{Q6}1I7^Zr^h|cg}CqwrmS|Z^WV`mFMU6d{v_ANz95>!zSJ)C z12u&@7c0psJcj-X4l>jT;`I-ELw?mBO4EzWvsDJ{*wPwd)#pysa}iWxxLKaWNTwJ8 z+Spzp=<`njh7;^_`ItBbm%+)$WMv-jt3EzqA1#JEsYMme2-frL?MpuB@^yQ#qFf*I z*{FG2EPe7OfHcivC=tX9>b&&kk!uai!8HD4y=XQ_(mGAks;nM0Hh8&tJ`#%Vb?E!+ z56sQ^{v0l^NuI*U8yfjs0YDLsBj0ylQEgkg@ZjZrcU-JUa|p!DpTHj#1ptRDKtyJ9 zl~QTV%*=GM>8a$k{h%FwsL|pvM``(CM*PO=Y*0!x8HkUG3f@%ZLxQUvg5n4sJQX(^ z9R+fLiPgj(Q=(CDqNC?7WMNOQkXO8OK94a8fvWCLJg^k=XJ=bfdNrG%*Vl}nQl#q; zb8iuIy`Jo{1lLrzs~h=FX5F=!ANd^JS$5crT#Pkde4y%LXUhI(O!~eL3XU{w@>+X} zF@;;4Pth(BSe(A)b@RyDvQ3|dEP5O%tzIYC5iAaX&mIH^J7CkqW>Qdg{J6Wmp5w>~ z_Ev)R={q|n6wEeX&ozfL`H!9MSGFnVUNW9ICvZ8M%A%_iy zoLii)UggLfL^YEyR8Xp{S*}=xO}-(3BhUNWVfR$Ln-homZ?WEn4_`OjvuJM*wX8?j z)=C@uY}34!{3Ci>gq-BuyL9^v_!-jM_ienCo2Ove=kS53yZ4;O`k?-seFI2{@S(_N z_VCen{eaKE;3P1zUn(id!IQ{*ZP z#0-N=dA^B)lJ%JfuklJvdc|UeH{=N(eu9uE-?<#+I<@P=X=qxDDwE^3vkIpgHB zG{a>&X+^S@Kr1UJ6OlMQQiq-U~lL=XQ`NwlWe)#h@~)#CdVmvInk&*|Iy^eOs@D)YSaDAr$KIrjVTZlIK9U0KnAhle*wC){I+)&A>Q z3NP5EiTNu{H=b6hYN!cZcnU9#f2+@9Z>c6-O^YWopw6q4GyZhvWPWv~w?6}c82$v% z7UOtcPSHsJGg8n+JbqP2gH9%hVeC=-WWXo4x@znwjOzmj5zFcS2~2f!vSu+@3rQ-=A7A5IEMeCUmEm; zJJw|?5`Eg8+fe2(8F`J*ls3^V9nYBjHaKZF$Mpt6WbY`r7Hi}UwVV|uO8&h@K$P4U zwTK^r7uGRjtG7B=9a3Yl`D5?a^)ZlEyAS{1`%+gJeXU-83lKQJ8_#_ip1}6JOWTP% zpItGN>;JZ$a&@e+rB^P(`{3k|AsSHn?n2BYroyH8l45`Hm1zu9w$#?orD_9bv)UkfMQS?F`N#LYy+oPwwx+t^zaa>Warzcy;k_&CY=|9W7z*w+o>~+6c3y{br^h(w^-CN{$DSW z60g@HB5W`Bl_Z?je$2aFOscgXErExbUL6zr7m+#D>XG>TF9n%w@@k^RG1FyW1>tPj zn5i}|wmaVd2iifO;&V~(FEu*g#f|hQlmyl8wmXmkfaYHeevXX%HD5sL)hGy}x6cLf4%6J{J}uyrQ5RFbT{r-VJ_KFY~A5U_(qwKxWZ{?LT`YNgmlx{s0JEsi9QwPfW8ZvyXq^o(XLCf;u8sYZ4frYbc#)m zH*G#x(EEJ;Ow&8qZAfonp`);Ap}T!!DpR$sf{LvbvAidgWy`TzRh%s4;0bDceOp_F zyCcZ0HH{%Z$-XdPj!5wiFGKobVTMJ338WodwrpZ_aCv`_LxuTD6a}qifb4mTvhN zP|CRvEkyl`R!C;s=+7uBh6IJTr0!4g_Mh~`bN^X-vlYRHs4atnhx7$HwljmzifKCT zR_H31V>%B8+cvNh;m((>Hgz`-fh^K$vAz6!+UCH}@bIZ8XtVp3XhWUqTpe;Y{miyMgE z+urQq^r|Q0h7F&~yS+uoP#YGNw$4k8-yyg>d*L`GKZ3;HNjE8q_0rX>IVnCIOTBc6)zTGerrNHW|MpC#E65W4NpIOay6|Ix75e=BraE#ej}sa<*+W9cVDN9 zu-}H@_4|Jg2eB}%2KAH)K|Ym3!c!RviFJ64x4*pv=dxQ$Jf(+HuL3nuQxrNXbDv_R z4wjl5r^MzejUzZCc&gFvWE%a!^Lm;cDZwt81WR2iWn54Wjt7OE&k z+PtJ72Ib481D9YNZ>2=z=RAtz-$=h6+~Wn^g+OKUv#=x@PI41hGW}s7<$@mM_}=^$ zQwme$_-qmyQ1dtaX*DQ{ygQ+;iAmCAo z93IA%meXod;UAW;$d0?gCYbsIGDzPr_^6dVCgoMsGQ6{SrdqXQ`+ zuLCg2OD;YR22`F){12u{82&d{m*gttE^_5K4K+paC~{wPb1M8RQyg!u*S~bTEqz$) z7OeW+w%WDE3e++shuV#gGCEvhJ}BUJbfFmBrBgK?2spH_yH%NUgz1As<=;Lzd>1sG z=dQzdBp3XH`EjDyo0N3640&Ab^%v?Fl<{8QKgCQLjQpWYozmk|dt}%ukBp9NO((&9^x_1@m9(IO*udTPfF4WqeT!~Gy8CfDrEHyn!zo~rrUd1Bl_b0!& ztO%{S{I;5d{y6OQ>b}Sa+y2#Pd@z`Eivch@lve32{6^o@=YU&t`W{EGKASyLi@7GG zy{Vz@L&3ds-qFDT#tv-w{qG`X8v{4oj+g(`cxVtf$i53EW6tN0I{&FM?D|W<^#qr~ z=RxMVi_zV@eRs(9kuU-oJ7YZZ`%6^)^X<{oRQu(7Tv|mD!cc1rXGe-x__4t5Eox)K zqFSn3Od8s$QUXw%xs%gSLiQ?UqAYD-1{wtptC7fcFvx}VTP4`(&E;OasIs_e;L2~X z8RZ#BWq*|?-+wi6@NWJSLZ@?ue5%?=Mb}>6iJmCHYjM_SJbtY8P-+{(4?9%?tqu%E zBlo?=M|F?h4$`l*OE5rTR0tcyj5aWgH_pCWIk@B#oYfw7xi>qY&GeJs6c@9||8q{^?~h+0+AVe>gn}u5MBk7z^6{a7Xlrk#XQIB|92}j>=J__Z zwgN$H^4FQNZ%kXi#;2?aQhQ?=G+u###fc$uZp*oBv|mRuHQ^LHCjJ2mH{n>QeGG}C z#|6buzw9XqM2A@Ao$Eft-XzXiw(r8|-`E4!Mlz4HRq2M2VO1$b#4c6-aE)&no!Zx0 zY6S@Qc=a8U;}muOQ+nB7XfF|naYWam$w(sDfDZ`X3G)x&ASB@^ zI)@Ek^ugzpQGjL~SyfUJrwdN#2k=*XYyT@8N9l*CIvJ&n;_B*}379%FokdJOH1K0$ z2w^x~xD-8ELR?&P!$Y8c8Io&jM$^uyNdXSuNmt8#LoPRDHCBt7{6xs8sN+ZapUdB2 zhK3hb829E#4#Cn^E{@VQwQ;$Uve2r>MU((13YHe9Q|6z43K4-Pk zmJ`})j=aq|8E?Wo-kPpFx!W3-z4&}ax_9}_zUoMgoV)asDdFSI+H}Lf)x?*t@5YDL zd-wdpt+~a|(l~8z792yb4d2JhK@Cwjg7KM4b}qo*m&$o=R_=C8GrwrVkJi@K-{o=R z#tEQClD=W9#@H}de-AFTU~4#C?~IE!M0{x&wAtVmKSp+khmTOtAo_xwfsAh*0U*tZ z41@>hr;F>BO@UJAEQu@Tkql9MMjAGtmK;m~-fw#H%1u;q{e!{lT}XXk<;tb z*p2&cUiY(c?KeNG-NuR61)p=eqp5M?1VhQ!CMV?**>ar5lIfJ+rH)~sr_Sa|#UOyM z8sX|gc8ERmMf%f7N~GfousFb6NyRDz2M7NJsGfr~VJ;8`S*X4J>H25hMhXo+kWubH zEfUP}T$%8hw6Sh*wR}iqNIitFOO8`n^#jld+awXUo3?g#3ZT?252s2 zwM~8)2T;|cd$9%YVYZ z_U*j#E&Zo3bMYlf*Tr7q0?6!43E{B%9XeNcmo2eDtt{gigL!PoLBob8rFHhy*BC4( zJ3a9F8~E{J+GtInjU8e!T4z0Le|Y7}wa&|Gw4N9~?V>k@E;B*Jj8sPsyD;zO?k*gb zt$gA=RzOgP09rY5!2M!+iz!z;?GDu$HQQjlFK*A2%G2*o|L_WMIe$z%w?s4y#wMwd zVE-Ze0{GEXSNI_77_Gvf2SZMH`KJFh>@Y-_`5LRs4|Qdd2oAgcDwf`1p2;&iWq}!0 z_+$I3>qz}y2_E6`jf`w=KkQD=8I5#GLBF1^A5G|X2yCGpzS))tF!lv@pm(;}n_i)8 zd|^aRYFw~)6wZeq=9q5&elmzF8uDNigB&i&9Krk6VILnKf8m=7t0qyHt>BzIx~4T6 zew5qOgtn&N-*R8^7?qWVLC9y;Ju@29qpD z3sr=1>9oaXQx?AeKz-~qgKz^EKmV{Wg&I6e3}xgyIkzvRQ?Jm89VJfmU)yZk@cjMj zHR=>58R1wha;FqaO~!5%s*9(hR+U52F( z2QiJm9d^uux15zm5%bKU9F0!J_&Q;oK6H>6Mp!^BNld;Uj1~5sqWzp*G-a$^W5Fh= zQ15o}eSY-=u>xQl$5?^Wz|B+G^)!15|6AWfkp>*(ZC@;1);?mw7$0wJ6b2?Hep;&r zjqL5kU!=&Azs_lw33N}-$YjcAzMDfl7p8Rr(@LL9lwRXamq9$*{@E&1WkoXc$NQVy zWK@00WXB0LA)95N+2xqWIy%^MtxvZz!1b!*=C2K&0C$!T^SO^j^oSi1?GeI{v>eiE zX_7mQ{{tHgo-d1=_l=%@di3d#s1FJ}NOgJ!H=KU0rs#_B>PUs$UNmNy#^_4ZRsT{& z$u;=RDLo2&09(Wt_IONVC1=<`)d?_@{?@G9EI)_T@e}8c)p?0Fhl5R*Zah(8=iNJf z-cv}s%ZBXjYNGkJmNU!mBP#N&R^N?>M)x(i&T(aE=(RB;H4;^uS3il9FXYoQ8$4K#|$G74skhnDE5<{?tN1PVD zIdxQem(Ry$Jd}Bvhaa1H=s44CEco^<7kx(|;zy-^p<|ii?>=Gxe*5RE--q<&=c_lg zDiwux^7#3<2IOClmcnLQJbAgSHHu=pF?q9@$AT!9!;wa${&FiLX6UCzUl;Y4s&je9 z@MDY{85DxCwT0xVL5SUJ#)^P!fx9${JQ-c{J=;rI2ldHHV+G4PBLK>ScW9&Y_wyg1 z&D~_J&!HlU1hz-}k18WP0)iRh3xE$r*w4&X8cTpCta3;{o+T}tQ9IDPzm#Ybf`t<% zOsc^?W98!Zf`YVPD2& z9y#nf*S}&nx(^OXkWbDClsfuQYqePQ?GvAa^OZ;-m1uCu>+DT7ma=Fk+>VR2Hs9iz z($!2cek@lP8mon-)kDSJ>*wo`IFgNC0!>6ZnOq6GbrIV2IxjG>yGSf=dR;tA5^YqyZIflvBN z$R)`z5EPTdAUn=rKf6`toNMOreZjCrV$5&Dxsv-(CwP2$JvrIx|MW&}EMH*IQDm6G zq^7?C#N*pz`Y3z_vL`=Jt%$F8g-DF34lMU|{fDB>l}4S{a(W;%O7Ogp6-%jh0qW|o z6Zs-k{T4Z%-nDkPF^uIvE0InH!9nTtp3!acZ&oY0!6tb>>t4ibX+4=1!Q5018t2dk z5lh|DK%zlE+rw)}u|$o{s-}R~edj;HyV@H8*V7D;v_7}83dt0}*3M@I4fYz*e;}Q-$>G?Av%j zI&QYA^)IReKb6lb-!TfbAcXVUd-XiC(Tn*ZKTBoPBvp|V$ud5j3FT{47Q6M7K5x6b z4}=BReOGcn;7AX^m`?=8xEC9?=>n`h+=ELLwhy4?943kLpxBX|SE4^&LCIszbT_$d zd}&bT;k%CtlHpK_&U^<&M8Hs6K{_{Btv3ejihe&W)f8fwqmGVR0wW0L!*qYYOn=8n z0mBVxteV@+MuH<1qhLwf1D@%>c;D%5pP2h-uw|`+jgZf7xa)~gxsR35oolN7;vW>M zCvnLLNIC~E*Y%*^_=TMP6-AKb=m>I{67Lk{po1Lz|CakjtWusZ8|A?M}WaW!|Y%CT6nF~;Wv>$Zbd4dBVp8P&fKVVI@AtN zZ8ZABc@X7A9#$Q(hX*z81{V;4!Q@faYkNP3)0dCpKouz+-s_AAUvtGvh-87i7mw){ zO;iytiPJ^|6hZD9c-p0Y;5KgMDGgnqA#kMxqFZ7_anpw9+7%u?8=zfP&2K52TUky8 zItZem@RUSQnyIcMv?uNs71>!l0}BJGd~yrF2bQ<3VCrNG+vDq3U#c9?y5wgfVJNk? zKsY1`!FC-a(9#EksD_Y%c1Znn<$hok4OjO93+HKk-LrUE8M^Tl@4DuyE5o#<3a2df z5=Kqb$DF=Zc_E=EG=AE3sSItwfYnZ+tG6;eihJzW)~Eh0YGy!gmi&Big&!-HU6ci( zLT}4pROC7VxbIwiMO1W4+e1Jjd`UvA2Ip_k`awoCEGNKD7-jqd`MZdnh>t@*8>EkR z9xdmh#T!(0^{H-HC5+5w%Z&mO>qBN+)3(kT>c>ODIFj7`L{_(4sUMm4OJX95Ugt$z zSQ3}K_;6#yg{sBD;P`CT@;CT3J%_?-qP*6<7@sT1U{nNmkU`2fLj6F%xYO zR4;JoUA!!0d&s&M1XK-<${&tN_hxkB&2N*tgmbzlU~QI#dhcXVEU!dKpYWMy0jKG) zas@+Agtg*b|J{4RB14T!!MJY}p6umKWTMjoNRjyBvxH(sKThcb&`?XGyt_qOUhjMf zU_etAi}zvs{AvJv4#)!Zn#6Q}aMd)%xYtnDjiaBya>M^>T2QyPiP>YcPSI)M;_nZ? z*wSV-aQ-*%O1M&V^29ggU1QWrpk4IL#OASjmz~r3c6lce;dS5ixEoq*g7^7$W(6y! z*v^H>Ck3P@2mNzqK>x_z%&l>*|^kc)bogmYXAR z+FAkg@>K1^Qd3;4Wpvj}ooVKnt2VXMg|_8bPOFm`#i!s{O{;p3A8tqm3+khl!OLSC z?COn1c=4sz{TtK!bv|peAs+ar*aWUiZ=W`RKa0ohoK`+v=)jKcyMXX>4!{|ot8PZb zE3ZG2G=L+nql8^A{?GDL6O-NmN|Yb?oodVNir<$0YCQoD+8xe53j?a=LeMrbC(h%# zYIGL$G0hWHl~*rS&>wmZazV$^{js-4GU32-oj;x9FOysgKdcSjXeuohM%&F%uI@=T z!?Yn{Pnw|mRQd0Z9RL6S5f#ACej)_THTT1w-D^vfnX6PkqD)x~!SJ2SLh=er5d(xb zf4bN$j(vm1oWoKE^JjXXvpej}7D(Y&X;_4*bXed*hxwkqt7o?_Lk&!D(i(@kuck0N z{(f4sIbL>BK4)c3?bV~g7caS%<&W~pYM-vNnR_68J#C>x=0|hUQ4@#llDC1`r*xLp zDPlBTL5jf9>2t)VKYi=>Jm1xM95(38+fVjYZk~20tm#RZZV0%}xW}+SWhZ*UyC_$!Oa@J-Z&o&-V`+7-3IX}XFa7|K+~iO zaZFK;;w}~b{=G2Ep+FHHK^1{ibEy%(xTR~p?5R!lnfxQ9MpEnMV*X{ZnavNJDkAWo z^W;&5TR%%7#kNfA1%}`^idmGyM`9 zfPLX}N1KxYvy1k5sAx|>9)#b3V0Amr+B(cP^X6fU|w)q&361e;FN&|y_mkh&VT zAmixy7!n%V35J>r?giD0MomEhtr1c4e7nQmW*8`{ZBXL5#`zijPa`>Za|tw%vNuzN zwp^;sE0?a(s}MthMD@~lfA(zWOzKDQq|N4l+ky7OXci4HQ>Lu;lYRD>^Scd=j&0D{ zAmlUMoi0t+&B7q%GrYAL&m=L$zu0y9+`VE>>*W@EyEM=RFz#62>$oIl<6BWlL>(d+ zFX+xpp|qs(fdHohnQ)2_PC;m*LicJHj?G3NZvt6*GvBZvH)$OLBBJ@)k;4)W8CeNw z#P~@vygj8zl5Wg9xkwrXGC**y+`HQIA=e;u6=_udejehmH^8qfysXxUu(7Z*NL5D5 z#Xf%Yw_B*{!o`sNob7@vmfQRT9JW`oFoX>*QY@!LHlraR%s&)cMo2vAyl+LLdf4{z znmU0*!Xouj@`5cm;YuvA5QbKx9w`_R|HH0Bfz8^fQN0lwmJ2d4^!Q@wT|eu`P>Iz8qu5T6fH3j=qc<(goQY-`PGP>T%W{btE{)>jX`An z;!CH*!2&DNoG{pb`E_Y#68PXqyoEU;4x{1TMCCGI9sfK0;dUT4QY0a_PM-qDKS^{k zJseWzw1n|XNnyy`;zWG;+?1FA8#`G?Ja>3WUFsoRlmak0fHaBPJozksa(S?) zo@G&SoGj)k$PPa?0dNUa0FN++$Zsv)r@J$X3H`(<(+F=Z?}R@@tn1mV3nD0Sveh!a)qDsU?ruALrFMIiIAsjk-dU%}Arqc~W7AS2Ly3gW8;p*Hj3WuQeF&v%(m6=`k zz#hr_%zKj7KheA+A$Ls{r$PXKgtNF0M=O|gO;SG{K3(n4`sp+}?FjlL_Q=hvb!;}5 zLRN&lHt>rQx7@f&VuGzN1%%x8g?QP3#G$vcJhUcN-1lx+i6#TgESjYT8+~!o5&TX% zY=?4E#+hKxFD=~^j5MmYh6+72v+{|}xq$yhoam8U9#mAJFIpksqkm4_NpELcp&8Wq z3x$%05pn)i5PqN%Ftk^gv~Na5HVtLc5fa6Q2s=)fR7+cLa^&O(@Z2!h2z{=wiB}rp&bA)(@SeyS&y63L||&MStSe?N)KW4YL2t6*?m zjlnybIV>G&*cKXH29J@fLobeUIKll}oZb6cPZI51kCe zTF z&{y_el=X>z(PuX8u3d|@!-h`l`6y~-Zk?p=EDl6wqR>{qQLM(c>jkiU5z_wqxbP&I`HS-UZCN(u`4|#YH zIQJ%_+$?J%Z5_B=1Uh1Am0%(LpM?jNXYrRxTYBa%)KeF^P4%$K5MkG=pC{xq$aIlL z)1iH+X<&d8t$CE*>*>3Ng- ze3AyKW&dBuC`A;K|ES$fWg6cr4L@9G23QV{IZ!rukg+HW`;Ws&v}=WEQY*`DL%a_; z3_qN7K96)0XeemdceS(z@AM;Q%dJD)YvKVkiOVcbeaI&*mE-%_ALC0vtMz*^e$+Cv z3$)_8!`%S;?F^Ue-w`6lb4Rs=g(ODgHvRvy->e;yb4sK$&+7xX?6FR3c`iqaWZ)+B zo>OG_zi5}GI?iDp7~B4T<#viG9q)AhtQ3>;t=(>DU6(zukjy#$?aPaiV10^i*&b>IqKSBFuh>a0Ga2LCpR?&@#Ep;XVdxg@n=lnrYS!T8*vAcCChD@?+2HHY_xb5-$oa6y& zV3VNvQWLKUNi>4cDm$56;4yduwu2T1$L15&T_bLgo267Ot-RsiP@GFXp0O~bV_qgT z8eVIm^Lr@$L#2*yX9E9xY|e6^E2@%vaS8leu+2(?yXQOEH@Pg?>v^K&tvh;z7OMisTf z#tAP*eoDqg=H~0=^ZB@=(^@%aOTVu0+QwGQ+Fwy0q23Es;P}8Yp?D<70f#I+{0t2YNc90sw zXq_mO{*OL{?d>8;W+tOzh2d*X32y_5>-QFm74QzhEBg=rJ20^rnqeXh4uo+X7eu>_ z$`YmI4t6d8+AY!&mPmcbqvPu#`?Du)^%7_-#a`*uD8LR3EtO1dhS$f>y*v>lsb z&8_FE3Y_>};o%|h5!g;fGV2Km;`tpa^!Q(*tm}+O3X`gwFw`3llT{lp=B5hF{*g1^ zg|rG?S0ie+Xrgv3CHwyr9;)4BO?a;?FoP*P{eTuAMn+f7e1~Z#sn?cqexK7uc>zurU==I9wchVTt=!}WH(VP zqabBVp1eA}-4Fq{P{n)~-Rpz_#HY_K$NyG-c&FX_#RLwmeZ97Qp3R$+DQzvD2y3TX zd!xsRTNxkVci3~f<_BBV41`xvloRuXoZK2&5j>``*`L&X-;_q!*7I)E(qxO8avW)( z#_h)aeb`2Pws@%eTXu&}-kofZu6lhBr_@3^x!k=8}(`FNmDbUY5f8xwx6K$|l@sRrh4(InX znEL1d4?cWHufU>h7*k{i1Ze&@=VE$=*~n^h<8J`HMp8T18jYxh{m4xp&1zuuAU|RS zyHn(Rv^454>3SxSm{gM_?Cr&2I`*+N1eog__N)y!e8|G~p}i4O_5YBc%s5XztxMvMxjGnMG2}tvCFK^&poi7}_N59C5GH z$5ERO+9GN`Ijc7@|Tv-h7Jhbkk(InS5OwYlG71H1< z>jKZQYBZ}aUt)7rl)ZjVCw@NsI|;i{wM~^uz{;keK`O3qqMc`;57&C#E!k8z#QK@Z zXC^X2L<8o~nn%IH&%U#P(B%kNkQB-{$mZB8N`Cn|YLwJ>yYe3SczT3X=+4BXA#gFev3XZ^(NP{$fy7841TR#ZgpTm zBK*e9wfx)W;WWxRbHIohV-*wf^ul-^rorgy35Z8Xaib}HXLfx*sJ@F}Q(QTLzC73A zd=GYLO>&>3KT%taDJgz{O9mAtx!y-WW9|g6TOGS%r%Mt$OGa=#0!shp1i|O6P~&~z zkJ_`&sJt_Yzr1;1ZArYh>W=3w>5>gQjh_zl@K~et42SZIKW;KAFRj%kLNzxN*@%4I z-%?f_E#R|&Fj5X9q1@0~rG%*NeZP}dNNcFMI1yAZzI?xOG@SACAq|fZC1h?F9>%!TY~Av?`TkGoEHSkme1_vHDV7tLSzQ@91K<5xTTq-%RKM6-Vyt#eu#VYxeQetUYGSewVO z%M_>WD%)(bkXGrpe}#@48c^`3tB!w>u5wd@5{p?u#=?sNzz`Q4d^}04Tep;S&(t1D z;xsP<&$nMHeNU`d6gpYp_HxTDLkj1N3?R%AKHMyc2&aTM)Qz^WOr*gzmP->gzE-sE zJ?rQU8hqHsLv`s4)^@+N$KYx6#Dpj=tjPuH0)K>b>vxByr_Z_Cy(Gy`P|p%a4<+K1 zz8SK?yjx#SP%2H1sz{EVd{f*L9gbsfh4LCr#oR)WM9C?PE~^qKVf!G6Wz>BDVoh(< zy5W8G!G}!%xLCy%6&)=TMigeT8oi&GR7-B94)&fNJU?^&@X#A0cOf&DPGf<5MXTrN zkG&UIVu$tKVzBO&Bw)jlHHc|vNsF0SK(cv~(I8CY)E6)DMyqQ5$p1ZH;ROVdU=eb_ zZ4^{RA3hrd5a|-FnA6!h*c;1iRcOE^` z`yn&gQx4O)ay?vD^+rPQCg}`iF4VDfT4y^;8%xb52Z0ez`r8Q+Zs>;u*I^kCSG~QG zkR#`~evGKC9AI8EZ|3eBiaxA+UV=O;H!>u-sjX9^nmC_5d;OmD^IMOx_l|x?R$$ls zm1hxJ?R#Wd5Uny^JUNEzlf7AlRKe~(*DdC6EqoviN&r&g&qw8>%S3UeQX zZ}m~XYz;xyZ>pnDgyTujWpgnHNVTnT` z+F_|=+4lB!&A`=>OtCq6`W|LruHuGw>BdAx9`*3-E02+o(M)K3IrsiqYh3*#(AMO7 z#$h=E^y#PM%gldQy5NBE`_lB11hp0Myj;w4({w!7REyx!LSa{a3F&-q8WR|~rZ2H{ z2$2sn=W4AZfL_udfSzb40PvhH@VwV?l?Evg|BEQmXNE%bRybtsr>Axw|4Uym*dGXd z+np%j@qTPlzQxkZ;uz5UKv(eNi&YUW=iVEjt3gsYGUlO<)OA>+>0juqCa-9>GxvP)OTd97tjpQYty+Ml3NST2O$1X|m zThSZan|;R(7Y|fbI>dGN+K<8QR%(folf%zLdA*nEgavkJWB?>KE9pu9;cx0MZYy*y zrX}jTWS-4vae-?=Oxn-##9YT`^gn>Dn-)=mt_r3Zr;j&1oCb3lv}V8e79kvBhYE3r zul$3Ew#6a=>$d#E5Nss0mezyt4F8kweOFxN;C@4E0&}`b_?i=amSJPHC@ImTRFU#W zWejaTYNR?^SPeV3wJfOHZ?iQvxAg0AK--_lu9CzxY>%YxIRW*+f3gsEY7nz$ z+EaY3&z05xj6~6{Jrij}5+w}#{$?wE4klZSSV26D5aGBdlrW1lrtxe<>MT2o7$9;W z^%oUDwPDV62ns$3w%hOwnIc=?z$!HvAO{jX(-duMn}#23a)Qy7ct4)decyY(7Eg#f zBvFk$aeSc=Q!H$iThxW8qvN1y$n`k8Gn|J^cqzzOm{7|oS0^9?Ssbhpm zWPCV_euza#I}3tBhc^d`b+!Y`GMd;r2$-7a)=6Ms1^4G&sWRL4SUNpbb7!Ai`_~Lu z`Jr*I$4BS+ldXR4J?E&zDrZWjsCX2O%MOz%nP0I&+SInUxY95RP%|L%1l1X>j1dWurJnPi@RDK1W7P zOawS2@0Oh*A<@;q%~KNnk0(}kMDm_xhau4Y<5;28@QQBG&`v+deM%YB?M~sff2CI- zu!0M}9hw22UCUQ23=9J~SJfUgJ2uPD;ad$31syHpPrI2NK_5Oyx(wRcw5+?+SFOnh!_@DZ5eY~aguH$+`?qTYq#wcHs33`Nr`F!QN-JTEf=--zv=p=PuO5Ql9nA7^* zr=KE{4T7@H^h@pm&%V93x3yekbm5pWxs1Vm~|?Nc#}sD{=@stC;f*tB~WpUq<1lIIksx;=A(oQuLV&2ho9s z^yS$q;JVWc4>nHjb`)j9<<2ZHSmnngs%lMd=?#4DM*G4;{^F?%oWSLR)01l~;UsMa`E)5RWCQf|B=2 zgtty{<(?TrgVr(zYvtxmS*-$^ERiufCZ}%emz`427oH;Bv-qZ~rP4t!hOrB0CRQpt zx$~z{vL2XvWC!nwd?f@*iE!LD(z9gxB6KP$#}V*jtUKV1IvZPeUvWshQtad;AFt3)^i~FD!@j$ugry^xxFg@xWQc__X^W(zhTG zROLXe4raIenZdyrdcs?&W@ctqVNLF?JvZ}Slsw(_oy@bVCfK%pnhnnenFVjip8RlUTi?T@=|wn~K4#m+NQX_Eczt!f@bAupB&v@k$-Kly{<{NZqTz7K6CJP zkrevu{^Y#msq2}`?Q~O?YTX79Ub*yrGZSJie%u!RO&6YH%kwzcG+-d70T&!D0q|kD zV-pfHYAzv~_XF&D!uySaot>RU3ATB7_3JvaTS7*j?JzI42o3zwYO5pbxiwq$J774l zJ{2}Y?1eKu<8R~Jr3k_|!MZvE$Gkyov+1jvTipA*;~IA>7t(zL^VWJV#L_JE)+wBq zBz3kO^rMFi$5$B63w{O?d-Fsx$AaI<5i!UQd4d{`oy@1taUbW15`>RfM~DfQ-Hp%< zg}Ze9`I-h<-QTLsz|}wCRGU|(qmbQM_kA0fCWDI#gK4p*QAV2DMyK#nW! zsAzLj;u}$=tM4o&tk~xE7e9oXd-U}W7B%RejuKiaH>k_;X>hcbTCW3{|55TyIeRy1KHlL7 zM=Hyy?aq~K2_yCM^P;@T z(?;ln?2<}ys{NLmHRCQrc;vX(Su&Kv^9GUJV`O&zd>e`_=6``Ja)lWY5Q;!Zca-1! z-2$N=wSwT%1QC;r<6&fH-1tkLbLGIe0B7Z-chWDpZENSlF_(KSwZ58zKl?iAe3Rvl zjm<*WPyqxIgaGuAn13-_{a;eumGc-QrEs(SV}X$fwiuafM_d+N2(|(q5OKot`vP z0K0A;O_2$==|+1J)U+MI+}auLm)Ll_$XMjUIG9>iyX!ZHMJSAwL(QsiTT*^C@6-Q8 zZZW^&>;I|zxkBk`04U$XN5_YIExs_DO!dwo!A5}@HZ>bsetP+(rBl}KaVH4LT%IO( zL+V{9E+P>+>gu%HRvAkBu0a}-0#tLJ1sQA1@87dMyaJJ@14TNGQ|tPk$e3P5o^Wuz zAwN9>7Jy+-rF*z)GXi&T#;5kJ9$F3mwa~}k!U9~MI>*I^B;}JOqv-zvL2lVES6Re6 zR5+cP3{EEu=2A#O@FKS9a?X5HY<%+S=-*wt1fx#Fm&Xmg$DAGyh6ZyF@Bk@2@n0JH z-N>?kw8y&qKl_Q5N#GKN#NZt?GIV2A?F*BVMdr5s1{LdMzj9bpKbeauENFaZr#?yc z(JGPmj4QEVC<(k>RC`8oDrDd;BRyW`U9Co=?@G?$Vn1A@ZtI|-5p#VAo;Zp6%CDTe zU>Lp!4+UwG`R~4Il?;iH_cb^kNvf#09ywJ7radlmA4WbMm+HlIY*e4NKJMpLd~xiy>l6S-2e8{rRbgLmgm4EJoL}f0)y~FqnhC! z4K?;W^l*EoDj8)1`gq}Icjn1%c+fb%?)}s?4Dmk6JaqXouw=jB&rrWrp1d(MJRGzC z-GSF_y^i{~Zl+ZJbaQL78r)_#!&s^P*B#z}6<<%#G%}DojiG!}x0u^`=Pn6NSF2_} zILBs|V`QBXx~O^w22*KoT*o(kok8mH|&bsJE`v-lV|n3>hQ^XpAu6>;)Kz@>|{_>rBBM*JQs+y0X z+qb`AcmfHXINQ`n`7&>BE{LwZA8wuH$VVp}no=9J?-aIgkggTlgeiVWruhWnMk8aL zr~3rKx5Jv)hqrAlsvx0=i_`#s#BrKZ|Fp%{7Ww^rl1T;A<@)UG4+J_o0|pyL7$TqB{+e0sRPl}?B39du46z`;@}G|LA~p18$e9mUHoQ8NDujyl%`wl# zRUS~s6O6@+R(H-?8~`^ z9Db?~6y-ftrl^qHDlIBz>%wBrMowhdn$PJ)Udj-f)R@HRx}VEyK+UY}+#RvJ{6DOH zFyle-M!H{*r<)>zWkkY{|Dc5 zJ>~4lIM?2<9-cU#BlJk!BAc*5u>fz(n(U)EWq#-OJ1?SFF?ZIbPdx(Ie4BK(sTPdl zF>1`(@0-0BDumZ5lFUj)m)@B|hEYycf=+VLV^+_(xK?*Yo+g2r=jD%k)0u+^y^`rf zAr*rpFfqT?F*$bB13AP6=(>N&nQE@)^D`nMN}J7u7}MAjK?b)m$H=Mh)vF@xb~}u%-BKqvu(eCGj3m0Rx%C4&jnJnV*fQ7 z!6^|+6EDYZ+{Xp!(;SJfq7Y@uSH6?E9t$qobLa z-bi>p)jI^!V%Vz=SvGbdh3dWnH820v$iY0V21%v%I{!Q8SUJ!&zQiBc(*0_fHLU#Y zV#8VXbs&B0&-m_U??@7wulj9nbHn@(+vHd1fScEgRrPxJDD40qzh`EXMwD`pclW1R z5SHC>lh}vd$$&UVdzA9wyCt~yH?Q~=)Y>P*T90~-_NI5}<8{$-7$!(y+`~g?$MI|K>J$$B6#*5bZP8}jp~Wkp)}jM|L)9q=a!;S@W+{PFHgE!KHD z&Fb^>-;3HyM@AJFbmCnAdk<|h-I;zo_BIL%L6|T;*h{s}po4=0El->~QQ_yZvQTo; z8pgAu_ex?ITk{ig*{r?$9g`t>Xj#vLL}3w;x`jPO{fQWNMk%8`)yF=f_3bkY*SYRt z_X7`Xx&g=XLqOTjz{42c-H}rl1b1(7FW8DgbOam}2 z_8GU?w1}T$1yX(j1H!r!@c7by72V+-eMi#ay#@(O;ItA`!QE`%jFxf;&{n(vQe_K= zD-~xgR->I%y!`yyR_>8CB9Ca)3=MxP2*X<{C~$S|b{7s5D12h%jgO-5clOkc-*oPz ziqJi(UzPA-@xh(@+#o8IhBK#!KOue@Uvd#~Qum>;0>CJ%Mlhp8cckP}n@$I|k24W{ z^a^6Vzbs=n6$KZk;k>jOA*J^>lJdITZdmgyXDBt^eCCH;asQhUdp-mc!qi~q;n#=U zbdh*`qkxh^T3|SO! ze5v+6X7^sB64U=U3mThscUR(ez4hBRfMo7LiYb#b;DpR9{z=~VLD*eO)&L@)t$Mx> zcT}~$XT_WkbUvxdVOF37A4i7tK48-j+~fmoF~v^KVM9b@pK2mw+Yos%vUbh*pqcCj zNNrTm?JdXR0zy1y7N^6gYU(c9~Po*AkW#anYWSFG}Sl7ld z+<(7x1}sgr`~Ug*Ne{4AWp(mJ-#u-nx8_XWZD}%ctv0oO0dF_(=H}+sM2tE!a4i^( zO#LF9&L5j^99(3{lHd-{bNAGqH*=JoALP3z04i|W^lWdf+c~^(^6qJ^|C5lQ;Q3DP zC4IR~ahM6l6Al$;=sE0wHA5g)qC6`?E0n=jHo8H_^NaH0G&quL*~D0x&swN#V%8mm zJ{>_MwrCWViBU?&zji&&mrsS5-ChNnMAy)nL*?y@GRny6l}4C$qD!h+&BqjD7_#-< z91oD2z*S>(Jpa-48{3YVcrDr(xwPi#DAS*XrvAZB{CL_bd5IesijC;S8XBOs_XvPN zj;eLR1Z!45ht=BSWBvZ>VHxWZi%oLpyibMTZy$vcaXF z_xNkHcJREAP!TG~V{^VnugV?i`u;eLfY?!UXF0>5%kkH*Yi2p5I(JTjuzNX5xVV># zFFr1o)Yj!NpWclJBL*9+@UeS>fg3YhGeDddH;e zw|YHeYs=IGZfxfQp`oEF1qLBV3N9|Ls*A!XxkI4>!{y1ekqoJMP;U72oBJQEs+O>r z!tqvXxp&a*Q}Zx7%jowDfkBiu{qP5%vW%UT!~CJ=l=|%dy;OUXb9B> z|D$g`rsri1(4W^;mzX}p|I6nSHlAruLc5jD$MW^^`>Er8jOcW;`_q(BF2cOqH(o=; zme~0DuA3b8m6^DLpASX_J%>hVONG0ywd12VHc0UP{xu#^I6L28&;&i{Q8#nkgo~SI zOrM<Ms_#@?T%|oL`0)cb%Vm5*J7H^~TchFTu^1wOn>uS#r;kTCot!yQ*McO0; zf4rpT^R?INUxpR$WI4tMrzOsd;Ggt4>|roIx)ekr!&3Adf-N2iDg&#%VdN5`(u!RK zzSFIB!%f}ok-?hOr~WOV+ddV;oQZcZpR$IFdGE*AY#Z!I(|Qh1)+#zrFRi#g`H^3n zu+@ZtCWQipBeW5?(XO4os66(7^%-S4zmd;oGUnCyet9YC=K~}JMbp!6>>mzCMo!{? z3uq-!$JCtNU5Ccoi-?FA2&$t#;H4HeehSI{_#p{xDBH|Xdz~eX$3lz!@1(=eYE*)t zn3!TO|A-r+M%;Yw%>p>L*~3_yVHrpCYJ!Xp5#vMg70{O?o>8Y~4;RI)r<>^QTZydN z{2K9#fO#3}=Pzz*zfSYKYSG4-zYx!q@vFzXXqT|Wf_dLPQu1bdK5>VJRrqCoQYhEX zEk_Y{rcPo%PCp5yGHv95kQ&}%lS!Kg-2|LOnDuCoC!>(Fldwm$5>|aIcllIC^3apb zf?pcV`T2s0@8q#hfwpg%-XdN92bfN)%C#pSGQgs9|9sFS&PSr)eFJF!qH)~r4qp?YlOPNz-U9{n!c&;_BZG4 z2U7w0)6~*ZP^k3k@S%UE3|J_e$rBg6_aw>wgTB5k__^LZ{Y;bZ8*IG~2RCKWhIb*| zK@~E1Fiowo#KbKgHLXEGU%_hOExRJF#ncJgNIVU)!AU?p;{Pza&3sio^eavX z8=qVKh|YTSIhVRUh78BM9PWv&zCIQ8J~zO1tnRU8=O007c+rN2+S`v-1l-w+)$&zz za;s@$z)gZZFMYk?bF%X^SZP@j?tOuQuIrB8(X`LQ-y#_v^JKKG0uo&$6{mr8(Cm$y z1?-jQfnGO}pGh#%#4&3s+`qOp_A zgRB6pd2{o%4uvm5uiZkz6LyTMu|4Dx+x!}acSeUD1F8Wl&Cp@iUTRpqE7ca+>({T7 zf2?oz;RYe>;z4&lu|>9G{Bv^5aQ~t5AMW=iE9l<$x~p6yg{op%K(b z2pSQiQ+ME1vljC~zLW4n)oy@l;C!b1es4u-z=0|2ZI|RN)YLMPBGxvBuatfg+8Db% zoqGfsyu0zPUodi--1$#ciI`ng=VT4t@mUpv8yq^5j2fw-D<=a$g|0 z`KlrU!WUjrj)RD&jN>!bkG3M0S(t8xeRQ-aFTV4?qQ$V_k20xug|pX zRaU_1X5m2q8%RF{k1UbCPNW0+TuM%}nn;kX;JL~2zMzNl3!SB2qLe?^@)`6{GuEUV zyVCOF!aDa4-|h_@(Wi@Xft)b>7|bwCc<%IU7`9yWdAju=bsCG|=KIo}PY;-P@TqA{ zn{D~8NqX?2cx*pX`<5km(#x4IgUdBi4ql~v>9Qa1r^zy7bANAciNV0?{-<(g$(yQa zlBoVCF3;}z!@f3O54WD@p|@HB&RT^T^{2}fJ}ibq=PQ`z#P$RQED zB|kq;_qTio2%T!bP1y$-4}|^R%xaFi?(ROL_FcvoXf7mt+Fi5Vw7IP7HWLZ%LLYAQ zs%JC@Xg@p|e1?GBIMtbmzZg#Dr8sA;GOdiE2HGJMyu9k!+h3FE>F8Maot~b$O%r+I zkioAeaV=uLJH_C1!7V^oebMF>hZPDi^j=;}s(&n-37b@OqGJ4ZV&cMicSa;~~k6h)0mA@)Ek459~6nJwe)dlo*v z@?KKb1r_aWLKyHi>aVD5Tchp}Etgq+(aZ~nU*-eXtiN*m*G#(F6PIyU5%lJAA1c~8 z({mT_!7;auB&Jzccj3%#lhBJBR7kP=y%keeJ5k|UtQm}#2Rt*J#XCRg8Y(Inuotek zw>3p%G~cKSsgqMoAE`V$Xm2pte?T#0*(xHFilw3$CARCVHcriuQ8}uZ*-8VOlQdFo zC)?b9`MA6}Olbp@qNNYRC5dG%~v3}K>gJMa|SGe2Wt zVyTxl{Pd+XG1H6gX7JGNAe&H5&K>88D=83;{nEe<*LfDYPlln)(-DpljK=kzSorgY z4I55qdqz*VSyEBa@Mpr))AOT}v0oZ`c!ZwQeRsvGb(y%Xleu0~NvW*2ywi!EF1@_7+RGBY=+>C}HUL7_N8<+Y6DdK6>fU1* zG0eNt3&tWEJx2B1;0#>1hyC@MpM7@umkAm zU;Cvn&9`X!Kc%Im{YQ=8tS9c7_02J8yZ!NHIa^6H^B72vuaRfb=*A6&QT%}yhRY_J zQjgO6lQ9^(gKp-U_yf})ncshxlWNtbZvYmFk&CrC1)c8aoVTBlX!GTZnzG%C9^XDX z(zO@2^!>-JC95I;=bld1&`TB_ir#|S_<8!Z2lcNZYFRO}I$f{p`!UYL+J*t$I7-aE zWGBrv^zQM!Jn2G0lc-2P{OT6uO?_6^FORScL{LfK3c6W;oPoE;+EhZT=DWOk9!*kn z<231i{Fpr09v8%lZ3Pk$v7^&B{0cF@^i5i^x?|QQMI7d^?LO6>2AP-v-QC(mha|bj4<@# z?7jZ#1osOYCLyan;t09_KzFO&uvwp<_@(?bG&G`OghWK6p|WX{mDAjYmXzdns}cXL2b3fE8!C70rF*s53o_iH(<9 zHr|Dsm4Hi>TqrAG=-a~@oN00Q9j&*Ej6-)H<}?sQarRMtYmsn2p8I7+^kGh9;oOt^ zBZPzdW9yeA#sjSw>F;+#V(nL&i&a)((ax_M; zt&o{KyLqvpg|QbeWgJUjHLe6R7%$qV8ZWMp%dbw>X6Nf6h>)ryO*nDCdHu2a92MxPfL0 zX}a$roa0jzaWH~gIP1`Oi)=v)Nm5s@t@==FSft(CJjzXB-QTk0=9c)Fyj(-_KJ9md* z#MbY}5dEuLDU>NZ4xbvV`(8%T`qpsq_n|kvgzQs&ri}L7l2;x6 z!un^3&Wfk8G1^vZJKLHjGQx7 z+O|o8g3TMQOjB?(dVXGo0!udG2olVlzmGcmSnq9|WjMW$z&&`ll4#Lhu`YPus1xf$rSEHY1P_c^i5 z16Q=6Qco7*gk>)^HV)Sd6hHO63C{>bK&jdk+S|?q0mCb(s{;ihqv3`HQI%Q&gZLKnc z8#l|GM2lEuJ0PuGwcqcTB%j~6QOyr%KcJp*t(s2Knd~El2sm8&yU(^@_oE^IXk1yJ z&l$I8W_OCkFYTm2F>fF)J6!~)7w!HN@QPsKcU*N)X& zB@J)i8@00Q+%Lk~SkgW!e^eZNlgT|CR_V*f%vrz& z`a(NhyjXz=WiLP5#{15!jHV>}9Tk~&qmNzt!sJ!e6)$C7b#JsAvwzX^6FmPtsUu>F^biJ8)Fp-)c z(jv(=2D2r~7gM!>W>s0cSr+8NB_E}$94+z5^K_c3IlOU!nQN}~Mjy-`H*S&=(P~Wa znl)2lhv1RSS#wCl7yCV&pMSD1&^dH19>RU2xb^mhg>uqh!z0uuGqYK&l$a6`441qc z3Nt_A9%8)6`zVdXoPs{=JJ7czjIShDXV{QRgd|8iJrf4I+uLu>it-+8?@t9)`dWyTk$ z`fw-Xh8pp`x(~Ro`$s^ujja>%m^^guCF%sxFhip7rIu=!b_q$&w-akGN_w&p9KQ-DU= zI{S9V&w1GWp;m+TfK@+B$YMwQYA4{Tb*0)m`5!CvaJVd&lyNXTp+DS6U?_MvrzU7W zsro@%`74YU4-%DPW8j1ciwb)3zoldJyx)^ZWTi$}mR)uFerFzxUQli6FJ<^MEWHTOZ8eemU#Z zB%^;Z$yRju*I@gBErefJW^A#hAkA;HB(qCiQSs+f$}zoP?4haF-!}d<0muK~+);IP zS@q|`{_4+Xs@0y$ZzX&Mo9BpK9%U$v`5u-vq%vStv&DCyt%G*A>303>h$gt3y3jig z9Ff`r} z;lP5KlwQ;PJ=^nTRclyYHLxKGZO58uK*}H%Yx*%3LE2OfHdPF67z~!9_-p(UWR4w~ zk4)*VCruT`8EWgi=UcAr0wOfYZ>7%h7;x*~tQF?ubOu^o!{GrYM|)JaujVbW=}B)X zc_z&IhW#+!OdT)HM5bVwg!W0U-Ir^^jFz2UV1NGn;SPiZAq>i2OzNwT4tQ>W-R4#d?qHdx(hj%-Z}qO3gQa% zo<{5G2`^tZ0-FjYsc;z{|$XDwfzJxHD+CW4kVr&*E zq+m2l2S$tt<@5p$t`wjbd+Ejxz3R=%;p%JCNAWcPJBkC30cFBgX~P>Rnv$GMYu++T zI~r5#dU<~?i)X-pW!fDCHbH*6bVZ6S9eeNj8RKT|+hHKqeR%pyB%qOg*b8FKyP;@S zA2|HR_>fE(Z3lLh&TJv|=LbMmoJyW=0jV5Ak(681rigJj`)=0>jX!Z_*LWxse#Oao z39rV@*+0jQy_0r$>u_DsYSnW4iNg-ZA+KOrJ%*vdpUKejzO?qNe)&I^7_ykYYVY`! z>26dB-JW>FDXcz*IS4=7OPH=>;kF4-Q}`G{Oy9=s7i1f|tV{s~oB5Gqm$m@)8Sfe3 zdI?3RqvSDPfDVx_?JMpwUmw)+RAOQ|AC{?v{pT3$DCXGOujQPF)a5|>TB0ftr(buo zyy)@xiu?ZY!I>-EFV1KD0T-q4r3Jrw%Lx%n6Z!5Fs%|ZYZ(_i->qSngxuoKj^$2#h zkbuvUU*09_3ediA3XE!`@l?0j-&{MJ-EL56`d^`zomFLC#tv@eU3L-i|7v?bLpDH` zZ9*)6Q_1>UYL~H&t7X|zbA40&lfHwhm%~HPEr^VMWfSdwWLa$`N3M&X#sJzpiR-T? z%#fBuX{O000?2y~^wilHv=_Z9AX$+rK+*;*UD!mw!?4F<|Vj?GqGE-;a-rvk(F2$Ml?=XTAUM;j_p%alsmbS%EGBUZkB$NZpjOn?Y-?jFlH zNU3x-%i7rn$fHO!XMJ)+Lk~1iT;nOqe_|#CUwwOGy{)-n#m0@nT1r+`yCC0Rhz=Ob$ z^qkP_$+ zV_csn7z5(!puH*h;zNRs>eS^LQwq=I?Pojw|9~GGYqqBzlmKhcxF2T*I_Z^dNLJ~R z`Y|hOE~gAX54hhAh`we9YOWSg$y<>>QNbC#K-7?zPpdYj7Y+L#g0T*(HQHB578-5g z54rr4KQYO{tM216iWnlnbbX4Qiy>^^uC9dG{6 z7XLaouirq2!%m5$D6(2>TQ{&LjiuRSx7UDJmxM@0*QK)>U~Uh@Vej1jz_u>pSmB-x zlnNsYOILg3m5`8-7m(l>%^@zIu<$20w+o}czWmXPXGP-hH|>u|J^rCFfNxe9OpE9J zhb-*n?&P6?rlt?ycf?PMY z-k*_e&t`$1hYi~Yr(Ao9Sq1vO-ZeJzSgh)n#AIG85j~Ce4KS%y4*nVr&tY{Z~63xYB=p}0yBKWv)_E|7^W?o+{LlL~X z{;upOPgNvvyNXug8~jHdSpH3zfSDOL-lMhG8~gwLr&ppH!yzG{pf8kYqm{yjdvJNV z#Z4Y3Ds1~|HZ|mZNqC5TZFzZlZ1I5`iH}kFksHaq`>9dOMg^K0N&N$pxDuA>x2tz` zo8UdDsM+O$I+rj!Y0*6G9Jc>_v245*$*8JCBj^!3(r(kdazF9O@N)6Dph1j&Yn6`a z3>&pQY_(a{k`Jhr8VYWl%UWV zk1yyICWap`;mtRXC!hTqiuf!e@K{!?I}@#VsU;PtD1Qiwa$4vaH{dfBbVcy0w zTka!KUn9`ZsT#d-{lz8Qq%v38UyVO7E>&Yb+UF7_9lm_NTUPWsnKHg$){aiX*_oZh zhK$UFE9cM-vWX3B*O5gopj}?f0I(_gA~TC-1eTYg#gczzVM( zNp&u$3FA6zx;Z09mQ>SVfygez+Wq;0Xu+_(z!TVR8=Mk7mh6?)}|XtNo# z>T+F=VI{(5qYu<(T@Ve*T@M@2xCxn>3Xe|_({*(GsX?WJajMiT$2Gsj%=V7JlILkSf zpqIc#eT6He;jf@5O>RldBs6$a47)PWpT(OnOf(eZFwfL*Qzd${wP9QUbO}d9`6J!8hY-@qkWNPt|((Z@mWd<{`Rnh?oat!g~NBopN~X1w+u#IOJeN6rS&>|=`oR4l$#ZmnUJB8OqmOZRpF^R(Mde z{0vGm35Em7qGkC>DnWcZdwb)9a*fESa=+89E5WZDEALo*>g4DoJ^njNsp3^qtHod?#uiw!VoZ2X~C*jUpzSfK`bN^blb=!=zsgPMr@65fg;w2p=~6Z zq2#Z@@&bm6yG3TgE$PybSRGK~zJJiP1!t;scj=JaUYZ&Bk*@U!O!bW^(7CKG73X69 zeWM&qFr1f$dvnLnYuw?;RJwaV%fMzr&VqYB3AcsHL*VLaT2pM3JSm1=Vu{g8G(YKY zK7J2mhW(`+$Tn-qb=K>%{%xCN5N7;fLBi8k3FgLq@0t&)dEaQ^i7yt`Em$L?cif~S zc_kZSyf(ro?>Lb~fDnzBrxGRT`|8^8a<*K9aLjuYeFXQ<7K`4IClUwp4sjUGK`2{H zgD^e?iZ!W8&4da1K$Yk7-|-(U;nY!e|7SCa4|ku8Q;M00vEuCW1$sLkUvE2fm!ozv zp!C;ZVEQ=u-dyT?8Gr55JBdwPwDkP!TAxgqznHM_FRh?2CR&(hB$NfSOK+kWMXL6$u$qbJWL++FRS(H0Edh zVpzObzp|?IvOOoL1D$8;*4ti85c{NEUw`WkDY?2|zJ{_A$VC#sUS75UBTckSL{X@} z_5v7W8ChA*9rTuM0JS94kyVz5GBjD{4rqYOK8SgGg*3xVh@GE8A5hmDm)d9t{plEUsax?|v15uNT#&?lL!G1#-w!F|++5YB zqcNQjVzf$dcTO|%;=xbCc@?b#S|Cp4gZn? z`W&}XAx}qF_0QT^eUSjI(G99F`g4zQiJ6j;G7NZvMIeel84CXX{as2YsLi^%nl^~Z3u z#8^F<;W}`Zvx=Jy4Xx4h7kIO;m6vD>VuAmwsVMaaFOR57y`Rev#h;0gBW9GIaqv17 zQPEfEA&&wG|+EP=Jcl46v4(vCE9^4ZDe zMTT$bLz+`xN1;wQrIM_P`xA@)?i&sIjBLsEMZ2^oKZk(f*E{^l$+KvV`Z=zhC$-fwZA!?7lDexl?i~&m4pSG>u>ncg0v#GWmh3;RU9qDwp(|?rBZ*J~# zSYWYN2DgYU)Ek1Rw~g1#s)g@)uPzIH3$%7erRsi}*t5n|Q??NVm5bBqj5Q_%`q zl?Ms9&)z#;fokWxM&m*#^J*Kc5>OZ33nrT}5fSrEIaR6Q)1?AwIsFrM!}|H2pc>~# z>6@<~Z zld4Q2S3vv_LN{w=!GCC_pnAc5p7HPg|6e_O(s-t9#S!S+LuoA54Sp&fgMTYkaVe(X z2I)swa&=cH2*{haZDSeJp{`RSjJhwZge7#pOKNNqYcmU!WMx|Z|1JRaXVJe862tR6 zJUt7`OJvyUJi}(Vnu?V$bsAIn^(`^F4|{q%)U<{Y**p_HwPHUO?AXfxt)fNpBcR&O&HhlMk|H1On~{-K9?KztOCwrQ zR3q%_(|#{D(0fJ&B+)Fmpta-VKM>GHZInaVyWR5$u;;hl+eTMQb}k`IhWL0vBMj(w ztAj~`B1wE&kwVoXyk;I1A_TTpn*tJ(K6(jQ z!ak-#DmK%|bykrprC^S$8Rab3Ja(@aUEvUkh13bIRXN%RE#fM&wc>}Zu;oo z>ubBB61h@$c;%61VUQ7uyDo`V8M*Q-V3$l9@88oU5SvKJ?=3AoZhk!)3iw!Y7cVFI z7PI}LFPM%KryS!F_JS|O0_>uXg*XNsR_#ZOgmv&p7@r$|OtPJd5IKcL*#EhIqjdTB zuBu;N836Kk7Zm}k*6(qcPqwcGWdAp(gu8fS<>w`lb7&8bHbfsM-=I6Yf>jZG3 z>u%jP!u#jGnjj;+%fE?!0iwx{S2` zg5IsxRvSpX1S@N?rH1a(Nw{r2lUJnHe>0=Nl3br%LhcK2Wy4sb{s=!C#S`ON9Zzd*1H#3C4 z##hQ&&@%t0t|Ktl)a;GvrHXd;;n9z@s z{72*mbA+OcyO?tfLrK+^!NOT1j_vI1v-~W1ZP)c+?Z+NTE|Q; zAZS&m4mTe&-u1dMxWzPP5b$2k>fXahydq9b8ndnZp5%uHjFJy z0n!Mdkej~dQ<{0ViYB}E8)Slan#si=MZtEr{`_FrLZ^SF5??xEaZBb(*KJF*jvaEg z-X!Q{nVeV*-iQFS0_g4bPuZ{2zPyO4h6>F$v;fPM$Id0Az$~j*Quf_GMvH-+V32i` zQeu#=X)b4Ru)e_^Y z?DohXOdPBf-?KiAqw(EC_;bh#sXW`9|jqo2Jw)vN93&miOW>7Y28 zOZbgRU9i2qiLS3+^lT{kFO!r0`{$OgURf`gHz8m=iQ{sr&Mp?^Hqi)Oa0M_lXW%6X@^^`io07DB~ghB5W<$g#1Wi-e%IfGmw}Ok>Oyjl5ALx)RFq|o ztG+z^>u`g4cGaO$ZLQvtsee$NXeuWJFYH zV+9LICu@J#=esw-JbO1=*CK}?rJvxxtyHUxfZE<&UnF-#v9&`ywtt^1#n3nZ+i`r^&Z&C$jhG;tESXW{hv`cCsaxxJLu#FO)?UR0Wl z0eT4!(3SIBA<2(SxBm+xLkRumtv0G?X}YbSn0#)`Uc@g+gG?=Y#lhX)>rd8>3VEr& zYFw|0I$n0V$ebFzZksoO=p;5w7}q#yq=}C1h=w!9&^Mt(;x6!SaPSud8b#}*yxbfn zzC-AYpbHDOB97i8O$nUZUQ5tOSA{&F6Uj=F9rBsn>6E1IV>)BFO|FugD}I+FmeI}f zv2@DgEFOuyFF%4TTwf7-l<%ZDb*#s;ZGR}PV8>G-+C%$GkgC*8Rc0nxd2(uf16t^R z>*SFuRlS<2r&`wa5F(w(+C=XX`sapCOcpv($wbvCg;M4vz)RQxegWuvAU1Hm>Qh%& z*TjSAtnzr^rO{(Z2-d%kt{11HzkPH$*OXk>*4E`sHVzPk7xXfM9t4tWwoi_-%SdnK zy`RD3*Zded!pyUVeF^XWC*_aK5cOid#q;>{iXZcsfN^Dkfgv9+nn}(H z?1IL5VB2~fKsMn8q5zZZrmbatOLcYwAB}#S$Yut}gG5RQuk)>*2^0Ryih9#={+TA} zzCD~~6Cbflaoca6o}mYCqCLJbz()nV`)huWF9<5RR}~D7(DMUEp}zJg8r^J|TDlCS zpEdmJ5b7l&|2A!QN!GjksFAv~0I)>H1E3WH)&&YvNlHrEZz+skL}RQznxbEtV6^4N zrQN^9yv+ZqYZX8nZciJY4*2P;&&QVqmbl^d4+dE)V%@YcB;2ADAfW}zDpCL-JSL%b zxqW)ey5^(iy%HyRDdu=$hRgtQA{A#y#drK%+a(~8sqHx~+8EGe5hDNb3+_v}`NOKI zz%7G|_I%jfL3HM!R;GCC_`Eyu7=3wRNTd61_c(4$h-108tb5r7L3$(lTiw$7qDepf zqs$1(+xqYL0p&NZIzV1GW_BnmEoh&>8Y=oc7_oZf7;-8)pWkQGF`0UN*wkLrFAwX* zI4zl((Mw{_H_%LTPU^}eq>*;B)n`rl`MoQ3fKig0dwA}v{RH8%qw!go!O_{ zO?Lst!A8yk>3|*n)XYpL!41I1w+Ms?218je)mc?Y5_)6!6aSjEeE9h#I_co2q~ZNF zp5awX6m6JK!!dWWw$m!~vR`u`J`~VVji2U^@xLFN8O>_l5PIIT&zavo%pcF{ea6@*8DHn z0e_^H#1=Mn@g&{4_KH5?wGW(m;>sF(6!m1`^f}#)PcPY1CYuj7S4B(Pjvpi;rr@8w z8=337VQo;roO7M%K-;=j@FqQQW5aTKo`pZK!GhP?-&NBOH)0Yl}`~Tyx(NuNM_t^EZ+=p(FZ!lo=>~#Bcz6KYUIYm#dSqi>#f_8R> z^xCzbWsdG&UsHU^1CBnU4C5+_2P{Lc38(HwR~JSwwxp@`F0X?NIwJo`i! z-h4jSHzqMh2<1M*b2;Ui)Bl+!r}e#8x;gpEO6=s}pWJ%>2+shULEG^*;#6=3In$X= zxsYdJL;T=|!>E$;(Q461mdHeEFm2<`ym=>yS&Gx&=DiR?5ky@h_dQI9TJTT%X~yf~ zY0|QSg*FSDNSNYw=lhaX(B~qx)%@Ne!S>_I8 zEwN*xd@FV#^41khg6bb9z3Oup0y>`!z~+pJ*xw0 z+}?pq{-u77@>2x;>?wiaLzwCt^k^MjQxX*YG&g*4(Mdpu-5kAD5+ydIxjC1eQM!t< z3e8cU!oA>od@gg<>|fw7c#M@_DdvClb-aU zX>bsT@SP3 zV~Z2>0Ag@F^*ySgz3o`}TbxjJ^aW1XW30}{jhsrD1sWkU?-(==lwDZU`C}N%lD~yo z9pJ>U-s*UI^)sI}a)h#;P#opw<9SXTK?9W-=q%7CA}(t{0l50R6t-}E>Sq<%7q*@s zITh4{6*u;T-GAW3D1_M{4NOcdf?`YOP!^tnJp|;$>?NGK?r3^r7P6f}-^G{rQFH!|QRufG*jy-i=;{1oZ zwf)-{cQo|_x-;Z+9ui2+&3gtc1pQB`2XzOyMk==!C9bum&u?x=NOH^p(@~7tY>;G8 zk+hv!ZBYrCsjRFiY-U@y1=|F1{(r3yJ+(e+qi^-7dAWil9W`?Q>~ahv<8lID?vAB9 zYe7sMVbJ>xrDWw+#e{0~=j)lTTm5TH@ju9+T_;pHl@j3V$kPZm&DQMBy$xXlobV?J zQL4fExg@ZsRASAuY)LpF;y_~!-k2PpraY?}lhRRwW=^WT7Wca>$<|5-I}O|9T4fHQ5!v5WV%G05f)Jm}M`d*~tykiFe4S$y11zookF~S> zis}!$J}J@&N{4`iQqo;gB2pIJ-Q5iWN|%JRNJ)1OCEek`P($aykTbwA@SNZMtmiMd zpT&!L0jxE!&N=hF_O`ezTm@ART?e@7P`Fl?nRMUsahcA*m$lW4#A@Z8}c@$pDik$yo44EroYJSGakNppGP%Pj#l} zW8I9#zuS%4k+fPxE$2LPjZdy8SLc4O8uh4RV5C7LB*Rw{rts|08PfDHimL{-tbi{x3I0} zXh89cV_#i-zBRb!D8RFAG_0(Vi$$y8v~B3k`vU$3>~%Y?n(CM9c4a3GMgZPIZhWo3 ztRjyj9}`nc`Ie200kgNWCk=$=5@Kmvt?Vok_?w7HWY*Fa=ch{EAitC6_)2Nh8@UUL zc$H%9o!`Un>^^z~-YIq+Y^z6sJ5O?_J@T5rzWz>6P8$zf!jz9%Z8Ht0#7Zt=av^@Z zHmjYJQkz(?(T!S#>j&g&`y_}1D2h*dt*(W*mJg@>q{WSmjbnrI>%L$$Dyck)MUn>| zDH>^br0H3&+&O)VS9L|Ws)a)x&^x8Z+vs)ldpUZOdirf{T>TohIW>9Y1A`M zM%d@FLTGY&>n|&eT*n@jLMnF&c|w+&yOiY&-75L*I(3Db?NPfOhd&i#JiU1GTacop z?X6Juh!;08YQuZgNUtO6=gGJixuJVFxC4xFep3NqB_>s^e~qTK$E&@{h9ZYs2FP*P%f)GpGAE4rwWa*bu6)=>A`Io$&1m>ZJOpz_VjfYr7C zegvW`k*#K9p&B0-u^rW`sGh-VG%wfk)AbF7#upu(;U|%=ikTMmu#Br`1a{gh<=-fg zOQgQQ^Y3(6-~|Ghv6FihV@U;SCJ(m@>gj}h2Ws2qra;l0`?6CDB+nN3iFc(5%FZ^+ z2Q!`u|-+tn;petjQu~pm|apCII|K&iNx#!S*;#`3Dp)tU{!Q zv$^Te)end=)rUL;ThBeyuV5b@H((!rojcVb0{ek9G3IiSLDtQG7WF(3M4eBh%u!h8 z-0JL5TKx%80kAxpqOzocOgV`|G{qbL4!5)`K#U}Ze|THO@q+g4^NKm3W9!Tjj=AqA z-;zC7J=LUvclxi@8;q<~5o4*PJ0=B!E~xawMJsrWGZ4-Y4p7ff*X7vMq1 zCo+n;7O?fR^g0R61X%jQa6f$bppTI&d@g;-EG>_hp$e4Cm*55lgWt7r)IUeJVpi z1Ekh0f{pql-m*J6JT-40@8Z5Nn(@O;z%RDwH`M`6eaK#vdr!_5e5OzU@5VZbn3X~q zfjvD4VoT}fu#6XnC;{HRLZ#@`A6Yi;2Bp!Z55qQf!V2)|l(N<~r@c?svB%0nRG!+RQi~^T@%xO!vb?7wC?-!~{d|#o^ z|8Hvz0qpop6CRh4ef>U6nx}hZm>C#=4|ic&ULw?Zu4E9=)1;ag)P;M))qVt|O_!I# zs-+D}83P{$0gbOYL35QaUrey2V>C+sBoNUB;;ziAaffyWo`U|opS^?@U2zHhA?eiA z`wpKI9V85LQTq;>WyVo(jDSyfWENea-D1Uc15AtN$v4=wA2Dsj(|6|0#ZN+pb851^C;t4Z+x$m~Fs9)rd6F^V79Y5PE0+p}MERDt@FzLRfg& z_rqg;$&?SGnZA*Fi6RT^- zAX)?Pe0POUN=R5yA^Jk5MJ{9KN;O-MS8D-qJ*I#{uAtrIaY7Ich6y&<3|6TNFBeA) zSQONlVlWcY(vl>=-S<}Ak~jz-cyjjK#Vi@ZTf!gQ$)rl+>9O@Enl?Nk5Uq1ZWZ(kR zp(!0>T@yJBU>teXsza9~hg@cwOTs0QdDX?Wka?rxL*EqU^-Q~Lb%M!+^dSsQ@ud9SYCg_TtI zaZ!^&-2Ja-VRh7`iog8iUm1!05TeAeoX7cWcuh@B+ARnbiIbp*c0BCi@Y81)Nlm|) zyg@#TuN2>mWases$oi+QxIb{mK8x+*JS+T8K}^O3yBw*`pz3olZ4vSc4(laqa?%*n z5JLU^Ov`Z_p#!$>+~DbQPW`H3o_yQUN7Z}OgV)OeU+q{}vx*#~hV!iQwT}bNBf0;q zqeq%A#!KHGVPC+Oq4&*!zwb$}xl}ybE+!=>;I}&6x1WVb`;lFA{Gra4E3G4cVl(ZV zWdJsvJyOe71Ve+@Q_)LtU%@_sUMT3v(0=?IExR+__PSUjZwJd)*J>qysyURSo-!Knt)*24ycqNo3!FtwQ@&9{aR7I9%sM@SncSQqXOdNY2A!Q1egus8ucIR_ z{2K>FE$FMsBr#E)7DM*iy8Sz?1b=mUG@>)buQ5f*RaB0>fL@TJ`$oS z<>-Wg@>$wthI6nkL%zAw<)A{;SH$#lJP4)CAx~pn))(^Z!gle5oH6XbqF+}DZv7EE zFujcnwRi6vL6KuK7MM5F_%MsQWjDlP<7!JHeYi9UG!yW5NPK7&ZN$kEg$hi$HFL>} zzo>Tu%oL|Pr<j+;drC2sM~C60J*tK>LePX z%avpjX+HINS?c`uTY@>*WRHJZlKNY0tPY6lDaEK`{Ktm)L{*3C2>!%^*i+uhhQWTJ z3;xCplW!Lb9~@R>H{}t}^hasMJog_r`F&nfI!?$%^9y&Xy%B`Ip#!~^B88TJjBn1b zu+A?H=updemDchQapH#<`}3LW6Q$o(CR>+agv9-)YhD|h-9y)9T^ownt}JZN)ZAQ^ zPAYJjE46^-+cEJ4Z{YwIMCwN56_IfrkDL$fJzb!R&@=Ph9y-YmXIHo*>)Ff^EZ`eE zy{D2%^3i&t;))m|auV?m(($1oKMYDtX z-?Ns}+QjM^q)>v>+Nl|$SoFiVLu{uv^V`Z3`h|nM-0Nd`sDyhF_!a$35IelM0r#hv z^*A-Q`8qQ^Y_dm%6^dnxOrQMKuto47i3qzE)cpCo&CxRsCU~aC#mg%a5`TJxc3S|H zfF*!6^g>j00b&0)e877Fz;EgHU`Xw34#cW!fPj+JvIVB7Zi>y7!jE5>0)RMk{qDQ^(WNL1u-CV2X|pvz*uEZ$d37UA{XL5Jm~ z+gA%FqW-fqhKi%mZQJq7sgV1N^Hq58!d(b!u?dKY5&Qq=mvm?t)kq)t=$lz=&5Oi+ z8KQOFR$$&DEV}>#6S`W7Cjt7NtA0J9VY^9LIXN#!RI^fkH?c*}{?@8yH~UVg{EVJK z-qN+*@q-xTH<_&miOPw`PutkvJT_Cp3n#5@yDfxNk7I&Ia>UAvP_t}UzYJw|A)RA% z&W|xkVssdzCrPR0_v z-;8Rj3+x_Bs7vS?luqXap7uqqsY@kX2n?>jNa)WZXY~o!d2;!rCo9GDbx>6tt@Inp z7158@JU=<-sGh0&?&-)eJHsAYSU}kz!`gxOEQkVAM%l6=bHfO?aM7?DyojWdrF>EnxLAJTom16 zx=WgWFAp53%RQ=9vC(<9)pW)3sfnV(IkR&8KOLv!BFq~b74`}+r{l>2?Zd*1vU`ls zx2w<5LN|erowf9X+N1&FD2+g1EfI03`K4pp#9p$__)#J28&w2#Picls6C9V; zXWO)E{uASmSL%O)Yu{6RgNt+j^Pj|Pu=V=~0`iV>487Fr%oteD0Ir}ZVrOS3T`L_! znBgT(Uf2T5B2E|)Pc5?(F5%n4K&qy#e#3ypX)#oX>H6^LUh*(dy_`yUy#>=llQac= ziBP+LGDWj4I>ptks`Za>v^%P0V;LBfgmGFG<)pDLA`=X*wTa)km1prq%CbElV7hk| zcV!~Ng?=R47xjG{o>ylvh^I*?OZSKGq7}X2_QU50nvYZXqKT*%!>95N1teLl3eG#R zg{Gq&Narz98V!8c!KIj|(zKVIq=mY3W(V90lo*GYp%FZeiN zg_3oquJgnbG~VzmMR_UXK7lc4yD}F97)e=d7p;gFsM2+UYGJQiC2_Ub}$(3 z>Q_ZS+oik%qTR_p=Ww)Q!4OeDoe<_5Qgiqj5wo|A;hlufpD5ZyTwlaXDBlf8$&Q>IE%cI^GJTF4S ztn&etFfsJ+%y6zqx@qGk+5Q4j3Bx-QE^a@net3ZeewcpV~MWY@V{ zr|Vb4g+{Lahu~1*#az<8i{630NJ2IhFP44z#q8Q(6uBO?Y1cYKGLA3+n6bN(Gni6! z#!Vt?k|gL9SLHFBO|m2ogk!C7)Y)j8$|^i~!*tniZdwkcG-|!(_d_li2dXfg)lJc+ z>MdSt$9kSYq$ehe6^s5WmHF-t9j4Tigq}~Jo>J*D-m`TI9nku`cPe=!zfEdjq~o)g5~%w@Wwk=+@H*&#hRBq4umy8! z>=v(UTM{2?()^F^T4R?|=!asAbNp8w8Q1mD`G5bKu1bT>rJ#z_ljQywRn*6hJSwGs z@}x&Vb*?zQ3XIbJx(iUk5J#7CsTbXJE{XICet|YFcE`IOjT@@*qAp6&4BJq?F+tvC z{pONv5#T_r|7e?*$KM9+^lkPDLd4pE#@a&sjT2w8og8Td?vfJL+iluuB1^iVgeY4) zq5ct}>s-HmHKcjy4MtTazeN;8o3-NkOX2Ta*9b{{M!)SRTWui#1fmtecjjz+&kITLkMg|0mP&tz2AHAA?n3BV;LVdu$L+{|6_Ou- z?(ymdOwQwbF>m&nd;zz%5tc#ke@Z3ir3}!J0ZxC1}Xma;VPe*j> zX#LJQLC~e@%kpK?#J8n{vMLEgFV#Pe=b!MFhmAg0|Cz$&jr<4OiMyJ4c+(tZ@3%Nh za;B(}NBc+N{PVN=^Qr4VN26L<5^y65sY6|G{t3;?w~(=n{nP1Cp_!K%=Dd|9q7-UIFAUE7$YC2kGAXD|T1d zT69iL6NNH`GMLje)fZCc2ARhOdp9KPtC^)Ta)OqFefR)+14N|7^yE%Ww-j+A#R*vL z9OM5~NLU~JD`)>#c&eWN*}xS2C2PysS;6KMW!7a*ECgjTDy?PhhyN~Yo(WVD;fB6s z;#+=R83wwffAomx6WZAOmt|RqrgHVt6U&73?f2^Ud4*n&yuxSDrileq90^hT!}!H) zkESV{wy?kEM;l;Iiqzm0df3E+=&HW72Wbb%ym7L8G2z(>f%flL-THkElzwx$a1%rw zFZ7f89QAl+$XcRYDAg-gcp^~t=R))JnQL|ikHrkzy6!Q4xpZJ9O~Sj0!lGU5aHlP^ ztI|IogDd%_l|d+g0-Gfp0y^08fi0S$Xf3}a8zv1gm#S%KIAf-C6fVdiqT-1C=H>&RIcb_59?ogj?=RFwd{XuV!zd9OSXd@?Mh5Xu)gjLbz{R7pNOFRgI% zwxYL)HU&x9XM|QhTYX>4xRevOdSj$5DO>3(O^ogfCZgezqw7Whv0R|+CIfKy-o|?; zo{Vn@rPzZa=v+EyQbI3y-;xtf42V20bJ;b(40m?~f4&^vr`5B;Si%s&uAUG!YJ1cG zHj9XY#WqF2^WZrbRnPL`^Rn-mRsK{~3T1PEE~;TV4pRwf9)JDiM3;Z%&%mYSyS>a! z8|VMD>@4FCu|i+9PXPZtT_=Rpgts&$p2D(*i-QF1r66W*T!Z8Q@7N56C;xa$fd=~` z$->mvBkKafaV083>@KHRp47Ryf)+a&xVah5m5_$0!UQymYF`e3kR8}0{Be%*rQWxt zpLl#=M{*z~`{cef=r;2P`=P%*7X3toZQry|_%xu?2mEiW-QUwy^lqk;kR{pSh7N;{ z0bm5YK37*TDG*)c6&4X$@^duwUry&(3|U&o4GfKb-UAP(B0zfwK5p7lDk#2_7NWi% zIOCru$&sdN#UlNy5LSa}NJno(sM#M-Sd*1SE34w?xz97zFWWzZpQp0Suq-EW&2*X3 zZKH7tDwsQ2JrB;!CEv1nKOYx;RMb{$tez*OXFZkY1bwHf`n}SiWfHsw9>h)j>VgqS zcSm=RHSOW(Lci|9$USYo^$$ymZs^o)n)_NfaEzgbva%3DWpFJ#R1q17Nl(0|$1Fkr zYaqeLV{d(5av$hDy)XyVLS*d9d+{qot! zS>nPWYgyjV$RXP$3@y@w?DaAD^2Hk8`@8hh^_a~B2@jV~IxB%H>DJ$8%O7VPg2Wxdd>jwl7 z8*(DfsA!lR&b$N8a(qT6+I;t`Wci@j+rB)dTZ+TSTf_*iH)CKEAM6t2!NOP!0i5IN zrr}WCGgk^tDeb-;_RitwiQ0Tt$rG-zjY=!vntUP5W=-xM?D19rF0ju))iL7?Ybfr9rnd)#C6eBBG6Nt)CN=P+G z^An}nmKoe)znp8;Ya)fu7Q*xPhEjYeZopYWMeb3i7F9j5BllZl-g+*Lap`mTdG$>piH_MDt36kBfbq z{rjU_q5WfAeOW73GbZIG8}Da;ZnCZ1C;Q#G z&GC0()6uxfm5z`Un&MAU5r32qhq&6Z4V&$9TUkvEA5@K$LVkJN7~ z(MYhOv}6~`drd`CvutkmAB7iZ;&W(nG`7CdA0%={y4ky6K9AX82lsfvlE0;TCzk>WiXp!70PMn=NmG zRjnxRmTRG6b+lWG=!_tDqITzit9OwdH{k~7O|J_={5e**`oyBqgTtI(yp!+x7{w4U zy?zNk)D1-Eo8tp8Un*z)UJa;p%+lYnzANgo*5bCnxu)KJbRcM%|2p8ZF@ad)QZz2V z@|k9R9FHV5i;C$8S8=E4r3X-_CT7s;Y8Iy;WtmxMxjzNj8ZhRwRH!xS^7qQov2wB0 z+x^sWmHRwZ5HTnAIsu=C^h8W*ng3KNV0ppF+@Rm^y}hlCof?#IPlB3mP`Y>g3a7%u z$SuTG46m^H(^IrT9373ruZ+aD-@&=nt*D>Yezv-tK1IzVy)S{bOYP{(Cmc{G&n_UiMno zeD>zu;Cyp`}-3=>R`v}DpOxp?Ep>gy5(Dk{{L zALY_CU_?+fGRy^IfAWUu>&Xn-=J4&UFdUtY=gwAlxZ$)jU=BVXb_N(KG0;nZDao+2 z=N!WOBj5W{5_+SN!_mEyZt#vHbrxKdO4@dFkAl0PvdA_pUqZ1Rlz_4Q> z`G_9P;PX@%kUdS1P&!i8X>J|AG4VerhKy$k5>CBJuNqg{kry3P<;YD#BSRj1w4d%t zVkLyKu0Iz0-@LrmeUdpbq1GjOP6Ae;e=`+n9`6!@TGsB}2RK&LqzS}@LrkYdK$Y9F zc<4yjxbLDQ{pCHuI|puI=QQ&|dbMcE3lc|?R#Pv_Q1_bq{=5wVYLakw$U?vdORcY1 z_Y@Cf8X@LZ*s!Z>E;ek{cRIr-I{alCkGXd90Hzkn2N3nsNHg&}b}Jz-xuq-ZXn324 z_o;SKAKNr*z4ivVEpLRf-~MEOKO5gAhVW0#{^C>4XF*n1gN_p^87SV8U~z-<@k7_- z?IGda&6y84-m4a+u%3Rz7)Zo^$~5A`j_XSy%Hm4NNT17M*MlI|UHFFkUW*8>)w|9H z*K+s9jn%ID+a||>i=+B(=fH|&N9l>@Z%jK1aC{S8<)x?+;GN4lTgXT8-q$2yk9HEm z+}n_djT9Gds^ONUz{_3^Nc6@V4?uE8Rv{ZET)xJhh3^EU2Y9%4x1AmP`d!l4b6e2V+frtrH}@!k7M^7m=k&r$B*dEONlw693KQc->S zTX*Nv2QA^JJN@q6ZhX1GWg$d?X$iva^R?*4MoucnS&!G*h_J*-dP6zJgK!{;u}rl5 zA*ky)&g`!HLz9LK)F2ICjX#e;i+ND9K%A(|UC+?B`1M1(c0$ajw8riuY!C%f>8E^u zj;m)gN*g&5`LE61AdXBPBwiKsYL5K;NS+4D4Y|L804Pa{A93?3T%(=V=61f+ipu=F+5fbtLrW%J5;Qa-GVkNB#|{A*ApF{g#`=irm+g} zrWqk;R~(V6B*We-ZZ#r5t{d{rjKa?rHvyX<0dsVuKwOLid8M@Catq1XiDYk$@OM|Y zyWNQzput&mM?RFWwYBvCh>rSwnyg4Ui~l7>841#Tc^%17{J<&JOqIO4|E%E$wAWpH2S1EvYD&3rMJVf{1_?wq0XcPvmpi6l2-?$QQWkkxcdSrh+=ebfBl z-fGA>?&hZYIL0LF;?Swz-)?)R8uz}|$^VCs3k9zhOHelp? zkcUxg=ytK=<^IbiMJBDB?gzAseBtfh541?iOAp--Cn&H%jWr?V8rjovMvB|-PuzlG zsfn_O#qv*HUs(NAD2lftIW8*5G4!xu+8ZxaQaX`ud!6RJs*Yp{CHLaJ;;e7nqh7-2 zwKa35r#Tzp$S0z@>U{RBNkN-(Ew1^u(c52~!GNp8El@td7eK;$RhdiOeqOqpcWznr zZjGBZXy5R?C4yFt?3* zea8-7uZk#K0*>yhDwhGc-A3Ot2vpX}<#Wvk6vOQxcbvBOg`cTI^9C$@#EMA#dlhq%yw6v$T=!B7QZd9r8g@)ZoiCChyIvf5`0NKhaFVzBxK9 zY{$%7G-*5+tG~YHdndI=RqePdpBFy#vxJ;6%xJi0(NZNWj!oFARI%l>uFi)53NZgX z95`uQP;bm?H4*kl!)XV(O-QJ|u_tJm>sy%8odnm8h?u`)o4~)&Q)4iVlsGq51NU4SEgM1Ho+< zntN=ukEhcGHQhG9a}0`HS9hGmc(90Qw6q?y_$GX(;24bkLft6c+5RCkb+7?>5F*x4Li;=qpXV}j%hkHS5(@L5&7M5W&63cD#(di(u}L~&wQO} zRV3+MZLsqDZHs(^mwgjA@vOD~zL<e~CGz z`$AarBM}Mo&!#fVYRtPAcsEv5rESy}Qy*?CT&($c1AwrtzDS5uv-JU2Zm{A5`qks< z1dlYKqtgxw z9+=dH-VJ~(hXjc(wcIZq1y@W>(U5@#)agW`+fp_0E<0B9GS%FM;^{IN{I-+bCUX5u zd2f~*?LOKu#`_5kf-42s1w#~I7^4L4Q#9OsIP2tO}S98& z)bd_vED9pLYtLq(uIXJ+27rK1%WJiF?lpN!q^uwtTCB1E#&f0I3Ph0y7N7O=Jj6Vr zm}de9R7FM?Gs=Ho822I^eG^pTSUFIuLiw(17xH)yH7=N@-~hQ~=8F=1Ff4eF_Wme| zW%?d%UGtJE-62RhEvV$I(p;?Q`bW*BaZgo~0oY2n+luK+De*D(QR{4U7%$Oba3j;@ z2e3V$1$0-_fo;}Ejt6&ZOHf~?qi0SCdnMzu&_TNyb{vbOZ-Ty>m*?9nJT5h^$BVqy z=d1dpQeIk__(4YxX$i&ua!hm_16G3uqmEmH-}wqI)1Y#y+*y65z0G_8gPU!#UlVEi zo+W7scRjB&IHH%1hK9>eFW7Z3l*v7|X;}Cgas>G%HMfj}(_3-wuDldIPqXA4<-RdY zgU)woqb5Y(&}y#)N)F%N2KO+dHPT4aI{(n*CAaFkEd1;MulCL&tkUv9gn<%GU*6=_ zZG}-8`!Z)s`Z#|a#0CNr>ep+CNpC_*2IXPf@^MOZVNfY?228nQ)$w92AiJ-np2biq z1h!XSqMi;@4xrx=wrrV33^uoFCiEvd{}L6cBDLtfDt1cr!4Fs^l{)RQEf;On0jv^} zUn+HWXrRFAK% z`RbIqY=K1o8rRY(uz?=*ky}0Zgj#W?zeCc8X|T!}yp@c%I(a_j)bB`tHo%p#Tn3%D zyB(AwAobG_U~p&H=}Rd^SS;0_WrN8%rk-QO#IO+C78|V4-91p;0sCf@ZlDDav)9I- zr0(M548{`EGNzx{GGNUMdoC9;y-D|1>5g7o1`5>`$Mg!nBvw4SO}j+KJrnO9zmrY7 zVahx}R`dJ->2uSzIcvQAV4t0fGad_)iLjALvr#s@inHHOV-?(Zz z>!0q}HIhBt!yg!tuF@!2L%j9I0ezSu4v2Qr1YU<{V}wj_xLfh*m0_ARS4My6ouZvV z?3*0S3Fl;MN4)pUt<<|v6dMZulxedhgTSwxKpsBx6J4eUuZn-1xRrFCe5dSFPy=9Z zYx$zxwpEDlZ*4}BxHvTPa<0CjSdtQF?0P!|k3@4eir^)(zOcHX&7Uxvmv|??cuGml zou27sG#L%f{IoHP&k*OE2>Ev#JDzQu7vH3T0M#avGf-8|)l-h@hF!e^n-%De_WqQK z0!^PJS~x`o7L2bpj-B46#Uj71a_kG4PlST9kOP7v0yVEc5&KNmYI0OxJsLFV2(~g(v)pyz*{7 zgF+?(#(28>cm|9{>_bR|ykhaJ*5saw`h5`?zY!oAnng?pm*xDn(IRY}{(mfhNos{I zs}oE@nMRIQRh5okQk5O)XIR~4$dT!4`za!)T%vBJj&ywl^$+beowjI#osPXOJ773L zO||@`joYou#QudY<@4AACZyGPjH|q$zkm~r{tgmsVM*<&z}!!^#@B&!gDag3Gio>| z41kWBE($vCP)%}lGI_EElUY)3Q(9)0aj_5ce#v->T1zrmBe8k*m}%c%a0}mag~5H8 zx$Zbe&_-j(Gv#eba^RcnggE9`AWpMZ9`)7ooN$x#C~)~m_waLrX}F+wL5SHy-8Kc{ z+iZ7FOLMy0;LFk+a?hxQ$zaqnG~F81@HoQz6mo>exL;x67@rgEoGa`A{@ay2Y~rk+ zh+)&X*;-p;gm$<6xOEfnn!uVsikftHWZDbt%c?%^H-1B+uCH#YSyvn)Pb3_DHZAa@0RsQCd~Q+G3-H>r<7tIo1uNu;+MLYCvrZpB ze!UR5n`JYIz(cz>N=FQ6xwN%}iPr+9n=eP3t^7q0?{d7rdS@%+0G~;Z;3mrj^X97k zs5*A<Lao8i*?jJ)8!#J+sKAb!qo-w8~_6d9g&U*1$@Ls57Hh4*0}(oN&(*d))9OlhzV z?xUi_0KSQHY@aR{qT-K0)tL#H0vK~4<5TjkBw8S9-mLy#)7G5XKvUT(L(VRX<|D?9 zH^Z*-ft}pJ%LQ*a4WHkgsmS+g)*5C`M(!CdjVXb!KfAt8J9FL!Dg)vfTBf}5-x>Kl zrjqvHzZU5a?<zywmNl1c4(WJSttXgE@yC6U zTPAB}9lmGR-eRIk6)7OaCnM5JerY)y<1JZs1Jm;`d`D&$R zr4n>NZT=&x22RU9s6$)Y?$$6J3_g-S1&GVQ2OvwRVT%W~3#`$hwI^uVRoj!=#&%r3 zO$aRKjCv7AN<-yLvPEnuDhga5NlI)96dW4k_kdC&Itrkmf*u!qdKi+uck8sIV|$30 zfYp!jLV$WM>L0JxyqBH2&fR}RTRJ~%#_}alkx%4Fca#Wyt{*41?)=(UsKOK^6mWY` z>aiu(&_O0A4+ezZ27s2w7wA!gqtw}TL|*yvHKip__!y3E{`4Z>)x*|9>wc4udN_af zO5D-rk|L8**p`Z!5f;i#HzU;E2smXX3~R{TY{Pc5T@o_vy#N(gpE>lyVk~bv=d1B5 zD~3ov>@>YYEQ+#~%73O>o+HIkN-du-b{VmZAIX}6Z1MC2qKJ9<8JlU zrc@f45HdU!vzz@51F{;4F&TT4x!KYWcNa#5rUXjG1}@UvlhHGi1Aeuj8@}D4WyCZ~6TaN0vd165(FM&%{h{L;+kR`U*o)eZq9cK(cLYc1US7t z>f%od5{lAv)A@;^KtZ9acu88*T(^fddra?zW7h5>slMs!jAW?^G> z{I8%}LtfH|Srb=$@)%_ZYcC3$bfA#9?vd3g=h9y8mwH2MWvP*15mKLp1PrgZF7D1E z>~IzpaBb`RXav1l7guUwaIXJhIRseoCG$5seLDGuD(e%Atb5mJR#|@~(oZnNfp*X- z%$ISz1DOT6SaA05-rs++cv>YMbdFD@6eyzHtIiZ-)=g&N^t1-*e^kXo=a6yGMf{`w zIq7lt!#(j!vSQg6JXA(*XU{AEEV_r_{Ku>4%jEdX`=+_1%rOmH$qjicFMNXFL8bIr zk^a;lO!ljn(7$0S{^)eCmIh7ByS^NX40e(i$dA-ZnGCzidgJd;c@J z>`l4&nsA=K&Ipo4u6RIL6Qw?cgh?r>Jy|z@vrWEj$a@eB?30%L#hnG25^hA(PFPF- zV=+SjUu1SxQ2F^UzMT|IUS*5wSaEjnSK1$32547F*!7NMOIN>=FKmGrRSwaa02v{q zgYPytAS%7}L&?(rTtN5UumA%i_9^HSTMn#w$XXC<7iwPoW9{cf(G@jWk0ErQiMg@x zcrp7^#(?M%uF*NS<-)tJiwdcaHRIf)p#G_qhwGt-$TJh&76JrZTumOI#D`P9jgX)?eOY2}!C z^caQt&sk+uk8}wRYG7)FG&XhFNZ*!S;fX@Q(eP+NCV3KaE0R8Sr^i}Mx^S!NAAV*C zB%e{cP`0Rxu>oJ_rjMSAsd3yD7H7KKckV6o6@hW-I-Ag|Anv1i;4tWK=%ba>`!b_&>aVbCiRz=tsDf7=biX^|iza7_O zv$4xCeMG5Ne~j&3?mb+uVNGDkeM#bdh#XDrpRsvJr;V0g8B~hYD^oD=lBP1`1Hw6_ z{8B0+mxR!PzyCKL>wb@EytS@a#A3I`a*MJB@{^uV@fA%6@^Y@$nhQ;(pC3lz<(G0> z)g0EYVpO!Is{FC5;h4~_tb4v+|L_->Ci$SYvgkDX?oqd@LA~>8J8+h?a_feh0${%( z<1gUUT7c)6Na;u2&q%$bw=Km^R`1JL_se( z)$*lm;JK1WX?*dD7I%eCTH$me1 z@x3wPVvYYq=G|YJUI$2wNHP4VD5ECYkH#;nKHq;|9Hjbh)M zu%GipwUO-#BstL#Hr&UqjJ3CW3jemV=w`6Az7^*_e?%#|)0f0_^m4Z4DhKthI6SY`*16=Y+$H`}PbfV62nT_?_3jFXj@h(u1gjo&AZ6Bn8;wmZ{ zeoY8lz(0TP&_ltIfFFPc|WRBj0O4L0I;&eS~$R{p4^{guZ zC6>BYv0woFrLx~W1vib%IMR%7J8er?1sdo5AOF2~O=2E-wzMLIjTX+g&^6GKi+!zYkc(B&h3UAd+m&YTr$e0&ddZap8E1>j>L$^EL<)%CvZ5wB`?~#SHnM?*j z2eFyBB7U2lt10*9x9?09Z5!2Ks@xin@RWC&?@;tr#+fgCJEoNiybY?Yt;cX4bP@Qg zz;43#E%quevGRn>Dw-w&S9${+Bl8Cm-%RwZFP(ZT$ zRTwPq{yDGMQtan1hNvx%(9aX{btduX)&DNvBYqT~TRNc@p<% z1ju^_4DCUwrwmq`n)qcy+C5qZRw*gEnN} zqQw3A-^2F5@BY7+Fl&~cyIG*XiuQ-cDlleDjQhXc_F8cpvQnXUQ~bZ%vo4zVr12?d zG=kQO#ViXZAwkt|MmzV=gQB2hz}wB+0a#6bnU8gfO>DXy+yLmND_BXk^C-~%Jy+={ zolo*Sv~N<4x9!ENu%6>J>Hg48l-z)S?*Bad#<}qZg#)T>_V>r49;cNp zR1j}NtXM2ROIt8r9b%# z2B;o3hVPKDhAC@O**n*vr@i+>A$KZwLE90`M0zMJ2b8_qo06foFk47C73 zrZPPv&c7m7P0`NBjw_4x?+2IKAMcmgH+7&fl1?66JD**sZw%D@?=C6Q`SPyQH`A>u z&9`Q|UHx7JVWUo43nE=N%~W-^+2gK764Z-cZ>L;L$;vADiDWz@GqECjR%09}6^wi? zm%Ab0vzrdV8^!gUl13Uf`<`uzr85kt0@y5`QBWMs1uqTl+qJxAHyqoDwo~)IulR1& zhk$YyoAF3A&tmVx>?CW$h1B@P>vX198GL6jLy7(+GPvjc-OYx;VQKUwb+w1duZQ~o zxvg?lLWAWgZxZUBev(oHKJCA=hP;dIbCf#z5;)eMyT`ZrGMFb#RO_WNtuq>|&Ujur zA2pIYSia3Mu5N`x9c`{yWgs>4&Mf95VU?(cao`wTS@xv}sdVY}zdlFb!^w+<(J?MO zI|o&hG?B#o^U8ehNI$N@s!Frx*n+`EP4=HV8^M#g6^_3|n2y+U(9Aj6(}7Pf`0G#g z;Lir)cUtQHHbk{i?YgxVyiZs2&8o4^!LnKl;iOw*y||6rT0H96iH)Jz;NJF%k;k2axrv$jNqHqAAM{zg%)gynPRuXg=1{QNqDq<&-+DIH zM?8#V60~hrwor(}2%<4UtwaPN{pgqV!{Wmj_EpgVt(F2$JB2rrK>#qey5$P$n;MZP zn|Xg}U%NVKN%Uaug{g7^M}ge8q}8YmIpM9wVplU+yOzfrwC-g4aR=n4bW!W!98^5h z2Q`579q5W?V?5le?)o^bc3KUHV>h7X&Ag*ePz|~5tN~TbOj1bBT@Pw|bN5u=#ky+U z^oqeOeNb+t1%eJw=Eqjay9qSGad!$URclLLcNhoiV;7DdB{G!N zt2ee%1MN>=9UB_;G^40~=?wcvT^3(x@*ru0bub`MnK}^_izwNwT5ld}Ft)59^u@brX`k`$Izk6-#ghbt2 za%jDWIyT6$^quC9PC_j-`tm0MqjC$jsXmWDPSFzJbv+t)i9o){S-Q-!)W2w+856;g zE1O46nWoCunB-C-O!y@1%KVe_oS;dXK5LW_25i1nYMlHoP3>d}Rz4(FHU zr$}E{u<%Rn_{^Zqlnr1_IAImE!6dvN`}(u^t(AtV-U;zTI&^9H!COBsp+%YHYO!9s zoV7ULL6hY%U?=OK{6?N~IgEA1=itgjEc9*{a-Hf$|4iTa8`&*u*IcvKFTXhZ0=2P! zF!n4v-5(Eof$X7n%J4IC+l2#{J=Nr2zu>1WA4Qq>!+k_-{|@I{9((mdy^S_7f)#tO zvjuV4EKTfWy*0ZT7n}a*5@zXeNmcvuOIVb~sy39MTxJ+Jd2P*6@vS&7LCl7=2VGZs z)=6>YB7y$wI$}p~m%h6o+Rl__^Z}*KNekp9v_U|2ZD9Dvk7PF4HSI`jfQjoNJ70Sq zea8*@DaI4^S0{t7^%X(9{tUl71uAj_78vQ%>p07$y^nfFp6Xo1U*W@hju`tGQyW+z zm>XUD3i;0-9?P@{(-6(t-5~iTVL!M0qV#SrHhQ_9Gb8Ip(f81_8Z&h#9}63F?X~|( zE(R5HN~o$NQSIya_TH}@%Yp?5%JDJo9vr7#C3rrg_+YUYsvd$ z5*`KlI7ise57EE){ux&gqb=-yE4kT4lx%OL*GAldZJ9fiM;7LqLU0o*&LNsws{~ zv~6q8i^cSMmx)u4{ZNFRb;%~?k zHGn>Kpz8NyphBs5kBHh#okidGXX6hTiIb%N{(#O^f0U}LU~jQhWhjE1=3NE|P#n&j zWYPZPU!wER#g}umY-bXDjZM0~l{x1XotB1>_7tW%$^N+;PY(Y8y6(nW&~E0i?@KDO zXxtFC!wj?`?dn=;*F;iuZvha}u`o06Wja!MYyU+f_~tP}TD40kgt*9+*K1gC*pbP( zCooJk1Gr({nnOK=Az7<{`7m!wvfH`Q*1&7G?w(h#_|GRTuNTPg6E%AtT*?mPqt;SJf@Sl?Ihb`_^*$a|IORYe7wYxoF25Fmj0G~NnwA?n}A~B z8V4+*uKW$}%D;pXteK>T@wU9(8J6$ACkPl+bH~cvTO{Nd@jFzoP%q<($@!h}Q;#o~ zq-{RFl;5Ou_E)Edv}ZA|an#bF)-nIsrXj*M_n6WW^CnB|dQ!Rf&RzA{C*Hm;?JvY2 zd}{{$#_hR~taFC2j$YTl!%xP_&4PD?w}{=`alNsMCx04b!gH67cUR~igq=YaNu;4= z$k{#v?lnw}$VuHxs*>%f>oy|tCW)oLo^+|w$pZH1K+|B{G0Iu+4d++rJ>@$ZMD)es z#mjHId%OI$1I_EynIdkNMS|WYhgyWe<#6i`0Fz^>a#zfO`wsyp;hUrwZX5S z3-7qM<%rwu+?zTI`_B)Ey92Ui!sCEuUgS|HYD>F{UMrkiZ=WMnnhBrHy^vVfc=T2n zaq@#_Ao{SlqsVs|(5ngJMd zK?P0TgB?MTzXeb=$-Efbb$yvow}Ipcn!Z2W#m2SdCKydQg!fyK;+`PNNxd%e>Zb1$ zm`;wp!iK7joVbq975v9*{&Vw4=FFCdYWTNFW^H1*4Ik}X_7ax3j(SXFA;g7W3uB6p z_41zy%)cPx(UgkeQwm~VDzF%<*mL1L>SW|8AC62?13nNE$Ic6Ae+r`)7JdpVx|q8Z zfg?Brol!!G4?5F3frDHuhaaRCk@Sj3bJ558w`wGL{Q)G&Ije!gpRm-kV;;0Oq?Whv z#}T!q4Y_?r7W^A{Ml*MWO5>+_S}Q z(U&9b?H~A%MffOVnmTVUyKW6t551in0nz=bhO$?#sFxw!cl3jwEwWxb* zlrG7c5eH9PuWXAgl^oA=|D0<`fwe06T5g z-K5$N#b>J^X2l>6DhX?hmF7W7mCj|^+);qkEFXkmC}X{_?On|;`vfpjLJ&aW$~Kl0K#0Na(izc zMh|qQ_tOEKj2nP~MiCg394btz?wJEqz+aI)ktv#-+2P-Vyd#`;-Uc|a+A2URM{Y>m z!oqc0H_T`^z^CXqg@bVu+=SqX?I0DtK=SHfE2r1@%T@h*6qc5(vs8YLfX7zV7pZx% zLc*dS(vfw$L|1)kmm2%F%xmGxub%eB&)x-fMFsKhp6gxNyOK8XBcJx|r6ZIl+)Ve< zplFp$_TL}x)!-XD8S^bdf4wR0)ZJ>}yw7&8^Mn7@@ai`6hUFc1)~(*Y?+kNiV&x7T zf+aO7N8a4cHbt(0!)XOs>z&AffRoqSzYiU7gj17^-tOlRSB;Rceu8@f3a7JJCRBoC z+&%=GnR?rBI(2+tI9vIevfCzhZl`pB6-9Fh*gcVreVB4%ZtAx5%jX;`5~A-lp9b4$ zJMXXl@>a~##0&eH4$_MIEOlQGmItz6J`tAW9|lXhoi*RJwr<3iIBb(hD!$XZpG7IKcyYMKnt|hjuq{z zEZlFMCJ2fi3)gvcGS=CQS-J-3LGXsc7CYJ1P#2+rf@jAvLVktksM?s0yR^)=pZ|H& zv{65mYr)g%JhUYM$?y2hQQVfGhA|FM{}^Y(`3JCX9XWm~Zht4A05Z-&kEKreP+*g4!IvKSV2+psR${Mv!sQ=(OG9~8|YS2vUXC-eG0Ji<6Ct)5%DH^^0o>-1!NjjEh=%)Qn>bqk?@UH_S=2OosU?huX; zz-1mSry2F6f_SvmeU9BC{Cv6n23Tw6MCPfeKSLRk$ca8>$ZoB2Y0}!r7xou#jUM~I2WwGk;{jMyqR(5PRIpmRtd*jw|Ya(Ceg6 zuK)cX#hx=9jUii^5(h2(ei`024j&fYdI1Qi2_VQ-V|})29J*OO4!H3OAW28fg9s(! zU8`4ySn#8q1(NN!!c79-%sxx;&|z-t$#f9^)cv*siL$z?cV#}Cy7BPx&7`$#lPsD9 zjIFNyK8eu3e>FoP==F0CQ$#gX{-yGq(#5Wlq=>m1n?0CT9cb=MuO(pUxomBp#dIJEdZL*I#OIj)dSXu5 zg2b#NKkDlltE`6wM~&xXZSmOe)gAT7@BXd38RO?O007G)Y_rj6>-I41N50dlh6~>> zI7up$$BlU0lx?9leg9H3$y&27P7qy49$JbCmWs&v0Se0OlmeVnE{A*RSR?4?c3(? zz2pFDMx_By=v)!RJ=MdvaNw)*Vv`>UV^k~AfV!*c`C>v-fqJnn3qavEqXm@khLu?iDP1g_(?V+B=i0U5U zZ!%%8DUp+sjVix589bo%EuYOt>n(|yeW7yIkrCEALWU4$ZdDv|_5J>rtRoC4BtFN2 zwMYn_$dH*y4zGz`y))VbW!~v1j2V-Z_&H$KIHoPY<$Gw+(06h-C=8hK^3GpdZGfSs zvbzE@T$BIwPga$G4hKN*L)au+slA9EApsROg*dL^^NfvB zwBDeJ-wrIpd@iUVn$5UCh<#EhtX`g~1Hfv( zkO9Qk5!^-DMaLMh9CuzWZ_zHJoTL866?y6kofaP-1bEiAmnPZ9hvjVFZ!xg9I(W(j zh|~!J9=mwV<_QL$G7T}uawUfW4c^ZXl@JyAZt|%02%!(9g}BGBJF?h^B^>|p1iwxI=gV;VnCG`j zoRxX(g%*mvC&0@%M3f+nOx8PuB{zFLAmWp{g52urS_FF;+`e4tl>TrS>y zF@ZQkQYU%8N{rR8t(TS_$+ld*6SV;h``&aw z24nf%r!1@MyJWR`NAgr}IJzK04|G2{HP38o{<--$ZV)&l&~)a_E~4a<)%C(%hH zs*9%iaFA{CQSF6Kp-ZV!OraRH=`F|Ix=qxP%yiSosGM2Jf)^smUe{|8s1Io@I?z9d zxA^das1MAYq6=Si^h~a^+Fz{8nR@7P{%Ugh@;>h9$UDmDotpQP{j*Q1kRqZFmW!Nn zJI?3ZG=xU=mZC>z6@14f&2;M#uYuxHj?ZHUsEoaVkVje7)K+rsK0DlaS1`KnFX)dF z>xG^+ru#%}v6IB>6DleDn{Yrm{1iGi8(4i~YdkP7&mbT><0W@E3zFZ470!aHG;<2S z7d3?hcoZ*l!?S)TGaxD)YAH^Pl+9)&YqgSgmFEw?7FF`wLO&Z&%XqyP_TLyB1oD5fo0n zNvV40p#hb&4>lH0%-^X{I>u>$CvPq@j~k~u#ZQUt2~3iAaF7Rm$R3v%Nb6{$e;2YR z-D@cxr*hGr&K!OwmwNHGe$n!&YP=A4>Q7HzQBhGiNUgGy=r^wP_aRw zs=PfQ^CsHqmDXLYv|vNEUzCXR^o!{mz&FPz+W!)ivP2;r@lt^cBYQOwgbt|nZ2;JD zdx5C56NYSsFY)HLTK!gz6YJUQw$wZ{@Z|^{$@X|_7lU1X)Tl%pcjojY*8E9|=iTe6 zleeZE71LG>L1gQB4(?Zu*|6uYx{SN~N|hhE4k`CdP;@noSHSRsI~;AFc{CORkhcl` z?mBD0oxe+4L_j`8?Si7QLoHbL0+3oZh~eREs)U33XqM(wXA4!RO=j#tz{%d4LbT6r%ms7K~j$8*-8Hvt*DYBeguRksWRU-|7!0T@~{?1LoU` zt$E1npA6XVe|d`FpWs^qbmL_b_bI!^aY$Ra+rX#&)gv~!X^U%BD}G| z<1Wo&KMe>w;Si%Sxq%03rAJor8Y=@?I09~u>yH&hLqh0QO-2%nK3B?`XmvD`7=Na! zK$XbEyJ6KTcpO1(j7s->qFAPO#4|&2rzkHL!>gHmap<{#zty^A%Al-}gi_gzm@EVz zU}mapN@=y6s~;CYCmLK#R*~LiX#o-l&zbk;Xg^~bjotEu`dQR4YGm&h(Z!TNC_$(R z&)0Q4!|L~VwtosP%MWpCy~epI)q4`pcMHkiO1R@uMkya&A0=Kd;t|?b@w-B5$yk`a zbI8*qq|D(kAm;8vu4Jd4K7!zJR9ocHl3*UL(i^W`Jp4;}q`@V#?#T7ymqYOWS8fsB zKEC~x&Ys2mze{`~s_-JeLK|_Pj2(A4)Z#=fZtb#NSkYUk#}1Ae zR@Z)%u{c*x5X=1H%`GA5E4p6uBjyp@;mm)eK+Bu%i{Hz--@2xR9MQ@%qh>EQO|%_a zJX3JM6R;sH09k7V*8?HD`$);=z`r;r}Cf^2-AjO(Dy z-|$(y`ikswtAo&f*l|edSnc|QBw8nwHb>W*%akQnQWsrJ-|eV7_QPJ9tB0M!tmK5e~reG5_FXIAI`l_$=KZPN0fTK}~vMu!bb70oif^(Odi|92jK%4Y;Z z5kSRWQPo;hPZ5bv%WZYGPCavIrEL`!+IZuZnRPg}9;lMmV5c2cKpZqc*jD*2EUJ)!GE!F=DrE}eh|127wv9U&sj;TZaZlg#f? zo|h)5HLPuRD_!s&??3Z(75v)z3Ip*CSPH}SjvgLCT{=VWfks*-3kp0I5GYO10E*g2 za92pz?LIOVpc%pV1OwZa5FoQw4b0)?fBn8xHx&cdfUtjt^71T(M@ATN*LMHuO)9l& zY2tR0UkxIQ+aM8G!0i6dWclbzSSq2++WS)p;rgPs{gu+L+&$k^>s*}b*!O#Oy39hy z_dV@fMnCn(8pmttD=nG@Aa2I_Txa6G4t09%@n}m7KaWH~1sq6<_DI6cbG~&=>2pDN_H_s$XAX;b-f<9iRgsBams}9X8OD1q5Y~1E6_>^ zdHrWFEf_E)a;M<{($kTpv#Sf!!)KjzvS_vAE5hz;r?SApOwE?+|3)o*7Y)rp526G% zM_*>v>2suoOH-`MuW4?JQzN0HZN?Au@~dvis-nX{ZaXxKxniJ*2A2o;eAp5TllAkh znQ%r#c$9GmA6GOX)GQPKC4x5YS{ji)U5aky_LyBFotc28Re*FRZ4x-2=!j|eL|^M_ zeJzw0`_`S+1F#wey{A08+eBK6XtBNqysNYusICq(YrESjcCyR-QabTTIvBg?59bso zj9t^BsO`rVp?Ht0uLQCgBkJbOXivRNu!$b`8rdRj1FTjRtNGWOOd6r(M(p;{BuwoT z5IYGid&3&i7q|RA>^qZsf>fzR)_zxPB~?s>{sjAsv|P1-ALI3$K)B$PzV7Vi)o987 z4;z;cIqz~K`UXAj;qqv{@|D^RjotfA;_in7Cljj`%u6uJxSX@N=tXbW&DeSZ@GTdG zs1I)u+vxaIeHT4cpj`HA`oRX*X?SV=^wHm>RGWWrCh`Jtd=rK70l>?Bk!^izUK@I% z1**8I0~L&Q)(bohDoq*Wy6gFr`7TGwTg62GclqarSmXIz6|_!(>2(Q}mr$b}FFT=u z@E+kwXVmM$Jk(#$f^(D{V4_>DRv-$5aPN}x9*|uecwQhBb~+fn(K`F%Ga&LaJH9NK zk6Q`p$gJDWLg&n>7?0qw_)iYTpE1T(P=|G=2d0pdTohbA*hF2RB*4c!(mXt1pLMba zVs{L1ZA<)rD;~GD#WaTA$Z%Ri^WBu`)%$9A zPeZ!GXz37ueK#>&-qd%}j(;5|udVF!K$no43W=jREZ-LSXN50GeTM~}$sB4+f zj=D=7)Bu|UPL>H%-nj-WF*RQUOWf}r#iBZ#T;1%%~P{%Irt-OmDT4#Ioa$9_xNyKJX3n&nJ@zYEK#{t?S|%8% zi52A{E6joiTAa25h^xARoCwvB!=OHIYzSZ-v9Y}F$<{QB?9_XiZYGj&JDT$Pr^`R% zxVV_SN#?P6<%>tJ=(|?>f_QIP?Pg>TipQC8vVcw7d7i*Pd!5yUsK_|7v6q-X`7b~` zQ~b-kaR6tbf(~Afer9zZJA9?6D z1kWTQ8(oxKG#Z!4OB7Qzq|?0FD1xlTk+XrWR#oY;S8u$C4%z-e<)p?5wI>=)2oeDP zw5v+1uC;OKr_$UT@@mp`YPR6VDI(9Z&+(?2l5rI$sVrlqQYyzqE#0T?0o2BU#IZiS z6o0zfkTlB`pPXyH{1!rXSsH(z><3{q&<!?EkZ~pqXx_?uAw2Lpu{NrjXHzt5EawX!3j#iPF0P$1{3ev)mh&J&I^Meh zfh%=O?z?)8ZYNS9z>+Wg@1efpxl}2C+#a&bdJ{#QH>Bnh5)SR-qt)20hBuB#9sMf* zYI8s9NCmGq8|jJt(i7$3FF2*`;sz7HK2|Nas*s33p z+I5o1X_cx5zysl_Y5pEn)dLk|r z49j2jy6qayBAftaZu&*6G}GF<(|BSS##CN={|jC)rij+y0l!O5vJ}^v&Z2-OEDaq1 zeg1bZZEvID*U!+ffQG8%(LUl;2?*jiK*+;VXn-}$&uJO*YF=RXp2{))EF50LuO$sX z;lPM)AqfF4=WS2DbD)sneAroi5#f7Q1e%sFmY9oCvq5li)6a*@xp-IU@@poDO&9lQ zWU&ks7^Ipl2++AK8CfBWd&-W=zTO9oBCY`GA=G3L2M3pWbSavT%Qzl9eR$sTw;R-qyaI33WpGwz4fx?Du^)20KkXn1oDDyoP`s zY~t>_vICTq(^m+U10HM_9I6rhm%Oq8$}78}_D04PsC}IH`s~ZXtkvFqg|oep3BUq8 z`R%#RN-o$t@b4}Fu>o2g9GA{_a6#F85MyV?%2v2yvgB2&+plyFPH`8C^&>BMHJXJ1 z%rNs^?skH;fZ|!`La4k)RB)d4r^%2azb{XrgHX zth5RyIKZF=2T>tUw0Clf>(E0R9(DLYD+PL3iyA)wh0I>_SWQ2|kel_mw;$bJ(-|?M zLAo&gCPWf67WvDZQ_K0`>;nZzk2FQRF--}x$8MhW*DU+9Ecj=C<L<~*OsS$11Kkzx@dcSAE%fb;EcOgwk2q9Q~ZfjjbUfnAT>m+{4@Bm(XlVp+1p<^ zOPEdH*Yh)*|e{s zA@_dTJ`3>H-(C3lySySv<~qlHy)eTlr*?e5Mv0h4)U>*&It0Yh8r}B&MkrS(m+bD} zKc4~tW`EHv_9&8(`|!+wlbTxr*xMLFW`(=-JL|S?XA;MRGo7tWfW@nYozo_I3?+zn zYTtvD70h*mM@}_os9DOGEBH}H@ce-HJzRQh8XO!ip8s+sgjxx((iOhVA+T2NBeETSLX4gDFo@A+iBA>)u_v z_&lh{iKSOOvG?Q^UsnG1Wk~j2ilcDR=Jjef5~ZXdoA3<8Sj9)Dz|6KI38-6rJ@GD`;TF+0p(`+PYlcS1%^?gBsLD6#83tKWh+0+znVV zptQq!%s|ri7d>QvZunnZ{0%OmbnX-$vkZRytC@q42H~xTSWI&jblhhG*Ao=33UxT* zL|u=4h`i(VH$O?WB}w@aPJFRRz@WgMkyrD>?uS1M`B|?d#VAZfQNZS)X3C>k*c`aT z@?Bzg)Q}-thst;9;c|35`3AelqW?m7rK(`C!KAh8;rKm1TOM-$jFGo@zk?q#*Av95 zz2Y6LewZzoqL=gkaV^YOE*NR0)SDIXSdJqI*?h(h6Q^ndpw^UgUiHlQT%j9O*GLc%>r?<;pOae$RFI5El|s z?>v-S9?ZL@Wko5&tOz>NiOi0|Mw{kN=q`=q@qtl7i} z5($i#m-mL0P66l@63c@z#Z0P)DMI@nkSZ36gdcshBjwWdev-MG{?EkF|H;Vx|NI&2 zI{-+qpBWq;2UFmxIaAt$fTHO>I)%N#qUU%Z=pZtab2;%>F}JQNgz9%y?(^e)wq&r_PJJw&Xtm+179D`_|sG4p9zzH`-e?ZH0H5|NPP&Z=Bescai<#r1Hg?CL%ByntnS-{p=*q(nklqQk>@8P~;FIHk;;EY;mwy!MScViCJ8Bt0S6HXkPT>p!wwI@s{BvCrRG3ck+9-=Z*)%+?5lohpj{q4L0xIc@iy`Xu>yJ&0O zwYiSPFWg)Pry&10h7$WNz^B=tX1IVi-S}oAKINao$7T62sLg_4If(&HBM62~G&B?^ zEq29V>E!0#$Su#`s{kTbd)9RJyXsirZ~O48#DxMILew(eQaB`^$&gdV5^y}n+(-Di z!lDX@FVD?Jm^w9%UD(_k`~*2sKRo^!dCFT2&zvE+oA4lM8R0TqX`ZVH>*s&B?MkiD z?Wd2&Mh@*Alp2}nemOMDXwJ8wKVMiU?MP^M(k6C#LW|AMr8o(E&_AZ@yT!Mt+dbRM z%)NIP{>Td}{+ezZE#UE-e@<`sAYX45Dus`)H>4zf=d_zCww8;!kK#mYg@W>MU1g~3 zv2i&WPC0>?7|#)N(0)US6YD;vTxvATj6+|&|S7ytb{L|C*S`P zk`H00)xauz!m&NIO2lL>YfMWiZoG-6#YVZdKjTI_>nScwNgaR<0#f6SWHRuLQw+{L zWc9+!{)ARjVDV^Pey=rVg-8c{Qpqu}}{X@W#PNcxPTk*{yPzis^2i zuwAU~F@xjo_c(@%-@i|@r0RvACoe>{@ntTw8z)aA?zaYDkSPh(Z<3rdL8eJwdJ86k zDJBp>5LPR&r+Yylqo_?~9!uM)qiCYJ%3Q%-_t)KG+Ci*0u7>x6gB1rDcC_7~*oS<0 zY^r820weZ z9eP~Vw3p^-%<^tm0aJkU$j3crb&qfLJ{a6ls42G>rTN{2I?9bSN3{3{7HI1pbVT0< z%aB;8>5}i0lbA$75@O$}&^TwI+Agcy+;dJnwlb0S5QLEp%Q?$+AGOjBfYH}_lQi-z zBymI0PID%QXi?uM`J(Y_27zFir}6%b>0i+iG_nWP+0Q;pe_Armr=iq8IRaeA1DW|Q zfeM2E;VM12jc>eGv+>Wqeo#zy@ze>pE-pqRNwjh4bHFp{q(@0ZVn3tv6~`VkMI0p# zk5`UnoVaKDj5vMU`bTjq?WE#>HIq<4?WByFt5^c1Pota3k+s+ zT_2og1VmLe7YLxaeApk+TD2<}llYULLEoJ#uIm8e{dt*P#_^s?D%npyb zpT#We3ExKRVYhB|RuR=VU)ua?gT{KuoTx?>tzH`7_h(1m#1&wpoS>*4&XHfJ3+G*gTEzP!zId%a1~9@nzgec z^9LMS-&7a1Afcb>&qRDmoTX)5oI&BKk0_Tc|7JWg@XxeHK~UdsqN0ShI$F6qL8ZF_ zFQVOwB%eGme$Ry*WBLBs^OGOtvY`szvHY!f%IXu&gMMF%rYn~xJ-Uw4xfAmhw}VNu z`A$0HN_rLS&_Qa{eR)PMukV;5$jIEmY4e>oS8yt@qh-4KRB<7w)@b+9!q9KY-&(<; z5~7bTPEXb<)UXio;7(JAx! zTxyN8g|)^>m9XaEi|wT(@cz^*s11O}OL8tulR3TT;a)|)>@$Z(-fto13MlOhTJf0O z8Y@4P8V!l4H?(_I)`HE_ZS741ZO- zifQ~M!TzcxcoBr_CV4YmD>>0Hr&2v`kX<}D8EGSY`@O+DAV=utt^u-v zGN+xQ@F7ub!u~TJ@I#={fMegR%&hKy(A-<9Tv(AzZx`bL=B`TvZOx|C>_cL0-@4t8 zYPx4&44g^GUDHawB+=mxerU@On|B>Ywh>py%z`Ow{pgK4;oC{*KM1DgF2gUDhZ!dn z62iWT7FZXAh-YSa#UuKJHuM^)4!3XYjO>vo=RdSrJ$-1AIt zob^PXEhMLIg`b4aUVYUz^z$v6l!#)TzMAeo3)NFZua!4b9)_kC+V!7io&U{Ru(&5N z48)H#i@=~qZ?--tGPK}4fW+rn(zd%f=0*tJCIl-j!5| zUAw-w|5tOA^f;}@ zFJ#!?S?p?j8C*xWH8|gPc*L=1YoJIiF+;-c&#rnU-^6os#D@C3NF*;1Z9TGm{_x$+ zn{*ifC-iSd;H}Vo&_i#QGhPG@o331B+vOAOQbEpb(a!(I5oDV)JhYi1v8X!S%!0YyA%}m^UL?ws&F!o1 zF7T^jFpP~}VKg{Q5zGy^?KDA(?H38H0<`nM@<5g~#z*FKasFlx5XKWDRgs4KV71v3 zpaz_i8?V{NgmvWc3F~vA^!?02CZ7Niue@{W;lxHnVm^Kc#C+z^m^E-g!>^}eBanTG zO62gdqC?pkkTm_cb~O>s<&a&w)x?$CEHtlV=DFFgAMBNX&IOZsnI{ z`I7;VSl+>#q9Ml`0#oD|C~)?&OXCa}hyqbsk`Wv}Pf=c>!M++vBJO6bnR=%;l7Yh* zrJlfh(CHLD8X}-_ z-X$TfEoDGk*oPIe{5+eWp~%R?k>>QNv9dP`Yld#?JDuRP7tI5*=*=b`XM z4-##}^ylwS??;biv8c`KmIaw)4&UHagqoxA*bMz)6Dw)-LcvZ)1asIgED#*Xugt|2 zClu(L2p^kHyM7$l%16BF6Z__bFq1{cuT*pxqy{b)-NxoE<;#4M(e@r)HcbtWM|knu z5Cmh0xj^|q5n-MUFjsV7ZY9yJj|fOVPIN0%ql$Yf#Gf;+mbEQ_6I3X>w0prMORE<+ zPu97baRb*RJcbc00|&nD{N*`?yHiHQIEfAIWtgD-fT^dm=9Vn$HS10$?KacDi8A;v zR5rad6OaUvIJM+q0URU~W4rrKjV)oeD<1SsO2&F82j<_KRn^sw>}U-I?$vkJ-5wrq z7-Brnhko>2T<**%Wz}2jU&MzA0-jAeBy*v#md*QzJK+9%3w1-XHBZcc5y=HK6rcuH zEnN9E=rRJhjO%S}{~XI$eczpx+y)h!g)iD0iu(Xr=i#~s+%59gW5xfYiST?6bDw=* zbsptF_XHt-qm(d*{2=&pX5r&xB?PdHpSq5$&s=HNIxyQZtRxB=cS%yGw+n;nYhBli*Z=fXtcbiUH**a`F>0mYypljr8Ap znAUA2dGKR$49CG-n(U9kM(1Gj^i|V>Wr>APk{F|c{l?gI}nS>s!wM}j$cL=BO!nHJQ-4=Qc z0V=qC=un>8&y#nkH|yOhd!!O%D`1gpVv$CN90rCno4Ssb<~}Tr;Jt!RBt$OYcMPm} z&}~oln+b&pUOP(&rTm?Fb7GvQRNcW;z0LMt#tnb>_L9bDuDeec1wFAkBja*oTI@uD ziq385LF_}VtGd5aBnMHKeaU;-J|wA)cuhu(>Sjr)<$H2*q9g9o`p6Ql``&;;?=(yJ zzX5ua;|k{YXqA8cu_VA(>!2&30M9uQLE=X9)AkP|8(Wt+CTe<7)J{rI@Ld&KOwp{8 z)pR+&PkfZwLL2{zPy}3{aIZ=o&Kdw-bNFiltfK~KmmsgYqY>!3#8T%?2zWmtQ%K3_ zF15?hJ*PX#M97Y3B!&P^Wt_CnY9VFMhwKIBI=fkv-P=XX zW|Rv42}^<@Pg;d}G;tycV%YYI?a?w=0$pT$*5MF-bM480;QQ8)=$vNtYXu%&*HF{{KoDqbg)^_M zuiTTf8@!Xf{|anW@45jcCPbtsIvtHU9QV6aM7mi827GNF_8;UE6Hyx*8rND=>GpY` zERYh5EAPBxZVB7z{8tt1w+En?Jrzve-)T)hwfOG=EfDeUWj32OJ)e21M2Al#8~nb^ zgHQ{Rg4IClVQ1qP25!|3IKngL5Ifx{6c{%>8uu`h_yYQ^q!<$4r56C`?N=(t{EAH~ z&h%sDmQ%P)ej#DsRpic6xNWKR-$+cZSH1w@_k~ev(qs3+MENqS=A}1iSq|;^UD|A{{6tO;J>zVF` z95DSI5&82qMK~qd9~=8kb_HqWp21C$RjF5jiJGU&1UPDN>_+%a%08IU5}uS{KK)ez zXTsMxE^k2VC@*(0P1@0@Y}OmOE^RM4T2UU~k?ywYzFOVA=HsfUa(Y`xG3Np7N3NHb3)C)TH1VHl6FNS#AmZ{rK^?lEFfcD=PwR8 z9>OpXq5ynf(<*)80om=s|IZh(^P<1iW)M;*mudt)V<>OZ9GIoB0tu?XR{ zRi~Y{|37Zy4Bq))ti5?S)PMZ%T~d^?L?O&1-?An9mSI9tQnrwt#+neaGovh1V@vjZ z-%0kJkR`^FW$a`dVaUFlIq&(N`}aHNcg}rZ*SYWO{mhsW zwkM9IF}dr%PqV4V^r_HHc&5W7*jLg;B#*jBjJ*W*f_6f9oD?+z$t%nM?4C6hy6O8$ z{vPIm{Ozr;2?7icmM<`OOai;E!G(7ve}N|1o2?r6r6*pTpD*w0t_HxtL?rp_jb$C_ zuoQ2et^+vfn9GO}vtV8Et_RHcm|hA@k!9qRSR+^a(3ENQ_c^bbW8=GgE^SfoVn{{5 zDxW1v3G;OcpllL!6_`TO)gvk(I5jjK6mm^1<1-W2`O+PWA^1IM{_Qpq!(1Vkm7zBa zo#C4lao~*o51*VJ#3=SeotJt;nByys+;&f%mjxp!+e*t* zWX(c?WFh3YP&Cl|1*a7xzIAmLu~{sF435&`f)dGp_&id*MgVHDTO`>)=)GY!XGG3j7T4Q4rifC4-8edFjf%`=Hz$^5rR=XlI@yF}RMEAv8EWM7ewS5gnh;n9ECi6?de(!mO7*o4n< z^DB3ch^rO~XAYH_Q?F^Xr%0$GnKqVK$4wUgG5=@bX6{LK5j>1e(5^N7*MThFEEOjJ z8LGXed=kl*SZ~Kd)W703*4)+C zt3TfDL(>^$*X;S%k1-gG%)Qj~4;X3+z6^!I(9j!e2_BnXa$~1$i1>Y6k>~50sulBx zxSz0^7kJ72#pHLxEN6SWq)e8C@Ah6={VG;$&8=-{%2k$yyL)oCFWxc7Bnv!C0=mA+ zjf^jbN!^9Y%%+u}ZOf1{XRa`7^HbrUvfw#|oa(FE$sNK880dK69DJy6yfL~u618aL zI2cye_)7MDyDGcB76YA`oqkcAyQXV*ndPBFzzC13%v5*#ZT2LIN4`fk*Id+KJU5cd z$7#Id7VnULaF^vS>N)GVos7N3C1Moor4kP$>czWd1q~taP_9b;X&BPDUdg+rgt@kR zLl)kvUI~tT{c51x^WHJ|5J|u(zmf#gGm988uH7{pOD>ZE6Tm;;iiA6J9LW{@S(QSO zb-LCm&-Irp#4A3g#lzsO!LfeZQSC)Mtp5V2on>nD!5>?#(+i<8LaOucP$cp?2Y#PS z*zy9Qiw}5Mbv~vtvrefz@0O^&jt28uL;7g2QGCrKt~R61pApJi&QOpiQxC(Vz@J7;>^0kVd!k_2N9wQYA=1bRSVF zdG#mJ=k~%k5c8^WZHzrn3nrC{;G3ya>hawDg0DiC+;R3jB_^wZ(u?pHo1S!C>cpXakl~iF-69p>x0|MTg7`@2q8P`C2!nixfpNH=WAtvsR*HUy z0m^BFNUbJnYIum-;|%4-wbyv9vyNpjWCGC%K~H(bB9UtT zpQYY`#DdOXwo6zkD?C;&5}5k($${#PHC`X&)Ot)fe7$}1ly&~%jHG5qE+eqh(#2Qt zzeJ5o`xT)@x{X|O!ACS37lz&9^1?{W{cPa5clci4nNL-8-2>^&Z-(X&gEDB7OxJM1 zbrsHm3O-i%^1hWoZL7?-vACwWNRwZ&CQR9#A&oI**1c+nw4eVf2N5%PzNWuT;(KHs zvdMAR>5-IQ=H1W2AF|b)hS@0yPn-JHJDzTl|h(Sr#08AU}`S71+!$l!mwdB zlO0zQ92zg`Tju`dj23)$bfw*W`m1ShCNwit9bOIJU;YL&>5W(xG?WHaCS3od+iE_|10$t?6dT2K8m3qLhpPY|G88V zQRbfL_oTH|HEA|6Bls0<3p-s8By7*)?zN`7x1XP2_!0@i6-b06;WU>A`jcf|6&f<7 z*=w3hrD@uXyreIp;F8>@2lxI~82^gS@AT$EP`aM&H@bF7u3(yayYbw_F=exmw&|V7GlS$+6D;iqPs@|vO{Qce_UbFOGUD%XjU}kaJX}_13+WwoJ1#;KgZ#5 zy~qbi!=Nf&0eM|OpK0MlM?lcqt=VHA#J^+6_Y`2VK- zJ_w?Q`HFFojvAD9Rv^J)Kio}|=yDEoSL3XbFGAl9%bFx3l~XTKZ#W7;yRTfiaz3P= zS?)-QhZ$SRCIanpC#r~mAt=nj! zDFazdOEviEyXCi28z0Y9lUF2I{9EvP2&8JO+iW627wI3Qa=KUn4Mdi?{KdUC_~G1p zrEwaHS`bQOm|-Sej8};V>Pw7pvJrqTL@|9Bv+p16dzJVFFHFT0M*B8fv0*VhM4)o? z);#A8n-fk|#()iVh|foHx|4SX;n^1%@0gQ0PLG)tGJba4%p+gpsdE&qrL2Byt1}zD z(->tl0w{O2FRkbNe}DKs0xT5bUfVsA4T9@Wp6n3S7$DwYRJMfK>t=Pl{!>Sub2)%l zeD-pZhlthklxCtuCdB_bog44bwTmI4ycC&i7hmbXgcnQB37NuP5%hpJn|_0^fALl3 zeT0?3L)MMzK@iMnUa#ZMU2&gUx-Js%;~2N@k&jVl|?(v5toJBx#Bk=YM_=t7FEXjHJNYP> zOt_R#+TBB>BI;{&(L^GtZ$n(;(r|?&l}#<;0zCV`F4DEe;6_48M?C2RcRkac=ZeFG z7P0J1Em)l0xMReZI2hu(1nw@x%)Ii2cbi_|3Tm_9C}Z;(BCTC%Gi}3sKGJ=TUaNnsSrH-d(R)li1Oa+?;7cgf92U?&x+Ie zuaG{ZHHRgg%ccFKNgU!`xnNno5`x_dg12RPe;VKU$jv87z_Cvts-(QR_N5x7>Io%H zBAXJ765ud}nwPq$Yo#>BGq4a+>ko}Q(Ptm3%5S6!Ly^K!bE%;#s#o|VH9-DYY3NAz z#-_ue(rgjiT8#5Un|Av4>nEA(q*2l!DtdN|#QsT|SX^IC!E)}TbuwOh4?Kxkdyl1@ z4J+U1<)Tk1Y3$UTZ)$k$cgD}lCQ6mXwh zqLq4x|9DIZ&bt@Gm{IrdTD^Ci*0!Smy}n51aIc5o1=*L$l%;7B7_bu@|5A$D1rei< z%e?u&%WB(4bw7^~KwQ(Kyrn-8ziVl3YTx@rlx zYto7BMT<|oRWd_VjT$qB4O~S(87rC*S;x_>ev*Gt3DNvZIO>frN?7cElZU+oCJ23q zr45_JBGtYQlf`qrj5uf}mN)qXGrln=ZxLNbz+Dktemk5(-H$FyX)(T}55}pdaat}3 za$oLeHC|m9dZbB=vrQXA53B`hwHNr{vuXjc1CUg!WXPbztO@R(0 zpToOPjaM$%IRlce8OQmxNN>ZHP`r8iT$}5`04`*&^9EgyC!LH%yX-Uox08N09^w=F z<#-JOM%bUa^1uq39}$J-m0u9;+_5S#Sw)dSEuZP;ZhR_r(YKt_uJh$in&Sl`SmoTD zU?|prN%sU5LfAuTS`vdCRqZHM^#7p8XlB12Gn;rbtP6Zoi^BMcmXaOX6Ch)un9?kF z$?F?Aw>-1f`azc;<4`_ktMHX+&7%L>3=%?~CQ!sBRN#GWX4t{k$eO8>!|l~C3;LN6 zatTQP-E(4nZ>EZ%-F>Uu%XNQ7QmylbM#GuWEk9m3uE$qJ_h^TnOU#4mLU|j}%n3zCB*yJW`hlIta}$RE<9ugFhAX64ch-h2aTyAncC(4^ znm?RRE863eEh7E}_FL%s8LfMTvU>d6J_KM8Qk)rnUGE18Ejjb%7a4c)vaX*>q`g$f ztmngYwIjl!52v>pPPcyHWmkg^u962&OVF?`rodP}>x8vy%TZuCU8g;k-dJ1nOjx`` zvb&2;uNvj3q5m2QnY>*DW7n?Y8R@g+`{*91pDICqa?rx)LD^k~G|a#ch7Nvt%U{o} z_BHKUbDL5sPvC)+WbXH&yGv21K{!ej_e{2w%Mq{7T{H_7C&mu8dlQ6FnE~HDBW0IM zhmP73OM?U@@deRVYq1tpOrka`nG{w&j5oXF7~|#SXD;$wxgTLh3t6?_YZ#KnS9O{w zwBOz~8fcxeYZSNO_(4=Cz<9PFVNOM+0})B*brw?GW~Gh;j@WCp{a3Gr)&{aWt)IO) zaiwMu5bJVv@4za~0iVR8V+RLwZ=MM_?cCHY>^1#Hj02b6z9>z%XzsQbUZm3pC>>#D*BAt~MeU~oN1qW{fF9pXSe_Nrd- z;Euvsmic~aerNK}_CLOaOzXOQiGq4D9$fQd8IS!K;8929em}~sX`sWxg>By`RQH3h zRm(gr_z|0EeHeKTTC#4Y9z+}1=Vg9&-V^8p$+FLtV9Kg0rKqqq^wEEQM0Rud?`-C( zb3m?s62%DBkS{FrX7>J0HTm}_U>BsoDV^LPMys$~kT8JP3Vfgqpm*ETYj9?wktVGSJhWXq0u)F)e-~A;;nJkk znJ{QTU@;Q<9!sr?pDm5dCRHgUT&x0aY_egTdj6sn-_BHGN%abh0!t$`ukd&Q5D!{2 z98JT%4{I0bxcD?Y@*LIbS1jS>gAfZ}-D^E%T#2=QV;PG6Yz4{p1T|N!TwW5P`SCKR zEYwy>SfAz)aiN#B`BW5>F6Q^hLEIs(X7T5@!@h~2P2rd8y&RiDs2D~~7R=1nxq=@G z69@Kog(xG@Cw~yE+rJiALrlbc#I~1jWuc+FFYkIu!k!1>e@Py(Ld3FAfgSN$OwKvb zHXao(?y2uFjqLL6g&7`09~(GvT@9LreeNH>$Vx!wormQpN1a(^J>QX~u>c>{@pEA@ zLQO~S+`mq!&EE}!m5%f&@?mFZK)~lc>PI-T6hw$rOjJ{_vET1wi1D6n=L&a_;H3<;TGEjZX$nKoF3|EAt%xZ0 z9KVzW`9`eVz2c0?IbzfrzCFzURGajpby`(6BUwFr;J0P>OGo)nY`57zw4KoRhH{Gp zX);>`&Y3uhE80OUo(IGvJb86HxJ93(6EZkDH7=ZSS8Y}cHmP|cQa`HpMy-wG_|uw1 zuuGZcDwVUS>s-kJ&-C{-fN_6}5C~cqM#J+AZ{C;oM=+*=X&8;;CjcRUr zj1=WmdsZ&^E)KR{gRzXo6Pha20UAY(fX+u95kx#P*F=%uxZ9@ry-E_twmR>@=59T2 ze@^skIKM`>O$x5k+&S-Wi=q!}koGJC}_PuHXQkU-?E8I*YJ zH@t&h@w@1Ei-U(Sgj$hwiEnth-qtVJHAPhGGQ^qi6)uWn&=Ox8KU5a)sYz8>@EnGh zZgyB6=J9D8r&=?4M95}4wL$oqz6tzJ@`FiXTE|DZ_w zD2Mf&YdVe+311K3Y-79dJ=8fC*@HCVV5szVbZ?m`QeR2VX2dk!ZRxRnu+`UiMPCoW zRr&R7M=OrYBSi+x>)AzmW!cd){$l6{`#z#LN8KafjiOzB55VFQJJ&KPC2==FkF?Q2 zvhTK?*xCgpqa}NeqdpYTIkmHML)y?cXC9u|>`WV+o%piPF^sWiigs-#D|c}*j&;?s z+gWgqxn{A=K;km-RTHl<_oW92Rz&k-F+2b2)I4|0WKhcw$2MfqRQyF{&!Z=K$u>n3 zcP;GSwEl3N1f!(JDlOf!_%6OKe~|&t8={Ex#h*nCw+#s$TjqGUkv8-!?rm*Bo=@^E zOv2VCD-ky3Dxz0flrRr@3XF=GJ+T=}v`uXRlxn<%jLv$w{B zatkoAucm-UJBCnC{g7vC%!hq=v=(kWmYU7RUv z0`s{G5FrPCvixKje{4(3j|y&$RwnuNYOTbi@f?|i812Xm%w^4S1|Qjl`0=8Gq4&Gd z1N*O&I_lX&I2woj`7;h25{%>0cqKOA5zES~q(*T5-smB8KvC@Nk@xWhd^VQr-|s(Ky}{$d>%)A^VESz8y;D_M7p7K$ z)K|m3l%yUvW)S(R>GP&<$yq+xFBNHX>&jhm#Qu%i8_x_fdwp3~ZE(Yr4g50bRb_9O zS}1wwAr1jdj^6+w{?ZLmlG?P?u>~=BZ@1&|)0*+wJX9xJ)=8c-7$fzo8I9Inc&)I%Z{qZQ z^PP;+@8n&OIny3qn-8!@7XNxL5?};p?Pr|KU&Q1<@^p6U$T%y^S$X=%tk4sUN@lddKS5UJwL&i#zr&+*3pKPj}+Dg6A%ug4*0fg1-obC}} z+zj3yP1XEAZ!p}3=GFeEikk0#MuCgIP-4f8Q=i&U(Qfn`XRt}I8FjJ^I@OPFabj@p zf0<&%{LXAIlFJAbN3o?A-SHR4V~`Aqu0Le!^$+HW%Iv|!KDw~P(y~WP&Ytr zj90Ehg01?JlgLd}V*s;ln76R4-u7=x!|ssQ7^v>?jF*5|$Sh|@w9K>8FyFgO7r7%Q zPh2um^gRU#AMGPIO4>oUXYpdZJ4RSK`mct{ZCuIJm`5MQ;>AA`)Q@bK5LXoV$nCX4 zcZ76&&sp)4wMF`Gh8-s(0zHY&n=cvNGUDjv;^Aw(Z6TajCHP?^J|Mz-F-BazClDQ(KmvT#?}S-Fwf{(1rHw zdRa*yuUTy{qCp)@%boOFK5G>tdvkwVQKiX*(9M)TC;t`OlEbZ1QvR&g%YD=)U72XGeVOROO4uHqt; zu~g0^?He+?F2Hg!%fPtaQh7{!*A7!dKlFN2Y(H9d&*AV=$|b~zsX`h20cy)#xJjdWv_VgXq?}Z_D$wp3vOj0gg?icc zlKWXoXY4bR&U3d-L-DAg>ZoZ1(B-;Fq} z^*MPv_UM^Tfjzc~VH6*741pSTR9rm#bXa2K_&{4(+o7am?Xhdc)2G7SUtQAOaiOe5 zl?)>48;U7*;$Fywa{{8x!UkEeaLdSnz^Uw@a-j>&-C8H`d3MA{TyFGu1wVqzUVl|# zzI^diP4FPkiCOIhi$YtFO;?dd^$V6cfjPf$mp;*sgu6-yI#>Ggeb|ua&o?3MY!Zww<109B&T0UKx zD2+sZJhsh@=-BdZ)W2S{cbsAOdWMm&toQL4_wfBs;#YPJ5Es{`D^Er8v?k07AJ|?7 zmo7Ohc>J=Bhpvwb8QaW6i={n@z-IRF&81DHeF77ad(w0VQ|Mai4!;DXi(l=%0HO-# zr!SaID3^{pYq`t%dT{hmaAU;qj?$A9vE_247|Az3c_FLea!UCV{g&=oNlprBEg)0{oh`A6vdf3N^J_abXDz9W7Q$?yHD$@m5gSCwIo<co!h;XsGT> z+MB>r<9_G6In{lTgy>3Ia;E)J{Q>{=T;#DiV68n}KiT#@2B4A;?b!NX+Dr7mK}Nw{ z1Z9Rymq{+XNTp$e%`nzC`cY*oz?Pk4d8(|DsDykaxiv_eCG0OzxXWp2R2Py${X}w3Vg)}+h=}HtAs0=K&zG>RJGI_5y5kU;wRi4SzU+rsL9b*P z@3jI`Jlt@X_UsW2zNpa3WrU)P5M6q2$(~!^*?7f3!Yk#BeSc}?;Ka4;4mH3<# zl^%_jt^}PxH4*EvIUDIXquGTEQMZb9fGi0!GjlArG^n)b!KKU%p!lAJ_$%*#=n@HTrfd`a*dNp&p zrXovRb3i5Zq`;dbM6z;^JAJCbZ1DQfNb*#Co`1Us*5my`fAtPqpwl4BGj9*frk@*&$f-|Vb<5caTlG??2lS~#W5>2@X+%x*u~LcEhr*h)*~7p5#r0Rs^ZTP$^R4F> z0-WzQ3THu6lbl1_Y8>kJGgdHzj|Y41E89YNtg6cy_RRIRzwOC8OjZkH86O>?rl|Ys zgX*4HFI;|tunJZxY3gWjY8NRNUn*j(3*X~ArLv=C{ZOtbW^0ZQELU7`O82@=lc6Hz zq0jz4|JH+)-hEDTAMh-DP5!cjTkT7&BoHQ&e~!jKStEuaL&7%CNY?~i7w7_J!|~#= z9dBuhs0Y5MBIE3~oaNYlSlJ%?Vu$8rVY@&jvxOn>aD?fhy&liB@3F$MJ85Ix>4rZU zx2?tYJH4VBjZH-!gQLVeaB^J74SP5J@ERI&)D3+w%#bRW1XhSYXb-lmuRcttYv5YX zYJLfHkaE<_i0qWYfRXg-!h1N#`pp`27-t1++5qxI!v1HkC|c6Y%FXXcp{2um;S$h5 zx$;k8K;+KgA)RwKd9UvS2dem_TYkYe7AO8iBqq+SBMN%;n} z9F56SaWKhEdu+Bbw{}=udz#JN!SIKl^57d|nh7;@3|M9SHVoyiDhXYo`@UhuO@|rM z>(?;37Hjn{kM{jp#WQIauFCZ&6N3$?GasHg8((rsp8D&5gwXy|T>i~XN&le*vYO;J z&AR7;bYg`KmfH+|_-*TtW4;J4pb;U=aQZKS1ee1KC!@b17EDJlNHBeRK0oE1h(3@p zwjihWh9f3MmK8_$1DK6j{0XvvFjLXD3a;XiBV`C~R-RvX_@OUV!oQFJaGV}iHGQ7% z?v0-zuFZVtcRLb>Tvc`-2iOVd3Y$x48MD9h-W)anZS8J~?wF=u5$u|0=An$dB_@WW zp1?j8bW{Zn+aKJ`?ZCogx=JJA6%B}Bv}Fm3z>zJOO%6L#bYxtb{HU~I6Ja75RgQ9l~P z^Ayn}kqA6gGB5Cv3GTw$ENpUNR4Hhq+@}1h*tl*@!8{W<@n9a0)|rz+)D39Yl$vS5R;TZYx{Z&{ z{MPUVi75+mqfqS9U``u};p#G+e0{loT&7R+^Ddv+aCW4*SH`adz`F9H%I-?x^~w^gBR5gw%@im1Q(rL z&)BX)Pgs{(k0)bGgShz`vm9e#k_Sqc?iRi_?gSfZdu3TAtaZbf8BMIVX1Tz?WTB>v?nI=K57jPn*@}#1 z11qB@!%TZK@Ao4?H?a zblaE`d~u_04Z3{%2Vo;x{AHmr zCLpmpyI)tr&MfwF@UNeLOBah?iMgxy#pnKstXJ}_V2dH!igv-K6Q^aWARFl9ZcgIMrl)0h?D0lkgt))J5I?B6w1Kz0YS%NRbF&bKw{dP8VPZ-OU-Nu`JkBlvCg08popan#$F7b1bm9;$5}G za>@0JTRzap@?VnujXMI8UU?YB7n`PFzqC)^LTvxWzoO)!TFG9qdXxS2`sS;udUs8t zCTw7^F#V(mcR*2b0u$X0Eb*=VDF?S4zrKC0@oc8?mwS7=F0>EE;}G9c`WpTB_VWh! zP#xh(v-OwoxWzpfajCU!<-xDW90Pn_81z9jBNna z{EE)3M!i!&4x+~sEUxyv)XlUh#>qm$#5;y$uT0v6S+8gn+8LJn5O|0=QF8oI%17)4 z-}vq0EUJj(cG-P%r2g3DzSM!a?v#U)hG6(AH?6}O&ID|{yhh*{(lJCVp0k#0$AroL z1*9MIPMO&g0iEC{gploLjak?<^~^9wj5L!QvR}k@jj>}4PkT z&=#J6`&zyUPh8swq}*Ei93wwr5z>S_JxXnksxZ`RlPv4}DgTIbY3l0*=Ccc*LF`<5 zOrUD=>bN$Xv-xFJeC9)_m}L-*FDVdLc#4%s$=f>5!2t!LePI_+cA||J3rXF z<0pQ4dns_I!Fq2fR`gq-d~~9iZAL9G?!)AiDWM|1A{FnO81$NO%|aD7wNkrSW3+4$ z`XP~Jr@vo)R1smX!1mCY%I`3UAE=SJ7bviUpv`FDrfA?PlP=0&UJXQi6kVlHaUagp zv`kkZ23g(%l&Jsd5LsICAf)8Zw_nUAZ5iyK2wAb#P#5s$;XrEha3}#D{fi9dr_Yp?dmePN>jAKp(rjrmw zZMA;8=a2QR_i9e;E%Wz=B9y1_b(i*oQ+yV*Z=YP%4T29nHYvEac=ZRBz*Epqe6HpOvO(jSEgk$s{onZa_)R4M?;Uq1Z6W(T{hqEjD~Ec z;&i4*?j?CEYTCt;%O{uf?}MR8(L~x|y1pwpZP~1Z+*u0~(+en_6Q-ox*XT(0-ul^Z zng98onj+|vL(Q7CfXEUW%`riuTYP0M7qW3ghTR2=l0jTEedk}Y4G{HcZc4>9#&>kM zQ+`CtFr4X;zKqaUan^lsX?D=_vVIuaK*nxtSdIGTM=#JBNgYqM?hZ>pKWj$PufunAQn?C_vBZ&GK97L4W+uXZc)t2&Y&6{o#5qxbKN^- zlT#1MEScI=q0gFv1H(-A%;Ic+#dKhlEq~=k)`1Ne5|**m831YeJf^uyC5JfUrfMAn z-o|z>b?bp1FzZN7REwA8j7#eoEi#Eyny=nEz*fYDIqnC@O0e|?GRy!spSv);l4inQ zJxX-GP`tyH96fpN8JDA(<4*8DQj+CD9atH6Wz<@?BUhfYJ9H%<71xXXW{zThG~0FX zBrA&*^77`JWaXzG-xim1QtpXYU1Hrx`O5j7OPnk#10yu^_yIUcCH!LEZB6zZc~H0v z{iRkC)^&rPPe5k=j^%i1LGC+mXn8YT^q{p z6R)EJ7R|1kh~b-K60oJBxESq7@x``e8jt}fKPc@EYf;E5g0|lxI7OgB9Gzl}kWcEa z_$AfyTlAC|aKUeonzgo{&fW<|G)@Xs;H6|${CMot53Xy>^1(}t7H{Ue@50xzl@4Fy z1o}`I2M-U+EnwX2F2hI4)IaiGRYs;o%I;DNh(@|{H-bk&+xlqMW?0;T@C50Opa-Us z(H78cFXhy4pm?%47pqtyq&$hcuO}QaR#O)R>#*sW=Oo9{H0L4&&0^DelUq6kDqCX= zFxis<#RDT3`Pd`(nJQqm_bvrBjTY}h>-6fx`Gc*)6HY#M6%#CMjH{pj{_9v7c*e?| z@XR^6`NlEWGrFP$O(6KZqPCZEOlu}u22Lwbo4StTvPv;B2n)|`LDjI>@ov8uX83i_ZTYMd75 zAUyIaOx^3DI&Nmjtf%!4YKZE68a@`wU6GR~+wV>q#K)0FATPWxfVA~uc=k&M=G|a1 zreCG@2Tu<}4oibpNET`u!xd6=O0F9WxX7?Bnq($e5U*tr4JoJ+$)po`@G)iUT7a@o zKWdy*LXtQBl!E-=>D$}Q?^tG^eRoZ+9BaY52@L(7@6Vi0fPg~_WD&fltOa2gdS%Z; zD066Iw9C2nDv-McCIM6l0^kFJNf&TJ`8)WqatjYap3o4X|-h4p-{1g6;43Ew`Q;*Kq$#d=T#)VWNBLcV@o*U~|3pXW?-hi}t z8upkwX1MDoxMsF`>@@68PrPdpL;H%fm%)q6-e420CbsRc8$4D81mikvJfqNvIqfYO zQWhzzI8r)W$-cy7j4j~PX;ejbN>*%L)*tR=MZ{~5p7?9JWwRS5Om|$LjveS^ceI=ucX1#4U{Enf(Jgq@aqV=nt!2BoJ-%oQsNJ-uOmW5MIs@(fmWaOwTCo1p7 ze!=N5**cW>;?1j=B#+EiJL2azoEQaGdr|Kc-d{s}oErQdY8gh;*!#TA0d)A>i>DE) zEYU$2KGAURv7U1rHm0Q}-NNc?z>UECX7N?zcrG%%wS$)kjJXlX$}#vJoAj zJ);Qn;gHG+nsER26^|I2c48D9wtwsAz-u|qv-$Ixv5Ib=Zi~vM-qf7f<%^j?P$yCCI!{4`GPpbe0j@zNLZVibQA+lVcrj zyP1sA6rInw8oW(*dS(9ldp+vOOp<7oKI1lWa3@^)AC?k1b5y*8eH>hb8S<%i;mgxf zkedI;3n*&JS3}T6(iCJ|=;terAc8Ui<39YUEWuKG*~Xx=!R!i75OaDKADD>vWg~0&giT~00qV400SmiOOd2nTXeHk4l-Cmg1 zrXF{2#R3NXr_C_BB>wQsDX)~UL)H~1HwQ4GnO%WBj&(QYc%RStK;{(GkEU>*3-W?| zMJo6bgFLR zNt67;WOZs2(qy&g9{qACqw11lT7~bqjdB%5%n@Q-t}SI3g4Q!d;!DIgQdXH(Z-n76 z+u5$D&F#;Mv=^Nm4g)=a^>J1v!*dC%HPc7kFGy~mOAAvl_B0w{@Sbo3e1bq{OpLK- zo|95LWQbh*`c~(M0q11OazJ{D0$ymbH{toDbI7_fK}(epSTiA;h^Pc=`kN7 ziIe4L^^kAmaX_+Ei zi{OpLkty>3?RRB9*gqm-Vod(%O=0+lJ^JDy0hE| zMExw6k3Zc_p+|_G7!%}j%aZ=tk=Fk@AYT@vfDt7CXe=20n?XYK<7;4*>!z=D1XA_+ zvsNx0zV!sqz(HPu1|roH>?+6Z44wDi1(Ahv9ia{Dtw>%i!;RNrDj}!8$uXfFPJW%j zKN@`Fq$=vmiQ=|8^jF*X{t3pOy@yk+5q)YjKa4&9!ud${`Tn}oxbSX7nC?7oj^&OJheoa z%?oYLn}5Mir`!Fd4QQZ?dUB`5Rt>muzrpLxe|~uj{SLjAr@C1#z`3)UC_O{oDM(Fr z43Z2C3LnA%dF>`oTt}fb&1s=KlN*@$f9?UnbmPIju%L}mmep2ENEHHxYwhR7ynW3J zfzH1#i^OwI%Ue%SlNQo$w_jM7;e5%~T#U`C(fxIKucg91QhG2A4T&e`yEtda^R0Vs z$<*O*?{MY7o!_-s-h3*`s0;YlLnE-BlM9k3oBh+|$P)y<+KzaJ<#oULQQ5F2WqJ!c)&cXIyOjaOyv=_PenI!J%PT5R^l zj85L{)$7*sxoja!j$U0$+l$SYd}SvRe!>==`fm%0Dla+rkc)}q#KJC#Bxkr2JOIu> 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

xcE_Fo^$p8^ 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%0DS8F1F96hA8Ta~1FVH6N9;EncB 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%0Ah3irHn}i(3ENU@jA%cU&6p*OkjJ!GhCN!a&OYM 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

SppQrwCq# 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�D>-nH+#i)m-sJb%AA6!Aw{oskxwAf+aiKA%0gqg{iDMrR)PdxFsXxh z3QogJ=`^XiI}`)-giu*}y}C0+w^MMclu`ZgKjWDn{3K6Af3~LG*iB(K@Y$`)HJN{2 zuElh!>VYWMY4?U1i6P?5lG^3(3>Qr^dIBkn?+h5a44sIW5%*S8ah18T3=b8#9h^d( z5GS_jbqqfP8)9RIXxKjRP;!iar{QCk1qgBvtA#AdHhQ-^Q%nHfQEuk7tt=<)u@Z(6 zLu7oM)f|b{rg$3)L@bExi|UZwlc*f1W;tkSlyS1+B$&HMd~o}DF+HFe|FGY3Kz6a} zt@nB36KYqHSl&cSxtr@P#|HJVwGbQ<0*4$ZN4L6`!H>5V`?wkYK4#A{e8QQe8xbdM zCtioVQ>(O?&L8d}N}sU!{T6=IRR@30Lrn~&L@oZ>enQUJRX5R2_pMFDR==$CWBfWE zm@s(gv}l3jbXw~2?a`FJ-7oc>JEdjX&P2i6&0{=7W5@jU=}$BXOxtFu_P3kCt;cU~ zNw5uABa(*c9{|4S@6JwnKoU~}u;ixbNJ)+7=uu@Zb0pPIzZj3o7^>J=TbHP*tIPkZ zo7JK@NvvAC_7(`fH!Hl##KzXEP)2p(*XAt`fz(KVj_&AaY0Yewm6h2HnR_Dq-pI&w z$&+39z7z=!4b9EZ?@_3?w9vjDas#}o`T@zD=kY^1ysmP5GR{a~A0}R_8Sd+EmvRg~ zwb<4V_VWS)0=nF3ye79Cm}aS=FuRB*GNeSh;>1#tfTZNY&k#qW(fBX!e(u`iolt)> z*(aN7#GsQeixVpgL4gKLa5wSrOkfOxOLrF@ap{F$Kz5)ARN@)>i%AcDE=PW0u`O=t zc;%Mij8e!N7GxI;pL5DDWeX87JZ)z8rwKm);$S$+UHF;`xAiJ~eW(bw@gkr}Bf<{S zHnga1#41+mTifBq7yHL>Yg3RYR>h%RkT9;NY)3}&hkt-ISN7@KooJ53@5MK&+GamK zK&NQp^6~XUc}pDJiaGoPaq!2*>&-iqfnw($(zafll$A%dE_w!kP&}d`IxdF!prukK z9o?^UG=$GFcr4a>xLtgTvE!|Kw&k!^IIK$#OmZq5%5ScV$ZxX%W$1V0{S)KN8@4f} zvn5W~rJ93eWH|BKkO(Lm;7>4cg&Os$0$Q1)Ce8il2OefUG~_pO_noP66Tx6`DKNrj zF%-u5vk-WV`(0;Af&@+Gbr9wv+kW16n<9Z_7qvWmVq!Y?h^SeCwIa2ig`0Hq05V;3 zg*>o1{HQcS;GFfVcvqlmVaT>A-D-d0DW9X2_tq3zNu<0<5}Uf2A)!1<4FHt%4iw|{%2Yn_Ry%Vrw&pJ&KZJj3S=`T4AE zGT$S&HCj2K;B&j?jJA80!9+A9R!hs;Aexm%J4Z~}R>uMc-}MK-UUhr`TJ&2E7kOgf z4Irc&$ntir?BRR`{mm(-TQ2b@t8P$)7!eK7-oC1Si>un;q;732-llQ?0VUaK3T0 zQcMQuQ1D{TbGW~(_4MPaseqD5ipRp2i^1c?_`u<^*cYQPgNw(-{XK)JsW%kYhol z=f}HSVs$N{O$S@&8E-=g*AB0XsQQg{?}HCq9(Pq6Lg4qiExn%BPo2ua zFGJt?T4vrTuFKrl$x(yaV{4>nZB2ZtsToRS?1D$LKtL<#tiLW%l$kt@2 z*RrUWG}G)g@FZN^wSo)B9sOv^Hl|Ri;S+rBOnrp-5{v|J{cNK`*@Ykej>jQK`R|0< zmz@xni3-Znh-ZZL^Tq=6wb9_DWsTN#d2}+JW<+z-1v36agt>x6iod1bB|+yby^RK-}w%kTARAg;b&(x>z@3`_HQEE7!mJf3FM64T; zs>m!S)2cR;VesrAh486n3-p}^H~hD9Iwryx7cW4G9_swz!dLl;X|-#|Z0FQ7@NOc|5uKC4bqZf!M$&VP5Bcb@~$ zxNMq+uLELu)uO(u`gmb`ca#qi%&vz&*Ao3=poaq@WpM4Wjx?xeD>{5x{#Ok zI@8JXVG7VCiVm9!IvyZH?`|89IXD<;~L`WtfEjKy;FC=$#GM`B}c zgd>ay25DNy4?lii-f}5+rY1r-k1Xq2K$M70#ws=qU2QwysQkG&(IK3z$tEw@Uf52M zQSpQ2ec{}cj44O|h#|qln0?(?DLZvyK=*3Jnm2UUZsQx)m^n&{WZ^SIa-Wr2y_Fq1O-4C zH;8|PS#*7Ve%>WQBkT>Z&$Bx(^t>I0i(G%ZJ*1$Z0Du>BCb%$23E-|jA}1G`&B}VF zV=D0?5~~}qjMi{N?$fX;#9aDMUaghll&&BNl%qcd)YAKy3BV(O{xVEsj(BpbiZPuD zm=jYTs2)JS)neHFQTlpC*A1|_d0|-iqp-DjjfoUh)y}Pr_pitpk zsaZGPlKx~vELYT}N~QxZWM2&Rh2ufE!>^LY_3~~{BE-VM0+i?K}=vs5gQhym2v`;FSXc!#r;b!-WC1E`ts9b=uhFPot571wzYkm76-0gS~F( zWj5@=*iIKDfM{&E@i=XAZ%^!{q@UIv3*I9Z>g6R`6-+X)>m;E>Vi1G4?$(zDT?$t3 zuhRcM%TgF#SSuu-R=dh{*@Zk$--{py_*auaJdrGPF3M+X4qMuzTxWlCtp>MDq-yL)55?!>c)i1VM?g%O=fh z&G%!ZYw=Y#nhIxeX|a+EWnk#327uR#$S+b8FQA`?mw)QK-#a{9cOWBY11yf40+!jp z&XNq_M&02wm7Z5lY+PK{Lu`$@@CEevS~0+BZy$Kbw*`OaBx!H04lNcsz7XPGG}?8V z`TW_{Ts^_K10zOClfg%_7%)CCInnYDqj{E{M-a7)z)AEnhyrlRK_s5*8C8dR=nHv0 zWf%qd_Cj{kKqCOy*^d*5nC-h9&%@rib{8|;oK^L&&1=FGJgs3yqm%m~LmK+1jSREx zBUjBdlWU}`!de@p>tHeI&6siMXT&#}w32#G;(y@v|Bz<=-(M!R@eF`(t%X}YDQvJm zQT%V8(!WcZ|F0Wsl{-{#4W(sjrgfF(O9^t2V5c1HU-xi;jUV9ZX&1&sgARdouv)t^ ze(V=mwCBCgJ?eECJhz(iF*la}+s2Pd6>3I)y|Wv7=~TioIClAP6Hut6LSB~Yx(o{3 z5<+s_hrvhjS}s?M#I0-`3k#dhxc}0;7GgP)@;f8=V0&QjPpV`=**tSWbzEnMDk-Yz z0(~J#2eeDe380^sOJzuv5&Ak#c<-GCM7j|i&@e^lF#pwmaPrqQ4WVP(dY#-YpG&#^qiTpK&WO zxH7n;b6r7}^?4e&S5FR+Dzvkiha3gNS~=uRrPFzau62t`qIf92RB<@OqQ(qI`*$N z+BL&0!bYnn>Ez${M~D|ty)Us3T7+2M1lk9^uD?8WiPJVU!D_u0k}lLwYAjxsabXpe z7~WE-Yu0`dJ3MJQ^CS3OYdV#epf=8r4|VYrb`vE=eZQ%GE>kX25g+QMT|S+gWhGww zF}9X3su|Qyde|nF8$Za^)c8~{)NO*=AN6H!g(YRo+%?L8i)x5&Q`h>AEwg zx21pcRUf6+<*YW~MAB-4cgzZa_>p*qF>AN=)A*oi`?L>wdepe`Ja@8kX$x5_K4B}o zS}pqO_vSQf)ADX74A|~S%MnZ&-UFn>xk_$NNSIpuq+`G*-U!AA6MpF$oyp>loTSr2CFZv8vu`d{4+( zNn>7F{=n|f&MC2@{x$$uCIf(_y{>L5BOnt0m+Q`Lwma?q{Tp{m%63i>zPM0Jv!@GW zwTa2e+XfLZ5#U;(2lM))=y`72&1XE@L9f#%=%Iy$g))D2jxv(TJ?CEUbu)NS=`VZV z)so$vXqcY<7!nathfK+MT~7(GtIspE8+M(qsi~>elM;oxomN`o?dzQzLAV~nIeZEB zHN~lxyow46%$pOUYHOKn5iOuJvn;8NymYKtzdQR9o;;(-hjII2_Z{_Hk*+j$Kl~>J zPJ|_Ju0JeyxuzJO+$fkhL`=F*9C$x*wX^0!qxl}`c-cs<={u9N2$zqjzE!Q~fassn+%BxoN zbTj#C0jSw@y=%hzQAjDki$7+vK~JgMZ{?ZxtxsMY?buu^YjDp#ddImE^Jy)r6BN%s zBrXlkuv1M)Vo8goRclbFzkM}*z0JPm)O-_5!D3r%s_e^mNB(rDqxy0UV`8YQv3-E_y zM!IShu)AvF-feWQOBCtW`P|*rZW?ys_|$`w9nVn&;|sri9#Nd#cyRwY1;eiMeKRMq z4=*_9m=B;WD)B9i8b=y?yRpXdBGQ$s2mqYcguA8F=;)uI?z^sKDDKuJ-0CCkA->rA zx>#-|%>BEnDlv-S6$V)s!(nnU`02TFmN^j%n{n1L9VHeN=X35Ji4d`<8N>*g3zFw+eWN%S=mPg>|spJ?JH1c>>!D z!Wm;wVePWv=b!&E6jwUe^fcKZv8ZGHy#N=3Pgs|27{p&(vvL3J%6TWTda#E;_Ywsy zj0S=|w&R5MUCGzabysqLPqX^|#k-%4xkEN)?xx?U~Y+1X?XgdH?VXD(tD~2#Np|1 zy5JlACnuQq+_{0};n(!juhaheLE1nDq+3RJd*U25Vg@24D98}>U$ecCF3k)tBOD3> zxkrS*8i*VcjisK?cC83ED{hH>-{}G(iTRG}1aX120Nlc^ct->Dneho%a6GZ=E3Xt| z+hW=>ILc9Od~)Zx8#l7qZ9das$FEC5FT{bNtUMocdkR%#fOtwbQeZcqZ1Y1;qkT}2%dR)+V~=lE(nA9F@>}m&+D=&BLJawJ<68}$p`DR8 zx4c?i*Q*QrL&*4E(^krH0^V*VHr49pL+}rHCJ#41T?N+rF%pw_bJg;O<5+xq6F`!b z)Paf@zuA1nHls;aabem8e7Ce!3{O_uj)H|+Sb!mEtc}OYjl4C)v!4_ZW#2DU7F%|` zGJbUBe$7UV{wx{tuU{cjDwx6NP{SGi5DY6bj@$QmNYj1NHC|t;=FDoyyIzQh+COJH zc`_Ur(D^YZT(O91t0T-yDQ*O42o-1?f?hAE70&I*Qf5**4^Ujl>g#Pa3MxVLTLI0_ zzM?4=sEUx$OZaK8JVD4MsHGd^r!xB_CPPF6IyG& zJyDRJ4LY*8f`0BL(W){HLq}Y&ss$|aSKlBB_D?rA!EgsafHbvot%jer<8+`5_pUc6 zEGkls0$4+5w5rO=*3Ga;6~M|05X%b=T|mY^1l4z+v{E6f({Yf70I(~OP>WNa_eJhU z3GQZI;#+Ez5z7a$S zLYoulj8o$>6r_{8;{@?N`3v%=8hcDw`iAxN-A;-Qjve*3X?}N8_qKx?>%i&dl|0nT z%Sb=XKzFnGQVJp*+svl|WAJ$~IK0yGXS|4;dfDy9BDwVSrE*}?Arwqar{aHgf3H{p z19UR?o)`$O6hnVSgg?Xp3zzeg&#$xnL@@sCIF6 zl+k}n-V_3fs7f9u4NpH0@4_d~LI9gFqJb@KGst~O&r3N#$+)_@I$eP&zLO9e+f%C7 z#0UZz01FAd`#ws2&D$aw|2q3k8EDZ*+&Y`DZ}GM9rIRI04}*dS4%D7#u=OQ?8Q(31;g67K`Xp8 z4eBYKDSn(MwEFls^_^bZX~(m(tmnpgZw!~dwwyJ!a@dF&4DC7v6&&NQ(zUvVEYhZt zsnaU`7vB6oC#HXp>Azq3z!XE(h$%5b!-T+LTM3ZA{pU&Y#~z+x6`z#?f<=9UP!q~g zAy<&mmUTJ(1CNT;tt5k1)C#^#9#q}fm?Y+0`khu{7MvK9kiY`0-;T-3$|5sPf^>eq z*p-0w{5iz@+%|sD8$;a8TtvQ6BP>BHhmjT~rQww9fpQ@46EtY<0XrT6bq* z-_mtq&wO6&01aPMi$CAm<>BIH<-wiB3-rcnbc$&Y#JH9F3SVKanFMu0XAnn`pcI*s z=P7$sw`+NP>|9N{-~!9F?5w})$dUQYnb5U?=LRUI-WPemjiZIR=MdYWkzh$6)sMV>njdXoRT;tqdD@#?wt zqp$-{0}ZH9T6}6pij3vuynVjTaq-4vWrJHi)GKT;cH$)Y8!XkfS!X%zzPa>vQ+knf zqIOOgui!|NO#jcdlb{ASkdR}31}`NMXb2Nv92EH*APT7}xx)H!Hq^aJX^SVzmf3;1 z9+cU(XwumLu-0&~P!G11z-j-5{r(uMfWYpi!zZ^gaH6(dHA~_pwY4{DC0_+W@8v+) zmucd_)VFoHtdXW51P9zKk;1UBV++0aDv`74Syr<@EiMEGh7Y;|fe`MN`DAszW|p`> z6x6znAx|C3D@4ut&#VwQlJrk}>jR!N?5;bk&5EtdokenLp;p*kFAh63Xf1@Pci#p9 zqVj4?-~7#VK15}ReQy|lF(=&X7ce6PY%g+Z8(V1XCr}?g`EQEAR1>IL?F$HKQW$P$ zG5Y5_ue46u6-4aMzZ{dUJ_NoOT+G0Dkkdig-G0q_Lw=}S@@O4pa#TMv?KKgQdIOFV?{@!!mg z&CgiP#s&LNiW}9p6N_MFZp!_`#CohU-D?o>Db-J@j}b**ix6{>qWZ)_1gKKG?#$(> z3b$3|?rgm};He1h{e&m0az%(~EW{3l;n%?;5Simg^gKOPz%wp_-Gja5Y6%3809Y9u zBko;yi~2Lr_F2pz;a`p25B>+g(2oJY5Wp5m=;#(%mo-4^!cEA`g=1FGNxjXyZM6^t z0(q(h&$i$V7JdGFbQaL6a76LcKZOvH%%*H_TL9V3qB<@vE^I&O-i=LY)G)w#?Ct6K zQVnoC+%A8R?1>E38Ma~EB58K-OudHb#}*d(v7ojONxnAv9bg*TwH5^Epz9ZZI1}z? z&(3NCH1G;Cui`^rcc~j5JL<7tXn*&|i*)o#H~#Y{OI_%YE25omOZo+6Wp(BVT6P|u zI8x<9=$PjRZpb3~0J919G@T z)rEV%S3xSof(=?yfYTO`aA%ek=}owYhte;)arbQ( z^eX>jXq1ej+^zZo=@QGO3)t9xp@WiH=Kuy79S_4Da1?MZZ3BWsNyq=zafRK&_(yB* zHkHS!2Hy4s16P*@xt|TRzTog{Brw@dT{P4V^NVo3^g8OqStG2vwscR9@CMhykGp|= zE@n4x<6CPoC91~28(o4IldY``!`Cj#p~r9EzyEag8W0#;8GHcB0KLB$_Gh~@##iz> zsV?Ngye}lRhg#jf4KyrMC)qDQVPh9(#m~^;2DDVxQ!)#jvJoBvQ{&jSOczNd`BS%R!>X_DZ7qa^*u6T81zOupQ& zme@RKypOh@>*cI+0@T@m3giFzM#>hWv4V*4g|8n3QaZ<@1euOxiEPV4P7C)9f2w*| zwxGJv)#it$8Pv7we9UJx&6{HV=hr$eu$C-V&~i#nUq9XCfkIMOngksDL=x~}Yx6UU zKp$bxv^FuuN>c=5HFDlYqTBG%Te8@w;3k8N1bN-yCEesy9k`$m8r z0gB3nJj&+6dSN51=rCDuBDu*f5&SD~!*-r=6lgIf8xEU|z|C*ln-6EE0< zH~?acqW$s2K~L9XF+bV;-fd9RDQ@(_oQ$o=#Abh=7lq;*|oMbbb zcH!+NP4pu$Ys>2Fswv;Q$z}24Ih&sKcA|*f@Nld*6re059lac|b+S z6;Xx?RMVX3+u%9(1%&M1P)g1}sJ#xaV12hzT#vSLy@oFzaQZ~56#lLm(;|Gt^uIsf zF!T~40NZ%j)L+iKWQHS*m7W-PC~G+vQ`$Y(DAU;Zuz6mop!;SO(`!I%MEvEpI2KK| zW=Lf|6<;Eixd4p*K$N%*VtLVQq%D(*vnI8Wc^vgUyLEGBe)-l2VOi8?YC5%{A231!w#E`ecMoKK4ru>N(Fdy?gg=n~>cu z!|#okS4;E7dI}%9@;NHK?SWX@0mWN7W~D@WL|0f0Ha=O;P@0&(zP}v)YtOGCArB`& zHT9a!;NPQ{A$&i=Ej(pC#XZi;(FU*G>Q#9Uo>*mNXH&tjd>52EOne(d+zGd6MIGgA zTbC9JN=wNmZUCpJrUmR10h$b-DN@hcm-8bVH1(5ZV7ZbH`I`I9PUnK@z>PaTN=>to+cLzxuc~guR4#5x}#h?lUQzJ>X&bKuD$1P^kHGO zw95--_rplTZI$~~?}?UmS+i3gwws@{;@sRlxA9rD%mk&`N(2k(!RR*OlzB|c%d5Yu zZ@U0`YAm;noL-(A^kVdakh<5&1*mUsn44I(QYkz1!7u7{F>gnII4X=|wHHS}4#2f1 zPM|cF$72YpaB`>Xh4p2j#cTJJ3{bR+3liDFI#0Qxlgf0`dF!5j|6h`BV6ds3s-Y=r zdy5-{@aQr+lxA?RF{vMIw=TqCtG3<}*|!y*eAEDrw-de3&B`sLUj-6TzRh0N{(l*X z>>4aY`@ea-7nwbxGGitcCLBDdNx4cD%=oQ14XsLUlea4uaH6H^Wg8|(EgdH=`sO@q}0H*5@ z2H2_sd!{xq(12&_t)!HVon4fP=n-D8-BFmq0(-)|N2xfnXAbb_Opncy!0|-92gv?Q zs(0|cy^cc3dpBCH!}uZW@i;MWby z3w{S70sOqCg6ia|mtoGN{HF+Sikqs)!sD0)7vV0R^z8>jgG0&rQUuJt+zL{2D$V@) zlV?O;pt>Tz8k^u^!!h{ODa2^Zl=5MJEgHgwT6(^muo#45#0!ci)qfzJ--Njx`e#oT(58#n)@>%V9}h4RUB%4mdQyiuz((C3}6RCl+QhZ4FAcv=Rto5qwc=17pUbGv7~N# zI_sjp3SC6Ada|ctjl+nI&AXZH&drMV^Q_ybT%E$bFPykOcmBG3Zm?EwoUdEqb6p44 zj_$0--n$w`Y#**O5_n-dQz3hPC{XE5H+U^UI4V`u>SI0U!oZ7X>$T;CK~`{$g&bl| zlkqD~yDS#-br%Oca66nF%&)j`;w873qsrMC^g5wEbuJqzk6M^*gM6F!lQZS;imJ>= zZFftK%h>V5^fi1Sm%vS9(i7^cfLbR_dPI|p=l4qY0N55@ax)Ho}f#Wms zO((SqDO!yXU2eK@`(cLn5##9Sp)u|S_Atl=_4u)z0lZeQ;UqDS+QBy#pq2>GWw?Dr zR<)FcH{iRoY*{A9wb15WUDVgBpEZNud^^ZKL^v*e*9;xs5BX zCVSz9gcGUgl`G-Au(FOexefb^WUyun&z95LQu@AhFRa!T_mXG^^Wo>~>NxF?x zZV_2-QtP#}ao7PB(i)VC3cISq7I%`IED?du-pJ2Zdysn`u78}ZIh6WlPDhD>(W~q; z9A!#lF>aY5`KIEzX8th0!Fbo2SWJ^vJ{^|So&W2#G{nf8q*(@iZakERcL#d!-(lcC zxT){N{lkcCK98ykV{wju6Z0BI-EFks;>Ro29n*B2rBzu^&GUx=-(2frZ*1VgHOtLO zRq}#yZ7>B^>L!>efxH0dtkr-w(k#GGwZJ#a|JcOn`C^$+)csksq}QR?Y@=I*wTK)L zmj0;FJJb?PSpOQIXg1cntUX|)ME5>|#XQ*PPl!-R;8tEbXDkz9MDSETtB-nD{!BE}@trWTP?M)BLN33bwx%TyXUxd}8HVb917? z0bB_`6I~oY|Ed>)rij9>=;beGZ3Z~h3cze`#g0fZujQxSKAMF($ueB1NPX+sjQAnl zgF;;W^J0ZK_H<{1{sf*plm7UIK76JJkyoTq9*agTt;+(g-4>_Z@yE8!@Q9wO8hxTG zku)Y7kKy)cnk#feu>6*LL9}M(#ej*SZS_%_#J7&PmD~ zyH|Xp!M>1|Lb6=QIMdaIR~+OwPc&jxUn3_cB-W*Yc#3J~&kbR5NA$SxP_vyVY%Mg# zK_%xxJk}-3t?_rriIDP z=ttZG11OI# z{9l9^r`j5s`V9I%@_W8qHX>cLg&~3?Kr(=vVr@%k2kKwcOPKVK$e;}_!^xBlVu~dO z^yqO;X~yFeG}vD)B5%^X&__JqLZQ*c*00upn6r<&$`u=`e~|;Ncp513|7pGl#Kpa6X7pUdJf4s^>kI&MvLbtj!`Z5y2h z2L&%7J9K=xd}yV=fzcRW|J>5?>Me^?@BUVqu0 ztp$`2c3`%8t+3*l1m7AX0|%d%H#Qx~Ty6vVS$GTM(Qq)6Ub7e(u&7TB!`XTG1^n{>cw+s~;5k;OC+p-nU?VJkl zh7BjNaG)W!jGnU)0kotASgOB89p4iDioq?{28Z&d4HPTlK$g+;+Op7;Dz-q>}l?=5*qxN<%b5IL5qm5?MxD5C`S-2OnqkoqV?D|-p)MiW zmH|@lerH;mzbnRn9^C)xpFoApe5~}UrQ}ia`{Zz^zbmufJ?%Cva#NG1 zgI@Y~`g#w4Z&p6})b*VrO--Fr^&U^m?}OsB677h!7ZvAElXE;w5x79({I2M#EwwcBf^j3HGaX<6tzSs~ToWC*Yi+w5?;rb9u|KlrX zOdO&K|38*kpYJ~KCgU1E-V8mEZx$J%HkD`+E(s}Z7EeEB4o%zg3OQyjIg(3FhYbyP z)BY29To``A^qY1vbfwcuqZ-3?By3JyEvrQI$aqwWE9_GK#y+2u~t~l@9?{IXDzB2ER=lVUi)$#?^=v!^p|8)C!7uII^L&F}JZ|A?- zi&krLeWNYnOo~26x^Yd;=;Wx~Eu5(qx7Kb6eZf7qRh;^DLVJ*XOq1X3U4K^D``-(Q z5Y}GzDRFFvkrQagR+XmAxXt3wVR~C=(0o-(f|VD`@iT%5i23V9?@M<-zIuZjWE;XF z>jLpGk2D9H;m=+(F)O1rrQ2B>(kgT~frqZfVsiWEn=KJco<|^$bKALQIXPMk`>-|V z`}TXQom(?>BqXnP$$JmzXNFxr-*rFhZ&F}W>|5ReCG;O24ZX_AkuMYRU=eLems`9L zedcAF84Lk!JnX)7qaay#gmT&#K?&Hz3UU{C%p-nRJOWkmUWurzbPgl+7Er0&ZuS{n zcJ>FIcI#I>M2c=69?gBj?@w}6^q7N~GWajMHb@V2M9NMC&YI-OC5oEeQq^hPQqv50 z7K@D~xzR=)SBuRDC*^Sli^Fb>>doq@dbAvR5-Lasifd7$KJl~{wBA~p2`ZOP=6vCb zjUoew)Eh+zPnM1QRikL?Da47uVbug$!xf&xVrpxB>rixqQ3z5C zKToUNce0UueO3Er^Bo>awe=8JFC;84gu%4nJm)fl{w0G4ZjJ(kSYi??0zEepOBQn# zIrTPw)Y;_WL#wVk>`1C9SSf1n>lggimv1eOK6CZO z@lfUB$-lwREB!gh;e4f&+Lw@umRIYD5_$6=fA$CGDaGkCz3aB_O-K=%yY=&9xED@l%Gmx>P_vy; zoNR-vDJK0qX?H)%xhRs$&=>!XG4L6z-;%F#re!zZBSX`*D#J_juHI-m7LQGzb!eK^ z_C83tZ;&&sYfD=Zx9ns)Qz_phJfKpC{i!uT%O3Q48!dR16w;D3E;3-Ul~TYlA(+1A>Cw z!fB=uyc?rwlGlF@pCXEQU<4E~pNx$sKX%lj0aAj0@+DXFlUbV_1 zxcXhrNv{HoEj&WL<@(UBb8HvZ;Ur4JGp0j3YRu*}M9SK&^x3;9&V#ys@>E?FwEw#d z#$p$;1v-xL?Dc9YAJRGT<7&{ez3l@3b=k5!jJ$f+ViOy7a3QR}kIA&aNg9)$*bFBU zx@aKwb+jk$9|Om@>v)gHWDym;xED>@ryz>aV850H=;7ShR}sO(5j{O}g2cVG)^ihA zOpZ$J8ltJ8@Y@f{G&}=^z%Z#r=tI z(<;}&-jY8{iq1x;N^ltQf>aKwv&uP2jW@hsTISI(A_})gH=JF?HF{1LV}7`vi&g-Ak9NInCK-O&gB~4La_G%` z=p+4>2Vobx#L2=Q8kHWZ^m};Kj$*Z!I%Te$$hy?n@wFZ$K50F*8#G z`Nx9OWJU~HIh|r8W+1Z=>sN@NA-N-`Kfj&VXbJL$pmTo;b@8@&-evOExRlZkrZxMi z(26J$&Z%YZV~ULhR=qn>UX;gk+{5Ud!46nPX<6UgVO2s8I%Fy+XPc9Odjg!*ES%6|YaUWQ! zS@ZF1szfKGj^AvEaZ_cK51Xy|RVJgSenYF$UAN6c%85or>DjtHTfZ}5?E7T>(!)rL zH_GXSZ=kcpkoU@tvqxG~TPLFqKu1nPIcoMQtKWfrX>@~Xq|;&aWMle`ibd&IYWk_( zkHa6~IPiyWKJVB2wLYS(@Wi@j2y>BOoq<;f_ZETT>JDpxvR{7@Pp4&@vqvzu423aV(Nro z`HU){sZ z`wf00utnLJQX+=1L}_eYW#Op0!r@|dGp&{D z4YpjAR`NqwoC=MReF<6g9I6ScQ{P4)`$AB1i###Oq2>eXk+GVy)@l=KUF^0O)j3{T zzcv2#7qaK(;K|CxpNee<(8Q*A2vv_tH9N=Ya1L?$Vz?kc>u z%3;3@{;m%-r=!BXMAzy#H|R0Y4F~jr=jz6(V3YTnkmXIABW^}?g9NjmP7FL%yLL12 zT0Ra1vzbj*kO>go(qG=3*KWLiL(_Dx8t#e@RB=}GLF6!i_H^%Z+Xn7CJQ9XW9xqyS z>M>4DuqIK?-GiagE};pS+!Azs^mCoPPhunSJFnJbxVKi$FaC8JmyX32IfL`2;K;7^F{tI8{?D?j=&yzZLjN^xO2 z-mrMy zB9U&31mmoX=03qD2b3ehrj>LqVyg2AZox$RS>?+JRv(7LM~T1$F6?JJUCRN2$;$y3 z(1KKD6u8XayIUj=qm#&aCkrKEJ-chcrJ@!SSW(v=wUly;uX|?F6IiBt`^;Ux&-_M} z+CT)iKs)PchESWaR7V&K0ssLzhK5N~zUJ;p+d@&yD~S|kLG=O0B2iPVec`RQh669; z&37@@vj8`(m?&tTx3pwe<7NVQP}QuuaYZA1)_ZrXWkuC10$5VPXTwV10v)arWA2l~ z=B7Q8y*lEnAB{h^ZY6?&8{Eq|QC69fE{q7(R7H1%2|BPDP^)xFd+~&P3p6EC>j!qx$TOc$-QZNCQZ~!To@7_-? znpjJr_OwRtJpNn)Tm|t@!|46|t#8}0?q!Lx56`%ixMTZKN{ckNhBEw4t{NV)v#Yl( zUWZEbJ{iM~-8Odicls$5GmIupbyMn!a5!b3%Zommfb}C6VAj!D&w@u}@A_@6yg&sO zqq=TjiqqveRmomEY7xgEQmTY)>r$1O+71?DG6RcYW^6N>3Z$3tM=#fH}2`?X{Z5Ro6&E2)1<2Q%HEX)%}u~~wK&f{bvT)# zU>Xd$5cq!aur&r!%ccR~K>LEa*73xOQS9upRRhvGcf>zrm$P%+QQzHNgFw|rjNtA_ zVLGtA&4+!D093{q-XR%Qr_wl7d+m? zRrc$}zeBfwV7UMJi?7uuSNrrcV-tiN{=vrlPe_IO6KB^xSvH@!?g}b}Y%YVk??>=n z#-FtYU#iHjSAjJ9$+1!>sEzF%ZZm4$$sk}&I)Ylj%K9L)zdPj)b9}yGQbPaKYva|0 zrRynD2V4##wbJpW?t#Z!8jvNKds5Ob02bvwbT5jrz^#da&owLU?8eIR@5_m%0qo>F z6y)GkU~%?dNudrvEo?5mqa|A>J9I3yu3>D4abH@x2)oi`G^$8G$49yOvBF0B6S!J@ z_S)K8FZpwd$&zM2Y`XVWcGwp+uL(R-M~Du272Sa>*4AI>wY0fyoy8dKO{p|2UOJ`T zNMhLd$KkIdf2_4^ZL2SCq~({NAmUWCbp?c%qm>J%=~>(}-{Hk=x{;o%z}~lQ)ol1k zgr%D>XKO#UEyi!H!r{HkEOJajL_}t>H%9xBD9@V8R`@!$3AH!x41KD{R@8fUmZ(WxUIiSO8#?8BFZ z2M8Zj#GRsh^5MnQ?W+X9?7z!@KHlIf==lo0s~_+^zw4n7p~y%r^{yEcRqPXodV|>) zSlbEf!=8B7g>jP{EO28Q!x9J?5zaSRwq@z%09{EB-$MY`i zlTivCVz{BSZ0|l`6rV*Tg8QHn7JTNOS9kt6Jma|73!Owjnpap%mm49ncs#wJD+Gq# z@SkJhgS^z4vIck-Z-S2P&5Go0A*^~&>oDEht@sYE!blll!96Kq)uFMX01xcJx%v?a z!kYIPh)*(sETqPjloJ>CA*{51f^hAU&iY%n-~afpAHDeH&HHD95JyBBRldU{G)G`l zAy@r{P~DqEw(3$f#sk9u^;)^4h>KfIhE=4Ok7$+xGTOB1W#l^#gy3K}>>69xv;^Fg zjcGU~$hdzLdu3I-hJ{Yvi@^WP-G}|k`@D0#BCzYyvSA6!1=yr<#3|G`;n@(2Ak8q8 zy!;SWq&0KeTaQsfFbzUXZ+b6%;LoeP;c&=nKNCapTvW{MIoR|=4g*^8P(coUpAWR4 zI&iQvWA{eG?WFI@(%8Dl-Wn~@zP)&MLnFe6@be&+uQc86&%bf{QJ%%mFypH^&W_tW zGM59LCz!}GPjp+;pJ}zu#+913EE0mD=8GX3HcW@)M+;328zv}ad+j=*&cN3a2fUh# zHd&DWJ09vuXTN9~sS)pCu;u+x6Ti!yBf%nw}h;^$fBD~#~7%DVHe=YRz$jHsGXVik8ND zPEPz3@2wRhV-D3{9ybH_HsSl^D_WY>T>!5(X;EkL->ou~#ZCBC6)aiB|WbSS|}%1p`E?ga_AU zwgitz;-5&PsnJ`Im_%z!b~4lCr#jAr3gtP&$_!3HS{Hvq347NtrZeC*$0`%Rn$Z-o zk~4h#w6EM`zuMgddY{g4M_J-RnE4dTnF0^yR(1rf-@+pW%JGPp(ze*lo*-$STiQ#z zc=4}#<+qeSu(4Ec8ENSAD!*1?g|K8;!{tUNiI2jY)~=vDL>1Maji5mjm5;FpzN{bsD2lq<`7 zZhk3p7Rk1)=-0n~CQGng<(L1hP&19}QA%W7ieG&IxpfGNJ{#3ydjLOD_GFuV8;#Dj{3 zZ6DUK^}{NM^^s+)Va>)RhgZNnzwfq;mr*QVmxkuP-sml`F{klcyTM|9n2KD-x~$Ge zSB+H7yk0&yID7%bU-y^Is%-j4Dg>EPN9tv=w)r)X$M6t(LNGP%mc;|P2OLQ0P>p{g zrc(d>MZ05mMj9>! zfix)&p9^(~97Hj@!N<<~8m5&RLV(nt_{y%Q;@uy-JsvT#_@;+u894ube67E!E3Ptq zWNs1?$8%TAG=y>B_K8Vy|I_UteAcnD!%Ty8JLF6iG@Ehk+&x2nrl3SY#lt>Bb){GdhzFce>ZT-LGt}y;sq03uaZ5Ko($Y{zH(!J z+2krLZlzveb|-}!w0~JpS~jmT)^`l2$<#|bu8Ky(*+XJ072T!D3`17kpgBb?rc|_4 zghXowVR%I%xMag9xXk+2ty>wDidyTbZR~>fw;Li<7e2{UiO{$~xl*QEVfwONl-7u- zD5O1%xIlmwtW57E

vBOErGnFZyE7^RAA5y~ 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 ArT_o{ literal 0 HcmV?d00001 From 12ef2ec94ae05ac33e8233736e89959130e68763 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 4 Apr 2014 00:33:39 -0700 Subject: [PATCH 014/197] Updating ycb version --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 493cf6b1..3f6d77c1 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -216,7 +216,7 @@ "version": "1.2.3" }, "ycb": { - "version": "1.1.0" + "version": "0.1.1" }, "async": { "version": "0.2.9" diff --git a/package.json b/package.json index 89c5f139..5aec987b 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "istanbul": "0.1.25", "uglify-js": "1.3.4", "xml-writer": "1.2.3", - "ycb": "1.1.0", + "ycb": "0.1.1", "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", From 7fb88d93ad9fee3db23077f9ae03f7bddeb75332 Mon Sep 17 00:00:00 2001 From: Oge Nnadi Date: Fri, 4 Apr 2014 10:46:15 -0400 Subject: [PATCH 015/197] Made the table render This change makes the table render in Github. Hopefully this will also make it render on the documentation site where it currently doesn't show up either. --- docs/arrow_cookbook/arrow_tutorial.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/arrow_cookbook/arrow_tutorial.rst b/docs/arrow_cookbook/arrow_tutorial.rst index f16cbabb..1e2c2b74 100644 --- a/docs/arrow_cookbook/arrow_tutorial.rst +++ b/docs/arrow_cookbook/arrow_tutorial.rst @@ -18,9 +18,9 @@ Unit Tests The demo includes a *unit_test* folder and includes two files: +---------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ -| `unit_test/src/greeter.js `_ | Simple YUI module that takes two parameters as input, inverses their order, and returns them as output | +| ``unit_test/src/greeter.js`` | Simple YUI module that takes two parameters as input, inverses their order, and returns them as output | +---------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ -| `unit_test/test/test-unit.js >`_ | Unit test to validate the function. | +| ``unit_test/test/test-unit.js`` | Unit test to validate the function. | +---------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ In the world of JS, unit tests validate JS functions/classes which do not interact with the DOM. Functionality which interacts with the DOM is usually considered to be functional and should be tested as such. @@ -193,4 +193,4 @@ Similarly, you can run functional tests (test-func.js) against the HTTP endpoint Conclusion ========== -As you can see, Arrow allows you to execute all types of tests (unit, functional and integration) using the same methodology. Unlike other frameworks, it does not dictate to you how to execute different tests. As far as Arrow is concerned, tests are just tests. \ No newline at end of file +As you can see, Arrow allows you to execute all types of tests (unit, functional and integration) using the same methodology. Unlike other frameworks, it does not dictate to you how to execute different tests. As far as Arrow is concerned, tests are just tests. From 61444e966541f5a54d7e9a63a7230f1bd45acd7f Mon Sep 17 00:00:00 2001 From: Ryan Ashcraft Date: Tue, 25 Mar 2014 14:52:21 -0700 Subject: [PATCH 016/197] Add test descriptor param for overriding window size. --- lib/driver/selenium.js | 21 +++++++++----- tests/functional/arrow_commands.sh | 13 ++++++++- .../window_size_test/test-browser-size.js | 16 +++++++++++ .../test_window_size_descriptor.json | 28 +++++++++++++++++++ 4 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 tests/functional/data/arrow_test/window_size_test/test-browser-size.js create mode 100755 tests/functional/data/arrow_test/window_size_test/test_window_size_descriptor.json diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index ef94700f..152f4bc6 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -571,9 +571,7 @@ SeleniumDriver.prototype.navigate = function (page, callback) { } else { // timeout is not implemented for mobile devices - if (!this.isMobile) { - webdriver.manage().window().maximize(); - } + self.resizeWindow(); self.logger.debug("Getting url:" + url); webdriver.get(url).then(function () { self.logger.debug("callback of webdriver get"); @@ -756,9 +754,7 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac caps = val; }); - if(!self.isMobile) { - webdriver.manage().window().maximize(); - } + self.resizeWindow(testParams.windowSize); // in case of html test, we need to load the test as a page if (".html" === path.extname(testJs)) { @@ -797,4 +793,15 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac }); }; -module.exports = SeleniumDriver; \ No newline at end of file +SeleniumDriver.prototype.resizeWindow = function(windowSize) { + if (!this.isMobile) { + if (windowSize) { + this.webdriver.manage().window().setPosition(0, 0); + this.webdriver.manage().window().setSize(parseInt(windowSize.width, 10), parseInt(windowSize.height, 10)); + } else { + this.webdriver.manage().window().maximize(); + } + } +}; + +module.exports = SeleniumDriver; diff --git a/tests/functional/arrow_commands.sh b/tests/functional/arrow_commands.sh index 1f55130a..3f20658e 100755 --- a/tests/functional/arrow_commands.sh +++ b/tests/functional/arrow_commands.sh @@ -396,4 +396,15 @@ if [ $? != 0 ]; then echo "RESULT: $RESULT" } fi -echo "===== Arrow test done! =====" \ No newline at end of file +let "CNT=$CNT+1" # TEST 33 +echo "TEST$CNT: window size test" +CMD=`$ARROWCI ./data/arrow_test/window_size_test/window_size_test.json | tail $TAILCOUNT | head $HEADCOUNT ` +echo_and_save $CNT "$CMD" +if [ $? != 0 ]; then +{ + echo "ERROR!" + echo "CMD: "$CMD"" + echo "RESULT: $RESULT" +} fi + +echo "===== Arrow test done! =====" diff --git a/tests/functional/data/arrow_test/window_size_test/test-browser-size.js b/tests/functional/data/arrow_test/window_size_test/test-browser-size.js new file mode 100644 index 00000000..5c09dae9 --- /dev/null +++ b/tests/functional/data/arrow_test/window_size_test/test-browser-size.js @@ -0,0 +1,16 @@ +YUI().use('test', function (Y) { + + var suite = new Y.Test.Suite("Browser size test"); + suite.add(new Y.Test.Case({ + + "test browser size equals parameter": function() { + var expectedSize = this.testParams['windowSize']; + + Y.Assert.areEqual(parseInt(expectedSize.width, 10), window.outerWidth); + Y.Assert.areEqual(parseInt(expectedSize.height, 10), window.outerHeight); + } + + })); + + Y.Test.Runner.add(suite); +}); diff --git a/tests/functional/data/arrow_test/window_size_test/test_window_size_descriptor.json b/tests/functional/data/arrow_test/window_size_test/test_window_size_descriptor.json new file mode 100755 index 00000000..f4aad6f8 --- /dev/null +++ b/tests/functional/data/arrow_test/window_size_test/test_window_size_descriptor.json @@ -0,0 +1,28 @@ +[ + { + "settings": [ "master" ], + "name" : "descriptor", + "config": { + "baseUrl": "http://login.yahoo.com" + }, + + "dataprovider" : { + + "Set browser size" : { + "group" : "func", + "browser":"firefox", + "params" :{ + "page": "$$config.baseUrl$$", + "test": "test-browser-size.js", + "windowSize": { + "width": "512", + "height": 512 + } + } + } + } + }, + { + "settings": [ "environment:development" ] + } +] From 5ec163c7d5ea0664bb22bfb87f0760bae3e06ade Mon Sep 17 00:00:00 2001 From: Ryan Ashcraft Date: Thu, 3 Apr 2014 10:56:31 -0700 Subject: [PATCH 017/197] Pass test params to driver navigate function. --- lib/controller/default.js | 4 ++-- lib/driver/selenium.js | 8 +++++--- tests/unit/lib/driver/selenium-tests.js | 24 ++++++++++++++++++------ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/lib/controller/default.js b/lib/controller/default.js index 29e6255a..75ec9c62 100644 --- a/lib/controller/default.js +++ b/lib/controller/default.js @@ -157,7 +157,7 @@ DefaultController.prototype.executeScenario = function (callback) { }; /** - * Default controller that opens a page and tests. It also handles scenario + * Default controller that opens a page and tests. It also handles scenario * execution if given. * * @param callback function to call when done. It receives errorMsg as a parameter. @@ -168,7 +168,7 @@ DefaultController.prototype.execute = function (callback) { self.executeScenario(callback); } else { if (!self.testParams.test && self.testParams.page) { - self.driver.navigate(self.testParams.page, callback); + self.driver.navigate(self.testParams, callback); } else if (self.testParams.test) { self.driver.executeTest(self.testConfig, self.testParams, callback); } else { diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 152f4bc6..3b435103 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -552,13 +552,14 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { /** * Driver interface method, called by controllers * - * @param page + * @param testParams parameters for this test * @params callback function to call once navigated */ -SeleniumDriver.prototype.navigate = function (page, callback) { +SeleniumDriver.prototype.navigate = function (testParams, callback) { var self = this, logger = this.logger, webdriver = this.webdriver, + page = testParams.page, url; self.logger.debug("Loading page in navigate: " + page); self.logger.info("Loading page: " + page); @@ -571,7 +572,8 @@ SeleniumDriver.prototype.navigate = function (page, callback) { } else { // timeout is not implemented for mobile devices - self.resizeWindow(); + self.logger.debug(JSON.stringify(testParams)); + self.resizeWindow(testParams.windowSize); self.logger.debug("Getting url:" + url); webdriver.get(url).then(function () { self.logger.debug("callback of webdriver get"); diff --git a/tests/unit/lib/driver/selenium-tests.js b/tests/unit/lib/driver/selenium-tests.js index 6261b825..fa4b15d5 100644 --- a/tests/unit/lib/driver/selenium-tests.js +++ b/tests/unit/lib/driver/selenium-tests.js @@ -150,12 +150,16 @@ YUI.add('selenium-tests', function (Y, NAME) { 'test navigation': function () { var driver, config, - actions; + actions, + params; config = {browser: 'mybrowser', seleniumHost: 'http://wdhub'}; driver = new DriverClass(config, {}); + params = { + page: 'http://mypage' + }; driver.start(function (errMsg) { - driver.navigate('http://mypage', function () { + driver.navigate(params, function () { driver.stop(function (errMsg) { }); }); @@ -168,12 +172,16 @@ YUI.add('selenium-tests', function (Y, NAME) { 'test navigation invalid page': function () { var driver, config, - actions; + actions, + params; config = {browser: 'mybrowser', seleniumHost: 'wdhub'}; driver = new DriverClass(config, {}); + params = { + page: 'http://mypage' + }; driver.start(function (errMsg) { - driver.navigate('http://mypage', function () { + driver.navigate(params, function () { driver.stop(function (errMsg) { }); }); @@ -187,12 +195,16 @@ YUI.add('selenium-tests', function (Y, NAME) { 'test navigation arrow server not running': function () { var driver, config, - actions; + actions, + params; config = {browser: 'mybrowser', seleniumHost: 'wdhub'}; driver = new DriverClass(config, {}); + params = { + page: 'mypage' + }; driver.start(function (errMsg) { - driver.navigate('mypage', function () { + driver.navigate(params, function () { driver.stop(function (errMsg) { }); }); From 1c13995af7eeee5cf62320e2db785762ce5d4631 Mon Sep 17 00:00:00 2001 From: Ryan Ashcraft Date: Thu, 3 Apr 2014 11:31:19 -0700 Subject: [PATCH 018/197] Set window position after resizing. --- lib/driver/selenium.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 3b435103..19ff1a90 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -798,8 +798,8 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac SeleniumDriver.prototype.resizeWindow = function(windowSize) { if (!this.isMobile) { if (windowSize) { - this.webdriver.manage().window().setPosition(0, 0); this.webdriver.manage().window().setSize(parseInt(windowSize.width, 10), parseInt(windowSize.height, 10)); + this.webdriver.manage().window().setPosition(0, 0); } else { this.webdriver.manage().window().maximize(); } From 02a91ac1140e3289d45e744f8972b893efb2abb6 Mon Sep 17 00:00:00 2001 From: Ryan Ashcraft Date: Thu, 3 Apr 2014 11:34:11 -0700 Subject: [PATCH 019/197] Make locator maximize window like default controller. --- lib/controller/locator.js | 4 ++++ lib/interface/arrow.js | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/controller/locator.js b/lib/controller/locator.js index 766b6c03..35943a96 100644 --- a/lib/controller/locator.js +++ b/lib/controller/locator.js @@ -120,6 +120,10 @@ LocatorController.prototype.execute = function (callback) { locator = webdriver.By[strategy](target); + if (self.driver.resizeWindow) { + self.driver.resizeWindow(self.testParams.windowSize); + } + function waitFn(currIndex, callback) { var element, loc; diff --git a/lib/interface/arrow.js b/lib/interface/arrow.js index 816dfc39..869a6327 100644 --- a/lib/interface/arrow.js +++ b/lib/interface/arrow.js @@ -94,7 +94,6 @@ Arrow.prototype.runController = function (controllerName, testConfig, testParams controller = new ControllerClass(testConfig, testParams, driver); this.logger.info("Executing controller: " + controllerName); - if (testParams.scenario) { driver.reports.startScenarioReport(); } else { From de4f155c0ccdcaeabe9fc462a99a5a48592d13e7 Mon Sep 17 00:00:00 2001 From: Ryan Ashcraft Date: Thu, 3 Apr 2014 16:51:36 -0700 Subject: [PATCH 020/197] Remove debug log. --- lib/controller/locator.js | 4 ---- lib/driver/selenium.js | 1 - lib/interface/arrow.js | 1 + 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/controller/locator.js b/lib/controller/locator.js index 35943a96..766b6c03 100644 --- a/lib/controller/locator.js +++ b/lib/controller/locator.js @@ -120,10 +120,6 @@ LocatorController.prototype.execute = function (callback) { locator = webdriver.By[strategy](target); - if (self.driver.resizeWindow) { - self.driver.resizeWindow(self.testParams.windowSize); - } - function waitFn(currIndex, callback) { var element, loc; diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 19ff1a90..410d7555 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -572,7 +572,6 @@ SeleniumDriver.prototype.navigate = function (testParams, callback) { } else { // timeout is not implemented for mobile devices - self.logger.debug(JSON.stringify(testParams)); self.resizeWindow(testParams.windowSize); self.logger.debug("Getting url:" + url); webdriver.get(url).then(function () { diff --git a/lib/interface/arrow.js b/lib/interface/arrow.js index 869a6327..816dfc39 100644 --- a/lib/interface/arrow.js +++ b/lib/interface/arrow.js @@ -94,6 +94,7 @@ Arrow.prototype.runController = function (controllerName, testConfig, testParams controller = new ControllerClass(testConfig, testParams, driver); this.logger.info("Executing controller: " + controllerName); + if (testParams.scenario) { driver.reports.startScenarioReport(); } else { From 1c4566b2545c7be58d727e134553fcd759292921 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 4 Apr 2014 17:42:42 -0700 Subject: [PATCH 021/197] Logging to a file after every 1000 lines --- lib/proxy/proxymanager.js | 29 +++++++++++--- tests/unit/lib/proxy/proxymanager-tests.js | 46 ++++++++++++++++++++-- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index bf74beaf..51c195d2 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -24,6 +24,8 @@ function ProxyManager(proxyConfig, config) { } else { this.fileName = "proxy.log"; } + this.logBuffer = []; + this.logLimit = 1000; global.proxyManager = {}; global.proxyManager.record = []; } @@ -142,6 +144,11 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } } + // Added for debugging + process.on('uncaughtException', function(err) { + self.logger.error("Uncaught exception :" + err.stack); + }); + this.logger.trace("Proxy Router Config :" + JSON.stringify(proxy_config)); portchecker.getFirstAvailable(minPort, maxPort, host, function (p, host) { @@ -525,13 +532,25 @@ ProxyManager.prototype.writeLog = function (logLine) { var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), data = decoder.write(logLine + "\n"), - fd; + fd, + self = this; + + self.logBuffer.push(data); - fd = fs.openSync(this.fileName, 'a'); - fs.writeSync(fd, data); - fs.closeSync(fd); + // TODO - Ideal way would be to open file once ,keep writing to it and then close it during teardown + // Only write after 1000 lines -// fs.appendFileSync(this.fileName, data); + if (self.logBuffer.length === self.logLimit) { + self.logBuffer = []; + try { + fd = fs.openSync(self.fileName, 'a'); + fs.writeSync(fd, self.logBuffer.toString()); + fs.closeSync(fd); + } + catch(e) { + self.logger.error(' Error in writing proxy log:' + e); + } + } }; diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index 76c1b717..35b0007a 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -403,16 +403,52 @@ YUI.add('proxymanager-tests', function (Y, NAME) { data; proxyManager.fileName = proxyLogfile; + proxyManager.logLimit = 1; + for (var i = 0; i < proxyManager.logLimit; i+=1) { + timestamp = new Date().getTime(); + proxyMsg = "This is proxy log" + timestamp; + proxyManager.writeLog(proxyMsg); + } + + setTimeout(function(){ + data = fs.readFileSync(proxyManager.fileName, 'utf8'); + + A.isNotNull(data,"Failed to read from proxy log file"); + console.log('data:' + data); + + var logArr = data.split(','); + + A.areEqual(1 ,logArr.length,'No. of lines in log file does not match , actual - ' + logArr.length + ' , expected - 1001'); + + fs.unlinkSync(proxyManager.fileName); + + }, 1000); + + + } + + /** + * + */ + function testWriteLogLessThan1000Lines() { + + var proxyManager = new ProxyManager(null, {}), + fs = require("fs"), + timestamp = new Date().getTime(), + proxyLogfile = "proxy_" + timestamp + ".log", + proxyMsg = "This is proxy log" + timestamp, + data; + + proxyManager.fileName = proxyLogfile; proxyManager.writeLog(proxyMsg); - data = fs.readFileSync(proxyManager.fileName, 'utf8'); - A.areEqual(proxyMsg + '\n', data, 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + data); - fs.unlinkSync(proxyManager.fileName); + A.areEqual(proxyMsg + '\n', proxyManager.logBuffer[0], 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + proxyManager.logBuffer[0]); } + /** * Test get options */ @@ -523,6 +559,10 @@ YUI.add('proxymanager-tests', function (Y, NAME) { testWriteLog(); }, + 'test proxy manager writeLog Less than 1000 lines': function () { + testWriteLogLessThan1000Lines(); + }, + 'test proxy manager get options': function () { testGetOptions(); }, From 23b9a550bbf1cf21d925113372e47db0c306c67e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 5 Apr 2014 14:03:40 -0700 Subject: [PATCH 022/197] Reverting changes for log --- lib/proxy/proxymanager.js | 29 +++----------- tests/unit/lib/proxy/proxymanager-tests.js | 46 ++-------------------- 2 files changed, 8 insertions(+), 67 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 51c195d2..bf74beaf 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -24,8 +24,6 @@ function ProxyManager(proxyConfig, config) { } else { this.fileName = "proxy.log"; } - this.logBuffer = []; - this.logLimit = 1000; global.proxyManager = {}; global.proxyManager.record = []; } @@ -144,11 +142,6 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } } - // Added for debugging - process.on('uncaughtException', function(err) { - self.logger.error("Uncaught exception :" + err.stack); - }); - this.logger.trace("Proxy Router Config :" + JSON.stringify(proxy_config)); portchecker.getFirstAvailable(minPort, maxPort, host, function (p, host) { @@ -532,25 +525,13 @@ ProxyManager.prototype.writeLog = function (logLine) { var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), data = decoder.write(logLine + "\n"), - fd, - self = this; - - self.logBuffer.push(data); + fd; - // TODO - Ideal way would be to open file once ,keep writing to it and then close it during teardown - // Only write after 1000 lines + fd = fs.openSync(this.fileName, 'a'); + fs.writeSync(fd, data); + fs.closeSync(fd); - if (self.logBuffer.length === self.logLimit) { - self.logBuffer = []; - try { - fd = fs.openSync(self.fileName, 'a'); - fs.writeSync(fd, self.logBuffer.toString()); - fs.closeSync(fd); - } - catch(e) { - self.logger.error(' Error in writing proxy log:' + e); - } - } +// fs.appendFileSync(this.fileName, data); }; diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index 35b0007a..76c1b717 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -403,52 +403,16 @@ YUI.add('proxymanager-tests', function (Y, NAME) { data; proxyManager.fileName = proxyLogfile; - proxyManager.logLimit = 1; - for (var i = 0; i < proxyManager.logLimit; i+=1) { - timestamp = new Date().getTime(); - proxyMsg = "This is proxy log" + timestamp; - proxyManager.writeLog(proxyMsg); - } - - setTimeout(function(){ - data = fs.readFileSync(proxyManager.fileName, 'utf8'); - - A.isNotNull(data,"Failed to read from proxy log file"); - console.log('data:' + data); - - var logArr = data.split(','); - - A.areEqual(1 ,logArr.length,'No. of lines in log file does not match , actual - ' + logArr.length + ' , expected - 1001'); - - fs.unlinkSync(proxyManager.fileName); - - }, 1000); - - - } - - /** - * - */ - function testWriteLogLessThan1000Lines() { - - var proxyManager = new ProxyManager(null, {}), - fs = require("fs"), - timestamp = new Date().getTime(), - proxyLogfile = "proxy_" + timestamp + ".log", - proxyMsg = "This is proxy log" + timestamp, - data; - - proxyManager.fileName = proxyLogfile; proxyManager.writeLog(proxyMsg); - A.areEqual(proxyMsg + '\n', proxyManager.logBuffer[0], 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + proxyManager.logBuffer[0]); + data = fs.readFileSync(proxyManager.fileName, 'utf8'); + A.areEqual(proxyMsg + '\n', data, 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + data); + fs.unlinkSync(proxyManager.fileName); } - /** * Test get options */ @@ -559,10 +523,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { testWriteLog(); }, - 'test proxy manager writeLog Less than 1000 lines': function () { - testWriteLogLessThan1000Lines(); - }, - 'test proxy manager get options': function () { testGetOptions(); }, From ae02d3f66dc066ee05916122de0e95a10736a376 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 5 Apr 2014 22:15:30 -0700 Subject: [PATCH 023/197] Using writeStream for proxy log --- lib/proxy/proxymanager.js | 38 ++--- lib/session/sessionfactory.js | 20 ++- lib/session/testexecutor.js | 18 +++ tests/unit/lib/proxy/proxymanager-tests.js | 155 ++++++++++++++++----- 4 files changed, 166 insertions(+), 65 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 51c195d2..a5ad45d3 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -15,19 +15,15 @@ var log4js = require("log4js"), var coverage = require("../util/coverage"); var zlib = require('zlib'); -function ProxyManager(proxyConfig, config) { +function ProxyManager(proxyConfig, config, proxyStream) { this.config = config || {}; this.proxyConfig = proxyConfig || {}; this.logger = log4js.getLogger("ProxyManager"); - if (global.workingDirectory) { - this.fileName = path.resolve(global.workingDirectory, "proxy.log"); - } else { - this.fileName = "proxy.log"; - } - this.logBuffer = []; - this.logLimit = 1000; global.proxyManager = {}; global.proxyManager.record = []; + + this.proxyStream = proxyStream; + } /** @@ -527,31 +523,25 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } }; -ProxyManager.prototype.writeLog = function (logLine) { +ProxyManager.prototype.writeLog = function (logLine, cb) { var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), data = decoder.write(logLine + "\n"), - fd, self = this; - self.logBuffer.push(data); - - // TODO - Ideal way would be to open file once ,keep writing to it and then close it during teardown - // Only write after 1000 lines - - if (self.logBuffer.length === self.logLimit) { - self.logBuffer = []; - try { - fd = fs.openSync(self.fileName, 'a'); - fs.writeSync(fd, self.logBuffer.toString()); - fs.closeSync(fd); + try { + if (self.proxyStream) { + self.proxyStream.write(data); } - catch(e) { - self.logger.error(' Error in writing proxy log:' + e); + + if (cb) { + cb(); } } - + catch(e){ + self.logger.error('Exception in writing log '); + } }; module.exports = ProxyManager; \ No newline at end of file diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 1ec0cf00..10cde583 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -73,6 +73,8 @@ function SessionFactory(config, args) { //proxy properties this.startProxyServer = undefined; this.proxyConfig = undefined; + this.proxyStream = undefined; + this.startProxy = false; // Contains information about the descriptor - No. of tests in descriptor, test suite name etc @@ -169,18 +171,15 @@ SessionFactory.prototype.getFactoryTests = function () { // Iterate over all descriptor files and get the tests for (i = 0; i < this.arrDescriptor.length; i += 1) { - descFile = this.arrDescriptor[i]; //TODO : use path module here relativePath = descFile.substring(0, descFile.lastIndexOf(global.pathSep)); dpreader = new DataProvider(this.config, this.args,descFile); testJson = dpreader.getTestData(); - if (!this.descriptorObj[descFile]) { this.descriptorObj[descFile] = {}; this.descriptorObj[descFile].testSessionCount = 0; } - this.descriptorObj[descFile].testSuiteName = testJson.name; //Check if the useSSL flag is set from either commandline or at descriptor level @@ -189,7 +188,6 @@ SessionFactory.prototype.getFactoryTests = function () { } else if (this.useSSL && testJson.useSSL != false) { testJson = this.setSSL(testJson); } - dp = testJson.dataprovider; commonLib = testJson.commonlib; testConfig = testJson.config; @@ -201,7 +199,6 @@ SessionFactory.prototype.getFactoryTests = function () { this.logger.trace(dp); this.logger.trace("controller config :"); this.logger.trace(testConfig); - // this.descLib = ""; if (commonLib) { descLib = this.libManager.getAllTest(commonLib, relativePath); @@ -215,7 +212,6 @@ SessionFactory.prototype.getFactoryTests = function () { descLib = this.libManager.getAllTest(this.args.lib, ""); } } - for (testName in dp) { testData = dp[testName]; @@ -377,7 +373,17 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { global.coverageMap.push.apply(global.coverageMap, results); } if (this.startProxy) { - this.logger.debug("closing proxy server"); + + this.logger.debug("closing proxy log stream"); + try { + if (this.proxyStream) { + this.proxyStream.close(); + } + } + catch(e) { + this.logger.error("Error in closing proxy stream" + e); + } + if (global.proxyManager.proxyServer) { global.proxyManager.proxyServer.close(); } diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 13ab56e2..418a1dc6 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -14,6 +14,7 @@ var clone = require('clone'); var path = require("path"); var os = require("os"); var async = require("async"); +var fs = require("fs"); var sf; var testExecutor; @@ -356,6 +357,23 @@ TestExecutor.prototype.setupProxy = function(callback) { if (sf.proxyConfigList && sf.proxyConfigList.length > 0) { + // Create write stream for proxy log + var proxyFile; + if (global.workingDirectory) { + + proxyFile = path.resolve(global.workingDirectory, "proxy.log"); + } else { + proxyFile = "proxy.log"; + } + + try { + fs.openSync(proxyFile,"w"); + sf.proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); + } + catch(e) { + self.logger.error('Error in creating stream for proxy log'); + } + testExecutor.logger.info('Number of Proxy servers needed to start:' + sf.proxyConfigList.length); async.eachSeries(sf.proxyConfigList, testExecutor.startProxy, function(err) { diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index 35b0007a..c969752b 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -21,6 +21,26 @@ YUI.add('proxymanager-tests', function (Y, NAME) { self = this; + function getProxyStream(proxyFile) { + + var fs = require('fs'); + + if (!proxyFile) { + var timestamp = new Date().getTime(); + proxyFile = "proxy_" + timestamp + ".log"; + } + + try { + fs.openSync(proxyFile,"w"); + proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); + } + catch(e) { + logger.error('Error in creating proxy stream ' + e); + } + return proxyStream; + + } + /** * If port is available, proxy server should be started */ @@ -33,7 +53,16 @@ YUI.add('proxymanager-tests', function (Y, NAME) { maxPort = 10900, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}), + proxyStream, + proxyFile, + fs = require('fs'); + + var timestamp = new Date().getTime(); + proxyFile = "proxy_" + timestamp + ".log"; + + proxyStream = getProxyStream(proxyFile); + + var proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), options, req; @@ -98,12 +127,17 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testClientSideInstrumentOnProxyServer() { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + var proxyStream = getProxyStream(proxyFile); + + // TODO - Check the first available port here starting from minPort var minPort = 10901, maxPort = 11000, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}), + proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), options, req; @@ -166,12 +200,17 @@ YUI.add('proxymanager-tests', function (Y, NAME) { // test proxy http client function testHttpClientOnProxyServer(test) { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); + // TODO - Check the first available port here starting from minPort var minPort = 11101, maxPort = 11199, hostName = "localhost", router = {}, - proxyManager = new ProxyManager(router, {}), + proxyManager = new ProxyManager(router, {}, proxyStream), options, req, server; @@ -287,9 +326,13 @@ YUI.add('proxymanager-tests', function (Y, NAME) { The router file's path is valid */ function testRouterValidJsonPath() { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); var routerJsonPath = "./config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}); + proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream); A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); } @@ -298,8 +341,16 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testRouterInvalidJsonPath() { + + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); + + + var routerJsonPath = ".invalidJson", - proxyManager = new ProxyManager(routerJsonPath, {}); + proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream); A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); } @@ -308,7 +359,12 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testNoJsonPath() { - var proxyManager = new ProxyManager(null, {}); + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); + + var proxyManager = new ProxyManager(null, {}, proxyStream); A.isNotNull(proxyManager.proxyConfig, 'Router Json Path shall be null'); } @@ -317,12 +373,17 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsNotAvailable(test) { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); + var minPort = 10701, maxPort = 10800, hostName = "localhost", server, - proxyManager = new ProxyManager(null, {}); + proxyManager = new ProxyManager(null, {}, proxyStream); portchecker.getFirstAvailable(minPort, maxPort, hostName, function (p, host) { @@ -362,13 +423,18 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsAvailable(test) { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); + var // TODO - Check the first available port here starting from minPort minPort = 10601, maxPort = 10700, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}), + proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), availablePort; A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); @@ -394,36 +460,40 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testWriteLog() { - var proxyManager = new ProxyManager(null, {}), - fs = require("fs"), - proxyFileData, + var fs = require("fs"); + var timestamp = new Date().getTime(), - proxyLogfile = "proxy_" + timestamp + ".log", - proxyMsg = "This is proxy log" + timestamp, - data; + proxyFile = "proxy_" + timestamp + ".log", + proxyStream; - proxyManager.fileName = proxyLogfile; - proxyManager.logLimit = 1; + try { - for (var i = 0; i < proxyManager.logLimit; i+=1) { - timestamp = new Date().getTime(); - proxyMsg = "This is proxy log" + timestamp; - proxyManager.writeLog(proxyMsg); - } + fs.openSync(proxyFile, "w"); + proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); - setTimeout(function(){ - data = fs.readFileSync(proxyManager.fileName, 'utf8'); + var proxyManager = new ProxyManager(null, {}, proxyStream), + proxyMsg = "This is proxy log" + timestamp, + data; - A.isNotNull(data,"Failed to read from proxy log file"); - console.log('data:' + data); + proxyManager.writeLog(proxyMsg, function(){ - var logArr = data.split(','); + proxyStream.close(function(){ - A.areEqual(1 ,logArr.length,'No. of lines in log file does not match , actual - ' + logArr.length + ' , expected - 1001'); + data = fs.readFileSync(proxyFile, 'utf8'); - fs.unlinkSync(proxyManager.fileName); + A.isNotNull(data,"Failed to read from proxy log file"); + console.log('data:' + data); + + A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); + + fs.unlinkSync(proxyFile); + }); + }); + } + catch(e) { + self.logger.error('Error in creating stream for proxy log'); + } - }, 1000); } @@ -453,9 +523,13 @@ YUI.add('proxymanager-tests', function (Y, NAME) { * Test get options */ function testGetOptions() { + var timestamp = new Date().getTime(); + var proxyFile = "proxy_" + timestamp + ".log"; + + var proxyStream = getProxyStream(proxyFile); var - proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}), + proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}, proxyStream), request = { 'headers': { 'host': 'yahoo.com', @@ -527,6 +601,23 @@ YUI.add('proxymanager-tests', function (Y, NAME) { }, 'tearDown': function () { + + var glob = require('glob'); + var fs = require('fs'); + var logFiles = glob.sync('proxy*.log'); + setTimeout(function(){ + logFiles.forEach(function(logFile){ + try { + fs.unlinkSync(logFile); + } + catch(e) { + logger.error('Error in removing ' + logFile); + } + + }); + + }, 5000); + //logger.info('>>>teardown Proxymanager tests'); }, @@ -559,10 +650,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { testWriteLog(); }, - 'test proxy manager writeLog Less than 1000 lines': function () { - testWriteLogLessThan1000Lines(); - }, - 'test proxy manager get options': function () { testGetOptions(); }, From 7d5096bccb40f2849c283531a0dfec8de800328a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 6 Apr 2014 00:18:42 -0700 Subject: [PATCH 024/197] Setting startProxy flag --- lib/session/testexecutor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 418a1dc6..8e5ee57f 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -357,10 +357,10 @@ TestExecutor.prototype.setupProxy = function(callback) { if (sf.proxyConfigList && sf.proxyConfigList.length > 0) { + sf.startProxy = true; // Create write stream for proxy log var proxyFile; if (global.workingDirectory) { - proxyFile = path.resolve(global.workingDirectory, "proxy.log"); } else { proxyFile = "proxy.log"; From 3c2831c397892172e8a66ee467ff0fda83f8be7a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 6 Apr 2014 00:30:49 -0700 Subject: [PATCH 025/197] Changing method to end --- lib/session/sessionfactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 10cde583..9ca864cd 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -377,7 +377,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { this.logger.debug("closing proxy log stream"); try { if (this.proxyStream) { - this.proxyStream.close(); + this.proxyStream.end(); } } catch(e) { From d4c3af2aad04b523048822c601e228302e755441 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 6 Apr 2014 01:16:17 -0700 Subject: [PATCH 026/197] Adding debug statement --- lib/session/testexecutor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 8e5ee57f..9f9e319d 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -367,6 +367,7 @@ TestExecutor.prototype.setupProxy = function(callback) { } try { + self.logger.debug('Creating write stream for ' + proxyFile); fs.openSync(proxyFile,"w"); sf.proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); } From 38e33e1975d6dbfb67745ba6b921e9ac96a051a7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 6 Apr 2014 19:34:00 -0700 Subject: [PATCH 027/197] Fix for proxy logs --- lib/proxy/proxymanager.js | 14 +- lib/session/sessionfactory.js | 8 +- lib/session/testexecutor.js | 15 +- tests/unit/lib/proxy/proxymanager-tests.js | 195 +++++++++++---------- 4 files changed, 122 insertions(+), 110 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index a5ad45d3..07ebd573 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -15,15 +15,14 @@ var log4js = require("log4js"), var coverage = require("../util/coverage"); var zlib = require('zlib'); -function ProxyManager(proxyConfig, config, proxyStream) { +function ProxyManager(proxyConfig, config, proxyFile) { this.config = config || {}; this.proxyConfig = proxyConfig || {}; this.logger = log4js.getLogger("ProxyManager"); global.proxyManager = {}; global.proxyManager.record = []; - this.proxyStream = proxyStream; - + this.proxyFile = proxyFile; } /** @@ -444,7 +443,7 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } }); - self.writeLog(port + ":" + reqUrl + ":" + proxy_response.statusCode); + self.writeLog(p + ":" + reqUrl + ":" + proxy_response.statusCode); //(url, resHeaders) response.writeHead(proxy_response.statusCode, proxy_response.headers); @@ -531,8 +530,9 @@ ProxyManager.prototype.writeLog = function (logLine, cb) { self = this; try { - if (self.proxyStream) { - self.proxyStream.write(data); + + if (self.proxyFile) { + fs.appendFileSync(self.proxyFile, data); } if (cb) { @@ -540,7 +540,7 @@ ProxyManager.prototype.writeLog = function (logLine, cb) { } } catch(e){ - self.logger.error('Exception in writing log '); + self.logger.error('Exception in writing log ' + e); } }; diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 9ca864cd..9020736e 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -73,7 +73,7 @@ function SessionFactory(config, args) { //proxy properties this.startProxyServer = undefined; this.proxyConfig = undefined; - this.proxyStream = undefined; + this.proxyLogHandler = undefined; this.startProxy = false; @@ -374,10 +374,10 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (this.startProxy) { - this.logger.debug("closing proxy log stream"); + this.logger.debug("closing proxy log"); try { - if (this.proxyStream) { - this.proxyStream.end(); + if (this.proxyLogHandler) { + fs.closeSync(this.proxyLogHandler); } } catch(e) { diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 9f9e319d..80b618a8 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -104,7 +104,12 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { testExecutor.logger.info('Starting proxy server : ' + proxyConfigPath); - var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config); + var proxyFile = "proxy.log"; + if (global.workingDirectory) { + proxyFile = path.resolve(global.workingDirectory, proxyFile); + } + + var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, proxyFile); proxyManager.runRouterProxy(sf.config.minPort, sf.config.maxPort, global.hostname, function(proxyHost) { @@ -350,6 +355,8 @@ TestExecutor.prototype.populateProxyConfigList = function(callback) { TestExecutor.prototype.setupProxy = function(callback) { + var self = this; + // If set from command line if (sf.args.startProxyServer === true || sf.args.startProxyServer === undefined) { @@ -368,11 +375,11 @@ TestExecutor.prototype.setupProxy = function(callback) { try { self.logger.debug('Creating write stream for ' + proxyFile); - fs.openSync(proxyFile,"w"); - sf.proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); + sf.proxyLogHandler = fs.openSync(proxyFile,"w"); +// sf.proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); } catch(e) { - self.logger.error('Error in creating stream for proxy log'); + self.logger.error('Error in creating stream for proxy log, error::' + e); } testExecutor.logger.info('Number of Proxy servers needed to start:' + sf.proxyConfigList.length); diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index c969752b..ef7ea24e 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -13,21 +13,32 @@ YUI.add('proxymanager-tests', function (Y, NAME) { log4js = require("log4js"), logger = log4js.getLogger("ProxyManagerTests"), arrowRoot = path.join(__dirname, '../../../../'), + FileUtil = require("../../../../lib/util/fileUtil.js"), ProxyManager = require("../../../../lib/proxy/proxymanager.js"), portchecker = require("../../../../ext-lib/portchecker"), localhostip = require('../../../../arrow_server/arrowservermanager').getLocalhostIPAddress(), suite = new Y.Test.Suite(NAME), A = Y.Assert, - self = this; + self = this, + fileUtil = new FileUtil(); + function getProxyFileName() { + var hrTime = process.hrtime(); + var proxyFileName = "proxy_"; + proxyFileName += (hrTime[0] * 1000 + hrTime[1] / 1000); + proxyFileName += ".log"; + return proxyFileName; + } + function getProxyStream(proxyFile) { var fs = require('fs'); if (!proxyFile) { - var timestamp = new Date().getTime(); - proxyFile = "proxy_" + timestamp + ".log"; + proxyFile = getProxyFileName(); +// var timestamp = new Date().getTime(); +// proxyFile = "proxy_" + timestamp + ".log"; } try { @@ -57,12 +68,12 @@ YUI.add('proxymanager-tests', function (Y, NAME) { proxyFile, fs = require('fs'); - var timestamp = new Date().getTime(); - proxyFile = "proxy_" + timestamp + ".log"; +// var timestamp = new Date().getTime(); +// proxyFile = "proxy_" + timestamp + ".log"; - proxyStream = getProxyStream(proxyFile); + proxyFile = getProxyFileName(); - var proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), + var proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), options, req; @@ -72,6 +83,7 @@ YUI.add('proxymanager-tests', function (Y, NAME) { A.areNotEqual(proxyHostMsg, 'localhost:' + minPort, 'Proxy host should not match'); A.areEqual(proxyHostMsg, localhostip + ':' + minPort, 'Proxy host doesn\'t match'); +// fileUtil.deleteFile(proxyFile); callback(); }); @@ -86,6 +98,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello world"); response.end(); + fileUtil.deleteFile(proxyFile,function(){ + + }); } @@ -127,17 +142,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testClientSideInstrumentOnProxyServer() { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - var proxyStream = getProxyStream(proxyFile); - + var proxyFile = getProxyFileName(); // TODO - Check the first available port here starting from minPort var minPort = 10901, maxPort = 11000, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), + proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), options, req; @@ -191,7 +203,11 @@ YUI.add('proxymanager-tests', function (Y, NAME) { setTimeout(function () { proxyManager.proxyServer.close(); - }, 2000); + fileUtil.deleteFile(proxyFile,function(){ + + }); + + }, 4000); }); @@ -200,17 +216,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { // test proxy http client function testHttpClientOnProxyServer(test) { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); + var proxyFile = getProxyFileName(); // TODO - Check the first available port here starting from minPort var minPort = 11101, maxPort = 11199, hostName = "localhost", router = {}, - proxyManager = new ProxyManager(router, {}, proxyStream), + proxyManager = new ProxyManager(router, {}, proxyFile), options, req, server; @@ -315,6 +328,10 @@ YUI.add('proxymanager-tests', function (Y, NAME) { setTimeout(function () { server.close(); proxyManager.proxyServer.close(); + fileUtil.deleteFile(proxyFile,function(){ + + }); + }, 2000); } ) @@ -326,14 +343,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { The router file's path is valid */ function testRouterValidJsonPath() { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); - + var proxyFile = getProxyFileName(); var routerJsonPath = "./config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream); + proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile); A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); + fileUtil.deleteFile(proxyFile,function(){ + + }); + } /* @@ -342,16 +359,15 @@ YUI.add('proxymanager-tests', function (Y, NAME) { function testRouterInvalidJsonPath() { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); + var proxyFile = getProxyFileName(); + var routerJsonPath = ".invalidJson", + proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile); + A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); + fileUtil.deleteFile(proxyFile,function(){ + }); - var routerJsonPath = ".invalidJson", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream); - A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); } /* @@ -359,13 +375,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testNoJsonPath() { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); + var proxyFile = getProxyFileName(); - var proxyManager = new ProxyManager(null, {}, proxyStream); + var proxyManager = new ProxyManager(null, {}, proxyFile); A.isNotNull(proxyManager.proxyConfig, 'Router Json Path shall be null'); + fileUtil.deleteFile(proxyFile,function(){ + + }); + } /** @@ -373,17 +390,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsNotAvailable(test) { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); + var proxyFile = getProxyFileName(); var minPort = 10701, maxPort = 10800, hostName = "localhost", server, - proxyManager = new ProxyManager(null, {}, proxyStream); + proxyManager = new ProxyManager(null, {}, proxyFile); portchecker.getFirstAvailable(minPort, maxPort, hostName, function (p, host) { @@ -405,6 +419,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { server.close(function () { }); + fileUtil.deleteFile(proxyFile,function(){ + + }); }); }); @@ -423,8 +440,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsAvailable(test) { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; + var proxyFile = getProxyFileName(); +// var timestamp = new Date().getTime(); +// var proxyFile = "proxy_" + timestamp + ".log"; var proxyStream = getProxyStream(proxyFile); @@ -434,7 +452,7 @@ YUI.add('proxymanager-tests', function (Y, NAME) { maxPort = 10700, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyStream), + proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), availablePort; A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); @@ -447,6 +465,10 @@ YUI.add('proxymanager-tests', function (Y, NAME) { availablePort = proxyHostMsg.split(':'); YUITest = Y.Test; A.areEqual(proxyHostMsg, localhostip + ':' + availablePort[1], 'Proxy host doesn\'t match'); + fileUtil.deleteFile(proxyFile,function(){ + + }); + }); }); @@ -462,32 +484,31 @@ YUI.add('proxymanager-tests', function (Y, NAME) { var fs = require("fs"); var + proxyFile = getProxyFileName(), timestamp = new Date().getTime(), - proxyFile = "proxy_" + timestamp + ".log", +// proxyFile = "proxy_" + timestamp + ".log", proxyStream; try { fs.openSync(proxyFile, "w"); - proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); - var proxyManager = new ProxyManager(null, {}, proxyStream), + var proxyManager = new ProxyManager(null, {}, proxyFile), proxyMsg = "This is proxy log" + timestamp, data; proxyManager.writeLog(proxyMsg, function(){ - proxyStream.close(function(){ + data = fs.readFileSync(proxyFile, 'utf8'); - data = fs.readFileSync(proxyFile, 'utf8'); + A.isNotNull(data,"Failed to read from proxy log file"); + console.log('data:' + data); - A.isNotNull(data,"Failed to read from proxy log file"); - console.log('data:' + data); + A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); + fileUtil.deleteFile(proxyFile,function(){ - A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); - - fs.unlinkSync(proxyFile); }); + }); } catch(e) { @@ -498,38 +519,16 @@ YUI.add('proxymanager-tests', function (Y, NAME) { } - /** - * - */ - function testWriteLogLessThan1000Lines() { - - var proxyManager = new ProxyManager(null, {}), - fs = require("fs"), - timestamp = new Date().getTime(), - proxyLogfile = "proxy_" + timestamp + ".log", - proxyMsg = "This is proxy log" + timestamp, - data; - - proxyManager.fileName = proxyLogfile; - proxyManager.writeLog(proxyMsg); - - A.areEqual(proxyMsg + '\n', proxyManager.logBuffer[0], 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + proxyManager.logBuffer[0]); - - } - - - /** * Test get options */ function testGetOptions() { - var timestamp = new Date().getTime(); - var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); + var proxyFile = getProxyFileName(); +// var timestamp = new Date().getTime(); +// var proxyFile = "proxy_" + timestamp + ".log"; var - proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}, proxyStream), + proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}, proxyFile), request = { 'headers': { 'host': 'yahoo.com', @@ -590,6 +589,10 @@ YUI.add('proxymanager-tests', function (Y, NAME) { A.areEqual(options.headers["proxy-connection"], "keep-alive", "Headers - proxy-connection doesnt match"); A.areEqual(options.headers.referer, "ref.yahoo.com", "Headers - referer doesnt match"); A.areEqual(options.headers.cookie, "ProxyCookie", "Headers - cookie doesnt match"); + fileUtil.deleteFile(proxyFile,function(){ + + }); + } @@ -602,25 +605,26 @@ YUI.add('proxymanager-tests', function (Y, NAME) { 'tearDown': function () { - var glob = require('glob'); - var fs = require('fs'); - var logFiles = glob.sync('proxy*.log'); - setTimeout(function(){ - logFiles.forEach(function(logFile){ - try { - fs.unlinkSync(logFile); - } - catch(e) { - logger.error('Error in removing ' + logFile); - } - - }); - - }, 5000); +// var glob = require('glob'); +// var fs = require('fs'); +// var logFiles = glob.sync('proxy*.log'); +// setTimeout(function(){ +// logFiles.forEach(function(logFile){ +// try { +// fs.unlinkSync(logFile); +// } +// catch(e) { +// logger.error('Error in removing ' + logFile + ' ,e :' + e); +// } +// +// }); +// +// }, 5000); //logger.info('>>>teardown Proxymanager tests'); }, + 'test proxy manager No Ports Available': function () { testPortsNotAvailable(this); }, @@ -658,6 +662,7 @@ YUI.add('proxymanager-tests', function (Y, NAME) { var test = this; testClientSideInstrumentOnProxyServer(test); }, + 'test proxy manager client request ': function () { var test = this; testHttpClientOnProxyServer(test); From 561149e06a8f463a797c4253a7d043c8991605da Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 10:23:43 -0700 Subject: [PATCH 028/197] Fixing error msg --- lib/session/sessionfactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 9020736e..9c578e39 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -381,7 +381,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } } catch(e) { - this.logger.error("Error in closing proxy stream" + e); + this.logger.error("Error in closing proxy log " + e); } if (global.proxyManager.proxyServer) { From 97baf6795b8967399384b3e9b3301746de69e5a2 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 10:46:42 -0700 Subject: [PATCH 029/197] Refactoring --- lib/proxy/proxymanager.js | 13 ++-- lib/session/testexecutor.js | 49 +++++++------- tests/unit/lib/proxy/proxymanager-tests.js | 74 +++------------------- 3 files changed, 41 insertions(+), 95 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 07ebd573..c31c3850 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -15,14 +15,14 @@ var log4js = require("log4js"), var coverage = require("../util/coverage"); var zlib = require('zlib'); -function ProxyManager(proxyConfig, config, proxyFile) { +function ProxyManager(proxyConfig, config, proxyLogFile) { this.config = config || {}; this.proxyConfig = proxyConfig || {}; this.logger = log4js.getLogger("ProxyManager"); global.proxyManager = {}; global.proxyManager.record = []; - this.proxyFile = proxyFile; + this.proxyLogFile = proxyLogFile; } /** @@ -522,7 +522,7 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } }; -ProxyManager.prototype.writeLog = function (logLine, cb) { +ProxyManager.prototype.writeLog = function (logLine) { var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), @@ -531,13 +531,10 @@ ProxyManager.prototype.writeLog = function (logLine, cb) { try { - if (self.proxyFile) { - fs.appendFileSync(self.proxyFile, data); + if (self.proxyLogFile) { + fs.appendFileSync(self.proxyLogFile, data); } - if (cb) { - cb(); - } } catch(e){ self.logger.error('Exception in writing log ' + e); diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 80b618a8..04925582 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -104,12 +104,7 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { testExecutor.logger.info('Starting proxy server : ' + proxyConfigPath); - var proxyFile = "proxy.log"; - if (global.workingDirectory) { - proxyFile = path.resolve(global.workingDirectory, proxyFile); - } - - var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, proxyFile); + var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, this.getProxyLogFileName()); proxyManager.runRouterProxy(sf.config.minPort, sf.config.maxPort, global.hostname, function(proxyHost) { @@ -132,6 +127,20 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { }; +/** + * Return the proxy log file name + * @returns {string} + */ +TestExecutor.prototype.getProxyLogFileName = function() { + + var proxyFile = "proxy.log"; + if (global.workingDirectory) { + proxyFile = global.workingDirectory ? path.resolve(global.workingDirectory, proxyFile) : proxyFile; + } + return proxyFile; +} + + TestExecutor.prototype.runNextTest = function(testQueue) { var testSession, @@ -365,22 +374,6 @@ TestExecutor.prototype.setupProxy = function(callback) { if (sf.proxyConfigList && sf.proxyConfigList.length > 0) { sf.startProxy = true; - // Create write stream for proxy log - var proxyFile; - if (global.workingDirectory) { - proxyFile = path.resolve(global.workingDirectory, "proxy.log"); - } else { - proxyFile = "proxy.log"; - } - - try { - self.logger.debug('Creating write stream for ' + proxyFile); - sf.proxyLogHandler = fs.openSync(proxyFile,"w"); -// sf.proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); - } - catch(e) { - self.logger.error('Error in creating stream for proxy log, error::' + e); - } testExecutor.logger.info('Number of Proxy servers needed to start:' + sf.proxyConfigList.length); @@ -389,7 +382,19 @@ TestExecutor.prototype.setupProxy = function(callback) { if (err) { testExecutor.logger.error('ERROR !! Failed to start proxy servers..'); } else { + + // Create log file for proxy + try { + var proxyLogFile = self.getProxyLogFileName(); + self.logger.debug('Creating proxy log file ' + proxyLogFile); + sf.proxyLogHandler = fs.openSync(proxyLogFile,"w"); + } + catch(e) { + self.logger.error('Error in creating stream for proxy log, error::' + e); + } + testExecutor.logger.info('Started all proxy servers..Now running tests\n\n'); + } callback(); diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index ef7ea24e..0ff64b75 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -31,27 +31,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { return proxyFileName; } - function getProxyStream(proxyFile) { - - var fs = require('fs'); - - if (!proxyFile) { - proxyFile = getProxyFileName(); -// var timestamp = new Date().getTime(); -// proxyFile = "proxy_" + timestamp + ".log"; - } - - try { - fs.openSync(proxyFile,"w"); - proxyStream = fs.createWriteStream(proxyFile, { flags : 'a' }); - } - catch(e) { - logger.error('Error in creating proxy stream ' + e); - } - return proxyStream; - - } - /** * If port is available, proxy server should be started */ @@ -64,13 +43,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { maxPort = 10900, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyStream, proxyFile, fs = require('fs'); -// var timestamp = new Date().getTime(); -// proxyFile = "proxy_" + timestamp + ".log"; - proxyFile = getProxyFileName(); var proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), @@ -83,7 +58,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { A.areNotEqual(proxyHostMsg, 'localhost:' + minPort, 'Proxy host should not match'); A.areEqual(proxyHostMsg, localhostip + ':' + minPort, 'Proxy host doesn\'t match'); -// fileUtil.deleteFile(proxyFile); callback(); }); @@ -441,10 +415,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { function testPortsAvailable(test) { var proxyFile = getProxyFileName(); -// var timestamp = new Date().getTime(); -// var proxyFile = "proxy_" + timestamp + ".log"; - - var proxyStream = getProxyStream(proxyFile); var // TODO - Check the first available port here starting from minPort @@ -482,12 +452,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testWriteLog() { - var fs = require("fs"); - var + var fs = require("fs"), proxyFile = getProxyFileName(), - timestamp = new Date().getTime(), -// proxyFile = "proxy_" + timestamp + ".log", - proxyStream; + timestamp = new Date().getTime(); try { @@ -497,26 +464,22 @@ YUI.add('proxymanager-tests', function (Y, NAME) { proxyMsg = "This is proxy log" + timestamp, data; - proxyManager.writeLog(proxyMsg, function(){ - - data = fs.readFileSync(proxyFile, 'utf8'); - - A.isNotNull(data,"Failed to read from proxy log file"); - console.log('data:' + data); + proxyManager.writeLog(proxyMsg); - A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); - fileUtil.deleteFile(proxyFile,function(){ + data = fs.readFileSync(proxyFile, 'utf8'); - }); + A.isNotNull(data,"Failed to read from proxy log file"); + console.log('data:' + data); + A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); + fileUtil.deleteFile(proxyFile,function(){ }); + } catch(e) { self.logger.error('Error in creating stream for proxy log'); } - - } /** @@ -524,8 +487,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testGetOptions() { var proxyFile = getProxyFileName(); -// var timestamp = new Date().getTime(); -// var proxyFile = "proxy_" + timestamp + ".log"; var proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}, proxyFile), @@ -605,23 +566,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { 'tearDown': function () { -// var glob = require('glob'); -// var fs = require('fs'); -// var logFiles = glob.sync('proxy*.log'); -// setTimeout(function(){ -// logFiles.forEach(function(logFile){ -// try { -// fs.unlinkSync(logFile); -// } -// catch(e) { -// logger.error('Error in removing ' + logFile + ' ,e :' + e); -// } -// -// }); -// -// }, 5000); - - //logger.info('>>>teardown Proxymanager tests'); }, From 8a1f9a3f1cb2b831c8116c559a098445cd7ce343 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 10:59:11 -0700 Subject: [PATCH 030/197] Cleanup --- lib/session/sessionfactory.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 9c578e39..b0d0bd19 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -74,7 +74,6 @@ function SessionFactory(config, args) { this.startProxyServer = undefined; this.proxyConfig = undefined; this.proxyLogHandler = undefined; - this.startProxy = false; // Contains information about the descriptor - No. of tests in descriptor, test suite name etc From dfd8d3665b31cb9a66b75d277480067dd8156a7f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 11:18:10 -0700 Subject: [PATCH 031/197] Fixing call for getProxyLogFilename --- lib/session/testexecutor.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 04925582..d398493a 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -104,7 +104,7 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { testExecutor.logger.info('Starting proxy server : ' + proxyConfigPath); - var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, this.getProxyLogFileName()); + var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, testExecutor.getProxyLogFileName()); proxyManager.runRouterProxy(sf.config.minPort, sf.config.maxPort, global.hostname, function(proxyHost) { @@ -138,8 +138,7 @@ TestExecutor.prototype.getProxyLogFileName = function() { proxyFile = global.workingDirectory ? path.resolve(global.workingDirectory, proxyFile) : proxyFile; } return proxyFile; -} - +}; TestExecutor.prototype.runNextTest = function(testQueue) { From 18764c586f904615a13b8d318eb44095e2766e93 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 13:32:09 -0700 Subject: [PATCH 032/197] Reverting to 2 secs --- tests/unit/lib/proxy/proxymanager-tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index 0ff64b75..944a122b 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -181,7 +181,7 @@ YUI.add('proxymanager-tests', function (Y, NAME) { }); - }, 4000); + }, 2000); }); From 3b7cba07bb5df77017ad70c6b13ac67385b12dd9 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 13:42:24 -0700 Subject: [PATCH 033/197] Handling uncaught exceptions --- lib/proxy/proxymanager.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index e73168d2..ea55d53c 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -128,6 +128,11 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba needsClientCoverage = false, tmpPath = require("../util/sharelibscanner").scannerUtil.getShareLibMetaPath(); + // Added for debugging + process.on('uncaughtException', function(err) { + self.logger.error("Uncaught exception in ProxyManager :" + err.stack); + }); + try { // Need to check/maintain how many descriptors require proxy.Set path for those descriptors at testSession level From 0f72709f852f827e0511737f6ab031fd8b6a6fe6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 16:16:06 -0700 Subject: [PATCH 034/197] Fixes for proxy log --- lib/proxy/proxymanager.js | 17 ++++++++-- lib/session/sessionfactory.js | 11 ------- lib/session/testexecutor.js | 25 +------------- tests/unit/lib/proxy/proxymanager-tests.js | 38 ++++++++-------------- 4 files changed, 30 insertions(+), 61 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index ea55d53c..f477ce1d 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -15,14 +15,14 @@ var log4js = require("log4js"), var coverage = require("../util/coverage"); var zlib = require('zlib'); -function ProxyManager(proxyConfig, config, proxyLogFile) { +function ProxyManager(proxyConfig, config) { this.config = config || {}; this.proxyConfig = proxyConfig || {}; this.logger = log4js.getLogger("ProxyManager"); global.proxyManager = {}; global.proxyManager.record = []; - this.proxyLogFile = proxyLogFile; + this.proxyLogFile = this.getProxyLogFileName(); } /** @@ -57,6 +57,19 @@ ProxyManager.prototype.recordTraffic = function(router, request, response) { }; +/** + * Return the proxy log file name + * @returns {string} + */ +ProxyManager.prototype.getProxyLogFileName = function() { + + var proxyFile = "proxy.log"; + if (global.workingDirectory) { + proxyFile = global.workingDirectory ? path.resolve(global.workingDirectory, proxyFile) : proxyFile; + } + return proxyFile; +}; + /** * * @param router - proxy configuration defined in json file diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index b0d0bd19..6a9aadaf 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -73,7 +73,6 @@ function SessionFactory(config, args) { //proxy properties this.startProxyServer = undefined; this.proxyConfig = undefined; - this.proxyLogHandler = undefined; this.startProxy = false; // Contains information about the descriptor - No. of tests in descriptor, test suite name etc @@ -373,16 +372,6 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (this.startProxy) { - this.logger.debug("closing proxy log"); - try { - if (this.proxyLogHandler) { - fs.closeSync(this.proxyLogHandler); - } - } - catch(e) { - this.logger.error("Error in closing proxy log " + e); - } - if (global.proxyManager.proxyServer) { global.proxyManager.proxyServer.close(); } diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index d398493a..20fc2b40 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -104,7 +104,7 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { testExecutor.logger.info('Starting proxy server : ' + proxyConfigPath); - var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config, testExecutor.getProxyLogFileName()); + var proxyManager = new ProxyManager(path.resolve(global.workingDirectory, proxyConfigPath),sf.config); proxyManager.runRouterProxy(sf.config.minPort, sf.config.maxPort, global.hostname, function(proxyHost) { @@ -127,19 +127,6 @@ TestExecutor.prototype.startProxy = function(proxyConfigPath, callback) { }; -/** - * Return the proxy log file name - * @returns {string} - */ -TestExecutor.prototype.getProxyLogFileName = function() { - - var proxyFile = "proxy.log"; - if (global.workingDirectory) { - proxyFile = global.workingDirectory ? path.resolve(global.workingDirectory, proxyFile) : proxyFile; - } - return proxyFile; -}; - TestExecutor.prototype.runNextTest = function(testQueue) { var testSession, @@ -382,16 +369,6 @@ TestExecutor.prototype.setupProxy = function(callback) { testExecutor.logger.error('ERROR !! Failed to start proxy servers..'); } else { - // Create log file for proxy - try { - var proxyLogFile = self.getProxyLogFileName(); - self.logger.debug('Creating proxy log file ' + proxyLogFile); - sf.proxyLogHandler = fs.openSync(proxyLogFile,"w"); - } - catch(e) { - self.logger.error('Error in creating stream for proxy log, error::' + e); - } - testExecutor.logger.info('Started all proxy servers..Now running tests\n\n'); } diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index 944a122b..afd9b313 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -447,38 +447,28 @@ YUI.add('proxymanager-tests', function (Y, NAME) { } + /** + * + */ /** * */ function testWriteLog() { - var fs = require("fs"), - proxyFile = getProxyFileName(), - timestamp = new Date().getTime(); - - try { - - fs.openSync(proxyFile, "w"); - - var proxyManager = new ProxyManager(null, {}, proxyFile), - proxyMsg = "This is proxy log" + timestamp, - data; + var proxyManager = new ProxyManager(null, {}), + fs = require("fs"), + timestamp = new Date().getTime(), + proxyLogfile = "proxy_" + timestamp + ".log", + proxyMsg = "This is proxy log" + timestamp, + data; - proxyManager.writeLog(proxyMsg); + proxyManager.proxyLogFile = proxyLogfile; - data = fs.readFileSync(proxyFile, 'utf8'); + proxyManager.writeLog(proxyMsg); - A.isNotNull(data,"Failed to read from proxy log file"); - console.log('data:' + data); - - A.areEqual(proxyMsg + '\n', data, "Proxy log doesnt match"); - fileUtil.deleteFile(proxyFile,function(){ - }); - - } - catch(e) { - self.logger.error('Error in creating stream for proxy log'); - } + data = fs.readFileSync(proxyManager.proxyLogFile, 'utf8'); + A.areEqual(proxyMsg + '\n', data, 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + data); + fs.unlinkSync(proxyManager.proxyLogFile); } From e8d6751939516726eb614939d418b74a3547311e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 16:45:44 -0700 Subject: [PATCH 035/197] Reverting changes, using appendSync --- lib/proxy/proxymanager.js | 5 +- lib/session/sessionfactory.js | 8 +- lib/session/testexecutor.js | 7 -- tests/unit/lib/proxy/proxymanager-tests.js | 98 ++++------------------ 4 files changed, 27 insertions(+), 91 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index f477ce1d..bf2f656a 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -23,6 +23,7 @@ function ProxyManager(proxyConfig, config) { global.proxyManager.record = []; this.proxyLogFile = this.getProxyLogFileName(); + console.log('**Proxy log file' + this.proxyLogFile); } /** @@ -536,7 +537,7 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba }; ProxyManager.prototype.writeLog = function (logLine) { - + console.log('***This proxy log:' + this.proxyLogFile); var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), data = decoder.write(logLine + "\n"), @@ -545,11 +546,13 @@ ProxyManager.prototype.writeLog = function (logLine) { try { if (self.proxyLogFile) { + console.log('***Writing to :' + self.proxyLogFile); fs.appendFileSync(self.proxyLogFile, data); } } catch(e){ self.logger.error('Exception in writing proxy log ' + e); + console.log('Exception in writing proxy log ' + e); } }; diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 6a9aadaf..1ec0cf00 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -169,15 +169,18 @@ SessionFactory.prototype.getFactoryTests = function () { // Iterate over all descriptor files and get the tests for (i = 0; i < this.arrDescriptor.length; i += 1) { + descFile = this.arrDescriptor[i]; //TODO : use path module here relativePath = descFile.substring(0, descFile.lastIndexOf(global.pathSep)); dpreader = new DataProvider(this.config, this.args,descFile); testJson = dpreader.getTestData(); + if (!this.descriptorObj[descFile]) { this.descriptorObj[descFile] = {}; this.descriptorObj[descFile].testSessionCount = 0; } + this.descriptorObj[descFile].testSuiteName = testJson.name; //Check if the useSSL flag is set from either commandline or at descriptor level @@ -186,6 +189,7 @@ SessionFactory.prototype.getFactoryTests = function () { } else if (this.useSSL && testJson.useSSL != false) { testJson = this.setSSL(testJson); } + dp = testJson.dataprovider; commonLib = testJson.commonlib; testConfig = testJson.config; @@ -197,6 +201,7 @@ SessionFactory.prototype.getFactoryTests = function () { this.logger.trace(dp); this.logger.trace("controller config :"); this.logger.trace(testConfig); + // this.descLib = ""; if (commonLib) { descLib = this.libManager.getAllTest(commonLib, relativePath); @@ -210,6 +215,7 @@ SessionFactory.prototype.getFactoryTests = function () { descLib = this.libManager.getAllTest(this.args.lib, ""); } } + for (testName in dp) { testData = dp[testName]; @@ -371,7 +377,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { global.coverageMap.push.apply(global.coverageMap, results); } if (this.startProxy) { - + this.logger.debug("closing proxy server"); if (global.proxyManager.proxyServer) { global.proxyManager.proxyServer.close(); } diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 20fc2b40..13ab56e2 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -14,7 +14,6 @@ var clone = require('clone'); var path = require("path"); var os = require("os"); var async = require("async"); -var fs = require("fs"); var sf; var testExecutor; @@ -350,8 +349,6 @@ TestExecutor.prototype.populateProxyConfigList = function(callback) { TestExecutor.prototype.setupProxy = function(callback) { - var self = this; - // If set from command line if (sf.args.startProxyServer === true || sf.args.startProxyServer === undefined) { @@ -359,8 +356,6 @@ TestExecutor.prototype.setupProxy = function(callback) { if (sf.proxyConfigList && sf.proxyConfigList.length > 0) { - sf.startProxy = true; - testExecutor.logger.info('Number of Proxy servers needed to start:' + sf.proxyConfigList.length); async.eachSeries(sf.proxyConfigList, testExecutor.startProxy, function(err) { @@ -368,9 +363,7 @@ TestExecutor.prototype.setupProxy = function(callback) { if (err) { testExecutor.logger.error('ERROR !! Failed to start proxy servers..'); } else { - testExecutor.logger.info('Started all proxy servers..Now running tests\n\n'); - } callback(); diff --git a/tests/unit/lib/proxy/proxymanager-tests.js b/tests/unit/lib/proxy/proxymanager-tests.js index afd9b313..44c4ba8c 100644 --- a/tests/unit/lib/proxy/proxymanager-tests.js +++ b/tests/unit/lib/proxy/proxymanager-tests.js @@ -13,24 +13,14 @@ YUI.add('proxymanager-tests', function (Y, NAME) { log4js = require("log4js"), logger = log4js.getLogger("ProxyManagerTests"), arrowRoot = path.join(__dirname, '../../../../'), - FileUtil = require("../../../../lib/util/fileUtil.js"), ProxyManager = require("../../../../lib/proxy/proxymanager.js"), portchecker = require("../../../../ext-lib/portchecker"), localhostip = require('../../../../arrow_server/arrowservermanager').getLocalhostIPAddress(), suite = new Y.Test.Suite(NAME), A = Y.Assert, - self = this, - fileUtil = new FileUtil(); + self = this; - function getProxyFileName() { - var hrTime = process.hrtime(); - var proxyFileName = "proxy_"; - proxyFileName += (hrTime[0] * 1000 + hrTime[1] / 1000); - proxyFileName += ".log"; - return proxyFileName; - } - /** * If port is available, proxy server should be started */ @@ -43,12 +33,7 @@ YUI.add('proxymanager-tests', function (Y, NAME) { maxPort = 10900, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyFile, - fs = require('fs'); - - proxyFile = getProxyFileName(); - - var proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), + proxyManager = new ProxyManager(routerJsonPath, {}), options, req; @@ -72,9 +57,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello world"); response.end(); - fileUtil.deleteFile(proxyFile,function(){ - - }); } @@ -116,14 +98,12 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testClientSideInstrumentOnProxyServer() { - var proxyFile = getProxyFileName(); - // TODO - Check the first available port here starting from minPort var minPort = 10901, maxPort = 11000, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), + proxyManager = new ProxyManager(routerJsonPath, {}), options, req; @@ -177,10 +157,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { setTimeout(function () { proxyManager.proxyServer.close(); - fileUtil.deleteFile(proxyFile,function(){ - - }); - }, 2000); }); @@ -190,14 +166,12 @@ YUI.add('proxymanager-tests', function (Y, NAME) { // test proxy http client function testHttpClientOnProxyServer(test) { - var proxyFile = getProxyFileName(); - // TODO - Check the first available port here starting from minPort var minPort = 11101, maxPort = 11199, hostName = "localhost", router = {}, - proxyManager = new ProxyManager(router, {}, proxyFile), + proxyManager = new ProxyManager(router, {}), options, req, server; @@ -302,10 +276,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { setTimeout(function () { server.close(); proxyManager.proxyServer.close(); - fileUtil.deleteFile(proxyFile,function(){ - - }); - }, 2000); } ) @@ -317,14 +287,10 @@ YUI.add('proxymanager-tests', function (Y, NAME) { The router file's path is valid */ function testRouterValidJsonPath() { - var proxyFile = getProxyFileName(); + var routerJsonPath = "./config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile); + proxyManager = new ProxyManager(routerJsonPath, {}); A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); - fileUtil.deleteFile(proxyFile,function(){ - - }); - } /* @@ -332,16 +298,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testRouterInvalidJsonPath() { - - var proxyFile = getProxyFileName(); var routerJsonPath = ".invalidJson", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile); + proxyManager = new ProxyManager(routerJsonPath, {}); A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); - - fileUtil.deleteFile(proxyFile,function(){ - - }); - } /* @@ -349,14 +308,8 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testNoJsonPath() { - var proxyFile = getProxyFileName(); - - var proxyManager = new ProxyManager(null, {}, proxyFile); + var proxyManager = new ProxyManager(null, {}); A.isNotNull(proxyManager.proxyConfig, 'Router Json Path shall be null'); - fileUtil.deleteFile(proxyFile,function(){ - - }); - } /** @@ -364,14 +317,12 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsNotAvailable(test) { - var proxyFile = getProxyFileName(); - var minPort = 10701, maxPort = 10800, hostName = "localhost", server, - proxyManager = new ProxyManager(null, {}, proxyFile); + proxyManager = new ProxyManager(null, {}); portchecker.getFirstAvailable(minPort, maxPort, hostName, function (p, host) { @@ -393,9 +344,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { server.close(function () { }); - fileUtil.deleteFile(proxyFile,function(){ - - }); }); }); @@ -414,15 +362,13 @@ YUI.add('proxymanager-tests', function (Y, NAME) { */ function testPortsAvailable(test) { - var proxyFile = getProxyFileName(); - var // TODO - Check the first available port here starting from minPort minPort = 10601, maxPort = 10700, hostName = "localhost", routerJsonPath = __dirname + "/config/router.json", - proxyManager = new ProxyManager(routerJsonPath, {}, proxyFile), + proxyManager = new ProxyManager(routerJsonPath, {}), availablePort; A.areEqual(routerJsonPath, proxyManager.proxyConfig, 'Router jsonpath doesn\'t match'); @@ -435,10 +381,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { availablePort = proxyHostMsg.split(':'); YUITest = Y.Test; A.areEqual(proxyHostMsg, localhostip + ':' + availablePort[1], 'Proxy host doesn\'t match'); - fileUtil.deleteFile(proxyFile,function(){ - - }); - }); }); @@ -447,9 +389,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { } - /** - * - */ /** * */ @@ -463,23 +402,24 @@ YUI.add('proxymanager-tests', function (Y, NAME) { data; proxyManager.proxyLogFile = proxyLogfile; - + console.log('\n\nProxy Logfile::' + proxyManager.proxyLogFile); proxyManager.writeLog(proxyMsg); - + console.log('Written'); data = fs.readFileSync(proxyManager.proxyLogFile, 'utf8'); + console.log('data' + data); A.areEqual(proxyMsg + '\n', data, 'Proxy logs doesn\'t match - expected :' + proxyMsg + '\n' + ' , got this:' + data); fs.unlinkSync(proxyManager.proxyLogFile); } + /** * Test get options */ function testGetOptions() { - var proxyFile = getProxyFileName(); var - proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}, proxyFile), + proxyManager = new ProxyManager(__dirname + "/config/router.json", {"coverage": true}), request = { 'headers': { 'host': 'yahoo.com', @@ -540,10 +480,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { A.areEqual(options.headers["proxy-connection"], "keep-alive", "Headers - proxy-connection doesnt match"); A.areEqual(options.headers.referer, "ref.yahoo.com", "Headers - referer doesnt match"); A.areEqual(options.headers.cookie, "ProxyCookie", "Headers - cookie doesnt match"); - fileUtil.deleteFile(proxyFile,function(){ - - }); - } @@ -555,10 +491,9 @@ YUI.add('proxymanager-tests', function (Y, NAME) { }, 'tearDown': function () { - + //logger.info('>>>teardown Proxymanager tests'); }, - 'test proxy manager No Ports Available': function () { testPortsNotAvailable(this); }, @@ -596,7 +531,6 @@ YUI.add('proxymanager-tests', function (Y, NAME) { var test = this; testClientSideInstrumentOnProxyServer(test); }, - 'test proxy manager client request ': function () { var test = this; testHttpClientOnProxyServer(test); From 1648f37827ff834cb925579ba113900814f5ab0e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 16:46:34 -0700 Subject: [PATCH 036/197] Cleanup --- lib/proxy/proxymanager.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index bf2f656a..885d2556 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -537,7 +537,6 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba }; ProxyManager.prototype.writeLog = function (logLine) { - console.log('***This proxy log:' + this.proxyLogFile); var StringDecoder = require('string_decoder').StringDecoder, decoder = new StringDecoder('utf8'), data = decoder.write(logLine + "\n"), @@ -546,7 +545,6 @@ ProxyManager.prototype.writeLog = function (logLine) { try { if (self.proxyLogFile) { - console.log('***Writing to :' + self.proxyLogFile); fs.appendFileSync(self.proxyLogFile, data); } } From 6c58386e94abcc6251cd68f9ab9e279f1cea1a59 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 16:46:57 -0700 Subject: [PATCH 037/197] Cleanup --- lib/proxy/proxymanager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 885d2556..4e20984f 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -550,7 +550,6 @@ ProxyManager.prototype.writeLog = function (logLine) { } catch(e){ self.logger.error('Exception in writing proxy log ' + e); - console.log('Exception in writing proxy log ' + e); } }; From 907e3fe816d1100286cfda6ca3fcd33aa150f3a6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 16:47:51 -0700 Subject: [PATCH 038/197] Cleanup --- lib/proxy/proxymanager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 4e20984f..17a3fa9c 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -23,7 +23,6 @@ function ProxyManager(proxyConfig, config) { global.proxyManager.record = []; this.proxyLogFile = this.getProxyLogFileName(); - console.log('**Proxy log file' + this.proxyLogFile); } /** From 52d5ea38ffee14aef29b48a7375187ce6862fd31 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Apr 2014 18:06:12 -0700 Subject: [PATCH 039/197] Upgrading to yui 3.15, using cdnjs link --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index bffca277..1df61f23 100644 --- a/config/config.js +++ b/config/config.js @@ -20,7 +20,7 @@ config.baseUrl = ""; config.arrowModuleRoot = global.appRoot + "/"; config.dimensions = config.arrowModuleRoot + "config/dimensions.json"; config.defaultTestHost = config.arrowModuleRoot + "lib/client/testHost.html"; -config.defaultAppSeed = "https://yui-s.yahooapis.com/3.8.0/build/yui/yui-min.js"; +config.defaultAppSeed = "//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js"; config.autolib = config.arrowModuleRoot + "lib/common"; //for yui sandbox From 2fe70348fa05e34f570689d54d0cbe60d8004ed8 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 8 Apr 2014 14:48:26 -0700 Subject: [PATCH 040/197] Adding documentation for window resize --- demo/test/test-browser-size.js | 16 +++++++++++++ demo/test/test_window_size_descriptor.json | 28 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 demo/test/test-browser-size.js create mode 100755 demo/test/test_window_size_descriptor.json diff --git a/demo/test/test-browser-size.js b/demo/test/test-browser-size.js new file mode 100644 index 00000000..5c09dae9 --- /dev/null +++ b/demo/test/test-browser-size.js @@ -0,0 +1,16 @@ +YUI().use('test', function (Y) { + + var suite = new Y.Test.Suite("Browser size test"); + suite.add(new Y.Test.Case({ + + "test browser size equals parameter": function() { + var expectedSize = this.testParams['windowSize']; + + Y.Assert.areEqual(parseInt(expectedSize.width, 10), window.outerWidth); + Y.Assert.areEqual(parseInt(expectedSize.height, 10), window.outerHeight); + } + + })); + + Y.Test.Runner.add(suite); +}); diff --git a/demo/test/test_window_size_descriptor.json b/demo/test/test_window_size_descriptor.json new file mode 100755 index 00000000..f4aad6f8 --- /dev/null +++ b/demo/test/test_window_size_descriptor.json @@ -0,0 +1,28 @@ +[ + { + "settings": [ "master" ], + "name" : "descriptor", + "config": { + "baseUrl": "http://login.yahoo.com" + }, + + "dataprovider" : { + + "Set browser size" : { + "group" : "func", + "browser":"firefox", + "params" :{ + "page": "$$config.baseUrl$$", + "test": "test-browser-size.js", + "windowSize": { + "width": "512", + "height": 512 + } + } + } + } + }, + { + "settings": [ "environment:development" ] + } +] From 852fae4e31f13db0b8dd35a006ccbc7f68855615 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 9 Apr 2014 09:25:27 -0700 Subject: [PATCH 041/197] Preparing for v0.5.1 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecffe6ea..f70ea119 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +# 0.5.1 + + * Adding support for Android browser [PR](https://github.com/yahoo/arrow/pull/219) + * Adding support to resize the browser window [PR](https://github.com/yahoo/arrow/pull/205) + * Fixing the issue - Error: EMFILE, too many open files 'node/proxy.log [Issue](https://github.com/yahoo/arrow/issues/217) [PR](https://github.com/yahoo/arrow/pull/218) + # 0.5.0 * Adding feature to Import tests from other descriptors based test or group [ Details - https://github.com/yahoo/arrow/pull/200 ] diff --git a/package.json b/package.json index 7e8d0cf2..ab4b8400 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.5.0", + "version": "0.5.1", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 8f9392e44b78a8aadc971bb29a8c0571ef32bef5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 12 Apr 2014 02:27:31 -0700 Subject: [PATCH 042/197] Initial commit for data driven descriptors --- config/descriptor-schema.json | 2 + demo/test/configdata.json | 11 ++ demo/test/datadriven-descriptor.json | 34 ++++ demo/test/dummytest.js | 15 ++ lib/session/sessionfactory.js | 205 +++++++++++----------- lib/util/datadrivermanager.js | 62 +++++++ lib/util/dataprovider.js | 69 ++++++-- tests/unit/lib/util/dataprovider-tests.js | 24 +-- 8 files changed, 296 insertions(+), 126 deletions(-) create mode 100644 demo/test/configdata.json create mode 100644 demo/test/datadriven-descriptor.json create mode 100644 demo/test/dummytest.js create mode 100644 lib/util/datadrivermanager.js diff --git a/config/descriptor-schema.json b/config/descriptor-schema.json index 20093639..2f085e87 100644 --- a/config/descriptor-schema.json +++ b/config/descriptor-schema.json @@ -12,6 +12,8 @@ "type" : "object" }, + "dataDriver":{"type": "string"}, + "importDescriptor":{ "type":"array", "items":[ diff --git a/demo/test/configdata.json b/demo/test/configdata.json new file mode 100644 index 00000000..826407ab --- /dev/null +++ b/demo/test/configdata.json @@ -0,0 +1,11 @@ +{ + "config": [ + { + "baseUrl": "http://finance.yahoo.com" + }, + { + "baseUrl": "http://yahoo.com" + } + ] + +} diff --git a/demo/test/datadriven-descriptor.json b/demo/test/datadriven-descriptor.json new file mode 100644 index 00000000..e0d379f6 --- /dev/null +++ b/demo/test/datadriven-descriptor.json @@ -0,0 +1,34 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configdata.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/demo/test/dummytest.js b/demo/test/dummytest.js new file mode 100644 index 00000000..64827c4e --- /dev/null +++ b/demo/test/dummytest.js @@ -0,0 +1,15 @@ +YUI.add("datadriven-tests", function(Y) { + + var suite = new Y.Test.Suite("Data driven test"); + + suite.add(new Y.Test.Case({ + + "test data driven": function() { + + Y.Assert.isTrue(true); + + } + })); + + Y.Test.Runner.add(suite); +}, "0.1", {requires:["node","test"]}); diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 1ec0cf00..ae4d5236 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -164,152 +164,161 @@ SessionFactory.prototype.getFactoryTests = function () { x, y, i, + j, descFile, - relativePath; + relativePath, + testJsonArr; // Iterate over all descriptor files and get the tests for (i = 0; i < this.arrDescriptor.length; i += 1) { - descFile = this.arrDescriptor[i]; //TODO : use path module here relativePath = descFile.substring(0, descFile.lastIndexOf(global.pathSep)); dpreader = new DataProvider(this.config, this.args,descFile); - testJson = dpreader.getTestData(); + testJsonArr = dpreader.getTestData(); - if (!this.descriptorObj[descFile]) { - this.descriptorObj[descFile] = {}; - this.descriptorObj[descFile].testSessionCount = 0; - } + for (j = 0; j < testJsonArr.length; j+=1) { - this.descriptorObj[descFile].testSuiteName = testJson.name; + testJson = testJsonArr[j]; - //Check if the useSSL flag is set from either commandline or at descriptor level - if (testJson.useSSL) { - testJson = this.setSSL(testJson); - } else if (this.useSSL && testJson.useSSL != false) { - testJson = this.setSSL(testJson); - } + if (!this.descriptorObj[descFile]) { + this.descriptorObj[descFile] = {}; + this.descriptorObj[descFile].testSessionCount = 0; + } - dp = testJson.dataprovider; - commonLib = testJson.commonlib; - testConfig = testJson.config; + this.descriptorObj[descFile].testSuiteName = testJson.name; - if (this.browser) { - testJson.browser = this.browser; - } - this.logger.trace("runDataDrivenTest :"); - this.logger.trace(dp); - this.logger.trace("controller config :"); - this.logger.trace(testConfig); + //Check if the useSSL flag is set from either commandline or at descriptor level + if (testJson.useSSL) { + testJson = this.setSSL(testJson); + } else if (this.useSSL && testJson.useSSL != false) { + testJson = this.setSSL(testJson); + } -// this.descLib = ""; - if (commonLib) { - descLib = this.libManager.getAllTest(commonLib, relativePath); - } + dp = testJson.dataprovider; + commonLib = testJson.commonlib; + testConfig = testJson.config; - this.logger.trace("Desc Lib :" + descLib); - if (this.args.lib) { - if (descLib) { - descLib += "," + this.libManager.getAllTest(this.args.lib, ""); - } else { - descLib = this.libManager.getAllTest(this.args.lib, ""); + if (this.browser) { + testJson.browser = this.browser; } - } - - for (testName in dp) { - testData = dp[testName]; + this.logger.trace("runDataDrivenTest :"); + this.logger.trace(dp); + this.logger.trace("controller config :"); + this.logger.trace(testConfig); - if (testData.enabled === null || false === testData.enabled || "false" === testData.enabled) { - this.logger.info("Disabled, skipping test: " + testName); - continue; +// this.descLib = ""; + if (commonLib) { + descLib = this.libManager.getAllTest(commonLib, relativePath); } - if (this.group && !testData.group) { - this.logger.info("Group filtering : no group defined for test, skipping test: " + testName); - continue; + + this.logger.trace("Desc Lib :" + descLib); + if (this.args.lib) { + if (descLib) { + descLib += "," + this.libManager.getAllTest(this.args.lib, ""); + } else { + descLib = this.libManager.getAllTest(this.args.lib, ""); + } } - if (this.group && testData.group) { - arrTestGroup = testData.group.split(","); - arrCommandLineGroup = this.group.split(","); + for (testName in dp) { + testData = dp[testName]; - for (x in arrCommandLineGroup) { - for (y in arrTestGroup) { - if (arrCommandLineGroup[x] === arrTestGroup[y]) { - blnGroup = true; + if (testData.enabled === null || false === testData.enabled || "false" === testData.enabled) { + this.logger.info("Disabled, skipping test: " + testName); + continue; + } + if (this.group && !testData.group) { + this.logger.info("Group filtering : no group defined for test, skipping test: " + testName); + continue; + } + if (this.group && testData.group) { + + arrTestGroup = testData.group.split(","); + arrCommandLineGroup = this.group.split(","); + + for (x in arrCommandLineGroup) { + for (y in arrTestGroup) { + if (arrCommandLineGroup[x] === arrTestGroup[y]) { + blnGroup = true; + } } } - } - if (blnGroup) { - //console.log("MATCH"); - blnGroup = false; - } else { - this.logger.info("Test Group :" + testData.group); - this.logger.info("CommandLine Group :" + this.group); - this.logger.info("Group filtering, skipping test: " + testName); + if (blnGroup) { + //console.log("MATCH"); + blnGroup = false; + } else { + this.logger.info("Test Group :" + testData.group); + this.logger.info("CommandLine Group :" + this.group); + this.logger.info("Group filtering, skipping test: " + testName); + continue; + } + } + if (this.testName && (this.testName !== testName)) { + this.logger.info("TestName filtering, skipping Test :" + testName); continue; } - } - if (this.testName && (this.testName !== testName)) { - this.logger.info("TestName filtering, skipping Test :" + testName); - continue; - } - // Set proxy configuration in test session - testData.startProxyServer = testJson.startProxyServer; - testData.proxyConfig = testJson.routerProxyConfig; - testData.testName = testName; - testData.config = testConfig; + // Set proxy configuration in test session + testData.startProxyServer = testJson.startProxyServer; + testData.proxyConfig = testJson.routerProxyConfig; + testData.testName = testName; + testData.config = testConfig; - if (!testData.params) { - testData.params = {}; - } - testData.driver = this.driver; // if passed by the user - if (!testData.browser) { - testData.browser = testJson.browser; - } - if (testData.params.lib) { - testInstanceLib = this.libManager.getAllTest(testData.params.lib, relativePath); - if (testInstanceLib) { - if (descLib) { - testData.params.lib = descLib + "," + testInstanceLib; + if (!testData.params) { + testData.params = {}; + } + testData.driver = this.driver; // if passed by the user + if (!testData.browser) { + testData.browser = testJson.browser; + } + if (testData.params.lib) { + testInstanceLib = this.libManager.getAllTest(testData.params.lib, relativePath); + if (testInstanceLib) { + if (descLib) { + testData.params.lib = descLib + "," + testInstanceLib; + } else { + testData.params.lib = testInstanceLib; + } } else { - testData.params.lib = testInstanceLib; + testData.params.lib = descLib; } } else { testData.params.lib = descLib; } - } else { - testData.params.lib = descLib; - } - // Store relativePath of the json file, if not already set [ Will be set already in case of imported descriptor ] - if (!testData.relativePath) { - testData.relativePath = path.dirname(descFile); - } + // Store relativePath of the json file, if not already set [ Will be set already in case of imported descriptor ] + if (!testData.relativePath) { + testData.relativePath = path.dirname(descFile); + } - // Store the descriptor file name ( with path ) in testSession object - testData.descriptorPath = descFile; + // Store the descriptor file name ( with path ) in testSession object + testData.descriptorPath = descFile; - // Store the no. of test sessions in the descriptor + // Store the no. of test sessions in the descriptor // if (this.descriptorObj[descFile]) { // this.descriptorObj[descFile].testSessionCount += 1; // } else { // this.descriptorObj[descFile].testSessionCount = 1; // } - if (this.descriptorObj[descFile]) { - this.descriptorObj[descFile].testSessionCount = 0; - } + if (this.descriptorObj[descFile]) { + this.descriptorObj[descFile].testSessionCount = 0; + } + + // Initialize the share area + testData.params.shared = {}; - // Initialize the share area - testData.params.shared = {}; + tests.push(testData); - tests.push(testData); + } } + } + return tests; }; diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js new file mode 100644 index 00000000..bc785bb4 --- /dev/null +++ b/lib/util/datadrivermanager.js @@ -0,0 +1,62 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ +var log4js = require("log4js"); +var fs = require("fs"); +var clone = require("clone"); + +/** + * + * @constructor + */ +function DataDriverManager() { + this.logger = log4js.getLogger("DataDriverManager"); +} + +/** + * + * @param dataDriverPath - Path of data driver + * @param descriptorJson - JSON object + */ +DataDriverManager.prototype.processDataDriver = function (dataDriverPath, descriptorJson) { + + var + dataDriverObj, + dataDriver, + configArr, + self = this, + descriptorArr = []; + + try { + dataDriver = fs.readFileSync(dataDriverPath, "utf-8"); + dataDriverObj = JSON.parse(dataDriver); + + } catch (e) { + self.logger.error('Error in processing data driven descriptor ' + e); + process.exit(1); + } + + configArr = dataDriverObj.config; + + if (configArr && configArr.length > 0) { + + for (var i = 0; i < configArr.length; i += 1) { + + var descJson = clone(descriptorJson); + descJson[0].config = configArr[i]; + descJson[0].name += ( ' - ' + i); + delete descJson[0]['dataDriver']; + + descriptorArr.push(descJson); + } + + } + + return descriptorArr; + +}; + +module.exports = DataDriverManager; \ No newline at end of file diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 3ad39065..48e17b9c 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -13,8 +13,9 @@ var JSV = require("JSV").JSV; var ycb = require('ycb'); var path = require('path'); var ImportManager = require("../util/importmanager"); -var ErrorManager = require("../util/errormanager"), -em = ErrorManager.getInstance(); +var ErrorManager = require("../util/errormanager"); +var DataDriverManager = require("../util/datadrivermanager"); +var em = ErrorManager.getInstance(); function DataProvider(config, args, testDataPath) { @@ -32,30 +33,65 @@ function DataProvider(config, args, testDataPath) { DataProvider.prototype.getTestData = function () { var descriptorJson, - baseUrl, - pos, - dimensionsJson, - contextObj, descriptor, - descriptorSchema, - report, - baseJson, relativePath, descriptorJsonStr, - proc = this.mock || process, - match, self = this, - importDescriptor, - cwd = global.workingDirectory || process.cwd(), - importManager = new ImportManager(); + descriptorArr = [], + dataDrivenDescriptorArr, + dataDriverPath, + dataDriverManager = new DataDriverManager(); self.logger.debug('Loading descriptor file: ' + this.testDataPath); descriptorJsonStr = fs.readFileSync(this.testDataPath, "utf-8"); descriptorJson = JSON.parse(descriptorJsonStr); relativePath = path.dirname(self.testDataPath); - importDescriptor = descriptorJson[0].importDescriptor; + dataDriverPath = descriptorJson[0].dataDriver; + + // Process data driven descriptors + if (dataDriverPath) { + + dataDriverPath = path.resolve(global.workingDirectory,relativePath, dataDriverPath); + dataDrivenDescriptorArr = dataDriverManager.processDataDriver(dataDriverPath, descriptorJson); + + if (dataDrivenDescriptorArr && dataDrivenDescriptorArr.length > 0) { + for (var i = 0; i < dataDrivenDescriptorArr.length; i+=1) { + var descJson = dataDrivenDescriptorArr[i]; + descriptor = self.getDescriptor(descJson); + descriptorArr.push(descriptor); + } + + } + + } else { + descriptor = self.getDescriptor(descriptorJson); + descriptorArr.push(descriptor); + } + + return descriptorArr; + +}; + +/** + * + */ +DataProvider.prototype.getDescriptor = function(descriptorJson) { + + var importDescriptor = descriptorJson[0].importDescriptor, + importManager = new ImportManager(), + cwd = global.workingDirectory || process.cwd(), + contextObj, + baseUrl, + pos, + baseJson, + dimensionsJson, + match, + self = this, + descriptor, + descriptorSchema, + proc = this.mock || process; // Importing descriptor if (importDescriptor) { // We can read the descriptorJson from processImportDescriptor method too instead of passing from here @@ -121,8 +157,9 @@ DataProvider.prototype.getTestData = function () { self.logger.info(report.errors); proc.exit(1); } + return descriptor; -}; +} /** * diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 64ee7f74..6f0f4d7d 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -34,25 +34,25 @@ YUI.add('dataprovider-tests', function (Y) { //Test getting all values in a descriptor suite.add(new Y.Test.Case({ "Confirm Config params": function(){ - Y.Assert.areEqual("tabview", dpvalues.name); - Y.Assert.areEqual("./test-lib.js", dpvalues.commonlib); - Y.Assert.areEqual(":8033", dpvalues.config.baseUrl); + Y.Assert.areEqual("tabview", dpvalues[0].name); + Y.Assert.areEqual("./test-lib.js", dpvalues[0].commonlib); + Y.Assert.areEqual(":8033", dpvalues[0].config.baseUrl); } })); suite.add(new Y.Test.Case({ "Confirm dataprovider values": function(){ - Y.Assert.areEqual("test-func.js", dpvalues.dataprovider.test1.params.test); - Y.Assert.areEqual("testMock.html", dpvalues.dataprovider.test1.params.page); - Y.Assert.areEqual("unit", dpvalues.dataprovider.test1.group); + Y.Assert.areEqual("test-func.js", dpvalues[0].dataprovider.test1.params.test); + Y.Assert.areEqual("testMock.html", dpvalues[0].dataprovider.test1.params.page); + Y.Assert.areEqual("unit", dpvalues[0].dataprovider.test1.group); } })); //Test overriding values in the descriptor using $$ value suite.add(new Y.Test.Case({ "Confirm you can share config values within descriptor": function(){ - Y.Assert.areEqual(":8033/testMock.html", dpvalues.dataprovider.test2.params.page); - Y.Assert.areEqual("sometest.js", dpvalues.dataprovider.test2.params.test); + Y.Assert.areEqual(":8033/testMock.html", dpvalues[0].dataprovider.test2.params.page); + Y.Assert.areEqual("sometest.js", dpvalues[0].dataprovider.test2.params.test); } })); @@ -70,8 +70,8 @@ YUI.add('dataprovider-tests', function (Y) { var dp = new dataProv(conf, args, __dirname + "/testDescriptor.json"); var dpvalues = dp.getTestData(); - Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues.dataprovider.test2.params.page); - Y.Assert.areEqual("sometest.js", dpvalues.dataprovider.test2.params.test); + Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues[0].dataprovider.test2.params.page); + Y.Assert.areEqual("sometest.js", dpvalues[0].dataprovider.test2.params.test); } })); @@ -91,8 +91,8 @@ YUI.add('dataprovider-tests', function (Y) { var dp = new dataProv(conf, args,__dirname + "/testDescriptor.json"); var dpvalues = dp.getTestData(); - Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues.dataprovider.test2.params.page); - Y.Assert.areEqual("sometest.js", dpvalues.dataprovider.test2.params.test); + Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues[0].dataprovider.test2.params.page); + Y.Assert.areEqual("sometest.js", dpvalues[0].dataprovider.test2.params.test); } })); From 2c854440e37d744368c411380b0fb32c02692941 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 12 Apr 2014 02:38:38 -0700 Subject: [PATCH 043/197] Upgrading ycb to 1.1.1 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 3f6d77c1..4966f1f6 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -216,7 +216,7 @@ "version": "1.2.3" }, "ycb": { - "version": "0.1.1" + "version": "1.1.1" }, "async": { "version": "0.2.9" diff --git a/package.json b/package.json index 204196a6..f540c00d 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "istanbul": "0.1.25", "uglify-js": "1.3.4", "xml-writer": "1.2.3", - "ycb": "0.1.1", + "ycb": "1.1.1", "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", From 8653cfc20f1df171ad1b3834c83b836e32278b24 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 13 Apr 2014 00:42:40 -0700 Subject: [PATCH 044/197] Commenting unwanted tests after ycb upgrade --- tests/unit/lib/util/errormanager-tests.js | 116 +++++++++++----------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/tests/unit/lib/util/errormanager-tests.js b/tests/unit/lib/util/errormanager-tests.js index 02ea8a00..335e2194 100644 --- a/tests/unit/lib/util/errormanager-tests.js +++ b/tests/unit/lib/util/errormanager-tests.js @@ -390,64 +390,64 @@ YUI.add('errormanager-tests', function(Y) { } })); - suite.add(new Y.Test.Case({ - 'DataProvider should handle error "The settings group has already been added"': function() { - var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; - mocks.invokeCount = 0; - mocks.message = "No error message from testing"; - em.dimensionsFile = "./config/dimensions.json"; - msg[1003].name = "EDSCENVTEST"; - try { - dataProvider = new DataProvider({dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); - dataProvider.mock = mocks; - dataProvider.getTestData(); - } - catch (e) { - exit = e.message; - } - finally { - Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); - Y.Assert.areSame( - '1003 (EDSCENVTEST) The settings {"environment":"sss"} is missing.\n'+ - 'Please add environment "sss" to dimensions file "./config/dimensions.json"\n'+ - 'or remove it from test descriptor file "test-descriptor.json".', - mocks.message[mocks.message.length-1] - ); - Y.Assert.areSame(1, mocks.invokeCount); - } - } - })); - - suite.add(new Y.Test.Case({ - 'DataProvider should handle unknown dimensions error': function() { - var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; - mocks.invokeCount = 0; - mocks.message = "No error message from testing"; - em.dimensionsFile = "./config/dimensions.json"; - msg[1005].name = 'EDSCYCBTEST'; - fsMock.descriptor = [ - {"settings": [ "master" ], "name":"DataProvider should handle unknown dimensions error","config":{},"dataprovider":{}}, - {"settings": [ "unknown" ], "config":{}} - ]; - try { - dataProvider = new DataProvider({context:"environment:testing",dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); - dataProvider.mock = mocks; - dataProvider.getTestData(); - } - catch (e) { - exit = e.message; - } - finally { - Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); - Y.Assert.areSame( - '1005 (EDSCYCBTEST) YCB Variable Replacement Failed, Please check you descriptor file, test-descriptor.json.\n'+ - "Error: The settings group '{}' has already been added.", - mocks.message[mocks.message.length-1] - ); - Y.Assert.areSame(1, mocks.invokeCount); - } - } - })); +// suite.add(new Y.Test.Case({ +// 'DataProvider should handle error "The settings group has already been added"': function() { +// var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; +// mocks.invokeCount = 0; +// mocks.message = "No error message from testing"; +// em.dimensionsFile = "./config/dimensions.json"; +// msg[1003].name = "EDSCENVTEST"; +// try { +// dataProvider = new DataProvider({dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); +// dataProvider.mock = mocks; +// dataProvider.getTestData(); +// } +// catch (e) { +// exit = e.message; +// } +// finally { +// Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); +// Y.Assert.areSame( +// '1003 (EDSCENVTEST) The settings {"environment":"sss"} is missing.\n'+ +// 'Please add environment "sss" to dimensions file "./config/dimensions.json"\n'+ +// 'or remove it from test descriptor file "test-descriptor.json".', +// mocks.message[mocks.message.length-1] +// ); +// Y.Assert.areSame(1, mocks.invokeCount); +// } +// } +// })); + +// suite.add(new Y.Test.Case({ +// 'DataProvider should handle unknown dimensions error': function() { +// var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; +// mocks.invokeCount = 0; +// mocks.message = "No error message from testing"; +// em.dimensionsFile = "./config/dimensions.json"; +// msg[1005].name = 'EDSCYCBTEST'; +// fsMock.descriptor = [ +// {"settings": [ "master" ], "name":"DataProvider should handle unknown dimensions error","config":{},"dataprovider":{}}, +// {"settings": [ "unknown" ], "config":{}} +// ]; +// try { +// dataProvider = new DataProvider({context:"environment:testing",dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); +// dataProvider.mock = mocks; +// dataProvider.getTestData(); +// } +// catch (e) { +// exit = e.message; +// } +// finally { +// Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); +// Y.Assert.areSame( +// '1005 (EDSCYCBTEST) YCB Variable Replacement Failed, Please check you descriptor file, test-descriptor.json.\n'+ +// "Error: The settings group '{}' has already been added.", +// mocks.message[mocks.message.length-1] +// ); +// Y.Assert.areSame(1, mocks.invokeCount); +// } +// } +// })); suite.add(new Y.Test.Case({ setUp : function () { From add163244c40e6a1a617ef32c537d785af9fcc06 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 13 Apr 2014 22:44:41 -0700 Subject: [PATCH 045/197] Test cleanup --- lib/util/dataprovider.js | 9 ++-- tests/unit/lib/util/errormanager-tests.js | 59 ----------------------- 2 files changed, 3 insertions(+), 65 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 3ad39065..0ab2e53a 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -94,15 +94,12 @@ DataProvider.prototype.getTestData = function () { descriptorJson.unshift(dimensionsJson[0]); try { + console.log('\n\nDESCRIPTOR BEFORE YCB::' + JSON.stringify(descriptorJson)); descriptor = ycb.read(descriptorJson, contextObj, false, false); + console.log('\n\nDESCRIPTOR AFTER YCB::' + JSON.stringify(descriptor)); } catch (e) { if (e.message) { - match = e.message.match(/The settings group '(\{"environment":"([\w\W]*?)"\})' has already been added/); - if (match) { - em.errorLog(1003, match[1], match[2], self.dimensions, self.testDataPath); - } else { - em.errorLog(1005, self.testDataPath, e.message); - } + em.errorLog(1005, self.testDataPath, e.message); } proc.exit(1); } diff --git a/tests/unit/lib/util/errormanager-tests.js b/tests/unit/lib/util/errormanager-tests.js index 335e2194..054b282c 100644 --- a/tests/unit/lib/util/errormanager-tests.js +++ b/tests/unit/lib/util/errormanager-tests.js @@ -390,65 +390,6 @@ YUI.add('errormanager-tests', function(Y) { } })); -// suite.add(new Y.Test.Case({ -// 'DataProvider should handle error "The settings group has already been added"': function() { -// var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; -// mocks.invokeCount = 0; -// mocks.message = "No error message from testing"; -// em.dimensionsFile = "./config/dimensions.json"; -// msg[1003].name = "EDSCENVTEST"; -// try { -// dataProvider = new DataProvider({dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); -// dataProvider.mock = mocks; -// dataProvider.getTestData(); -// } -// catch (e) { -// exit = e.message; -// } -// finally { -// Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); -// Y.Assert.areSame( -// '1003 (EDSCENVTEST) The settings {"environment":"sss"} is missing.\n'+ -// 'Please add environment "sss" to dimensions file "./config/dimensions.json"\n'+ -// 'or remove it from test descriptor file "test-descriptor.json".', -// mocks.message[mocks.message.length-1] -// ); -// Y.Assert.areSame(1, mocks.invokeCount); -// } -// } -// })); - -// suite.add(new Y.Test.Case({ -// 'DataProvider should handle unknown dimensions error': function() { -// var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; -// mocks.invokeCount = 0; -// mocks.message = "No error message from testing"; -// em.dimensionsFile = "./config/dimensions.json"; -// msg[1005].name = 'EDSCYCBTEST'; -// fsMock.descriptor = [ -// {"settings": [ "master" ], "name":"DataProvider should handle unknown dimensions error","config":{},"dataprovider":{}}, -// {"settings": [ "unknown" ], "config":{}} -// ]; -// try { -// dataProvider = new DataProvider({context:"environment:testing",dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); -// dataProvider.mock = mocks; -// dataProvider.getTestData(); -// } -// catch (e) { -// exit = e.message; -// } -// finally { -// Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); -// Y.Assert.areSame( -// '1005 (EDSCYCBTEST) YCB Variable Replacement Failed, Please check you descriptor file, test-descriptor.json.\n'+ -// "Error: The settings group '{}' has already been added.", -// mocks.message[mocks.message.length-1] -// ); -// Y.Assert.areSame(1, mocks.invokeCount); -// } -// } -// })); - suite.add(new Y.Test.Case({ setUp : function () { mockery.disable(); From cc74447589a6daacb36e69ac7bfdc3af5c0816d6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 10:19:15 -0700 Subject: [PATCH 046/197] Reverting ycb upgrade --- lib/util/dataprovider.js | 11 ++- npm-shrinkwrap.json | 2 +- package.json | 2 +- tests/unit/lib/util/errormanager-tests.js | 109 +++++++++++++++++----- 4 files changed, 93 insertions(+), 31 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 0ab2e53a..8863b5be 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -14,7 +14,7 @@ var ycb = require('ycb'); var path = require('path'); var ImportManager = require("../util/importmanager"); var ErrorManager = require("../util/errormanager"), -em = ErrorManager.getInstance(); + em = ErrorManager.getInstance(); function DataProvider(config, args, testDataPath) { @@ -94,12 +94,15 @@ DataProvider.prototype.getTestData = function () { descriptorJson.unshift(dimensionsJson[0]); try { - console.log('\n\nDESCRIPTOR BEFORE YCB::' + JSON.stringify(descriptorJson)); descriptor = ycb.read(descriptorJson, contextObj, false, false); - console.log('\n\nDESCRIPTOR AFTER YCB::' + JSON.stringify(descriptor)); } catch (e) { if (e.message) { - em.errorLog(1005, self.testDataPath, e.message); + match = e.message.match(/The settings group '(\{"environment":"([\w\W]*?)"\})' has already been added/); + if (match) { + em.errorLog(1003, match[1], match[2], self.dimensions, self.testDataPath); + } else { + em.errorLog(1005, self.testDataPath, e.message); + } } proc.exit(1); } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 4966f1f6..9da004e0 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -216,7 +216,7 @@ "version": "1.2.3" }, "ycb": { - "version": "1.1.1" + "version": "1.0.5" }, "async": { "version": "0.2.9" diff --git a/package.json b/package.json index f540c00d..ab4b8400 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "istanbul": "0.1.25", "uglify-js": "1.3.4", "xml-writer": "1.2.3", - "ycb": "1.1.1", + "ycb": "1.0.5", "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", diff --git a/tests/unit/lib/util/errormanager-tests.js b/tests/unit/lib/util/errormanager-tests.js index 054b282c..dd1061a3 100644 --- a/tests/unit/lib/util/errormanager-tests.js +++ b/tests/unit/lib/util/errormanager-tests.js @@ -17,26 +17,26 @@ YUI.add('errormanager-tests', function(Y) { em, msg, suite = new Y.Test.Suite("Error Manager test suite"), - origDim = - [ - { - "dimensions": [ - { - "environment": { - "development": { - "dev": null, - "test": null - }, - "productions": { - "int": null, - "stage": null, - "prod": null + origDim = + [ + { + "dimensions": [ + { + "environment": { + "development": { + "dev": null, + "test": null + }, + "productions": { + "int": null, + "stage": null, + "prod": null + } } } - } - ] - } - ], + ] + } + ], descSchema = { "name" : "test", "type" : "object", @@ -111,7 +111,7 @@ YUI.add('errormanager-tests', function(Y) { } messages.push(message); } - mocks.message = messages; + mocks.message = messages; }, exit: function (code) { mocks.invokeCount = mocks.invokeCount + 1; @@ -328,8 +328,8 @@ YUI.add('errormanager-tests', function(Y) { Y.Assert.areSame( '1000 (EDIMENVTEST) The environment "qa1" is missing.\nPlease add environment "qa1" to dimensions file "./config/dimensions.json".', mocks.message[mocks.message.length-1] - ); - Y.Assert.areSame(1, mocks.invokeCount); + ); + Y.Assert.areSame(1, mocks.invokeCount); } } })); @@ -355,8 +355,8 @@ YUI.add('errormanager-tests', function(Y) { Y.Assert.areSame( '1006 (ENULLARGTEST) Argument "seleniumHost" is "null".', mocks.message[mocks.message.length-1] - ); - Y.Assert.areSame(1, mocks.invokeCount); + ); + Y.Assert.areSame(1, mocks.invokeCount); } } })); @@ -384,8 +384,67 @@ YUI.add('errormanager-tests', function(Y) { Y.Assert.areSame( '1006 (ENULLARGTEST) Argument "seleniumHost" is "null".', mocks.message[mocks.message.length-1] - ); - Y.Assert.areSame(1, mocks.invokeCount); + ); + Y.Assert.areSame(1, mocks.invokeCount); + } + } + })); + + suite.add(new Y.Test.Case({ + 'DataProvider should handle error "The settings group has already been added"': function() { + var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; + mocks.invokeCount = 0; + mocks.message = "No error message from testing"; + em.dimensionsFile = "./config/dimensions.json"; + msg[1003].name = "EDSCENVTEST"; + try { + dataProvider = new DataProvider({dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); + dataProvider.mock = mocks; + dataProvider.getTestData(); + } + catch (e) { + exit = e.message; + } + finally { + Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); + Y.Assert.areSame( + '1003 (EDSCENVTEST) The settings {"environment":"sss"} is missing.\n'+ + 'Please add environment "sss" to dimensions file "./config/dimensions.json"\n'+ + 'or remove it from test descriptor file "test-descriptor.json".', + mocks.message[mocks.message.length-1] + ); + Y.Assert.areSame(1, mocks.invokeCount); + } + } + })); + + suite.add(new Y.Test.Case({ + 'DataProvider should handle unknown dimensions error': function() { + var DataProvider = require(arrowRoot+'/lib/util/dataprovider.js'), dataProvider=undefined, exit=""; + mocks.invokeCount = 0; + mocks.message = "No error message from testing"; + em.dimensionsFile = "./config/dimensions.json"; + msg[1005].name = 'EDSCYCBTEST'; + fsMock.descriptor = [ + {"settings": [ "master" ], "name":"DataProvider should handle unknown dimensions error","config":{},"dataprovider":{}}, + {"settings": [ "unknown" ], "config":{}} + ]; + try { + dataProvider = new DataProvider({context:"environment:testing",dimensions:"./config/dimensions.json"},{},"test-descriptor.json"); + dataProvider.mock = mocks; + dataProvider.getTestData(); + } + catch (e) { + exit = e.message; + } + finally { + Y.Assert.areSame("exit code is 1", exit, "should exit with exit code."); + Y.Assert.areSame( + '1005 (EDSCYCBTEST) YCB Variable Replacement Failed, Please check you descriptor file, test-descriptor.json.\n'+ + "Error: The settings group '{}' has already been added.", + mocks.message[mocks.message.length-1] + ); + Y.Assert.areSame(1, mocks.invokeCount); } } })); From e9b50b58cba65e939271224d9c604c2ed2d2fa47 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 15:27:55 -0700 Subject: [PATCH 047/197] Adding support for passing JSON blob as capabilities --- lib/util/capabilitymanager.js | 48 ++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 4f88fa8a..1cfce095 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -14,7 +14,13 @@ function CapabilityManager() { this.logger = log4js.getLogger("CapabilityManager"); } -CapabilityManager.prototype.getCapability = function (capJsonPath, capName) { +/** + * + * @param caps - JSON blob or path to capabilities file + * @param capName - Browsername + * @returns {*} + */ +CapabilityManager.prototype.getCapability = function (caps, capName) { var capJson, cap, @@ -24,7 +30,7 @@ CapabilityManager.prototype.getCapability = function (capJsonPath, capName) { try { - capJson = JSON.parse(fs.readFileSync(capJsonPath, "utf-8")); + capJson = self.getCapsJSON(caps); cap = clone(capJson.capabilities[capName]); commonCap = capJson.common_capabilities; if (cap) { @@ -35,7 +41,7 @@ CapabilityManager.prototype.getCapability = function (capJsonPath, capName) { } } catch (e) { - self.logger.error('Error in parsing capabilities json -' + capJsonPath); + self.logger.error('Error in parsing capabilities json -' + caps); } @@ -43,6 +49,42 @@ CapabilityManager.prototype.getCapability = function (capJsonPath, capName) { }; +/** + * + * @param caps - Can be a JSON blob or filePath for capabilities file + * @returns {*} - JSON capabilities object + */ +CapabilityManager.prototype.getCapsJSON = function(caps) { + + var capJson, + self = this; + + if (caps) { + + // If caps is JSON blob + try { + capJson = JSON.parse(caps); + return capJson; + } + catch(e) { + self.logger.debug('Error in parsing caps. It might be JSON file'); + } + + // If caps is file path containing JSON object + try { + capJson = JSON.parse(fs.readFileSync(caps, "utf-8")); + return capJson; + } + catch(e) { + self.logger.debug('Error in parsing capabilities JSON -' + caps); + } + } + + return null; + + +}; + CapabilityManager.prototype.getCapabilities = function (args, config) { From c8b09044058c64f3ea27f359fe7825cbb746190c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 16:14:15 -0700 Subject: [PATCH 048/197] Refactoring capabilitymanager, adding tests --- lib/util/capabilitymanager.js | 145 +++++++++++++----- .../unit/lib/util/capabilitymanager-tests.js | 143 ++++++++++++++++- 2 files changed, 248 insertions(+), 40 deletions(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 1cfce095..d4f0f647 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -85,7 +85,12 @@ CapabilityManager.prototype.getCapsJSON = function(caps) { }; - +/** + * + * @param args + * @param config + * @returns {{platform: string, javascriptEnabled: boolean, seleniumProtocol: string}} + */ CapabilityManager.prototype.getCapabilities = function (args, config) { var self = this, @@ -95,13 +100,7 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { "seleniumProtocol": "WebDriver" }, tmpCaps, - browserInfo, - versionKey, - cm, - isProxyTest = false, - browserName, - browserVersion, - testName = args.testName; + cm; caps.browserName = args["browser"] || config["browser"]; if (!caps.browserName) { @@ -109,15 +108,90 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { return caps; } + // Set proxy capabilities + caps = self.setProxyCaps(caps, args); + + // Set browser capabilities + caps = self.setBrowserCaps(caps, args, config); + + // Process user capabilities + caps = self.processUserCapabilities(caps, config); + + caps = self.setMobileCaps(caps); + + self.logger.debug('To run the test ' + args.testName + ' with browser:' + caps.browserName + ',version:' + caps.version); + + return caps; + +}; + +/** + * Set device and app in capabilities for mobile browsers + */ +CapabilityManager.prototype.processUserCapabilities = function(caps, config) { + + var cm, + tmpCaps; + + // if the user has passed capabilities as json + if (config.capabilities) { + cm = new CapabilityManager(); + tmpCaps = cm.getCapability(config.capabilities, caps.browserName); + if (tmpCaps === null) { + caps.error = "No related capability for " + caps.browserName + " in " + config.capabilities; + return caps; + } + caps = tmpCaps; + } + return caps; + + +}; + +/** + * Set device and app in capabilities for mobile browsers + */ +CapabilityManager.prototype.setMobileCaps = function(caps) { + + var browserName = caps.browserName.toLowerCase(); + + //extra properties required for appium + //ios case + if (browserName === "iphone" || browserName === "ipad") { + caps.device = browserName; + caps.app = "safari"; + + // Remove version property if set to latest + if (caps.version === "latest") { + delete caps.version; + } + + //android case + } else if (browserName === "android" || browserName === "androidtablet") { + caps.device = browserName; + caps.app = "browser"; + } + return caps; + + +}; + +/** + * Set capabilities for proxy + * @param args + * @param caps + * @returns {*} + */ +CapabilityManager.prototype.setProxyCaps = function (caps, args) { + + var self = this; // For tests needing proxy server, set proxy flag if (args.proxyUrl) { if (args.proxy || args.proxy === undefined) { - isProxyTest = true; - // Add settings for proxy - self.logger.debug("Adding Proxy Setting to the Browser for the test " + testName); + self.logger.debug("Adding Proxy Setting to the Browser for the test " + args.testName); caps.proxy = { "httpProxy": args.proxyUrl, "sslProxy": args.proxyUrl, @@ -128,6 +202,23 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { self.logger.debug("Descriptor overridden proxy param. Not setting proxy in browser"); } } + return caps; + +}; + +/** + * Set browserName and version + * @param caps + * @param config + * @param args + */ +CapabilityManager.prototype.setBrowserCaps = function (caps, args, config) { + + var browserInfo, + browserName, + browserVersion, + versionKey, + self = this; browserInfo = caps.browserName.split("-", 2); @@ -144,43 +235,19 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { } // If browser is reuse and its a proxy test, set browser to firefox - if (caps.browserName === "reuse" && isProxyTest) { + if (caps.browserName === "reuse" && caps.proxy) { caps.browserName = "firefox"; caps.version = "latest"; - self.logger.debug(testName + " is a proxy test so can't use reuse. Setting browser to firefox."); + self.logger.debug(args.testName + " is a proxy test so can't use reuse. Setting browser to firefox."); } else { caps.browserName = browserName; caps.version = browserVersion; } - // if the user has passed capabilities as json - if (config.capabilities) { - cm = new CapabilityManager(); - tmpCaps = cm.getCapability(config.capabilities, caps.browserName); - if (tmpCaps === null) { - caps.error = "No related capability for " + caps.browserName + " in " + config.capabilities; - return caps; - } - caps = tmpCaps; - } - - self.logger.debug('To run the test ' + testName + ' with browser:' + caps.browserName + ',version:' + caps.version); - - browserName = caps.browserName.toLowerCase(); - - //extra properties required for appium - //ios case - if (browserName === "iphone" || browserName === "ipad") { - caps.device = browserName; - caps.app = "safari"; - //android case - } else if (browserName === "android" || browserName === "androidtablet") { - caps.device = browserName; - caps.app = "browser"; - } - return caps; }; + + module.exports = CapabilityManager; \ No newline at end of file diff --git a/tests/unit/lib/util/capabilitymanager-tests.js b/tests/unit/lib/util/capabilitymanager-tests.js index 5fbc8fb5..3104c6b0 100644 --- a/tests/unit/lib/util/capabilitymanager-tests.js +++ b/tests/unit/lib/util/capabilitymanager-tests.js @@ -22,7 +22,7 @@ YUI.add('capabilitymanager-tests', function(Y) { })); suite.add(new Y.Test.Case({ - "Confirm getCapability works": function(){ + "Confirm getCapability works if JSON filepath passed": function(){ var expectedString = {"browserName":"firefox","platform":"WINDOWS","version":"6.0","javascriptEnabled":"true"}; var cap = cm.getCapability(__dirname + "/capabilities.json", "win_xp_ff_6"); Y.Assert.areEqual(JSON.stringify(expectedString), JSON.stringify(cap), "Confirm the same JSON is returned"); @@ -34,6 +34,147 @@ YUI.add('capabilitymanager-tests', function(Y) { })); + suite.add(new Y.Test.Case({ + "Confirm getCapability is null if both JSON blob or filePath is invalid": function(){ + var expectedString = {"browserName":"firefox","platform":"WINDOWS","version":"6.0","javascriptEnabled":"true"}; + var cap = cm.getCapability(__dirname + "/capabilities2.json", "win_xp_ff_6"); + Y.Assert.areEqual(null, cap, "Caps JSON shall be null"); + + } + })); + + + suite.add(new Y.Test.Case({ + "Confirm getCapability works if JSON blob passed": function(){ + var caps = "{\"capabilities\": {\"win_xp_ff_6\": {\"browserName\": \"firefox\",\"platform\": \"WINDOWS\",\"version\": \"6.0\"},\"mac_chrome_18\": {" + + "\"browserName\": \"chrome\",\"platform\": \"MAC\",\"version\": \"18.0\"}},\"common_capabilities\": {\"javascriptEnabled\": \"true\"}}"; + var expectedString = {"browserName":"firefox","platform":"WINDOWS","version":"6.0","javascriptEnabled":"true"}; + var cap = cm.getCapability(caps, "win_xp_ff_6"); + Y.Assert.areEqual(JSON.stringify(expectedString), JSON.stringify(cap), "Confirm the same JSON is returned"); + + //Make sure null is returned and invalid capability is given + cap = cm.getCapability("", "invalid"); + Y.Assert.isNull(cap, "Confirm null is returned if invalid cap is given"); + } + })); + + + suite.add(new Y.Test.Case({ + "Test proxy capabilities - proxy true": function(){ + + var args = {}, + caps = {}; + + args.proxyUrl='someHost:10000'; + args.proxy = true; + + caps = cm.setProxyCaps(caps, args); + + Y.Assert.areEqual('someHost:10000',caps.proxy.httpProxy,"Http Proxy url doesnt match"); + Y.Assert.areEqual('someHost:10000',caps.proxy.sslProxy,"Ssl Proxy url doesnt match"); + Y.Assert.areEqual('manual',caps.proxy.proxyType,"proxy type doesnt match"); + + } + })); + + + suite.add(new Y.Test.Case({ + "Test proxy capabilities - proxy undefined": function(){ + + var args = {}, + caps = {}; + + args.proxyUrl='someHost:10000'; + + caps = cm.setProxyCaps(caps, args); + + Y.Assert.areEqual('someHost:10000',caps.proxy.httpProxy,"Http Proxy url doesnt match"); + Y.Assert.areEqual('someHost:10000',caps.proxy.sslProxy,"Ssl Proxy url doesnt match"); + Y.Assert.areEqual('manual',caps.proxy.proxyType,"proxy type doesnt match"); + + } + })); + + + suite.add(new Y.Test.Case({ + "Test proxy capabilities - proxy false": function(){ + + var args = {}, + caps = {}; + + args.proxyUrl='someHost:10000'; + args.proxy = false; + + caps = cm.setProxyCaps(caps, args); + Y.Assert.isUndefined(caps.proxy, ' Caps proxy should be undefined if proxy set to false'); + + } + })); + + + suite.add(new Y.Test.Case({ + "Test proxy capabilities": function(){ + + var args = {}, + caps = {}; + + args.proxyUrl='someHost:10000'; + args.proxy = true; + + caps = cm.setProxyCaps(caps, args); + + Y.Assert.areEqual('someHost:10000',caps.proxy.httpProxy,"Http Proxy url doesnt match"); + Y.Assert.areEqual('someHost:10000',caps.proxy.sslProxy,"Ssl Proxy url doesnt match"); + Y.Assert.areEqual('manual',caps.proxy.proxyType,"proxy type doesnt match"); + + } + })); + + + suite.add(new Y.Test.Case({ + "Test mobile capabilities": function(){ + + var args = {}, + caps = {}; + + caps.browserName = "iphone"; + caps.version = "latest"; + + args.proxyUrl='someHost:10000'; + args.proxy = true; + + caps = cm.setMobileCaps(caps); + + Y.Assert.areEqual('iphone',caps.device,"Caps device should be iphone"); + Y.Assert.areEqual('safari',caps.app,"Caps app should be safari"); + } + })); + + + suite.add(new Y.Test.Case({ + "Test browser caps for reuse and proxy": function(){ + + var args = {}, + caps = {}, + config = {}; + + caps.browserName = "reuse"; + caps.proxy = { + "httpProxy": "someHost:10000", + "sslProxy": "someHost:10000", + "proxyType": "manual" + }; + + caps = cm.setBrowserCaps(caps, args, config); + + Y.Assert.areEqual('firefox',caps.browserName,"Caps browser should be firefox"); + Y.Assert.areEqual('latest',caps.version,"Caps version should be latest"); + } + })); + + + + Y.Test.Runner.add(suite); }, '0.0.1' ,{requires:['test']}); \ No newline at end of file From 5b0387108fbeb444d7d38ee3c303641debfe092f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 17:47:12 -0700 Subject: [PATCH 049/197] Merging user defined capabilities with default capabilities --- lib/session/testexecutor.js | 8 +++--- lib/util/capabilitymanager.js | 25 +++++++++++-------- npm-shrinkwrap.json | 6 ++--- package.json | 4 +-- .../unit/lib/util/capabilitymanager-tests.js | 25 +++++++++++++++++++ tests/unit/stub/seleniumserver.js | 4 +-- 6 files changed, 51 insertions(+), 21 deletions(-) diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 13ab56e2..ef3ba523 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -10,7 +10,7 @@ var ReportManager = require("../util/reportmanager"); var WdSession = require("../session/wdsession"); var TestSession = require("../session/testsession"); var ProxyManager = require("../proxy/proxymanager"); -var clone = require('clone'); +var _ = require('underscore'); var path = require("path"); var os = require("os"); var async = require("async"); @@ -223,7 +223,7 @@ TestExecutor.prototype.setupTestQueues = function(callback) { for (i = 0; i < wdSessions.length; i += 1) { testQueues[i] = {curIndex: 0, sessions: []}; for (j = 0; j < tests.length; j += 1) { - test = clone(tests[j]); + test = _.clone(tests[j]); // If proxy set to true or reuseSession set to false , ignore reuseSession if (test.startProxyServer === true || test.reuseSession === false) { @@ -244,7 +244,7 @@ TestExecutor.prototype.setupTestQueues = function(callback) { for (i = 0; i < tests.length; i += 1) { browsers = sf.getBrowsers(tests[i]); for (j = 0; j < browsers.length; j += 1) { - test = clone(tests[i]); + test = _.clone(tests[i]); test.browser = browsers[j]; testQueues[0].sessions.push(new TestSession(sf.config, test)); incrementTestSessionCount(test); @@ -273,7 +273,7 @@ TestExecutor.prototype.getTests = function(callback) { } } else if (sf.tests) { for (i = 0; i < sf.tests.length; i += 1) { - testParams = clone(sf.args); + testParams = _.clone(sf.args); testParams.test = sf.tests[i]; // convert the cmd line test to look like a descriptor test test = { diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index d4f0f647..64dbf357 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -8,7 +8,7 @@ var log4js = require("log4js"); var fs = require("fs"); -var clone = require("clone"); +var _ = require("underscore"); function CapabilityManager() { this.logger = log4js.getLogger("CapabilityManager"); @@ -17,7 +17,7 @@ function CapabilityManager() { /** * * @param caps - JSON blob or path to capabilities file - * @param capName - Browsername + * @param capName - key to the caps object ,passed as browser from command line * @returns {*} */ CapabilityManager.prototype.getCapability = function (caps, capName) { @@ -31,7 +31,7 @@ CapabilityManager.prototype.getCapability = function (caps, capName) { try { capJson = self.getCapsJSON(caps); - cap = clone(capJson.capabilities[capName]); + cap = _.clone(capJson.capabilities[capName]); commonCap = capJson.common_capabilities; if (cap) { for (k in commonCap) { @@ -98,9 +98,7 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { "platform": "ANY", "javascriptEnabled": true, "seleniumProtocol": "WebDriver" - }, - tmpCaps, - cm; + }; caps.browserName = args["browser"] || config["browser"]; if (!caps.browserName) { @@ -114,11 +112,12 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { // Set browser capabilities caps = self.setBrowserCaps(caps, args, config); + // Set mobile browser capabilities + caps = self.setMobileCaps(caps); + // Process user capabilities caps = self.processUserCapabilities(caps, config); - caps = self.setMobileCaps(caps); - self.logger.debug('To run the test ' + args.testName + ' with browser:' + caps.browserName + ',version:' + caps.version); return caps; @@ -132,16 +131,22 @@ CapabilityManager.prototype.processUserCapabilities = function(caps, config) { var cm, tmpCaps; - + console.log('****1'); // if the user has passed capabilities as json if (config.capabilities) { cm = new CapabilityManager(); tmpCaps = cm.getCapability(config.capabilities, caps.browserName); + console.log('****2 :: ' + JSON.stringify(tmpCaps)); if (tmpCaps === null) { caps.error = "No related capability for " + caps.browserName + " in " + config.capabilities; return caps; } - caps = tmpCaps; + console.log('****3 before :: ' + JSON.stringify(caps)); + // Copy over tmpCaps to caps. Will over ride any default properties in caps and copy the extra ones + _.extend(caps,tmpCaps); +// console.log('****3 before :: ' + JSON.stringify(caps)); + +// caps = tmpCaps; } return caps; diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 9da004e0..941f7338 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -115,9 +115,6 @@ "version": "0.1.15" } } - }, - "clone": { - "version": "0.1.0" }, "useragent": { "version": "1.1.0", @@ -235,6 +232,9 @@ "selenium-webdriver": { "version": "2.39.0" }, + "underscore": { + "version": "1.6.0" + }, "mocha": { "version": "1.7.4", "dependencies": { diff --git a/package.json b/package.json index ab4b8400..07b48f81 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "yui": "3.8.0", "JSV": "4.0.2", "log4js": "0.5.1", - "clone": "0.1.0", "useragent": "1.1.0", "istanbul": "0.1.25", "uglify-js": "1.3.4", @@ -57,7 +56,8 @@ "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", - "selenium-webdriver": "2.39.0" + "selenium-webdriver": "2.39.0", + "underscore": "1.6.0" }, "optionalDependencies": { "mocha": "1.7.4", diff --git a/tests/unit/lib/util/capabilitymanager-tests.js b/tests/unit/lib/util/capabilitymanager-tests.js index 3104c6b0..d645d9fd 100644 --- a/tests/unit/lib/util/capabilitymanager-tests.js +++ b/tests/unit/lib/util/capabilitymanager-tests.js @@ -173,6 +173,31 @@ YUI.add('capabilitymanager-tests', function(Y) { })); + suite.add(new Y.Test.Case({ + + "Test process user capabilities": function(){ + + var caps = { + "platform": "ANY", + "javascriptEnabled": true, + "seleniumProtocol": "WebDriver" + }; + caps.browserName = "mac_chrome_18"; + + var config = {}; + config.capabilities = __dirname + "/capabilities.json"; + config.browser = "mac_chrome_18"; + + caps = cm.processUserCapabilities(caps,config); + + Y.Assert.areEqual('WebDriver',caps.seleniumProtocol,"Caps seleniumProtocol should be WebDriver"); + Y.Assert.isTrue(true,caps.javascriptEnabled,"Caps javascriptEnabled should be true"); + Y.Assert.areEqual('chrome',caps.browserName,"Caps browserName should be chrome"); + Y.Assert.areEqual('MAC',caps.platform,"Caps platform should be MAC"); + Y.Assert.areEqual('18.0',caps.version,"Caps version should be 18.0"); + + } + })); Y.Test.Runner.add(suite); diff --git a/tests/unit/stub/seleniumserver.js b/tests/unit/stub/seleniumserver.js index af5eef39..efd5104d 100644 --- a/tests/unit/stub/seleniumserver.js +++ b/tests/unit/stub/seleniumserver.js @@ -7,7 +7,7 @@ */ var express = require("express"), - clone = require('clone'); + _ = require('underscore'); function SeleniumServer(port) { @@ -78,7 +78,7 @@ SeleniumServer.prototype.setActiveSessionCount = function(sessionCount) { for(i = 0 ; i < sessionCount ; i = i + 1) { obj = null; - obj = clone(this.sessionObj); + obj = _.clone(this.sessionObj); obj.id = this.sessionsID; this.sessionsID += 1; this.sessions.value.push(obj) From 7d500164fbb3dd36b383e02151020da1ce8d7564 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 17:50:03 -0700 Subject: [PATCH 050/197] Cleanup --- lib/util/capabilitymanager.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 64dbf357..b0ecea17 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -131,25 +131,20 @@ CapabilityManager.prototype.processUserCapabilities = function(caps, config) { var cm, tmpCaps; - console.log('****1'); // if the user has passed capabilities as json if (config.capabilities) { cm = new CapabilityManager(); tmpCaps = cm.getCapability(config.capabilities, caps.browserName); - console.log('****2 :: ' + JSON.stringify(tmpCaps)); if (tmpCaps === null) { caps.error = "No related capability for " + caps.browserName + " in " + config.capabilities; return caps; } - console.log('****3 before :: ' + JSON.stringify(caps)); + // Copy over tmpCaps to caps. Will over ride any default properties in caps and copy the extra ones _.extend(caps,tmpCaps); -// console.log('****3 before :: ' + JSON.stringify(caps)); - -// caps = tmpCaps; } - return caps; + return caps; }; From d89260719cc14444eb156b13fcf4753984d4aae0 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 17:55:15 -0700 Subject: [PATCH 051/197] Cleanup --- lib/util/dataprovider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 8863b5be..3ad39065 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -14,7 +14,7 @@ var ycb = require('ycb'); var path = require('path'); var ImportManager = require("../util/importmanager"); var ErrorManager = require("../util/errormanager"), - em = ErrorManager.getInstance(); +em = ErrorManager.getInstance(); function DataProvider(config, args, testDataPath) { From 4a05758306f8864e9f7fdc64d1f3e19caacc2546 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 15 Apr 2014 23:05:50 -0700 Subject: [PATCH 052/197] Using yui as peer dependency --- npm-shrinkwrap.json | 2 +- package.json | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 941f7338..49c57418 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -98,7 +98,7 @@ } }, "yui": { - "version": "3.8.0", + "version": "3.x", "dependencies": { "request": { "version": "2.9.202" diff --git a/package.json b/package.json index 07b48f81..0577f3b8 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "nopt": "2.0.0", "colors": "0.6.0-1", "express": "3.0.0", - "yui": "3.8.0", "JSV": "4.0.2", "log4js": "0.5.1", "useragent": "1.1.0", @@ -59,6 +58,9 @@ "selenium-webdriver": "2.39.0", "underscore": "1.6.0" }, + "peerDependencies":{ + "yui": "3.x" + }, "optionalDependencies": { "mocha": "1.7.4", "jasmine-node": "1.4.0", From 2c4a3539907bca33f39f3e4d24e5e3edafda28ac Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 16 Apr 2014 10:11:11 -0700 Subject: [PATCH 053/197] Adding capabilities file for documentation --- demo/test/capabilities.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 demo/test/capabilities.json diff --git a/demo/test/capabilities.json b/demo/test/capabilities.json new file mode 100644 index 00000000..3806e65d --- /dev/null +++ b/demo/test/capabilities.json @@ -0,0 +1,11 @@ +{ + "capabilities": { + "mac_chrome": { + "browserName": "chrome", + "platform": "MAC" + } + }, + "common_capabilities": { + "javascriptEnabled": "true" + } +} \ No newline at end of file From 76dba47588582932a7f922052dad65baf26d9b64 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Apr 2014 00:32:22 -0700 Subject: [PATCH 054/197] Fixing readAndValidateJSON() --- lib/util/dataprovider.js | 17 +++++---- tests/unit/lib/util/dataprovider-tests.js | 42 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 3ad39065..58c93e3b 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -135,27 +135,32 @@ DataProvider.prototype.readAndValidateJSON = function (param) { json, parsedJson, self = this, - pwd = global.workingDirectory || ''; + pwd = global.workingDirectory || '', + proc = self.mock || process; if (param) { - if (param.indexOf(".json") > 0) { + + try { + // If file, read Json from file and validate paramPath = path.resolve(pwd, param); json = fs.readFileSync(paramPath, "utf-8"); - } else { + } + catch(e) { + // Not a file, so treat it as json string json = param; } try { parsedJson = JSON.parse(json); } catch (msg) { - self.logger.error(param + " is not a valid JSON"); self.logger.error(msg); - process.exit(1); + self.logger.error(param + " is not a valid JSON"); + proc.exit(1); } } - return parsedJson; + return parsedJson; }; diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 64ee7f74..0e4ba76f 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -25,6 +25,12 @@ YUI.add('dataprovider-tests', function (Y) { var dp = new dataProv(conf, args, __dirname + "/testDescriptor.json"); var dpvalues = dp.getTestData(); + dp.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + } + suite.add(new Y.Test.Case({ "Confirm constructor works": function(){ Y.Assert.isNotNull(dp, "Confirm initiallizing does not return null"); @@ -145,6 +151,42 @@ YUI.add('dataprovider-tests', function (Y) { } })); + + suite.add(new Y.Test.Case({ + + "Invalid json from file": function() { + + var msg; + + try { + dp.readAndValidateJSON(__dirname + '/invalid.json'); + } + catch(e) { + msg = e; + } + Y.Assert.areEqual( "exit code is 1", msg.message); + } + })); + + + suite.add(new Y.Test.Case({ + + "Invalid json ": function() { + + var msg; + + try { + dp.readAndValidateJSON('{\'a\'}'); + } + catch(e) { + msg = e; + } + Y.Assert.areEqual( "exit code is 1", msg.message); + } + })); + + + suite.add(new Y.Test.Case({ "Replace params": function(){ var conf = { From 724d108a500d92ecf71d5c3ea6c3469bde5aa7c0 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Apr 2014 00:33:25 -0700 Subject: [PATCH 055/197] Adding invalid json for tests --- tests/unit/lib/util/invalid.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/unit/lib/util/invalid.json diff --git a/tests/unit/lib/util/invalid.json b/tests/unit/lib/util/invalid.json new file mode 100644 index 00000000..4a433af0 --- /dev/null +++ b/tests/unit/lib/util/invalid.json @@ -0,0 +1,3 @@ +{ + invalid +} \ No newline at end of file From 29dd5633057ea8a9a7786b3994a767e47a339611 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Apr 2014 09:55:03 -0700 Subject: [PATCH 056/197] Adding comments --- lib/util/dataprovider.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 48e17b9c..07c647b5 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -76,6 +76,8 @@ DataProvider.prototype.getTestData = function () { /** * + * @param descriptorJson + * @returns {*} Processed descriptor Json */ DataProvider.prototype.getDescriptor = function(descriptorJson) { From b511a08f540d6818cc8fc005cd7d877727fd63c5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Apr 2014 23:17:07 -0700 Subject: [PATCH 057/197] Reverting to use clone module for cloning --- lib/session/testexecutor.js | 8 ++++---- lib/util/capabilitymanager.js | 3 ++- npm-shrinkwrap.json | 3 +++ package.json | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index ef3ba523..13ab56e2 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -10,7 +10,7 @@ var ReportManager = require("../util/reportmanager"); var WdSession = require("../session/wdsession"); var TestSession = require("../session/testsession"); var ProxyManager = require("../proxy/proxymanager"); -var _ = require('underscore'); +var clone = require('clone'); var path = require("path"); var os = require("os"); var async = require("async"); @@ -223,7 +223,7 @@ TestExecutor.prototype.setupTestQueues = function(callback) { for (i = 0; i < wdSessions.length; i += 1) { testQueues[i] = {curIndex: 0, sessions: []}; for (j = 0; j < tests.length; j += 1) { - test = _.clone(tests[j]); + test = clone(tests[j]); // If proxy set to true or reuseSession set to false , ignore reuseSession if (test.startProxyServer === true || test.reuseSession === false) { @@ -244,7 +244,7 @@ TestExecutor.prototype.setupTestQueues = function(callback) { for (i = 0; i < tests.length; i += 1) { browsers = sf.getBrowsers(tests[i]); for (j = 0; j < browsers.length; j += 1) { - test = _.clone(tests[i]); + test = clone(tests[i]); test.browser = browsers[j]; testQueues[0].sessions.push(new TestSession(sf.config, test)); incrementTestSessionCount(test); @@ -273,7 +273,7 @@ TestExecutor.prototype.getTests = function(callback) { } } else if (sf.tests) { for (i = 0; i < sf.tests.length; i += 1) { - testParams = _.clone(sf.args); + testParams = clone(sf.args); testParams.test = sf.tests[i]; // convert the cmd line test to look like a descriptor test test = { diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index b0ecea17..0385a231 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -9,6 +9,7 @@ var log4js = require("log4js"); var fs = require("fs"); var _ = require("underscore"); +var clone = require("clone"); function CapabilityManager() { this.logger = log4js.getLogger("CapabilityManager"); @@ -31,7 +32,7 @@ CapabilityManager.prototype.getCapability = function (caps, capName) { try { capJson = self.getCapsJSON(caps); - cap = _.clone(capJson.capabilities[capName]); + cap = clone(capJson.capabilities[capName]); commonCap = capJson.common_capabilities; if (cap) { for (k in commonCap) { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 941f7338..f0f48067 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -116,6 +116,9 @@ } } }, + "clone": { + "version": "0.1.11" + }, "useragent": { "version": "1.1.0", "dependencies": { diff --git a/package.json b/package.json index 07b48f81..003ea644 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,8 @@ "xml2js": "0.1.14", "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", - "underscore": "1.6.0" + "underscore": "1.6.0", + "clone":"0.1.11" }, "optionalDependencies": { "mocha": "1.7.4", From c6027428f49ce5fad43add69097f3bf8bbe68610 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Apr 2014 23:24:53 -0700 Subject: [PATCH 058/197] Adding tests --- lib/util/datadrivermanager.js | 6 +- lib/util/dataprovider.js | 6 +- npm-shrinkwrap.json | 3 + package.json | 3 +- tests/unit/lib/util/configdata.json | 11 +++ .../unit/lib/util/datadriven-descriptor.json | 34 +++++++ .../unit/lib/util/datadrivermanager-tests.js | 88 +++++++++++++++++++ tests/unit/lib/util/dataprovider-tests.js | 27 +++++- 8 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 tests/unit/lib/util/configdata.json create mode 100644 tests/unit/lib/util/datadriven-descriptor.json create mode 100644 tests/unit/lib/util/datadrivermanager-tests.js diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index bc785bb4..63791828 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -28,15 +28,15 @@ DataDriverManager.prototype.processDataDriver = function (dataDriverPath, descri dataDriver, configArr, self = this, - descriptorArr = []; + descriptorArr = [], + proc = self.mock || process; try { dataDriver = fs.readFileSync(dataDriverPath, "utf-8"); dataDriverObj = JSON.parse(dataDriver); - } catch (e) { self.logger.error('Error in processing data driven descriptor ' + e); - process.exit(1); + proc.exit(1); } configArr = dataDriverObj.config; diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index d8a69893..e3d4a60c 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -30,6 +30,10 @@ function DataProvider(config, args, testDataPath) { this.defaultParamJSON = this.config.defaultParamJSON; } +/** + * + * @returns {Array} + */ DataProvider.prototype.getTestData = function () { var descriptorJson, @@ -45,7 +49,7 @@ DataProvider.prototype.getTestData = function () { self.logger.debug('Loading descriptor file: ' + this.testDataPath); descriptorJsonStr = fs.readFileSync(this.testDataPath, "utf-8"); - descriptorJson = JSON.parse(descriptorJsonStr); + descriptorJson = JSON.parse(descriptorJsonStr); // TODO Error checking relativePath = path.dirname(self.testDataPath); dataDriverPath = descriptorJson[0].dataDriver; diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 941f7338..f0f48067 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -116,6 +116,9 @@ } } }, + "clone": { + "version": "0.1.11" + }, "useragent": { "version": "1.1.0", "dependencies": { diff --git a/package.json b/package.json index 07b48f81..003ea644 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,8 @@ "xml2js": "0.1.14", "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", - "underscore": "1.6.0" + "underscore": "1.6.0", + "clone":"0.1.11" }, "optionalDependencies": { "mocha": "1.7.4", diff --git a/tests/unit/lib/util/configdata.json b/tests/unit/lib/util/configdata.json new file mode 100644 index 00000000..826407ab --- /dev/null +++ b/tests/unit/lib/util/configdata.json @@ -0,0 +1,11 @@ +{ + "config": [ + { + "baseUrl": "http://finance.yahoo.com" + }, + { + "baseUrl": "http://yahoo.com" + } + ] + +} diff --git a/tests/unit/lib/util/datadriven-descriptor.json b/tests/unit/lib/util/datadriven-descriptor.json new file mode 100644 index 00000000..e0d379f6 --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor.json @@ -0,0 +1,34 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configdata.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js new file mode 100644 index 00000000..55d791b3 --- /dev/null +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -0,0 +1,88 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +YUI.add('datadrivermanager-tests', function (Y) { + + var fs = require("fs"); + var path = require('path'), + arrowRoot = path.join(__dirname, '../../../..'), + DataDriverMgr = require(arrowRoot+'/lib/util/datadrivermanager.js'), + suite = new Y.Test.Suite("Data Driver Manager test suite"); + + var dataDriverMgr = new DataDriverMgr(); + + dataDriverMgr.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; + + suite.add(new Y.Test.Case({ + + "process data driver ": function() { + + var + dataDriverPath = __dirname + '/configdata.json', + descriptorJsonStr = fs.readFileSync(__dirname + '/datadriven-descriptor.json', 'utf-8'), + descriptorJson, + descriptorArr = []; + + try { + descriptorJson = JSON.parse(descriptorJsonStr); + descriptorArr = dataDriverMgr.processDataDriver(dataDriverPath, descriptorJson); + + var desc0 = '[{"settings":["master"],"name":"controllers - 0","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://finance.yahoo.com"}},{"settings":["environment:development"]}]'; + var desc1 = '[{"settings":["master"],"name":"controllers - 1","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://yahoo.com"}},{"settings":["environment:development"]}]'; + + Y.Assert.areEqual(desc0, JSON.stringify(descriptorArr[0])); + Y.Assert.areEqual(desc1, JSON.stringify(descriptorArr[1])); + + }catch(e) { + + } + + Y.Assert.areEqual( 2, descriptorArr.length); + + + } + })); + + + suite.add(new Y.Test.Case({ + + "process data driver invalid data driven descriptor ": function() { + + var + dataDriverPath = __dirname + '/invalid.json', + descriptorJson, + msg; + + try { + descriptorJson = '[{"settings":["master"],"name":"controllers","dataDriver":"./configdata.json","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}}},{"settings":["environment:development"]}]'; + dataDriverMgr.processDataDriver(dataDriverPath, JSON.parse(descriptorJson)); + + }catch(e) { + msg = e.message; + } + + Y.Assert.areEqual("exit code is 1",msg,'Error message doesnt match when data driven descriptor is invalid' ); + + + } + })); + + + Y.Test.Runner.add(suite); +}, '0.0.1', {requires:['test']}); + + + + + + + \ No newline at end of file diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 3e6c9c7e..5886295e 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -29,7 +29,7 @@ YUI.add('dataprovider-tests', function (Y) { exit: function (code) { throw new Error("exit code is "+code); } - } + }; suite.add(new Y.Test.Case({ "Confirm constructor works": function(){ @@ -282,6 +282,31 @@ YUI.add('dataprovider-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + "Data driven descriptor test": function(){ + + var conf = { + "baseUrl": "http://overridebase.url.com", + "arrowModuleRoot": __dirname + "/", + "dimensions": __dirname + "/dimensions.json", + "context": "" + }, + args = {}; + + var dp = new dataProv(conf, args, __dirname + "/datadriven-descriptor.json"); + var dpvalues = dp.getTestData(); + + Y.Assert.areEqual(2, dpvalues.length, 'Number of data driven descriptors dont match'); + +// Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues[0].dataprovider.test2.params.page); +// Y.Assert.areEqual("sometest.js", dpvalues[0].dataprovider.test2.params.test); + + } + })); + + + Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); From 2941a73e3a01c1ad2052428c6ebcf5d68261965a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 14:55:31 -0700 Subject: [PATCH 059/197] Adding support for config array as data driven --- lib/util/datadrivermanager.js | 58 +++++++++++---- lib/util/dataprovider.js | 22 +++--- .../lib/util/config/descriptor-schema.json | 37 +++++++++- .../util/datadriven-descriptor-config.json | 41 +++++++++++ .../util/datadriven-descriptor-invalid.json | 34 +++++++++ .../unit/lib/util/datadrivermanager-tests.js | 73 +++++++++++++++++-- tests/unit/lib/util/dataprovider-tests.js | 5 +- 7 files changed, 231 insertions(+), 39 deletions(-) create mode 100644 tests/unit/lib/util/datadriven-descriptor-config.json create mode 100644 tests/unit/lib/util/datadriven-descriptor-invalid.json diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 63791828..754add73 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -7,6 +7,7 @@ var log4js = require("log4js"); var fs = require("fs"); var clone = require("clone"); +var path = require("path"); /** * @@ -16,30 +17,61 @@ function DataDriverManager() { this.logger = log4js.getLogger("DataDriverManager"); } +/** + * + * @param relativePath + * @param descriptorJson + * @returns {config} + */ +DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJson) { + + var dataDriver, + dataDriverObj, + self = this, + proc = self.mock || process, + dataDriverPath; + + + if(descriptorJson[0].dataDriver){ + + try { + dataDriverPath = path.resolve(global.workingDirectory,relativePath, descriptorJson[0].dataDriver); + dataDriver = fs.readFileSync(dataDriverPath, "utf-8"); + dataDriverObj = JSON.parse(dataDriver); + } catch (e) { + self.logger.error('Error in getting config data from ' + dataDriverPath + ', error :' + e); + proc.exit(1); + } + return dataDriverObj.config; + + } else if (descriptorJson[0].config && descriptorJson[0].config.length > 0) { + return descriptorJson[0].config; + } + +}; + /** * * @param dataDriverPath - Path of data driver * @param descriptorJson - JSON object */ -DataDriverManager.prototype.processDataDriver = function (dataDriverPath, descriptorJson) { + + +/** + * + * @param relativePath + * @param descriptorJson + * @returns {Array} + */ +DataDriverManager.prototype.processDataDriver = function (relativePath, descriptorJson) { var - dataDriverObj, dataDriver, configArr, self = this, - descriptorArr = [], - proc = self.mock || process; - - try { - dataDriver = fs.readFileSync(dataDriverPath, "utf-8"); - dataDriverObj = JSON.parse(dataDriver); - } catch (e) { - self.logger.error('Error in processing data driven descriptor ' + e); - proc.exit(1); - } + descriptorArr = []; - configArr = dataDriverObj.config; + configArr = self.getConfigData(relativePath, descriptorJson); if (configArr && configArr.length > 0) { diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index e3d4a60c..6216d37b 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -43,22 +43,20 @@ DataProvider.prototype.getTestData = function () { self = this, descriptorArr = [], dataDrivenDescriptorArr, - dataDriverPath, - dataDriverManager = new DataDriverManager(); + dataDriverManager = new DataDriverManager(), + isDataDriven; self.logger.debug('Loading descriptor file: ' + this.testDataPath); descriptorJsonStr = fs.readFileSync(this.testDataPath, "utf-8"); descriptorJson = JSON.parse(descriptorJsonStr); // TODO Error checking relativePath = path.dirname(self.testDataPath); - dataDriverPath = descriptorJson[0].dataDriver; + isDataDriven = descriptorJson[0].dataDriver || (descriptorJson[0].config && descriptorJson[0].config.length > 0); // Process data driven descriptors - if (dataDriverPath) { + if (isDataDriven) { - dataDriverPath = path.resolve(global.workingDirectory,relativePath, dataDriverPath); - - dataDrivenDescriptorArr = dataDriverManager.processDataDriver(dataDriverPath, descriptorJson); + dataDrivenDescriptorArr = dataDriverManager.processDataDriver(relativePath, descriptorJson); if (dataDrivenDescriptorArr && dataDrivenDescriptorArr.length > 0) { for (var i = 0; i < dataDrivenDescriptorArr.length; i+=1) { @@ -98,6 +96,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { descriptor, descriptorSchema, proc = this.mock || process; + console.log('***1'); // Importing descriptor if (importDescriptor) { // We can read the descriptorJson from processImportDescriptor method too instead of passing from here @@ -130,10 +129,11 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { baseJson = JSON.parse(fs.readFileSync(descriptorJson[0].extends)); descriptorJson = descriptorJson.concat(baseJson); } - // merge dimension into descriptor - dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); - descriptorJson.unshift(dimensionsJson[0]); + if (this.dimensions) { + dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); + descriptorJson.unshift(dimensionsJson[0]); + } try { descriptor = ycb.read(descriptorJson, contextObj, false, false); @@ -153,9 +153,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { if (this.replaceParamJSON || this.defaultParamJSON) { descriptor = this.getDescriptorWithReplacedParams(descriptor); } - descriptorSchema = JSON.parse(fs.readFileSync(self.config["arrowModuleRoot"] + "config/descriptor-schema.json", "utf-8")); - report = JSV.createEnvironment().validate(descriptor, descriptorSchema); if (report.errors.length > 0) { diff --git a/tests/unit/lib/util/config/descriptor-schema.json b/tests/unit/lib/util/config/descriptor-schema.json index 66c8ef2a..80ceede4 100644 --- a/tests/unit/lib/util/config/descriptor-schema.json +++ b/tests/unit/lib/util/config/descriptor-schema.json @@ -4,24 +4,57 @@ "properties" : { "name" : { "type" : "string", "required" :true }, "commonlib" : { "type" : "string"}, + "useSSL" : { "type" : "boolean"}, + "extends" : { "type" : "string"}, + "startProxyServer" : { "type" : "boolean"}, + "routerProxyConfig" : { "type" : "string"}, "config" : { "type" : "object" }, + + "dataDriver":{"type": "string"}, + + "importDescriptor":{ + "type":"array", + "items":[ + { + "path":"Path of the imported file", + "type":"string", + "required":true + }, + { + "group":"Group of tests to import", + "type":"string" + }, + { + "test":"test names to import", + "type":"array" + } + ] + }, + "dataprovider" : { "type":"object", "required":true, "additionalProperties" : { "type" : "object", "properties" : { - "enabled" : { "type" : "boolean" }, + "enabled" : { "type" : "boolean | string" }, "controller" : { "type" : "string" }, "group" : { "type" : "string" }, + "proxy" : { "type" : "boolean" }, "browser" : { "type" : "string" }, + "testTimeOut" : { "type" : "integer" }, + "hasTest" : { "type" : "boolean" }, + "reuseSession" : { "type" : "boolean" }, + "relativePath" : { "type" : "string" }, "params" : {"type" : "object", "properties" : { "page" : { "type" : "string" }, "test" : { "type" : "string" }, - "lib" : { "type" : "string" } + "lib" : { "type" : "string" }, + "engine" :{ "type" : "string" }, + "engineConfig" :{ "type" : "string" } } } diff --git a/tests/unit/lib/util/datadriven-descriptor-config.json b/tests/unit/lib/util/datadriven-descriptor-config.json new file mode 100644 index 00000000..0f972dae --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor-config.json @@ -0,0 +1,41 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": [ + { + "baseUrl": "http://finance.yahoo.com" + }, + { + "baseUrl": "http://yahoo.com" + } + ], + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/tests/unit/lib/util/datadriven-descriptor-invalid.json b/tests/unit/lib/util/datadriven-descriptor-invalid.json new file mode 100644 index 00000000..37d5a0e8 --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor-invalid.json @@ -0,0 +1,34 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./fileDoesNotExist.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js index 55d791b3..8fde9855 100644 --- a/tests/unit/lib/util/datadrivermanager-tests.js +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -22,19 +22,74 @@ YUI.add('datadrivermanager-tests', function (Y) { } }; + suite.add(new Y.Test.Case({ + + "get config data from file": function() { + + var + descPath = __dirname + '/datadriven-descriptor.json', + relativePath = path.dirname(descPath), + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + descriptorJson, + configArr; + + try { + + descriptorJson = JSON.parse(descriptorJsonStr); + configArr = dataDriverMgr.getConfigData(relativePath, descriptorJson); + }catch(e) { + + } + + Y.Assert.isNotUndefined(configArr, "Config array is undefined ( getting from file)"); + Y.Assert.areEqual(2, configArr.length); + + Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); + Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); + + + }, + + "get config data from array": function() { + + var + descPath = __dirname + '/datadriven-descriptor-config.json', + relativePath = path.dirname(descPath), + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + descriptorJson, + configArr; + + try { + descriptorJson = JSON.parse(descriptorJsonStr); + configArr = dataDriverMgr.getConfigData(relativePath, descriptorJson); + }catch(e) { + + } + + Y.Assert.isNotUndefined(configArr, "Config array is undefined (getting from config array)"); + Y.Assert.areEqual(2, configArr.length); + + Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); + Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); + + } + + })); + suite.add(new Y.Test.Case({ "process data driver ": function() { var - dataDriverPath = __dirname + '/configdata.json', - descriptorJsonStr = fs.readFileSync(__dirname + '/datadriven-descriptor.json', 'utf-8'), + descPath = __dirname + '/datadriven-descriptor.json', + relativePath = path.dirname(descPath), + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), descriptorJson, descriptorArr = []; try { descriptorJson = JSON.parse(descriptorJsonStr); - descriptorArr = dataDriverMgr.processDataDriver(dataDriverPath, descriptorJson); + descriptorArr = dataDriverMgr.processDataDriver(relativePath, descriptorJson); var desc0 = '[{"settings":["master"],"name":"controllers - 0","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://finance.yahoo.com"}},{"settings":["environment:development"]}]'; var desc1 = '[{"settings":["master"],"name":"controllers - 1","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://yahoo.com"}},{"settings":["environment:development"]}]'; @@ -52,19 +107,21 @@ YUI.add('datadrivermanager-tests', function (Y) { } })); - suite.add(new Y.Test.Case({ - "process data driver invalid data driven descriptor ": function() { + "process data driver invalid config file": function() { var - dataDriverPath = __dirname + '/invalid.json', + descPath = __dirname + '/datadriven-descriptor-invalid.json', + relativePath = path.dirname(descPath), + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), descriptorJson, msg; try { - descriptorJson = '[{"settings":["master"],"name":"controllers","dataDriver":"./configdata.json","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}}},{"settings":["environment:development"]}]'; - dataDriverMgr.processDataDriver(dataDriverPath, JSON.parse(descriptorJson)); + + descriptorJson = JSON.parse(descriptorJsonStr); + dataDriverMgr.getConfigData(relativePath, descriptorJson); }catch(e) { msg = e.message; diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 5886295e..41df40f3 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -156,7 +156,7 @@ YUI.add('dataprovider-tests', function (Y) { "Invalid json from file": function() { - var msg; + var msg; try { dp.readAndValidateJSON(__dirname + '/invalid.json'); @@ -185,8 +185,6 @@ YUI.add('dataprovider-tests', function (Y) { } })); - - suite.add(new Y.Test.Case({ "Replace params": function(){ var conf = { @@ -209,7 +207,6 @@ YUI.add('dataprovider-tests', function (Y) { } })); - suite.add(new Y.Test.Case({ "Replace params and default params": function(){ var conf = { From 57c091f0fbc43c3df3c605bc0faee9895af841d2 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 15:29:24 -0700 Subject: [PATCH 060/197] Refactoring descriptor validation --- lib/util/dataprovider.js | 43 +++++++++++++++---- tests/unit/lib/util/dataprovider-tests.js | 52 ++++++++++++++++++++++- 2 files changed, 85 insertions(+), 10 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 6216d37b..26a635ba 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -153,17 +153,11 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { if (this.replaceParamJSON || this.defaultParamJSON) { descriptor = this.getDescriptorWithReplacedParams(descriptor); } - descriptorSchema = JSON.parse(fs.readFileSync(self.config["arrowModuleRoot"] + "config/descriptor-schema.json", "utf-8")); - report = JSV.createEnvironment().validate(descriptor, descriptorSchema); - if (report.errors.length > 0) { - self.logger.fatal("Error : " + self.testDataPath + " failed Schema Test !"); - self.logger.info(report.errors); - proc.exit(1); - } + self.validateDescriptor(descriptor, self.config["arrowModuleRoot"] + "config/descriptor-schema.json"); return descriptor; -} +}; /** * @@ -271,4 +265,37 @@ DataProvider.prototype.getDescriptorWithReplacedParams = function (descriptor) { }; +/** + * + * @param descriptor + * @param descriptorSchemaPath + */ +DataProvider.prototype.validateDescriptor = function (descriptor, descriptorSchemaPath) { + + var descriptorSchema, + report, + self = this, + proc = self.mock || process; + + try { + descriptorSchema = fs.readFileSync(descriptorSchemaPath, "utf-8"); + descriptorSchema = JSON.parse(descriptorSchema); + } + catch(e) { + self.logger.error('Failed to read/parse descriptor schema - error :' + e); + proc.exit(1); + } + +// descriptorSchema = JSON.parse(fs.readFileSync(self.config["arrowModuleRoot"] + "config/descriptor-schema.json", "utf-8")); + + report = JSV.createEnvironment().validate(descriptor, descriptorSchema); + + if (report.errors.length > 0) { + self.logger.fatal("Error : " + self.testDataPath + " failed Schema Test !"); + self.logger.info(report.errors); + proc.exit(1); + } + +} + module.exports = DataProvider; \ No newline at end of file diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 41df40f3..378eb296 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -164,7 +164,7 @@ YUI.add('dataprovider-tests', function (Y) { catch(e) { msg = e; } - Y.Assert.areEqual( "exit code is 1", msg.message); + Y.Assert.areEqual( "exit code is 1", msg.message,"readAndValidateJSON() did not throw exception for invalid JSON from file"); } })); @@ -181,7 +181,55 @@ YUI.add('dataprovider-tests', function (Y) { catch(e) { msg = e; } - Y.Assert.areEqual( "exit code is 1", msg.message); + Y.Assert.areEqual( "exit code is 1", msg.message, "readAndValidateJSON() did not throw exception for invalid JSON"); + } + })); + + + + suite.add(new Y.Test.Case({ + + "Validate descriptor against schema ": function() { + + var msg, + descriptor; + + try { + + descriptor = fs.readFileSync(__dirname + '/testDescriptorInvalidSchema.json','utf-8'); + descriptor = JSON.parse(descriptor); + dp.validateDescriptor(descriptor, __dirname + "/config/descriptor-schema.json"); + + } + catch(e) { + msg = e; + } + + Y.Assert.areEqual( "exit code is 1", msg.message, "validateDescriptor() did not throw exception for invalid schema"); + + } + })); + + suite.add(new Y.Test.Case({ + + "Validate descriptor against schema - wrong path for schema ": function() { + + var msg, + descriptor; + + try { + + descriptor = fs.readFileSync(__dirname + '/testDescriptorInvalidSchema.json','utf-8'); + descriptor = JSON.parse(descriptor); + dp.validateDescriptor(descriptor, __dirname + "/config/descriptor-schema-invalid.json"); + + } + catch(e) { + msg = e; + } + + Y.Assert.areEqual( "exit code is 1", msg.message, "validateDescriptor() did not throw exception for invalid schema file"); + } })); From ed7bab57a8561f20324b4935855a4e5e2a6efe30 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 15:41:56 -0700 Subject: [PATCH 061/197] Removing unused method --- lib/util/fileutil.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/util/fileutil.js b/lib/util/fileutil.js index a9efea14..b281626f 100644 --- a/lib/util/fileutil.js +++ b/lib/util/fileutil.js @@ -61,23 +61,23 @@ FileUtil.prototype.removeDirectory = function(dirPath, callback) { } }; - -FileUtil.prototype.deleteFile = function(filePath, callback) { - - try { - - if (existsSync(filePath)) { - fs.unlinkSync(filePath); - callback(); - } else { - callback(); - } - - } catch (e) { - this.logger.info('Error deleting file - ' + filePath + 'Error:' + e); - callback(); - } - -}; +// +//FileUtil.prototype.deleteFile = function(filePath, callback) { +// +// try { +// +// if (existsSync(filePath)) { +// fs.unlinkSync(filePath); +// callback(); +// } else { +// callback(); +// } +// +// } catch (e) { +// this.logger.info('Error deleting file - ' + filePath + 'Error:' + e); +// callback(); +// } +// +//}; module.exports = FileUtil; \ No newline at end of file From f5a575857ce4f8ea4ab59f7f23fca2a42e4694fe Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 15:42:30 -0700 Subject: [PATCH 062/197] Removing unused method --- lib/util/fileutil.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/lib/util/fileutil.js b/lib/util/fileutil.js index b281626f..ba11371f 100644 --- a/lib/util/fileutil.js +++ b/lib/util/fileutil.js @@ -61,23 +61,5 @@ FileUtil.prototype.removeDirectory = function(dirPath, callback) { } }; -// -//FileUtil.prototype.deleteFile = function(filePath, callback) { -// -// try { -// -// if (existsSync(filePath)) { -// fs.unlinkSync(filePath); -// callback(); -// } else { -// callback(); -// } -// -// } catch (e) { -// this.logger.info('Error deleting file - ' + filePath + 'Error:' + e); -// callback(); -// } -// -//}; module.exports = FileUtil; \ No newline at end of file From d370e5e0de8cac08bfab815e0738b9289e83b44c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 15:59:38 -0700 Subject: [PATCH 063/197] Better error messaging --- lib/util/dataprovider.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 58c93e3b..9002e3c6 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -136,7 +136,8 @@ DataProvider.prototype.readAndValidateJSON = function (param) { parsedJson, self = this, pwd = global.workingDirectory || '', - proc = self.mock || process; + proc = self.mock || process, + isFile = false; if (param) { @@ -144,6 +145,7 @@ DataProvider.prototype.readAndValidateJSON = function (param) { // If file, read Json from file and validate paramPath = path.resolve(pwd, param); json = fs.readFileSync(paramPath, "utf-8"); + isFile = true; } catch(e) { // Not a file, so treat it as json string @@ -153,8 +155,17 @@ DataProvider.prototype.readAndValidateJSON = function (param) { try { parsedJson = JSON.parse(json); } catch (msg) { + + var errMsg; + + if (isFile) { + errMsg = "The file " + param + " does not contain valid JSON"; + } else { + errMsg = param + " is not a valid JSON"; + } self.logger.error(msg); - self.logger.error(param + " is not a valid JSON"); + self.logger.error(errMsg); + proc.exit(1); } From 84c739eb98fe338fb372aff2c82e4076c753a84f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 16:14:59 -0700 Subject: [PATCH 064/197] Cleanup, adding test for demo --- demo/test/datadriven-descriptor-config.json | 41 +++++++++++++++++++ lib/util/dataprovider.js | 3 +- .../lib/util/testDescriptorInvalidSchema.json | 36 ++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 demo/test/datadriven-descriptor-config.json create mode 100644 tests/unit/lib/util/testDescriptorInvalidSchema.json diff --git a/demo/test/datadriven-descriptor-config.json b/demo/test/datadriven-descriptor-config.json new file mode 100644 index 00000000..2f7aefb7 --- /dev/null +++ b/demo/test/datadriven-descriptor-config.json @@ -0,0 +1,41 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": [ + { + "baseUrl": "http://finance.yahoo.com" + }, + { + "baseUrl": "http://yahoo.com" + } + ], + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 26a635ba..50828260 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -94,9 +94,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { match, self = this, descriptor, - descriptorSchema, proc = this.mock || process; - console.log('***1'); + // Importing descriptor if (importDescriptor) { // We can read the descriptorJson from processImportDescriptor method too instead of passing from here diff --git a/tests/unit/lib/util/testDescriptorInvalidSchema.json b/tests/unit/lib/util/testDescriptorInvalidSchema.json new file mode 100644 index 00000000..709e7b96 --- /dev/null +++ b/tests/unit/lib/util/testDescriptorInvalidSchema.json @@ -0,0 +1,36 @@ +[ + { + "settings": [ "master" ], + "name" : "tabview", + "commonlib" : "./test-lib.js", + "config" :{ + "baseUrl" : ":8033", + "testsValue": "sometest.js" + }, + "dataproviderInvalidSchema" : { + + "test1" : { + "params" : { + "test" : "test-func.js", + "page" : "testMock.html" + }, + "group" : "unit" + }, + + "test2" : { + "params" : { + "test" : "$$config.testsValue$$", + "page" : "$$config.baseUrl$$/testMock.html" + }, + "group" : "func" + } + } + }, + { + "settings": [ "environment:development" ], + + "config" :{ + "baseUrl" : "http://dimensions.url.override.com" + } + } +] \ No newline at end of file From d3110669fb33b3d1446dd960cc68ce02acc7e792 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 16:16:38 -0700 Subject: [PATCH 065/197] Cleanup --- lib/util/dataprovider.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 50828260..53c667d9 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -285,8 +285,6 @@ DataProvider.prototype.validateDescriptor = function (descriptor, descriptorSche proc.exit(1); } -// descriptorSchema = JSON.parse(fs.readFileSync(self.config["arrowModuleRoot"] + "config/descriptor-schema.json", "utf-8")); - report = JSV.createEnvironment().validate(descriptor, descriptorSchema); if (report.errors.length > 0) { From 4930a1f5ef507282de83f7ae7a77b6f66ba466a4 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Apr 2014 17:40:16 -0700 Subject: [PATCH 066/197] Error handling for empty config --- lib/util/datadrivermanager.js | 17 +++----- lib/util/dataprovider.js | 23 ++++++---- .../datadriven-descriptor-config-empty.json | 36 ++++++++++++++++ .../unit/lib/util/datadrivermanager-tests.js | 34 +++++++++++---- tests/unit/lib/util/dataprovider-tests.js | 43 +++++++++++++++++++ 5 files changed, 126 insertions(+), 27 deletions(-) create mode 100644 tests/unit/lib/util/datadriven-descriptor-config-empty.json diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 754add73..e1e819f5 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -50,26 +50,21 @@ DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJs }; -/** - * - * @param dataDriverPath - Path of data driver - * @param descriptorJson - JSON object - */ - - /** * * @param relativePath * @param descriptorJson * @returns {Array} */ -DataDriverManager.prototype.processDataDriver = function (relativePath, descriptorJson) { +DataDriverManager.prototype.processDataDriver = function (testDataPath, descriptorJson) { var dataDriver, configArr, self = this, - descriptorArr = []; + descriptorArr = [], + proc = self.mock || process, + relativePath = path.dirname(testDataPath); configArr = self.getConfigData(relativePath, descriptorJson); @@ -85,8 +80,10 @@ DataDriverManager.prototype.processDataDriver = function (relativePath, descript descriptorArr.push(descJson); } + } else { + self.logger.error('No configuration data found for the data driven descriptor..' + testDataPath); + proc.exit(1); } - return descriptorArr; }; diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 53c667d9..f0cfea13 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -44,20 +44,26 @@ DataProvider.prototype.getTestData = function () { descriptorArr = [], dataDrivenDescriptorArr, dataDriverManager = new DataDriverManager(), - isDataDriven; + isDataDriven, + proc = self.mock || process; - self.logger.debug('Loading descriptor file: ' + this.testDataPath); + self.logger.debug('Loading descriptor file: ' + self.testDataPath); + descriptorJsonStr = fs.readFileSync(self.testDataPath, "utf-8"); + try { - descriptorJsonStr = fs.readFileSync(this.testDataPath, "utf-8"); - descriptorJson = JSON.parse(descriptorJsonStr); // TODO Error checking - relativePath = path.dirname(self.testDataPath); - isDataDriven = descriptorJson[0].dataDriver || (descriptorJson[0].config && descriptorJson[0].config.length > 0); + descriptorJson = JSON.parse(descriptorJsonStr); + } + catch(e) { + self.logger.error('The descriptor ' + self.testDataPath + ' contains invalid JSON'); + proc.exit(1); + } + + isDataDriven = descriptorJson[0].dataDriver || (descriptorJson[0].config instanceof Array); // Process data driven descriptors if (isDataDriven) { - dataDrivenDescriptorArr = dataDriverManager.processDataDriver(relativePath, descriptorJson); - + dataDrivenDescriptorArr = dataDriverManager.processDataDriver(self.testDataPath, descriptorJson); if (dataDrivenDescriptorArr && dataDrivenDescriptorArr.length > 0) { for (var i = 0; i < dataDrivenDescriptorArr.length; i+=1) { var descJson = dataDrivenDescriptorArr[i]; @@ -71,7 +77,6 @@ DataProvider.prototype.getTestData = function () { descriptor = self.getDescriptor(descriptorJson); descriptorArr.push(descriptor); } - return descriptorArr; }; diff --git a/tests/unit/lib/util/datadriven-descriptor-config-empty.json b/tests/unit/lib/util/datadriven-descriptor-config-empty.json new file mode 100644 index 00000000..e0e0ecef --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor-config-empty.json @@ -0,0 +1,36 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": [ + + ], + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js index 8fde9855..8627da70 100644 --- a/tests/unit/lib/util/datadrivermanager-tests.js +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -28,8 +28,8 @@ YUI.add('datadrivermanager-tests', function (Y) { var descPath = __dirname + '/datadriven-descriptor.json', - relativePath = path.dirname(descPath), descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + relativePath = path.dirname(descPath), descriptorJson, configArr; @@ -47,21 +47,19 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); - }, "get config data from array": function() { var descPath = __dirname + '/datadriven-descriptor-config.json', - relativePath = path.dirname(descPath), descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), descriptorJson, configArr; try { descriptorJson = JSON.parse(descriptorJsonStr); - configArr = dataDriverMgr.getConfigData(relativePath, descriptorJson); + configArr = dataDriverMgr.getConfigData(descPath, descriptorJson); }catch(e) { } @@ -72,6 +70,28 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); + }, + + "empty configuration": function() { + + var + descPath = __dirname + '/datadriven-descriptor-config-empty.json', + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + descriptorJson, + descriptorArr, + msg; + + try { + descriptorJson = JSON.parse(descriptorJsonStr); + descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); + }catch(e) { + + msg = e.message; + } + + Y.Assert.areEqual("exit code is 1", msg); + + } })); @@ -82,14 +102,13 @@ YUI.add('datadrivermanager-tests', function (Y) { var descPath = __dirname + '/datadriven-descriptor.json', - relativePath = path.dirname(descPath), descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), descriptorJson, descriptorArr = []; try { descriptorJson = JSON.parse(descriptorJsonStr); - descriptorArr = dataDriverMgr.processDataDriver(relativePath, descriptorJson); + descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); var desc0 = '[{"settings":["master"],"name":"controllers - 0","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://finance.yahoo.com"}},{"settings":["environment:development"]}]'; var desc1 = '[{"settings":["master"],"name":"controllers - 1","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://yahoo.com"}},{"settings":["environment:development"]}]'; @@ -113,7 +132,6 @@ YUI.add('datadrivermanager-tests', function (Y) { var descPath = __dirname + '/datadriven-descriptor-invalid.json', - relativePath = path.dirname(descPath), descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), descriptorJson, msg; @@ -121,7 +139,7 @@ YUI.add('datadrivermanager-tests', function (Y) { try { descriptorJson = JSON.parse(descriptorJsonStr); - dataDriverMgr.getConfigData(relativePath, descriptorJson); + dataDriverMgr.getConfigData(descPath, descriptorJson); }catch(e) { msg = e.message; diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 378eb296..6003154e 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -74,6 +74,13 @@ YUI.add('dataprovider-tests', function (Y) { args = {}; var dp = new dataProv(conf, args, __dirname + "/testDescriptor.json"); + + dp.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; + var dpvalues = dp.getTestData(); Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues[0].dataprovider.test2.params.page); @@ -95,6 +102,11 @@ YUI.add('dataprovider-tests', function (Y) { args = {}; var dp = new dataProv(conf, args,__dirname + "/testDescriptor.json"); + dp.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; var dpvalues = dp.getTestData(); Y.Assert.areEqual("http://overridebase.url.com/testMock.html", dpvalues[0].dataprovider.test2.params.page); @@ -186,6 +198,32 @@ YUI.add('dataprovider-tests', function (Y) { })); + suite.add(new Y.Test.Case({ + + "Invalid descriptorjson ": function() { + + var conf = {}, + args = {}; + + var dp = new dataProv(conf, args,__dirname + "/invalid.json"); + var msg; + dp.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; + + + try { + dp.getTestData(); + } + catch(e) { + msg = e; + } + Y.Assert.areEqual( "exit code is 1", msg.message, "getTestData() did not throw exception for invalid JSON"); + } + })); + suite.add(new Y.Test.Case({ @@ -340,6 +378,11 @@ YUI.add('dataprovider-tests', function (Y) { args = {}; var dp = new dataProv(conf, args, __dirname + "/datadriven-descriptor.json"); + dp.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; var dpvalues = dp.getTestData(); Y.Assert.areEqual(2, dpvalues.length, 'Number of data driven descriptors dont match'); From 9dbcec7879f0b62a45546e41c991bf6208fefce8 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 21 Apr 2014 12:00:31 -0700 Subject: [PATCH 067/197] Preparing for v0.5.2 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f70ea119..4e7ede90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +# 0.5.2 + + * Using cdnjs link for yui [PR](https://github.com/yahoo/arrow/pull/228) + * Adding support to pass capabilities as JSON object, merging default capabilities with user defined capabilities [PR](https://github.com/yahoo/arrow/pull/227) + # 0.5.1 * Adding support for Android browser [PR](https://github.com/yahoo/arrow/pull/219) diff --git a/package.json b/package.json index 003ea644..3e31e9b7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.5.1", + "version": "0.5.2", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From c3c0670936e0f92f1fd8d618537ed46194d64c09 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 21 Apr 2014 15:49:29 -0700 Subject: [PATCH 068/197] Fixing relativePath declaration --- lib/util/dataprovider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index f0cfea13..c9e28813 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -38,7 +38,6 @@ DataProvider.prototype.getTestData = function () { var descriptorJson, descriptor, - relativePath, descriptorJsonStr, self = this, descriptorArr = [], @@ -99,7 +98,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { match, self = this, descriptor, - proc = this.mock || process; + proc = this.mock || process, + relativePath = path.dirname(this.testDataPath); // Importing descriptor if (importDescriptor) { From fdaf4467a99eceee33c5b31cb6d29ed566535cb4 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 21 Apr 2014 16:27:57 -0700 Subject: [PATCH 069/197] Refactoring extends, adding test --- lib/util/dataprovider.js | 29 ++++++++++++++----- tests/unit/lib/util/base.json | 9 ++++++ tests/unit/lib/util/dataprovider-tests.js | 26 +++++++++++++++++ .../unit/lib/util/testDescriptorExtends.json | 22 ++++++++++++++ 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 tests/unit/lib/util/base.json create mode 100644 tests/unit/lib/util/testDescriptorExtends.json diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index c9e28813..12370b4e 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -124,15 +124,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { } } - //checking if descriptor is extending another json - if (descriptorJson[0].extends) { - - // Resolve path - descriptorJson[0].extends = path.resolve(cwd, relativePath, descriptorJson[0].extends); + descriptorJson = self.extendDescriptor(descriptorJson, cwd, relativePath); - baseJson = JSON.parse(fs.readFileSync(descriptorJson[0].extends)); - descriptorJson = descriptorJson.concat(baseJson); - } // merge dimension into descriptor if (this.dimensions) { dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); @@ -163,6 +156,26 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { return descriptor; }; +/** + * if descriptor is extending another json + * @param descriptorJson + * @param cwd + * @param relativePath + */ +DataProvider.prototype.extendDescriptor = function(descriptorJson, cwd, relativePath) { + + //checking if descriptor is extending another json + if (descriptorJson[0].extends) { + // Resolve path + descriptorJson[0].extends = path.resolve(cwd, relativePath, descriptorJson[0].extends); + var baseJson = JSON.parse(fs.readFileSync(descriptorJson[0].extends)); + descriptorJson = descriptorJson.concat(baseJson); + } + return descriptorJson; + + +}; + /** * * @param param diff --git a/tests/unit/lib/util/base.json b/tests/unit/lib/util/base.json new file mode 100644 index 00000000..8b9b8c6b --- /dev/null +++ b/tests/unit/lib/util/base.json @@ -0,0 +1,9 @@ +[ + { + "settings": [ "environment:new" ], + + "config" :{ + "baseUrl" : "http://newurl.com" + } + } +] diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 6003154e..5813bd43 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -393,6 +393,32 @@ YUI.add('dataprovider-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + "Test extends": function(){ + + var conf = { + "baseUrl": "http://mybaseurl.com", + "arrowModuleRoot": __dirname + "/", + "dimensions": __dirname + "/dimensions.json", + "context": "environment:development", + "replaceParamJSON" : __dirname + "/replaceParams/replaceParam.json", + "defaultParamJSON" : __dirname + "/replaceParams/defaultParam.json" + }, + args = {}; + + var descPath = __dirname + '/testDescriptorExtends.json'; + var dp = new dataProv(conf, args,descPath); + var descriptor = JSON.parse(fs.readFileSync(descPath,'utf-8')); + var relativePath = path.dirname(dp.testDataPath); + + descriptor = dp.extendDescriptor(descriptor, __dirname, relativePath); + Y.Assert.isNotUndefined(descriptor,'Descriptor is undefined after extends'); + Y.Assert.areEqual(2, descriptor.length,'Length of descriptor Array shall be 2'); + Y.Assert.areEqual('{"settings":["environment:new"],"config":{"baseUrl":"http://newurl.com"}}', JSON.stringify(descriptor[1]), "descriptor[1] doesnt match the expected value after extending"); + } + })); + Y.Test.Runner.add(suite); diff --git a/tests/unit/lib/util/testDescriptorExtends.json b/tests/unit/lib/util/testDescriptorExtends.json new file mode 100644 index 00000000..e5659b94 --- /dev/null +++ b/tests/unit/lib/util/testDescriptorExtends.json @@ -0,0 +1,22 @@ +[ + { + "settings": [ "master" ], + "name" : "tabview", + "commonlib" : "./test-lib.js", + "extends":"./base.json", + "config" :{ + "baseUrl" : ":8033", + "testsValue": "sometest.js" + }, + "dataprovider" : { + + "test1" : { + "params" : { + "test" : "test-func.js", + "page" : "testMock.html" + }, + "group" : "unit" + } + } + } +] \ No newline at end of file From 4958483720a72f5a911fee0e4c53cc363d0f605e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 22 Apr 2014 09:51:47 -0700 Subject: [PATCH 070/197] Cleanup --- lib/util/dataprovider.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 12370b4e..19f877b6 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -93,7 +93,6 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { contextObj, baseUrl, pos, - baseJson, dimensionsJson, match, self = this, @@ -173,7 +172,6 @@ DataProvider.prototype.extendDescriptor = function(descriptorJson, cwd, relative } return descriptorJson; - }; /** @@ -311,6 +309,6 @@ DataProvider.prototype.validateDescriptor = function (descriptor, descriptorSche proc.exit(1); } -} +}; module.exports = DataProvider; \ No newline at end of file From 184a5a545c58f10741130c71d85c06ae6e9f69f1 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 23 Apr 2014 23:16:37 -0700 Subject: [PATCH 071/197] Adding support for specifying comments in descriptors --- config/descriptor-schema.json | 3 +++ demo/test/finance-controller-descriptor.json | 3 +++ demo/test/finance-scenario-descriptor.json | 4 ++-- tests/unit/lib/util/config/descriptor-schema.json | 2 ++ tests/unit/lib/util/testDescriptor.json | 4 ++++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/config/descriptor-schema.json b/config/descriptor-schema.json index 20093639..90079497 100644 --- a/config/descriptor-schema.json +++ b/config/descriptor-schema.json @@ -8,6 +8,7 @@ "extends" : { "type" : "string"}, "startProxyServer" : { "type" : "boolean"}, "routerProxyConfig" : { "type" : "string"}, + "comment" : { "type" : "string"}, "config" : { "type" : "object" }, @@ -36,7 +37,9 @@ "required":true, "additionalProperties" : { "type" : "object", + "properties" : { + "comment" : { "type" : "string"}, "enabled" : { "type" : "boolean | string" }, "controller" : { "type" : "string" }, "group" : { "type" : "string" }, diff --git a/demo/test/finance-controller-descriptor.json b/demo/test/finance-controller-descriptor.json index cf5123b5..be8e3913 100644 --- a/demo/test/finance-controller-descriptor.json +++ b/demo/test/finance-controller-descriptor.json @@ -7,12 +7,15 @@ "config":{ "baseUrl":"http://finance.yahoo.com" }, + "comment":"Tests for finance", "dataprovider":{ "Test YHOO Ticker using Finance Controller":{ + "comment":"This is a finance test for Yahoo ticker", "group":"func", "controller":"finance-controller.js", + "params":{ "page":"$$config.baseUrl$$", "txtLocator":"#txtQuotes", diff --git a/demo/test/finance-scenario-descriptor.json b/demo/test/finance-scenario-descriptor.json index cc28156b..5dd5366e 100644 --- a/demo/test/finance-scenario-descriptor.json +++ b/demo/test/finance-scenario-descriptor.json @@ -7,12 +7,12 @@ "config": { "baseUrl": "http://finance.yahoo.com" }, - + "comment":"Tests for finance", "dataprovider" : { "Test YHOO Ticker" : { "group" : "func", - + "comment":"Ticker test", "params" :{ "scenario": [ diff --git a/tests/unit/lib/util/config/descriptor-schema.json b/tests/unit/lib/util/config/descriptor-schema.json index 66c8ef2a..7887d37d 100644 --- a/tests/unit/lib/util/config/descriptor-schema.json +++ b/tests/unit/lib/util/config/descriptor-schema.json @@ -4,6 +4,7 @@ "properties" : { "name" : { "type" : "string", "required" :true }, "commonlib" : { "type" : "string"}, + "comment" : { "type" : "string"}, "config" : { "type" : "object" }, @@ -13,6 +14,7 @@ "additionalProperties" : { "type" : "object", "properties" : { + "comment" : { "type" : "string"}, "enabled" : { "type" : "boolean" }, "controller" : { "type" : "string" }, "group" : { "type" : "string" }, diff --git a/tests/unit/lib/util/testDescriptor.json b/tests/unit/lib/util/testDescriptor.json index 14412341..ffd5d8ae 100644 --- a/tests/unit/lib/util/testDescriptor.json +++ b/tests/unit/lib/util/testDescriptor.json @@ -7,9 +7,11 @@ "baseUrl" : ":8033", "testsValue": "sometest.js" }, + "comment":"This is the comment for master", "dataprovider" : { "test1" : { + "comment":"This is comment for test1", "params" : { "test" : "test-func.js", "page" : "testMock.html" @@ -18,6 +20,7 @@ }, "test2" : { + "comment":"This is comment for test2", "params" : { "test" : "$$config.testsValue$$", "page" : "$$config.baseUrl$$/testMock.html" @@ -27,6 +30,7 @@ } }, { + "comment":"This is the comment for development", "settings": [ "environment:development" ], "config" :{ From 8a06eed355c2c8b6110f8a6c44ddb0cac85358f3 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 24 Apr 2014 10:57:19 -0700 Subject: [PATCH 072/197] Passing logLevel to node child process --- lib/driver/node.js | 10 +++++++--- nodejs/node.js | 20 +++++++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/driver/node.js b/lib/driver/node.js index 1e86b36a..562d4ca9 100644 --- a/lib/driver/node.js +++ b/lib/driver/node.js @@ -24,7 +24,6 @@ var path = require("path"); function NodeDriver(config, args) { Driver.call(this, config, args); coverage.configure(config); - this.logger = log4js.getLogger("NodeDriver"); } @@ -53,7 +52,8 @@ NodeDriver.prototype.createNodeArgs = function (testConfig, testParams, callback engineMgr, deplibs, i, - resolvePath; + resolvePath, + logLevel; resolvePath = function (prepath) { if (typeof prepath !== "string")return prepath; @@ -87,6 +87,9 @@ NodeDriver.prototype.createNodeArgs = function (testConfig, testParams, callback seed = engineMgr.getTestSeed(engine); runner = engineMgr.getTestRunner(engine); + // Pass logLevel to child process + logLevel = self.config['logLevel'] || 'info'; + logger.debug("engine config is:" + JSON.stringify(engineConfig)); logger.debug("seed is:" + seed); logger.debug("runner is " + runner); @@ -114,7 +117,8 @@ NodeDriver.prototype.createNodeArgs = function (testConfig, testParams, callback "libs": libs, "coverage": self.config.coverage, "coverageExclude": self.config.coverageExclude, - "testTimeOut": self.config.testTimeOut + "testTimeOut": self.config.testTimeOut, + "logLevel" :logLevel }; return nodeArgs; diff --git a/nodejs/node.js b/nodejs/node.js index 5b246423..fac019e1 100755 --- a/nodejs/node.js +++ b/nodejs/node.js @@ -8,15 +8,16 @@ var fs = require('fs'); var path = require('path'); -var logger = require("log4js").getLogger("runNodejsTest"); +var log4js = require("log4js"); +var logger = log4js.getLogger("runNodejsTest"); var coverage = require('../lib/util/coverage'); ARROW = {}; var testReport = null; var args = process.argv; -//console.log(args); +console.log(args); var testSpecStr = decodeURI(args[2]); -//console.log(testSpecStr); +console.log(testSpecStr); var testSpec = JSON.parse(testSpecStr); if (!testSpec) { logger.error("Invalid node test args: " + testSpecStr); @@ -35,6 +36,7 @@ var waitForExitTimeout = 1000; var receivedShareData = undefined; var waitForShareDataTimeout = 1000; var waitForShareDataInterval = 100; + process.on('message', function(m) { if (m.shared) { logger.debug("Received shared data."); @@ -49,6 +51,9 @@ var testTimeOut = testSpec.testTimeOut; testTimeOut = typeof testTimeOut === "string" ? parseInt(testTimeOut) : testTimeOut; coverage.configure(testSpec); +// Set logLevel passed from parent process +setLogLevel(testSpec.logLevel); + function getReportStatus() { logger.info("Waiting for the test report"); if ((null === ARROW.testReport) || ARROW.testReport == undefined || (0 === ARROW.testReport.length)) { @@ -139,6 +144,15 @@ function runTest() { } +/** + * set logLevel passed from parent process + * @param logLevel + */ +function setLogLevel(logLevel){ + log4js.setGlobalLogLevel(logLevel); + log4js.restoreConsole(); +} + if (coverageFlag) { coverage.hookRequire(); } From e814da60c91092410d1a241cd9371c2ea7da56e0 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 24 Apr 2014 11:11:51 -0700 Subject: [PATCH 073/197] Reverting comments --- nodejs/node.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nodejs/node.js b/nodejs/node.js index fac019e1..969abe44 100755 --- a/nodejs/node.js +++ b/nodejs/node.js @@ -15,9 +15,9 @@ var coverage = require('../lib/util/coverage'); ARROW = {}; var testReport = null; var args = process.argv; -console.log(args); +//console.log(args); var testSpecStr = decodeURI(args[2]); -console.log(testSpecStr); +//console.log(testSpecStr); var testSpec = JSON.parse(testSpecStr); if (!testSpec) { logger.error("Invalid node test args: " + testSpecStr); From a53b1192531889d8e71a62c9b033639d3aafaeaf Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 24 Apr 2014 14:17:50 -0700 Subject: [PATCH 074/197] Adding demo for comments in scenarios --- demo/test/finance-scenario-descriptor.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/demo/test/finance-scenario-descriptor.json b/demo/test/finance-scenario-descriptor.json index 5dd5366e..cf09318f 100644 --- a/demo/test/finance-scenario-descriptor.json +++ b/demo/test/finance-scenario-descriptor.json @@ -17,9 +17,11 @@ "scenario": [ { + "comment":"Load finance page", "page": "$$config.baseUrl$$" }, { + "comment":"Type yhoo in #txtquotes", "controller": "locator", "params": { "value": "#txtQuotes", @@ -27,6 +29,7 @@ } }, { + "comment":"Verify if the quote symbol matches", "test": "test-quote.js", "quote": "Yahoo! Inc. (YHOO)" } From 527331c54666eab8b0b66e47def2da2894d03142 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 24 Apr 2014 17:17:56 -0700 Subject: [PATCH 075/197] Refactoring ycb read to a separate method, jslint fixes --- lib/util/datadrivermanager.js | 28 +++++---- lib/util/dataprovider.js | 114 ++++++++++++++++++++++++---------- 2 files changed, 98 insertions(+), 44 deletions(-) diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index e1e819f5..44135c59 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -29,24 +29,26 @@ DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJs dataDriverObj, self = this, proc = self.mock || process, - dataDriverPath; + dataDriverPath, + configData; - if(descriptorJson[0].dataDriver){ + if (descriptorJson[0].dataDriver) { try { - dataDriverPath = path.resolve(global.workingDirectory,relativePath, descriptorJson[0].dataDriver); + dataDriverPath = path.resolve(global.workingDirectory, relativePath, descriptorJson[0].dataDriver); dataDriver = fs.readFileSync(dataDriverPath, "utf-8"); dataDriverObj = JSON.parse(dataDriver); } catch (e) { self.logger.error('Error in getting config data from ' + dataDriverPath + ', error :' + e); proc.exit(1); } - return dataDriverObj.config; + configData = dataDriverObj.config; } else if (descriptorJson[0].config && descriptorJson[0].config.length > 0) { - return descriptorJson[0].config; + configData = descriptorJson[0].config; } + return configData; }; @@ -64,18 +66,22 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript self = this, descriptorArr = [], proc = self.mock || process, - relativePath = path.dirname(testDataPath); + relativePath = path.dirname(testDataPath), + i, + descJson; configArr = self.getConfigData(relativePath, descriptorJson); if (configArr && configArr.length > 0) { - for (var i = 0; i < configArr.length; i += 1) { + for (i = 0; i < configArr.length; i += 1) { - var descJson = clone(descriptorJson); - descJson[0].config = configArr[i]; - descJson[0].name += ( ' - ' + i); - delete descJson[0]['dataDriver']; + descJson = clone(descriptorJson); + descJson[0]['config'] = configArr[i]; + descJson[0]['name'] += (' - ' + i); + if (descJson[0]['dataDriver']) { + delete descJson[0]['dataDriver']; + } descriptorArr.push(descJson); } diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 982a445e..d560d6e9 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -12,11 +12,13 @@ var qs = require('querystring'); var JSV = require("JSV").JSV; var ycb = require('ycb'); var path = require('path'); +var _ = require("underscore"); var ImportManager = require("../util/importmanager"); var ErrorManager = require("../util/errormanager"); var DataDriverManager = require("../util/datadrivermanager"); var em = ErrorManager.getInstance(); + function DataProvider(config, args, testDataPath) { this.logger = log4js.getLogger("DataProvider"); @@ -43,39 +45,43 @@ DataProvider.prototype.getTestData = function () { descriptorArr = [], dataDrivenDescriptorArr, dataDriverManager = new DataDriverManager(), - isDataDriven, - proc = self.mock || process; + proc = self.mock || process, + i, + descJson; self.logger.debug('Loading descriptor file: ' + self.testDataPath); descriptorJsonStr = fs.readFileSync(self.testDataPath, "utf-8"); try { - descriptorJson = JSON.parse(descriptorJsonStr); - } - catch(e) { + } catch (e) { self.logger.error('The descriptor ' + self.testDataPath + ' contains invalid JSON'); proc.exit(1); } - isDataDriven = descriptorJson[0].dataDriver || (descriptorJson[0].config instanceof Array); + self.isDataDriven = descriptorJson[0].dataDriver || (descriptorJson[0].config instanceof Array); // Process data driven descriptors - if (isDataDriven) { + if (self.isDataDriven) { dataDrivenDescriptorArr = dataDriverManager.processDataDriver(self.testDataPath, descriptorJson); + if (dataDrivenDescriptorArr && dataDrivenDescriptorArr.length > 0) { - for (var i = 0; i < dataDrivenDescriptorArr.length; i+=1) { - var descJson = dataDrivenDescriptorArr[i]; + + for (i = 0; i < dataDrivenDescriptorArr.length; i += 1) { + descJson = dataDrivenDescriptorArr[i]; +// console.log('\n\nCloned Descriptor ::' + JSON.stringify(descJson)); descriptor = self.getDescriptor(descJson); descriptorArr.push(descriptor); +// console.log('\n\nDescriptor ::' + JSON.stringify(descriptor)); } - } } else { descriptor = self.getDescriptor(descriptorJson); descriptorArr.push(descriptor); +// console.log('\n\nDescriptor ::' + JSON.stringify(descriptor)); } + return descriptorArr; }; @@ -94,10 +100,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { baseUrl, pos, dimensionsJson, - match, self = this, descriptor, - proc = this.mock || process, relativePath = path.dirname(this.testDataPath); // Importing descriptor @@ -110,27 +114,82 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { // read context into object contextObj = qs.parse(this.context, ",", ":"); - baseUrl = self.config["baseUrl"]; // inject baseUrl into the settings if (baseUrl && baseUrl.length > 0) { for (pos = 0; pos < descriptorJson.length; pos += 1) { if (descriptorJson[pos].settings) { - if (!descriptorJson[pos].config) { descriptorJson[pos].config = {}; } + if (!descriptorJson[pos].config) { + descriptorJson[pos].config = {}; + } descriptorJson[pos].config.baseUrl = baseUrl; } } } - descriptorJson = self.extendDescriptor(descriptorJson, cwd, relativePath); +// If data driven, merge config object from data provider +// if (self.isDataDriven && self.context) { +// self.overrideDataProviderConfig(descriptorJson); +// } + // merge dimension into descriptor if (this.dimensions) { dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); descriptorJson.unshift(dimensionsJson[0]); } + descriptor = self.applyYcbSubstitution(descriptorJson, contextObj); + + // Replace params in the descriptor , if user has passed either of replaceParamJSON or defaultParamJSON + if (this.replaceParamJSON || this.defaultParamJSON) { + descriptor = this.getDescriptorWithReplacedParams(descriptor); + } + + self.validateDescriptor(descriptor, self.config["arrowModuleRoot"] + "config/descriptor-schema.json"); + return descriptor; +}; + + +///** +// * +// * @param descriptorJson +// */ +//DataProvider.prototype.overrideDataProviderConfig = function(descriptorJson) { +// +// var pos, +// self = this, +// settings; +// +// for (pos = 0; pos < descriptorJson.length; pos += 1) { +// +// settings = JSON.stringify(descriptorJson[pos].settings[0]); +// if (settings && self.context) { +// if (settings === JSON.stringify(self.context)) { +// console.log('\n***Overriding ' + settings + ', pos ::' + pos); +// console.log('***descriptorJson ' + JSON.stringify(descriptorJson) + '\n\n'); +// _.extend(descriptorJson[pos].config, descriptorJson[0].config); +// console.log('\n***After overriding , descriptorJson ' + JSON.stringify(descriptorJson) + '\n\n'); +// } +// } +// } +// +//}; + +/** + * + * @param descriptorJson + * @param contextObj + * @returns {*} + */ +DataProvider.prototype.applyYcbSubstitution = function(descriptorJson, contextObj) { + + var descriptor, + match, + self = this, + proc = self.mock || process; + try { descriptor = ycb.read(descriptorJson, contextObj, false, false); } catch (e) { @@ -144,14 +203,6 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { } proc.exit(1); } - - // Replace params in the descriptor , if user has passed either of replaceParamJSON or defaultParamJSON - if (this.replaceParamJSON || this.defaultParamJSON) { - descriptor = this.getDescriptorWithReplacedParams(descriptor); - } - - self.validateDescriptor(descriptor, self.config["arrowModuleRoot"] + "config/descriptor-schema.json"); - return descriptor; }; @@ -164,10 +215,10 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { DataProvider.prototype.extendDescriptor = function(descriptorJson, cwd, relativePath) { //checking if descriptor is extending another json - if (descriptorJson[0].extends) { + if (descriptorJson[0]['extends']) { // Resolve path - descriptorJson[0].extends = path.resolve(cwd, relativePath, descriptorJson[0].extends); - var baseJson = JSON.parse(fs.readFileSync(descriptorJson[0].extends)); + descriptorJson[0]['extends'] = path.resolve(cwd, relativePath, descriptorJson[0]['extends']); + var baseJson = JSON.parse(fs.readFileSync(descriptorJson[0]['extends'])); descriptorJson = descriptorJson.concat(baseJson); } return descriptorJson; @@ -187,7 +238,8 @@ DataProvider.prototype.readAndValidateJSON = function (param) { self = this, pwd = global.workingDirectory || '', proc = self.mock || process, - isFile = false; + isFile = false, + errMsg; if (param) { @@ -196,8 +248,7 @@ DataProvider.prototype.readAndValidateJSON = function (param) { paramPath = path.resolve(pwd, param); json = fs.readFileSync(paramPath, "utf-8"); isFile = true; - } - catch(e) { + } catch (e) { // Not a file, so treat it as json string json = param; } @@ -206,8 +257,6 @@ DataProvider.prototype.readAndValidateJSON = function (param) { parsedJson = JSON.parse(json); } catch (msg) { - var errMsg; - if (isFile) { errMsg = "The file " + param + " does not contain valid JSON"; } else { @@ -306,8 +355,7 @@ DataProvider.prototype.validateDescriptor = function (descriptor, descriptorSche try { descriptorSchema = fs.readFileSync(descriptorSchemaPath, "utf-8"); descriptorSchema = JSON.parse(descriptorSchema); - } - catch(e) { + } catch (e) { self.logger.error('Failed to read/parse descriptor schema - error :' + e); proc.exit(1); } From a26c99d26cdb7c54a5dbbc741e018eb0484ebd4b Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 26 Apr 2014 02:00:05 -0700 Subject: [PATCH 076/197] Refactoring, cleanup --- lib/util/dataprovider.js | 63 ++++++------------- tests/unit/lib/util/dataprovider-tests.js | 21 +++++++ .../lib/util/descriptor-invalid-settings.json | 57 +++++++++++++++++ 3 files changed, 97 insertions(+), 44 deletions(-) create mode 100644 tests/unit/lib/util/descriptor-invalid-settings.json diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index d560d6e9..d4a0ac03 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -68,20 +68,17 @@ DataProvider.prototype.getTestData = function () { if (dataDrivenDescriptorArr && dataDrivenDescriptorArr.length > 0) { for (i = 0; i < dataDrivenDescriptorArr.length; i += 1) { + descJson = dataDrivenDescriptorArr[i]; -// console.log('\n\nCloned Descriptor ::' + JSON.stringify(descJson)); descriptor = self.getDescriptor(descJson); descriptorArr.push(descriptor); -// console.log('\n\nDescriptor ::' + JSON.stringify(descriptor)); } } } else { descriptor = self.getDescriptor(descriptorJson); descriptorArr.push(descriptor); -// console.log('\n\nDescriptor ::' + JSON.stringify(descriptor)); } - return descriptorArr; }; @@ -98,7 +95,6 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { cwd = global.workingDirectory || process.cwd(), contextObj, baseUrl, - pos, dimensionsJson, self = this, descriptor, @@ -117,23 +113,9 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { baseUrl = self.config["baseUrl"]; // inject baseUrl into the settings - if (baseUrl && baseUrl.length > 0) { - for (pos = 0; pos < descriptorJson.length; pos += 1) { - if (descriptorJson[pos].settings) { - if (!descriptorJson[pos].config) { - descriptorJson[pos].config = {}; - } - descriptorJson[pos].config.baseUrl = baseUrl; - } - } - } + self.injectBaseUrlFromSettings(descriptorJson, baseUrl); descriptorJson = self.extendDescriptor(descriptorJson, cwd, relativePath); -// If data driven, merge config object from data provider -// if (self.isDataDriven && self.context) { -// self.overrideDataProviderConfig(descriptorJson); -// } - // merge dimension into descriptor if (this.dimensions) { dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); @@ -151,31 +133,24 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { return descriptor; }; +/** + * Inject baseUrl if passed from command line or specified in config file + */ +DataProvider.prototype.injectBaseUrlFromSettings = function(descriptorJson, baseUrl) { -///** -// * -// * @param descriptorJson -// */ -//DataProvider.prototype.overrideDataProviderConfig = function(descriptorJson) { -// -// var pos, -// self = this, -// settings; -// -// for (pos = 0; pos < descriptorJson.length; pos += 1) { -// -// settings = JSON.stringify(descriptorJson[pos].settings[0]); -// if (settings && self.context) { -// if (settings === JSON.stringify(self.context)) { -// console.log('\n***Overriding ' + settings + ', pos ::' + pos); -// console.log('***descriptorJson ' + JSON.stringify(descriptorJson) + '\n\n'); -// _.extend(descriptorJson[pos].config, descriptorJson[0].config); -// console.log('\n***After overriding , descriptorJson ' + JSON.stringify(descriptorJson) + '\n\n'); -// } -// } -// } -// -//}; + var pos; + if (baseUrl && baseUrl.length > 0) { + for (pos = 0; pos < descriptorJson.length; pos += 1) { + if (descriptorJson[pos].settings) { + if (!descriptorJson[pos].config) { + descriptorJson[pos].config = {}; + } + descriptorJson[pos].config.baseUrl = baseUrl; + } + } + } + +}; /** * diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 5813bd43..1edb4dbf 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -419,7 +419,28 @@ YUI.add('dataprovider-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + "Apply YCB substitution - Settings has already been added test ": function() { + + var msg, + descriptor, + contextObj = {}; + + try { + + descriptor = fs.readFileSync(__dirname + '/descriptor-invalid-settings.json', 'utf-8'); + descriptor = JSON.parse(descriptor); + dp.applyYcbSubstitution(descriptor, contextObj); + + } catch (e) { + msg = e; + } + Y.Assert.areEqual("exit code is 1", msg.message, "validateDescriptor() did not throw exception for invalid schema file"); + + } + })); Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); diff --git a/tests/unit/lib/util/descriptor-invalid-settings.json b/tests/unit/lib/util/descriptor-invalid-settings.json new file mode 100644 index 00000000..80ec558e --- /dev/null +++ b/tests/unit/lib/util/descriptor-invalid-settings.json @@ -0,0 +1,57 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configData.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configData.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + } +] + From 756a40093ce47b480d08fd9a1a7c88a93ee31312 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 27 Apr 2014 23:13:33 -0700 Subject: [PATCH 077/197] Fix A space after a comma in the 'commonLib' string in 'test-descriptor.json' causes a fail --- lib/util/libmanager.js | 27 ++++++++++++----------- tests/unit/lib/util/config/invalid.txt | 0 tests/unit/lib/util/libmanager-tests.js | 29 ++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 tests/unit/lib/util/config/invalid.txt diff --git a/lib/util/libmanager.js b/lib/util/libmanager.js index c8591410..23b618b8 100644 --- a/lib/util/libmanager.js +++ b/lib/util/libmanager.js @@ -23,26 +23,27 @@ LibManager.prototype.getAllTest = function (strLibPath, relativePath) { tmpArr, result, i, - j; + j, + lib; this.strLibPath = strLibPath; this.logger.trace("Normalizing libs: " + strLibPath); arrLib = this.strLibPath.split(","); for (i = 0; i < arrLib.length; i += 1) { + lib = arrLib[i].trim(); try { - if (relativePath) { - arrLib[i] = path.resolve(global.workingDirectory, relativePath, arrLib[i]); + lib = path.resolve(global.workingDirectory, relativePath, lib); } - if (fs.statSync(arrLib[i])) { - stat = fs.statSync(arrLib[i]); + if (fs.statSync(lib)) { + stat = fs.statSync(lib); if (stat.isFile()) { - if (-1 !== arrLib[i].indexOf(".js")) { - libs += arrLib[i] + ","; + if (-1 !== lib.indexOf(".js")) { + libs += lib + ","; } else { - this.logger.warn(arrLib[i] + " is not a .js file, ignoring this library !"); + this.logger.warn(lib + " is not a .js file, ignoring this library !"); } } else if (stat.isDirectory()) { - dir = arrLib[i]; + dir = lib; if ("/" === dir.substr(dir.length - 1, dir.length)) { dir = dir.substr(0, dir.length - 1); } @@ -53,21 +54,21 @@ LibManager.prototype.getAllTest = function (strLibPath, relativePath) { } } } else { - this.logger.warn("Unable to read :" + arrLib[i] + ", ignoring this library !"); + this.logger.warn("Unable to read :" + lib + ", ignoring this library !"); } } } catch (e) { // checking if its a framework lib - if (arrLib[i].indexOf(".") === -1) { - result = glob.sync(path.resolve(global.appRoot, "sharelib", "lib") + "/**/" + arrLib[i] + ".js"); + if (lib.indexOf(".") === -1) { + result = glob.sync(path.resolve(global.appRoot, "sharelib", "lib") + "/**/" + lib + ".js"); if (result.length > 0) { stat = fs.statSync(result[0]); if (stat.isFile()) { libs += result[0] + ","; } } else { - this.logger.warn("Unable to read :" + arrLib[i] + ", ignoring this library !"); + this.logger.warn("Unable to read :" + lib + ", ignoring this library !"); } } else { diff --git a/tests/unit/lib/util/config/invalid.txt b/tests/unit/lib/util/config/invalid.txt new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/lib/util/libmanager-tests.js b/tests/unit/lib/util/libmanager-tests.js index 1da8a9c5..ff88d172 100644 --- a/tests/unit/lib/util/libmanager-tests.js +++ b/tests/unit/lib/util/libmanager-tests.js @@ -29,7 +29,7 @@ YUI.add('libmanager-tests', function (Y) { } })); - //check getAllTests +// //check getAllTests suite.add(new Y.Test.Case({ "Check getAllTest Method": function(){ //Expected is concatenation of the values js and json files in config @@ -46,6 +46,33 @@ YUI.add('libmanager-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + "Check getAllTest Method space after comma": function(){ + //Expected is concatenation of the values js and json files in config + var libPath = __dirname + "/config/configoverride.js , " + __dirname + '/config/defaultconfig.js'; + var result = libmanager.getAllTest(libPath).split(","); + result.sort(); + + Y.Assert.areEqual(__dirname + "/config/configoverride.js", result[0], "Check Files are Returned"); + Y.Assert.areEqual(__dirname + "/config/defaultconfig.js", result[1], "Check Files are Returned"); + } + })); + + + suite.add(new Y.Test.Case({ + "Check getAllTest Method Invalid library": function(){ + //Expected is concatenation of the values js and json files in config + var libPath = __dirname + "/config/configoverride.js , "; + libPath += __dirname + '/config/defaultconfig.js , '; + libPath += __dirname + '/config/invalid.txt'; + var result = libmanager.getAllTest(libPath).split(","); + result.sort(); + + Y.Assert.areEqual(__dirname + "/config/configoverride.js", result[0], "Check Files are Returned"); + Y.Assert.areEqual(__dirname + "/config/defaultconfig.js", result[1], "Check Files are Returned"); + } + })); + //Check getAllCommonLib suite.add(new Y.Test.Case({ "Check getAllCommonLib method": function(){ From 594bd124e49ec62cb29e8b11b058920c42cb90ec Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 27 Apr 2014 23:45:00 -0700 Subject: [PATCH 078/197] Locking request dependency to 2.34.0 for yui --- npm-shrinkwrap.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 49c57418..63e9e2ac 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -101,7 +101,7 @@ "version": "3.x", "dependencies": { "request": { - "version": "2.9.202" + "version": "2.34.0" } } }, From 91077a1b3202eda4d0966c2ea12fdccb37c5fd3f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 28 Apr 2014 09:39:10 -0700 Subject: [PATCH 079/197] Fix for failure if lib string has space after a comma --- lib/driver/node.js | 2 +- lib/driver/selenium.js | 2 +- tests/unit/lib/driver/selenium-tests.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/driver/node.js b/lib/driver/node.js index 562d4ca9..94963edf 100644 --- a/lib/driver/node.js +++ b/lib/driver/node.js @@ -99,7 +99,7 @@ NodeDriver.prototype.createNodeArgs = function (testConfig, testParams, callback deplibs = libs.split(","); if (deplibs && deplibs.length > 0) { for (i = 0; i < deplibs.length; i++) { - deplibs[i] = resolvePath(deplibs[i]); + deplibs[i] = resolvePath(deplibs[i].trim()); } } libs = deplibs.join(); diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 410d7555..18862717 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -392,7 +392,7 @@ SeleniumDriver.prototype.createDriverJs = function (testParams, callback) { }; try { for (i = 0; i < arrLib.length; i += 1) { - lib = arrLib[i]; + lib = arrLib[i].trim(); if (0 === lib.length) { continue; } diff --git a/tests/unit/lib/driver/selenium-tests.js b/tests/unit/lib/driver/selenium-tests.js index fa4b15d5..0dc18997 100644 --- a/tests/unit/lib/driver/selenium-tests.js +++ b/tests/unit/lib/driver/selenium-tests.js @@ -338,7 +338,7 @@ YUI.add('selenium-tests', function (Y, NAME) { 'test createDriverJs ': function () { var self = this, testRunnerJs = arrowRoot + '/tests/unit/lib/driver/config/testRunner.js', - libJs = arrowRoot + '/tests/unit/lib/driver/config/lib.js', + libJs = arrowRoot + '/tests/unit/lib/driver/config/lib.js' + ' , ' + arrowRoot + '/tests/unit/lib/driver/config/lib.js', seedJs = arrowRoot + '/tests/unit/lib/driver/config/seed.js', testHtml = arrowRoot + '/tests/unit/lib/driver/config/test.html', config = { From 1497787d0d438a3a9131d6c9f92fa40c9c48a57b Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 28 Apr 2014 10:48:49 -0700 Subject: [PATCH 080/197] Preparing for v0.5.3 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e7ede90..a8167304 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +# 0.5.3 + + * Adding support for specifying comments in descriptor [PR](https://github.com/yahoo/arrow/pull/232) + * Making nodejs tests honor logLevel [PR](https://github.com/yahoo/arrow/pull/232) + * Fixed the issue - space after a comma in the 'commonLib' string in 'test-descriptor.json' causes a fail [Issue](https://github.com/yahoo/arrow/issues/206) [PR](https://github.com/yahoo/arrow/pull/233) + # 0.5.2 * Using cdnjs link for yui [PR](https://github.com/yahoo/arrow/pull/228) diff --git a/package.json b/package.json index 3e31e9b7..10a27917 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.5.2", + "version": "0.5.3", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From dc22ee21709db43f3ce0c9097e6a646a75c20b27 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 28 Apr 2014 12:18:49 -0700 Subject: [PATCH 081/197] Adding error handling for JSON parsing in webservice controller --- lib/controller/webservice-controller.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/controller/webservice-controller.js b/lib/controller/webservice-controller.js index c6c62973..7f4b255c 100644 --- a/lib/controller/webservice-controller.js +++ b/lib/controller/webservice-controller.js @@ -89,11 +89,19 @@ WebServiceController.prototype.execute = function(callback) { callback(); }); } else if (content_type.indexOf('json') > -1) { // content type is json - var result = JSON.parse(data); - self.logger.debug("Response data:" + JSON.stringify(result)); - shared.data = result; - self.testParams.shared = shared; - callback(); + var result; + try { + result = JSON.parse(data); + self.logger.debug("Response data:" + JSON.stringify(result)); + shared.data = result; + self.testParams.shared = shared; + callback(); + } + catch(e) { + self.logger.error('Error while parsing the JSON data ' + data); + self.logger.error('Error::' + e); + callback(e); + } } else { self.testParams.shared = shared; callback('Only json or xml content type is supported'); From 2e3a1ded1ed61b595b08ac9b12f9d6d8407914b5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 13:50:58 -0700 Subject: [PATCH 082/197] Changing error message --- lib/controller/webservice-controller.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/controller/webservice-controller.js b/lib/controller/webservice-controller.js index 7f4b255c..1d552c32 100644 --- a/lib/controller/webservice-controller.js +++ b/lib/controller/webservice-controller.js @@ -98,8 +98,9 @@ WebServiceController.prototype.execute = function(callback) { callback(); } catch(e) { - self.logger.error('Error while parsing the JSON data ' + data); - self.logger.error('Error::' + e); + self.logger.error('Error while parsing the JSON data received from the call - ' + url); + self.logger.error('The data being parsed -' + data); + self.logger.error('\n\nError::' + e); callback(e); } } else { From 19ce0a1a6a52a85b6503eafd43d933c361366a8f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 16:34:09 -0700 Subject: [PATCH 083/197] Adding descriptorSharedParams feature --- .../shared-params-controller-descriptor.json | 72 +++++++++++++++++++ .../shared-params-scenario-descriptor.json | 64 +++++++++++++++++ .../test-quote-aapl-shared-params.js | 13 ++++ .../test-quote-yhoo-shared-params.js | 13 ++++ lib/controller/default.js | 7 ++ lib/session/sessionfactory.js | 6 ++ tests/unit/lib/controller/default-tests.js | 40 +++++++++++ .../unit/lib/session/sessionfactory-tests.js | 17 +++++ .../test_descriptor_shared_params.json | 64 +++++++++++++++++ 9 files changed, 296 insertions(+) create mode 100644 demo/test/shared-params/shared-params-controller-descriptor.json create mode 100644 demo/test/shared-params/shared-params-scenario-descriptor.json create mode 100644 demo/test/shared-params/test-quote-aapl-shared-params.js create mode 100644 demo/test/shared-params/test-quote-yhoo-shared-params.js create mode 100755 tests/unit/lib/session/testdata/test_descriptor_shared_params.json diff --git a/demo/test/shared-params/shared-params-controller-descriptor.json b/demo/test/shared-params/shared-params-controller-descriptor.json new file mode 100644 index 00000000..cf45e50f --- /dev/null +++ b/demo/test/shared-params/shared-params-controller-descriptor.json @@ -0,0 +1,72 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": { + "baseUrl": "http://finance.yahoo.com", + "descriptorSharedParams" :{ + "yhooquote": "Yahoo! Inc. (YHOO)", + "applequote": "Apple Inc. (AAPL)" + } + }, + + + "dataprovider" : { + + "Test YHOO Ticker" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "http://finance.yahoo.com" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "yhoo\n" + } + }, + { + "test": "test-quote-yhoo-shared-params.js" + } + ] + } + + }, + + "Test AAPL Ticker" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "http://finance.yahoo.com" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "aapl\n" + } + }, + { + "test": "test-quote-aapl-shared-params.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/demo/test/shared-params/shared-params-scenario-descriptor.json b/demo/test/shared-params/shared-params-scenario-descriptor.json new file mode 100644 index 00000000..00332c87 --- /dev/null +++ b/demo/test/shared-params/shared-params-scenario-descriptor.json @@ -0,0 +1,64 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": { + + "baseUrl": "http://finance.yahoo.com", + + "descriptorSharedParams" :{ + "yhooquote": "Yahoo! Inc. (YHOO)", + "applequote": "Apple Inc. (AAPL)" + } + }, + + "dataprovider" : { + + "Test YHOO Ticker" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "http://finance.yahoo.com" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "yhoo\n" + } + }, + { + "test": "test-quote-yhoo-shared-params.js" + }, + + { + "page": "http://finance.yahoo.com" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "aapl\n" + } + }, + { + "test": "test-quote-aapl-shared-params.js" + } + + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/demo/test/shared-params/test-quote-aapl-shared-params.js b/demo/test/shared-params/test-quote-aapl-shared-params.js new file mode 100644 index 00000000..69be0ba2 --- /dev/null +++ b/demo/test/shared-params/test-quote-aapl-shared-params.js @@ -0,0 +1,13 @@ +YUI.add("quote-tests", function(Y) { + var suite = new Y.Test.Suite("Quote Page AAPL test"); + suite.add(new Y.Test.Case({ + "test quote": function() { + + var quote = this.testParams.descriptorSharedParams["applequote"]; + Y.Assert.areEqual(quote, Y.one(".yfi_rt_quote_summary").one("h2").get('text')); + + } + })); + + Y.Test.Runner.add(suite); +}, "0.1", {requires:["node","test"]}); diff --git a/demo/test/shared-params/test-quote-yhoo-shared-params.js b/demo/test/shared-params/test-quote-yhoo-shared-params.js new file mode 100644 index 00000000..f089905b --- /dev/null +++ b/demo/test/shared-params/test-quote-yhoo-shared-params.js @@ -0,0 +1,13 @@ +YUI.add("quote-tests", function(Y) { + var suite = new Y.Test.Suite("Quote Page YHOO test"); + suite.add(new Y.Test.Case({ + "test quote": function() { + + var quote = this.testParams.descriptorSharedParams["yhooquote"]; + Y.Assert.areEqual(quote, Y.one(".yfi_rt_quote_summary").one("h2").get('text')); + + } + })); + + Y.Test.Runner.add(suite); +}, "0.1", {requires:["node","test"]}); diff --git a/lib/controller/default.js b/lib/controller/default.js index 75ec9c62..7bafb181 100644 --- a/lib/controller/default.js +++ b/lib/controller/default.js @@ -135,6 +135,13 @@ DefaultController.prototype.executeScenario = function (callback) { childParams.shared = {}; } + // pass testParams.descriptorSharedParams down to child + if (self.testParams.descriptorSharedParams) { + childParams.descriptorSharedParams = self.testParams.descriptorSharedParams; + } else { + childParams.descriptorSharedParams = {}; + } + // TODO: add to the controllers report success or failure arrow.runController(controllerName, self.testConfig, childParams, self.driver, function (error) { if (error) { diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index ae4d5236..ead311de 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -311,6 +311,12 @@ SessionFactory.prototype.getFactoryTests = function () { // Initialize the share area testData.params.shared = {}; + if (testData.config.descriptorSharedParams) { + testData.params.descriptorSharedParams = testData.config.descriptorSharedParams; + } else { + testData.params.descriptorSharedParams = {}; + } + tests.push(testData); } diff --git a/tests/unit/lib/controller/default-tests.js b/tests/unit/lib/controller/default-tests.js index 7d4907b5..8f52fefc 100644 --- a/tests/unit/lib/controller/default-tests.js +++ b/tests/unit/lib/controller/default-tests.js @@ -106,7 +106,47 @@ YUI.add('default-tests', function (Y, NAME) { A.isTrue(testExecuted, "test should be executed"); A.isTrue(navExecuted, "nav should be executed"); + }, + + + 'test descriptorSharedParams': function () { + + var driver = new StubDriver(), + arrow = new StubArrow(), + dc, + scenario, + executed = false, + controllers, + testParams = {}; + + Arrow.instance = arrow; + scenario = [ + { + page: 'test.html' + }, + { + controller: 'controller.js' + } + ]; + testParams.scenario = scenario; + testParams.descriptorSharedParams = {}; + testParams.descriptorSharedParams.a = "A"; + testParams.descriptorSharedParams.b = "B"; + + dc = new DefaultController({}, testParams, driver); + + dc.execute(function (errMsg) { + executed = true; + A.isTrue(!errMsg, 'Should have executed scenario'); + }); + + A.isTrue(executed, 'Scenario should be executed'); + controllers = arrow.controllers; + A.areEqual(controllers[0].params.page, 'test.html', 'First atom should have a page'); + A.areEqual(controllers[1].controller, 'controller.js', 'Second atom should have a controller'); } + + })); Y.Test.Runner.add(suite); diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index f3782b00..edae0a82 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -287,6 +287,23 @@ YUI.add('sessionfactory-tests', function (Y) { // } // })); + suite.add(new Y.Test.Case({ + + name : "Call getFactoryTests with descriptor shared params", + + testGetFactoryTestWithDescriptorSharedParams: function() { + var ss = new SessionFactory({"dimensions" : arrowRoot + "/config/dimensions.json", "arrowModuleRoot" : arrowRoot + "/", "arrDescriptor": [__dirname + "/testdata/test_descriptor_shared_params.json"]}, + {}), + t; + t = ss.getFactoryTests(); + A.areEqual(1, t.length, "There should be 1 test objects"); + + A.areEqual("Yahoo", t[0].params.descriptorSharedParams['yhooquote'], "DescriptorSharedParams - YHOO Quote doesn't match"); + A.areEqual("Apple", t[0].params.descriptorSharedParams['applequote'], "DescriptorSharedParams - AAPL Quote doesn't match"); + + } + })); + Y.Test.Runner.add(suite); diff --git a/tests/unit/lib/session/testdata/test_descriptor_shared_params.json b/tests/unit/lib/session/testdata/test_descriptor_shared_params.json new file mode 100755 index 00000000..d683d784 --- /dev/null +++ b/tests/unit/lib/session/testdata/test_descriptor_shared_params.json @@ -0,0 +1,64 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": { + + "baseUrl": "http://finance.yahoo.com", + + "descriptorSharedParams" :{ + "yhooquote": "Yahoo", + "applequote": "Apple" + } + }, + + "dataprovider" : { + + "Test YHOO Ticker" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "yhoo\n" + } + }, + { + "test": "test-quote-yhoo-shared-params.js" + }, + + { + "page": "$$config.baseUrl$$" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "aapl\n" + } + }, + { + "test": "test-quote-aapl-shared-params.js" + } + + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + From ab9550d086810515778556429681182c0cbf8127 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 17:07:18 -0700 Subject: [PATCH 084/197] Renaming test file --- demo/test/{dummytest.js => dataDriventest.js} | 0 demo/test/datadriven-descriptor-config.json | 2 +- demo/test/datadriven-descriptor.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename demo/test/{dummytest.js => dataDriventest.js} (100%) diff --git a/demo/test/dummytest.js b/demo/test/dataDriventest.js similarity index 100% rename from demo/test/dummytest.js rename to demo/test/dataDriventest.js diff --git a/demo/test/datadriven-descriptor-config.json b/demo/test/datadriven-descriptor-config.json index 2f7aefb7..9aa2cc7c 100644 --- a/demo/test/datadriven-descriptor-config.json +++ b/demo/test/datadriven-descriptor-config.json @@ -25,7 +25,7 @@ "page": "$$config.baseUrl$$" }, { - "test": "dummytest.js" + "test": "dataDriventest.js" } ] } diff --git a/demo/test/datadriven-descriptor.json b/demo/test/datadriven-descriptor.json index e0d379f6..8f6d4a97 100644 --- a/demo/test/datadriven-descriptor.json +++ b/demo/test/datadriven-descriptor.json @@ -18,7 +18,7 @@ "page": "$$config.baseUrl$$" }, { - "test": "dummytest.js" + "test": "dataDriventest.js" } ] } From d3b2d05782e95e95063a133b1f4db5b741d36497 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 22:04:04 -0700 Subject: [PATCH 085/197] Refactoring demo test --- demo/test/configdata.json | 7 +++++-- demo/test/dataDriventest.js | 8 ++++---- demo/test/datadriven-descriptor-config.json | 19 +++++++++---------- demo/test/datadriven-descriptor.json | 12 ++++-------- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/demo/test/configdata.json b/demo/test/configdata.json index 826407ab..162b572f 100644 --- a/demo/test/configdata.json +++ b/demo/test/configdata.json @@ -1,10 +1,13 @@ { "config": [ { - "baseUrl": "http://finance.yahoo.com" + "baseUrl": "http://finance.yahoo.com", + "searchBtnId":"#mnp-search_box" }, { - "baseUrl": "http://yahoo.com" + "baseUrl": "http://yahoo.com", + "searchBtnId":"#p_13838465-p" + } ] diff --git a/demo/test/dataDriventest.js b/demo/test/dataDriventest.js index 64827c4e..0c466fc0 100644 --- a/demo/test/dataDriventest.js +++ b/demo/test/dataDriventest.js @@ -1,12 +1,12 @@ YUI.add("datadriven-tests", function(Y) { - + 'use strict'; var suite = new Y.Test.Suite("Data driven test"); suite.add(new Y.Test.Case({ - "test data driven": function() { - - Y.Assert.isTrue(true); + "test search button": function() { + var node = Y.one(this.testParams.searchBtnId); + Y.Assert.isNotNull(node, "Search button not found"); } })); diff --git a/demo/test/datadriven-descriptor-config.json b/demo/test/datadriven-descriptor-config.json index 9aa2cc7c..b34bd5ec 100644 --- a/demo/test/datadriven-descriptor-config.json +++ b/demo/test/datadriven-descriptor-config.json @@ -6,10 +6,13 @@ "config": [ { - "baseUrl": "http://finance.yahoo.com" + "baseUrl": "http://finance.yahoo.com", + "searchBtnId":"#mnp-search_box" }, { - "baseUrl": "http://yahoo.com" + "baseUrl": "http://yahoo.com", + "searchBtnId":"#p_13838465-p" + } ], @@ -20,14 +23,10 @@ "params" :{ - "scenario": [ - { - "page": "$$config.baseUrl$$" - }, - { - "test": "dataDriventest.js" - } - ] + "page": "$$config.baseUrl$$", + "test": "dataDriventest.js", + "searchBtnId":"$$config.searchBtnId$$" + } } diff --git a/demo/test/datadriven-descriptor.json b/demo/test/datadriven-descriptor.json index 8f6d4a97..e5396694 100644 --- a/demo/test/datadriven-descriptor.json +++ b/demo/test/datadriven-descriptor.json @@ -13,14 +13,10 @@ "params" :{ - "scenario": [ - { - "page": "$$config.baseUrl$$" - }, - { - "test": "dataDriventest.js" - } - ] + "page": "$$config.baseUrl$$", + "test": "dataDriventest.js", + "searchBtnId":"$$config.searchBtnId$$" + } } From 428cba0ca57cca8ced76e084210a8e93cc7823ce Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 22:05:25 -0700 Subject: [PATCH 086/197] Moving datadriven demo tests to datadriven dir --- demo/test/{ => datadriven}/configdata.json | 0 demo/test/{ => datadriven}/dataDriventest.js | 0 demo/test/{ => datadriven}/datadriven-descriptor-config.json | 0 demo/test/{ => datadriven}/datadriven-descriptor.json | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename demo/test/{ => datadriven}/configdata.json (100%) rename demo/test/{ => datadriven}/dataDriventest.js (100%) rename demo/test/{ => datadriven}/datadriven-descriptor-config.json (100%) rename demo/test/{ => datadriven}/datadriven-descriptor.json (100%) diff --git a/demo/test/configdata.json b/demo/test/datadriven/configdata.json similarity index 100% rename from demo/test/configdata.json rename to demo/test/datadriven/configdata.json diff --git a/demo/test/dataDriventest.js b/demo/test/datadriven/dataDriventest.js similarity index 100% rename from demo/test/dataDriventest.js rename to demo/test/datadriven/dataDriventest.js diff --git a/demo/test/datadriven-descriptor-config.json b/demo/test/datadriven/datadriven-descriptor-config.json similarity index 100% rename from demo/test/datadriven-descriptor-config.json rename to demo/test/datadriven/datadriven-descriptor-config.json diff --git a/demo/test/datadriven-descriptor.json b/demo/test/datadriven/datadriven-descriptor.json similarity index 100% rename from demo/test/datadriven-descriptor.json rename to demo/test/datadriven/datadriven-descriptor.json From 3d4bc0114b98ccc34a83d23b4d8c84306f32a7cb Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 29 Apr 2014 23:21:07 -0700 Subject: [PATCH 087/197] Demo test cleanup --- .../shared-params/shared-params-controller-descriptor.json | 1 - .../test/shared-params/shared-params-scenario-descriptor.json | 2 -- demo/test/shared-params/test-quote-aapl-shared-params.js | 4 ++-- demo/test/shared-params/test-quote-yhoo-shared-params.js | 4 ++-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/demo/test/shared-params/shared-params-controller-descriptor.json b/demo/test/shared-params/shared-params-controller-descriptor.json index cf45e50f..ed5819a0 100644 --- a/demo/test/shared-params/shared-params-controller-descriptor.json +++ b/demo/test/shared-params/shared-params-controller-descriptor.json @@ -5,7 +5,6 @@ "name": "controllers", "config": { - "baseUrl": "http://finance.yahoo.com", "descriptorSharedParams" :{ "yhooquote": "Yahoo! Inc. (YHOO)", "applequote": "Apple Inc. (AAPL)" diff --git a/demo/test/shared-params/shared-params-scenario-descriptor.json b/demo/test/shared-params/shared-params-scenario-descriptor.json index 00332c87..820a9ce3 100644 --- a/demo/test/shared-params/shared-params-scenario-descriptor.json +++ b/demo/test/shared-params/shared-params-scenario-descriptor.json @@ -6,8 +6,6 @@ "config": { - "baseUrl": "http://finance.yahoo.com", - "descriptorSharedParams" :{ "yhooquote": "Yahoo! Inc. (YHOO)", "applequote": "Apple Inc. (AAPL)" diff --git a/demo/test/shared-params/test-quote-aapl-shared-params.js b/demo/test/shared-params/test-quote-aapl-shared-params.js index 69be0ba2..96c670f4 100644 --- a/demo/test/shared-params/test-quote-aapl-shared-params.js +++ b/demo/test/shared-params/test-quote-aapl-shared-params.js @@ -1,7 +1,7 @@ -YUI.add("quote-tests", function(Y) { +YUI.add("appl-quote-tests", function(Y) { var suite = new Y.Test.Suite("Quote Page AAPL test"); suite.add(new Y.Test.Case({ - "test quote": function() { + "test aapl quote": function() { var quote = this.testParams.descriptorSharedParams["applequote"]; Y.Assert.areEqual(quote, Y.one(".yfi_rt_quote_summary").one("h2").get('text')); diff --git a/demo/test/shared-params/test-quote-yhoo-shared-params.js b/demo/test/shared-params/test-quote-yhoo-shared-params.js index f089905b..e4221f30 100644 --- a/demo/test/shared-params/test-quote-yhoo-shared-params.js +++ b/demo/test/shared-params/test-quote-yhoo-shared-params.js @@ -1,7 +1,7 @@ -YUI.add("quote-tests", function(Y) { +YUI.add("yhoo-quote-tests", function(Y) { var suite = new Y.Test.Suite("Quote Page YHOO test"); suite.add(new Y.Test.Case({ - "test quote": function() { + "test yhoo quote": function() { var quote = this.testParams.descriptorSharedParams["yhooquote"]; Y.Assert.areEqual(quote, Y.one(".yfi_rt_quote_summary").one("h2").get('text')); From e69d0f099fc49c98f991763e30ca93f29e6c073e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 30 Apr 2014 18:10:06 -0700 Subject: [PATCH 088/197] Changing schema for data driven descriptor --- .../unit/lib/session/testdata/configdata.json | 14 ++++++++ .../testdata/datadriven-descriptor.json | 34 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tests/unit/lib/session/testdata/configdata.json create mode 100644 tests/unit/lib/session/testdata/datadriven-descriptor.json diff --git a/tests/unit/lib/session/testdata/configdata.json b/tests/unit/lib/session/testdata/configdata.json new file mode 100644 index 00000000..4de01d52 --- /dev/null +++ b/tests/unit/lib/session/testdata/configdata.json @@ -0,0 +1,14 @@ +{ + "config": [ + { + "finance": { + "baseUrl": "http://finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://yahoo.com" + } + } + ] +} \ No newline at end of file diff --git a/tests/unit/lib/session/testdata/datadriven-descriptor.json b/tests/unit/lib/session/testdata/datadriven-descriptor.json new file mode 100644 index 00000000..e0d379f6 --- /dev/null +++ b/tests/unit/lib/session/testdata/datadriven-descriptor.json @@ -0,0 +1,34 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configdata.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + From 98e25f9a83f4c2ab95b374fcd36cc8a8b2bae626 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 30 Apr 2014 18:10:30 -0700 Subject: [PATCH 089/197] Changing schema for data driven descriptor --- demo/test/datadriven/configdata.json | 16 ++++---- .../datadriven-descriptor-config.json | 13 ++++--- lib/session/sessionfactory.js | 26 +++++++++---- lib/session/testexecutor.js | 39 +++++++++---------- lib/session/testsession.js | 12 ++++-- lib/util/datadrivermanager.js | 8 ++-- .../unit/lib/session/sessionfactory-tests.js | 17 ++++++++ tests/unit/lib/session/testsession-tests.js | 8 ++-- tests/unit/lib/util/configdata.json | 11 ++++-- .../util/datadriven-descriptor-config.json | 8 +++- .../unit/lib/util/datadrivermanager-tests.js | 8 ++-- 11 files changed, 104 insertions(+), 62 deletions(-) diff --git a/demo/test/datadriven/configdata.json b/demo/test/datadriven/configdata.json index 162b572f..f9469580 100644 --- a/demo/test/datadriven/configdata.json +++ b/demo/test/datadriven/configdata.json @@ -1,14 +1,16 @@ { "config": [ { - "baseUrl": "http://finance.yahoo.com", - "searchBtnId":"#mnp-search_box" + "finance": { + "baseUrl": "http://finance.yahoo.com", + "searchBtnId": "#mnp-search_box" + } }, { - "baseUrl": "http://yahoo.com", - "searchBtnId":"#p_13838465-p" - + "yahoo": { + "baseUrl": "http://yahoo.com", + "searchBtnId": "#p_13838465-p" + } } ] - -} +} \ No newline at end of file diff --git a/demo/test/datadriven/datadriven-descriptor-config.json b/demo/test/datadriven/datadriven-descriptor-config.json index b34bd5ec..1930120a 100644 --- a/demo/test/datadriven/datadriven-descriptor-config.json +++ b/demo/test/datadriven/datadriven-descriptor-config.json @@ -6,13 +6,16 @@ "config": [ { - "baseUrl": "http://finance.yahoo.com", - "searchBtnId":"#mnp-search_box" + "finance": { + "baseUrl": "http://finance.yahoo.com", + "searchBtnId": "#mnp-search_box" + } }, { - "baseUrl": "http://yahoo.com", - "searchBtnId":"#p_13838465-p" - + "yahoo": { + "baseUrl": "http://yahoo.com", + "searchBtnId": "#p_13838465-p" + } } ], diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index ead311de..5e680cc4 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -167,26 +167,35 @@ SessionFactory.prototype.getFactoryTests = function () { j, descFile, relativePath, - testJsonArr; + testJsonArr, + isDataDriven, + descriptorName; + // Iterate over all descriptor files and get the tests for (i = 0; i < this.arrDescriptor.length; i += 1) { descFile = this.arrDescriptor[i]; //TODO : use path module here relativePath = descFile.substring(0, descFile.lastIndexOf(global.pathSep)); + console.log('***relativePath::' + relativePath); dpreader = new DataProvider(this.config, this.args,descFile); testJsonArr = dpreader.getTestData(); for (j = 0; j < testJsonArr.length; j+=1) { testJson = testJsonArr[j]; + isDataDriven = testJson && (testJson.dataDriver || (testJson.config instanceof Array)); + descriptorName = descFile; + if (isDataDriven){ + descriptorName += ( ' - ' + testJson.name); + } - if (!this.descriptorObj[descFile]) { - this.descriptorObj[descFile] = {}; - this.descriptorObj[descFile].testSessionCount = 0; + if (!this.descriptorObj[descriptorName]) { + this.descriptorObj[descriptorName] = {}; + this.descriptorObj[descriptorName].testSessionCount = 0; } - this.descriptorObj[descFile].testSuiteName = testJson.name; + this.descriptorObj[descriptorName].testSuiteName = testJson.name; //Check if the useSSL flag is set from either commandline or at descriptor level if (testJson.useSSL) { @@ -296,6 +305,7 @@ SessionFactory.prototype.getFactoryTests = function () { // Store the descriptor file name ( with path ) in testSession object testData.descriptorPath = descFile; + testData.descriptorName = descriptorName; // Needed for data driven descriptor e.g contains descriptor name appended with some key e.g descriptor-0 TODO // Store the no. of test sessions in the descriptor // if (this.descriptorObj[descFile]) { @@ -304,8 +314,8 @@ SessionFactory.prototype.getFactoryTests = function () { // this.descriptorObj[descFile].testSessionCount = 1; // } - if (this.descriptorObj[descFile]) { - this.descriptorObj[descFile].testSessionCount = 0; + if (this.descriptorObj[descriptorName]) { + this.descriptorObj[descriptorName].testSessionCount = 0; } // Initialize the share area @@ -345,7 +355,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { totalTimeTaken = ((Date.now() - global.startTime) / 1000).toFixed(2); if (this.args.report && testQueue.sessions) { - if (this.arrDescriptor && this.arrDescriptor.length > 1) { + if (this.descriptorObj && Object.keys(this.descriptorObj).length > 0) { showConsolidatedReport = true; } diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index 13ab56e2..cea5b52f 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -48,7 +48,7 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback for (descriptor in sf.descriptorObj) { - if (descriptor === testSession.descriptorPath) { + if (descriptor === testSession.descriptorName) { // Store testSessions array for each descriptor in testSessionMap if (sf.testSessionMap[descriptor]) { testSessionsArr = sf.testSessionMap[descriptor]; @@ -62,27 +62,26 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback sf.descriptorObj[descriptor].testSessionCount -= 1; if (sf.descriptorObj[descriptor].testSessionCount === 0) { - sf.timeReportObj[testSession.descriptorPath].endTime = Date.now(); // TODO Is endTime required ??? - sf.timeReportObj[testSession.descriptorPath].timeTaken = - ((sf.timeReportObj[testSession.descriptorPath].endTime - sf.timeReportObj[testSession.descriptorPath].startTime) / 1000).toFixed(2); + sf.timeReportObj[testSession.descriptorName].endTime = Date.now(); // TODO Is endTime required ??? + sf.timeReportObj[testSession.descriptorName].timeTaken = + ((sf.timeReportObj[testSession.descriptorName].endTime - sf.timeReportObj[testSession.descriptorName].startTime) / 1000).toFixed(2); - testExecutor.logger.info('Time taken to run descriptor-' + testSession.descriptorPath + ' = ' + sf.timeReportObj[testSession.descriptorPath].timeTaken); + testExecutor.logger.info('Time taken to run descriptor-' + testSession.descriptorName + ' = ' + sf.timeReportObj[testSession.descriptorName].timeTaken); - testExecutor.logger.info('All tests over for descriptor:' + testSession.descriptorPath); + testExecutor.logger.info('All tests over for descriptor:' + testSession.descriptorName); reportObj = { "reportFolder" : global.reportFolder, "arrTestSessions" : sf.testSessionMap[descriptor], - "descriptor" : testSession.descriptorPath, + "descriptor" : testSession.descriptorName, "reuseSession" : sf.reuseSession, "testSuiteName" : sf.descriptorObj[descriptor].testSuiteName, "driver" : sf.driver, "browser" : sf.browser, "group" : sf.args.group, "testName" : sf.args.testName - }; reportManager = new ReportManager(reportObj); - reportManager.totalTimeTaken = sf.timeReportObj[testSession.descriptorPath].timeTaken; + reportManager.totalTimeTaken = sf.timeReportObj[testSession.descriptorName].timeTaken; reportManager.writeReports(); } @@ -140,9 +139,9 @@ TestExecutor.prototype.runNextTest = function(testQueue) { testQueue.curIndex += 1; // If first test session is starting for the descriptor, note start time - if (!sf.timeReportObj[testSession.descriptorPath]) { - sf.timeReportObj[testSession.descriptorPath] = []; - sf.timeReportObj[testSession.descriptorPath].startTime = Date.now(); + if (!sf.timeReportObj[testSession.descriptorName]) { + sf.timeReportObj[testSession.descriptorName] = []; + sf.timeReportObj[testSession.descriptorName].startTime = Date.now(); } testSession.runTest(function (error) { @@ -159,8 +158,8 @@ TestExecutor.prototype.runNextTest = function(testQueue) { // Write report per descriptor ( if all testsessions for the descriptor ( to which the current test session belongs ) are run ) - if (sf.timeReportObj[thisSession.descriptorPath].testSessionTimeArr) { - testSessionTimeArr = sf.timeReportObj[thisSession.descriptorPath].testSessionTimeArr; + if (sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr) { + testSessionTimeArr = sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr; } else { testSessionTimeArr = {}; } @@ -168,9 +167,9 @@ TestExecutor.prototype.runNextTest = function(testQueue) { testSessionTimeArr[thisSession.args.testName] = {}; testSessionTimeArr[thisSession.args.testName].timeTaken = ((thisSession.endTime - thisSession.startTime) / 1000).toFixed(2); - sf.timeReportObj[thisSession.descriptorPath].testSessionTimeArr = testSessionTimeArr; + sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr = testSessionTimeArr; - testExecutor.logger.info('Time taken to run - ' + thisSession.descriptorPath + '-' + thisSession.args.testName + ' is::' + + testExecutor.logger.info('Time taken to run - ' + thisSession.descriptorName + '-' + thisSession.args.testName + ' is::' + testSessionTimeArr[thisSession.args.testName].timeTaken); testExecutor.writeReportForDescriptor(thisSession, function() { @@ -205,11 +204,11 @@ TestExecutor.prototype.setupTestQueues = function(callback) { i, j; function incrementTestSessionCount(test) { - if (test.descriptorPath) { - if (sf.descriptorObj[test.descriptorPath]) { - sf.descriptorObj[test.descriptorPath].testSessionCount += 1; + if (test.descriptorName) { + if (sf.descriptorObj[test.descriptorName]) { + sf.descriptorObj[test.descriptorName].testSessionCount += 1; } else { - sf.descriptorObj[test.descriptorPath].testSessionCount = 1; + sf.descriptorObj[test.descriptorName].testSessionCount = 1; } } diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 455c1584..91285ef3 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -36,6 +36,9 @@ function TestSession(config, args, sessionId) { if (args.descriptorPath) { this.descriptorPath = args.descriptorPath; } + if (args.descriptorName) { + this.descriptorName = args.descriptorName; + } this.startTime = 0; this.endTime = 0; @@ -203,7 +206,7 @@ TestSession.prototype.isFail = function () { /** * - * @param artifactsObj : fields - testName ,count , descriptorPath , reportDir , screenShotsDir , artifactsUrl + * @param artifactsObj : fields - testName ,count , descriptorName , reportDir , screenShotsDir , artifactsUrl * @returns {{}} - Object of Img and Html paths for screenshots - both relative and absolute */ TestSession.prototype.getArtifactPaths = function (artifactsObj){ @@ -219,7 +222,7 @@ TestSession.prototype.getArtifactPaths = function (artifactsObj){ try { - dirPath = artifactsObj.descriptorPath ? artifactsObj.descriptorPath : ""; + dirPath = artifactsObj.descriptorName ? artifactsObj.descriptorName : ""; dirPath = path.resolve(artifactsObj.reportDir, artifactsObj.screenShotsDir, dirPath); screenShotsPath = artifactsObj.screenShotsDir; @@ -234,10 +237,10 @@ TestSession.prototype.getArtifactPaths = function (artifactsObj){ if (artifactsObj.artifactsUrl) { // Note - artifactsUrl comes appended with reportFolder ( from ArrowSetup ). So no need to append reportDir again - artifactPaths.pngPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorPath, screenShotImgPath); + artifactPaths.pngPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorName, screenShotImgPath); artifactPaths.pngPath = encodeURI(artifactPaths.pngPath); - artifactPaths.htmlPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorPath, screenShotHtmlPath); + artifactPaths.htmlPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorName, screenShotHtmlPath); artifactPaths.htmlPath = encodeURI(artifactPaths.htmlPath); } else { @@ -285,6 +288,7 @@ TestSession.prototype.recordFailure = function (count, callback) { artifactsObj.testName = testName; artifactsObj.count = count; artifactsObj.descriptorPath = self.descriptorPath; + artifactsObj.descriptorName = self.descriptorName; artifactsObj.reportDir = reportDir; artifactsObj.screenShotsDir = screenShotsDir; artifactsObj.artifactsUrl = global.artifactsUrl; diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 44135c59..411b46ee 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -48,6 +48,7 @@ DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJs } else if (descriptorJson[0].config && descriptorJson[0].config.length > 0) { configData = descriptorJson[0].config; } + return configData; }; @@ -77,10 +78,9 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript for (i = 0; i < configArr.length; i += 1) { descJson = clone(descriptorJson); - descJson[0]['config'] = configArr[i]; - descJson[0]['name'] += (' - ' + i); - if (descJson[0]['dataDriver']) { - delete descJson[0]['dataDriver']; + for (var key in configArr[i]) { + descJson[0]['config'] = configArr[i][key]; + descJson[0]['name'] += (' - ' + key); } descriptorArr.push(descJson); diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index edae0a82..bb642217 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -194,6 +194,23 @@ YUI.add('sessionfactory-tests', function (Y) { } })); + + suite.add(new Y.Test.Case({ + + name : "Call getFactoryTests with data driven descriptor - verify descriptor name contains key", + + testGetFactoryTestVerifyDescriptorNameContainsKey: function() { + + var ss = new SessionFactory({"dimensions" : arrowRoot + "/config/dimensions.json", "arrowModuleRoot" : arrowRoot + "/", "arrDescriptor" : [__dirname + "/testdata/datadriven-descriptor.json"]},{}), + t, + t = ss.getFactoryTests(); + A.areEqual(2 , t.length, "2 test objects should be returned"); + + A.isTrue(Y.JSON.stringify(t[0].descriptorName).indexOf('- controllers - finance') > 0, ""); + A.isTrue(Y.JSON.stringify(t[1].descriptorName).indexOf('- controllers - yahoo') > 0, ""); + } + })); + suite.add(new Y.Test.Case({ name : "Call getFactoryTests with valid descriptor path and matching testName", diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 85c2a9c9..7183f147 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -160,7 +160,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorPath = "descriptorPath"; + obj.descriptorName = "descriptorPath"; obj.reportDir = "myReport/arrow-target"; obj.screenShotsDir = "screenshots"; @@ -197,7 +197,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorPath = "descriptorPath"; + obj.descriptorName = "descriptorPath"; obj.reportDir = "myReport/arrow-target"; obj.screenShotsDir = "screenshots"; obj.artifactsUrl = "http://ci.com/artifacts/tests/arrow/node/myReport/arrow-target"; @@ -250,7 +250,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorPath = "descriptorPath"; + obj.descriptorName = "descriptorPath"; obj.reportDir = "arrow-target"; obj.screenShotsDir = "screenshots"; @@ -289,7 +289,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorPath = "descriptorPath"; + obj.descriptorName = "descriptorPath"; obj.reportDir = "arrow-target"; obj.screenShotsDir = "screenshots"; obj.artifactsUrl = "http://ci.com/artifacts/tests/arrow/node/arrow-target"; diff --git a/tests/unit/lib/util/configdata.json b/tests/unit/lib/util/configdata.json index 826407ab..4de01d52 100644 --- a/tests/unit/lib/util/configdata.json +++ b/tests/unit/lib/util/configdata.json @@ -1,11 +1,14 @@ { "config": [ { - "baseUrl": "http://finance.yahoo.com" + "finance": { + "baseUrl": "http://finance.yahoo.com" + } }, { - "baseUrl": "http://yahoo.com" + "yahoo": { + "baseUrl": "http://yahoo.com" + } } ] - -} +} \ No newline at end of file diff --git a/tests/unit/lib/util/datadriven-descriptor-config.json b/tests/unit/lib/util/datadriven-descriptor-config.json index 0f972dae..59a8a3f3 100644 --- a/tests/unit/lib/util/datadriven-descriptor-config.json +++ b/tests/unit/lib/util/datadriven-descriptor-config.json @@ -6,10 +6,14 @@ "config": [ { - "baseUrl": "http://finance.yahoo.com" + "finance": { + "baseUrl": "http://finance.yahoo.com" + } }, { - "baseUrl": "http://yahoo.com" + "yahoo": { + "baseUrl": "http://yahoo.com" + } } ], diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js index 8627da70..6b352e3c 100644 --- a/tests/unit/lib/util/datadrivermanager-tests.js +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -44,8 +44,8 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.isNotUndefined(configArr, "Config array is undefined ( getting from file)"); Y.Assert.areEqual(2, configArr.length); - Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); - Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); + Y.Assert.areEqual('http://finance.yahoo.com', configArr[0]['finance']['baseUrl'], "Config baseurl ( 0th element doesn't match )"); + Y.Assert.areEqual('http://yahoo.com', configArr[1]['yahoo']['baseUrl'], "Config baseurl ( 1st element doesn't match )"); }, @@ -67,8 +67,8 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.isNotUndefined(configArr, "Config array is undefined (getting from config array)"); Y.Assert.areEqual(2, configArr.length); - Y.Assert.areEqual('http://finance.yahoo.com', configArr[0].baseUrl, "Config baseurl ( 0th element doesn't match"); - Y.Assert.areEqual('http://yahoo.com', configArr[1].baseUrl, "Config baseurl ( 1st element doesn't match"); + Y.Assert.areEqual('http://finance.yahoo.com', configArr[0]['finance']['baseUrl'], "Config baseurl ( 0th element doesn't match"); + Y.Assert.areEqual('http://yahoo.com', configArr[1]['yahoo']['baseUrl'], "Config baseurl ( 1st element doesn't match"); }, From faca84707672a55faa08c01b0402a2ea45a03ed3 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 30 Apr 2014 23:05:33 -0700 Subject: [PATCH 090/197] Checking for duplicate keys in config data --- lib/util/datadrivermanager.js | 36 ++++++++- .../lib/util/configdata-duplicatekeys.json | 14 ++++ .../util/datadriven-descriptor-dup-keys.json | 34 +++++++++ .../unit/lib/util/datadrivermanager-tests.js | 73 +++++++++++++++++++ 4 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 tests/unit/lib/util/configdata-duplicatekeys.json create mode 100644 tests/unit/lib/util/datadriven-descriptor-dup-keys.json diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 411b46ee..97820681 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -55,14 +55,13 @@ DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJs /** * - * @param relativePath + * @param testDataPath * @param descriptorJson * @returns {Array} */ DataDriverManager.prototype.processDataDriver = function (testDataPath, descriptorJson) { var - dataDriver, configArr, self = this, descriptorArr = [], @@ -75,6 +74,15 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript if (configArr && configArr.length > 0) { + // Error out if duplicate keys exist in config data + try { + self.checkForDuplicateKeys(configArr); + } + catch(e) { + self.logger.error('Error while processing data driver. ' + e.message); + proc.exit(1); + } + for (i = 0; i < configArr.length; i += 1) { descJson = clone(descriptorJson); @@ -94,4 +102,28 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript }; +/** + * Checks for duplicate keys in the data driver. + * Exits with error message if finds duplicate keys + * @param configArr + */ +DataDriverManager.prototype.checkForDuplicateKeys = function (configArr) { + + var key, + keysArr = [], + self = this; + + for (var i = 0 ;i < configArr.length; i+=1 ) { + + for (key in configArr[i]) { + if (keysArr.indexOf(key) > -1) { + throw new Error("Invalid data for data driven descriptor. Duplicate key '" + key + "' in the object " + JSON.stringify(configArr[i])); + } else { + keysArr.push(key); + } + } + } + +}; + module.exports = DataDriverManager; \ No newline at end of file diff --git a/tests/unit/lib/util/configdata-duplicatekeys.json b/tests/unit/lib/util/configdata-duplicatekeys.json new file mode 100644 index 00000000..74c5783e --- /dev/null +++ b/tests/unit/lib/util/configdata-duplicatekeys.json @@ -0,0 +1,14 @@ +{ + "config": [ + { + "yahoo": { + "baseUrl": "http://finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://yahoo.com" + } + } + ] +} \ No newline at end of file diff --git a/tests/unit/lib/util/datadriven-descriptor-dup-keys.json b/tests/unit/lib/util/datadriven-descriptor-dup-keys.json new file mode 100644 index 00000000..a9e5a8ce --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor-dup-keys.json @@ -0,0 +1,34 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "dataDriver" : "./configdata-duplicatekeys.json", + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js index 6b352e3c..e8d2f9f7 100644 --- a/tests/unit/lib/util/datadrivermanager-tests.js +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -92,8 +92,55 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.areEqual("exit code is 1", msg); + }, + + "duplicate keys in config data": function() { + + var + descPath = __dirname + '/configdata-duplicatekeys.json', + configDataStr = fs.readFileSync(descPath, 'utf-8'), + configObj, + errMsg; + + try { + configObj = JSON.parse(configDataStr); + dataDriverMgr.checkForDuplicateKeys(configObj.config); + }catch(e) { + errMsg = e.message; + } + +// Y.Assert.isTrue(errMsg.indexOf('Duplicate key \'yahoo\' in the object') > -1); + + Y.Assert.isNotUndefined(errMsg, "Process data driver with duplicate keys in config data shall throw exception"); + if (errMsg) { + Y.Assert.isTrue(errMsg.indexOf('Duplicate key \'yahoo\' in the object') > -1); + } + + + } + + + ,"unique keys in config data": function() { + + var + descPath = __dirname + '/configdata.json', + configDataStr = fs.readFileSync(descPath, 'utf-8'), + configObj, + errMsg; + + try { + configObj = JSON.parse(configDataStr); + dataDriverMgr.checkForDuplicateKeys(configObj.config); + }catch(e) { + errMsg = e.message; + } + + Y.Assert.isUndefined(errMsg, "No exception shall be thrown when keys are unique"); + } + + })); suite.add(new Y.Test.Case({ @@ -123,7 +170,33 @@ YUI.add('datadrivermanager-tests', function (Y) { Y.Assert.areEqual( 2, descriptorArr.length); + }, + + "process data driver duplicate keys ": function() { + + var + descPath = __dirname + '/datadriven-descriptor-dup-keys.json', + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + descriptorJson, + descriptorArr = [], + errMsg; + + try { + descriptorJson = JSON.parse(descriptorJsonStr); + descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); + + }catch(e) { + errMsg = e.message; + } + + Y.Assert.isNotUndefined(errMsg, "Process data driver with duplicate keys in config data shall throw exception"); + + if (errMsg) { + Y.Assert.isTrue(errMsg.indexOf("exit code is 1") > -1); + } + } + })); suite.add(new Y.Test.Case({ From 308043308d5f93824ee15ea1f67716fd30fe8b93 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 00:50:03 -0700 Subject: [PATCH 091/197] Cleanup --- lib/session/sessionfactory.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 5e680cc4..ba65c633 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -177,7 +177,6 @@ SessionFactory.prototype.getFactoryTests = function () { descFile = this.arrDescriptor[i]; //TODO : use path module here relativePath = descFile.substring(0, descFile.lastIndexOf(global.pathSep)); - console.log('***relativePath::' + relativePath); dpreader = new DataProvider(this.config, this.args,descFile); testJsonArr = dpreader.getTestData(); From 25d142a4f9609a3675fbb30cbbc43a1e8897e18e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 00:59:30 -0700 Subject: [PATCH 092/197] Cleanup --- lib/session/sessionfactory.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index ba65c633..48605e7e 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -295,7 +295,6 @@ SessionFactory.prototype.getFactoryTests = function () { } else { testData.params.lib = descLib; } - // Store relativePath of the json file, if not already set [ Will be set already in case of imported descriptor ] if (!testData.relativePath) { testData.relativePath = path.dirname(descFile); From 27b9b1e1d143384ec6d2b7d1d7b0c9ffe6a7fe6c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 14:26:59 -0700 Subject: [PATCH 093/197] Displaying descriptor name in error message for duplicate keys --- lib/util/datadrivermanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 97820681..e028c65c 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -79,7 +79,7 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript self.checkForDuplicateKeys(configArr); } catch(e) { - self.logger.error('Error while processing data driver. ' + e.message); + self.logger.error('Error while processing data driver for the descriptor:' + testDataPath + ' , Error ::' + e.message); proc.exit(1); } From 0253001c694a5f3cbf1aa57483b458dea0657f19 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 14:29:00 -0700 Subject: [PATCH 094/197] Renaming extendDescriptor to processExtendDescriptor --- lib/util/dataprovider.js | 4 ++-- tests/unit/lib/util/dataprovider-tests.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index d4a0ac03..5bea9dc0 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -114,7 +114,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { // inject baseUrl into the settings self.injectBaseUrlFromSettings(descriptorJson, baseUrl); - descriptorJson = self.extendDescriptor(descriptorJson, cwd, relativePath); + descriptorJson = self.processExtendDescriptor(descriptorJson, cwd, relativePath); // merge dimension into descriptor if (this.dimensions) { @@ -187,7 +187,7 @@ DataProvider.prototype.applyYcbSubstitution = function(descriptorJson, contextOb * @param cwd * @param relativePath */ -DataProvider.prototype.extendDescriptor = function(descriptorJson, cwd, relativePath) { +DataProvider.prototype.processExtendDescriptor = function(descriptorJson, cwd, relativePath) { //checking if descriptor is extending another json if (descriptorJson[0]['extends']) { diff --git a/tests/unit/lib/util/dataprovider-tests.js b/tests/unit/lib/util/dataprovider-tests.js index 1edb4dbf..9106f081 100644 --- a/tests/unit/lib/util/dataprovider-tests.js +++ b/tests/unit/lib/util/dataprovider-tests.js @@ -412,7 +412,7 @@ YUI.add('dataprovider-tests', function (Y) { var descriptor = JSON.parse(fs.readFileSync(descPath,'utf-8')); var relativePath = path.dirname(dp.testDataPath); - descriptor = dp.extendDescriptor(descriptor, __dirname, relativePath); + descriptor = dp.processExtendDescriptor(descriptor, __dirname, relativePath); Y.Assert.isNotUndefined(descriptor,'Descriptor is undefined after extends'); Y.Assert.areEqual(2, descriptor.length,'Length of descriptor Array shall be 2'); Y.Assert.areEqual('{"settings":["environment:new"],"config":{"baseUrl":"http://newurl.com"}}', JSON.stringify(descriptor[1]), "descriptor[1] doesnt match the expected value after extending"); From 056f2a340907c8be9133b09a1314475d628ba052 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 14:40:20 -0700 Subject: [PATCH 095/197] Validating dimensions json file --- lib/util/dataprovider.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index 5bea9dc0..e381f334 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -98,7 +98,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { dimensionsJson, self = this, descriptor, - relativePath = path.dirname(this.testDataPath); + relativePath = path.dirname(self.testDataPath), + proc = self.mock || process; // Importing descriptor if (importDescriptor) { @@ -109,7 +110,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { } // read context into object - contextObj = qs.parse(this.context, ",", ":"); + contextObj = qs.parse(self.context, ",", ":"); baseUrl = self.config["baseUrl"]; // inject baseUrl into the settings @@ -117,16 +118,16 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { descriptorJson = self.processExtendDescriptor(descriptorJson, cwd, relativePath); // merge dimension into descriptor - if (this.dimensions) { - dimensionsJson = JSON.parse(fs.readFileSync(this.dimensions, "utf-8")); + if (self.dimensions) { + dimensionsJson = self.readAndValidateJSON(self.dimensions); descriptorJson.unshift(dimensionsJson[0]); } descriptor = self.applyYcbSubstitution(descriptorJson, contextObj); // Replace params in the descriptor , if user has passed either of replaceParamJSON or defaultParamJSON - if (this.replaceParamJSON || this.defaultParamJSON) { - descriptor = this.getDescriptorWithReplacedParams(descriptor); + if (self.replaceParamJSON || self.defaultParamJSON) { + descriptor = self.getDescriptorWithReplacedParams(descriptor); } self.validateDescriptor(descriptor, self.config["arrowModuleRoot"] + "config/descriptor-schema.json"); From 1974e7972d8331b918be63ff7c00bc66d0a5d5f5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 14:47:11 -0700 Subject: [PATCH 096/197] Showing consolidated report when more than 1 descriptor --- lib/session/sessionfactory.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 48605e7e..cfeff3ce 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -353,7 +353,8 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { totalTimeTaken = ((Date.now() - global.startTime) / 1000).toFixed(2); if (this.args.report && testQueue.sessions) { - if (this.descriptorObj && Object.keys(this.descriptorObj).length > 0) { + // Show consolidated reports only when more than 1 descriptors + if (this.descriptorObj && Object.keys(this.descriptorObj).length > 1) { showConsolidatedReport = true; } From 9f65d060fdbd12b49e6a5ddc1071789316c9cb63 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 15:11:27 -0700 Subject: [PATCH 097/197] Changing descriptorName to qualifiedDescriptorPath --- lib/session/sessionfactory.js | 31 ++++++--------- lib/session/testexecutor.js | 38 +++++++++---------- lib/session/testsession.js | 22 +++++------ .../unit/lib/session/sessionfactory-tests.js | 4 +- tests/unit/lib/session/testdata/config.js | 2 +- tests/unit/lib/session/testsession-tests.js | 8 ++-- tests/unit/lib/util/config/configoverride.js | 2 +- 7 files changed, 49 insertions(+), 58 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index cfeff3ce..a44986e3 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -169,7 +169,7 @@ SessionFactory.prototype.getFactoryTests = function () { relativePath, testJsonArr, isDataDriven, - descriptorName; + qualifiedDescriptorPath; // Iterate over all descriptor files and get the tests @@ -184,17 +184,17 @@ SessionFactory.prototype.getFactoryTests = function () { testJson = testJsonArr[j]; isDataDriven = testJson && (testJson.dataDriver || (testJson.config instanceof Array)); - descriptorName = descFile; + qualifiedDescriptorPath = descFile; if (isDataDriven){ - descriptorName += ( ' - ' + testJson.name); + qualifiedDescriptorPath += ( ' - ' + testJson.name); } - if (!this.descriptorObj[descriptorName]) { - this.descriptorObj[descriptorName] = {}; - this.descriptorObj[descriptorName].testSessionCount = 0; + if (!this.descriptorObj[qualifiedDescriptorPath]) { + this.descriptorObj[qualifiedDescriptorPath] = {}; + this.descriptorObj[qualifiedDescriptorPath].testSessionCount = 0; } - this.descriptorObj[descriptorName].testSuiteName = testJson.name; + this.descriptorObj[qualifiedDescriptorPath].testSuiteName = testJson.name; //Check if the useSSL flag is set from either commandline or at descriptor level if (testJson.useSSL) { @@ -300,20 +300,11 @@ SessionFactory.prototype.getFactoryTests = function () { testData.relativePath = path.dirname(descFile); } + // Store the descriptor file name ( with path and test name & keys ( if data drive)) in testSession object + testData.qualifiedDescriptorPath = qualifiedDescriptorPath; - // Store the descriptor file name ( with path ) in testSession object - testData.descriptorPath = descFile; - testData.descriptorName = descriptorName; // Needed for data driven descriptor e.g contains descriptor name appended with some key e.g descriptor-0 TODO - - // Store the no. of test sessions in the descriptor -// if (this.descriptorObj[descFile]) { -// this.descriptorObj[descFile].testSessionCount += 1; -// } else { -// this.descriptorObj[descFile].testSessionCount = 1; -// } - - if (this.descriptorObj[descriptorName]) { - this.descriptorObj[descriptorName].testSessionCount = 0; + if (this.descriptorObj[qualifiedDescriptorPath]) { + this.descriptorObj[qualifiedDescriptorPath].testSessionCount = 0; } // Initialize the share area diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index cea5b52f..fcb17b34 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -48,7 +48,7 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback for (descriptor in sf.descriptorObj) { - if (descriptor === testSession.descriptorName) { + if (descriptor === testSession.qualifiedDescriptorPath) { // Store testSessions array for each descriptor in testSessionMap if (sf.testSessionMap[descriptor]) { testSessionsArr = sf.testSessionMap[descriptor]; @@ -62,17 +62,17 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback sf.descriptorObj[descriptor].testSessionCount -= 1; if (sf.descriptorObj[descriptor].testSessionCount === 0) { - sf.timeReportObj[testSession.descriptorName].endTime = Date.now(); // TODO Is endTime required ??? - sf.timeReportObj[testSession.descriptorName].timeTaken = - ((sf.timeReportObj[testSession.descriptorName].endTime - sf.timeReportObj[testSession.descriptorName].startTime) / 1000).toFixed(2); + sf.timeReportObj[testSession.qualifiedDescriptorPath].endTime = Date.now(); // TODO Is endTime required ??? + sf.timeReportObj[testSession.qualifiedDescriptorPath].timeTaken = + ((sf.timeReportObj[testSession.qualifiedDescriptorPath].endTime - sf.timeReportObj[testSession.qualifiedDescriptorPath].startTime) / 1000).toFixed(2); - testExecutor.logger.info('Time taken to run descriptor-' + testSession.descriptorName + ' = ' + sf.timeReportObj[testSession.descriptorName].timeTaken); + testExecutor.logger.info('Time taken to run descriptor-' + testSession.qualifiedDescriptorPath + ' = ' + sf.timeReportObj[testSession.qualifiedDescriptorPath].timeTaken); - testExecutor.logger.info('All tests over for descriptor:' + testSession.descriptorName); + testExecutor.logger.info('All tests over for descriptor:' + testSession.qualifiedDescriptorPath); reportObj = { "reportFolder" : global.reportFolder, "arrTestSessions" : sf.testSessionMap[descriptor], - "descriptor" : testSession.descriptorName, + "descriptor" : testSession.qualifiedDescriptorPath, "reuseSession" : sf.reuseSession, "testSuiteName" : sf.descriptorObj[descriptor].testSuiteName, "driver" : sf.driver, @@ -81,7 +81,7 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback "testName" : sf.args.testName }; reportManager = new ReportManager(reportObj); - reportManager.totalTimeTaken = sf.timeReportObj[testSession.descriptorName].timeTaken; + reportManager.totalTimeTaken = sf.timeReportObj[testSession.qualifiedDescriptorPath].timeTaken; reportManager.writeReports(); } @@ -139,9 +139,9 @@ TestExecutor.prototype.runNextTest = function(testQueue) { testQueue.curIndex += 1; // If first test session is starting for the descriptor, note start time - if (!sf.timeReportObj[testSession.descriptorName]) { - sf.timeReportObj[testSession.descriptorName] = []; - sf.timeReportObj[testSession.descriptorName].startTime = Date.now(); + if (!sf.timeReportObj[testSession.qualifiedDescriptorPath]) { + sf.timeReportObj[testSession.qualifiedDescriptorPath] = []; + sf.timeReportObj[testSession.qualifiedDescriptorPath].startTime = Date.now(); } testSession.runTest(function (error) { @@ -158,8 +158,8 @@ TestExecutor.prototype.runNextTest = function(testQueue) { // Write report per descriptor ( if all testsessions for the descriptor ( to which the current test session belongs ) are run ) - if (sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr) { - testSessionTimeArr = sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr; + if (sf.timeReportObj[thisSession.qualifiedDescriptorPath].testSessionTimeArr) { + testSessionTimeArr = sf.timeReportObj[thisSession.qualifiedDescriptorPath].testSessionTimeArr; } else { testSessionTimeArr = {}; } @@ -167,9 +167,9 @@ TestExecutor.prototype.runNextTest = function(testQueue) { testSessionTimeArr[thisSession.args.testName] = {}; testSessionTimeArr[thisSession.args.testName].timeTaken = ((thisSession.endTime - thisSession.startTime) / 1000).toFixed(2); - sf.timeReportObj[thisSession.descriptorName].testSessionTimeArr = testSessionTimeArr; + sf.timeReportObj[thisSession.qualifiedDescriptorPath].testSessionTimeArr = testSessionTimeArr; - testExecutor.logger.info('Time taken to run - ' + thisSession.descriptorName + '-' + thisSession.args.testName + ' is::' + + testExecutor.logger.info('Time taken to run - ' + thisSession.qualifiedDescriptorPath + '-' + thisSession.args.testName + ' is::' + testSessionTimeArr[thisSession.args.testName].timeTaken); testExecutor.writeReportForDescriptor(thisSession, function() { @@ -204,11 +204,11 @@ TestExecutor.prototype.setupTestQueues = function(callback) { i, j; function incrementTestSessionCount(test) { - if (test.descriptorName) { - if (sf.descriptorObj[test.descriptorName]) { - sf.descriptorObj[test.descriptorName].testSessionCount += 1; + if (test.qualifiedDescriptorPath) { + if (sf.descriptorObj[test.qualifiedDescriptorPath]) { + sf.descriptorObj[test.qualifiedDescriptorPath].testSessionCount += 1; } else { - sf.descriptorObj[test.descriptorName].testSessionCount = 1; + sf.descriptorObj[test.qualifiedDescriptorPath].testSessionCount = 1; } } diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 91285ef3..e4a4ef80 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -33,11 +33,11 @@ function TestSession(config, args, sessionId) { this.testConfig.relativePath = args.relativePath; } - if (args.descriptorPath) { - this.descriptorPath = args.descriptorPath; - } - if (args.descriptorName) { - this.descriptorName = args.descriptorName; +// if (args.descriptorPath) { +// this.descriptorPath = args.descriptorPath; +// } + if (args.qualifiedDescriptorPath) { + this.qualifiedDescriptorPath = args.qualifiedDescriptorPath; } this.startTime = 0; @@ -74,7 +74,7 @@ TestSession.prototype.setup = function (callback) { return; } if (this.resolvedProxyConfigPath) { - this.logger.debug("ResolvedProxyConfig path for " + this.descriptorPath + " is :" + this.resolvedProxyConfigPath); + this.logger.debug("ResolvedProxyConfig path for " + this.qualifiedDescriptorPath + " is :" + this.resolvedProxyConfigPath); this.args.proxyUrl = global.routerMap[this.resolvedProxyConfigPath]; try { this.args.proxyConfig = require(this.resolvedProxyConfigPath); @@ -206,7 +206,7 @@ TestSession.prototype.isFail = function () { /** * - * @param artifactsObj : fields - testName ,count , descriptorName , reportDir , screenShotsDir , artifactsUrl + * @param artifactsObj : fields - testName ,count , qualifiedDescriptorPath , reportDir , screenShotsDir , artifactsUrl * @returns {{}} - Object of Img and Html paths for screenshots - both relative and absolute */ TestSession.prototype.getArtifactPaths = function (artifactsObj){ @@ -222,7 +222,7 @@ TestSession.prototype.getArtifactPaths = function (artifactsObj){ try { - dirPath = artifactsObj.descriptorName ? artifactsObj.descriptorName : ""; + dirPath = artifactsObj.qualifiedDescriptorPath ? artifactsObj.qualifiedDescriptorPath : ""; dirPath = path.resolve(artifactsObj.reportDir, artifactsObj.screenShotsDir, dirPath); screenShotsPath = artifactsObj.screenShotsDir; @@ -237,10 +237,10 @@ TestSession.prototype.getArtifactPaths = function (artifactsObj){ if (artifactsObj.artifactsUrl) { // Note - artifactsUrl comes appended with reportFolder ( from ArrowSetup ). So no need to append reportDir again - artifactPaths.pngPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorName, screenShotImgPath); + artifactPaths.pngPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.qualifiedDescriptorPath, screenShotImgPath); artifactPaths.pngPath = encodeURI(artifactPaths.pngPath); - artifactPaths.htmlPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.descriptorName, screenShotHtmlPath); + artifactPaths.htmlPath = artifactsObj.artifactsUrl + path.sep + path.join(screenShotsPath, artifactsObj.qualifiedDescriptorPath, screenShotHtmlPath); artifactPaths.htmlPath = encodeURI(artifactPaths.htmlPath); } else { @@ -288,7 +288,7 @@ TestSession.prototype.recordFailure = function (count, callback) { artifactsObj.testName = testName; artifactsObj.count = count; artifactsObj.descriptorPath = self.descriptorPath; - artifactsObj.descriptorName = self.descriptorName; + artifactsObj.qualifiedDescriptorPath = self.qualifiedDescriptorPath; artifactsObj.reportDir = reportDir; artifactsObj.screenShotsDir = screenShotsDir; artifactsObj.artifactsUrl = global.artifactsUrl; diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index bb642217..645bff05 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -206,8 +206,8 @@ YUI.add('sessionfactory-tests', function (Y) { t = ss.getFactoryTests(); A.areEqual(2 , t.length, "2 test objects should be returned"); - A.isTrue(Y.JSON.stringify(t[0].descriptorName).indexOf('- controllers - finance') > 0, ""); - A.isTrue(Y.JSON.stringify(t[1].descriptorName).indexOf('- controllers - yahoo') > 0, ""); + A.isTrue(Y.JSON.stringify(t[0].qualifiedDescriptorPath).indexOf('- controllers - finance') > 0, ""); + A.isTrue(Y.JSON.stringify(t[1].qualifiedDescriptorPath).indexOf('- controllers - yahoo') > 0, ""); } })); diff --git a/tests/unit/lib/session/testdata/config.js b/tests/unit/lib/session/testdata/config.js index 4f5b2194..5575116c 100644 --- a/tests/unit/lib/session/testdata/config.js +++ b/tests/unit/lib/session/testdata/config.js @@ -22,6 +22,6 @@ config.defaultAppSeed = "http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"; config.testSeed = config.arrowModuleRoot + "lib/client/yuitest-seed.js"; config.testRunner = config.arrowModuleRoot + "lib/client/yuitest-runner.js"; config.autolib = config.arrowModuleRoot + "lib/common"; -config.descriptorName = "test_descriptor.json"; +config.descriptorPath = "test_descriptor.json"; module.exports = config; diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 7183f147..0f5272a8 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -160,7 +160,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorName = "descriptorPath"; + obj.qualifiedDescriptorPath = "descriptorPath"; obj.reportDir = "myReport/arrow-target"; obj.screenShotsDir = "screenshots"; @@ -197,7 +197,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorName = "descriptorPath"; + obj.qualifiedDescriptorPath = "descriptorPath"; obj.reportDir = "myReport/arrow-target"; obj.screenShotsDir = "screenshots"; obj.artifactsUrl = "http://ci.com/artifacts/tests/arrow/node/myReport/arrow-target"; @@ -250,7 +250,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorName = "descriptorPath"; + obj.qualifiedDescriptorPath = "descriptorPath"; obj.reportDir = "arrow-target"; obj.screenShotsDir = "screenshots"; @@ -289,7 +289,7 @@ YUI.add('testsession-tests', function (Y) { var obj = {}; obj.count = 1; obj.testName = "Test-1"; - obj.descriptorName = "descriptorPath"; + obj.qualifiedDescriptorPath = "descriptorPath"; obj.reportDir = "arrow-target"; obj.screenShotsDir = "screenshots"; obj.artifactsUrl = "http://ci.com/artifacts/tests/arrow/node/arrow-target"; diff --git a/tests/unit/lib/util/config/configoverride.js b/tests/unit/lib/util/config/configoverride.js index 4f9e3cd7..12d5e16c 100644 --- a/tests/unit/lib/util/config/configoverride.js +++ b/tests/unit/lib/util/config/configoverride.js @@ -10,6 +10,6 @@ var config = {}; config.parallel = true; config.baseUrl = "http://new.base.url.com"; // Framework config -config.descriptorName = "new_test_descriptor.json"; +config.qualifiedDescriptorPath = "new_test_descriptor.json"; module.exports = config; From 325f93497501324d04d2bbc8a0581465f481890d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 15:12:19 -0700 Subject: [PATCH 098/197] Upgrading version to 0.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10a27917..a82dfbe3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.5.3", + "version": "0.6.0", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 0b159b0bec9a160e38495e72f04f3c144c5a1a32 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 1 May 2014 17:43:35 -0700 Subject: [PATCH 099/197] Fixing failed descriptors message --- lib/session/sessionfactory.js | 11 +++- lib/session/testexecutor.js | 6 +- lib/session/testsession.js | 7 +- lib/util/datadrivermanager.js | 2 +- lib/util/dataprovider.js | 12 +++- lib/util/reportmanager.js | 19 ++++-- .../unit/lib/session/sessionfactory-tests.js | 4 +- tests/unit/lib/util/reportmanager-tests.js | 65 ++++++++++++++++++- 8 files changed, 107 insertions(+), 19 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index a44986e3..5a30df75 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -169,7 +169,8 @@ SessionFactory.prototype.getFactoryTests = function () { relativePath, testJsonArr, isDataDriven, - qualifiedDescriptorPath; + qualifiedDescriptorPath, + descriptorPath; // Iterate over all descriptor files and get the tests @@ -184,9 +185,11 @@ SessionFactory.prototype.getFactoryTests = function () { testJson = testJsonArr[j]; isDataDriven = testJson && (testJson.dataDriver || (testJson.config instanceof Array)); - qualifiedDescriptorPath = descFile; + descriptorPath = descFile; + + qualifiedDescriptorPath = descriptorPath; if (isDataDriven){ - qualifiedDescriptorPath += ( ' - ' + testJson.name); + qualifiedDescriptorPath += (' - ' + testJson.dataDriverKey); } if (!this.descriptorObj[qualifiedDescriptorPath]) { @@ -194,6 +197,7 @@ SessionFactory.prototype.getFactoryTests = function () { this.descriptorObj[qualifiedDescriptorPath].testSessionCount = 0; } + this.descriptorObj[qualifiedDescriptorPath].dataDriverKey = testJson.dataDriverKey; this.descriptorObj[qualifiedDescriptorPath].testSuiteName = testJson.name; //Check if the useSSL flag is set from either commandline or at descriptor level @@ -302,6 +306,7 @@ SessionFactory.prototype.getFactoryTests = function () { // Store the descriptor file name ( with path and test name & keys ( if data drive)) in testSession object testData.qualifiedDescriptorPath = qualifiedDescriptorPath; + testData.descriptorPath = descriptorPath; if (this.descriptorObj[qualifiedDescriptorPath]) { this.descriptorObj[qualifiedDescriptorPath].testSessionCount = 0; diff --git a/lib/session/testexecutor.js b/lib/session/testexecutor.js index fcb17b34..204d41f4 100644 --- a/lib/session/testexecutor.js +++ b/lib/session/testexecutor.js @@ -69,16 +69,18 @@ TestExecutor.prototype.writeReportForDescriptor = function(testSession, callback testExecutor.logger.info('Time taken to run descriptor-' + testSession.qualifiedDescriptorPath + ' = ' + sf.timeReportObj[testSession.qualifiedDescriptorPath].timeTaken); testExecutor.logger.info('All tests over for descriptor:' + testSession.qualifiedDescriptorPath); + reportObj = { "reportFolder" : global.reportFolder, "arrTestSessions" : sf.testSessionMap[descriptor], - "descriptor" : testSession.qualifiedDescriptorPath, + "descriptor" : testSession.descriptorPath, "reuseSession" : sf.reuseSession, "testSuiteName" : sf.descriptorObj[descriptor].testSuiteName, "driver" : sf.driver, "browser" : sf.browser, "group" : sf.args.group, - "testName" : sf.args.testName + "testName" : sf.args.testName, + "dataDriverKey":sf.descriptorObj[descriptor].dataDriverKey }; reportManager = new ReportManager(reportObj); reportManager.totalTimeTaken = sf.timeReportObj[testSession.qualifiedDescriptorPath].timeTaken; diff --git a/lib/session/testsession.js b/lib/session/testsession.js index e4a4ef80..87d51e08 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -33,9 +33,10 @@ function TestSession(config, args, sessionId) { this.testConfig.relativePath = args.relativePath; } -// if (args.descriptorPath) { -// this.descriptorPath = args.descriptorPath; -// } + if (args.descriptorPath) { + this.descriptorPath = args.descriptorPath; + } + if (args.qualifiedDescriptorPath) { this.qualifiedDescriptorPath = args.qualifiedDescriptorPath; } diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index e028c65c..38284918 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -88,7 +88,7 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript descJson = clone(descriptorJson); for (var key in configArr[i]) { descJson[0]['config'] = configArr[i][key]; - descJson[0]['name'] += (' - ' + key); + descJson[0]['dataDriverKey'] = key; } descriptorArr.push(descJson); diff --git a/lib/util/dataprovider.js b/lib/util/dataprovider.js index e381f334..f399348c 100644 --- a/lib/util/dataprovider.js +++ b/lib/util/dataprovider.js @@ -98,8 +98,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { dimensionsJson, self = this, descriptor, - relativePath = path.dirname(self.testDataPath), - proc = self.mock || process; + relativePath = path.dirname(self.testDataPath); // Importing descriptor if (importDescriptor) { @@ -115,6 +114,8 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { // inject baseUrl into the settings self.injectBaseUrlFromSettings(descriptorJson, baseUrl); + + // Process extend descriptor descriptorJson = self.processExtendDescriptor(descriptorJson, cwd, relativePath); // merge dimension into descriptor @@ -123,6 +124,7 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { descriptorJson.unshift(dimensionsJson[0]); } + // Apply ycb substitution descriptor = self.applyYcbSubstitution(descriptorJson, contextObj); // Replace params in the descriptor , if user has passed either of replaceParamJSON or defaultParamJSON @@ -130,7 +132,9 @@ DataProvider.prototype.getDescriptor = function(descriptorJson) { descriptor = self.getDescriptorWithReplacedParams(descriptor); } + // Validate descriptor against the schema self.validateDescriptor(descriptor, self.config["arrowModuleRoot"] + "config/descriptor-schema.json"); + return descriptor; }; @@ -331,6 +335,10 @@ DataProvider.prototype.validateDescriptor = function (descriptor, descriptorSche try { descriptorSchema = fs.readFileSync(descriptorSchemaPath, "utf-8"); descriptorSchema = JSON.parse(descriptorSchema); + + // Add dataDriverKey as a hidden property + descriptorSchema.properties.dataDriverKey = {"type":"string"}; + } catch (e) { self.logger.error('Failed to read/parse descriptor schema - error :' + e); proc.exit(1); diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 9a7a2316..2cbbf737 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -362,11 +362,15 @@ ReportManager.prototype.writeReports = function () { } - xmlReportName = path.resolve(dirPath, path.basename(this.reportObj.descriptor, '.json') + "-report.xml"); - jsonReportName = path.resolve(dirPath, path.basename(this.reportObj.descriptor, '.json') + "-report.json"); - + var dataDriverKey = ''; + if (this.reportObj.dataDriverKey) { + dataDriverKey = '-' + this.reportObj.dataDriverKey; + } + var reportPath = path.resolve(dirPath,path.basename(this.reportObj.descriptor + dataDriverKey, '.json')); + xmlReportName = reportPath + "-report.xml"; + jsonReportName = reportPath + "-report.json"; if (this.failCount > 0) { - global.failedDescriptors.push({"desc" : this.reportObj.descriptor, "failures" : this.failCount}); + global.failedDescriptors.push({"desc" : this.reportObj.descriptor, "failures" : this.failCount, "dataDriverKey":this.reportObj.dataDriverKey}); } log(("Test Report Summary for the descriptor::" + this.reportObj.descriptor).bold.magenta.toString()); @@ -396,7 +400,12 @@ ReportManager.prototype.writeReports = function () { log(" List of failed descriptors "); for (i = 0; i < global.failedDescriptors.length; i += 1) { - log('\nFailed Descriptor Path : ' + global.failedDescriptors[i].desc); + if (global.failedDescriptors[i].desc && global.failedDescriptors[i].dataDriverKey) { + log("\nFailed Data driven Descriptor Path : " + global.failedDescriptors[i].desc + " - for the data driver item '" + global.failedDescriptors[i].dataDriverKey + "'"); + } else { + log('\nFailed Descriptor Path : ' + global.failedDescriptors[i].desc); + } + log('Total Number of Failed Tests : ' + global.failedDescriptors[i].failures); log("-----------------------------------------------------------------------"); } diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 645bff05..797735a9 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -206,8 +206,8 @@ YUI.add('sessionfactory-tests', function (Y) { t = ss.getFactoryTests(); A.areEqual(2 , t.length, "2 test objects should be returned"); - A.isTrue(Y.JSON.stringify(t[0].qualifiedDescriptorPath).indexOf('- controllers - finance') > 0, ""); - A.isTrue(Y.JSON.stringify(t[1].qualifiedDescriptorPath).indexOf('- controllers - yahoo') > 0, ""); + A.isTrue(Y.JSON.stringify(t[0].qualifiedDescriptorPath).indexOf('- finance') > 0, "QualifiedDescriptorPath shall contain the data driver key - finance"); + A.isTrue(Y.JSON.stringify(t[1].qualifiedDescriptorPath).indexOf('- yahoo') > 0, "QualifiedDescriptorPath shall contain the data driver key - yahoo"); } })); diff --git a/tests/unit/lib/util/reportmanager-tests.js b/tests/unit/lib/util/reportmanager-tests.js index 9e53bee0..d0a86676 100644 --- a/tests/unit/lib/util/reportmanager-tests.js +++ b/tests/unit/lib/util/reportmanager-tests.js @@ -407,8 +407,71 @@ YUI.add('reportmanager-tests', function(Y) { } }); - } + }, + + "writeReports With Result Report for data driver" : function() { + var testSessionObj, + arrowRoot = path.join(__dirname, '../../../..'), + TestSession = require(arrowRoot + '/tests/unit/lib/util/testSession.js'), + report = JSON.parse(fs.readFileSync(__dirname + "/config/resultreport.json")), + testSessionsArr = [], + rm, + i, + reportObj, + fileUtil = new FileUtil(); + + + testSessionObj = new TestSession(report); + testSessionObj.args = {}; + testSessionObj.args.browser = "dummyBrowser"; + + testSessionsArr.push(testSessionObj); + + // Instantiate report manager with report object + + reportObj = { + "arrTestSessions" : testSessionsArr, + "arrWDSessions" : "", + "descriptor" : "dummyDescriptor.json", + "reuseSession" : "dummyReuseSession", + "testSuiteName" : "dummyTestSuite", + "driver" : "dummyDriver", + "browser" : "dummyBrowser", + "group" : "dummyGroup", + "testName" : "dummyTestname", + dataDriverKey:"dataDriverKey" + }; + global.reportFolder = "reportFolder"; + global.workingDirectory = process.cwd(); + fileUtil.createDirectory(path.resolve(global.workingDirectory, global.reportFolder, 'arrow-report')); + + rm = new RepManager(reportObj); + + + rm.writeReports(); + + // Clean up + + fs.unlink(path.resolve(global.workingDirectory, global.reportFolder, 'arrow-report', 'dummyDescriptor.json-dataDriverKey-report.json'), + function(err) { + if (err) { + console.log('Can\'t cleanup the dummy descriptor json report file..' + err); + } else { + console.log('Cleaned up the dummy descriptor json report file..'); + } + }); + + fs.unlink(path.resolve(global.workingDirectory, global.reportFolder, 'arrow-report', 'dummyDescriptor.json-dataDriverKey-report.xml'), + function(err) { + if (err) { + console.log('Can\'t cleanup the dummy descriptor xml report file..' + err); + } else { + console.log('Cleaned up the dummy descriptor xml report file..'); + } + }); + + }, From ef5cdf73fce488b86b10b61f7b620413f92fa620 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 2 May 2014 13:54:55 -0700 Subject: [PATCH 100/197] Preparing for 0.6.0 --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8167304..5cbde576 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +# 0.6.0 + + * Adding support for data driven descriptors [PR](https://github.com/yahoo/arrow/pull/237) [Documentation](http://yahoo.github.io/arrow/arrow_FAQs.html#how-can-I-reuse-same-descriptor-with-different-sets-of-data) + * Adding support for sharing parameters from descriptors [PR](https://github.com/yahoo/arrow/pull/237) [Documentation](http://yahoo.github.io/arrow/arrow_FAQs.html#how-can-I-share-params-from-my-descriptor) + * Error handling for JSON parsing in webservice controller [PR](https://github.com/yahoo/arrow/pull/235) + # 0.5.3 * Adding support for specifying comments in descriptor [PR](https://github.com/yahoo/arrow/pull/232) From 733648e886863c22d1a4c0c63e2c0d8d5984bb06 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 2 May 2014 18:14:06 -0700 Subject: [PATCH 101/197] Setting peer dep to 3.8.0 for testing --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 658ccdef..f0f48067 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -98,10 +98,10 @@ } }, "yui": { - "version": "3.x", + "version": "3.8.0", "dependencies": { "request": { - "version": "2.34.0" + "version": "2.9.202" } } }, diff --git a/package.json b/package.json index e2016564..bd3ad39f 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "clone":"0.1.11" }, "peerDependencies":{ - "yui": "3.x" + "yui": "3.8.0" }, "optionalDependencies": { "mocha": "1.7.4", From 6e634a1b60b7a0a6e12c79cd85867df11643998d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 3 May 2014 13:53:29 -0700 Subject: [PATCH 102/197] Removing shrinwrap , updating yui peer dep to 3.x ( for testing ) --- npm-shrinkwrap.json | 359 -------------------------------------------- package.json | 2 +- 2 files changed, 1 insertion(+), 360 deletions(-) delete mode 100644 npm-shrinkwrap.json diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json deleted file mode 100644 index f0f48067..00000000 --- a/npm-shrinkwrap.json +++ /dev/null @@ -1,359 +0,0 @@ -{ - "name": "yahoo-arrow", - "version": "0.3.0", - "dependencies": { - "glob": { - "version": "3.1.11", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - }, - "graceful-fs": { - "version": "1.1.14" - }, - "inherits": { - "version": "1.0.0" - } - } - }, - "nopt": { - "version": "2.0.0", - "dependencies": { - "abbrev": { - "version": "1.0.4" - } - } - }, - "colors": { - "version": "0.6.0-1" - }, - "express": { - "version": "3.0.0", - "dependencies": { - "connect": { - "version": "2.6.0", - "dependencies": { - "qs": { - "version": "0.5.1" - }, - "formidable": { - "version": "1.0.11" - }, - "bytes": { - "version": "0.1.0" - }, - "send": { - "version": "0.0.4", - "dependencies": { - "mime": { - "version": "1.2.6" - } - } - }, - "pause": { - "version": "0.0.1" - } - } - }, - "commander": { - "version": "0.6.1" - }, - "range-parser": { - "version": "0.0.4" - }, - "mkdirp": { - "version": "0.3.3" - }, - "cookie": { - "version": "0.0.4" - }, - "crc": { - "version": "0.2.0" - }, - "fresh": { - "version": "0.1.0" - }, - "methods": { - "version": "0.0.1" - }, - "send": { - "version": "0.1.0", - "dependencies": { - "mime": { - "version": "1.2.6" - } - } - }, - "debug": { - "version": "0.7.2" - } - } - }, - "yui": { - "version": "3.8.0", - "dependencies": { - "request": { - "version": "2.9.202" - } - } - }, - "JSV": { - "version": "4.0.2" - }, - "log4js": { - "version": "0.5.1", - "dependencies": { - "async": { - "version": "0.1.15" - } - } - }, - "clone": { - "version": "0.1.11" - }, - "useragent": { - "version": "1.1.0", - "dependencies": { - "yamlparser": { - "version": "0.0.2" - }, - "request": { - "version": "2.9.202" - }, - "semver": { - "version": "1.0.14" - } - } - }, - "istanbul": { - "version": "0.1.25", - "dependencies": { - "esprima": { - "version": "1.0.3" - }, - "escodegen": { - "version": "0.0.23", - "dependencies": { - "estraverse": { - "version": "0.0.4" - }, - "source-map": { - "version": "0.1.23", - "dependencies": { - "amdefine": { - "version": "0.0.5" - } - } - } - } - }, - "handlebars": { - "version": "1.0.12", - "dependencies": { - "optimist": { - "version": "0.3.7" - }, - "uglify-js": { - "version": "2.3.6", - "dependencies": { - "async": { - "version": "0.2.9" - }, - "source-map": { - "version": "0.1.23", - "dependencies": { - "amdefine": { - "version": "0.0.5" - } - } - } - } - } - } - }, - "fileset": { - "version": "0.1.5", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - } - } - }, - "which": { - "version": "1.0.5" - }, - "async": { - "version": "0.1.22" - }, - "abbrev": { - "version": "1.0.4" - }, - "wordwrap": { - "version": "0.0.2" - } - } - }, - "uglify-js": { - "version": "1.3.4" - }, - "xml-writer": { - "version": "1.2.3" - }, - "ycb": { - "version": "1.0.5" - }, - "async": { - "version": "0.2.9" - }, - "xml2js": { - "version": "0.1.14", - "dependencies": { - "sax": { - "version": "0.5.4" - } - } - }, - "mkdirp": { - "version": "0.3.5" - }, - "selenium-webdriver": { - "version": "2.39.0" - }, - "underscore": { - "version": "1.6.0" - }, - "mocha": { - "version": "1.7.4", - "dependencies": { - "commander": { - "version": "0.6.1" - }, - "growl": { - "version": "1.6.1" - }, - "jade": { - "version": "0.26.3", - "dependencies": { - "mkdirp": { - "version": "0.3.0" - } - } - }, - "diff": { - "version": "1.0.2" - }, - "debug": { - "version": "0.7.2" - }, - "mkdirp": { - "version": "0.3.3" - }, - "ms": { - "version": "0.3.0" - } - } - }, - "jasmine-node": { - "version": "1.4.0", - "dependencies": { - "coffee-script": { - "version": "1.6.3" - }, - "jasmine-reporters": { - "version": "0.2.1" - }, - "requirejs": { - "version": "2.1.6" - }, - "walkdir": { - "version": "0.0.7" - }, - "underscore": { - "version": "1.4.4" - }, - "gaze": { - "version": "0.3.4", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - }, - "fileset": { - "version": "0.1.5" - } - } - } - } - }, - "qunitjs": { - "version": "1.11.0" - }, - "chai": { - "version": "1.5.0" - }, - "oauth": { - "version": "0.9.8" - }, - "cheerio": { - "version": "0.9.2", - "dependencies": { - "htmlparser2": { - "version": "2.6.0", - "dependencies": { - "domhandler": { - "version": "2.0.3" - }, - "domutils": { - "version": "1.0.1" - }, - "domelementtype": { - "version": "1.1.1" - } - } - }, - "underscore": { - "version": "1.4.4" - }, - "entities": { - "version": "0.3.0" - } - } - }, - "cheerio-select": { - "version": "0.0.3", - "dependencies": { - "CSSselect": { - "version": "0.3.1", - "dependencies": { - "CSSwhat": { - "version": "0.2.0" - } - } - } - } - } - } -} diff --git a/package.json b/package.json index bd3ad39f..e2016564 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "clone":"0.1.11" }, "peerDependencies":{ - "yui": "3.8.0" + "yui": "3.x" }, "optionalDependencies": { "mocha": "1.7.4", From 64014440fa6ff0c8f31cc7de5a1dce0a288be0fd Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 3 May 2014 14:23:43 -0700 Subject: [PATCH 103/197] Adding yui 3.8 as dev dependency --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e2016564..8abb825f 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ }, "devDependencies": { "ytestrunner": "0.3.3", + "yui": "3.8.0", "mockery": "1.4.0", "JSONPath": "0.9.1" } From fed3050a9ba4102d43421bc508f950d62beb7bec Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sat, 3 May 2014 14:34:12 -0700 Subject: [PATCH 104/197] Upgrading async version to 0.8.0, adding new shrinkwrap --- npm-shrinkwrap.json | 458 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 459 insertions(+), 1 deletion(-) create mode 100644 npm-shrinkwrap.json diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json new file mode 100644 index 00000000..686e01fe --- /dev/null +++ b/npm-shrinkwrap.json @@ -0,0 +1,458 @@ +{ + "name": "yahoo-arrow", + "version": "0.6.0", + "dependencies": { + "JSV": { + "version": "4.0.2", + "from": "JSV@4.0.2" + }, + "async": { + "version": "0.8.0", + "from": "async@0.8.0" + }, + "chai": { + "version": "1.5.0", + "from": "chai@1.5.0" + }, + "cheerio": { + "version": "0.9.2", + "from": "cheerio@0.9.2", + "dependencies": { + "htmlparser2": { + "version": "2.6.0", + "from": "htmlparser2@2.x", + "dependencies": { + "domhandler": { + "version": "2.0.3", + "from": "domhandler@2.0" + }, + "domutils": { + "version": "1.0.1", + "from": "domutils@1.0" + }, + "domelementtype": { + "version": "1.1.1", + "from": "domelementtype@1" + } + } + }, + "entities": { + "version": "0.5.0", + "from": "entities@0.x" + } + } + }, + "cheerio-select": { + "version": "0.0.3", + "from": "cheerio-select@0.0.3", + "dependencies": { + "CSSselect": { + "version": "0.7.0", + "from": "CSSselect@0.x", + "dependencies": { + "CSSwhat": { + "version": "0.4.5", + "from": "CSSwhat@0.4" + }, + "domutils": { + "version": "1.4.3", + "from": "domutils@1.4", + "dependencies": { + "domelementtype": { + "version": "1.1.1", + "from": "domelementtype@1" + } + } + }, + "boolbase": { + "version": "1.0.0", + "from": "boolbase@~1.0.0" + }, + "nth-check": { + "version": "1.0.0", + "from": "nth-check@~1.0.0" + } + } + } + } + }, + "clone": { + "version": "0.1.11", + "from": "clone@0.1.11" + }, + "colors": { + "version": "0.6.0-1", + "from": "colors@0.6.0-1" + }, + "express": { + "version": "3.0.0", + "from": "express@3.0.0", + "dependencies": { + "connect": { + "version": "2.6.0", + "from": "connect@2.6.0", + "dependencies": { + "qs": { + "version": "0.5.1", + "from": "qs@0.5.1" + }, + "formidable": { + "version": "1.0.11", + "from": "formidable@1.0.11" + }, + "bytes": { + "version": "0.1.0", + "from": "bytes@0.1.0" + }, + "send": { + "version": "0.0.4", + "from": "send@0.0.4", + "dependencies": { + "mime": { + "version": "1.2.6", + "from": "mime@1.2.6" + } + } + }, + "pause": { + "version": "0.0.1", + "from": "pause@0.0.1" + } + } + }, + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1" + }, + "range-parser": { + "version": "0.0.4", + "from": "range-parser@0.0.4" + }, + "mkdirp": { + "version": "0.3.3", + "from": "mkdirp@0.3.3" + }, + "cookie": { + "version": "0.0.4", + "from": "cookie@0.0.4" + }, + "crc": { + "version": "0.2.0", + "from": "crc@0.2.0" + }, + "fresh": { + "version": "0.1.0", + "from": "fresh@0.1.0" + }, + "methods": { + "version": "0.0.1", + "from": "methods@0.0.1" + }, + "send": { + "version": "0.1.0", + "from": "send@0.1.0", + "dependencies": { + "mime": { + "version": "1.2.6", + "from": "mime@1.2.6" + } + } + }, + "debug": { + "version": "0.8.1", + "from": "debug@*" + } + } + }, + "glob": { + "version": "3.1.11", + "from": "glob@3.1.11", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@0.2", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } + }, + "graceful-fs": { + "version": "1.1.14", + "from": "graceful-fs@~1.1.2" + }, + "inherits": { + "version": "1.0.0", + "from": "inherits@1" + } + } + }, + "istanbul": { + "version": "0.1.25", + "from": "istanbul@0.1.25", + "dependencies": { + "esprima": { + "version": "1.0.4", + "from": "esprima@1.0.x" + }, + "escodegen": { + "version": "0.0.28", + "from": "escodegen@0.0.x", + "dependencies": { + "estraverse": { + "version": "1.3.2", + "from": "estraverse@~1.3.0" + }, + "source-map": { + "version": "0.1.33", + "from": "source-map@>= 0.1.2", + "dependencies": { + "amdefine": { + "version": "0.1.0", + "from": "amdefine@>=0.0.4" + } + } + } + } + }, + "handlebars": { + "version": "1.0.12", + "from": "handlebars@1.0.x", + "dependencies": { + "optimist": { + "version": "0.3.7", + "from": "optimist@~0.3" + }, + "uglify-js": { + "version": "2.3.6", + "from": "uglify-js@~2.3", + "dependencies": { + "async": { + "version": "0.2.10", + "from": "async@~0.2.6" + }, + "source-map": { + "version": "0.1.33", + "from": "source-map@~0.1.7", + "dependencies": { + "amdefine": { + "version": "0.1.0", + "from": "amdefine@>=0.0.4" + } + } + } + } + } + } + }, + "fileset": { + "version": "0.1.5", + "from": "fileset@0.1.x", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@0.x", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } + } + } + }, + "which": { + "version": "1.0.5", + "from": "which@1.0.x" + }, + "async": { + "version": "0.1.22", + "from": "async@0.1.x" + }, + "abbrev": { + "version": "1.0.5", + "from": "abbrev@1.0.x" + }, + "wordwrap": { + "version": "0.0.2", + "from": "wordwrap@0.0.x" + } + } + }, + "jasmine-node": { + "version": "1.4.0", + "from": "jasmine-node@1.4.0", + "dependencies": { + "coffee-script": { + "version": "1.7.1", + "from": "coffee-script@>=1.0.1" + }, + "jasmine-reporters": { + "version": "0.4.1", + "from": "jasmine-reporters@>=0.2.0" + }, + "requirejs": { + "version": "2.1.11", + "from": "requirejs@>=0.27.1" + }, + "walkdir": { + "version": "0.0.7", + "from": "walkdir@>= 0.0.1" + }, + "gaze": { + "version": "0.3.4", + "from": "gaze@~0.3.2", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@~0.2.9", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } + }, + "fileset": { + "version": "0.1.5", + "from": "fileset@0.1.x" + } + } + } + } + }, + "log4js": { + "version": "0.5.1", + "from": "log4js@0.5.1", + "dependencies": { + "async": { + "version": "0.1.15", + "from": "async@0.1.15" + } + } + }, + "mkdirp": { + "version": "0.3.5", + "from": "mkdirp@0.3.5" + }, + "mocha": { + "version": "1.7.4", + "from": "mocha@1.7.4", + "dependencies": { + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1" + }, + "growl": { + "version": "1.6.1", + "from": "growl@1.6.x" + }, + "jade": { + "version": "0.26.3", + "from": "jade@0.26.3", + "dependencies": { + "mkdirp": { + "version": "0.3.0", + "from": "mkdirp@0.3.0" + } + } + }, + "diff": { + "version": "1.0.2", + "from": "diff@1.0.2" + }, + "debug": { + "version": "0.8.1", + "from": "debug@*" + }, + "mkdirp": { + "version": "0.3.3", + "from": "mkdirp@0.3.3" + }, + "ms": { + "version": "0.3.0", + "from": "ms@0.3.0" + } + } + }, + "nopt": { + "version": "2.0.0", + "from": "nopt@2.0.0", + "dependencies": { + "abbrev": { + "version": "1.0.5", + "from": "abbrev@1" + } + } + }, + "oauth": { + "version": "0.9.8", + "from": "oauth@0.9.8" + }, + "qunitjs": { + "version": "1.11.0", + "from": "qunitjs@1.11.0" + }, + "selenium-webdriver": { + "version": "2.39.0", + "from": "selenium-webdriver@2.39.0" + }, + "uglify-js": { + "version": "1.3.4", + "from": "uglify-js@1.3.4" + }, + "underscore": { + "version": "1.6.0", + "from": "underscore@1.6.0" + }, + "useragent": { + "version": "1.1.0", + "from": "useragent@1.1.0", + "dependencies": { + "yamlparser": { + "version": "0.0.2", + "from": "yamlparser@0.0.2" + }, + "request": { + "version": "2.9.202", + "from": "request@2.9.202" + }, + "semver": { + "version": "1.0.14", + "from": "semver@1.0.14" + } + } + }, + "xml-writer": { + "version": "1.2.3", + "from": "xml-writer@1.2.3" + }, + "xml2js": { + "version": "0.1.14", + "from": "xml2js@0.1.14", + "dependencies": { + "sax": { + "version": "0.6.0", + "from": "sax@>=0.1.1" + } + } + }, + "ycb": { + "version": "1.0.5", + "from": "ycb@1.0.5" + } + } +} diff --git a/package.json b/package.json index 8abb825f..742677a4 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "uglify-js": "1.3.4", "xml-writer": "1.2.3", "ycb": "1.0.5", - "async": "~0.2.5", + "async": "0.8.0", "xml2js": "0.1.14", "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", From 9071945312130e724eacecf06a9c86e8ef353293 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 4 May 2014 22:58:14 -0700 Subject: [PATCH 105/197] Updating cdnjs yui link to 3.16 --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 1df61f23..1fef3a87 100644 --- a/config/config.js +++ b/config/config.js @@ -20,7 +20,7 @@ config.baseUrl = ""; config.arrowModuleRoot = global.appRoot + "/"; config.dimensions = config.arrowModuleRoot + "config/dimensions.json"; config.defaultTestHost = config.arrowModuleRoot + "lib/client/testHost.html"; -config.defaultAppSeed = "//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js"; +config.defaultAppSeed = "//cdnjs.cloudflare.com/ajax/libs/yui/3.16.0/yui-min.js"; config.autolib = config.arrowModuleRoot + "lib/common"; //for yui sandbox From 3d621dac552da62d1af9e99598ea142c0967ec0a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 13:23:11 -0700 Subject: [PATCH 106/197] Fix for exitCode --- lib/session/sessionfactory.js | 44 ++++++++++++++++--- .../unit/lib/session/sessionfactory-tests.js | 39 ++++++++++++++++ 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 5a30df75..b190f37e 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -333,7 +333,7 @@ SessionFactory.prototype.getFactoryTests = function () { }; SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { - + console.log('****In sf teardown....'); var reportObj, reportManager, covFile, @@ -346,6 +346,8 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { this.testQueue = testQueue; this.logger.trace("SessionFactory:TearDown"); + console.log('***testqueue sessions..' + require('util').inspect(testQueue.sessions)); + totalTimeTaken = ((Date.now() - global.startTime) / 1000).toFixed(2); if (this.args.report && testQueue.sessions) { @@ -374,9 +376,11 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (global.reportFolder) { - reportObj = { - "timeReport" : this.timeReportObj - }; + + if (!reportObj) { + reportObj = {}; + } + reportObj.timeReport = this.timeReportObj; reportManager = new ReportManager(reportObj); reportManager.totalTimeTaken = totalTimeTaken; reportManager.writeTimeReport(); @@ -422,12 +426,42 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (global.workingDirectory) { + failed = false; if (this.args.exitCode === true) { - failed = global.failedDescriptors.length > 0; + failed = this.isFailure(reportObj); } + process.exit(failed ? 1 : 0); } }; +/** + * + * @param reportObj + * @returns {boolean} + */ +SessionFactory.prototype.isFailure = function (reportObj) { + + var s, + session, + reports; + + if (reportObj && reportObj.arrTestSessions) { + + for (var s in reportObj.arrTestSessions) { + + session = reportObj.arrTestSessions[s]; + //TODO Exception handling - what if sessions.driver.report.report doesnt exist + reports = session.driver.reports.report.results || []; + for (var r = 0; r < reports.length; r += 1) { + if (reports[r].failed) { + return true; + } + } + } + } + return false; +}; + module.exports = SessionFactory; diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 797735a9..29ec666e 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -322,6 +322,45 @@ YUI.add('sessionfactory-tests', function (Y) { })); + suite.add(new Y.Test.Case({ + + name : "Exit code failure test", + + testExitFailureTrue: function() { + + var reportObj = + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"myDirarrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDirarrow/config/config.js","test":"demo/test-greeter.js","page":"myDirarrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDirarrow/","dimensions":"myDirarrow/config/dimensions.json","defaultTestHost":"myDirarrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDirarrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDirarrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDirarrow/lib/client/yuitest-seed.js","testRunner":"myDirarrow/lib/client/yuitest-runner.js","shareLibPath":["myDirarrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"myDirarrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDirarrow/config/config.js","test":"demo/test-greeter.js","page":"myDirarrow/lib/client/testHost.html","customController":false},"startTime":1399316871519,"endTime":1399316873297,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDirarrow/","dimensions":"myDirarrow/config/dimensions.json","defaultTestHost":"myDirarrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDirarrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDirarrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDirarrow/lib/client/yuitest-seed.js","testRunner":"myDirarrow/lib/client/yuitest-runner.js","shareLibPath":["myDirarrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"myDirarrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDirarrow/config/config.js","test":"demo/test-greeter.js","page":"myDirarrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[{"name":"Our First Test","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":5,"type":"report","testCase_yui_3_8_0_1_1399316872731_6":{"name":"testCase_yui_3_8_0_1_1399316872731_6","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"fail","message":"Values should be equal.\nExpected: Smith, Joe (string)\nActual: Smith, JoeX (string)","type":"test","name":"test greet","duration":0}},"timestamp":"Mon May 05 2014 12:07:52 GMT-0700 (PDT)","ua":"nodejs"}]},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":5,"type":"report","testCase_yui_3_8_0_1_1399316872731_6":{"name":"testCase_yui_3_8_0_1_1399316872731_6","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"fail","message":"Values should be equal.\nExpected: Smith, Joe (string)\nActual: Smith, JoeX (string)","type":"test","name":"test greet","duration":0}},"timestamp":"Mon May 05 2014 12:07:52 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + + var ss = new SessionFactory({},{}); + A.isTrue(ss.isFailure(reportObj), "Report Object contains failure. isFailure() should return true"); + + }, + + testExitFailureFalse: function() { + + var reportObj = + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + + var ss = new SessionFactory({},{}); + A.isFalse(ss.isFailure(reportObj), "Report Object does not contain failure. isFailure() should return false"); + + }, + + + testExitFailureFalseEmptyReportObj: function() { + + var reportObj = + {}; + + var ss = new SessionFactory({},{}); + A.isFalse(ss.isFailure(reportObj), "Report Object does not contain failure. isFailure() should return false"); + + } + + + })); + + Y.Test.Runner.add(suite); }, '0.0.1', {requires: ['test']}); \ No newline at end of file From 46897094351b11a533d19cfbba98903d2c66e3a7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 14:20:59 -0700 Subject: [PATCH 107/197] Adding exception handling for nested property --- lib/session/sessionfactory.js | 23 +++++++++++-------- .../unit/lib/session/sessionfactory-tests.js | 9 ++++++++ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index b190f37e..719e4c82 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -333,7 +333,6 @@ SessionFactory.prototype.getFactoryTests = function () { }; SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { - console.log('****In sf teardown....'); var reportObj, reportManager, covFile, @@ -346,8 +345,6 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { this.testQueue = testQueue; this.logger.trace("SessionFactory:TearDown"); - console.log('***testqueue sessions..' + require('util').inspect(testQueue.sessions)); - totalTimeTaken = ((Date.now() - global.startTime) / 1000).toFixed(2); if (this.args.report && testQueue.sessions) { @@ -445,20 +442,28 @@ SessionFactory.prototype.isFailure = function (reportObj) { var s, session, - reports; + reports, + self = this; if (reportObj && reportObj.arrTestSessions) { for (var s in reportObj.arrTestSessions) { session = reportObj.arrTestSessions[s]; - //TODO Exception handling - what if sessions.driver.report.report doesnt exist - reports = session.driver.reports.report.results || []; - for (var r = 0; r < reports.length; r += 1) { - if (reports[r].failed) { - return true; + + try { + reports = session.driver.reports.report.results || []; + for (var r = 0; r < reports.length; r += 1) { + if (reports[r].failed) { + self.logger.debug('Exiting with non-zero failure code'); + return true; + } } } + catch(e) { + self.logger.error('Error while looking for session.driver.reports.report.results in reports : ' + e); + } + } } return false; diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 29ec666e..35039750 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -346,6 +346,15 @@ YUI.add('sessionfactory-tests', function (Y) { }, + testExitFailureNoReportObj: function() { + + var reportObj = + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + + var ss = new SessionFactory({},{}); + A.isFalse(ss.isFailure(reportObj), "Report Object does not have report. isFailure() should return false"); + + }, testExitFailureFalseEmptyReportObj: function() { From 152b6907bd0d5cb459b50668234153c3071fd859 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 15:47:52 -0700 Subject: [PATCH 108/197] Reusing isFail logic from testSession, refactoring into sessionUtil class --- lib/session/sessionUtil.js | 61 ++++++++++++++++++ lib/session/sessionfactory.js | 32 +++++----- lib/session/testsession.js | 63 ++++++++++--------- .../unit/lib/session/sessionfactory-tests.js | 21 ++++++- 4 files changed, 132 insertions(+), 45 deletions(-) create mode 100644 lib/session/sessionUtil.js diff --git a/lib/session/sessionUtil.js b/lib/session/sessionUtil.js new file mode 100644 index 00000000..39ca0ffe --- /dev/null +++ b/lib/session/sessionUtil.js @@ -0,0 +1,61 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var log4js = require("log4js"); + +function SessionUtil() { + this.logger = log4js.getLogger("SessionUtil"); +} + +/** + * Iterates over the report and checks if there's any failed test case + * @param reports + * @returns {boolean} + */ +SessionUtil.prototype.isFail = function(reports) { + + var arrReport, + isFail = false, + j, + k, + results, + testJson; + + if (reports.scenario) { + arrReport = reports.scenario; + } else { + arrReport = reports.results; + } + + if (arrReport) { + if (arrReport.length === 0) { + isFail = true; + } else { + for (j = 0; j < arrReport.length; j = j + 1) { + if (reports.scenario) { + results = arrReport[j].results; + for (k = 0; k < results.length; k = k + 1) { + testJson = results[k]; + if (testJson.type === "report" && testJson.failed > 0) { + isFail = true; + } + } + } else { + testJson = arrReport[j]; + if (testJson.type === "report" && testJson.failed > 0) { + isFail = true; + } + } + } + } + } + return isFail; + +}; + +module.exports = SessionUtil; \ No newline at end of file diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 719e4c82..3fd6f5ec 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -10,6 +10,7 @@ var log4js = require("log4js"); var DataProvider = require("../util/dataprovider"); var ReportManager = require("../util/reportmanager"); var LibManager = require('../util/libmanager'); +var SessionUtil = require('./sessionUtil'); var TestExecutor = require("../session/testexecutor"); var coverage = require("../util/coverage"); var fs = require("fs"); @@ -434,7 +435,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { }; /** - * + * Returns true, if a failure is found in the reportObj * @param reportObj * @returns {boolean} */ @@ -442,31 +443,32 @@ SessionFactory.prototype.isFailure = function (reportObj) { var s, session, - reports, - self = this; + report, + self = this, + sessionUtil = new SessionUtil(), + isFail = false; if (reportObj && reportObj.arrTestSessions) { for (var s in reportObj.arrTestSessions) { + try { session = reportObj.arrTestSessions[s]; - - try { - reports = session.driver.reports.report.results || []; - for (var r = 0; r < reports.length; r += 1) { - if (reports[r].failed) { - self.logger.debug('Exiting with non-zero failure code'); - return true; - } - } - } - catch(e) { - self.logger.error('Error while looking for session.driver.reports.report.results in reports : ' + e); + report = session.driver.reports.report; + isFail = sessionUtil.isFail(report); + if (isFail) { + self.logger.debug('Exiting with non-zero failure code'); + return true; } + } + catch(e) { + self.logger.error('Error while looking for failures in test report : ' + e); + } } } return false; + }; module.exports = SessionFactory; diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 87d51e08..32b3e828 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -11,6 +11,7 @@ var Arrow = require("../interface/arrow"); var fs = require('fs'); var path = require('path'); var FileUtil = require("../util/fileutil"); +var SessionUtil = require("./sessionUtil"); var existsSync = fs.existsSync || path.existsSync; function TestSession(config, args, sessionId) { @@ -170,39 +171,43 @@ TestSession.prototype.isFail = function () { isFail = false, self = this, results, - testJson; + testJson, + sessionUtil = new SessionUtil(); //checking if there was any failure rep = self.driver.getReports(); - if (rep.scenario) { - arrReport = rep.scenario; - } else { - arrReport = rep.results; - } - if (arrReport) { - if (arrReport.length === 0) { - isFail = true; - } else { - for (j = 0; j < arrReport.length; j = j + 1) { - if (rep.scenario) { - results = arrReport[j].results; - for (k = 0; k < results.length; k = k + 1) { - testJson = results[k]; - if (testJson.type === "report" && testJson.failed > 0) { - isFail = true; - } - } - } else { - testJson = arrReport[j]; - if (testJson.type === "report" && testJson.failed > 0) { - isFail = true; - } - } - } - } - } - return isFail; + return sessionUtil.isFail(rep); + +// if (rep.scenario) { +// arrReport = rep.scenario; +// } else { +// arrReport = rep.results; +// } +// +// if (arrReport) { +// if (arrReport.length === 0) { +// isFail = true; +// } else { +// for (j = 0; j < arrReport.length; j = j + 1) { +// if (rep.scenario) { +// results = arrReport[j].results; +// for (k = 0; k < results.length; k = k + 1) { +// testJson = results[k]; +// if (testJson.type === "report" && testJson.failed > 0) { +// isFail = true; +// } +// } +// } else { +// testJson = arrReport[j]; +// if (testJson.type === "report" && testJson.failed > 0) { +// isFail = true; +// } +// } +// } +// } +// } +// return isFail; }; /** diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 35039750..a6882084 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -336,6 +336,26 @@ YUI.add('sessionfactory-tests', function (Y) { }, + testExitFailureTrueScenario: function() { + + var reportObj = + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"startTime":1399316871519,"endTime":1399316873297,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"scenario":[{"results":[{"controller":"myDir/arrow_exitCode/arrow/lib/controller/default","params":{"comment":"Load finance page","page":"http://finance.yahoo.com","lib":"myDir/arrow_exitCode/arrow/lib/common/yui-arrow.js","shared":{},"descriptorSharedParams":{},"customController":false}}]},{"results":[{"controller":"myDir/arrow_exitCode/arrow/lib/controller/locator","params":{"value":"#txtQuotes","text":"yhoo\n","lib":"myDir/arrow_exitCode/arrow/lib/common/yui-arrow.js","shared":{},"descriptorSharedParams":{},"customController":false}}]},{"results":[{"name":"Quote Page test of the test","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":4,"type":"report","testCase_yui_3_9_1_8_1399325311687_6":{"name":"testCase_yui_3_9_1_8_1399325311687_6","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":3,"type":"testcase","test quote":{"result":"fail","message":"Values should be equal.\nExpected: undefined (undefined)\nActual: Yahoo! Inc. (YHOO) (string)","type":"test","name":"test quote","duration":1}},"timestamp":"Mon May 5 14:28:32 2014","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0","currentUrl":"http://finance.yahoo.com/q?s=yhoo&ql=1"}]}]},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":5,"type":"report","testCase_yui_3_8_0_1_1399316872731_6":{"name":"testCase_yui_3_8_0_1_1399316872731_6","passed":0,"failed":1,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"fail","message":"Values should be equal.\nExpected: Smith, Joe (string)\nActual: Smith, JoeX (string)","type":"test","name":"test greet","duration":0}},"timestamp":"Mon May 05 2014 12:07:52 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}} + + var ss = new SessionFactory({},{}); + A.isTrue(ss.isFailure(reportObj), "Report Object contains failure in scenario. isFailure() should return true"); + + }, + + testExitFailureIfNoReportFound: function() { + + var reportObj = + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[]},"stkReportAtom":[]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + + var ss = new SessionFactory({},{}); + A.isTrue(ss.isFailure(reportObj), "Report Object does not contain report. isFailure() should return true"); + + }, + testExitFailureFalse: function() { var reportObj = @@ -366,7 +386,6 @@ YUI.add('sessionfactory-tests', function (Y) { } - })); From e849cb2b1f6085aaa5efaa4a7f8de45e66f14880 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 15:51:03 -0700 Subject: [PATCH 109/197] Cleanup --- lib/session/testsession.js | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 32b3e828..0c556593 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -164,50 +164,15 @@ TestSession.prototype.retryTest = function (callback, error) { }; TestSession.prototype.isFail = function () { - var arrReport, + var rep, - j, - k, isFail = false, self = this, - results, - testJson, sessionUtil = new SessionUtil(); //checking if there was any failure rep = self.driver.getReports(); - return sessionUtil.isFail(rep); - -// if (rep.scenario) { -// arrReport = rep.scenario; -// } else { -// arrReport = rep.results; -// } -// -// if (arrReport) { -// if (arrReport.length === 0) { -// isFail = true; -// } else { -// for (j = 0; j < arrReport.length; j = j + 1) { -// if (rep.scenario) { -// results = arrReport[j].results; -// for (k = 0; k < results.length; k = k + 1) { -// testJson = results[k]; -// if (testJson.type === "report" && testJson.failed > 0) { -// isFail = true; -// } -// } -// } else { -// testJson = arrReport[j]; -// if (testJson.type === "report" && testJson.failed > 0) { -// isFail = true; -// } -// } -// } -// } -// } -// return isFail; }; /** From b22ccdefc905dc243271f04331a6c8057877caad Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 15:58:43 -0700 Subject: [PATCH 110/197] Cleanup --- lib/session/testsession.js | 1 - tests/unit/lib/session/sessionfactory-tests.js | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 0c556593..93f38253 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -166,7 +166,6 @@ TestSession.prototype.retryTest = function (callback, error) { TestSession.prototype.isFail = function () { var rep, - isFail = false, self = this, sessionUtil = new SessionUtil(); diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index a6882084..34734390 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -349,7 +349,7 @@ YUI.add('sessionfactory-tests', function (Y) { testExitFailureIfNoReportFound: function() { var reportObj = - {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[]},"stkReportAtom":[]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[]},"stkReportAtom":[]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; var ss = new SessionFactory({},{}); A.isTrue(ss.isFailure(reportObj), "Report Object does not contain report. isFailure() should return true"); @@ -359,7 +359,7 @@ YUI.add('sessionfactory-tests', function (Y) { testExitFailureFalse: function() { var reportObj = - {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"report":{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; var ss = new SessionFactory({},{}); A.isFalse(ss.isFailure(reportObj), "Report Object does not contain failure. isFailure() should return false"); @@ -369,7 +369,7 @@ YUI.add('sessionfactory-tests', function (Y) { testExitFailureNoReportObj: function() { var reportObj = - {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/","dimensions":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/dimensions.json","defaultTestHost":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-seed.js","testRunner":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/yuitest-runner.js","shareLibPath":["/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/config/config.js","test":"demo/test-greeter.js","page":"/Users/pranavp/Documents/arrow_fork/arrow_exitCode/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; + {"reportFolder":"arrow-target","arrTestSessions":[{"logger":{"category":"TestSession","_events":{}},"args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"driverName":"nodejs","testConfig":{},"retryCount":1,"screenShotPaths":[],"testParams":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"startTime":1399320190344,"endTime":1399320192116,"driver":{"logger":{"category":"NodeDriver","_events":{}},"config":{"seleniumHost":"http://localhost:4444/wd/hub","phantomHost":"http://localhost:4445/wd/hub","context":"","defaultAppHost":"","logLevel":"INFO","browser":"firefox","parallel":false,"baseUrl":"","arrowModuleRoot":"myDir/arrow/","dimensions":"myDir/arrow/config/dimensions.json","defaultTestHost":"myDir/arrow/lib/client/testHost.html","defaultAppSeed":"//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js","autolib":"myDir/arrow/lib/common","useYUISandbox":false,"sandboxYUIVersion":"3.8.0","yuiSandboxRuntime":"myDir/arrow/lib/client/yui-test-runtime.js","engine":"yui","engineConfig":"","testSeed":"myDir/arrow/lib/client/yuitest-seed.js","testRunner":"myDir/arrow/lib/client/yuitest-runner.js","shareLibPath":["myDir/arrow/sharelib","./common"],"scanShareLibPrefix":[],"scanShareLibRecursive":true,"enableShareLibYUILoader":false,"descriptorName":"test_descriptor.json","minPort":10000,"maxPort":11000,"coverage":false,"coverageExclude":"","exitCode":true,"retryCount":0,"keepIstanbulCoverageJson":false,"color":true,"report":true,"testTimeOut":30000,"ignoreSslErrorsPhantomJs":true,"startPhantomJs":false,"startArrowServer":false,"lib":"demo/greeter.js","artifactsUrl":""},"webdriver":null,"testName":"Default","args":{"config":{},"params":{"lib":"myDir/arrow/lib/common/yui-arrow.js,demo/greeter.js","driver":"nodejs","report":true,"exitCode":true,"argv":{"remain":["demo/test-greeter.js"],"cooked":["demo/test-greeter.js","--lib","demo/greeter.js","--driver","nodejs","--report","true","--exitCode","true"],"original":["demo/test-greeter.js","--lib=demo/greeter.js","--driver=nodejs","--report=true","--exitCode=true"]},"config":"myDir/arrow/config/config.js","test":"demo/test-greeter.js","page":"myDir/arrow/lib/client/testHost.html","customController":false},"testName":"Default","driver":"nodejs","browser":""},"reports":{"logger":{"category":"ReportStack","_events":{}},"stkReportAtom":[{"results":[{"name":"Our First Test","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":7,"type":"report","testCase_yui_3_8_0_1_1399320191546_6":{"name":"testCase_yui_3_8_0_1_1399320191546_6","passed":1,"failed":0,"errors":0,"ignored":0,"total":1,"duration":4,"type":"testcase","test greet":{"result":"pass","message":"Test passed","type":"test","name":"test greet","duration":1}},"timestamp":"Mon May 05 2014 13:03:11 GMT-0700 (PDT)","ua":"nodejs"}]}]},"arrowServerBase":"","isMobile":false}}],"arrWDSessions":[],"driver":"nodejs","testSuiteName":"ARROW TESTSUITE","timeReport":{"undefined":[]}}; var ss = new SessionFactory({},{}); A.isFalse(ss.isFailure(reportObj), "Report Object does not have report. isFailure() should return false"); From f15613367139f3e0a2c1887e6f9159beb6f85341 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 16:02:07 -0700 Subject: [PATCH 111/197] Cleanup --- tests/unit/lib/util/config/reportObject.json | 36 +++++++++---------- .../config/resultreportResultNotPresent.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/unit/lib/util/config/reportObject.json b/tests/unit/lib/util/config/reportObject.json index 6d48fb73..81dc69ff 100644 --- a/tests/unit/lib/util/config/reportObject.json +++ b/tests/unit/lib/util/config/reportObject.json @@ -8,7 +8,7 @@ "args": { "config": {}, "params": { - "lib": "/Users/pranavp/Documents/arrow/lib/common/yui-arrow.js,../src/greeter.js", + "lib": "myDir/arrow/lib/common/yui-arrow.js,../src/greeter.js", "report": true, "argv": { "remain": [ @@ -28,7 +28,7 @@ ] }, "test": "test-greeter.js", - "page": "/Users/pranavp/Documents/arrow/lib/client/testHost.html", + "page": "myDir/arrow/lib/client/testHost.html", "customController": false }, "testName": "Default", @@ -43,13 +43,13 @@ "browser": "firefox", "parallel": false, "baseUrl": "", - "arrowModuleRoot": "/Users/pranavp/Documents/arrow/", - "dimensions": "/Users/pranavp/Documents/arrow/config/dimensions.json", - "defaultTestHost": "/Users/pranavp/Documents/arrow/lib/client/testHost.html", + "arrowModuleRoot": "myDir/arrow/", + "dimensions": "myDir/arrow/config/dimensions.json", + "defaultTestHost": "myDir/arrow/lib/client/testHost.html", "defaultAppSeed": "http://yui.yahooapis.com/3.6.0/build/yui/yui-min.js", - "testSeed": "/Users/pranavp/Documents/arrow/lib/client/yuitest-seed.js", - "testRunner": "/Users/pranavp/Documents/arrow/lib/client/yuitest-runner.js", - "autolib": "/Users/pranavp/Documents/arrow/lib/common", + "testSeed": "myDir/arrow/lib/client/yuitest-seed.js", + "testRunner": "myDir/arrow/lib/client/yuitest-runner.js", + "autolib": "myDir/arrow/lib/common", "descriptorName": "test_descriptor.json", "minPort": 10000, "maxPort": 11000, @@ -64,7 +64,7 @@ "testConfig": {}, "retryCount": 0, "testParams": { - "lib": "/Users/pranavp/Documents/arrow/lib/common/yui-arrow.js,../src/greeter.js", + "lib": "myDir/arrow/lib/common/yui-arrow.js,../src/greeter.js", "report": true, "argv": { "remain": [ @@ -84,7 +84,7 @@ ] }, "test": "test-greeter.js", - "page": "/Users/pranavp/Documents/arrow/lib/client/testHost.html", + "page": "myDir/arrow/lib/client/testHost.html", "customController": false }, "driver": { @@ -101,13 +101,13 @@ "browser": "firefox", "parallel": false, "baseUrl": "", - "arrowModuleRoot": "/Users/pranavp/Documents/arrow/", - "dimensions": "/Users/pranavp/Documents/arrow/config/dimensions.json", - "defaultTestHost": "/Users/pranavp/Documents/arrow/lib/client/testHost.html", + "arrowModuleRoot": "myDir/arrow/", + "dimensions": "myDir/arrow/config/dimensions.json", + "defaultTestHost": "myDir/arrow/lib/client/testHost.html", "defaultAppSeed": "http://yui.yahooapis.com/3.6.0/build/yui/yui-min.js", - "testSeed": "/Users/pranavp/Documents/arrow/lib/client/yuitest-seed.js", - "testRunner": "/Users/pranavp/Documents/arrow/lib/client/yuitest-runner.js", - "autolib": "/Users/pranavp/Documents/arrow/lib/common", + "testSeed": "myDir/arrow/lib/client/yuitest-seed.js", + "testRunner": "myDir/arrow/lib/client/yuitest-runner.js", + "autolib": "myDir/arrow/lib/common", "descriptorName": "test_descriptor.json", "minPort": 10000, "maxPort": 11000, @@ -123,7 +123,7 @@ "args": { "config": {}, "params": { - "lib": "/Users/pranavp/Documents/arrow/lib/common/yui-arrow.js,../src/greeter.js", + "lib": "myDir/arrow/lib/common/yui-arrow.js,../src/greeter.js", "report": true, "argv": { "remain": [ @@ -143,7 +143,7 @@ ] }, "test": "test-greeter.js", - "page": "/Users/pranavp/Documents/arrow/lib/client/testHost.html", + "page": "myDir/arrow/lib/client/testHost.html", "customController": false }, "testName": "Default", diff --git a/tests/unit/lib/util/config/resultreportResultNotPresent.json b/tests/unit/lib/util/config/resultreportResultNotPresent.json index 6aea8604..e8ff50ec 100644 --- a/tests/unit/lib/util/config/resultreportResultNotPresent.json +++ b/tests/unit/lib/util/config/resultreportResultNotPresent.json @@ -30,6 +30,6 @@ }, "timestamp": "Tue Feb 12 19:31:12 2013", "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:16.0) Gecko/20100101 Firefox/16.0", - "currentUrl": "http://localhost:10000/arrow/static/Users/pranavp/Documents/arrow_master/arrow/docs/arrow_tutorial/func_test/test/testMock.html" + "currentUrl": "http://localhost:10000/arrow/static/myDir/arrow/docs/arrow_tutorial/func_test/test/testMock.html" } From 25bac7bc536748be8fc90425fa9726cd881dab66 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 5 May 2014 16:28:10 -0700 Subject: [PATCH 112/197] Fixing condition for descriptorSharedParams --- lib/session/sessionfactory.js | 2 +- .../unit/lib/session/sessionfactory-tests.js | 18 +++++++++- .../testdata/test_descriptor_noConfig.json | 36 +++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 tests/unit/lib/session/testdata/test_descriptor_noConfig.json diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 5a30df75..46f7ccde 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -315,7 +315,7 @@ SessionFactory.prototype.getFactoryTests = function () { // Initialize the share area testData.params.shared = {}; - if (testData.config.descriptorSharedParams) { + if (testData.config && testData.config.descriptorSharedParams) { testData.params.descriptorSharedParams = testData.config.descriptorSharedParams; } else { testData.params.descriptorSharedParams = {}; diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 797735a9..a431fbed 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -313,7 +313,7 @@ YUI.add('sessionfactory-tests', function (Y) { {}), t; t = ss.getFactoryTests(); - A.areEqual(1, t.length, "There should be 1 test objects"); + A.areEqual(1, t.length, "There should be 1 test object"); A.areEqual("Yahoo", t[0].params.descriptorSharedParams['yhooquote'], "DescriptorSharedParams - YHOO Quote doesn't match"); A.areEqual("Apple", t[0].params.descriptorSharedParams['applequote'], "DescriptorSharedParams - AAPL Quote doesn't match"); @@ -322,6 +322,22 @@ YUI.add('sessionfactory-tests', function (Y) { })); + suite.add(new Y.Test.Case({ + + name : "Call getFactoryTests with no config", + + testGetFactoryTestWithDescriptorSharedParams: function() { + var ss = new SessionFactory({"dimensions" : arrowRoot + "/config/dimensions.json", "arrowModuleRoot" : arrowRoot + "/", "arrDescriptor": [__dirname + "/testdata/test_descriptor_noConfig.json"]}, + {}), + t; + t = ss.getFactoryTests(); + A.areEqual(2, t.length, "There should be 2 test objects"); + + + } + })); + + Y.Test.Runner.add(suite); }, '0.0.1', {requires: ['test']}); \ No newline at end of file diff --git a/tests/unit/lib/session/testdata/test_descriptor_noConfig.json b/tests/unit/lib/session/testdata/test_descriptor_noConfig.json new file mode 100755 index 00000000..1c013d97 --- /dev/null +++ b/tests/unit/lib/session/testdata/test_descriptor_noConfig.json @@ -0,0 +1,36 @@ +[ + { + "settings": [ "master" ], + + "name" : "tabview", + + "commonlib" : "lib/session/testdata/test-lib.js", + + "dataprovider" : { + "testWithInvalidLib" : { + "params" : { + "test" : "lib/session/testdata/test-func1.js", + "page" : "testMock.html", + "lib" : "Not Found Lib" + } + }, + + "testWithMultipleBrowsers" : { + "params" : { + "test" : "lib/session/testdata/test-int.js", + "page" : "abc.com/media/test_common/lego_test/demo/tabview/src/tabview.html", + "lib" : "lib/session/testdata/test-lib.js" + }, + "browser" : "firefox,opera" + } + + + } + + }, + + { + "settings": [ "environment:development" ] + } + +] From b12fc8914c8f6d1a348dea496c67e2c64c1aaeb7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 6 May 2014 12:54:50 -0700 Subject: [PATCH 113/197] Intializing reportObj --- lib/session/sessionfactory.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 17f38e42..1e37d16c 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -334,7 +334,7 @@ SessionFactory.prototype.getFactoryTests = function () { }; SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { - var reportObj, + var reportObj = {}, reportManager, covFile, i, @@ -375,9 +375,6 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (global.reportFolder) { - if (!reportObj) { - reportObj = {}; - } reportObj.timeReport = this.timeReportObj; reportManager = new ReportManager(reportObj); reportManager.totalTimeTaken = totalTimeTaken; From 758ff40c17e84834ffde5f1bc2759baae258e0e6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 7 May 2014 11:49:50 -0700 Subject: [PATCH 114/197] Fixing debug statement --- lib/session/testsession.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 93f38253..c90e615e 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -153,7 +153,7 @@ TestSession.prototype.retryTest = function (callback, error) { }); }); } else { - self.logger.debug('Recording failure before retrying'); + self.logger.debug('Recording failure'); self.recordFailure(self.retryCount, function() { self.driver.stop(callback, error); }); From e807e5b63b3347e58c614b0347625b19feb05138 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 7 May 2014 11:59:48 -0700 Subject: [PATCH 115/197] Fixing debug statement --- lib/util/capabilitymanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 0385a231..1694e0b7 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -119,7 +119,7 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { // Process user capabilities caps = self.processUserCapabilities(caps, config); - self.logger.debug('To run the test ' + args.testName + ' with browser:' + caps.browserName + ',version:' + caps.version); + self.logger.debug('To run the test ' + args.testName + ' with browser:' + caps.browserName + (caps.version ? ',version:' + caps.version : "")); return caps; From 24d7c98e95770700a5da7ca313605174efad58d7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 7 May 2014 16:07:12 -0700 Subject: [PATCH 116/197] Adding test for invalid driver --- tests/unit/lib/session/testsession-tests.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 0f5272a8..66321a5e 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -145,6 +145,26 @@ YUI.add('testsession-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + name : "Check for invalid driver", + + testInvalidDriver: function(){ + var config = {}, + args = {}; + + args.params = {}; + args.params.driver="invalid"; + var ts = new testSession(config,args,null); + + ts.setup(function(msg){ + A.isTrue(msg.indexOf("ERROR :invalid is not a supported test driver, Please provide \"selenium\" or \"nodejs\" as driver.") > -1 , "Should return invalid driver"); + }); + + } + })); + + suite.add(new Y.Test.Case({ name : "Get Artifact Paths test with report Folder", From b225a280ece33efcd4921ac95dab9657f9b82e3d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 7 May 2014 17:28:04 -0700 Subject: [PATCH 117/197] Restarting phantomjs before retry, if it crashed while test execution --- lib/session/sessionfactory.js | 6 ++-- lib/session/testsession.js | 59 +++++++++++++++++++++++++++++++++-- lib/util/phantomJsSetup.js | 37 +++++++++++++++++++--- 3 files changed, 93 insertions(+), 9 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 1e37d16c..0c78c5b7 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -83,6 +83,8 @@ function SessionFactory(config, args) { this.proxyConfigList = []; + this.config.PhantomJsSetup = PhantomJsSetup; + /* timeReportObj stores total time taken ,time taken for each descriptor as well as time taken for each test within the descriptor { "descriptors":[ @@ -416,8 +418,8 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { Servermanager.stopArrowServer(true); } - if (this.config.startPhantomJs === true) { - PhantomJsSetup.stopPhantomJs(); + if (this.config.startPhantomJs === true || this.config['phantomHost']) { + this.config.PhantomJsSetup.stopPhantomJs(); } if (global.workingDirectory) { diff --git a/lib/session/testsession.js b/lib/session/testsession.js index c90e615e..6c850d57 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -134,12 +134,17 @@ TestSession.prototype.runTest = function (callback) { }; +/** + * Record test failure and rerun the failed test + * @param callback + * @param error + */ TestSession.prototype.retryTest = function (callback, error) { var self = this; self.retryCount += 1; - // checking if there is a yui test failures : self.isFail() + // checking if there is a test failures : self.isFail() // or if there is a failure at controller level : error if (error || self.isFail()) { // if retryCount is provided, and retries are left for this test, lets record the failure and retry the test @@ -149,7 +154,10 @@ TestSession.prototype.retryTest = function (callback, error) { self.logger.debug('Before stopping'); self.driver.stop(function() { self.logger.info("\nRetrying Test, Attempt #" + self.retryCount); - self.runTest(callback); + self.reRunSetup(function(){ + self.runTest(callback); + }) + }); }); } else { @@ -163,6 +171,10 @@ TestSession.prototype.retryTest = function (callback, error) { } }; +/** + * Check for failures in test report + * @returns {boolean} + */ TestSession.prototype.isFail = function () { var rep, @@ -224,8 +236,13 @@ TestSession.prototype.getArtifactPaths = function (artifactsObj){ return artifactPaths; -} +}; +/** + * + * @param count + * @param callback + */ TestSession.prototype.recordFailure = function (count, callback) { var webdriver = this.driver.webdriver, @@ -356,6 +373,42 @@ TestSession.prototype.recordFailure = function (count, callback) { } }; +/** + * + * @param callback + */ +TestSession.prototype.reRunSetup = function(callback) { + + var self = this, + phantomJsSetup = self.config.PhantomJsSetup; + // If phantomJs is crashed, restart it and continue with tests + if (self.args.browser === "phantomjs") { + self.logger.debug('Check if PhantomJs is running'); + + phantomJsSetup.isPhantomJsRunning(function(isPhantomJsRunning){ + if (isPhantomJsRunning === false) { + // Start phantomJs before running the test + phantomJsSetup.startPhantomJs(self.config.ignoreSslErrorsPhantomJs, function(phantomHost){ + + // Exit if phantomJs could not be started + if (!phantomHost) { + self.logger.fatal('Could not start phantomjs. Exiting.'); + process.exit(1); + } + + self.config["phantomHost"] = phantomHost; + callback(); + }) + } else { + callback(); + } + }) + + } else { + callback(); + } +} + TestSession.prototype.isMobile = function (browserName) { var supportedMobileBrowserNames = ["iphone", "ipad", "android", "androidphone", "androidtablet"], diff --git a/lib/util/phantomJsSetup.js b/lib/util/phantomJsSetup.js index 1582a2a5..9731f1cb 100644 --- a/lib/util/phantomJsSetup.js +++ b/lib/util/phantomJsSetup.js @@ -3,9 +3,11 @@ var child_process = require('child_process'), portchecker = require('../../ext-lib/portchecker'), child, + phantomHost, log4js = require("log4js"), phantomJsLogger = new log4js.getLogger("PhantomJsSetupLogger"), - PhantomJsSetup = module.exports = {}; + PhantomJsSetup = module.exports = {}, + http = require("http"); PhantomJsSetup.waitForPhantomJs = function(childProcess, time, port, cb) { @@ -14,7 +16,6 @@ PhantomJsSetup.waitForPhantomJs = function(childProcess, time, port, cb) { serverStarted = false, out, index, - self = this, phantomJsStartMsg; // PhantomJs 1.9 : GhostDriver - Main - running on port , PhantomJs 1.8 : Ghost Driver running on port @@ -65,7 +66,6 @@ PhantomJsSetup.startPhantomJs = function (ignoreSslErrorsPhantomJs, cb) { maxPort = 11000, childProcess = require("child_process"), args = [], - phantomHost, retryTime = 400; if (!ignoreSslErrorsPhantomJs) { @@ -106,12 +106,41 @@ PhantomJsSetup.startPhantomJs = function (ignoreSslErrorsPhantomJs, cb) { * stop phantomjs */ PhantomJsSetup.stopPhantomJs = function () { - if (child) { child.kill(); phantomJsLogger.info("PhantomJs stopped"); } }; +/** + * Check if phantomJs is running + * @param cb + */ +PhantomJsSetup.isPhantomJsRunning = function (cb) { + + if (phantomHost) { + var phantomUrl = phantomHost + "/sessions"; + phantomJsLogger.debug("PhantomHost::" + phantomUrl); + + http.get(phantomUrl, function(response){ + phantomJsLogger.debug('Status code :' + response.statusCode); + if (response.statusCode === 200) { + phantomJsLogger.debug('PhantomJs is running'); + cb(true); + } else { + phantomJsLogger.debug('PhantomJs is NOT running'); + cb(false); + } + return; + }).on('error', function(e){ + phantomJsLogger.error('Got error on HTTP get for the phantomjs url - ' + phantomUrl + ' : ' + e.message); + cb(false); + }) + } else { + phantomJsLogger.debug('phantomHost is NOT set'); + cb(false); + } + +}; module.exports = PhantomJsSetup; \ No newline at end of file From 79d280b6898fded9d86fbfaadb03676dbcd685ab Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 09:52:34 -0700 Subject: [PATCH 118/197] Preparing for v0.6.1 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cbde576..9fa556cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +# 0.6.1 + + * Fix for exitCode not working for unit tests [PR](https://github.com/yahoo/arrow/pull/239) + * Fixing condition for descriptorSharedParams [PR](https://github.com/yahoo/arrow/pull/238) + # 0.6.0 * Adding support for data driven descriptors [PR](https://github.com/yahoo/arrow/pull/237) [Documentation](http://yahoo.github.io/arrow/arrow_FAQs.html#how-can-I-reuse-same-descriptor-with-different-sets-of-data) diff --git a/package.json b/package.json index a82dfbe3..368a6cf3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.0", + "version": "0.6.1", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From aa040b251cff7643162755d0d6acce77051b320d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 14:26:22 -0700 Subject: [PATCH 119/197] Adding exception handling for YUI require --- lib/client/qunit-seed.js | 15 ++++++++++++++- lib/client/yuitest-seed.js | 15 ++++++++++++++- lib/engine/interface/engine-seed.js | 14 +++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 46bbeabd..61538242 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -58,7 +58,20 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); - YUI = require("yui").YUI; + try { + YUI = require("yui").YUI; + } + catch(e) { + var errMsg = ''; + if (e.message.indexOf('Cannot find module \'yui\'')){ + var errMsg = '\nYUI is not installed.' + + '\nIf you are running using global installation of Arrow, please install yui globally.' + + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; + } + console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); + process.exit(1); + } + QUnit.init(); ARROW.onSeeded(); diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index 02f25831..c911bc49 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -185,7 +185,20 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - YUI = require("yui").YUI; + + try { + YUI = require("yui").YUI; + } + catch(e) { + var errMsg = ''; + if (e.message.indexOf('Cannot find module \'yui\'')){ + var errMsg = '\nYUI is not installed.' + + '\nIf you are running using global installation of Arrow, please install yui globally.' + + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; + } + console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); + process.exit(1); + } //console.log("Injecting share lib seed (YUI global config)"); if (ARROW.shareLibServerSeed !== undefined) { diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index a3a0a105..630c7423 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -282,7 +282,19 @@ engineSeed.prototype.run = function () { var self = this; if (isCommonJS) { //server side default we will give a yui seed - YUI = require("yui").YUI; + try { + YUI = require("yui").YUI; + } + catch(e) { + var errMsg = ''; + if (e.message.indexOf('Cannot find module \'yui\'')){ + var errMsg = '\nYUI is not installed.' + + '\nIf you are running using global installation of Arrow, please install yui globally.' + + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; + } + console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); + process.exit(1); + } if (ARROW.shareLibServerSeed !== undefined) { try { require(ARROW.shareLibServerSeed); From 71a199ee0dd6aa61dbbd25ac995131c96435e61c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 14:37:21 -0700 Subject: [PATCH 120/197] Fixing error message --- lib/client/qunit-seed.js | 4 ++-- lib/client/yuitest-seed.js | 4 ++-- lib/engine/interface/engine-seed.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 61538242..679d904a 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -63,8 +63,8 @@ if ((typeof process !== "undefined") && (typeof require !== "undefined")) { } catch(e) { var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'')){ - var errMsg = '\nYUI is not installed.' + + if (e.message.indexOf('Cannot find module \'yui\'') > -1){ + errMsg = '\nYUI is not installed.' + '\nIf you are running using global installation of Arrow, please install yui globally.' + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; } diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index c911bc49..b0f48b08 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -191,8 +191,8 @@ if ((typeof window !== "undefined") && !window.onerror) { } catch(e) { var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'')){ - var errMsg = '\nYUI is not installed.' + + if (e.message.indexOf('Cannot find module \'yui\'') > -1){ + errMsg = '\nYUI is not installed.' + '\nIf you are running using global installation of Arrow, please install yui globally.' + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; } diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index 630c7423..da0acb1b 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -287,8 +287,8 @@ engineSeed.prototype.run = function () { } catch(e) { var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'')){ - var errMsg = '\nYUI is not installed.' + + if (e.message.indexOf('Cannot find module \'yui\'') > -1){ + errMsg = '\nYUI is not installed.' + '\nIf you are running using global installation of Arrow, please install yui globally.' + 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; } From 55339847dec5bc83bd1d7d67ebec8fe009bc65eb Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 16:19:14 -0700 Subject: [PATCH 121/197] Using engineUtil for handling missing yui dependency --- config/error-messages.js | 9 +++++- lib/client/qunit-seed.js | 14 ++++----- lib/client/yuitest-seed.js | 12 ++------ lib/driver/node.js | 13 +++++++-- lib/engine/engineUtil.js | 44 +++++++++++++++++++++++++++++ lib/engine/interface/engine-seed.js | 12 ++------ 6 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 lib/engine/engineUtil.js diff --git a/config/error-messages.js b/config/error-messages.js index 8b6ca5f9..8d697f4e 100644 --- a/config/error-messages.js +++ b/config/error-messages.js @@ -53,7 +53,14 @@ var pathNotFound = "Path is not defined", empty = "", error = { 1006 : { name : 'ENULLARG', text : 'Argument "{0}" is "{1}".' - } + }, + 1007 : { + name : 'EMISSINGYUIDEPENDENCY', + text :'Missing YUI dependency.YUI is a peer dependency of Arrow.For details about peer dependency, see http://blog.nodejs.org/2013/02/07/peer-dependencies/\n' + + 'If you are using global installation of Arrow, please install YUI globally. ' + + '\nIf you are running using local installation of Arrow, please add YUI as a dependency in your package.json.', + 0 : empty + } }; module.exports = error; diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 679d904a..8d8045b8 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -6,6 +6,9 @@ * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ + +var EngineUtil = require('../engine/EngineUtil'); + function captureConsoleMessages() { try { @@ -58,18 +61,13 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); + try { YUI = require("yui").YUI; } catch(e) { - var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'') > -1){ - errMsg = '\nYUI is not installed.' + - '\nIf you are running using global installation of Arrow, please install yui globally.' + - 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; - } - console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); - process.exit(1); + var engineUtil = new EngineUtil(); + engineUtil.handleYUIRequireError(e); } QUnit.init(); diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index b0f48b08..1231cef9 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -15,7 +15,7 @@ // ARROW.scriptType = "test"; // ARROW.testScript = "test-file.js"; // ARROW.onSeeded = function() { /* add test, hand over to runner */} - +var EngineUtil = require('../engine/EngineUtil'); ARROW.testBag = ["test"]; ARROW.testReport = null; @@ -190,14 +190,8 @@ if ((typeof window !== "undefined") && !window.onerror) { YUI = require("yui").YUI; } catch(e) { - var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'') > -1){ - errMsg = '\nYUI is not installed.' + - '\nIf you are running using global installation of Arrow, please install yui globally.' + - 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; - } - console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); - process.exit(1); + var engineUtil = new EngineUtil(); + engineUtil.handleYUIRequireError(e); } //console.log("Injecting share lib seed (YUI global config)"); diff --git a/lib/driver/node.js b/lib/driver/node.js index 94963edf..d26101d1 100644 --- a/lib/driver/node.js +++ b/lib/driver/node.js @@ -175,10 +175,17 @@ NodeDriver.prototype.executeTest = function (testConfig, testParams, callback) { callback(null, report); }); - child.on("exit", function () { - if (0 === report.length) { - self.errorCallback(logger, "Failed to get the test report", callback); + child.on("exit", function (m) { + + // Exit , if exit code is 2 ( If YUI require failed ) + if (m === 2) { + process.exit(2); + } else { + if (0 === report.length) { + self.errorCallback(logger, "Failed to get the test report", callback); + } } + }); }; diff --git a/lib/engine/engineUtil.js b/lib/engine/engineUtil.js new file mode 100644 index 00000000..c6b020c3 --- /dev/null +++ b/lib/engine/engineUtil.js @@ -0,0 +1,44 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var log4js = require("log4js"); +var ErrorManager = require("../util/errormanager"); + +function EngineUtil() { + this.logger = log4js.getLogger("EngineUtil"); +} + +/** + * + * @param err + */ +EngineUtil.prototype.handleYUIRequireError = function(err) { + + var em = ErrorManager.getInstance(); + var match; + + match = err.message.match('Cannot find module \'yui\''); + + if (match) { + em.errorLog(1007, err.message); + process.exit(2); + } + +// var errMsg = ''; +// if (err.message.indexOf('Cannot find module \'yui\'') > -1){ +// errMsg = '\nYUI is not installed.' + +// '\nIf you are running using global installation of Arrow, please install yui globally.' + +// 'If you are running using local installation of Arrow, please add yui dependency in your package.json '; +// } +// console.error('\nException while requiring YUI - ' + err.message + ' ' + errMsg); +// process.exit(2); + + +}; + +module.exports = EngineUtil; \ No newline at end of file diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index da0acb1b..93fb9928 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -13,7 +13,7 @@ */ var isCommonJS = typeof window === "undefined" && typeof exports === "object"; - +var EngineUtil = require('../EngineUtil'); //**************************************** //Patch for IE8 : STARTS //**************************************** @@ -286,14 +286,8 @@ engineSeed.prototype.run = function () { YUI = require("yui").YUI; } catch(e) { - var errMsg = ''; - if (e.message.indexOf('Cannot find module \'yui\'') > -1){ - errMsg = '\nYUI is not installed.' + - '\nIf you are running using global installation of Arrow, please install yui globally.' + - 'If you are running using local installation of Arrow , please add yui dependency in your package.json '; - } - console.error('Exception while requiring YUI. ' + e.message + ' ' + errMsg); - process.exit(1); + var engineUtil = new EngineUtil(); + engineUtil.handleYUIRequireError(e); } if (ARROW.shareLibServerSeed !== undefined) { try { From 6bba36795240f0bb357f9777567cc680a69b13d5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 17:19:10 -0700 Subject: [PATCH 122/197] Adding tests, cleanup --- lib/engine/engineUtil.js | 44 ------------------ lib/engine/interface/engine-seed.js | 2 +- lib/util/engineUtil.js | 37 +++++++++++++++ tests/unit/lib/util/engine-util-tests.js | 58 ++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 45 deletions(-) delete mode 100644 lib/engine/engineUtil.js create mode 100644 lib/util/engineUtil.js create mode 100644 tests/unit/lib/util/engine-util-tests.js diff --git a/lib/engine/engineUtil.js b/lib/engine/engineUtil.js deleted file mode 100644 index c6b020c3..00000000 --- a/lib/engine/engineUtil.js +++ /dev/null @@ -1,44 +0,0 @@ -/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ - -/* - * Copyright (c) 2014, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - -var log4js = require("log4js"); -var ErrorManager = require("../util/errormanager"); - -function EngineUtil() { - this.logger = log4js.getLogger("EngineUtil"); -} - -/** - * - * @param err - */ -EngineUtil.prototype.handleYUIRequireError = function(err) { - - var em = ErrorManager.getInstance(); - var match; - - match = err.message.match('Cannot find module \'yui\''); - - if (match) { - em.errorLog(1007, err.message); - process.exit(2); - } - -// var errMsg = ''; -// if (err.message.indexOf('Cannot find module \'yui\'') > -1){ -// errMsg = '\nYUI is not installed.' + -// '\nIf you are running using global installation of Arrow, please install yui globally.' + -// 'If you are running using local installation of Arrow, please add yui dependency in your package.json '; -// } -// console.error('\nException while requiring YUI - ' + err.message + ' ' + errMsg); -// process.exit(2); - - -}; - -module.exports = EngineUtil; \ No newline at end of file diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index 93fb9928..fd4bad4b 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -13,7 +13,7 @@ */ var isCommonJS = typeof window === "undefined" && typeof exports === "object"; -var EngineUtil = require('../EngineUtil'); +var EngineUtil = require('../../util/EngineUtil'); //**************************************** //Patch for IE8 : STARTS //**************************************** diff --git a/lib/util/engineUtil.js b/lib/util/engineUtil.js new file mode 100644 index 00000000..fed14dc2 --- /dev/null +++ b/lib/util/engineUtil.js @@ -0,0 +1,37 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var log4js = require("log4js"); +var ErrorManager = require("./errormanager"); + +function EngineUtil() { + this.logger = log4js.getLogger("EngineUtil"); +} + +/** + * + * @param err + */ +EngineUtil.prototype.handleYUIRequireError = function(err) { + + var em = ErrorManager.getInstance(), + self = this, + match, + yuiMissingMsg = 'Cannot find module \'yui\''; + + var proc = self.mock || process; + match = err.message.match(yuiMissingMsg); + + if (match) { + em.errorLog(1007, err.message); + proc.exit(2); + } + +}; + +module.exports = EngineUtil; \ No newline at end of file diff --git a/tests/unit/lib/util/engine-util-tests.js b/tests/unit/lib/util/engine-util-tests.js new file mode 100644 index 00000000..0e483d18 --- /dev/null +++ b/tests/unit/lib/util/engine-util-tests.js @@ -0,0 +1,58 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true, nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2012-2013, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +YUI.add('engine-util-tests', function (Y, NAME) { + + var suite = new Y.Test.Suite(NAME), + A = Y.Assert; + + var path = require('path'), + arrowRoot = path.join(__dirname, '../../../..'), + engineUtil = require(arrowRoot+'/lib/util/engineUtil.js'); + + var engUtil = new engineUtil(); + + engUtil.mock = { + exit: function (code) { + throw new Error("exit code is "+code); + } + }; + + suite.add(new Y.Test.Case({ + 'test engine util error matches':function () { + + var error = new Error("Cannot find module \'yui\'"); + + try { + engUtil.handleYUIRequireError(error); + } + catch(e) { + A.areEqual(e.message,'exit code is 2', "Process should exit if YUI is missing"); + } + + }, + + 'test engine util error does not match':function () { + + var error = new Error("NOT MATCHING"); + + try { + engUtil.handleYUIRequireError(error); + } + catch(e) { + A.areNotEqual(e.message,'exit code is 2', "Process should NOT exit if YUI is NOT missing"); + } + + } + + + })); + + Y.Test.Runner.add(suite); +}, '0.0.1', {requires:['test']}); + From 987d435394bdcbe3d3ce70ddb3eb407300e731dc Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 23:09:27 -0700 Subject: [PATCH 123/197] Fixing require issue --- lib/client/qunit-seed.js | 4 +--- lib/client/yuitest-seed.js | 4 ++-- lib/engine/interface/engine-seed.js | 4 +++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 8d8045b8..76d15040 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -7,8 +7,6 @@ * See the accompanying LICENSE file for terms. */ -var EngineUtil = require('../engine/EngineUtil'); - function captureConsoleMessages() { try { @@ -61,7 +59,7 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); - + var EngineUtil = require('../engine/EngineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index 1231cef9..c305ad3b 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -15,7 +15,7 @@ // ARROW.scriptType = "test"; // ARROW.testScript = "test-file.js"; // ARROW.onSeeded = function() { /* add test, hand over to runner */} -var EngineUtil = require('../engine/EngineUtil'); + ARROW.testBag = ["test"]; ARROW.testReport = null; @@ -185,7 +185,7 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - + var EngineUtil = require('../engine/EngineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index fd4bad4b..ab30f39c 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -13,7 +13,7 @@ */ var isCommonJS = typeof window === "undefined" && typeof exports === "object"; -var EngineUtil = require('../../util/EngineUtil'); +//var EngineUtil = require('../../util/EngineUtil'); //**************************************** //Patch for IE8 : STARTS //**************************************** @@ -281,6 +281,7 @@ engineSeed.prototype.run = function () { var self = this; if (isCommonJS) { + var EngineUtil = require('../engine/EngineUtil'); //server side default we will give a yui seed try { YUI = require("yui").YUI; @@ -289,6 +290,7 @@ engineSeed.prototype.run = function () { var engineUtil = new EngineUtil(); engineUtil.handleYUIRequireError(e); } + if (ARROW.shareLibServerSeed !== undefined) { try { require(ARROW.shareLibServerSeed); From f1efa601f0634a267849c3e5d84ca67b543fb961 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 23:22:41 -0700 Subject: [PATCH 124/197] Fixing path for engineUtil --- lib/engine/interface/engine-seed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index ab30f39c..50524d8f 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -281,7 +281,7 @@ engineSeed.prototype.run = function () { var self = this; if (isCommonJS) { - var EngineUtil = require('../engine/EngineUtil'); + var EngineUtil = require('../../util/EngineUtil'); //server side default we will give a yui seed try { YUI = require("yui").YUI; From 9fd90ac784c7bbcff51df85bff724625c16956f1 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 23:25:50 -0700 Subject: [PATCH 125/197] Fixing engineUtil path --- lib/client/qunit-seed.js | 2 +- lib/client/yuitest-seed.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 76d15040..3efcfd5f 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -59,7 +59,7 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); - var EngineUtil = require('../engine/EngineUtil'); + var EngineUtil = require('../../util/EngineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index c305ad3b..fe7c222b 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -185,7 +185,7 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - var EngineUtil = require('../engine/EngineUtil'); + var EngineUtil = require('../../util/EngineUtil'); try { YUI = require("yui").YUI; } From 494a424a7640a630e65666668041f5798e95085e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 8 May 2014 23:28:02 -0700 Subject: [PATCH 126/197] Fixing engineUtil path --- lib/client/yuitest-seed.js | 2 +- lib/engine/interface/engine-seed.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index fe7c222b..bd81390d 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -185,7 +185,7 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - var EngineUtil = require('../../util/EngineUtil'); + var EngineUtil = require('../util/EngineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index 50524d8f..fccdf0b6 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -13,7 +13,6 @@ */ var isCommonJS = typeof window === "undefined" && typeof exports === "object"; -//var EngineUtil = require('../../util/EngineUtil'); //**************************************** //Patch for IE8 : STARTS //**************************************** From bd44abe2b2682a90e73e495b7d799b999f4c55df Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 9 May 2014 00:08:45 -0700 Subject: [PATCH 127/197] Cleanup --- lib/util/engineUtil.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/util/engineUtil.js b/lib/util/engineUtil.js index fed14dc2..074d6646 100644 --- a/lib/util/engineUtil.js +++ b/lib/util/engineUtil.js @@ -25,6 +25,7 @@ EngineUtil.prototype.handleYUIRequireError = function(err) { yuiMissingMsg = 'Cannot find module \'yui\''; var proc = self.mock || process; + match = err.message.match(yuiMissingMsg); if (match) { From 8df4b32e962df5f4f65a153e3a351860429ef57f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 9 May 2014 16:34:49 -0700 Subject: [PATCH 128/197] Fixing path --- lib/client/qunit-seed.js | 2 +- lib/client/yuitest-seed.js | 2 +- lib/engine/interface/engine-seed.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 3efcfd5f..21d579ec 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -59,7 +59,7 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); - var EngineUtil = require('../../util/EngineUtil'); + var EngineUtil = require('../../util/engineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index bd81390d..693da5ec 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -185,7 +185,7 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - var EngineUtil = require('../util/EngineUtil'); + var EngineUtil = require('../util/engineUtil'); try { YUI = require("yui").YUI; } diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index fccdf0b6..7c8cc14e 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -280,7 +280,7 @@ engineSeed.prototype.run = function () { var self = this; if (isCommonJS) { - var EngineUtil = require('../../util/EngineUtil'); + var EngineUtil = require('../../util/engineUtil'); //server side default we will give a yui seed try { YUI = require("yui").YUI; From f1498517dffeeeaef7658489fcf2246237532746 Mon Sep 17 00:00:00 2001 From: Brian Date: Sat, 10 May 2014 12:22:42 -0700 Subject: [PATCH 129/197] Add additional checks Checking for unencoded & in ing and href. Check for spacer.gif and check for script or style tags with no type defined. --- lib/common/tests/markup-test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/common/tests/markup-test.js b/lib/common/tests/markup-test.js index 01ea3b9b..fc479653 100644 --- a/lib/common/tests/markup-test.js +++ b/lib/common/tests/markup-test.js @@ -151,6 +151,15 @@ YUI.add("markup-common-tests", function (Y) { error.push({level: 'error', text: 'Anchor tag with inline javascript. Tsk tsk.'}); } + if(Y.one('img[src="spacer.gif"]')) { + error.push({level: 'warn', text: 'spacer.gif used - is this used for layout?'}); + } + + if(Y.one('img[src*="&"]:not([src*="&"])') || + Y.one('a[href*="&"]:not([href*="&"])')) { + error.push({level: 'error', text: 'Unencoded &'}); + } + if(Y.one('label:not([for])')) { error.push({level: 'warn', text: 'Labels should probably specify the for attribute instead of relying on siblings.'}); } @@ -219,6 +228,11 @@ YUI.add("markup-common-tests", function (Y) { error.push({level: 'error', text: 'Some pretty non-semantic / legacy tags being used here.'}); } + if(Y.one('script:not([type])') || + Y.one('style:not([type])')) { + error.push({level: 'warn', text: 'script or style tag without type defined.'}); + } + if(Y.one('br + br')) { error.push({level: 'error', text: 'Multiple br tags in a row. Is that necessary?'}); } From 512608483f6a49aa01daced7117553dd1f9aebb6 Mon Sep 17 00:00:00 2001 From: Brian Date: Sat, 10 May 2014 13:36:09 -0700 Subject: [PATCH 130/197] Comment out check for unencoded & MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It seems some (most?) browsers convert & to & behind the scenes upon render, thereby making this condition fail for any URL with “&” in it (encoded or not). Commenting out since this is still a good check, but is causing false positives. --- lib/common/tests/markup-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/common/tests/markup-test.js b/lib/common/tests/markup-test.js index fc479653..3cb9fec0 100644 --- a/lib/common/tests/markup-test.js +++ b/lib/common/tests/markup-test.js @@ -154,12 +154,12 @@ YUI.add("markup-common-tests", function (Y) { if(Y.one('img[src="spacer.gif"]')) { error.push({level: 'warn', text: 'spacer.gif used - is this used for layout?'}); } - +/* if(Y.one('img[src*="&"]:not([src*="&"])') || Y.one('a[href*="&"]:not([href*="&"])')) { error.push({level: 'error', text: 'Unencoded &'}); } - +*/ if(Y.one('label:not([for])')) { error.push({level: 'warn', text: 'Labels should probably specify the for attribute instead of relying on siblings.'}); } From ea00327a036a478c6c72a6e316d5754facd5451d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 11 May 2014 15:55:40 -0700 Subject: [PATCH 131/197] Refactoring phantomJsSetup --- lib/session/sessionfactory.js | 4 +- lib/session/testsession.js | 5 +- lib/util/arrowsetup.js | 4 +- lib/util/phantomJsSetup.js | 227 ++++++++++++++++++---------------- 4 files changed, 129 insertions(+), 111 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 0c78c5b7..31b9d8eb 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -83,7 +83,7 @@ function SessionFactory(config, args) { this.proxyConfigList = []; - this.config.PhantomJsSetup = PhantomJsSetup; + this.phantomJsSetup = PhantomJsSetup.getInstance(); /* timeReportObj stores total time taken ,time taken for each descriptor as well as time taken for each test within the descriptor { @@ -419,7 +419,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { } if (this.config.startPhantomJs === true || this.config['phantomHost']) { - this.config.PhantomJsSetup.stopPhantomJs(); + this.phantomJsSetup.stopPhantomJs(); } if (global.workingDirectory) { diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 6c850d57..8256413c 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -13,6 +13,7 @@ var path = require('path'); var FileUtil = require("../util/fileutil"); var SessionUtil = require("./sessionUtil"); var existsSync = fs.existsSync || path.existsSync; +var PhantomJsSetup = require("../util/phantomJsSetup.js"); function TestSession(config, args, sessionId) { this.logger = log4js.getLogger("TestSession"); @@ -81,7 +82,7 @@ TestSession.prototype.setup = function (callback) { try { this.args.proxyConfig = require(this.resolvedProxyConfigPath); } catch (e) { - this.logger.debug("Exception in resolving " + this.resolvedProxyConfigPath + " : " + e); + this.logger.error("Exception in resolving " + this.resolvedProxyConfigPath + " : " + e); } } @@ -380,7 +381,7 @@ TestSession.prototype.recordFailure = function (count, callback) { TestSession.prototype.reRunSetup = function(callback) { var self = this, - phantomJsSetup = self.config.PhantomJsSetup; + phantomJsSetup = PhantomJsSetup.getInstance(); // If phantomJs is crashed, restart it and continue with tests if (self.args.browser === "phantomjs") { self.logger.debug('Check if PhantomJs is running'); diff --git a/lib/util/arrowsetup.js b/lib/util/arrowsetup.js index d5f69995..691e78f4 100644 --- a/lib/util/arrowsetup.js +++ b/lib/util/arrowsetup.js @@ -557,8 +557,8 @@ ArrowSetup.prototype.startPhantomJs = function(cb) { self.logger.trace('startPhantomJs starts'); if (this.config.startPhantomJs) { - - PhantomJsSetup.startPhantomJs(self.config.ignoreSslErrorsPhantomJs, function(phantomHost) { + var phantomJsSetup = PhantomJsSetup.getInstance(); + phantomJsSetup.startPhantomJs(self.config.ignoreSslErrorsPhantomJs, function(phantomHost) { self.logger.trace('startPhantomJs ends..' + phantomHost); if (!phantomHost) { diff --git a/lib/util/phantomJsSetup.js b/lib/util/phantomJsSetup.js index 9731f1cb..ad2a7233 100644 --- a/lib/util/phantomJsSetup.js +++ b/lib/util/phantomJsSetup.js @@ -6,141 +6,158 @@ var child_process = require('child_process'), phantomHost, log4js = require("log4js"), phantomJsLogger = new log4js.getLogger("PhantomJsSetupLogger"), - PhantomJsSetup = module.exports = {}, - http = require("http"); + http = require("http"), + self; -PhantomJsSetup.waitForPhantomJs = function(childProcess, time, port, cb) { +var PhantomJsSetup = (function() { - var tid, - maxTries = 50, - serverStarted = false, - out, - index, - phantomJsStartMsg; + var instance; - // PhantomJs 1.9 : GhostDriver - Main - running on port , PhantomJs 1.8 : Ghost Driver running on port - phantomJsStartMsg = 'running on port ' + port; + function init () { - tid = setInterval(function () { + instance = new Object(); - if (maxTries === 0) { - phantomJsLogger.info('Max Tries Over to start phantomJs..'); - clearInterval(tid); - cb(false); - } - maxTries -= 1; + instance.waitForPhantomJs = function(childProcess, time, port, cb) { - }, time); + var tid, + maxTries = 50, + serverStarted = false, + out, + index, + phantomJsStartMsg; - out = ''; + // PhantomJs 1.9 : GhostDriver - Main - running on port , PhantomJs 1.8 : Ghost Driver running on port + phantomJsStartMsg = 'running on port ' + port; - childProcess.stdout.on('data', function(stdout) { + tid = setInterval(function () { - out = out + stdout; - // No need to callback again ,if server has already started - if (!serverStarted) { + if (maxTries === 0) { + phantomJsLogger.info('Max Tries Over to start phantomJs..'); + clearInterval(tid); + cb(false); + } + maxTries -= 1; - index = out.indexOf(phantomJsStartMsg); - if (index !== -1) { - phantomJsLogger.info("PhantomJs Server started successfully"); - clearInterval(tid); - serverStarted = true; - cb(true); - } - } + }, time); - }); + out = ''; - childProcess.stderr.on('data', function(stderr) { - phantomJsLogger.debug('Error while starting phantomjs:' + stderr); - }); + childProcess.stdout.on('data', function(stdout) { + out = out + stdout; + // No need to callback again ,if server has already started + if (!serverStarted) { -}; + index = out.indexOf(phantomJsStartMsg); + if (index !== -1) { + phantomJsLogger.info("PhantomJs Server started successfully"); + clearInterval(tid); + serverStarted = true; + cb(true); + } + } -PhantomJsSetup.startPhantomJs = function (ignoreSslErrorsPhantomJs, cb) { + }); - var - self = this, - minPort = 10000, - maxPort = 11000, - childProcess = require("child_process"), - args = [], - retryTime = 400; + childProcess.stderr.on('data', function(stderr) { + phantomJsLogger.error('Error while starting phantomjs:' + stderr); + }); - if (!ignoreSslErrorsPhantomJs) { - ignoreSslErrorsPhantomJs = false; - } - try { + }; - portchecker.getFirstAvailable(minPort, maxPort, "localhost", function (p, host) { - if (p === -1) { - phantomJsLogger.debug('No free ports found for arrow server on ' + host + ' between ' + minPort + ' and ' + maxPort); - } else { - phantomJsLogger.debug('The first free port found for arrow server on ' + host + ' between ' + minPort + ' and ' + maxPort + ' is ' + p); - args.push('--webdriver=' + p); - args.push('--ignore-ssl-errors=' + ignoreSslErrorsPhantomJs); - phantomJsLogger.debug('PhantomJs starting with arguments -' + args); - child = childProcess.spawn('phantomjs', args, {}); + instance.startPhantomJs = function (ignoreSslErrorsPhantomJs, cb) { +// console.log('***In startPhantomJs...'); + var + self = PhantomJsSetup.getInstance(),//PhantomJsSetup.instance, + minPort = 10000, + maxPort = 11000, + childProcess = require("child_process"), + args = [], + retryTime = 400; - self.waitForPhantomJs(child, retryTime, p, function(running) { + if (!ignoreSslErrorsPhantomJs) { + ignoreSslErrorsPhantomJs = false; + } - if (running === true) { - phantomHost = 'http://localhost:' + p + "/wd/hub"; - phantomJsLogger.info('PhantomJS up and running on ' + phantomHost); + try { + + portchecker.getFirstAvailable(minPort, maxPort, "localhost", function (p, host) { + if (p === -1) { + phantomJsLogger.debug('No free ports found for arrow server on ' + host + ' between ' + minPort + ' and ' + maxPort); } else { - phantomJsLogger.info('Error !! PhantomJS could not start..'); + phantomJsLogger.debug('The first free port found for arrow server on ' + host + ' between ' + minPort + ' and ' + maxPort + ' is ' + p); + args.push('--webdriver=' + p); + args.push('--ignore-ssl-errors=' + ignoreSslErrorsPhantomJs); + phantomJsLogger.debug('PhantomJs starting with arguments -' + args); + child = childProcess.spawn('phantomjs', args, {}); + + self.waitForPhantomJs(child, retryTime, p, function(running) { + + if (running === true) { + phantomHost = 'http://localhost:' + p + "/wd/hub"; + phantomJsLogger.info('PhantomJS up and running on ' + phantomHost); + } else { + phantomJsLogger.info('Error !! PhantomJS could not start..'); + } + cb(phantomHost); + }); } - cb(phantomHost); }); + + } catch (e) { + phantomJsLogger.error('Exception in starting phantomjs :' + e); } - }); + }; - } catch (e) { - phantomJsLogger.debug('Exception in starting phantomjs :' + e); - } -}; - -/** - * stop phantomjs - */ -PhantomJsSetup.stopPhantomJs = function () { - if (child) { - child.kill(); - phantomJsLogger.info("PhantomJs stopped"); - } -}; - -/** - * Check if phantomJs is running - * @param cb - */ -PhantomJsSetup.isPhantomJsRunning = function (cb) { - - if (phantomHost) { - var phantomUrl = phantomHost + "/sessions"; - phantomJsLogger.debug("PhantomHost::" + phantomUrl); - - http.get(phantomUrl, function(response){ - phantomJsLogger.debug('Status code :' + response.statusCode); - if (response.statusCode === 200) { - phantomJsLogger.debug('PhantomJs is running'); - cb(true); + instance.stopPhantomJs = function () { + if (child) { + child.kill(); + phantomJsLogger.info("PhantomJs stopped"); + } + }; + + instance.isPhantomJsRunning = function (cb) { + + if (phantomHost) { + var phantomUrl = phantomHost + "/sessions"; + phantomJsLogger.debug("PhantomHost::" + phantomUrl); + + http.get(phantomUrl, function(response){ + phantomJsLogger.debug('Status code :' + response.statusCode); + if (response.statusCode === 200) { + phantomJsLogger.debug('PhantomJs is running'); + cb(true); + } else { + phantomJsLogger.debug('PhantomJs is NOT running'); + cb(false); + } + return; + }).on('error', function(e){ + phantomJsLogger.error('Got error on HTTP get for the phantomjs url - ' + phantomUrl + ' : ' + e.message); + cb(false); + }) } else { - phantomJsLogger.debug('PhantomJs is NOT running'); + phantomJsLogger.debug('phantomHost is NOT set'); cb(false); } - return; - }).on('error', function(e){ - phantomJsLogger.error('Got error on HTTP get for the phantomjs url - ' + phantomUrl + ' : ' + e.message); - cb(false); - }) - } else { - phantomJsLogger.debug('phantomHost is NOT set'); - cb(false); + + }; + + }; + + return { + + getInstance: function() { + if (!instance) { + init(); + } + + return instance; + } + } -}; +})(); module.exports = PhantomJsSetup; \ No newline at end of file From 9de40eb72011007af9d461a3b6ce098fb9ad84ec Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 11 May 2014 15:56:51 -0700 Subject: [PATCH 132/197] Cleanup --- lib/util/phantomJsSetup.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/util/phantomJsSetup.js b/lib/util/phantomJsSetup.js index ad2a7233..77f5b1c2 100644 --- a/lib/util/phantomJsSetup.js +++ b/lib/util/phantomJsSetup.js @@ -67,9 +67,8 @@ var PhantomJsSetup = (function() { }; instance.startPhantomJs = function (ignoreSslErrorsPhantomJs, cb) { -// console.log('***In startPhantomJs...'); var - self = PhantomJsSetup.getInstance(),//PhantomJsSetup.instance, + self = PhantomJsSetup.getInstance(), minPort = 10000, maxPort = 11000, childProcess = require("child_process"), From 6a6766c5995fe063a0c403b1437c418a978f4544 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 12 May 2014 14:52:16 -0700 Subject: [PATCH 133/197] Preparing for v0.6.2 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fa556cb..be300899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +# 0.6.2 + + * Restarting phantomjs before retry, if it crashed while test execution [PR](https://github.com/yahoo/arrow/pull/243) [Issue](https://github.com/yahoo/arrow/issues/240) + * Add additional checks for markup-test.js [PR](https://github.com/yahoo/arrow/pull/244) + # 0.6.1 * Fix for exitCode not working for unit tests [PR](https://github.com/yahoo/arrow/pull/239) diff --git a/package.json b/package.json index 368a6cf3..9b562210 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.1", + "version": "0.6.2", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 50ad7826daf0ea7c73b2808f4fb2a5144b4952fc Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 13 May 2014 09:31:35 -0700 Subject: [PATCH 134/197] Reverting changes for yui peer dependency in master --- config/config.js | 2 +- config/error-messages.js | 91 ++- lib/client/qunit-seed.js | 11 +- lib/client/yuitest-seed.js | 9 +- lib/driver/node.js | 13 +- lib/engine/interface/engine-seed.js | 11 +- lib/util/capabilitymanager.js | 8 +- lib/util/engineUtil.js | 38 -- npm-shrinkwrap.json | 737 ++++++++++------------- package.json | 7 +- tests/unit/lib/util/engine-util-tests.js | 58 -- 11 files changed, 375 insertions(+), 610 deletions(-) delete mode 100644 lib/util/engineUtil.js delete mode 100644 tests/unit/lib/util/engine-util-tests.js diff --git a/config/config.js b/config/config.js index 1fef3a87..1df61f23 100644 --- a/config/config.js +++ b/config/config.js @@ -20,7 +20,7 @@ config.baseUrl = ""; config.arrowModuleRoot = global.appRoot + "/"; config.dimensions = config.arrowModuleRoot + "config/dimensions.json"; config.defaultTestHost = config.arrowModuleRoot + "lib/client/testHost.html"; -config.defaultAppSeed = "//cdnjs.cloudflare.com/ajax/libs/yui/3.16.0/yui-min.js"; +config.defaultAppSeed = "//cdnjs.cloudflare.com/ajax/libs/yui/3.15.0/yui-min.js"; config.autolib = config.arrowModuleRoot + "lib/common"; //for yui sandbox diff --git a/config/error-messages.js b/config/error-messages.js index 8d697f4e..c1249be1 100644 --- a/config/error-messages.js +++ b/config/error-messages.js @@ -5,61 +5,54 @@ */ var pathNotFound = "Path is not defined", empty = "", error = { - 1000 : { - name : 'EDIMENV', - text : 'The environment "{0}" is missing.\n' + - 'Please add environment "{0}" to dimensions file "{1}".', - 0 : empty, - 1 : pathNotFound - }, - 1001 : { - name : 'ECHKDIM', - text : "Please check dimensions file {0}. Wrong dimensions format : {1}", - 0 : pathNotFound, - 1 : "Dimensions is not defined" - }, - 1002 : { - name : 'EREPORT', - text : '{0} while collecting test result on testing page "{1}".\n{2}', - 0 : "Unknown error", - 1 : "page URL is not available", - 2 : empty - }, - 1003 : { - name : 'EDSCENV', - text : 'The settings {0} is missing.\n' + - 'Please add environment "{1}" to dimensions file "{2}"\n' + - 'or remove it from test descriptor file "{3}".', - 0 : empty, - 1 : empty, - 2 : pathNotFound, - 3 : pathNotFound - }, - 1004 : { - name : 'EUNDEF', + 1000 : { + name : 'EDIMENV', + text : 'The environment "{0}" is missing.\n' + + 'Please add environment "{0}" to dimensions file "{1}".', + 0 : empty, + 1 : pathNotFound + }, + 1001 : { + name : 'ECHKDIM', + text : "Please check dimensions file {0}. Wrong dimensions format : {1}", + 0 : pathNotFound, + 1 : "Dimensions is not defined" + }, + 1002 : { + name : 'EREPORT', + text : '{0} while collecting test result on testing page "{1}".\n{2}', + 0 : "Unknown error", + 1 : "page URL is not available", + 2 : empty + }, + 1003 : { + name : 'EDSCENV', + text : 'The settings {0} is missing.\n' + + 'Please add environment "{1}" to dimensions file "{2}"\n' + + 'or remove it from test descriptor file "{3}".', + 0 : empty, + 1 : empty, + 2 : pathNotFound, + 3 : pathNotFound + }, + 1004 : { + name : 'EUNDEF', text :'Issue with loading testing page {0}\n' + 'Possible cause :\n' + 'The page got redirected before completing the test, this happens if your page has auto-redirects ' + 'or your tests perform some UI action resulting into page change event. Please use a custom controller for these kind of issues.\n' + 'If you are already using custom controller, please check that you are using waitForElement(s) to ensure page is ready for executing test.\n' + - 'For Arrow Usage, please refer to https://github.com/yahoo/arrow/blob/master/docs/arrow_cookbook/README.rst', - 0 : empty - }, - 1005 : { - name : 'EDSCYCB', - text : 'YCB Variable Replacement Failed, Please check you descriptor file, {0}.\nError: {1}', - 0 : empty - }, - 1006 : { - name : 'ENULLARG', - text : 'Argument "{0}" is "{1}".' - }, - 1007 : { - name : 'EMISSINGYUIDEPENDENCY', - text :'Missing YUI dependency.YUI is a peer dependency of Arrow.For details about peer dependency, see http://blog.nodejs.org/2013/02/07/peer-dependencies/\n' + - 'If you are using global installation of Arrow, please install YUI globally. ' + - '\nIf you are running using local installation of Arrow, please add YUI as a dependency in your package.json.', + 'For Arrow Usage, please refer to https://github.com/yahoo/arrow/blob/master/docs/arrow_cookbook/README.rst', 0 : empty + }, + 1005 : { + name : 'EDSCYCB', + text : 'YCB Variable Replacement Failed, Please check you descriptor file, {0}.\nError: {1}', + 0 : empty + }, + 1006 : { + name : 'ENULLARG', + text : 'Argument "{0}" is "{1}".' } }; diff --git a/lib/client/qunit-seed.js b/lib/client/qunit-seed.js index 21d579ec..46bbeabd 100644 --- a/lib/client/qunit-seed.js +++ b/lib/client/qunit-seed.js @@ -6,7 +6,6 @@ * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ - function captureConsoleMessages() { try { @@ -59,15 +58,7 @@ function captureConsoleMessages() { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //server side QUnit = require('qunit'); - var EngineUtil = require('../../util/engineUtil'); - try { - YUI = require("yui").YUI; - } - catch(e) { - var engineUtil = new EngineUtil(); - engineUtil.handleYUIRequireError(e); - } - + YUI = require("yui").YUI; QUnit.init(); ARROW.onSeeded(); diff --git a/lib/client/yuitest-seed.js b/lib/client/yuitest-seed.js index 693da5ec..02f25831 100644 --- a/lib/client/yuitest-seed.js +++ b/lib/client/yuitest-seed.js @@ -185,14 +185,7 @@ if ((typeof window !== "undefined") && !window.onerror) { if (typeof YUI === "undefined") { if ((typeof process !== "undefined") && (typeof require !== "undefined")) { //console.log("requiring YUI"); - var EngineUtil = require('../util/engineUtil'); - try { - YUI = require("yui").YUI; - } - catch(e) { - var engineUtil = new EngineUtil(); - engineUtil.handleYUIRequireError(e); - } + YUI = require("yui").YUI; //console.log("Injecting share lib seed (YUI global config)"); if (ARROW.shareLibServerSeed !== undefined) { diff --git a/lib/driver/node.js b/lib/driver/node.js index d26101d1..94963edf 100644 --- a/lib/driver/node.js +++ b/lib/driver/node.js @@ -175,17 +175,10 @@ NodeDriver.prototype.executeTest = function (testConfig, testParams, callback) { callback(null, report); }); - child.on("exit", function (m) { - - // Exit , if exit code is 2 ( If YUI require failed ) - if (m === 2) { - process.exit(2); - } else { - if (0 === report.length) { - self.errorCallback(logger, "Failed to get the test report", callback); - } + child.on("exit", function () { + if (0 === report.length) { + self.errorCallback(logger, "Failed to get the test report", callback); } - }); }; diff --git a/lib/engine/interface/engine-seed.js b/lib/engine/interface/engine-seed.js index 7c8cc14e..a3a0a105 100644 --- a/lib/engine/interface/engine-seed.js +++ b/lib/engine/interface/engine-seed.js @@ -13,6 +13,7 @@ */ var isCommonJS = typeof window === "undefined" && typeof exports === "object"; + //**************************************** //Patch for IE8 : STARTS //**************************************** @@ -280,16 +281,8 @@ engineSeed.prototype.run = function () { var self = this; if (isCommonJS) { - var EngineUtil = require('../../util/engineUtil'); //server side default we will give a yui seed - try { - YUI = require("yui").YUI; - } - catch(e) { - var engineUtil = new EngineUtil(); - engineUtil.handleYUIRequireError(e); - } - + YUI = require("yui").YUI; if (ARROW.shareLibServerSeed !== undefined) { try { require(ARROW.shareLibServerSeed); diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 1694e0b7..c2977a7e 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -1,10 +1,10 @@ /*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ /* -* Copyright (c) 2012, Yahoo! Inc. All rights reserved. -* Copyrights licensed under the New BSD License. -* See the accompanying LICENSE file for terms. -*/ + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ var log4js = require("log4js"); var fs = require("fs"); diff --git a/lib/util/engineUtil.js b/lib/util/engineUtil.js deleted file mode 100644 index 074d6646..00000000 --- a/lib/util/engineUtil.js +++ /dev/null @@ -1,38 +0,0 @@ -/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ - -/* - * Copyright (c) 2014, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - -var log4js = require("log4js"); -var ErrorManager = require("./errormanager"); - -function EngineUtil() { - this.logger = log4js.getLogger("EngineUtil"); -} - -/** - * - * @param err - */ -EngineUtil.prototype.handleYUIRequireError = function(err) { - - var em = ErrorManager.getInstance(), - self = this, - match, - yuiMissingMsg = 'Cannot find module \'yui\''; - - var proc = self.mock || process; - - match = err.message.match(yuiMissingMsg); - - if (match) { - em.errorLog(1007, err.message); - proc.exit(2); - } - -}; - -module.exports = EngineUtil; \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 686e01fe..afecc9d1 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,458 +1,359 @@ { - "name": "yahoo-arrow", - "version": "0.6.0", - "dependencies": { - "JSV": { - "version": "4.0.2", - "from": "JSV@4.0.2" - }, - "async": { - "version": "0.8.0", - "from": "async@0.8.0" - }, - "chai": { - "version": "1.5.0", - "from": "chai@1.5.0" - }, - "cheerio": { - "version": "0.9.2", - "from": "cheerio@0.9.2", - "dependencies": { - "htmlparser2": { - "version": "2.6.0", - "from": "htmlparser2@2.x", - "dependencies": { - "domhandler": { - "version": "2.0.3", - "from": "domhandler@2.0" - }, - "domutils": { - "version": "1.0.1", - "from": "domutils@1.0" - }, - "domelementtype": { - "version": "1.1.1", - "from": "domelementtype@1" - } - } - }, - "entities": { - "version": "0.5.0", - "from": "entities@0.x" - } - } - }, - "cheerio-select": { - "version": "0.0.3", - "from": "cheerio-select@0.0.3", - "dependencies": { - "CSSselect": { - "version": "0.7.0", - "from": "CSSselect@0.x", - "dependencies": { - "CSSwhat": { - "version": "0.4.5", - "from": "CSSwhat@0.4" - }, - "domutils": { - "version": "1.4.3", - "from": "domutils@1.4", - "dependencies": { - "domelementtype": { - "version": "1.1.1", - "from": "domelementtype@1" + "name": "yahoo-arrow", + "version": "0.3.0", + "dependencies": { + "glob": { + "version": "3.1.11", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" + } + } + }, + "graceful-fs": { + "version": "1.1.14" + }, + "inherits": { + "version": "1.0.0" } - } - }, - "boolbase": { - "version": "1.0.0", - "from": "boolbase@~1.0.0" - }, - "nth-check": { - "version": "1.0.0", - "from": "nth-check@~1.0.0" } - } - } - } - }, - "clone": { - "version": "0.1.11", - "from": "clone@0.1.11" - }, - "colors": { - "version": "0.6.0-1", - "from": "colors@0.6.0-1" - }, - "express": { - "version": "3.0.0", - "from": "express@3.0.0", - "dependencies": { - "connect": { - "version": "2.6.0", - "from": "connect@2.6.0", - "dependencies": { - "qs": { - "version": "0.5.1", - "from": "qs@0.5.1" - }, - "formidable": { - "version": "1.0.11", - "from": "formidable@1.0.11" - }, - "bytes": { - "version": "0.1.0", - "from": "bytes@0.1.0" - }, - "send": { - "version": "0.0.4", - "from": "send@0.0.4", - "dependencies": { - "mime": { - "version": "1.2.6", - "from": "mime@1.2.6" + }, + "nopt": { + "version": "2.0.0", + "dependencies": { + "abbrev": { + "version": "1.0.4" } - } - }, - "pause": { - "version": "0.0.1", - "from": "pause@0.0.1" } - } - }, - "commander": { - "version": "0.6.1", - "from": "commander@0.6.1" - }, - "range-parser": { - "version": "0.0.4", - "from": "range-parser@0.0.4" - }, - "mkdirp": { - "version": "0.3.3", - "from": "mkdirp@0.3.3" - }, - "cookie": { - "version": "0.0.4", - "from": "cookie@0.0.4" - }, - "crc": { - "version": "0.2.0", - "from": "crc@0.2.0" }, - "fresh": { - "version": "0.1.0", - "from": "fresh@0.1.0" + "colors": { + "version": "0.6.0-1" }, - "methods": { - "version": "0.0.1", - "from": "methods@0.0.1" - }, - "send": { - "version": "0.1.0", - "from": "send@0.1.0", - "dependencies": { - "mime": { - "version": "1.2.6", - "from": "mime@1.2.6" + "express": { + "version": "3.0.0", + "dependencies": { + "connect": { + "version": "2.6.0", + "dependencies": { + "qs": { + "version": "0.5.1" + }, + "formidable": { + "version": "1.0.11" + }, + "bytes": { + "version": "0.1.0" + }, + "send": { + "version": "0.0.4", + "dependencies": { + "mime": { + "version": "1.2.6" + } + } + }, + "pause": { + "version": "0.0.1" + } + } + }, + "commander": { + "version": "0.6.1" + }, + "range-parser": { + "version": "0.0.4" + }, + "mkdirp": { + "version": "0.3.3" + }, + "cookie": { + "version": "0.0.4" + }, + "crc": { + "version": "0.2.0" + }, + "fresh": { + "version": "0.1.0" + }, + "methods": { + "version": "0.0.1" + }, + "send": { + "version": "0.1.0", + "dependencies": { + "mime": { + "version": "1.2.6" + } + } + }, + "debug": { + "version": "0.7.2" + } } - } }, - "debug": { - "version": "0.8.1", - "from": "debug@*" - } - } - }, - "glob": { - "version": "3.1.11", - "from": "glob@3.1.11", - "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@0.2", - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "from": "lru-cache@2" - }, - "sigmund": { - "version": "1.0.0", - "from": "sigmund@~1.0.0" + "yui": { + "version": "3.8.0", + "dependencies": { + "request": { + "version": "2.9.202" + } } - } - }, - "graceful-fs": { - "version": "1.1.14", - "from": "graceful-fs@~1.1.2" }, - "inherits": { - "version": "1.0.0", - "from": "inherits@1" - } - } - }, - "istanbul": { - "version": "0.1.25", - "from": "istanbul@0.1.25", - "dependencies": { - "esprima": { - "version": "1.0.4", - "from": "esprima@1.0.x" + "JSV": { + "version": "4.0.2" }, - "escodegen": { - "version": "0.0.28", - "from": "escodegen@0.0.x", - "dependencies": { - "estraverse": { - "version": "1.3.2", - "from": "estraverse@~1.3.0" - }, - "source-map": { - "version": "0.1.33", - "from": "source-map@>= 0.1.2", - "dependencies": { - "amdefine": { - "version": "0.1.0", - "from": "amdefine@>=0.0.4" + "log4js": { + "version": "0.5.1", + "dependencies": { + "async": { + "version": "0.1.15" } - } } - } }, - "handlebars": { - "version": "1.0.12", - "from": "handlebars@1.0.x", - "dependencies": { - "optimist": { - "version": "0.3.7", - "from": "optimist@~0.3" - }, - "uglify-js": { - "version": "2.3.6", - "from": "uglify-js@~2.3", - "dependencies": { - "async": { - "version": "0.2.10", - "from": "async@~0.2.6" - }, - "source-map": { - "version": "0.1.33", - "from": "source-map@~0.1.7", - "dependencies": { - "amdefine": { - "version": "0.1.0", - "from": "amdefine@>=0.0.4" - } - } + "clone": { + "version": "0.1.11" + }, + "useragent": { + "version": "1.1.0", + "dependencies": { + "yamlparser": { + "version": "0.0.2" + }, + "request": { + "version": "2.9.202" + }, + "semver": { + "version": "1.0.14" } - } } - } }, - "fileset": { - "version": "0.1.5", - "from": "fileset@0.1.x", - "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@0.x", - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "from": "lru-cache@2" - }, - "sigmund": { - "version": "1.0.0", - "from": "sigmund@~1.0.0" + "istanbul": { + "version": "0.1.25", + "dependencies": { + "esprima": { + "version": "1.0.3" + }, + "escodegen": { + "version": "0.0.23", + "dependencies": { + "estraverse": { + "version": "0.0.4" + }, + "source-map": { + "version": "0.1.23", + "dependencies": { + "amdefine": { + "version": "0.0.5" + } + } + } + } + }, + "handlebars": { + "version": "1.0.12", + "dependencies": { + "optimist": { + "version": "0.3.7" + }, + "uglify-js": { + "version": "2.3.6", + "dependencies": { + "async": { + "version": "0.2.9" + }, + "source-map": { + "version": "0.1.23", + "dependencies": { + "amdefine": { + "version": "0.0.5" + } + } + } + } + } + } + }, + "fileset": { + "version": "0.1.5", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" + } + } + } + } + }, + "which": { + "version": "1.0.5" + }, + "async": { + "version": "0.1.22" + }, + "abbrev": { + "version": "1.0.4" + }, + "wordwrap": { + "version": "0.0.2" } - } } - } }, - "which": { - "version": "1.0.5", - "from": "which@1.0.x" + "uglify-js": { + "version": "1.3.4" }, - "async": { - "version": "0.1.22", - "from": "async@0.1.x" + "xml-writer": { + "version": "1.2.3" }, - "abbrev": { - "version": "1.0.5", - "from": "abbrev@1.0.x" + "ycb": { + "version": "1.0.5" }, - "wordwrap": { - "version": "0.0.2", - "from": "wordwrap@0.0.x" - } - } - }, - "jasmine-node": { - "version": "1.4.0", - "from": "jasmine-node@1.4.0", - "dependencies": { - "coffee-script": { - "version": "1.7.1", - "from": "coffee-script@>=1.0.1" + "async": { + "version": "0.2.9" + }, + "xml2js": { + "version": "0.1.14", + "dependencies": { + "sax": { + "version": "0.5.4" + } + } }, - "jasmine-reporters": { - "version": "0.4.1", - "from": "jasmine-reporters@>=0.2.0" + "mkdirp": { + "version": "0.3.5" }, - "requirejs": { - "version": "2.1.11", - "from": "requirejs@>=0.27.1" + "selenium-webdriver": { + "version": "2.39.0" }, - "walkdir": { - "version": "0.0.7", - "from": "walkdir@>= 0.0.1" + "underscore": { + "version": "1.6.0" }, - "gaze": { - "version": "0.3.4", - "from": "gaze@~0.3.2", - "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@~0.2.9", - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "from": "lru-cache@2" - }, - "sigmund": { - "version": "1.0.0", - "from": "sigmund@~1.0.0" + "mocha": { + "version": "1.7.4", + "dependencies": { + "commander": { + "version": "0.6.1" + }, + "growl": { + "version": "1.6.1" + }, + "jade": { + "version": "0.26.3", + "dependencies": { + "mkdirp": { + "version": "0.3.0" + } + } + }, + "diff": { + "version": "1.0.2" + }, + "debug": { + "version": "0.7.2" + }, + "mkdirp": { + "version": "0.3.3" + }, + "ms": { + "version": "0.3.0" } - } - }, - "fileset": { - "version": "0.1.5", - "from": "fileset@0.1.x" } - } - } - } - }, - "log4js": { - "version": "0.5.1", - "from": "log4js@0.5.1", - "dependencies": { - "async": { - "version": "0.1.15", - "from": "async@0.1.15" - } - } - }, - "mkdirp": { - "version": "0.3.5", - "from": "mkdirp@0.3.5" - }, - "mocha": { - "version": "1.7.4", - "from": "mocha@1.7.4", - "dependencies": { - "commander": { - "version": "0.6.1", - "from": "commander@0.6.1" }, - "growl": { - "version": "1.6.1", - "from": "growl@1.6.x" - }, - "jade": { - "version": "0.26.3", - "from": "jade@0.26.3", - "dependencies": { - "mkdirp": { - "version": "0.3.0", - "from": "mkdirp@0.3.0" + "jasmine-node": { + "version": "1.4.0", + "dependencies": { + "coffee-script": { + "version": "1.6.3" + }, + "jasmine-reporters": { + "version": "0.2.1" + }, + "requirejs": { + "version": "2.1.6" + }, + "walkdir": { + "version": "0.0.7" + }, + "underscore": { + "version": "1.4.4" + }, + "gaze": { + "version": "0.3.4", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" + } + } + }, + "fileset": { + "version": "0.1.5" + } + } + } } - } }, - "diff": { - "version": "1.0.2", - "from": "diff@1.0.2" + "qunitjs": { + "version": "1.11.0" }, - "debug": { - "version": "0.8.1", - "from": "debug@*" + "chai": { + "version": "1.5.0" }, - "mkdirp": { - "version": "0.3.3", - "from": "mkdirp@0.3.3" + "oauth": { + "version": "0.9.8" }, - "ms": { - "version": "0.3.0", - "from": "ms@0.3.0" - } - } - }, - "nopt": { - "version": "2.0.0", - "from": "nopt@2.0.0", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "from": "abbrev@1" - } - } - }, - "oauth": { - "version": "0.9.8", - "from": "oauth@0.9.8" - }, - "qunitjs": { - "version": "1.11.0", - "from": "qunitjs@1.11.0" - }, - "selenium-webdriver": { - "version": "2.39.0", - "from": "selenium-webdriver@2.39.0" - }, - "uglify-js": { - "version": "1.3.4", - "from": "uglify-js@1.3.4" - }, - "underscore": { - "version": "1.6.0", - "from": "underscore@1.6.0" - }, - "useragent": { - "version": "1.1.0", - "from": "useragent@1.1.0", - "dependencies": { - "yamlparser": { - "version": "0.0.2", - "from": "yamlparser@0.0.2" - }, - "request": { - "version": "2.9.202", - "from": "request@2.9.202" + "cheerio": { + "version": "0.9.2", + "dependencies": { + "htmlparser2": { + "version": "2.6.0", + "dependencies": { + "domhandler": { + "version": "2.0.3" + }, + "domutils": { + "version": "1.0.1" + }, + "domelementtype": { + "version": "1.1.1" + } + } + }, + "underscore": { + "version": "1.4.4" + }, + "entities": { + "version": "0.3.0" + } + } }, - "semver": { - "version": "1.0.14", - "from": "semver@1.0.14" - } - } - }, - "xml-writer": { - "version": "1.2.3", - "from": "xml-writer@1.2.3" - }, - "xml2js": { - "version": "0.1.14", - "from": "xml2js@0.1.14", - "dependencies": { - "sax": { - "version": "0.6.0", - "from": "sax@>=0.1.1" + "cheerio-select": { + "version": "0.0.3", + "dependencies": { + "CSSselect": { + "version": "0.3.1", + "dependencies": { + "CSSwhat": { + "version": "0.2.0" + } + } + } + } } - } - }, - "ycb": { - "version": "1.0.5", - "from": "ycb@1.0.5" } - } } diff --git a/package.json b/package.json index 11bf1791..9b562210 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "nopt": "2.0.0", "colors": "0.6.0-1", "express": "3.0.0", + "yui": "3.8.0", "JSV": "4.0.2", "log4js": "0.5.1", "useragent": "1.1.0", @@ -52,16 +53,13 @@ "uglify-js": "1.3.4", "xml-writer": "1.2.3", "ycb": "1.0.5", - "async": "0.8.0", + "async": "~0.2.5", "xml2js": "0.1.14", "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", "underscore": "1.6.0", "clone":"0.1.11" }, - "peerDependencies":{ - "yui": "3.x" - }, "optionalDependencies": { "mocha": "1.7.4", "jasmine-node": "1.4.0", @@ -73,7 +71,6 @@ }, "devDependencies": { "ytestrunner": "0.3.3", - "yui": "3.8.0", "mockery": "1.4.0", "JSONPath": "0.9.1" } diff --git a/tests/unit/lib/util/engine-util-tests.js b/tests/unit/lib/util/engine-util-tests.js deleted file mode 100644 index 0e483d18..00000000 --- a/tests/unit/lib/util/engine-util-tests.js +++ /dev/null @@ -1,58 +0,0 @@ -/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true, nomen:true, node:true continue:true*/ - -/* - * Copyright (c) 2012-2013, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ - -YUI.add('engine-util-tests', function (Y, NAME) { - - var suite = new Y.Test.Suite(NAME), - A = Y.Assert; - - var path = require('path'), - arrowRoot = path.join(__dirname, '../../../..'), - engineUtil = require(arrowRoot+'/lib/util/engineUtil.js'); - - var engUtil = new engineUtil(); - - engUtil.mock = { - exit: function (code) { - throw new Error("exit code is "+code); - } - }; - - suite.add(new Y.Test.Case({ - 'test engine util error matches':function () { - - var error = new Error("Cannot find module \'yui\'"); - - try { - engUtil.handleYUIRequireError(error); - } - catch(e) { - A.areEqual(e.message,'exit code is 2', "Process should exit if YUI is missing"); - } - - }, - - 'test engine util error does not match':function () { - - var error = new Error("NOT MATCHING"); - - try { - engUtil.handleYUIRequireError(error); - } - catch(e) { - A.areNotEqual(e.message,'exit code is 2', "Process should NOT exit if YUI is NOT missing"); - } - - } - - - })); - - Y.Test.Runner.add(suite); -}, '0.0.1', {requires:['test']}); - From 3058fc04c98f743ad7e9552dd6ba6111b5affb56 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 14 May 2014 11:50:26 -0700 Subject: [PATCH 135/197] Disabling timeout for safri --- lib/driver/selenium.js | 13 ++++++++++--- lib/session/testsession.js | 10 ++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 18862717..6bc0d7a1 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -174,7 +174,8 @@ SeleniumDriver.prototype.start = function (callback) { self.webdriver = new wd.Builder(). usingServer(wdHubHost). usingSession(self.sessionId). - withCapabilities(capabilities).build(); +// withCapabilities(wd.Capabilities.safari()).build(); + withCapabilities(capabilities).build(); self.webdriver.By = wd.By; self.webdriver.Key = wd.Key; @@ -196,8 +197,11 @@ SeleniumDriver.prototype.start = function (callback) { //TODO : We may need to expose 'pageLoadTimeout' param at descriptor or CLI level. // maximize is not implemented for mobile devices - if (!self.isMobile) { +// console.log('***Not setting timeout if ' + self.isSafari); + if (!self.isMobile && !self.isSafari) { self.webdriver.manage().timeouts().pageLoadTimeout(self.pageLoadTimeout); + } else { + console.log('***Not setting timeout if ' + self.isSafari); } callback(null); @@ -612,11 +616,12 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac testParams.lib = self.args.params.lib; } self.testCallback = callback; // save it so that async wd exception can be reported back - + console.log('Executing test...'); function collectTestReport() { retryCount += 1; logger.debug("Waiting for the test report, attempt: " + retryCount); webdriver.executeScript("return ARROW.testReport;").then(function (report) { + console.log('***Got report...'); if (report && report !== "{}") { webdriver.getCurrentUrl().then(function (u) { reportJson = JSON.parse(report); @@ -723,7 +728,9 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac } function initTest() { + console.log('***In initTest..'); webdriver.executeScript(driverJs).then(function () { + console.log('***In initTest cb ..now collecting report'); setTimeout(collectTestReport, self.attemptInterval); }, function(err) { diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 8256413c..2fb8caac 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -91,6 +91,7 @@ TestSession.prototype.setup = function (callback) { //checking if its a mobile browser this.driver.isMobile = this.isMobile(this.args.browser); + this.driver.isSafari = this.isSafari(this.args.browser); //setting default page if (!this.testParams.page) { @@ -410,6 +411,15 @@ TestSession.prototype.reRunSetup = function(callback) { } } +/** + * + * @param browserName + * @returns {boolean} + */ +TestSession.prototype.isSafari = function (browserName) { + return "safari" === browserName; +} + TestSession.prototype.isMobile = function (browserName) { var supportedMobileBrowserNames = ["iphone", "ipad", "android", "androidphone", "androidtablet"], From 0094b90f9d7a512f0a191045f0e4dc1aa45de3bd Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 14 May 2014 11:52:55 -0700 Subject: [PATCH 136/197] Reverting changes for safari --- lib/driver/selenium.js | 13 +++---------- lib/session/testsession.js | 10 ---------- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 6bc0d7a1..18862717 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -174,8 +174,7 @@ SeleniumDriver.prototype.start = function (callback) { self.webdriver = new wd.Builder(). usingServer(wdHubHost). usingSession(self.sessionId). -// withCapabilities(wd.Capabilities.safari()).build(); - withCapabilities(capabilities).build(); + withCapabilities(capabilities).build(); self.webdriver.By = wd.By; self.webdriver.Key = wd.Key; @@ -197,11 +196,8 @@ SeleniumDriver.prototype.start = function (callback) { //TODO : We may need to expose 'pageLoadTimeout' param at descriptor or CLI level. // maximize is not implemented for mobile devices -// console.log('***Not setting timeout if ' + self.isSafari); - if (!self.isMobile && !self.isSafari) { + if (!self.isMobile) { self.webdriver.manage().timeouts().pageLoadTimeout(self.pageLoadTimeout); - } else { - console.log('***Not setting timeout if ' + self.isSafari); } callback(null); @@ -616,12 +612,11 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac testParams.lib = self.args.params.lib; } self.testCallback = callback; // save it so that async wd exception can be reported back - console.log('Executing test...'); + function collectTestReport() { retryCount += 1; logger.debug("Waiting for the test report, attempt: " + retryCount); webdriver.executeScript("return ARROW.testReport;").then(function (report) { - console.log('***Got report...'); if (report && report !== "{}") { webdriver.getCurrentUrl().then(function (u) { reportJson = JSON.parse(report); @@ -728,9 +723,7 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac } function initTest() { - console.log('***In initTest..'); webdriver.executeScript(driverJs).then(function () { - console.log('***In initTest cb ..now collecting report'); setTimeout(collectTestReport, self.attemptInterval); }, function(err) { diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 2fb8caac..8256413c 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -91,7 +91,6 @@ TestSession.prototype.setup = function (callback) { //checking if its a mobile browser this.driver.isMobile = this.isMobile(this.args.browser); - this.driver.isSafari = this.isSafari(this.args.browser); //setting default page if (!this.testParams.page) { @@ -411,15 +410,6 @@ TestSession.prototype.reRunSetup = function(callback) { } } -/** - * - * @param browserName - * @returns {boolean} - */ -TestSession.prototype.isSafari = function (browserName) { - return "safari" === browserName; -} - TestSession.prototype.isMobile = function (browserName) { var supportedMobileBrowserNames = ["iphone", "ipad", "android", "androidphone", "androidtablet"], From 9f13e5ad945c77fd48419cfd686f50f18921d9e0 Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Wed, 14 May 2014 18:58:42 -0700 Subject: [PATCH 137/197] fix bugs about library loading for multiple descriptors import --- lib/session/sessionfactory.js | 6 +++++- lib/util/importmanager.js | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 31b9d8eb..d8bedbce 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -289,7 +289,11 @@ SessionFactory.prototype.getFactoryTests = function () { testData.browser = testJson.browser; } if (testData.params.lib) { - testInstanceLib = this.libManager.getAllTest(testData.params.lib, relativePath); + if (testData.relativePath) { + testInstanceLib = this.libManager.getAllTest(testData.params.lib, testData.relativePath); + } else { + testInstanceLib = this.libManager.getAllTest(testData.params.lib, relativePath); + } if (testInstanceLib) { if (descLib) { testData.params.lib = descLib + "," + testInstanceLib; diff --git a/lib/util/importmanager.js b/lib/util/importmanager.js index 733e0606..08f14537 100644 --- a/lib/util/importmanager.js +++ b/lib/util/importmanager.js @@ -112,7 +112,7 @@ ImportManager.prototype.processImportDescriptor = function(testDataPath, cwd, gr commonLib = importJson.commonlib; // Resolve commonLib - resolvedCommonLib += self.getResolvedCommonLib(commonLib, importedDescPath); + resolvedCommonLib += ((resolvedCommonLib.length > 0) ? "," : "") + self.getResolvedCommonLib(commonLib, importedDescPath); // Add tests if (importJson && importJson.dataprovider) { @@ -208,4 +208,4 @@ ImportManager.prototype.getResolvedCommonLib = function(commonLib, relPathDirNam }; -module.exports = ImportManager; \ No newline at end of file +module.exports = ImportManager; From e8f7eb170a7773922b4e1baf31affaaf3dc18ba9 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 15 May 2014 15:12:48 -0700 Subject: [PATCH 138/197] Syncing npm-shrinkwrap --- npm-shrinkwrap.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index afecc9d1..fdf5ef82 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,4 +1,5 @@ { + "name": "yahoo-arrow", "version": "0.3.0", "dependencies": { @@ -356,4 +357,5 @@ } } } -} + +} \ No newline at end of file From a561685130a95a7cbc9dd89632cfc3713382a2de Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Fri, 16 May 2014 14:06:24 -0700 Subject: [PATCH 139/197] add unit tests and test data for multiple descriptor importing --- lib/util/importmanager.js | 6 +++ .../importDescriptorWithTestLib.json | 37 ++++++++++++++ .../unit/lib/session/sessionfactory-tests.js | 19 ++++++++ .../session/testdata/lib/test-imported-lib.js | 18 +++++++ .../test_descriptor_importDescriptor.json | 44 +++++++++++++++++ .../baseDescriptorMultipleImport.json | 48 +++++++++++++++++++ .../importDescriptorWithLib2.json | 36 ++++++++++++++ tests/unit/lib/util/importmanager-tests.js | 32 +++++++++++++ 8 files changed, 240 insertions(+) create mode 100644 tests/unit/lib/session/importDescriptor/importDescriptorWithTestLib.json create mode 100644 tests/unit/lib/session/testdata/lib/test-imported-lib.js create mode 100644 tests/unit/lib/session/testdata/test_descriptor_importDescriptor.json create mode 100644 tests/unit/lib/util/importDescriptor/baseDescriptorMultipleImport.json create mode 100644 tests/unit/lib/util/importDescriptor/importDescriptorWithLib2.json diff --git a/lib/util/importmanager.js b/lib/util/importmanager.js index 08f14537..b7eca6cf 100644 --- a/lib/util/importmanager.js +++ b/lib/util/importmanager.js @@ -88,6 +88,12 @@ ImportManager.prototype.processImportDescriptor = function(testDataPath, cwd, gr for (i = 0; i < importDescriptorArr.length; i += 1) { + // testDataPath might full path, and might relatvie + // plan to convert pull path to relative path and avoid path join errors with cwd + if (testDataPath.substr(0, cwd.length) === cwd){ + testDataPath = path.relative(cwd, testDataPath); + } + // Resolve paths importingDescRelPath = path.dirname(testDataPath); diff --git a/tests/unit/lib/session/importDescriptor/importDescriptorWithTestLib.json b/tests/unit/lib/session/importDescriptor/importDescriptorWithTestLib.json new file mode 100644 index 00000000..e316ce15 --- /dev/null +++ b/tests/unit/lib/session/importDescriptor/importDescriptorWithTestLib.json @@ -0,0 +1,37 @@ +[ + { + "settings":[ "master" ], + + "name":"controllers", + + "commonlib" : "./imported-test-lib-1.js,./imported-test-lib-2.js", + + "config":{ + "baseUrl":"http://finance.yahoo.com" + }, + + "dataprovider":{ + + "imported test 1":{ + "group":"func", + "params":{ + "page":"$$config.baseUrl$$", + "test":"test.js", + "lib": "../testdata/lib/test-imported-lib.js" + } + }, + + "imported test 2":{ + "group":"smoke", + "params":{ + "page":"$$config.baseUrl$$", + "test":"test.js" + } + } + + } + }, + { + "settings":[ "environment:development" ] + } +] diff --git a/tests/unit/lib/session/sessionfactory-tests.js b/tests/unit/lib/session/sessionfactory-tests.js index 0243b55e..c11728a7 100644 --- a/tests/unit/lib/session/sessionfactory-tests.js +++ b/tests/unit/lib/session/sessionfactory-tests.js @@ -402,6 +402,25 @@ YUI.add('sessionfactory-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + name : "Call getFactoryTests with descriptor importing", + + testGetFactoryTestWithDescriptorImporting: function() { + Y.log("dir:" + __dirname); + var ss = new SessionFactory({"dimensions" : arrowRoot + "/config/dimensions.json", "arrowModuleRoot" : arrowRoot + "/", "arrDescriptor" : [__dirname + "/testdata/test_descriptor_importDescriptor.json"]}, {}), + t, + expectedLibPath = __dirname + "/testdata/lib/test-imported-lib.js"; + + global.workingDirectory = arrowRoot; + + t = ss.getFactoryTests(); + + A.areEqual(3, t.length, "There should be 3 test objects"); + A.areEqual(expectedLibPath, t[2].params.lib, "lib of imprted descriptor should be composed with correct relative path"); + } + })); + Y.Test.Runner.add(suite); diff --git a/tests/unit/lib/session/testdata/lib/test-imported-lib.js b/tests/unit/lib/session/testdata/lib/test-imported-lib.js new file mode 100644 index 00000000..b83286e7 --- /dev/null +++ b/tests/unit/lib/session/testdata/lib/test-imported-lib.js @@ -0,0 +1,18 @@ +YUI.add("import-lib", function(Y) { + + var Assert = Y.Assert; + + var self = Y.namespace("Media.Test").ImportTestLib = { + + testUrl : function(url) { + setTimeout(function() { + Y.log('[Logger] Browser now Loading URL [' + url + ']'); + window.open(targetUrl, '_self'); + }, timeout); + } + + }; + +}, "0.1", { + requires : ["test", "node"] +}); diff --git a/tests/unit/lib/session/testdata/test_descriptor_importDescriptor.json b/tests/unit/lib/session/testdata/test_descriptor_importDescriptor.json new file mode 100644 index 00000000..7cde31d1 --- /dev/null +++ b/tests/unit/lib/session/testdata/test_descriptor_importDescriptor.json @@ -0,0 +1,44 @@ +[ + { + "settings": [ "master" ], + "name" : "tabview", + "commonlib" : "lib/session/testdata/test-lib.js", + "config" :{ + "baseUrl" : "my.com", + "testsValue": "sometest.js" + }, + + "importDescriptor":[ + { + "path" : "../importDescriptor/importDescriptorWithTestLib.json", + "group" : "func" + } + ], + + "dataprovider" : { + + "base test 1" : { + "params" : { + "test" : "test-func.js", + "page" : "testMock.html" + }, + "group" : "unit" + }, + + "base test 2" : { + "params" : { + "test" : "$$config.testsValue$$", + "page" : "$$config.baseUrl$$/testMock.html" + }, + "group" : "func" + } + } + }, + { + "settings": [ "environment:development" ], + + "config" :{ + "baseUrl" : "http://dimensions.url.override.com" + } + } +] \ No newline at end of file diff --git a/tests/unit/lib/util/importDescriptor/baseDescriptorMultipleImport.json b/tests/unit/lib/util/importDescriptor/baseDescriptorMultipleImport.json new file mode 100644 index 00000000..ca5c40bb --- /dev/null +++ b/tests/unit/lib/util/importDescriptor/baseDescriptorMultipleImport.json @@ -0,0 +1,48 @@ +[ + { + "settings": [ "master" ], + "name" : "tabview", + "commonlib" : "./test-lib.js", + "config" :{ + "baseUrl" : "my.com", + "testsValue": "sometest.js" + }, + + "importDescriptor":[ + { + "path" : "./importDescriptorWithLib.json", + "group": "smoke" + }, + { + "path": "./importDescriptorWithLib2.json", + "group": "func" + } + ], + + "dataprovider" : { + + "base test 1" : { + "params" : { + "test" : "test-func.js", + "page" : "testMock.html" + }, + "group" : "unit" + }, + + "base test 2" : { + "params" : { + "test" : "$$config.testsValue$$", + "page" : "$$config.baseUrl$$/testMock.html" + }, + "group" : "func" + } + } + }, + { + "settings": [ "environment:development" ], + + "config" :{ + "baseUrl" : "http://dimensions.url.override.com" + } + } +] \ No newline at end of file diff --git a/tests/unit/lib/util/importDescriptor/importDescriptorWithLib2.json b/tests/unit/lib/util/importDescriptor/importDescriptorWithLib2.json new file mode 100644 index 00000000..34b0633d --- /dev/null +++ b/tests/unit/lib/util/importDescriptor/importDescriptorWithLib2.json @@ -0,0 +1,36 @@ +[ + { + "settings":[ "master" ], + + "name":"controllers", + + "commonlib" : "./imported-test-lib-3.js,./imported-test-lib-4.js", + + "config":{ + "baseUrl":"http://finance.yahoo.com" + }, + + "dataprovider":{ + + "imported test 3":{ + "group":"func", + "params":{ + "page":"$$config.baseUrl$$", + "test":"test.js" + } + }, + + "imported test 4":{ + "group":"smoke", + "params":{ + "page":"$$config.baseUrl$$", + "test":"test.js" + } + } + + } + }, + { + "settings":[ "environment:development" ] + } +] diff --git a/tests/unit/lib/util/importmanager-tests.js b/tests/unit/lib/util/importmanager-tests.js index 5d0bfcfc..24b85a11 100644 --- a/tests/unit/lib/util/importmanager-tests.js +++ b/tests/unit/lib/util/importmanager-tests.js @@ -227,6 +227,38 @@ YUI.add('importmanager-tests', function (Y) { })); + suite.add(new Y.Test.Case({ + + "Import descriptor - multiple descriptors import": function(){ + + var impMgr = new importManager(); + var baseDescriptorPath = '/tests/unit/lib/util/importDescriptor/baseDescriptorMultipleImport.json'; + var descriptorJson = fs.readFileSync(path.join(arrowRoot,baseDescriptorPath),'utf-8'); + descriptorJson = JSON.parse(descriptorJson); + var cwd = process.cwd(); + var group = ''; + + var processedDescJson = impMgr.processImportDescriptor(baseDescriptorPath, cwd, group, descriptorJson); + processedDescJson = JSON.stringify(processedDescJson); + + var expectedDescJson = "[{\"settings\":[\"master\"]," + + "\"name\":\"tabview\"," + + "\"commonlib\":\"./test-lib.js,/tests/unit/lib/util/importDescriptor/imported-test-lib.js,/tests/unit/lib/util/importDescriptor/imported-test-lib-2.js,/tests/unit/lib/util/importDescriptor/imported-test-lib-3.js,/tests/unit/lib/util/importDescriptor/imported-test-lib-4.js\"," + + "\"config\":{\"baseUrl\":\"my.com\",\"testsValue\":\"sometest.js\"}," + + "\"dataprovider\":" + + "{\"base test 1\":{\"params\":{\"test\":\"test-func.js\",\"page\":\"testMock.html\"},\"group\":\"unit\"}," + + "\"base test 2\":{\"params\":{\"test\":\"$$config.testsValue$$\",\"page\":\"$$config.baseUrl$$/testMock.html\"},\"group\":\"func\"}," + + "\"imported test 2\":{\"group\":\"\",\"params\":{\"page\":\"$$config.baseUrl$$\",\"test\":\"test.js\"},\"relativePath\":\"/tests/unit/lib/util/importDescriptor\"}," + + "\"imported test 3\":{\"group\":\"\",\"params\":{\"page\":\"$$config.baseUrl$$\",\"test\":\"test.js\"},\"relativePath\":\"/tests/unit/lib/util/importDescriptor\"}}}," + + "{\"settings\":[\"environment:development\"]," + + "\"config\":{\"baseUrl\":\"http://dimensions.url.override.com\"}}]"; + + Y.Assert.areEqual(expectedDescJson,processedDescJson, "Imported descriptor with base tests - JSON doesn't match"); + + } + + })); + Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); From 9f4862e7064a47059d65a00970db1c4f6de0e25b Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Fri, 16 May 2014 14:29:34 -0700 Subject: [PATCH 140/197] add samples for multiple descriptor importing --- demo/test/import-multiple-descriptor.json | 38 +++++++++++ demo/test/importTests/finance-descriptor.json | 65 +++++++++++++++++++ .../test/importTests/finance-descriptor2.json | 39 +++++++++++ 3 files changed, 142 insertions(+) create mode 100644 demo/test/import-multiple-descriptor.json create mode 100644 demo/test/importTests/finance-descriptor.json create mode 100644 demo/test/importTests/finance-descriptor2.json diff --git a/demo/test/import-multiple-descriptor.json b/demo/test/import-multiple-descriptor.json new file mode 100644 index 00000000..7747380b --- /dev/null +++ b/demo/test/import-multiple-descriptor.json @@ -0,0 +1,38 @@ +[ + { + "settings": [ "master" ], + + "name" : "tabview", + + "config" :{ + "baseUrl" : "http://finance.yahoo.com" + }, + + "importDescriptor":[ + { + "path" : "./importTests/finance-descriptor.json" + }, + { + "path" : "./importTests/finance-descriptor2.json" + } + ], + + "dataprovider" : { + + "dom_int" : { + "params" : { + "test" : "test-assert-1.js", + "page" : "$$config.baseUrl$$" + }, + "group" : "smoke" + } + + } + + }, + + { + "settings": [ "environment:development" ] + } + +] \ No newline at end of file diff --git a/demo/test/importTests/finance-descriptor.json b/demo/test/importTests/finance-descriptor.json new file mode 100644 index 00000000..13fb97b8 --- /dev/null +++ b/demo/test/importTests/finance-descriptor.json @@ -0,0 +1,65 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": { + "baseUrl": "http://finance.yahoo.com" + }, + + "dataprovider" : { + "Test YHOO Ticker" : { + "group" : "func", + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "yhoo\n" + } + }, + { + "test": "../test-quote.js", + "quote": "Yahoo! Inc. (YHOO)" + } + ] + } + }, + + "Test AAPL Ticker" : { + "group" : "smoke", + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "controller": "locator", + "params": { + "value": "#txtQuotes", + "text": "yhoo\n" + } + }, + { + "test": "../test-quote.js", + "quote": "Yahoo! Inc. (YHOO)" + } + ] + } + } + + } + }, + { + "settings": [ "environment:development" ] + } + +] + diff --git a/demo/test/importTests/finance-descriptor2.json b/demo/test/importTests/finance-descriptor2.json new file mode 100644 index 00000000..39504da0 --- /dev/null +++ b/demo/test/importTests/finance-descriptor2.json @@ -0,0 +1,39 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": { + "baseUrl": "http://finance.yahoo.com" + }, + + "dataprovider" : { + "Test Aseert" : { + "group" : "smoke", + "params" :{ + "test" : "../test-assert-2.js", + "page" : "$$config.baseUrl$$" + } + }, + + "Test Window Size" : { + "group" : "func", + "browser":"firefox", + "params" :{ + "page": "$$config.baseUrl$$", + "test": "../test-browser-size.js", + "windowSize": { + "width": "512", + "height": 512 + } + } + } + + } + }, + { + "settings": [ "environment:development" ] + } + +] \ No newline at end of file From 62f9d42b70de1a81a14dc659ba94302a433d5496 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 21 May 2014 14:16:26 -0700 Subject: [PATCH 141/197] Setting maxSockets to 200, removing agent=false --- lib/proxy/proxymanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 17a3fa9c..fe69bcc9 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -276,7 +276,7 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba handle = options.headers['protocol'] === 'https:' ? 'https' : 'http'; f_http = require('./../../ext-lib/follow_redirect_http.js')[handle]; - options.agent = false; + f_http.globalAgent.maxSockets = 200; proxy_request = f_http.request(options, function (proxy_response) { From 7677387fd19b4f7fbef78db84e1ba8b6f5f6bde7 Mon Sep 17 00:00:00 2001 From: Albert Jimenez Date: Wed, 28 May 2014 15:25:09 -0700 Subject: [PATCH 142/197] Properly formatted report log. Before: "11 Passed, 3 Failed , 1 skipped" After: "11 Passed, 3 Failed, 1 Skipped" --- lib/util/reportmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 2cbbf737..34fdbf60 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -158,7 +158,7 @@ ReportManager.prototype.showReportOnConsole = function (result, verbose) { } else { log("Passed ".green + result.name.blue + " on " + browser); } - log((result.passed + " Passed").green + ", " + (result.failed + " Failed ").red + ", " + (result.ignored + " skipped ").grey); + log((result.passed + " Passed").green + ", " + (result.failed + " Failed").red + ", " + (result.ignored + " Skipped ").grey); if (result.failed) { for (k in result) { suite = result[k]; From de36e3d0475f1384f09d7caed1b5b69e56db6fae Mon Sep 17 00:00:00 2001 From: Albert Jimenez Date: Wed, 28 May 2014 15:58:53 -0700 Subject: [PATCH 143/197] Update reportmanager.js --- lib/util/reportmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 34fdbf60..1b73eb0b 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -175,7 +175,7 @@ ReportManager.prototype.showReportOnConsole = function (result, verbose) { lastSuite = suite.name; } msg = test.message.split('\n'); - log(" " + test.name.bold.red + ":" + msg[0]); + log(" " + test.name.bold.red + ": " + msg[0]); for (m = 1; m < msg.length; m = m + 1) { log(" " + msg[m]); } From 6f594303b9df33d13413d0311587122776b974f9 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 29 May 2014 13:39:54 -0700 Subject: [PATCH 144/197] Syncing shrinkwrap --- npm-shrinkwrap.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index fdf5ef82..afecc9d1 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,5 +1,4 @@ { - "name": "yahoo-arrow", "version": "0.3.0", "dependencies": { @@ -357,5 +356,4 @@ } } } - -} \ No newline at end of file +} From bb6326e7535287a099c72ecd1482012d4a66186c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 29 May 2014 13:44:47 -0700 Subject: [PATCH 145/197] Syncing with master --- config/error-messages.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/error-messages.js b/config/error-messages.js index c1249be1..19ec0163 100644 --- a/config/error-messages.js +++ b/config/error-messages.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ @@ -56,4 +56,4 @@ var pathNotFound = "Path is not defined", empty = "", error = { } }; -module.exports = error; +module.exports = error; \ No newline at end of file From 0a9482eb29bec480118f33ba57731290f8426e7f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 29 May 2014 13:47:27 -0700 Subject: [PATCH 146/197] Syncing with master --- lib/util/capabilitymanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index c2977a7e..e409d21b 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -1,7 +1,7 @@ /*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ /* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ From ca17d8393fa80c10d6d382d834764c82c0eac53a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 29 May 2014 13:54:35 -0700 Subject: [PATCH 147/197] Syncing with master --- config/error-messages.js | 92 ++--- lib/util/capabilitymanager.js | 8 +- npm-shrinkwrap.json | 638 +++++++++++++++++----------------- 3 files changed, 369 insertions(+), 369 deletions(-) diff --git a/config/error-messages.js b/config/error-messages.js index 19ec0163..8b6ca5f9 100644 --- a/config/error-messages.js +++ b/config/error-messages.js @@ -1,59 +1,59 @@ /* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ var pathNotFound = "Path is not defined", empty = "", error = { - 1000 : { - name : 'EDIMENV', - text : 'The environment "{0}" is missing.\n' + - 'Please add environment "{0}" to dimensions file "{1}".', - 0 : empty, - 1 : pathNotFound - }, - 1001 : { - name : 'ECHKDIM', - text : "Please check dimensions file {0}. Wrong dimensions format : {1}", - 0 : pathNotFound, - 1 : "Dimensions is not defined" - }, - 1002 : { - name : 'EREPORT', - text : '{0} while collecting test result on testing page "{1}".\n{2}', - 0 : "Unknown error", - 1 : "page URL is not available", - 2 : empty - }, - 1003 : { - name : 'EDSCENV', - text : 'The settings {0} is missing.\n' + - 'Please add environment "{1}" to dimensions file "{2}"\n' + - 'or remove it from test descriptor file "{3}".', - 0 : empty, - 1 : empty, - 2 : pathNotFound, - 3 : pathNotFound - }, - 1004 : { - name : 'EUNDEF', + 1000 : { + name : 'EDIMENV', + text : 'The environment "{0}" is missing.\n' + + 'Please add environment "{0}" to dimensions file "{1}".', + 0 : empty, + 1 : pathNotFound + }, + 1001 : { + name : 'ECHKDIM', + text : "Please check dimensions file {0}. Wrong dimensions format : {1}", + 0 : pathNotFound, + 1 : "Dimensions is not defined" + }, + 1002 : { + name : 'EREPORT', + text : '{0} while collecting test result on testing page "{1}".\n{2}', + 0 : "Unknown error", + 1 : "page URL is not available", + 2 : empty + }, + 1003 : { + name : 'EDSCENV', + text : 'The settings {0} is missing.\n' + + 'Please add environment "{1}" to dimensions file "{2}"\n' + + 'or remove it from test descriptor file "{3}".', + 0 : empty, + 1 : empty, + 2 : pathNotFound, + 3 : pathNotFound + }, + 1004 : { + name : 'EUNDEF', text :'Issue with loading testing page {0}\n' + 'Possible cause :\n' + 'The page got redirected before completing the test, this happens if your page has auto-redirects ' + 'or your tests perform some UI action resulting into page change event. Please use a custom controller for these kind of issues.\n' + 'If you are already using custom controller, please check that you are using waitForElement(s) to ensure page is ready for executing test.\n' + - 'For Arrow Usage, please refer to https://github.com/yahoo/arrow/blob/master/docs/arrow_cookbook/README.rst', - 0 : empty - }, - 1005 : { - name : 'EDSCYCB', - text : 'YCB Variable Replacement Failed, Please check you descriptor file, {0}.\nError: {1}', - 0 : empty - }, - 1006 : { - name : 'ENULLARG', - text : 'Argument "{0}" is "{1}".' - } + 'For Arrow Usage, please refer to https://github.com/yahoo/arrow/blob/master/docs/arrow_cookbook/README.rst', + 0 : empty + }, + 1005 : { + name : 'EDSCYCB', + text : 'YCB Variable Replacement Failed, Please check you descriptor file, {0}.\nError: {1}', + 0 : empty + }, + 1006 : { + name : 'ENULLARG', + text : 'Argument "{0}" is "{1}".' + } }; -module.exports = error; \ No newline at end of file +module.exports = error; diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index e409d21b..1694e0b7 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -1,10 +1,10 @@ /*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ /* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. - * Copyrights licensed under the New BSD License. - * See the accompanying LICENSE file for terms. - */ +* Copyright (c) 2012, Yahoo! Inc. All rights reserved. +* Copyrights licensed under the New BSD License. +* See the accompanying LICENSE file for terms. +*/ var log4js = require("log4js"); var fs = require("fs"); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index afecc9d1..f0f48067 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,359 +1,359 @@ { - "name": "yahoo-arrow", - "version": "0.3.0", - "dependencies": { - "glob": { - "version": "3.1.11", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - }, - "graceful-fs": { - "version": "1.1.14" - }, - "inherits": { - "version": "1.0.0" - } + "name": "yahoo-arrow", + "version": "0.3.0", + "dependencies": { + "glob": { + "version": "3.1.11", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" } + } }, - "nopt": { - "version": "2.0.0", - "dependencies": { - "abbrev": { - "version": "1.0.4" - } - } + "graceful-fs": { + "version": "1.1.14" }, - "colors": { - "version": "0.6.0-1" - }, - "express": { - "version": "3.0.0", - "dependencies": { - "connect": { - "version": "2.6.0", - "dependencies": { - "qs": { - "version": "0.5.1" - }, - "formidable": { - "version": "1.0.11" - }, - "bytes": { - "version": "0.1.0" - }, - "send": { - "version": "0.0.4", - "dependencies": { - "mime": { - "version": "1.2.6" - } - } - }, - "pause": { - "version": "0.0.1" - } - } - }, - "commander": { - "version": "0.6.1" - }, - "range-parser": { - "version": "0.0.4" - }, - "mkdirp": { - "version": "0.3.3" - }, - "cookie": { - "version": "0.0.4" - }, - "crc": { - "version": "0.2.0" - }, - "fresh": { - "version": "0.1.0" - }, - "methods": { - "version": "0.0.1" - }, - "send": { - "version": "0.1.0", - "dependencies": { - "mime": { - "version": "1.2.6" - } - } - }, - "debug": { - "version": "0.7.2" + "inherits": { + "version": "1.0.0" + } + } + }, + "nopt": { + "version": "2.0.0", + "dependencies": { + "abbrev": { + "version": "1.0.4" + } + } + }, + "colors": { + "version": "0.6.0-1" + }, + "express": { + "version": "3.0.0", + "dependencies": { + "connect": { + "version": "2.6.0", + "dependencies": { + "qs": { + "version": "0.5.1" + }, + "formidable": { + "version": "1.0.11" + }, + "bytes": { + "version": "0.1.0" + }, + "send": { + "version": "0.0.4", + "dependencies": { + "mime": { + "version": "1.2.6" } + } + }, + "pause": { + "version": "0.0.1" } + } }, - "yui": { - "version": "3.8.0", - "dependencies": { - "request": { - "version": "2.9.202" - } - } + "commander": { + "version": "0.6.1" }, - "JSV": { - "version": "4.0.2" + "range-parser": { + "version": "0.0.4" }, - "log4js": { - "version": "0.5.1", - "dependencies": { - "async": { - "version": "0.1.15" - } + "mkdirp": { + "version": "0.3.3" + }, + "cookie": { + "version": "0.0.4" + }, + "crc": { + "version": "0.2.0" + }, + "fresh": { + "version": "0.1.0" + }, + "methods": { + "version": "0.0.1" + }, + "send": { + "version": "0.1.0", + "dependencies": { + "mime": { + "version": "1.2.6" } + } + }, + "debug": { + "version": "0.7.2" + } + } + }, + "yui": { + "version": "3.8.0", + "dependencies": { + "request": { + "version": "2.9.202" + } + } + }, + "JSV": { + "version": "4.0.2" + }, + "log4js": { + "version": "0.5.1", + "dependencies": { + "async": { + "version": "0.1.15" + } + } + }, + "clone": { + "version": "0.1.11" + }, + "useragent": { + "version": "1.1.0", + "dependencies": { + "yamlparser": { + "version": "0.0.2" }, - "clone": { - "version": "0.1.11" + "request": { + "version": "2.9.202" }, - "useragent": { - "version": "1.1.0", - "dependencies": { - "yamlparser": { - "version": "0.0.2" - }, - "request": { - "version": "2.9.202" - }, - "semver": { - "version": "1.0.14" + "semver": { + "version": "1.0.14" + } + } + }, + "istanbul": { + "version": "0.1.25", + "dependencies": { + "esprima": { + "version": "1.0.3" + }, + "escodegen": { + "version": "0.0.23", + "dependencies": { + "estraverse": { + "version": "0.0.4" + }, + "source-map": { + "version": "0.1.23", + "dependencies": { + "amdefine": { + "version": "0.0.5" } + } } + } }, - "istanbul": { - "version": "0.1.25", - "dependencies": { - "esprima": { - "version": "1.0.3" - }, - "escodegen": { - "version": "0.0.23", - "dependencies": { - "estraverse": { - "version": "0.0.4" - }, - "source-map": { - "version": "0.1.23", - "dependencies": { - "amdefine": { - "version": "0.0.5" - } - } - } - } - }, - "handlebars": { - "version": "1.0.12", - "dependencies": { - "optimist": { - "version": "0.3.7" - }, - "uglify-js": { - "version": "2.3.6", - "dependencies": { - "async": { - "version": "0.2.9" - }, - "source-map": { - "version": "0.1.23", - "dependencies": { - "amdefine": { - "version": "0.0.5" - } - } - } - } - } - } - }, - "fileset": { - "version": "0.1.5", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - } - } - }, - "which": { - "version": "1.0.5" - }, + "handlebars": { + "version": "1.0.12", + "dependencies": { + "optimist": { + "version": "0.3.7" + }, + "uglify-js": { + "version": "2.3.6", + "dependencies": { "async": { - "version": "0.1.22" - }, - "abbrev": { - "version": "1.0.4" + "version": "0.2.9" }, - "wordwrap": { - "version": "0.0.2" + "source-map": { + "version": "0.1.23", + "dependencies": { + "amdefine": { + "version": "0.0.5" + } + } } + } } + } }, - "uglify-js": { - "version": "1.3.4" - }, - "xml-writer": { - "version": "1.2.3" + "fileset": { + "version": "0.1.5", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" + } + } + } + } }, - "ycb": { - "version": "1.0.5" + "which": { + "version": "1.0.5" }, "async": { - "version": "0.2.9" + "version": "0.1.22" }, - "xml2js": { - "version": "0.1.14", - "dependencies": { - "sax": { - "version": "0.5.4" - } + "abbrev": { + "version": "1.0.4" + }, + "wordwrap": { + "version": "0.0.2" + } + } + }, + "uglify-js": { + "version": "1.3.4" + }, + "xml-writer": { + "version": "1.2.3" + }, + "ycb": { + "version": "1.0.5" + }, + "async": { + "version": "0.2.9" + }, + "xml2js": { + "version": "0.1.14", + "dependencies": { + "sax": { + "version": "0.5.4" + } + } + }, + "mkdirp": { + "version": "0.3.5" + }, + "selenium-webdriver": { + "version": "2.39.0" + }, + "underscore": { + "version": "1.6.0" + }, + "mocha": { + "version": "1.7.4", + "dependencies": { + "commander": { + "version": "0.6.1" + }, + "growl": { + "version": "1.6.1" + }, + "jade": { + "version": "0.26.3", + "dependencies": { + "mkdirp": { + "version": "0.3.0" } + } + }, + "diff": { + "version": "1.0.2" + }, + "debug": { + "version": "0.7.2" }, "mkdirp": { - "version": "0.3.5" + "version": "0.3.3" + }, + "ms": { + "version": "0.3.0" + } + } + }, + "jasmine-node": { + "version": "1.4.0", + "dependencies": { + "coffee-script": { + "version": "1.6.3" }, - "selenium-webdriver": { - "version": "2.39.0" + "jasmine-reporters": { + "version": "0.2.1" + }, + "requirejs": { + "version": "2.1.6" + }, + "walkdir": { + "version": "0.0.7" }, "underscore": { - "version": "1.6.0" + "version": "1.4.4" }, - "mocha": { - "version": "1.7.4", - "dependencies": { - "commander": { - "version": "0.6.1" - }, - "growl": { - "version": "1.6.1" - }, - "jade": { - "version": "0.26.3", - "dependencies": { - "mkdirp": { - "version": "0.3.0" - } - } - }, - "diff": { - "version": "1.0.2" - }, - "debug": { - "version": "0.7.2" - }, - "mkdirp": { - "version": "0.3.3" - }, - "ms": { - "version": "0.3.0" + "gaze": { + "version": "0.3.4", + "dependencies": { + "minimatch": { + "version": "0.2.12", + "dependencies": { + "lru-cache": { + "version": "2.3.0" + }, + "sigmund": { + "version": "1.0.0" } + } + }, + "fileset": { + "version": "0.1.5" } - }, - "jasmine-node": { - "version": "1.4.0", - "dependencies": { - "coffee-script": { - "version": "1.6.3" - }, - "jasmine-reporters": { - "version": "0.2.1" - }, - "requirejs": { - "version": "2.1.6" - }, - "walkdir": { - "version": "0.0.7" - }, - "underscore": { - "version": "1.4.4" - }, - "gaze": { - "version": "0.3.4", - "dependencies": { - "minimatch": { - "version": "0.2.12", - "dependencies": { - "lru-cache": { - "version": "2.3.0" - }, - "sigmund": { - "version": "1.0.0" - } - } - }, - "fileset": { - "version": "0.1.5" - } - } - } + } + } + } + }, + "qunitjs": { + "version": "1.11.0" + }, + "chai": { + "version": "1.5.0" + }, + "oauth": { + "version": "0.9.8" + }, + "cheerio": { + "version": "0.9.2", + "dependencies": { + "htmlparser2": { + "version": "2.6.0", + "dependencies": { + "domhandler": { + "version": "2.0.3" + }, + "domutils": { + "version": "1.0.1" + }, + "domelementtype": { + "version": "1.1.1" } + } }, - "qunitjs": { - "version": "1.11.0" - }, - "chai": { - "version": "1.5.0" - }, - "oauth": { - "version": "0.9.8" - }, - "cheerio": { - "version": "0.9.2", - "dependencies": { - "htmlparser2": { - "version": "2.6.0", - "dependencies": { - "domhandler": { - "version": "2.0.3" - }, - "domutils": { - "version": "1.0.1" - }, - "domelementtype": { - "version": "1.1.1" - } - } - }, - "underscore": { - "version": "1.4.4" - }, - "entities": { - "version": "0.3.0" - } - } + "underscore": { + "version": "1.4.4" }, - "cheerio-select": { - "version": "0.0.3", - "dependencies": { - "CSSselect": { - "version": "0.3.1", - "dependencies": { - "CSSwhat": { - "version": "0.2.0" - } - } - } + "entities": { + "version": "0.3.0" + } + } + }, + "cheerio-select": { + "version": "0.0.3", + "dependencies": { + "CSSselect": { + "version": "0.3.1", + "dependencies": { + "CSSwhat": { + "version": "0.2.0" } + } } + } } + } } From 04429f0bcb72a2f6fcc26b62106acde593799375 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 29 May 2014 14:20:45 -0700 Subject: [PATCH 148/197] Preparing for v0.6.3 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be300899..c57d5ed3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.3 + + * Fix to avoid ECONNRESET issue with Nodejs 10 [PR](https://github.com/yahoo/arrow/pull/250) + # 0.6.2 * Restarting phantomjs before retry, if it crashed while test execution [PR](https://github.com/yahoo/arrow/pull/243) [Issue](https://github.com/yahoo/arrow/issues/240) diff --git a/package.json b/package.json index 9b562210..e156113b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.2", + "version": "0.6.3", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From fc167217ed4524daed9aadcfd5c1be63df1b2fa5 Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Fri, 30 May 2014 14:28:51 -0700 Subject: [PATCH 149/197] update multi descriptors importing demo to trigger main problem of current version --- demo/test/import-multiple-descriptor.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/demo/test/import-multiple-descriptor.json b/demo/test/import-multiple-descriptor.json index 7747380b..eb7f79bd 100644 --- a/demo/test/import-multiple-descriptor.json +++ b/demo/test/import-multiple-descriptor.json @@ -10,10 +10,12 @@ "importDescriptor":[ { - "path" : "./importTests/finance-descriptor.json" + "path" : "./importTests/finance-descriptor.json", + "group" : ["func"] }, { - "path" : "./importTests/finance-descriptor2.json" + "path" : "./importTests/finance-descriptor2.json", + "group" : ["func"] } ], From 5376344a8b5a566233ff15c5e2180b97cb35281a Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Fri, 30 May 2014 16:31:30 -0700 Subject: [PATCH 150/197] fix an error while there is no commomLib, need to bypass resolvedCommonLib composing --- lib/util/importmanager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/util/importmanager.js b/lib/util/importmanager.js index b7eca6cf..f19df1bf 100644 --- a/lib/util/importmanager.js +++ b/lib/util/importmanager.js @@ -118,7 +118,9 @@ ImportManager.prototype.processImportDescriptor = function(testDataPath, cwd, gr commonLib = importJson.commonlib; // Resolve commonLib - resolvedCommonLib += ((resolvedCommonLib.length > 0) ? "," : "") + self.getResolvedCommonLib(commonLib, importedDescPath); + if (commonLib) { + resolvedCommonLib += ((resolvedCommonLib.length > 0) ? "," : "") + self.getResolvedCommonLib(commonLib, importedDescPath); + } // Add tests if (importJson && importJson.dataprovider) { From 634506ae3050791730879c429b338e981d633677 Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Mon, 2 Jun 2014 16:40:26 -0700 Subject: [PATCH 151/197] add a lib into test params which will cause lib path error --- demo/test/importTests/finance-descriptor2.json | 1 + 1 file changed, 1 insertion(+) diff --git a/demo/test/importTests/finance-descriptor2.json b/demo/test/importTests/finance-descriptor2.json index 39504da0..51b31d81 100644 --- a/demo/test/importTests/finance-descriptor2.json +++ b/demo/test/importTests/finance-descriptor2.json @@ -23,6 +23,7 @@ "params" :{ "page": "$$config.baseUrl$$", "test": "../test-browser-size.js", + "lib": "../test-lib.js", "windowSize": { "width": "512", "height": 512 From 55e148fc8aa8007b20b9eb4da17a8e954cbc6804 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 3 Jun 2014 09:35:59 -0700 Subject: [PATCH 152/197] don't lock down express 3.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ab4b8400..7ca2a615 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "glob": "3.1.11", "nopt": "2.0.0", "colors": "0.6.0-1", - "express": "3.0.0", + "express": "3.x", "yui": "3.8.0", "JSV": "4.0.2", "log4js": "0.5.1", From 888b69315a93d73cf552a327a092a9f515592795 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 3 Jun 2014 09:42:18 -0700 Subject: [PATCH 153/197] don't lock down mocha --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ca2a615..66a52ae8 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "selenium-webdriver": "2.39.0" }, "optionalDependencies": { - "mocha": "1.7.4", + "mocha": "~1.18.2", "jasmine-node": "1.4.0", "qunitjs": "1.11.0", "chai": "1.5.0", From 76f4da34b2c825d7c46da1eb7a6c47cd638da83c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 5 Jun 2014 18:10:50 -0700 Subject: [PATCH 154/197] Fix for supporting context with datadriven descriptors --- .../data-driven-context-descriptor.json | 52 ++++++++++++ demo/test/datadriven/test.js | 11 +++ lib/util/datadrivermanager.js | 82 +++++++++++++++++-- .../datadriven-descriptor-config-context.json | 57 +++++++++++++ .../unit/lib/util/datadrivermanager-tests.js | 50 ++++++++--- 5 files changed, 233 insertions(+), 19 deletions(-) create mode 100644 demo/test/datadriven/data-driven-context-descriptor.json create mode 100644 demo/test/datadriven/test.js create mode 100644 tests/unit/lib/util/datadriven-descriptor-config-context.json diff --git a/demo/test/datadriven/data-driven-context-descriptor.json b/demo/test/datadriven/data-driven-context-descriptor.json new file mode 100644 index 00000000..c5bfbbad --- /dev/null +++ b/demo/test/datadriven/data-driven-context-descriptor.json @@ -0,0 +1,52 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": [ + { + "finance": { + "baseUrl": "http://finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://yahoo.com" + } + } + ], + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "page": "$$config.baseUrl$$", + "test": "./test.js" + + } + + } + } + }, + { + "settings": [ "environment:development" ], + "config": [ + { + "finance": { + "baseUrl": "http://uk.finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://uk.yahoo.com" + } + } + ] + + } + +] \ No newline at end of file diff --git a/demo/test/datadriven/test.js b/demo/test/datadriven/test.js new file mode 100644 index 00000000..64ae7e27 --- /dev/null +++ b/demo/test/datadriven/test.js @@ -0,0 +1,11 @@ +YUI.add("assrt-tests", function(Y) { + var suite = new Y.Test.Suite("Assert Page test of the test"); + suite.add(new Y.Test.Case({ + "test assert": function() { + + Y.Assert.areEqual("1", "1"); + } + })); + + Y.Test.Runner.add(suite); +}, "0.1", {requires:["node","test"]}); diff --git a/lib/util/datadrivermanager.js b/lib/util/datadrivermanager.js index 38284918..00df55b7 100644 --- a/lib/util/datadrivermanager.js +++ b/lib/util/datadrivermanager.js @@ -18,8 +18,7 @@ function DataDriverManager() { } /** - * - * @param relativePath + * @param relativePath * @param descriptorJson * @returns {config} */ @@ -62,7 +61,7 @@ DataDriverManager.prototype.getConfigData = function (relativePath, descriptorJs DataDriverManager.prototype.processDataDriver = function (testDataPath, descriptorJson) { var - configArr, + baseConfigArr, self = this, descriptorArr = [], proc = self.mock || process, @@ -70,30 +69,95 @@ DataDriverManager.prototype.processDataDriver = function (testDataPath, descript i, descJson; - configArr = self.getConfigData(relativePath, descriptorJson); + baseConfigArr = self.getConfigData(relativePath, descriptorJson); - if (configArr && configArr.length > 0) { + if (baseConfigArr && baseConfigArr.length > 0) { // Error out if duplicate keys exist in config data try { - self.checkForDuplicateKeys(configArr); + self.checkForDuplicateKeys(baseConfigArr); } catch(e) { self.logger.error('Error while processing data driver for the descriptor:' + testDataPath + ' , Error ::' + e.message); proc.exit(1); } - for (i = 0; i < configArr.length; i += 1) { + // Iterate per config in the base config array + for (i = 0; i < baseConfigArr.length; i += 1) { descJson = clone(descriptorJson); - for (var key in configArr[i]) { - descJson[0]['config'] = configArr[i][key]; + + for (var key in baseConfigArr[i]) { + + // Set configuration for first element ( with "settings": [ "master" ] ) + var baseConfObj = baseConfigArr[i][key]; + descJson[0]['config'] = baseConfObj descJson[0]['dataDriverKey'] = key; + + // Set configuration for rest of the elements ( with "settings": [ "environment:testing" ] for e.g ) + for (var j = 1; j < descJson.length; j+=1) { + + var configArr = descJson[j].config; + + if (configArr && configArr instanceof Array) { + var confObj = getObjectForKey(configArr, key); + descJson[j]['config'] = (confObj ? confObj : baseConfObj); + } + } + } descriptorArr.push(descJson); } + /** + * + * + * If the input array is as below and key passed is "sports", + * [ + { + "news": { + "baseUrl" : "https://news.yahoo.com/", + "placeCls" : "lt", + "appCls" : "gta-news" + } + }, + { + "sports": { + "baseUrl" : "https://sports.yahoo.com/", + "placeCls" : "lt", + "appCls" : "gta-news" + } + } + ] + + it returns + { + "baseUrl" : "https://sports.yahoo.com/", + "placeCls" : "lt", + "appCls" : "gta-news" + } + + * @param jsonArr + * @param key + * @returns {*} + */ + function getObjectForKey(jsonArr, key) { + + if (jsonArr && jsonArr instanceof Array) { + + for (var i = 0 ; i < jsonArr.length; i+=1) { + + for (var k in jsonArr[i]) { + if (key === k) { + return jsonArr[i][k]; + } + } + } + + } + } + } else { self.logger.error('No configuration data found for the data driven descriptor..' + testDataPath); proc.exit(1); diff --git a/tests/unit/lib/util/datadriven-descriptor-config-context.json b/tests/unit/lib/util/datadriven-descriptor-config-context.json new file mode 100644 index 00000000..8ad603e1 --- /dev/null +++ b/tests/unit/lib/util/datadriven-descriptor-config-context.json @@ -0,0 +1,57 @@ +[ + { + "settings": [ "master" ], + + "name": "controllers", + + "config": [ + { + "finance": { + "baseUrl": "http://finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://yahoo.com" + } + } + ], + + "dataprovider" : { + + "Test Data Driven Descriptor" : { + "group" : "func", + + "params" :{ + + "scenario": [ + { + "page": "$$config.baseUrl$$" + }, + { + "test": "dummytest.js" + } + ] + } + + } + } + }, + { + "settings": [ "environment:development" ], + "config": [ + { + "finance": { + "baseUrl": "http://uk.finance.yahoo.com" + } + }, + { + "yahoo": { + "baseUrl": "http://uk.yahoo.com" + } + } + ] + } + +] + diff --git a/tests/unit/lib/util/datadrivermanager-tests.js b/tests/unit/lib/util/datadrivermanager-tests.js index e8d2f9f7..b582d77c 100644 --- a/tests/unit/lib/util/datadrivermanager-tests.js +++ b/tests/unit/lib/util/datadrivermanager-tests.js @@ -153,22 +153,52 @@ YUI.add('datadrivermanager-tests', function (Y) { descriptorJson, descriptorArr = []; - try { - descriptorJson = JSON.parse(descriptorJsonStr); - descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); + try { + descriptorJson = JSON.parse(descriptorJsonStr); + descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); + + Y.Assert.areEqual( 2, descriptorArr.length); + + var desc0 = '[{"settings":["master"],"name":"controllers","dataDriver":"./configdata.json","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://finance.yahoo.com"},"dataDriverKey":"finance"},{"settings":["environment:development"]}]'; + Y.Assert.areEqual(desc0, JSON.stringify(descriptorArr[0])); + + var desc1 = '[{"settings":["master"],"name":"controllers","dataDriver":"./configdata.json","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://yahoo.com"},"dataDriverKey":"yahoo"},{"settings":["environment:development"]}]'; + + Y.Assert.areEqual(desc1, JSON.stringify(descriptorArr[1])); + + }catch(e) { + Y.Assert.fail(e); + } + + }, + - var desc0 = '[{"settings":["master"],"name":"controllers - 0","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://finance.yahoo.com"}},{"settings":["environment:development"]}]'; - var desc1 = '[{"settings":["master"],"name":"controllers - 1","dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"config":{"baseUrl":"http://yahoo.com"}},{"settings":["environment:development"]}]'; + "process data driver with context": function() { - Y.Assert.areEqual(desc0, JSON.stringify(descriptorArr[0])); - Y.Assert.areEqual(desc1, JSON.stringify(descriptorArr[1])); + var + descPath = __dirname + '/datadriven-descriptor-config-context.json', + descriptorJsonStr = fs.readFileSync(descPath, 'utf-8'), + descriptorJson, + descriptorArr = []; - }catch(e) { + try { - } + descriptorJson = JSON.parse(descriptorJsonStr); + descriptorArr = dataDriverMgr.processDataDriver(descPath, descriptorJson); - Y.Assert.areEqual( 2, descriptorArr.length); + Y.Assert.areEqual( 2, descriptorArr.length); + var desc0 = '[{"settings":["master"],"name":"controllers","config":{"baseUrl":"http://finance.yahoo.com"},"dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"dataDriverKey":"finance"},{"settings":["environment:development"],"config":{"baseUrl":"http://uk.finance.yahoo.com"}}]'; + var desc1 = '[{"settings":["master"],"name":"controllers","config":{"baseUrl":"http://yahoo.com"},"dataprovider":{"Test Data Driven Descriptor":{"group":"func","params":{"scenario":[{"page":"$$config.baseUrl$$"},{"test":"dummytest.js"}]}}},"dataDriverKey":"yahoo"},{"settings":["environment:development"],"config":{"baseUrl":"http://uk.yahoo.com"}}]'; + + Y.Assert.areEqual(desc0, JSON.stringify(descriptorArr[0]), "Descriptor Array 0 value doesn't match"); + Y.Assert.areEqual(desc1, JSON.stringify(descriptorArr[1]) , "Descriptor Array 0 value doesn't match"); + + + + }catch(e) { + Y.Assert.fail(e); + } }, From c796c06b02e8aa20ea8db225eeeed0a307733891 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 5 Jun 2014 18:15:23 -0700 Subject: [PATCH 155/197] Renaming demo file --- ...context-descriptor.json => datadriven-context-descriptor.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename demo/test/datadriven/{data-driven-context-descriptor.json => datadriven-context-descriptor.json} (100%) diff --git a/demo/test/datadriven/data-driven-context-descriptor.json b/demo/test/datadriven/datadriven-context-descriptor.json similarity index 100% rename from demo/test/datadriven/data-driven-context-descriptor.json rename to demo/test/datadriven/datadriven-context-descriptor.json From 18eb735ffbe342935e2b3f9186e2142df06794cb Mon Sep 17 00:00:00 2001 From: Kenny Peng Date: Mon, 9 Jun 2014 15:37:24 -0700 Subject: [PATCH 156/197] update demo files for multiple descriptors import --- demo/test/import-multiple-descriptor.json | 2 +- .../test/importTests/finance-descriptor2.json | 2 +- demo/test/test-assert-3.js | 34 +++++++++++++++++++ lib/util/importmanager.js | 8 +++-- 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 demo/test/test-assert-3.js diff --git a/demo/test/import-multiple-descriptor.json b/demo/test/import-multiple-descriptor.json index eb7f79bd..19e097b6 100644 --- a/demo/test/import-multiple-descriptor.json +++ b/demo/test/import-multiple-descriptor.json @@ -23,7 +23,7 @@ "dom_int" : { "params" : { - "test" : "test-assert-1.js", + "test" : "test-assert-3.js", "page" : "$$config.baseUrl$$" }, "group" : "smoke" diff --git a/demo/test/importTests/finance-descriptor2.json b/demo/test/importTests/finance-descriptor2.json index 51b31d81..8363a395 100644 --- a/demo/test/importTests/finance-descriptor2.json +++ b/demo/test/importTests/finance-descriptor2.json @@ -12,7 +12,7 @@ "Test Aseert" : { "group" : "smoke", "params" :{ - "test" : "../test-assert-2.js", + "test" : "../test-assert-3.js", "page" : "$$config.baseUrl$$" } }, diff --git a/demo/test/test-assert-3.js b/demo/test/test-assert-3.js new file mode 100644 index 00000000..c6316501 --- /dev/null +++ b/demo/test/test-assert-3.js @@ -0,0 +1,34 @@ +YUI.add("MyAwesomeModule-tests", function (Y) { + 'use strict'; + + var suite = new Y.Test.Suite("Assertion Tests 3"); + + suite.add(new Y.Test.Module({ + + "name" : "Assertion Test 3", + "id": "ms-market-strip-0", + + "asserts" : { + "Logo Present" : { + "locator" : ".Carousel-Item", + "type" : "isNode" + }, + "Test Greater than" : { + "locator" : ".Carousel-Item", + "type" : "nodeCount", + "expected" : ">1", + "message" : "There should be more than 1 list items with class yuhead-com-link-item" + }, + "Test Less than" : { + "locator" : ".Carousel-Item", + "type" : "nodeCount", + "expected" : "<100", + "message" : "There should be more than 5 list items with class yuhead-com-link-item" + } + + } + })); + + Y.Test.Runner.add(suite); + +}, "0.1", {requires : ["test", "node", "html-module-lib", "dom-lib"]}); \ No newline at end of file diff --git a/lib/util/importmanager.js b/lib/util/importmanager.js index f19df1bf..956fc441 100644 --- a/lib/util/importmanager.js +++ b/lib/util/importmanager.js @@ -140,8 +140,12 @@ ImportManager.prototype.processImportDescriptor = function(testDataPath, cwd, gr descriptorJson[0].dataprovider = testObj; - if (resolvedCommonLib) { - descriptorJson[0].commonlib = descriptorJson[0].commonlib + ',' + resolvedCommonLib; + if (resolvedCommonLib) { + if (descriptorJson[0].commonlib) { + descriptorJson[0].commonlib = descriptorJson[0].commonlib + ',' + resolvedCommonLib; + } else { + descriptorJson[0].commonlib = resolvedCommonLib; + } } delete descriptorJson[0]['importDescriptor']; From abefc69a87cbb3b0cf9a992aeae1ab4612318f45 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 11 Jun 2014 23:35:31 -0700 Subject: [PATCH 157/197] Fixing reporting issue for data driven --- lib/session/sessionfactory.js | 2 +- lib/util/reportmanager.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 31b9d8eb..b02aafb8 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -187,7 +187,7 @@ SessionFactory.prototype.getFactoryTests = function () { for (j = 0; j < testJsonArr.length; j+=1) { testJson = testJsonArr[j]; - isDataDriven = testJson && (testJson.dataDriver || (testJson.config instanceof Array)); + isDataDriven = (testJson && testJson.dataDriverKey) ? true : false; descriptorPath = descFile; qualifiedDescriptorPath = descriptorPath; diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 1b73eb0b..24e0f58d 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -373,7 +373,7 @@ ReportManager.prototype.writeReports = function () { global.failedDescriptors.push({"desc" : this.reportObj.descriptor, "failures" : this.failCount, "dataDriverKey":this.reportObj.dataDriverKey}); } - log(("Test Report Summary for the descriptor::" + this.reportObj.descriptor).bold.magenta.toString()); + log(("Test Report Summary for the descriptor::" + this.reportObj.descriptor + ' ' + dataDriverKey).bold.magenta.toString()); logTestResults(this); @@ -398,8 +398,8 @@ ReportManager.prototype.writeReports = function () { log("\n*************************************************************************************"); log(" List of failed descriptors "); - for (i = 0; i < global.failedDescriptors.length; i += 1) { + if (global.failedDescriptors[i].desc && global.failedDescriptors[i].dataDriverKey) { log("\nFailed Data driven Descriptor Path : " + global.failedDescriptors[i].desc + " - for the data driver item '" + global.failedDescriptors[i].dataDriverKey + "'"); } else { From f2a90a2d82148f2370a4b1d12883418cf19f65b0 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 12 Jun 2014 17:59:35 -0700 Subject: [PATCH 158/197] Setting rejectUnauthorized to false for webservice controller --- lib/controller/webservice-controller.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/controller/webservice-controller.js b/lib/controller/webservice-controller.js index 1d552c32..a1665fe6 100644 --- a/lib/controller/webservice-controller.js +++ b/lib/controller/webservice-controller.js @@ -51,7 +51,8 @@ WebServiceController.prototype.execute = function(callback) { method: self.testParams.method || 'GET', headers: { // seems that user-agent is MUST to query YQL 'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31" - } + }, + rejectUnauthorized: false } // http or https? From 64e2d6c1154a4776c3310b164bbcc379b390afd9 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 12 Jun 2014 18:11:37 -0700 Subject: [PATCH 159/197] Preparing for v0.6.4 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c57d5ed3..7d05244f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +# 0.6.4 + + * Setting rejectUnauthorized to false for webservice controller [PR](https://github.com/yahoo/arrow/pull/266) + * Setting express version to 3.x and Mocha to ~1.18.2 [PR](https://github.com/yahoo/arrow/pull/252) + # 0.6.3 * Fix to avoid ECONNRESET issue with Nodejs 10 [PR](https://github.com/yahoo/arrow/pull/250) diff --git a/package.json b/package.json index b2f05272..abe26c32 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.3", + "version": "0.6.4", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 7b34676faeae06bafe605ae49ea1e69f385e59c3 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 13 Jun 2014 17:50:42 -0700 Subject: [PATCH 160/197] Fixing shrinkwrap --- npm-shrinkwrap.json | 790 +++++++++++++++++++++++++++++++++----------- 1 file changed, 602 insertions(+), 188 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index f0f48067..0687ffb9 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,155 +1,492 @@ { "name": "yahoo-arrow", - "version": "0.3.0", + "version": "0.6.4", "dependencies": { - "glob": { - "version": "3.1.11", + "JSV": { + "version": "4.0.2", + "from": "JSV@4.0.2" + }, + "async": { + "version": "0.2.10", + "from": "async@~0.2.5" + }, + "chai": { + "version": "1.5.0", + "from": "chai@1.5.0" + }, + "cheerio": { + "version": "0.9.2", + "from": "cheerio@0.9.2", "dependencies": { - "minimatch": { - "version": "0.2.12", + "htmlparser2": { + "version": "2.6.0", + "from": "htmlparser2@2.x", "dependencies": { - "lru-cache": { - "version": "2.3.0" + "domhandler": { + "version": "2.0.3", + "from": "domhandler@2.0" }, - "sigmund": { - "version": "1.0.0" + "domutils": { + "version": "1.0.1", + "from": "domutils@1.0" + }, + "domelementtype": { + "version": "1.1.1", + "from": "domelementtype@1" } } }, - "graceful-fs": { - "version": "1.1.14" - }, - "inherits": { - "version": "1.0.0" + "entities": { + "version": "0.5.0", + "from": "entities@0.x" } } }, - "nopt": { - "version": "2.0.0", + "cheerio-select": { + "version": "0.0.3", + "from": "cheerio-select@0.0.3", "dependencies": { - "abbrev": { - "version": "1.0.4" + "CSSselect": { + "version": "0.7.0", + "from": "CSSselect@0.x", + "dependencies": { + "CSSwhat": { + "version": "0.4.7", + "from": "CSSwhat@0.4" + }, + "domutils": { + "version": "1.4.3", + "from": "domutils@1.4", + "dependencies": { + "domelementtype": { + "version": "1.1.1", + "from": "domelementtype@1" + } + } + }, + "boolbase": { + "version": "1.0.0", + "from": "boolbase@~1.0.0" + }, + "nth-check": { + "version": "1.0.0", + "from": "nth-check@~1.0.0" + } + } } } }, + "clone": { + "version": "0.1.11", + "from": "clone@0.1.11" + }, "colors": { - "version": "0.6.0-1" + "version": "0.6.0-1", + "from": "colors@0.6.0-1" }, "express": { - "version": "3.0.0", + "version": "3.10.5", + "from": "express@3.x", + "resolved": "http://registry.npmjs.org/express/-/express-3.10.5.tgz", "dependencies": { + "buffer-crc32": { + "version": "0.2.1", + "from": "buffer-crc32@0.2.1" + }, "connect": { - "version": "2.6.0", + "version": "2.19.6", + "from": "connect@2.19.6", + "resolved": "http://registry.npmjs.org/connect/-/connect-2.19.6.tgz", "dependencies": { - "qs": { - "version": "0.5.1" + "basic-auth-connect": { + "version": "1.0.0", + "from": "basic-auth-connect@1.0.0" }, - "formidable": { - "version": "1.0.11" + "body-parser": { + "version": "1.3.1", + "from": "body-parser@1.3.1", + "resolved": "http://registry.npmjs.org/body-parser/-/body-parser-1.3.1.tgz", + "dependencies": { + "raw-body": { + "version": "1.1.6", + "from": "raw-body@1.1.6", + "resolved": "http://registry.npmjs.org/raw-body/-/raw-body-1.1.6.tgz" + } + } }, "bytes": { - "version": "0.1.0" + "version": "1.0.0", + "from": "bytes@1.0.0", + "resolved": "http://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz" + }, + "cookie-parser": { + "version": "1.1.0", + "from": "cookie-parser@1.1.0", + "resolved": "http://registry.npmjs.org/cookie-parser/-/cookie-parser-1.1.0.tgz" + }, + "compression": { + "version": "1.0.7", + "from": "compression@1.0.7", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.0.7.tgz", + "dependencies": { + "accepts": { + "version": "1.0.3", + "from": "accepts@1.0.3", + "resolved": "http://registry.npmjs.org/accepts/-/accepts-1.0.3.tgz", + "dependencies": { + "mime": { + "version": "1.2.11", + "from": "mime@~1.2.11" + }, + "negotiator": { + "version": "0.4.6", + "from": "negotiator@0.4.6", + "resolved": "http://registry.npmjs.org/negotiator/-/negotiator-0.4.6.tgz" + } + } + }, + "compressible": { + "version": "1.1.0", + "from": "compressible@1.1.0", + "resolved": "http://registry.npmjs.org/compressible/-/compressible-1.1.0.tgz" + } + } + }, + "connect-timeout": { + "version": "1.1.0", + "from": "connect-timeout@1.1.0", + "resolved": "http://registry.npmjs.org/connect-timeout/-/connect-timeout-1.1.0.tgz", + "dependencies": { + "debug": { + "version": "0.8.1", + "from": "debug@0.8.1" + } + } + }, + "csurf": { + "version": "1.2.1", + "from": "csurf@1.2.1", + "resolved": "http://registry.npmjs.org/csurf/-/csurf-1.2.1.tgz", + "dependencies": { + "csrf-tokens": { + "version": "1.0.4", + "from": "csrf-tokens@~1.0.2", + "resolved": "http://registry.npmjs.org/csrf-tokens/-/csrf-tokens-1.0.4.tgz", + "dependencies": { + "rndm": { + "version": "1.0.0", + "from": "rndm@1", + "resolved": "http://registry.npmjs.org/rndm/-/rndm-1.0.0.tgz" + }, + "uid2": { + "version": "0.0.3", + "from": "uid2@~0.0.2" + }, + "scmp": { + "version": "0.0.3", + "from": "scmp@~0.0.3" + } + } + } + } + }, + "errorhandler": { + "version": "1.0.2", + "from": "errorhandler@1.0.2", + "resolved": "http://registry.npmjs.org/errorhandler/-/errorhandler-1.0.2.tgz" + }, + "express-session": { + "version": "1.2.1", + "from": "express-session@1.2.1", + "resolved": "http://registry.npmjs.org/express-session/-/express-session-1.2.1.tgz", + "dependencies": { + "utils-merge": { + "version": "1.0.0", + "from": "utils-merge@1.0.0" + }, + "uid2": { + "version": "0.0.3", + "from": "uid2@0.0.3" + }, + "debug": { + "version": "0.8.1", + "from": "debug@0.8.1" + } + } + }, + "method-override": { + "version": "2.0.2", + "from": "method-override@2.0.2", + "resolved": "http://registry.npmjs.org/method-override/-/method-override-2.0.2.tgz" + }, + "morgan": { + "version": "1.1.1", + "from": "morgan@1.1.1", + "resolved": "http://registry.npmjs.org/morgan/-/morgan-1.1.1.tgz" + }, + "multiparty": { + "version": "3.2.8", + "from": "multiparty@3.2.8", + "resolved": "http://registry.npmjs.org/multiparty/-/multiparty-3.2.8.tgz", + "dependencies": { + "readable-stream": { + "version": "1.1.13-1", + "from": "readable-stream@~1.1.9", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "from": "core-util-is@~1.0.0" + }, + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1" + }, + "string_decoder": { + "version": "0.10.25-1", + "from": "string_decoder@~0.10.x" + }, + "inherits": { + "version": "2.0.1", + "from": "inherits@~2.0.1" + } + } + }, + "stream-counter": { + "version": "0.2.0", + "from": "stream-counter@~0.2.0" + } + } + }, + "on-headers": { + "version": "0.0.0", + "from": "on-headers@0.0.0", + "resolved": "http://registry.npmjs.org/on-headers/-/on-headers-0.0.0.tgz" + }, + "qs": { + "version": "0.6.6", + "from": "qs@0.6.6" + }, + "response-time": { + "version": "2.0.0", + "from": "response-time@2.0.0", + "resolved": "http://registry.npmjs.org/response-time/-/response-time-2.0.0.tgz" + }, + "serve-favicon": { + "version": "2.0.1", + "from": "serve-favicon@2.0.1", + "resolved": "http://registry.npmjs.org/serve-favicon/-/serve-favicon-2.0.1.tgz" + }, + "serve-index": { + "version": "1.1.1", + "from": "serve-index@1.1.1", + "resolved": "http://registry.npmjs.org/serve-index/-/serve-index-1.1.1.tgz", + "dependencies": { + "accepts": { + "version": "1.0.3", + "from": "accepts@1.0.3", + "resolved": "http://registry.npmjs.org/accepts/-/accepts-1.0.3.tgz", + "dependencies": { + "mime": { + "version": "1.2.11", + "from": "mime@~1.2.11" + }, + "negotiator": { + "version": "0.4.6", + "from": "negotiator@0.4.6", + "resolved": "http://registry.npmjs.org/negotiator/-/negotiator-0.4.6.tgz" + } + } + }, + "batch": { + "version": "0.5.0", + "from": "batch@0.5.0" + } + } }, - "send": { - "version": "0.0.4", + "serve-static": { + "version": "1.2.3", + "from": "serve-static@1.2.3", + "resolved": "http://registry.npmjs.org/serve-static/-/serve-static-1.2.3.tgz" + }, + "type-is": { + "version": "1.2.1", + "from": "type-is@1.2.1", + "resolved": "http://registry.npmjs.org/type-is/-/type-is-1.2.1.tgz", "dependencies": { - "mime": { - "version": "1.2.6" + "mime-types": { + "version": "1.0.0", + "from": "mime-types@1.0.0", + "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-1.0.0.tgz" } } }, + "vhost": { + "version": "1.0.0", + "from": "vhost@1.0.0" + }, "pause": { - "version": "0.0.1" + "version": "0.0.1", + "from": "pause@0.0.1" } } }, "commander": { - "version": "0.6.1" + "version": "1.3.2", + "from": "commander@1.3.2", + "dependencies": { + "keypress": { + "version": "0.1.0", + "from": "keypress@0.1.x" + } + } }, - "range-parser": { - "version": "0.0.4" + "debug": { + "version": "1.0.2", + "from": "debug@*", + "resolved": "http://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "dependencies": { + "ms": { + "version": "0.6.2", + "from": "ms@0.6.2" + } + } }, - "mkdirp": { - "version": "0.3.3" + "escape-html": { + "version": "1.0.1", + "from": "escape-html@1.0.1" }, - "cookie": { - "version": "0.0.4" + "methods": { + "version": "1.0.1", + "from": "methods@1.0.1" }, - "crc": { - "version": "0.2.0" + "mkdirp": { + "version": "0.5.0", + "from": "mkdirp@0.5.0", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "dependencies": { + "minimist": { + "version": "0.0.8", + "from": "minimist@0.0.8" + } + } }, - "fresh": { - "version": "0.1.0" + "parseurl": { + "version": "1.0.1", + "from": "parseurl@1.0.1" }, - "methods": { - "version": "0.0.1" + "proxy-addr": { + "version": "1.0.1", + "from": "proxy-addr@1.0.1", + "resolved": "http://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz", + "dependencies": { + "ipaddr.js": { + "version": "0.1.2", + "from": "ipaddr.js@0.1.2" + } + } + }, + "range-parser": { + "version": "1.0.0", + "from": "range-parser@1.0.0" }, "send": { - "version": "0.1.0", + "version": "0.4.3", + "from": "send@0.4.3", + "resolved": "http://registry.npmjs.org/send/-/send-0.4.3.tgz", "dependencies": { + "finished": { + "version": "1.2.2", + "from": "finished@1.2.2", + "resolved": "http://registry.npmjs.org/finished/-/finished-1.2.2.tgz", + "dependencies": { + "ee-first": { + "version": "1.0.3", + "from": "ee-first@1.0.3", + "resolved": "http://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz" + } + } + }, "mime": { - "version": "1.2.6" + "version": "1.2.11", + "from": "mime@1.2.11" } } }, - "debug": { - "version": "0.7.2" - } - } - }, - "yui": { - "version": "3.8.0", - "dependencies": { - "request": { - "version": "2.9.202" - } - } - }, - "JSV": { - "version": "4.0.2" - }, - "log4js": { - "version": "0.5.1", - "dependencies": { - "async": { - "version": "0.1.15" + "vary": { + "version": "0.1.0", + "from": "vary@0.1.0", + "resolved": "http://registry.npmjs.org/vary/-/vary-0.1.0.tgz" + }, + "cookie": { + "version": "0.1.2", + "from": "cookie@0.1.2" + }, + "fresh": { + "version": "0.2.2", + "from": "fresh@0.2.2" + }, + "cookie-signature": { + "version": "1.0.3", + "from": "cookie-signature@1.0.3" + }, + "merge-descriptors": { + "version": "0.0.2", + "from": "merge-descriptors@0.0.2", + "resolved": "http://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz" } } }, - "clone": { - "version": "0.1.11" - }, - "useragent": { - "version": "1.1.0", + "glob": { + "version": "3.1.11", + "from": "glob@3.1.11", "dependencies": { - "yamlparser": { - "version": "0.0.2" + "minimatch": { + "version": "0.2.14", + "from": "minimatch@0.2", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } }, - "request": { - "version": "2.9.202" + "graceful-fs": { + "version": "1.1.14", + "from": "graceful-fs@~1.1.2" }, - "semver": { - "version": "1.0.14" + "inherits": { + "version": "1.0.0", + "from": "inherits@1" } } }, "istanbul": { "version": "0.1.25", + "from": "istanbul@0.1.25", "dependencies": { "esprima": { - "version": "1.0.3" + "version": "1.0.4", + "from": "esprima@1.0.x" }, "escodegen": { - "version": "0.0.23", + "version": "0.0.28", + "from": "escodegen@0.0.x", "dependencies": { "estraverse": { - "version": "0.0.4" + "version": "1.3.2", + "from": "estraverse@~1.3.0" }, "source-map": { - "version": "0.1.23", + "version": "0.1.34", + "from": "source-map@>= 0.1.2", "dependencies": { "amdefine": { - "version": "0.0.5" + "version": "0.1.0", + "from": "amdefine@>=0.0.4" } } } @@ -157,21 +494,27 @@ }, "handlebars": { "version": "1.0.12", + "from": "handlebars@1.0.x", "dependencies": { "optimist": { - "version": "0.3.7" + "version": "0.3.7", + "from": "optimist@~0.3" }, "uglify-js": { "version": "2.3.6", + "from": "uglify-js@~2.3", "dependencies": { "async": { - "version": "0.2.9" + "version": "0.2.10", + "from": "async@~0.2.6" }, "source-map": { - "version": "0.1.23", + "version": "0.1.34", + "from": "source-map@~0.1.7", "dependencies": { "amdefine": { - "version": "0.0.5" + "version": "0.1.0", + "from": "amdefine@>=0.0.4" } } } @@ -181,177 +524,248 @@ }, "fileset": { "version": "0.1.5", + "from": "fileset@0.1.x", "dependencies": { "minimatch": { - "version": "0.2.12", + "version": "0.3.0", + "from": "minimatch@0.x", "dependencies": { "lru-cache": { - "version": "2.3.0" + "version": "2.5.0", + "from": "lru-cache@2" }, "sigmund": { - "version": "1.0.0" + "version": "1.0.0", + "from": "sigmund@~1.0.0" } } } } }, "which": { - "version": "1.0.5" + "version": "1.0.5", + "from": "which@1.0.x" }, "async": { - "version": "0.1.22" + "version": "0.1.22", + "from": "async@0.1.x" }, "abbrev": { - "version": "1.0.4" + "version": "1.0.5", + "from": "abbrev@1.0.x" }, "wordwrap": { - "version": "0.0.2" + "version": "0.0.2", + "from": "wordwrap@0.0.x" } } }, - "uglify-js": { - "version": "1.3.4" - }, - "xml-writer": { - "version": "1.2.3" - }, - "ycb": { - "version": "1.0.5" - }, - "async": { - "version": "0.2.9" + "jasmine-node": { + "version": "1.4.0", + "from": "jasmine-node@1.4.0", + "dependencies": { + "coffee-script": { + "version": "1.7.1", + "from": "coffee-script@>=1.0.1" + }, + "jasmine-reporters": { + "version": "0.4.1", + "from": "jasmine-reporters@>=0.2.0" + }, + "requirejs": { + "version": "2.1.14", + "from": "requirejs@>=0.27.1", + "resolved": "http://registry.npmjs.org/requirejs/-/requirejs-2.1.14.tgz" + }, + "walkdir": { + "version": "0.0.7", + "from": "walkdir@>= 0.0.1" + }, + "gaze": { + "version": "0.3.4", + "from": "gaze@~0.3.2", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@~0.2.9", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } + }, + "fileset": { + "version": "0.1.5", + "from": "fileset@~0.1.5" + } + } + } + } }, - "xml2js": { - "version": "0.1.14", + "log4js": { + "version": "0.5.1", + "from": "log4js@0.5.1", "dependencies": { - "sax": { - "version": "0.5.4" + "async": { + "version": "0.1.15", + "from": "async@0.1.15" } } }, "mkdirp": { - "version": "0.3.5" - }, - "selenium-webdriver": { - "version": "2.39.0" - }, - "underscore": { - "version": "1.6.0" + "version": "0.3.5", + "from": "mkdirp@0.3.5" }, "mocha": { - "version": "1.7.4", + "version": "1.18.2", + "from": "mocha@~1.18.2", "dependencies": { "commander": { - "version": "0.6.1" + "version": "2.0.0", + "from": "commander@2.0.0" }, "growl": { - "version": "1.6.1" + "version": "1.7.0", + "from": "growl@1.7.x" }, "jade": { "version": "0.26.3", + "from": "jade@0.26.3", "dependencies": { + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1" + }, "mkdirp": { - "version": "0.3.0" + "version": "0.3.0", + "from": "mkdirp@0.3.0" } } }, "diff": { - "version": "1.0.2" + "version": "1.0.7", + "from": "diff@1.0.7" }, "debug": { - "version": "0.7.2" - }, - "mkdirp": { - "version": "0.3.3" - }, - "ms": { - "version": "0.3.0" - } - } - }, - "jasmine-node": { - "version": "1.4.0", - "dependencies": { - "coffee-script": { - "version": "1.6.3" - }, - "jasmine-reporters": { - "version": "0.2.1" - }, - "requirejs": { - "version": "2.1.6" - }, - "walkdir": { - "version": "0.0.7" - }, - "underscore": { - "version": "1.4.4" + "version": "1.0.2", + "from": "debug@*", + "resolved": "http://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "dependencies": { + "ms": { + "version": "0.6.2", + "from": "ms@0.6.2" + } + } }, - "gaze": { - "version": "0.3.4", + "glob": { + "version": "3.2.3", + "from": "glob@3.2.3", + "resolved": "http://registry.npmjs.org/glob/-/glob-3.2.3.tgz", "dependencies": { "minimatch": { - "version": "0.2.12", + "version": "0.2.14", + "from": "minimatch@~0.2.11", "dependencies": { "lru-cache": { - "version": "2.3.0" + "version": "2.5.0", + "from": "lru-cache@2" }, "sigmund": { - "version": "1.0.0" + "version": "1.0.0", + "from": "sigmund@~1.0.0" } } }, - "fileset": { - "version": "0.1.5" + "graceful-fs": { + "version": "2.0.3", + "from": "graceful-fs@~2.0.0" + }, + "inherits": { + "version": "2.0.1", + "from": "inherits@2" } } } } }, + "nopt": { + "version": "2.0.0", + "from": "nopt@2.0.0", + "dependencies": { + "abbrev": { + "version": "1.0.5", + "from": "abbrev@1" + } + } + }, + "oauth": { + "version": "0.9.8", + "from": "oauth@0.9.8" + }, "qunitjs": { - "version": "1.11.0" + "version": "1.11.0", + "from": "qunitjs@1.11.0" }, - "chai": { - "version": "1.5.0" + "selenium-webdriver": { + "version": "2.39.0", + "from": "selenium-webdriver@2.39.0" }, - "oauth": { - "version": "0.9.8" + "uglify-js": { + "version": "1.3.4", + "from": "uglify-js@1.3.4" }, - "cheerio": { - "version": "0.9.2", + "underscore": { + "version": "1.6.0", + "from": "underscore@1.6.0" + }, + "useragent": { + "version": "1.1.0", + "from": "useragent@1.1.0", "dependencies": { - "htmlparser2": { - "version": "2.6.0", - "dependencies": { - "domhandler": { - "version": "2.0.3" - }, - "domutils": { - "version": "1.0.1" - }, - "domelementtype": { - "version": "1.1.1" - } - } + "yamlparser": { + "version": "0.0.2", + "from": "yamlparser@0.0.2" }, - "underscore": { - "version": "1.4.4" + "request": { + "version": "2.9.202", + "from": "request@2.9.202" }, - "entities": { - "version": "0.3.0" + "semver": { + "version": "1.0.14", + "from": "semver@1.0.14" } } }, - "cheerio-select": { - "version": "0.0.3", + "xml-writer": { + "version": "1.2.3", + "from": "xml-writer@1.2.3" + }, + "xml2js": { + "version": "0.1.14", + "from": "xml2js@0.1.14", "dependencies": { - "CSSselect": { - "version": "0.3.1", - "dependencies": { - "CSSwhat": { - "version": "0.2.0" - } - } + "sax": { + "version": "0.6.0", + "from": "sax@>=0.1.1" + } + } + }, + "ycb": { + "version": "1.0.5", + "from": "ycb@1.0.5" + }, + "yui": { + "version": "3.8.0", + "from": "yui@3.8.0", + "dependencies": { + "request": { + "version": "2.9.202", + "from": "request@2.9.202" } } } From 0dc07db2436a052d2e4158b9d9cffa3c5b7ad193 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 16 Jun 2014 10:05:47 -0700 Subject: [PATCH 161/197] Preparing for v0.6.5 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d05244f..9ec87c82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.5 + + * Fix for supporting context with datadriven descriptors and fixing shrinkwrap [PR](https://github.com/yahoo/arrow/pull/267) + # 0.6.4 * Setting rejectUnauthorized to false for webservice controller [PR](https://github.com/yahoo/arrow/pull/266) diff --git a/package.json b/package.json index abe26c32..25239f2a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.4", + "version": "0.6.5", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 3ed263cd60ac43e01e231fc3e95b899c99b7fe1a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 16 Jun 2014 14:29:23 -0700 Subject: [PATCH 162/197] Fixing screenshot path --- lib/session/testsession.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 8256413c..271ea0f4 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -266,8 +266,10 @@ TestSession.prototype.recordFailure = function (count, callback) { reportDir = ( global.reportFolder === '') ? arrowTargetDir :global.reportFolder; - if (testName) { - testName = "arrow-" + this.args.testName; + testName = "arrow-"; + + if (self.args && self.args.testName) { + testName += "arrow-" + self.args.testName; } else { testName = "arrow"; } From 639e215dd80d4d4339e712490d273a77fc64cfe7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 16 Jun 2014 14:37:14 -0700 Subject: [PATCH 163/197] Fixing testName --- lib/session/testsession.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 271ea0f4..da2f0efb 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -269,7 +269,7 @@ TestSession.prototype.recordFailure = function (count, callback) { testName = "arrow-"; if (self.args && self.args.testName) { - testName += "arrow-" + self.args.testName; + testName = "arrow-" + self.args.testName; } else { testName = "arrow"; } From 839b37d66d92ced29c84d0280d48c9140249a391 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 16 Jun 2014 14:53:42 -0700 Subject: [PATCH 164/197] Preparing for v0.6.6 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ec87c82..57c20737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.6 + + * Fix for screenshots getting overwritten if there are multiple test failures in one descriptor [PR](https://github.com/yahoo/arrow/pull/270) [Issue](https://github.com/yahoo/arrow/issues/269) + # 0.6.5 * Fix for supporting context with datadriven descriptors and fixing shrinkwrap [PR](https://github.com/yahoo/arrow/pull/267) diff --git a/package.json b/package.json index 25239f2a..64a5ae6f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.5", + "version": "0.6.6", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From bcba4353c9a4f6bb9cfb4e0ada11239a1f85e92c Mon Sep 17 00:00:00 2001 From: neversay Date: Tue, 17 Jun 2014 16:27:07 -0700 Subject: [PATCH 165/197] Add the capacity to record POST body and access it from proxy manager's records. --- lib/proxy/proxymanager.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index fe69bcc9..6c1a88e4 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -49,7 +49,7 @@ ProxyManager.prototype.recordTraffic = function(router, request, response) { if (router[reqHost] || router[onlyhost]) { if ((router[reqHost] && router[reqHost].record)) { - obj.push({"url": reqUrl, "headers": request.headers, "responseHeaders": response.headers, "method": request.method}); + obj.push({"url": reqUrl, "headers": request.headers, "responseHeaders": response.headers, "method": request.method, "body": request['body']}); global.proxyManager.record[self.proxyConfig] = obj; } @@ -269,6 +269,9 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba reqUrl = options.headers['reqUrl']; + // Try to setup a buffer for POST body to store. + request['body'] = {text:''}; + proxy_coverage = proxy_config.coverage || {}; needsClientCoverage = proxy_coverage.clientSideCoverage; passthroughurls = proxy_coverage.coverageExclude || []; @@ -465,6 +468,8 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba }); request.addListener('data', function (chunk) { + //Store the POST body into the body object for tracking later. + request['body']['text'] += chunk; proxy_request.write(chunk, 'binary'); }); From d91636eb26f2b95cfe4f8b1b7cc41ad7abd6a425 Mon Sep 17 00:00:00 2001 From: neversay Date: Tue, 24 Jun 2014 16:52:18 -0700 Subject: [PATCH 166/197] Add the setting for storing POST body. --- lib/proxy/proxymanager.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/proxy/proxymanager.js b/lib/proxy/proxymanager.js index 6c1a88e4..5b840c2c 100644 --- a/lib/proxy/proxymanager.js +++ b/lib/proxy/proxymanager.js @@ -21,7 +21,6 @@ function ProxyManager(proxyConfig, config) { this.logger = log4js.getLogger("ProxyManager"); global.proxyManager = {}; global.proxyManager.record = []; - this.proxyLogFile = this.getProxyLogFileName(); } @@ -264,13 +263,16 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba } } else { // to make compatible with old routeProxyConfig - var options, reqUrl, handle,f_http; + var options, reqUrl, handle,f_http, postBodyLimit = 0; options = self.getOptions(proxy_config.router || proxy_config, request); reqUrl = options.headers['reqUrl']; // Try to setup a buffer for POST body to store. - request['body'] = {text:''}; + if (proxy_config && proxy_config.storeBody) { + postBodyLimit = proxy_config && proxy_config.sizeLimit || 10240; + request['body'] = {text:''}; + } proxy_coverage = proxy_config.coverage || {}; needsClientCoverage = proxy_coverage.clientSideCoverage; @@ -469,7 +471,11 @@ ProxyManager.prototype.runRouterProxy = function (minPort, maxPort, host, callba request.addListener('data', function (chunk) { //Store the POST body into the body object for tracking later. - request['body']['text'] += chunk; + if (proxy_config && proxy_config.storeBody) { + if (postBodyLimit > request['body']['text'].length) { + request['body']['text'] = (request['body']['text'] + chunk).substring(0, postBodyLimit); + } + } proxy_request.write(chunk, 'binary'); }); From c010292806884be6578238fb247be9b8a3fac4fd Mon Sep 17 00:00:00 2001 From: neversay Date: Tue, 24 Jun 2014 16:59:59 -0700 Subject: [PATCH 167/197] Change document. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f6e6dfe1..b58e8109 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,12 @@ npm install -g yahoo-arrow * **--seleniumHost** : (optional) override selenium host url (example: --seleniumHost=http://host.com:port/wd/hub) * **--capabilities** : (optional) the name of a json file containing webdriver capabilities required by your project * **--startProxyServer** : (optional) true/false. Starts a proxy server, intercepting all selenium browser calls -* **--routerProxyConfig** : (optional) filePath. Expects a Json file, allows users to modify host and headers for all calls being made by browser. Also supports recording of select url calls ( if you mark "record" : true) +* **--routerProxyConfig** : (optional) filePath. Expects a Json file, allows users to modify host and headers for all calls being made by browser. Also supports recording of select url calls ( if you mark "record" : true), and also supports recording the body of POST request (if you mark "storeBody": true), the default limit size of post body is 10240 bytes, you can change it by assigning "sizeLimit" : {integer in byte}. Example Json : { + "storeBody" : true, + "sizeLimit": 4096, "router":{ "yahoo.com": { "newHost": "x.x.x.x (your new host ip/name)", From 51a7089c3f621323d0f7d2ca87ffd7d50c68389e Mon Sep 17 00:00:00 2001 From: neversay Date: Wed, 25 Jun 2014 15:00:05 -0700 Subject: [PATCH 168/197] First demo test for proxy with recording post body. --- demo/test/proxy-controller-postbody.js | 49 ++++++++++++++++++++++++ demo/test/proxy-postbody-descriptor.json | 32 ++++++++++++++++ demo/test/router-postbody.json | 8 ++++ demo/test/test-proxy-postbody.js | 32 ++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 demo/test/proxy-controller-postbody.js create mode 100644 demo/test/proxy-postbody-descriptor.json create mode 100644 demo/test/router-postbody.json create mode 100644 demo/test/test-proxy-postbody.js diff --git a/demo/test/proxy-controller-postbody.js b/demo/test/proxy-controller-postbody.js new file mode 100644 index 00000000..2ca6b4e7 --- /dev/null +++ b/demo/test/proxy-controller-postbody.js @@ -0,0 +1,49 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var util = require("util"); +var log4js = require("yahoo-arrow").log4js; +var Controller = require("yahoo-arrow").controller; + +function ProxyCustomController(testConfig, args, driver) { + Controller.call(this, testConfig, args, driver); + + this.logger = log4js.getLogger("ProxyCustomController"); +} +util.inherits(ProxyCustomController, Controller); + +ProxyCustomController.prototype.execute = function (callback) { + + var self = this, + page, + webdriver; + + if (this.driver.webdriver) { + + page = this.testParams.page; + webdriver = this.driver.webdriver; + + webdriver.get(page); + + webdriver.waitForElementPresent(webdriver.By.css("#yucsHead")).then(function () { + + var record = JSON.parse(self.getProxyRecord()); +console.log(record); + self.testParams.networkTrafficRecord = record; + self.driver.executeTest(self.testConfig, self.testParams, function (error, report) { + callback(); + }); + + }); + } else { + this.logger.fatal("Custom Controllers are currently only supported on Selenium Browsers"); + callback("Custom Controllers are currently only supported on Selenium Browsers"); + } +} + +module.exports = ProxyCustomController; diff --git a/demo/test/proxy-postbody-descriptor.json b/demo/test/proxy-postbody-descriptor.json new file mode 100644 index 00000000..9f01b7ce --- /dev/null +++ b/demo/test/proxy-postbody-descriptor.json @@ -0,0 +1,32 @@ +[ + { + "settings":[ "master" ], + + "name":"controllers", + + "startProxyServer" : true, + + "routerProxyConfig" : "./router-postbody.json", + + "config":{ + "baseUrl":"http://news.yahoo.com" + }, + + "dataprovider":{ + + "Test proxy Controller":{ + "group":"func", + "controller":"./proxy-controller-postbody.js", + "params":{ + "page":"$$config.baseUrl$$", + + "test":"./test-proxy-postbody.js" + + } + } + } + }, + { + "settings":[ "environment:development" ] + } +] diff --git a/demo/test/router-postbody.json b/demo/test/router-postbody.json new file mode 100644 index 00000000..d1466e35 --- /dev/null +++ b/demo/test/router-postbody.json @@ -0,0 +1,8 @@ +{ + "storeBody" : true, + "sizeLimit": 4096, + "geo.query.yahoo.com": { + "method": "POST", + "record": true + } +} diff --git a/demo/test/test-proxy-postbody.js b/demo/test/test-proxy-postbody.js new file mode 100644 index 00000000..c689b838 --- /dev/null +++ b/demo/test/test-proxy-postbody.js @@ -0,0 +1,32 @@ +/* + * Like other tests, this is a YUI test module + * + */ +YUI.add("test-proxy-postbody-tests", function (Y) { + + //We initialize the suite object as a YUI test suite and with a suite title + var suite = new Y.Test.Suite("Test for record:true"); + suite.add(new Y.Test.Case({ + + //testing headers host + "test the content of postbody": function () { + + var record = this.testParams.networkTrafficRecord, + i, hasPostBody = false; + + Y.Assert.isNotNull(record, "The value of network record is null"); + for (i = 0; i < record.length; i += 1) { + if (record[i].body && record[i].body.text) { + hasPostBody = true; + } + } + Y.Assert.isTrue(hasPostBody, "The POST BODY of all record should not be empty!"); + } + + + })); + + //Never "run" the tests, simply add them to the suite. Arrow takes care of running them + Y.Test.Runner.add(suite); +}, "0.1", {requires: ["test", "node"]}); + From a7778d60266b197fb1ee605e383b0be67ebb6709 Mon Sep 17 00:00:00 2001 From: neversay Date: Wed, 25 Jun 2014 15:33:47 -0700 Subject: [PATCH 169/197] Complete the test. --- demo/test/proxy-controller-postbody.js | 2 +- demo/test/test-proxy-postbody.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/test/proxy-controller-postbody.js b/demo/test/proxy-controller-postbody.js index 2ca6b4e7..54670fa1 100644 --- a/demo/test/proxy-controller-postbody.js +++ b/demo/test/proxy-controller-postbody.js @@ -33,7 +33,7 @@ ProxyCustomController.prototype.execute = function (callback) { webdriver.waitForElementPresent(webdriver.By.css("#yucsHead")).then(function () { var record = JSON.parse(self.getProxyRecord()); -console.log(record); + self.testParams.networkTrafficRecord = record; self.driver.executeTest(self.testConfig, self.testParams, function (error, report) { callback(); diff --git a/demo/test/test-proxy-postbody.js b/demo/test/test-proxy-postbody.js index c689b838..5b9af526 100644 --- a/demo/test/test-proxy-postbody.js +++ b/demo/test/test-proxy-postbody.js @@ -17,6 +17,7 @@ YUI.add("test-proxy-postbody-tests", function (Y) { Y.Assert.isNotNull(record, "The value of network record is null"); for (i = 0; i < record.length; i += 1) { if (record[i].body && record[i].body.text) { + Y.Assert.isTrue(record[i].body.text.indexOf('q=select') === 0, "The content of POST body should start with 'q=select' ! " + record[i].body.text); hasPostBody = true; } } From c1b9f9e42a70588e1ddc29ca51ed79906400b8e6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 7 Jul 2014 09:52:08 -0700 Subject: [PATCH 170/197] Preparing for v 0.6.7 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57c20737..ad7d80a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.7 + + * Add the capacity to record POST body and access it from proxy manager's record [PR](https://github.com/yahoo/arrow/pull/271) + # 0.6.6 * Fix for screenshots getting overwritten if there are multiple test failures in one descriptor [PR](https://github.com/yahoo/arrow/pull/270) [Issue](https://github.com/yahoo/arrow/issues/269) diff --git a/package.json b/package.json index 64a5ae6f..5ed4e583 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.6", + "version": "0.6.7", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From d11c70828c5477f6a39df0115881c20678fd4b93 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 17 Jul 2014 17:38:24 -0700 Subject: [PATCH 171/197] Updating capabilities for iOS --- lib/util/capabilitymanager.js | 8 +++++--- tests/unit/lib/util/capabilitymanager-tests.js | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 1694e0b7..9a2b5151 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -96,7 +96,7 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { var self = this, caps = { - "platform": "ANY", +// "platform": "ANY", "javascriptEnabled": true, "seleniumProtocol": "WebDriver" }; @@ -159,8 +159,10 @@ CapabilityManager.prototype.setMobileCaps = function(caps) { //extra properties required for appium //ios case if (browserName === "iphone" || browserName === "ipad") { - caps.device = browserName; - caps.app = "safari"; + + caps.platformName = "iOS"; + caps.deviceName = browserName; + caps.browserName = "Safari"; // Remove version property if set to latest if (caps.version === "latest") { diff --git a/tests/unit/lib/util/capabilitymanager-tests.js b/tests/unit/lib/util/capabilitymanager-tests.js index d645d9fd..1a24271a 100644 --- a/tests/unit/lib/util/capabilitymanager-tests.js +++ b/tests/unit/lib/util/capabilitymanager-tests.js @@ -145,8 +145,10 @@ YUI.add('capabilitymanager-tests', function(Y) { caps = cm.setMobileCaps(caps); - Y.Assert.areEqual('iphone',caps.device,"Caps device should be iphone"); - Y.Assert.areEqual('safari',caps.app,"Caps app should be safari"); + Y.Assert.areEqual('iphone',caps.deviceName,"Caps deviceName should be iphone"); + Y.Assert.areEqual('iOS',caps.platformName,"Caps platformName should be iOS"); + Y.Assert.areEqual('Safari',caps.browserName,"Caps browserName should be Safari"); + } })); From db40e3920807e6e6ddfcdcbb01bcba573613ce31 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Fri, 18 Jul 2014 09:11:58 -0700 Subject: [PATCH 172/197] Preparing for v0.6.8 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad7d80a7..bdbf85bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.8 + + * Updating capabilities for iOS [PR](https://github.com/yahoo/arrow/pull/275) + # 0.6.7 * Add the capacity to record POST body and access it from proxy manager's record [PR](https://github.com/yahoo/arrow/pull/271) diff --git a/package.json b/package.json index 5ed4e583..9e8063b4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.7", + "version": "0.6.8", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 6be7e3dbc246c443592ece0953b67c4dacf7a992 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 21 Jul 2014 11:49:57 -0700 Subject: [PATCH 173/197] Update README.md Adding maintenance note --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b58e8109..8f6b5024 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ + +***NOTE: This project is under maintenance mode and is not actively worked upon. We will only work on severe issues/bugs,if and when needed. Please feel free to fork it if you want to add a feature or make any enhancement. + #Arrow [![Build Status](https://secure.travis-ci.org/yahoo/arrow.png?branch=master)](http://travis-ci.org/yahoo/arrow)[![NPM version](https://badge.fury.io/js/yahoo-arrow.png)](http://badge.fury.io/js/yahoo-arrow) From 4100dbc4e96c93d9db4e1e4bd95ded399bb37142 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 21 Oct 2014 10:47:22 -0700 Subject: [PATCH 174/197] Updating contributors --- package.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 9e8063b4..354c1b85 100644 --- a/package.json +++ b/package.json @@ -23,16 +23,16 @@ "component": "Arrow" } }, - "author": "Pranav Verma ", + "author": "Pranav V", "contributors": [ - "Sushant Kumar ", - "Ivan Alonso ", - "Payal Shah ", - "Pranav Parikh ", - "Jintao Qiao ", - "Ji Liang ", - "Jun Wang ", - "Ares Huang " + "Sushant K", + "Ivan A", + "Payal S", + "Pranav P", + "Jintao Q", + "Ji L", + "Jun W", + "Ares H" ], "bin": { "arrow": "./index.js", From 0128b8a2da9ea79b842c46f151fe2176637ee606 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 4 Nov 2014 00:01:44 -0800 Subject: [PATCH 175/197] Adding support to show sauce labs report url in report --- config/config.js | 1 + lib/driver/selenium.js | 13 ++++- lib/util/arrowsetup.js | 6 +++ lib/util/reportmanager.js | 22 ++++++++- tests/unit/lib/driver/selenium-tests.js | 66 +++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 3 deletions(-) diff --git a/config/config.js b/config/config.js index 1df61f23..ef04d56a 100644 --- a/config/config.js +++ b/config/config.js @@ -9,6 +9,7 @@ var config = {}; // User default config config.seleniumHost = ""; config.phantomHost = "http://localhost:4445/wd/hub"; +config.sauceLabsHost = "http://ondemand.saucelabs.com:80/wd/hub"; config.context = ""; config.defaultAppHost = ""; config.logLevel = "INFO"; diff --git a/lib/driver/selenium.js b/lib/driver/selenium.js index 18862717..e5e55882 100644 --- a/lib/driver/selenium.js +++ b/lib/driver/selenium.js @@ -621,6 +621,10 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac webdriver.getCurrentUrl().then(function (u) { reportJson = JSON.parse(report); reportJson.currentUrl = u; + if (self.sauceLabsSessionId) { + reportJson.sauceLabsReportUrl = 'http://saucelabs.com/jobs/' + + self.sauceLabsSessionId; + } self.addReport(JSON.stringify(reportJson), caps); }, function(err) { self.logger.error('collectTestReport:webdriver.getCurrentUrl - ' + err); @@ -747,11 +751,18 @@ SeleniumDriver.prototype.executeTest = function (testConfig, testParams, callbac self.logger.debug("Minified Driver js: " + driverJs); } webdriver.getCapabilities().then(function (val) { - logger.debug(JSON.stringify(val)); if (!val) { self.errorCallback(logger, "Unable to get a valid session, check your selenium config", callback); return; } + logger.debug(JSON.stringify(val)); + + if (self.config.isSauceLabs) { + if (val.caps_ && val.caps_['webdriver.remote.sessionid']) { + logger.debug('Got sauce labs session id'); + self.sauceLabsSessionId = val.caps_['webdriver.remote.sessionid']; + } + } caps = val; }); diff --git a/lib/util/arrowsetup.js b/lib/util/arrowsetup.js index 691e78f4..316c9ad5 100644 --- a/lib/util/arrowsetup.js +++ b/lib/util/arrowsetup.js @@ -385,6 +385,12 @@ ArrowSetup.prototype.setupSeleniumHost = function (cb) { // setup the selenium host using the auto hookup if possible wdHubHost = this.config["seleniumHost"]; + + // If using sauce labs, set isSauceLabs to true + if (wdHubHost.indexOf(self.config.sauceLabsHost) > -1) { + self.config.isSauceLabs = true; + } + if (0 === wdHubHost.length) { // check if we have a hooked up server try { diff --git a/lib/util/reportmanager.js b/lib/util/reportmanager.js index 24e0f58d..04abab30 100644 --- a/lib/util/reportmanager.js +++ b/lib/util/reportmanager.js @@ -107,7 +107,9 @@ ReportManager.prototype.parseYUIResults = function (testJson, dtName, self, scre timePerTest, className, testName, - screenShotPathsMsg; + screenShotPathsMsg, + sauceLabsReportMsg, + sauceLabsReportUrl; if (browser === "Other 0.0.0") { browser = "NodeJS"; @@ -130,10 +132,20 @@ ReportManager.prototype.parseYUIResults = function (testJson, dtName, self, scre testName = yuiSuiteName + "::" + yuiTestCaseName + "::" + testJson[l][m].name; if (testJson[l][m].result === "fail") { screenShotPathsMsg = ''; + sauceLabsReportMsg = ''; if (screenShotPaths) { screenShotPathsMsg = self.getScreenShotsMsg(screenShotPaths); } - self.addTest(timePerTest, className, testName, testJson[l][m].message + "." + "\n" + " URL :" + currentUrl + screenShotPathsMsg); + + if (testJson.sauceLabsReportUrl) { + sauceLabsReportUrl = testJson.sauceLabsReportUrl; + sauceLabsReportMsg = '\n\n\nSauce Labs Report : ' + sauceLabsReportUrl; + } + + self.addTest(timePerTest, className, testName, testJson[l][m].message + + "." + "\n" + " URL :" + + currentUrl + sauceLabsReportMsg + screenShotPathsMsg); + } else if (testJson[l][m].result === "pass") { self.addTest(timePerTest, className, testName); } else if (testJson[l][m].result === "ignore") { @@ -187,6 +199,12 @@ ReportManager.prototype.showReportOnConsole = function (result, verbose) { } } log(""); + + if (result.sauceLabsReportUrl) { + log("Sauce labs report: " + result.sauceLabsReportUrl); + log(""); + } + }; /** diff --git a/tests/unit/lib/driver/selenium-tests.js b/tests/unit/lib/driver/selenium-tests.js index 0dc18997..b1a372ef 100644 --- a/tests/unit/lib/driver/selenium-tests.js +++ b/tests/unit/lib/driver/selenium-tests.js @@ -257,6 +257,72 @@ YUI.add('selenium-tests', function (Y, NAME) { }); }, + 'test execute with page load w/ sauceLabs': function () { + var self = this, + driver, + config = { + browser: 'mybrowser', + seleniumHost: 'http://wdhub', + coverage: true, + isSauceLabs: true + }, + executed = false, + wdMock = require(arrowRoot + '/tests/unit/stub/webdriver'); + + wdMock.WebDriver.prototype.getCapabilities = function (cb) { + var self = this; + return { + then: function (cb) { + var Capabilities = function () { + }; + + Capabilities.prototype.set = function (caps) { + self.caps = caps; + }; + + Capabilities.prototype.get = function (key) { + var val; + if (self.caps.hasOwnProperty(key)) { + val = self.caps[key]; + } + return val; + + }; + + self.capabilities = new Capabilities(); + self.capabilities.set(self.caps); + self.capabilities.caps_ = {}; + self.capabilities.caps_['webdriver.remote.sessionid'] = + 'sauceSessionId'; + cb(self.capabilities); + + } + }; + }; + + mockery.registerMock('../util/wd-wrapper', wdMock); + mockery.enable({ useCleanCache: true }); + + driver = new DriverClass(config, {}); + driver.createDriverJs = function (params, cb) { + cb(null, 'driverjs'); + }; + + function validate() { + var actions = driver.getWebDriver()._actions; + A.isTrue(executed, 'Should have successfully executed test'); + A.areEqual(actions[0].value, 'http://page', 'Should have navigated before test'); + } + + driver.start(function (errMsg) { + var webdriver = driver.getWebDriver(); + webdriver.scriptResults['return ARROW.testReport;'] = '{"name": "functest", "failed": 0, "passed": 0}'; + driver.executeTest({}, {page: 'http://page', test: 'test.js', customController: false}, function (errMsg) { + executed = !errMsg; + validate(); + }); + }); + }, 'test execute with no page load': function () { var self = this, From 1cd876591fd3144a7e39b5ed522e1c730d13881a Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 6 Nov 2014 13:30:58 -0800 Subject: [PATCH 176/197] Upgrading version, adding changelog --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdbf85bb..1ac94fdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.9 + + * Adding support to show sauce labs report url in report [PR](https://github.com/yahoo/arrow/pull/278) + # 0.6.8 * Updating capabilities for iOS [PR](https://github.com/yahoo/arrow/pull/275) diff --git a/package.json b/package.json index 354c1b85..01131e4f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.8", + "version": "0.6.9", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 800ea8ba5e9d486fdae58d7c556281d267fd7407 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Thu, 6 Nov 2014 17:23:30 -0800 Subject: [PATCH 177/197] Upgrading node version to 0.10.33 from 0.10.1 in travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fbe9328f..2496d8b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - 0.8 - - 0.10.1 + - 0.10.33 before_install: - npm conf set strict-ssl false From ff523934ed0b22acdd89f1447b809e2e4203ff29 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 11 Nov 2014 22:44:57 -0800 Subject: [PATCH 178/197] Updating sauce labs dashboard with test results --- lib/session/testsession.js | 58 +++++++++++++++++++++++++++++++++++--- lib/util/sauceLabsUtil.js | 43 ++++++++++++++++++++++++++++ npm-shrinkwrap.json | 4 +++ package.json | 3 +- 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 lib/util/sauceLabsUtil.js diff --git a/lib/session/testsession.js b/lib/session/testsession.js index da2f0efb..88acd2bd 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -12,6 +12,8 @@ var fs = require('fs'); var path = require('path'); var FileUtil = require("../util/fileutil"); var SessionUtil = require("./sessionUtil"); +var SauceLabsUtil = require("../util/sauceLabsUtil"); +var CapabilityManager = require("../util/capabilityManager"); var existsSync = fs.existsSync || path.existsSync; var PhantomJsSetup = require("../util/phantomJsSetup.js"); @@ -142,12 +144,26 @@ TestSession.prototype.runTest = function (callback) { */ TestSession.prototype.retryTest = function (callback, error) { - var self = this; + var self = this, + isTestPassed, + isSauceLabs, + sauceLabsUtil; + self.retryCount += 1; + isTestPassed = error || self.isFail(); + isSauceLabs = self.config.isSauceLabs; + + var cm = new CapabilityManager(); + var browser = self.args["browser"] + || self.config["browser"]; + var capabilities = cm.getCapability(self.config.capabilities, + browser); + + // checking if there is a test failures : self.isFail() // or if there is a failure at controller level : error - if (error || self.isFail()) { + if (isTestPassed) { // if retryCount is provided, and retries are left for this test, lets record the failure and retry the test if (global.retryCount - self.retryCount >= 0) { self.logger.debug('Recording failure before retrying'); @@ -164,11 +180,45 @@ TestSession.prototype.retryTest = function (callback, error) { } else { self.logger.debug('Recording failure'); self.recordFailure(self.retryCount, function() { - self.driver.stop(callback, error); + if (isSauceLabs) { + + sauceLabsUtil = new SauceLabsUtil(); + + sauceLabsUtil.updateJobStatus({"passed":false, "name": self.args.testName},self.driver.sauceLabsSessionId, + capabilities.username, + capabilities.accessKey, + function(error){ + if (error) { + self.logger.debug('Error in updating sauce labs fail result status'); + } else { + self.logger.debug('Successfully updated sauce labs fail result status'); + } + self.driver.stop(callback, error); + }); + } else { + self.driver.stop(callback, error); + } }); } } else { - self.driver.stop(callback); + if (isSauceLabs) { + + sauceLabsUtil = new SauceLabsUtil(); + sauceLabsUtil.updateJobStatus({"passed":true, "name": self.args.testName},self.driver.sauceLabsSessionId, + capabilities.username, + capabilities.accessKey, + function(error){ + if (error) { + self.logger.debug('Error in updating sauce labs pass result status'); + } else { + self.logger.debug('Successfully updated sauce labs pass result status'); + } + self.driver.stop(callback, error); + }); + + } else { + self.driver.stop(callback); + } } }; diff --git a/lib/util/sauceLabsUtil.js b/lib/util/sauceLabsUtil.js new file mode 100644 index 00000000..07d9bcbe --- /dev/null +++ b/lib/util/sauceLabsUtil.js @@ -0,0 +1,43 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var SauceLabs = require('saucelabs'); +var log4js = require("log4js"); + +function SauceLabsUtil() { + this.logger = log4js.getLogger("SauceLabsUtil"); +} + +/** + * Update sauce labs job status + * @param result + * @param sessionId + * @param sauceUser + * @param sauceKey + * @param callback + */ +SauceLabsUtil.prototype.updateJobStatus = function(result, sessionId, sauceUser, + sauceKey, callback) { + + var sauceLabs = new SauceLabs({username: sauceUser, password: sauceKey}), + self = this; + + sauceLabs.updateJob(sessionId, result, function(err) { + if (err) { + callback(new Error('Error updating Sauce pass/fail status: ' + err)); + } + + self.logger.debug('Updated Sauce result successfully for session id' + + sessionId); + + callback(null); + }); + +} + +module.exports = SauceLabsUtil; \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 0687ffb9..8e170992 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -711,6 +711,10 @@ "version": "1.11.0", "from": "qunitjs@1.11.0" }, + "saucelabs": { + "version": "0.1.1", + "from": "saucelabs@" + }, "selenium-webdriver": { "version": "2.39.0", "from": "selenium-webdriver@2.39.0" diff --git a/package.json b/package.json index 01131e4f..0be39e6b 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", "underscore": "1.6.0", - "clone":"0.1.11" + "clone":"0.1.11", + "saucelabs": "0.1.1" }, "optionalDependencies": { "mocha": "~1.18.2", From 8df9c988defea8962246c2929efb0b89e50ad37c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 1 Dec 2014 01:36:56 -0800 Subject: [PATCH 179/197] Adding tests --- lib/session/testsession.js | 19 ++--- lib/util/sauceLabsUtil.js | 4 +- tests/unit/lib/util/sauceLabsUtil-tests.js | 92 ++++++++++++++++++++++ tests/unit/stub/SauceLabs.js | 11 +++ 4 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 tests/unit/lib/util/sauceLabsUtil-tests.js create mode 100644 tests/unit/stub/SauceLabs.js diff --git a/lib/session/testsession.js b/lib/session/testsession.js index 88acd2bd..e8f055aa 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -183,13 +183,13 @@ TestSession.prototype.retryTest = function (callback, error) { if (isSauceLabs) { sauceLabsUtil = new SauceLabsUtil(); - - sauceLabsUtil.updateJobStatus({"passed":false, "name": self.args.testName},self.driver.sauceLabsSessionId, + sauceLabsUtil.updateJobStatus({"passed":false, "name": self.args.testName}, + self.driver.sauceLabsSessionId, capabilities.username, capabilities.accessKey, - function(error){ - if (error) { - self.logger.debug('Error in updating sauce labs fail result status'); + function(err){ + if (err) { + self.logger.debug('Error in updating sauce labs fail result status - ' + err); } else { self.logger.debug('Successfully updated sauce labs fail result status'); } @@ -204,12 +204,13 @@ TestSession.prototype.retryTest = function (callback, error) { if (isSauceLabs) { sauceLabsUtil = new SauceLabsUtil(); - sauceLabsUtil.updateJobStatus({"passed":true, "name": self.args.testName},self.driver.sauceLabsSessionId, + sauceLabsUtil.updateJobStatus({"passed":true, "name": self.args.testName}, + self.driver.sauceLabsSessionId, capabilities.username, capabilities.accessKey, - function(error){ - if (error) { - self.logger.debug('Error in updating sauce labs pass result status'); + function(err){ + if (err) { + self.logger.debug('Error in updating sauce labs pass result status - ' + err); } else { self.logger.debug('Successfully updated sauce labs pass result status'); } diff --git a/lib/util/sauceLabsUtil.js b/lib/util/sauceLabsUtil.js index 07d9bcbe..ae4fa239 100644 --- a/lib/util/sauceLabsUtil.js +++ b/lib/util/sauceLabsUtil.js @@ -23,16 +23,16 @@ function SauceLabsUtil() { */ SauceLabsUtil.prototype.updateJobStatus = function(result, sessionId, sauceUser, sauceKey, callback) { - var sauceLabs = new SauceLabs({username: sauceUser, password: sauceKey}), self = this; sauceLabs.updateJob(sessionId, result, function(err) { if (err) { callback(new Error('Error updating Sauce pass/fail status: ' + err)); + return; } - self.logger.debug('Updated Sauce result successfully for session id' + self.logger.debug('Updated Sauce result successfully for session id - ' + sessionId); callback(null); diff --git a/tests/unit/lib/util/sauceLabsUtil-tests.js b/tests/unit/lib/util/sauceLabsUtil-tests.js new file mode 100644 index 00000000..70b10389 --- /dev/null +++ b/tests/unit/lib/util/sauceLabsUtil-tests.js @@ -0,0 +1,92 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true, nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +YUI.add('sauceLabsUtil-tests', function (Y) { + + var path = require('path'), + mockery = require('mockery'), + arrowRoot = path.join(__dirname, '../../../..'), + SauceLabsUtil, + suite = new Y.Test.Suite("SauceLabs Util test suite"), + sauceLabsUtil; + + suite.setUp = function () { + } + + suite.tearDown = function () { + mockery.disable(); + mockery.deregisterAll(); + } + + suite.add(new Y.Test.Case({ + "Update Job Status failed": function(){ + var result = + {"passed":true, "name": 'SauceTestName'}, + sessionId = 'SauceSessionId', + sauceUserName = 'Username', + sauceAccessKey = 'AccessKey'; + + var sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); + mockery.registerMock('saucelabs', sauceLabsMock); + mockery.enable(); + + SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'); + sauceLabsUtil = new SauceLabsUtil(); + + sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { + callback(new Error('error')); + }; + + sauceLabsUtil.updateJobStatus(result, + sessionId, + sauceUserName, + sauceAccessKey, + function (error){ + Y.Assert.isNotNull(error); + Y.Assert.areEqual(error.message,'Error updating Sauce pass/fail status: Error: error', + 'Error message does not match'); + mockery.deregisterMock('saucelabs'); + }); + } + + })); + + suite.add(new Y.Test.Case({ + "Update Job Status Passed": function(){ + var result = + {"passed":true, "name": 'SauceTestName'}, + sessionId = 'SauceSessionId', + sauceUserName = 'Username', + sauceAccessKey = 'AccessKey'; + + var sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); + mockery.registerMock('saucelabs', sauceLabsMock); + mockery.enable(); + + SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'); + sauceLabsUtil = new SauceLabsUtil(); + + sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { + callback(null); + }; + + sauceLabsUtil.updateJobStatus(result, + sessionId, + sauceUserName, + sauceAccessKey, + function (error){ + Y.Assert.isNull(error); + mockery.deregisterMock('saucelabs'); + }); + } + })); + + Y.Test.Runner.add(suite); + +}, '0.0.1', {requires:['test']}); + diff --git a/tests/unit/stub/SauceLabs.js b/tests/unit/stub/SauceLabs.js new file mode 100644 index 00000000..776509eb --- /dev/null +++ b/tests/unit/stub/SauceLabs.js @@ -0,0 +1,11 @@ +/* +* Copyright (c) 2012, Yahoo! Inc. All rights reserved. +* Copyrights licensed under the New BSD License. +* See the accompanying LICENSE file for terms. +*/ + +function SauceLabs() { +} + +module.exports = SauceLabs; + From eee08a8b3532208a2ab686c6db65ea318acc4a6e Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 1 Dec 2014 23:43:29 -0800 Subject: [PATCH 180/197] Adding tests, using common method for updating sauce results in testSession --- lib/session/testsession.js | 61 ++++++++++----- lib/util/sauceLabsUtil.js | 3 +- tests/unit/lib/session/testsession-tests.js | 30 ++++++++ tests/unit/lib/util/sauceLabsUtil-tests.js | 82 ++++++++++----------- tests/unit/stub/SauceLabs.js | 2 +- 5 files changed, 117 insertions(+), 61 deletions(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index e8f055aa..cb107a3b 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -146,8 +146,7 @@ TestSession.prototype.retryTest = function (callback, error) { var self = this, isTestPassed, - isSauceLabs, - sauceLabsUtil; + isSauceLabs; self.retryCount += 1; @@ -182,19 +181,15 @@ TestSession.prototype.retryTest = function (callback, error) { self.recordFailure(self.retryCount, function() { if (isSauceLabs) { - sauceLabsUtil = new SauceLabsUtil(); - sauceLabsUtil.updateJobStatus({"passed":false, "name": self.args.testName}, + self.updateSauceLabs(false, self.args.testName, self.driver.sauceLabsSessionId, capabilities.username, capabilities.accessKey, - function(err){ - if (err) { - self.logger.debug('Error in updating sauce labs fail result status - ' + err); - } else { - self.logger.debug('Successfully updated sauce labs fail result status'); - } + self.logger, + function(){ self.driver.stop(callback, error); }); + } else { self.driver.stop(callback, error); } @@ -203,17 +198,12 @@ TestSession.prototype.retryTest = function (callback, error) { } else { if (isSauceLabs) { - sauceLabsUtil = new SauceLabsUtil(); - sauceLabsUtil.updateJobStatus({"passed":true, "name": self.args.testName}, + self.updateSauceLabs(true, self.args.testName, self.driver.sauceLabsSessionId, capabilities.username, capabilities.accessKey, - function(err){ - if (err) { - self.logger.debug('Error in updating sauce labs pass result status - ' + err); - } else { - self.logger.debug('Successfully updated sauce labs pass result status'); - } + self.logger, + function(){ self.driver.stop(callback, error); }); @@ -223,6 +213,41 @@ TestSession.prototype.retryTest = function (callback, error) { } }; +/** + * Update sauce labs result + * @param passed + * @param testName + * @param sessionId + * @param username + * @param accessKey + * @param callback + */ +TestSession.prototype.updateSauceLabs = function(result, + testName, + sessionId, + username, + accessKey, + logger, + callback) { + + var sauceLabsUtil = new SauceLabsUtil(); + + sauceLabsUtil.updateJobStatus({"passed":result, "name": testName}, + sessionId, + username, + accessKey, + function(err){ + if (err) { + logger.debug('Error in updating sauce labs pass result status - ' + err); + } else { + logger.debug('Successfully updated sauce labs pass result status'); + } + // If failed to update sauce labs , log it but don't pass back + callback(null); + return; + }); +} + /** * Check for failures in test report * @returns {boolean} diff --git a/lib/util/sauceLabsUtil.js b/lib/util/sauceLabsUtil.js index ae4fa239..0f79bb69 100644 --- a/lib/util/sauceLabsUtil.js +++ b/lib/util/sauceLabsUtil.js @@ -32,10 +32,11 @@ SauceLabsUtil.prototype.updateJobStatus = function(result, sessionId, sauceUser, return; } - self.logger.debug('Updated Sauce result successfully for session id - ' + self.logger.debug('Updated result successfully to SauceLabs for session id - ' + sessionId); callback(null); + return; }); } diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 66321a5e..3d983cb0 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -346,6 +346,36 @@ YUI.add('testsession-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + name : "Update Sauce labs result", + + testUpdateSauceLabsPass: function() { + + var ts = new testSession({},{},null), + log4js = require("log4js"), + mockery = require('mockery'), + logger = log4js.getLogger("TestSession"), + sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); + + sauceLabsMock.prototype.updateJob = function(result, id, callback){ + callback(null); + } + + mockery.registerMock('saucelabs', sauceLabsMock); + mockery.enable(); + + ts.updateSauceLabs("pass","testName", "SessionId", "username", "accesskey", + logger, function(error){ + A.isNull(error); + mockery.deregisterMock('sauceLabs'); + mockery.disable(); + }); + + } + + })); + Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); diff --git a/tests/unit/lib/util/sauceLabsUtil-tests.js b/tests/unit/lib/util/sauceLabsUtil-tests.js index 70b10389..cf564f05 100644 --- a/tests/unit/lib/util/sauceLabsUtil-tests.js +++ b/tests/unit/lib/util/sauceLabsUtil-tests.js @@ -1,7 +1,7 @@ /*jslint forin:true sub:true anon:true, sloppy:true, stupid:true, nomen:true, node:true continue:true*/ /* - * Copyright (c) 2012, Yahoo! Inc. All rights reserved. + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ @@ -11,7 +11,6 @@ YUI.add('sauceLabsUtil-tests', function (Y) { var path = require('path'), mockery = require('mockery'), arrowRoot = path.join(__dirname, '../../../..'), - SauceLabsUtil, suite = new Y.Test.Suite("SauceLabs Util test suite"), sauceLabsUtil; @@ -29,17 +28,16 @@ YUI.add('sauceLabsUtil-tests', function (Y) { {"passed":true, "name": 'SauceTestName'}, sessionId = 'SauceSessionId', sauceUserName = 'Username', - sauceAccessKey = 'AccessKey'; + sauceAccessKey = 'AccessKey', + sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'), + SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'), + sauceLabsUtil = new SauceLabsUtil(); - var sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); mockery.registerMock('saucelabs', sauceLabsMock); mockery.enable(); - SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'); - sauceLabsUtil = new SauceLabsUtil(); - sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { - callback(new Error('error')); + callback('error'); }; sauceLabsUtil.updateJobStatus(result, @@ -48,45 +46,47 @@ YUI.add('sauceLabsUtil-tests', function (Y) { sauceAccessKey, function (error){ Y.Assert.isNotNull(error); - Y.Assert.areEqual(error.message,'Error updating Sauce pass/fail status: Error: error', - 'Error message does not match'); + console.log('***error****'); + console.log(error); + Y.Assert.isTrue(error.message.indexOf('Error updating Sauce pass/fail status') > -1, + "Error message does not match"); +// Y.Assert.areEqual(error.message,'Error updating Sauce pass/fail status: Error: error', +// 'Error message does not match 2'); mockery.deregisterMock('saucelabs'); }); } })); - suite.add(new Y.Test.Case({ - "Update Job Status Passed": function(){ - var result = - {"passed":true, "name": 'SauceTestName'}, - sessionId = 'SauceSessionId', - sauceUserName = 'Username', - sauceAccessKey = 'AccessKey'; - - var sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); - mockery.registerMock('saucelabs', sauceLabsMock); - mockery.enable(); - - SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'); - sauceLabsUtil = new SauceLabsUtil(); - - sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { - callback(null); - }; - - sauceLabsUtil.updateJobStatus(result, - sessionId, - sauceUserName, - sauceAccessKey, - function (error){ - Y.Assert.isNull(error); - mockery.deregisterMock('saucelabs'); - }); - } - })); +// suite.add(new Y.Test.Case({ +// "Update Job Status Passed": function(){ +// var result = +// {"passed":true, "name": 'SauceTestName'}, +// sessionId = 'SauceSessionId', +// sauceUserName = 'Username', +// sauceAccessKey = 'AccessKey', +// sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'), +// SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'), +// sauceLabsUtil = new SauceLabsUtil(); +// +// mockery.registerMock('saucelabs', sauceLabsMock); +// mockery.enable(); +// +// sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { +// callback(null); +// }; +// +// sauceLabsUtil.updateJobStatus(result, +// sessionId, +// sauceUserName, +// sauceAccessKey, +// function (error){ +// Y.Assert.isNull(error); +// mockery.deregisterMock('saucelabs'); +// }); +// } +// })); Y.Test.Runner.add(suite); -}, '0.0.1', {requires:['test']}); - +}, '0.0.1', {requires:['test']}); \ No newline at end of file diff --git a/tests/unit/stub/SauceLabs.js b/tests/unit/stub/SauceLabs.js index 776509eb..119f3f16 100644 --- a/tests/unit/stub/SauceLabs.js +++ b/tests/unit/stub/SauceLabs.js @@ -1,5 +1,5 @@ /* -* Copyright (c) 2012, Yahoo! Inc. All rights reserved. +* Copyright (c) 2014, Yahoo! Inc. All rights reserved. * Copyrights licensed under the New BSD License. * See the accompanying LICENSE file for terms. */ From 3a9b8cf67f59a3ebefef805b2635e6ed91371a16 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 1 Dec 2014 23:47:18 -0800 Subject: [PATCH 181/197] Cleanup --- tests/unit/lib/session/testsession-tests.js | 5 ---- tests/unit/lib/util/sauceLabsUtil-tests.js | 33 --------------------- 2 files changed, 38 deletions(-) diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 3d983cb0..3f567703 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -200,7 +200,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -245,7 +244,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -291,7 +289,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -337,7 +334,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -371,7 +367,6 @@ YUI.add('testsession-tests', function (Y) { mockery.deregisterMock('sauceLabs'); mockery.disable(); }); - } })); diff --git a/tests/unit/lib/util/sauceLabsUtil-tests.js b/tests/unit/lib/util/sauceLabsUtil-tests.js index cf564f05..63d32842 100644 --- a/tests/unit/lib/util/sauceLabsUtil-tests.js +++ b/tests/unit/lib/util/sauceLabsUtil-tests.js @@ -46,47 +46,14 @@ YUI.add('sauceLabsUtil-tests', function (Y) { sauceAccessKey, function (error){ Y.Assert.isNotNull(error); - console.log('***error****'); - console.log(error); Y.Assert.isTrue(error.message.indexOf('Error updating Sauce pass/fail status') > -1, "Error message does not match"); -// Y.Assert.areEqual(error.message,'Error updating Sauce pass/fail status: Error: error', -// 'Error message does not match 2'); mockery.deregisterMock('saucelabs'); }); } })); -// suite.add(new Y.Test.Case({ -// "Update Job Status Passed": function(){ -// var result = -// {"passed":true, "name": 'SauceTestName'}, -// sessionId = 'SauceSessionId', -// sauceUserName = 'Username', -// sauceAccessKey = 'AccessKey', -// sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'), -// SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'), -// sauceLabsUtil = new SauceLabsUtil(); -// -// mockery.registerMock('saucelabs', sauceLabsMock); -// mockery.enable(); -// -// sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { -// callback(null); -// }; -// -// sauceLabsUtil.updateJobStatus(result, -// sessionId, -// sauceUserName, -// sauceAccessKey, -// function (error){ -// Y.Assert.isNull(error); -// mockery.deregisterMock('saucelabs'); -// }); -// } -// })); - Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); \ No newline at end of file From 3f973e7dbb7db827cad67e64fa494132719db899 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 11 Nov 2014 22:44:57 -0800 Subject: [PATCH 182/197] Updating sauce labs dashboard with test results --- lib/session/testsession.js | 84 ++++++++++++++++++++- lib/util/sauceLabsUtil.js | 44 +++++++++++ npm-shrinkwrap.json | 4 + package.json | 3 +- tests/unit/lib/session/testsession-tests.js | 33 +++++++- tests/unit/lib/util/sauceLabsUtil-tests.js | 59 +++++++++++++++ tests/unit/stub/SauceLabs.js | 11 +++ 7 files changed, 229 insertions(+), 9 deletions(-) create mode 100644 lib/util/sauceLabsUtil.js create mode 100644 tests/unit/lib/util/sauceLabsUtil-tests.js create mode 100644 tests/unit/stub/SauceLabs.js diff --git a/lib/session/testsession.js b/lib/session/testsession.js index da2f0efb..cb107a3b 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -12,6 +12,8 @@ var fs = require('fs'); var path = require('path'); var FileUtil = require("../util/fileutil"); var SessionUtil = require("./sessionUtil"); +var SauceLabsUtil = require("../util/sauceLabsUtil"); +var CapabilityManager = require("../util/capabilityManager"); var existsSync = fs.existsSync || path.existsSync; var PhantomJsSetup = require("../util/phantomJsSetup.js"); @@ -142,12 +144,25 @@ TestSession.prototype.runTest = function (callback) { */ TestSession.prototype.retryTest = function (callback, error) { - var self = this; + var self = this, + isTestPassed, + isSauceLabs; + self.retryCount += 1; + isTestPassed = error || self.isFail(); + isSauceLabs = self.config.isSauceLabs; + + var cm = new CapabilityManager(); + var browser = self.args["browser"] + || self.config["browser"]; + var capabilities = cm.getCapability(self.config.capabilities, + browser); + + // checking if there is a test failures : self.isFail() // or if there is a failure at controller level : error - if (error || self.isFail()) { + if (isTestPassed) { // if retryCount is provided, and retries are left for this test, lets record the failure and retry the test if (global.retryCount - self.retryCount >= 0) { self.logger.debug('Recording failure before retrying'); @@ -164,14 +179,75 @@ TestSession.prototype.retryTest = function (callback, error) { } else { self.logger.debug('Recording failure'); self.recordFailure(self.retryCount, function() { - self.driver.stop(callback, error); + if (isSauceLabs) { + + self.updateSauceLabs(false, self.args.testName, + self.driver.sauceLabsSessionId, + capabilities.username, + capabilities.accessKey, + self.logger, + function(){ + self.driver.stop(callback, error); + }); + + } else { + self.driver.stop(callback, error); + } }); } } else { - self.driver.stop(callback); + if (isSauceLabs) { + + self.updateSauceLabs(true, self.args.testName, + self.driver.sauceLabsSessionId, + capabilities.username, + capabilities.accessKey, + self.logger, + function(){ + self.driver.stop(callback, error); + }); + + } else { + self.driver.stop(callback); + } } }; +/** + * Update sauce labs result + * @param passed + * @param testName + * @param sessionId + * @param username + * @param accessKey + * @param callback + */ +TestSession.prototype.updateSauceLabs = function(result, + testName, + sessionId, + username, + accessKey, + logger, + callback) { + + var sauceLabsUtil = new SauceLabsUtil(); + + sauceLabsUtil.updateJobStatus({"passed":result, "name": testName}, + sessionId, + username, + accessKey, + function(err){ + if (err) { + logger.debug('Error in updating sauce labs pass result status - ' + err); + } else { + logger.debug('Successfully updated sauce labs pass result status'); + } + // If failed to update sauce labs , log it but don't pass back + callback(null); + return; + }); +} + /** * Check for failures in test report * @returns {boolean} diff --git a/lib/util/sauceLabsUtil.js b/lib/util/sauceLabsUtil.js new file mode 100644 index 00000000..0f79bb69 --- /dev/null +++ b/lib/util/sauceLabsUtil.js @@ -0,0 +1,44 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +var SauceLabs = require('saucelabs'); +var log4js = require("log4js"); + +function SauceLabsUtil() { + this.logger = log4js.getLogger("SauceLabsUtil"); +} + +/** + * Update sauce labs job status + * @param result + * @param sessionId + * @param sauceUser + * @param sauceKey + * @param callback + */ +SauceLabsUtil.prototype.updateJobStatus = function(result, sessionId, sauceUser, + sauceKey, callback) { + var sauceLabs = new SauceLabs({username: sauceUser, password: sauceKey}), + self = this; + + sauceLabs.updateJob(sessionId, result, function(err) { + if (err) { + callback(new Error('Error updating Sauce pass/fail status: ' + err)); + return; + } + + self.logger.debug('Updated result successfully to SauceLabs for session id - ' + + sessionId); + + callback(null); + return; + }); + +} + +module.exports = SauceLabsUtil; \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 0687ffb9..8e170992 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -711,6 +711,10 @@ "version": "1.11.0", "from": "qunitjs@1.11.0" }, + "saucelabs": { + "version": "0.1.1", + "from": "saucelabs@" + }, "selenium-webdriver": { "version": "2.39.0", "from": "selenium-webdriver@2.39.0" diff --git a/package.json b/package.json index 01131e4f..0be39e6b 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "mkdirp": "0.3.5", "selenium-webdriver": "2.39.0", "underscore": "1.6.0", - "clone":"0.1.11" + "clone":"0.1.11", + "saucelabs": "0.1.1" }, "optionalDependencies": { "mocha": "~1.18.2", diff --git a/tests/unit/lib/session/testsession-tests.js b/tests/unit/lib/session/testsession-tests.js index 66321a5e..3f567703 100644 --- a/tests/unit/lib/session/testsession-tests.js +++ b/tests/unit/lib/session/testsession-tests.js @@ -200,7 +200,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -245,7 +244,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -291,7 +289,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -337,7 +334,6 @@ YUI.add('testsession-tests', function (Y) { try { var fileUtil = new FileUtil(); fileUtil.removeDirectory(path.resolve(process.cwd(), "myReport/arrow-target")); - console.log('Cleaned up arrow-target dir.'); } catch(e){ } @@ -346,6 +342,35 @@ YUI.add('testsession-tests', function (Y) { } })); + suite.add(new Y.Test.Case({ + + name : "Update Sauce labs result", + + testUpdateSauceLabsPass: function() { + + var ts = new testSession({},{},null), + log4js = require("log4js"), + mockery = require('mockery'), + logger = log4js.getLogger("TestSession"), + sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'); + + sauceLabsMock.prototype.updateJob = function(result, id, callback){ + callback(null); + } + + mockery.registerMock('saucelabs', sauceLabsMock); + mockery.enable(); + + ts.updateSauceLabs("pass","testName", "SessionId", "username", "accesskey", + logger, function(error){ + A.isNull(error); + mockery.deregisterMock('sauceLabs'); + mockery.disable(); + }); + } + + })); + Y.Test.Runner.add(suite); }, '0.0.1', {requires:['test']}); diff --git a/tests/unit/lib/util/sauceLabsUtil-tests.js b/tests/unit/lib/util/sauceLabsUtil-tests.js new file mode 100644 index 00000000..63d32842 --- /dev/null +++ b/tests/unit/lib/util/sauceLabsUtil-tests.js @@ -0,0 +1,59 @@ +/*jslint forin:true sub:true anon:true, sloppy:true, stupid:true, nomen:true, node:true continue:true*/ + +/* + * Copyright (c) 2014, Yahoo! Inc. All rights reserved. + * Copyrights licensed under the New BSD License. + * See the accompanying LICENSE file for terms. + */ + +YUI.add('sauceLabsUtil-tests', function (Y) { + + var path = require('path'), + mockery = require('mockery'), + arrowRoot = path.join(__dirname, '../../../..'), + suite = new Y.Test.Suite("SauceLabs Util test suite"), + sauceLabsUtil; + + suite.setUp = function () { + } + + suite.tearDown = function () { + mockery.disable(); + mockery.deregisterAll(); + } + + suite.add(new Y.Test.Case({ + "Update Job Status failed": function(){ + var result = + {"passed":true, "name": 'SauceTestName'}, + sessionId = 'SauceSessionId', + sauceUserName = 'Username', + sauceAccessKey = 'AccessKey', + sauceLabsMock = require(arrowRoot + '/tests/unit/stub/SauceLabs'), + SauceLabsUtil = require(arrowRoot + '/lib/util/sauceLabsUtil.js'), + sauceLabsUtil = new SauceLabsUtil(); + + mockery.registerMock('saucelabs', sauceLabsMock); + mockery.enable(); + + sauceLabsMock.prototype.updateJob = function(sessionId, result, callback) { + callback('error'); + }; + + sauceLabsUtil.updateJobStatus(result, + sessionId, + sauceUserName, + sauceAccessKey, + function (error){ + Y.Assert.isNotNull(error); + Y.Assert.isTrue(error.message.indexOf('Error updating Sauce pass/fail status') > -1, + "Error message does not match"); + mockery.deregisterMock('saucelabs'); + }); + } + + })); + + Y.Test.Runner.add(suite); + +}, '0.0.1', {requires:['test']}); \ No newline at end of file diff --git a/tests/unit/stub/SauceLabs.js b/tests/unit/stub/SauceLabs.js new file mode 100644 index 00000000..119f3f16 --- /dev/null +++ b/tests/unit/stub/SauceLabs.js @@ -0,0 +1,11 @@ +/* +* Copyright (c) 2014, Yahoo! Inc. All rights reserved. +* Copyrights licensed under the New BSD License. +* See the accompanying LICENSE file for terms. +*/ + +function SauceLabs() { +} + +module.exports = SauceLabs; + From cdaf9d2f619cd347593e9a670c4d38c97f5117f6 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 2 Dec 2014 00:03:46 -0800 Subject: [PATCH 183/197] Fixing require --- lib/session/testsession.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/session/testsession.js b/lib/session/testsession.js index cb107a3b..f16fdf2f 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -13,7 +13,7 @@ var path = require('path'); var FileUtil = require("../util/fileutil"); var SessionUtil = require("./sessionUtil"); var SauceLabsUtil = require("../util/sauceLabsUtil"); -var CapabilityManager = require("../util/capabilityManager"); +var CapabilityManager = require("../util/capabilitymanager"); var existsSync = fs.existsSync || path.existsSync; var PhantomJsSetup = require("../util/phantomJsSetup.js"); From 9f62bfb2129dfb9fd4909b7b1377854ac2b99986 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 2 Dec 2014 09:56:38 -0800 Subject: [PATCH 184/197] Preparing for v 0.6.10 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ac94fdb..5f6adabc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.10 + + * Update sauce labs dashboard with test results [PR](https://github.com/yahoo/arrow/pull/282) + # 0.6.9 * Adding support to show sauce labs report url in report [PR](https://github.com/yahoo/arrow/pull/278) diff --git a/package.json b/package.json index 0be39e6b..5c1b0334 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.9", + "version": "0.6.10", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 176fe50eab7b448fa60c4918138ab751ec9dbbec Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Sun, 8 Feb 2015 00:51:51 -0800 Subject: [PATCH 185/197] Adding support for passing sauce username and accesskey in capabilities --- config/config.js | 2 + lib/session/testsession.js | 7 ++- lib/util/capabilitymanager.js | 16 ++++++ lib/util/sauceLabsUtil.js | 2 +- .../unit/lib/util/capabilitymanager-tests.js | 50 +++++++++++++++++++ 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/config/config.js b/config/config.js index ef04d56a..c6388597 100644 --- a/config/config.js +++ b/config/config.js @@ -10,6 +10,8 @@ var config = {}; config.seleniumHost = ""; config.phantomHost = "http://localhost:4445/wd/hub"; config.sauceLabsHost = "http://ondemand.saucelabs.com:80/wd/hub"; +config.sauceUsername = ""; +config.sauceAccesskey = ""; config.context = ""; config.defaultAppHost = ""; config.logLevel = "INFO"; diff --git a/lib/session/testsession.js b/lib/session/testsession.js index f16fdf2f..62da4016 100644 --- a/lib/session/testsession.js +++ b/lib/session/testsession.js @@ -156,9 +156,8 @@ TestSession.prototype.retryTest = function (callback, error) { var cm = new CapabilityManager(); var browser = self.args["browser"] || self.config["browser"]; - var capabilities = cm.getCapability(self.config.capabilities, - browser); + var capabilities = cm.getCapabilities(self.args, self.config); // checking if there is a test failures : self.isFail() // or if there is a failure at controller level : error @@ -172,7 +171,7 @@ TestSession.prototype.retryTest = function (callback, error) { self.logger.info("\nRetrying Test, Attempt #" + self.retryCount); self.reRunSetup(function(){ self.runTest(callback); - }) + }); }); }); @@ -246,7 +245,7 @@ TestSession.prototype.updateSauceLabs = function(result, callback(null); return; }); -} +}; /** * Check for failures in test report diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 9a2b5151..0cb0b622 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -116,6 +116,9 @@ CapabilityManager.prototype.getCapabilities = function (args, config) { // Set mobile browser capabilities caps = self.setMobileCaps(caps); + // Set sauce capabilities + caps = self.setSauceCaps(caps, config); + // Process user capabilities caps = self.processUserCapabilities(caps, config); @@ -252,5 +255,18 @@ CapabilityManager.prototype.setBrowserCaps = function (caps, args, config) { }; +/** + * Set capabilities for Saucelabs + * @param {Object} caps + * @param {Object} config + */ +CapabilityManager.prototype.setSauceCaps = function (caps, config) { + if (config.isSauceLabs) { + this.logger.debug('Setting capabilities for Saucelabs'); + caps.username = config.sauceUsername || process.env.SAUCE_USERNAME; + caps.accessKey = config.sauceAccesskey || process.env.SAUCE_ACCESS_KEY; + } + return caps; +}; module.exports = CapabilityManager; \ No newline at end of file diff --git a/lib/util/sauceLabsUtil.js b/lib/util/sauceLabsUtil.js index 0f79bb69..de9fa3ad 100644 --- a/lib/util/sauceLabsUtil.js +++ b/lib/util/sauceLabsUtil.js @@ -39,6 +39,6 @@ SauceLabsUtil.prototype.updateJobStatus = function(result, sessionId, sauceUser, return; }); -} +}; module.exports = SauceLabsUtil; \ No newline at end of file diff --git a/tests/unit/lib/util/capabilitymanager-tests.js b/tests/unit/lib/util/capabilitymanager-tests.js index 1a24271a..b7cbd216 100644 --- a/tests/unit/lib/util/capabilitymanager-tests.js +++ b/tests/unit/lib/util/capabilitymanager-tests.js @@ -201,6 +201,56 @@ YUI.add('capabilitymanager-tests', function(Y) { } })); + suite.add(new Y.Test.Case({ + "Test Sauce capabilities - passed in config": function(){ + var args = {}, + caps = {}, + config = {}; + config.isSauceLabs = true; + config.sauceUsername = "sauceuser"; + config.sauceAccesskey = "saucekey"; + + caps = cm.setSauceCaps(caps, config); + + Y.Assert.areEqual('sauceuser',caps.username, "Capabilities username doesnt match when passed from config"); + Y.Assert.areEqual('saucekey',caps.accessKey, "Capabilities accesskey doesnt match when passed from config"); + } + })); + + suite.add(new Y.Test.Case({ + "Test Sauce capabilities - isSauceLabs false": function(){ + var args = {}, + caps = {}, + config = {}; + + config.isSauceLabs = false; + caps = cm.setSauceCaps(caps, config); + + Y.Assert.isUndefined(caps.username, "Capabilities username should be undefined"); + Y.Assert.isUndefined(caps.accessKey, "Capabilities accesskey should be undefined"); + } + })); + + + + suite.add(new Y.Test.Case({ + "Test Sauce capabilities - passed in environment": function(){ + var args = {}, + caps = {}, + config = {}; + config.isSauceLabs = true; + process.env.SAUCE_USERNAME = "sauceuser"; + process.env.SAUCE_ACCESS_KEY = "saucekey"; + + caps = cm.setSauceCaps(caps, config); + + Y.Assert.areEqual('sauceuser',caps.username, "Capabilities username doesnt match when passed from environment"); + Y.Assert.areEqual('saucekey',caps.accessKey, "Capabilities accesskey doesnt match when passed from environment"); + + delete process.env.SAUCE_USERNAME; + delete process.env.SAUCE_ACCESS_KEY; + } + })); Y.Test.Runner.add(suite); From a843b8f70e599f96d673138a9c2d9aa9891e5635 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Mon, 9 Feb 2015 13:13:16 -0800 Subject: [PATCH 186/197] Preparing for v0.6.11 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f6adabc..f08ad665 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.11 + + * Adding support for passing sauce username and accesskey in capabilities [PR](https://github.com/yahoo/arrow/pull/284) + # 0.6.10 * Update sauce labs dashboard with test results [PR](https://github.com/yahoo/arrow/pull/282) diff --git a/package.json b/package.json index 5c1b0334..0e1a795e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.10", + "version": "0.6.11", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From e861d7eb92edd81314397a93ae6ad991c8bd4c2f Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 25 Feb 2015 17:33:40 -0800 Subject: [PATCH 187/197] Adding support for specifying sauce tunnel --- lib/util/capabilitymanager.js | 7 +++++++ tests/unit/lib/util/capabilitymanager-tests.js | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/lib/util/capabilitymanager.js b/lib/util/capabilitymanager.js index 0cb0b622..5bbbe10f 100644 --- a/lib/util/capabilitymanager.js +++ b/lib/util/capabilitymanager.js @@ -265,6 +265,13 @@ CapabilityManager.prototype.setSauceCaps = function (caps, config) { this.logger.debug('Setting capabilities for Saucelabs'); caps.username = config.sauceUsername || process.env.SAUCE_USERNAME; caps.accessKey = config.sauceAccesskey || process.env.SAUCE_ACCESS_KEY; + caps['parent-tunnel'] = config.sauceTunnel || process.env.SAUCE_TUNNEL; + this.logger.debug("Sauce username :" + caps.username); + if (caps['parent-tunnel']) { + this.logger.debug("Sauce tunnel :" + caps['parent-tunnel']); + } else { + this.logger.debug("Not using Sauce tunnel"); + } } return caps; }; diff --git a/tests/unit/lib/util/capabilitymanager-tests.js b/tests/unit/lib/util/capabilitymanager-tests.js index b7cbd216..63a93fd1 100644 --- a/tests/unit/lib/util/capabilitymanager-tests.js +++ b/tests/unit/lib/util/capabilitymanager-tests.js @@ -209,11 +209,13 @@ YUI.add('capabilitymanager-tests', function(Y) { config.isSauceLabs = true; config.sauceUsername = "sauceuser"; config.sauceAccesskey = "saucekey"; + config.sauceTunnel = "sauceTunnel"; caps = cm.setSauceCaps(caps, config); Y.Assert.areEqual('sauceuser',caps.username, "Capabilities username doesnt match when passed from config"); Y.Assert.areEqual('saucekey',caps.accessKey, "Capabilities accesskey doesnt match when passed from config"); + Y.Assert.areEqual('sauceTunnel',caps['parent-tunnel'], "Capabilities parent-tunnel doesnt match when passed from config"); } })); @@ -228,6 +230,7 @@ YUI.add('capabilitymanager-tests', function(Y) { Y.Assert.isUndefined(caps.username, "Capabilities username should be undefined"); Y.Assert.isUndefined(caps.accessKey, "Capabilities accesskey should be undefined"); + Y.Assert.isUndefined(caps['parent-tunnel'], "Capabilities parent-tunnel should be undefined"); } })); @@ -241,11 +244,13 @@ YUI.add('capabilitymanager-tests', function(Y) { config.isSauceLabs = true; process.env.SAUCE_USERNAME = "sauceuser"; process.env.SAUCE_ACCESS_KEY = "saucekey"; + process.env.SAUCE_TUNNEL = "sauceTunnel"; caps = cm.setSauceCaps(caps, config); Y.Assert.areEqual('sauceuser',caps.username, "Capabilities username doesnt match when passed from environment"); Y.Assert.areEqual('saucekey',caps.accessKey, "Capabilities accesskey doesnt match when passed from environment"); + Y.Assert.areEqual('sauceTunnel',caps['parent-tunnel'], "Capabilities accesskey doesnt match when passed from environment"); delete process.env.SAUCE_USERNAME; delete process.env.SAUCE_ACCESS_KEY; From 91cf192d24f2ecf9b511db38e1df02948e549535 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 25 Feb 2015 17:40:09 -0800 Subject: [PATCH 188/197] Preparing for v0.6.12 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f08ad665..39a508ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +# 0.6.12 + + * Adding support for passing sauce tunnel in capabilities [PR](https://github.com/yahoo/arrow/pull/285) + # 0.6.11 * Adding support for passing sauce username and accesskey in capabilities [PR](https://github.com/yahoo/arrow/pull/284) diff --git a/package.json b/package.json index 0e1a795e..63ddadd7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.11", + "version": "0.6.12", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 0e6228d8724d7a33d71eaf3ea01cdcf6f161c89d Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 3 Mar 2015 16:30:01 -0800 Subject: [PATCH 189/197] Updating express to 4.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 63ddadd7..4b3c73f3 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "glob": "3.1.11", "nopt": "2.0.0", "colors": "0.6.0-1", - "express": "3.x", + "express": "4.x", "yui": "3.8.0", "JSV": "4.0.2", "log4js": "0.5.1", From 1cf1622f260408701747c09da1c81761f21b8f69 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 3 Mar 2015 17:08:26 -0800 Subject: [PATCH 190/197] Preparing for v0.6.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b3c73f3..6329387d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.12", + "version": "0.6.13", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 524bbcae35b3f680a6ee38c910d67aa0fae8fcbb Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Tue, 3 Mar 2015 17:09:48 -0800 Subject: [PATCH 191/197] Preparing for v0.6.13 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39a508ae..20d10aa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Change Log +# 0.6.13 + + * Updating Express to 4.x [PR](https://github.com/yahoo/arrow/pull/287) # 0.6.12 From 99a9f84498ce7d0b651dd25943077b3465363bfe Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 11:30:29 -0800 Subject: [PATCH 192/197] Updating shrinkwrap for express update --- npm-shrinkwrap.json | 462 +++++++++++++++----------------------------- package.json | 2 +- 2 files changed, 161 insertions(+), 303 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 8e170992..60153c4b 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -84,355 +84,213 @@ "version": "0.6.0-1", "from": "colors@0.6.0-1" }, - "express": { - "version": "3.10.5", - "from": "express@3.x", - "resolved": "http://registry.npmjs.org/express/-/express-3.10.5.tgz", + "express": { + "version": "4.12.2", + "from": "express@4.x", + "resolved": "https://registry.npmjs.org/express/-/express-4.12.2.tgz", "dependencies": { - "buffer-crc32": { - "version": "0.2.1", - "from": "buffer-crc32@0.2.1" - }, - "connect": { - "version": "2.19.6", - "from": "connect@2.19.6", - "resolved": "http://registry.npmjs.org/connect/-/connect-2.19.6.tgz", + "accepts": { + "version": "1.2.4", + "from": "accepts@~1.2.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.4.tgz", "dependencies": { - "basic-auth-connect": { - "version": "1.0.0", - "from": "basic-auth-connect@1.0.0" - }, - "body-parser": { - "version": "1.3.1", - "from": "body-parser@1.3.1", - "resolved": "http://registry.npmjs.org/body-parser/-/body-parser-1.3.1.tgz", - "dependencies": { - "raw-body": { - "version": "1.1.6", - "from": "raw-body@1.1.6", - "resolved": "http://registry.npmjs.org/raw-body/-/raw-body-1.1.6.tgz" - } - } - }, - "bytes": { - "version": "1.0.0", - "from": "bytes@1.0.0", - "resolved": "http://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz" - }, - "cookie-parser": { - "version": "1.1.0", - "from": "cookie-parser@1.1.0", - "resolved": "http://registry.npmjs.org/cookie-parser/-/cookie-parser-1.1.0.tgz" - }, - "compression": { - "version": "1.0.7", - "from": "compression@1.0.7", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.0.7.tgz", - "dependencies": { - "accepts": { - "version": "1.0.3", - "from": "accepts@1.0.3", - "resolved": "http://registry.npmjs.org/accepts/-/accepts-1.0.3.tgz", - "dependencies": { - "mime": { - "version": "1.2.11", - "from": "mime@~1.2.11" - }, - "negotiator": { - "version": "0.4.6", - "from": "negotiator@0.4.6", - "resolved": "http://registry.npmjs.org/negotiator/-/negotiator-0.4.6.tgz" - } - } - }, - "compressible": { - "version": "1.1.0", - "from": "compressible@1.1.0", - "resolved": "http://registry.npmjs.org/compressible/-/compressible-1.1.0.tgz" - } - } - }, - "connect-timeout": { - "version": "1.1.0", - "from": "connect-timeout@1.1.0", - "resolved": "http://registry.npmjs.org/connect-timeout/-/connect-timeout-1.1.0.tgz", - "dependencies": { - "debug": { - "version": "0.8.1", - "from": "debug@0.8.1" - } - } - }, - "csurf": { - "version": "1.2.1", - "from": "csurf@1.2.1", - "resolved": "http://registry.npmjs.org/csurf/-/csurf-1.2.1.tgz", - "dependencies": { - "csrf-tokens": { - "version": "1.0.4", - "from": "csrf-tokens@~1.0.2", - "resolved": "http://registry.npmjs.org/csrf-tokens/-/csrf-tokens-1.0.4.tgz", - "dependencies": { - "rndm": { - "version": "1.0.0", - "from": "rndm@1", - "resolved": "http://registry.npmjs.org/rndm/-/rndm-1.0.0.tgz" - }, - "uid2": { - "version": "0.0.3", - "from": "uid2@~0.0.2" - }, - "scmp": { - "version": "0.0.3", - "from": "scmp@~0.0.3" - } - } - } - } - }, - "errorhandler": { - "version": "1.0.2", - "from": "errorhandler@1.0.2", - "resolved": "http://registry.npmjs.org/errorhandler/-/errorhandler-1.0.2.tgz" - }, - "express-session": { - "version": "1.2.1", - "from": "express-session@1.2.1", - "resolved": "http://registry.npmjs.org/express-session/-/express-session-1.2.1.tgz", - "dependencies": { - "utils-merge": { - "version": "1.0.0", - "from": "utils-merge@1.0.0" - }, - "uid2": { - "version": "0.0.3", - "from": "uid2@0.0.3" - }, - "debug": { - "version": "0.8.1", - "from": "debug@0.8.1" - } - } - }, - "method-override": { - "version": "2.0.2", - "from": "method-override@2.0.2", - "resolved": "http://registry.npmjs.org/method-override/-/method-override-2.0.2.tgz" - }, - "morgan": { - "version": "1.1.1", - "from": "morgan@1.1.1", - "resolved": "http://registry.npmjs.org/morgan/-/morgan-1.1.1.tgz" - }, - "multiparty": { - "version": "3.2.8", - "from": "multiparty@3.2.8", - "resolved": "http://registry.npmjs.org/multiparty/-/multiparty-3.2.8.tgz", - "dependencies": { - "readable-stream": { - "version": "1.1.13-1", - "from": "readable-stream@~1.1.9", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "from": "core-util-is@~1.0.0" - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1" - }, - "string_decoder": { - "version": "0.10.25-1", - "from": "string_decoder@~0.10.x" - }, - "inherits": { - "version": "2.0.1", - "from": "inherits@~2.0.1" - } - } - }, - "stream-counter": { - "version": "0.2.0", - "from": "stream-counter@~0.2.0" - } - } - }, - "on-headers": { - "version": "0.0.0", - "from": "on-headers@0.0.0", - "resolved": "http://registry.npmjs.org/on-headers/-/on-headers-0.0.0.tgz" - }, - "qs": { - "version": "0.6.6", - "from": "qs@0.6.6" - }, - "response-time": { - "version": "2.0.0", - "from": "response-time@2.0.0", - "resolved": "http://registry.npmjs.org/response-time/-/response-time-2.0.0.tgz" - }, - "serve-favicon": { - "version": "2.0.1", - "from": "serve-favicon@2.0.1", - "resolved": "http://registry.npmjs.org/serve-favicon/-/serve-favicon-2.0.1.tgz" - }, - "serve-index": { - "version": "1.1.1", - "from": "serve-index@1.1.1", - "resolved": "http://registry.npmjs.org/serve-index/-/serve-index-1.1.1.tgz", + "mime-types": { + "version": "2.0.9", + "from": "mime-types@~2.0.9", "dependencies": { - "accepts": { - "version": "1.0.3", - "from": "accepts@1.0.3", - "resolved": "http://registry.npmjs.org/accepts/-/accepts-1.0.3.tgz", - "dependencies": { - "mime": { - "version": "1.2.11", - "from": "mime@~1.2.11" - }, - "negotiator": { - "version": "0.4.6", - "from": "negotiator@0.4.6", - "resolved": "http://registry.npmjs.org/negotiator/-/negotiator-0.4.6.tgz" - } - } - }, - "batch": { - "version": "0.5.0", - "from": "batch@0.5.0" + "mime-db": { + "version": "1.7.0", + "from": "mime-db@~1.7.0" } } }, - "serve-static": { - "version": "1.2.3", - "from": "serve-static@1.2.3", - "resolved": "http://registry.npmjs.org/serve-static/-/serve-static-1.2.3.tgz" - }, - "type-is": { - "version": "1.2.1", - "from": "type-is@1.2.1", - "resolved": "http://registry.npmjs.org/type-is/-/type-is-1.2.1.tgz", - "dependencies": { - "mime-types": { - "version": "1.0.0", - "from": "mime-types@1.0.0", - "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-1.0.0.tgz" - } - } - }, - "vhost": { - "version": "1.0.0", - "from": "vhost@1.0.0" - }, - "pause": { - "version": "0.0.1", - "from": "pause@0.0.1" + "negotiator": { + "version": "0.5.1", + "from": "negotiator@0.5.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.1.tgz" } } }, - "commander": { - "version": "1.3.2", - "from": "commander@1.3.2", - "dependencies": { - "keypress": { - "version": "0.1.0", - "from": "keypress@0.1.x" - } - } + "content-disposition": { + "version": "0.5.0", + "from": "content-disposition@0.5.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz" + }, + "content-type": { + "version": "1.0.1", + "from": "content-type@~1.0.1", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz" + }, + "cookie-signature": { + "version": "1.0.6", + "from": "cookie-signature@1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" }, "debug": { - "version": "1.0.2", - "from": "debug@*", - "resolved": "http://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "version": "2.1.2", + "from": "debug@~2.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.2.tgz", "dependencies": { "ms": { - "version": "0.6.2", - "from": "ms@0.6.2" + "version": "0.7.0", + "from": "ms@0.7.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz" } } }, + "depd": { + "version": "1.0.0", + "from": "depd@~1.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz" + }, "escape-html": { "version": "1.0.1", - "from": "escape-html@1.0.1" + "from": "escape-html@1.0.1", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz" }, - "methods": { - "version": "1.0.1", - "from": "methods@1.0.1" + "etag": { + "version": "1.5.1", + "from": "etag@~1.5.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz", + "dependencies": { + "crc": { + "version": "3.2.1", + "from": "crc@3.2.1", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz" + } + } }, - "mkdirp": { - "version": "0.5.0", - "from": "mkdirp@0.5.0", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "finalhandler": { + "version": "0.3.3", + "from": "finalhandler@0.3.3", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.3.tgz" + }, + "fresh": { + "version": "0.2.4", + "from": "fresh@0.2.4", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz" + }, + "merge-descriptors": { + "version": "1.0.0", + "from": "merge-descriptors@1.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz" + }, + "methods": { + "version": "1.1.1", + "from": "methods@~1.1.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz" + }, + "on-finished": { + "version": "2.2.0", + "from": "on-finished@~2.2.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz", "dependencies": { - "minimist": { - "version": "0.0.8", - "from": "minimist@0.0.8" + "ee-first": { + "version": "1.1.0", + "from": "ee-first@1.1.0", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz" } } }, "parseurl": { - "version": "1.0.1", - "from": "parseurl@1.0.1" + "version": "1.3.0", + "from": "parseurl@~1.3.0", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz" + }, + "path-to-regexp": { + "version": "0.1.3", + "from": "path-to-regexp@0.1.3", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz" }, "proxy-addr": { - "version": "1.0.1", - "from": "proxy-addr@1.0.1", - "resolved": "http://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz", + "version": "1.0.6", + "from": "proxy-addr@~1.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.6.tgz", "dependencies": { + "forwarded": { + "version": "0.1.0", + "from": "forwarded@~0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz" + }, "ipaddr.js": { - "version": "0.1.2", - "from": "ipaddr.js@0.1.2" + "version": "0.1.8", + "from": "ipaddr.js@0.1.8", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.8.tgz" } } }, + "qs": { + "version": "2.3.3", + "from": "qs@2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz" + }, "range-parser": { - "version": "1.0.0", - "from": "range-parser@1.0.0" + "version": "1.0.2", + "from": "range-parser@~1.0.2", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz" }, "send": { - "version": "0.4.3", - "from": "send@0.4.3", - "resolved": "http://registry.npmjs.org/send/-/send-0.4.3.tgz", + "version": "0.12.1", + "from": "send@0.12.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.12.1.tgz", "dependencies": { - "finished": { - "version": "1.2.2", - "from": "finished@1.2.2", - "resolved": "http://registry.npmjs.org/finished/-/finished-1.2.2.tgz", + "destroy": { + "version": "1.0.3", + "from": "destroy@1.0.3", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz" + }, + "mime": { + "version": "1.3.4", + "from": "mime@1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + }, + "ms": { + "version": "0.7.0", + "from": "ms@0.7.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz" + } + } + }, + "serve-static": { + "version": "1.9.1", + "from": "serve-static@~1.9.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.1.tgz" + }, + "type-is": { + "version": "1.6.0", + "from": "type-is@~1.6.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.0.tgz", + "dependencies": { + "media-typer": { + "version": "0.3.0", + "from": "media-typer@0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + }, + "mime-types": { + "version": "2.0.9", + "from": "mime-types@~2.0.9", "dependencies": { - "ee-first": { - "version": "1.0.3", - "from": "ee-first@1.0.3", - "resolved": "http://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz" + "mime-db": { + "version": "1.7.0", + "from": "mime-db@~1.7.0" } } - }, - "mime": { - "version": "1.2.11", - "from": "mime@1.2.11" } } }, "vary": { - "version": "0.1.0", - "from": "vary@0.1.0", - "resolved": "http://registry.npmjs.org/vary/-/vary-0.1.0.tgz" + "version": "1.0.0", + "from": "vary@~1.0.0", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz" }, "cookie": { "version": "0.1.2", - "from": "cookie@0.1.2" + "from": "cookie@0.1.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz" }, - "fresh": { - "version": "0.2.2", - "from": "fresh@0.2.2" - }, - "cookie-signature": { - "version": "1.0.3", - "from": "cookie-signature@1.0.3" - }, - "merge-descriptors": { - "version": "0.0.2", - "from": "merge-descriptors@0.0.2", - "resolved": "http://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz" + "utils-merge": { + "version": "1.0.0", + "from": "utils-merge@1.0.0" } } }, diff --git a/package.json b/package.json index 4b3c73f3..628c50d4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.12", + "version": "0.6.14", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From 5d13b86ff98e22deb77aff403c8d001e519a021c Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 12:01:39 -0800 Subject: [PATCH 193/197] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20d10aa0..02725399 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Change Log + +# 0.6.14 + * Updating shrinkwrap for Express update [PR](https://github.com/yahoo/arrow/pull/289) + # 0.6.13 * Updating Express to 4.x [PR](https://github.com/yahoo/arrow/pull/287) From 20cd66f02dcc4c82d613c13e835acd915a2e1b42 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 14:10:35 -0800 Subject: [PATCH 194/197] Adding body-parser and cookie-parser as separate dependencies --- arrow_server/server.js | 8 +- npm-shrinkwrap.json | 579 ++++++++++++++++++++++------------------- package.json | 2 + 3 files changed, 320 insertions(+), 269 deletions(-) diff --git a/arrow_server/server.js b/arrow_server/server.js index 42a437ac..2c1bb874 100755 --- a/arrow_server/server.js +++ b/arrow_server/server.js @@ -16,6 +16,8 @@ var path = require("path"); var nopt = require("nopt"); var http = require("http"); var express = require("express"); +var bodyParser = require("body-parser"); +var cookieParser = require("cookie-parser"); var log4js = require("log4js"); var portchecker = require('../ext-lib/portchecker'); @@ -77,8 +79,8 @@ if (parsed["debug"]) { var app = express(); app.use(log4js.connectLogger(logger)); -app.use(express.cookieParser()); -app.use(express.bodyParser()); +app.use(cookieParser); +app.use(bodyParser); var mimes = { "css":"text/css", @@ -360,7 +362,7 @@ app.get("/wd/hub/session/:sessionId", function (req, res) { }); // Delete the session -app.del("/wd/hub/session/:sessionId", function (req, res) { +app.delete("/wd/hub/session/:sessionId", function (req, res) { res.contentType("application/json"); res.send({status:9, value:"Delete session: Not Implemented"}, 501); }); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 60153c4b..9db6fdd9 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,98 +1,140 @@ { "name": "yahoo-arrow", - "version": "0.6.4", + "version": "0.6.14", "dependencies": { - "JSV": { - "version": "4.0.2", - "from": "JSV@4.0.2" - }, - "async": { - "version": "0.2.10", - "from": "async@~0.2.5" - }, - "chai": { - "version": "1.5.0", - "from": "chai@1.5.0" - }, - "cheerio": { - "version": "0.9.2", - "from": "cheerio@0.9.2", + "body-parser": { + "version": "1.12.0", + "from": "body-parser@1.x", "dependencies": { - "htmlparser2": { - "version": "2.6.0", - "from": "htmlparser2@2.x", + "bytes": { + "version": "1.0.0", + "from": "bytes@1.0.0" + }, + "content-type": { + "version": "1.0.1", + "from": "content-type@~1.0.1" + }, + "debug": { + "version": "2.1.2", + "from": "debug@~2.1.1", "dependencies": { - "domhandler": { - "version": "2.0.3", - "from": "domhandler@2.0" - }, - "domutils": { - "version": "1.0.1", - "from": "domutils@1.0" - }, - "domelementtype": { - "version": "1.1.1", - "from": "domelementtype@1" + "ms": { + "version": "0.7.0", + "from": "ms@0.7.0" } } }, - "entities": { - "version": "0.5.0", - "from": "entities@0.x" - } - } - }, - "cheerio-select": { - "version": "0.0.3", - "from": "cheerio-select@0.0.3", - "dependencies": { - "CSSselect": { - "version": "0.7.0", - "from": "CSSselect@0.x", + "depd": { + "version": "1.0.0", + "from": "depd@~1.0.0" + }, + "iconv-lite": { + "version": "0.4.7", + "from": "iconv-lite@0.4.7" + }, + "on-finished": { + "version": "2.2.0", + "from": "on-finished@~2.2.0", "dependencies": { - "CSSwhat": { - "version": "0.4.7", - "from": "CSSwhat@0.4" + "ee-first": { + "version": "1.1.0", + "from": "ee-first@1.1.0" + } + } + }, + "qs": { + "version": "2.3.3", + "from": "qs@2.3.3" + }, + "raw-body": { + "version": "1.3.3", + "from": "raw-body@1.3.3" + }, + "type-is": { + "version": "1.6.0", + "from": "type-is@~1.6.0", + "dependencies": { + "media-typer": { + "version": "0.3.0", + "from": "media-typer@0.3.0" }, - "domutils": { - "version": "1.4.3", - "from": "domutils@1.4", + "mime-types": { + "version": "2.0.9", + "from": "mime-types@~2.0.9", "dependencies": { - "domelementtype": { - "version": "1.1.1", - "from": "domelementtype@1" + "mime-db": { + "version": "1.7.0", + "from": "mime-db@~1.7.0" } } + } + } + } + } + }, + "glob": { + "version": "3.1.11", + "from": "glob@3.1.11", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@0.2", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" }, - "boolbase": { - "version": "1.0.0", - "from": "boolbase@~1.0.0" - }, - "nth-check": { + "sigmund": { "version": "1.0.0", - "from": "nth-check@~1.0.0" + "from": "sigmund@~1.0.0" } } + }, + "graceful-fs": { + "version": "1.1.14", + "from": "graceful-fs@~1.1.2" + }, + "inherits": { + "version": "1.0.0", + "from": "inherits@1" } } }, - "clone": { - "version": "0.1.11", - "from": "clone@0.1.11" + "nopt": { + "version": "2.0.0", + "from": "nopt@2.0.0", + "dependencies": { + "abbrev": { + "version": "1.0.5", + "from": "abbrev@1" + } + } + }, + "cookie-parser": { + "version": "1.3.4", + "from": "cookie-parser@1.x", + "dependencies": { + "cookie": { + "version": "0.1.2", + "from": "cookie@0.1.2" + }, + "cookie-signature": { + "version": "1.0.6", + "from": "cookie-signature@1.0.6" + } + } }, "colors": { "version": "0.6.0-1", "from": "colors@0.6.0-1" }, - "express": { + "express": { "version": "4.12.2", "from": "express@4.x", - "resolved": "https://registry.npmjs.org/express/-/express-4.12.2.tgz", "dependencies": { "accepts": { "version": "1.2.4", "from": "accepts@~1.2.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.4.tgz", "dependencies": { "mime-types": { "version": "2.0.9", @@ -106,165 +148,135 @@ }, "negotiator": { "version": "0.5.1", - "from": "negotiator@0.5.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.1.tgz" + "from": "negotiator@0.5.1" } } }, "content-disposition": { "version": "0.5.0", - "from": "content-disposition@0.5.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz" + "from": "content-disposition@0.5.0" }, "content-type": { "version": "1.0.1", - "from": "content-type@~1.0.1", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz" + "from": "content-type@~1.0.1" }, "cookie-signature": { "version": "1.0.6", - "from": "cookie-signature@1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "from": "cookie-signature@1.0.6" }, "debug": { "version": "2.1.2", "from": "debug@~2.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.2.tgz", "dependencies": { "ms": { "version": "0.7.0", - "from": "ms@0.7.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz" + "from": "ms@0.7.0" } } }, "depd": { "version": "1.0.0", - "from": "depd@~1.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz" + "from": "depd@~1.0.0" }, "escape-html": { "version": "1.0.1", - "from": "escape-html@1.0.1", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz" + "from": "escape-html@1.0.1" }, "etag": { "version": "1.5.1", "from": "etag@~1.5.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz", "dependencies": { "crc": { "version": "3.2.1", - "from": "crc@3.2.1", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz" + "from": "crc@3.2.1" } } }, "finalhandler": { "version": "0.3.3", - "from": "finalhandler@0.3.3", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.3.tgz" + "from": "finalhandler@0.3.3" }, "fresh": { "version": "0.2.4", - "from": "fresh@0.2.4", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz" + "from": "fresh@0.2.4" }, "merge-descriptors": { "version": "1.0.0", - "from": "merge-descriptors@1.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz" + "from": "merge-descriptors@1.0.0" }, "methods": { "version": "1.1.1", - "from": "methods@~1.1.1", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz" + "from": "methods@~1.1.1" }, "on-finished": { "version": "2.2.0", "from": "on-finished@~2.2.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz", "dependencies": { "ee-first": { "version": "1.1.0", - "from": "ee-first@1.1.0", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz" + "from": "ee-first@1.1.0" } } }, "parseurl": { "version": "1.3.0", - "from": "parseurl@~1.3.0", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz" + "from": "parseurl@~1.3.0" }, "path-to-regexp": { "version": "0.1.3", - "from": "path-to-regexp@0.1.3", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz" + "from": "path-to-regexp@0.1.3" }, "proxy-addr": { "version": "1.0.6", "from": "proxy-addr@~1.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.6.tgz", "dependencies": { "forwarded": { "version": "0.1.0", - "from": "forwarded@~0.1.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz" + "from": "forwarded@~0.1.0" }, "ipaddr.js": { "version": "0.1.8", - "from": "ipaddr.js@0.1.8", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.8.tgz" + "from": "ipaddr.js@0.1.8" } } }, "qs": { "version": "2.3.3", - "from": "qs@2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz" + "from": "qs@2.3.3" }, "range-parser": { "version": "1.0.2", - "from": "range-parser@~1.0.2", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz" + "from": "range-parser@~1.0.2" }, "send": { "version": "0.12.1", "from": "send@0.12.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.12.1.tgz", "dependencies": { "destroy": { "version": "1.0.3", - "from": "destroy@1.0.3", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz" + "from": "destroy@1.0.3" }, "mime": { "version": "1.3.4", - "from": "mime@1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + "from": "mime@1.3.4" }, "ms": { "version": "0.7.0", - "from": "ms@0.7.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz" + "from": "ms@0.7.0" } } }, "serve-static": { "version": "1.9.1", - "from": "serve-static@~1.9.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.1.tgz" + "from": "serve-static@~1.9.1" }, "type-is": { "version": "1.6.0", "from": "type-is@~1.6.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.0.tgz", "dependencies": { "media-typer": { "version": "0.3.0", - "from": "media-typer@0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "from": "media-typer@0.3.0" }, "mime-types": { "version": "2.0.9", @@ -280,13 +292,11 @@ }, "vary": { "version": "1.0.0", - "from": "vary@~1.0.0", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz" + "from": "vary@~1.0.0" }, "cookie": { "version": "0.1.2", - "from": "cookie@0.1.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz" + "from": "cookie@0.1.2" }, "utils-merge": { "version": "1.0.0", @@ -294,31 +304,45 @@ } } }, - "glob": { - "version": "3.1.11", - "from": "glob@3.1.11", + "yui": { + "version": "3.8.0", + "from": "yui@3.8.0", "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@0.2", - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "from": "lru-cache@2" - }, - "sigmund": { - "version": "1.0.0", - "from": "sigmund@~1.0.0" - } - } + "request": { + "version": "2.9.202", + "from": "request@2.9.202" + } + } + }, + "JSV": { + "version": "4.0.2", + "from": "JSV@4.0.2" + }, + "log4js": { + "version": "0.5.1", + "from": "log4js@0.5.1", + "dependencies": { + "async": { + "version": "0.1.15", + "from": "async@0.1.15" + } + } + }, + "useragent": { + "version": "1.1.0", + "from": "useragent@1.1.0", + "dependencies": { + "yamlparser": { + "version": "0.0.2", + "from": "yamlparser@0.0.2" }, - "graceful-fs": { - "version": "1.1.14", - "from": "graceful-fs@~1.1.2" + "request": { + "version": "2.9.202", + "from": "request@2.9.202" }, - "inherits": { - "version": "1.0.0", - "from": "inherits@1" + "semver": { + "version": "1.0.14", + "from": "semver@1.0.14" } } }, @@ -339,7 +363,7 @@ "from": "estraverse@~1.3.0" }, "source-map": { - "version": "0.1.34", + "version": "0.4.1", "from": "source-map@>= 0.1.2", "dependencies": { "amdefine": { @@ -367,7 +391,7 @@ "from": "async@~0.2.6" }, "source-map": { - "version": "0.1.34", + "version": "0.1.43", "from": "source-map@~0.1.7", "dependencies": { "amdefine": { @@ -385,7 +409,7 @@ "from": "fileset@0.1.x", "dependencies": { "minimatch": { - "version": "0.3.0", + "version": "0.4.0", "from": "minimatch@0.x", "dependencies": { "lru-cache": { @@ -401,7 +425,7 @@ } }, "which": { - "version": "1.0.5", + "version": "1.0.9", "from": "which@1.0.x" }, "async": { @@ -418,60 +442,29 @@ } } }, - "jasmine-node": { - "version": "1.4.0", - "from": "jasmine-node@1.4.0", - "dependencies": { - "coffee-script": { - "version": "1.7.1", - "from": "coffee-script@>=1.0.1" - }, - "jasmine-reporters": { - "version": "0.4.1", - "from": "jasmine-reporters@>=0.2.0" - }, - "requirejs": { - "version": "2.1.14", - "from": "requirejs@>=0.27.1", - "resolved": "http://registry.npmjs.org/requirejs/-/requirejs-2.1.14.tgz" - }, - "walkdir": { - "version": "0.0.7", - "from": "walkdir@>= 0.0.1" - }, - "gaze": { - "version": "0.3.4", - "from": "gaze@~0.3.2", - "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@~0.2.9", - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "from": "lru-cache@2" - }, - "sigmund": { - "version": "1.0.0", - "from": "sigmund@~1.0.0" - } - } - }, - "fileset": { - "version": "0.1.5", - "from": "fileset@~0.1.5" - } - } - } - } + "uglify-js": { + "version": "1.3.4", + "from": "uglify-js@1.3.4" }, - "log4js": { - "version": "0.5.1", - "from": "log4js@0.5.1", + "xml-writer": { + "version": "1.2.3", + "from": "xml-writer@1.2.3" + }, + "ycb": { + "version": "1.0.5", + "from": "ycb@1.0.5" + }, + "async": { + "version": "0.2.10", + "from": "async@~0.2.5" + }, + "xml2js": { + "version": "0.1.14", + "from": "xml2js@0.1.14", "dependencies": { - "async": { - "version": "0.1.15", - "from": "async@0.1.15" + "sax": { + "version": "0.6.1", + "from": "sax@>=0.1.1" } } }, @@ -479,6 +472,22 @@ "version": "0.3.5", "from": "mkdirp@0.3.5" }, + "selenium-webdriver": { + "version": "2.39.0", + "from": "selenium-webdriver@2.39.0" + }, + "underscore": { + "version": "1.6.0", + "from": "underscore@1.6.0" + }, + "clone": { + "version": "0.1.11", + "from": "clone@0.1.11" + }, + "saucelabs": { + "version": "0.1.1", + "from": "saucelabs@0.1.1" + }, "mocha": { "version": "1.18.2", "from": "mocha@~1.18.2", @@ -510,20 +519,18 @@ "from": "diff@1.0.7" }, "debug": { - "version": "1.0.2", + "version": "2.1.2", "from": "debug@*", - "resolved": "http://registry.npmjs.org/debug/-/debug-1.0.2.tgz", "dependencies": { "ms": { - "version": "0.6.2", - "from": "ms@0.6.2" + "version": "0.7.0", + "from": "ms@0.7.0" } } }, "glob": { "version": "3.2.3", "from": "glob@3.2.3", - "resolved": "http://registry.npmjs.org/glob/-/glob-3.2.3.tgz", "dependencies": { "minimatch": { "version": "0.2.14", @@ -551,83 +558,123 @@ } } }, - "nopt": { - "version": "2.0.0", - "from": "nopt@2.0.0", + "jasmine-node": { + "version": "1.4.0", + "from": "jasmine-node@1.4.0", "dependencies": { - "abbrev": { - "version": "1.0.5", - "from": "abbrev@1" + "coffee-script": { + "version": "1.9.1", + "from": "coffee-script@>=1.0.1" + }, + "jasmine-reporters": { + "version": "2.0.4", + "from": "jasmine-reporters@>=0.2.0" + }, + "requirejs": { + "version": "2.1.16", + "from": "requirejs@>=0.27.1" + }, + "walkdir": { + "version": "0.0.7", + "from": "walkdir@>= 0.0.1" + }, + "gaze": { + "version": "0.3.4", + "from": "gaze@~0.3.2", + "dependencies": { + "minimatch": { + "version": "0.2.14", + "from": "minimatch@~0.2.9", + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "from": "lru-cache@2" + }, + "sigmund": { + "version": "1.0.0", + "from": "sigmund@~1.0.0" + } + } + }, + "fileset": { + "version": "0.1.5", + "from": "fileset@~0.1.5" + } + } } } }, - "oauth": { - "version": "0.9.8", - "from": "oauth@0.9.8" - }, "qunitjs": { "version": "1.11.0", "from": "qunitjs@1.11.0" }, - "saucelabs": { - "version": "0.1.1", - "from": "saucelabs@" - }, - "selenium-webdriver": { - "version": "2.39.0", - "from": "selenium-webdriver@2.39.0" - }, - "uglify-js": { - "version": "1.3.4", - "from": "uglify-js@1.3.4" + "chai": { + "version": "1.5.0", + "from": "chai@1.5.0" }, - "underscore": { - "version": "1.6.0", - "from": "underscore@1.6.0" + "oauth": { + "version": "0.9.8", + "from": "oauth@0.9.8" }, - "useragent": { - "version": "1.1.0", - "from": "useragent@1.1.0", + "cheerio": { + "version": "0.9.2", + "from": "cheerio@0.9.2", "dependencies": { - "yamlparser": { - "version": "0.0.2", - "from": "yamlparser@0.0.2" - }, - "request": { - "version": "2.9.202", - "from": "request@2.9.202" + "htmlparser2": { + "version": "2.6.0", + "from": "htmlparser2@2.x", + "dependencies": { + "domhandler": { + "version": "2.0.3", + "from": "domhandler@2.0" + }, + "domutils": { + "version": "1.0.1", + "from": "domutils@1.0" + }, + "domelementtype": { + "version": "1.3.0", + "from": "domelementtype@1" + } + } }, - "semver": { - "version": "1.0.14", - "from": "semver@1.0.14" - } - } - }, - "xml-writer": { - "version": "1.2.3", - "from": "xml-writer@1.2.3" - }, - "xml2js": { - "version": "0.1.14", - "from": "xml2js@0.1.14", - "dependencies": { - "sax": { - "version": "0.6.0", - "from": "sax@>=0.1.1" + "entities": { + "version": "0.5.0", + "from": "entities@0.x" } } }, - "ycb": { - "version": "1.0.5", - "from": "ycb@1.0.5" - }, - "yui": { - "version": "3.8.0", - "from": "yui@3.8.0", + "cheerio-select": { + "version": "0.0.3", + "from": "cheerio-select@0.0.3", "dependencies": { - "request": { - "version": "2.9.202", - "from": "request@2.9.202" + "CSSselect": { + "version": "0.7.0", + "from": "CSSselect@0.x", + "dependencies": { + "CSSwhat": { + "version": "0.4.7", + "from": "CSSwhat@0.4" + }, + "domutils": { + "version": "1.4.3", + "from": "domutils@1.4", + "dependencies": { + "domelementtype": { + "version": "1.3.0", + "from": "domelementtype@1" + } + } + }, + "boolbase": { + "version": "1.0.0", + "from": "boolbase@~1.0.0" + }, + "nth-check": { + "version": "1.0.0", + "from": "nth-check@~1.0.0" + } + } } } } diff --git a/package.json b/package.json index 628c50d4..e148e1e6 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,10 @@ }, "engines": [ "node >=0.6" ], "dependencies": { + "body-parser": "1.x", "glob": "3.1.11", "nopt": "2.0.0", + "cookie-parser": "1.x", "colors": "0.6.0-1", "express": "4.x", "yui": "3.8.0", From f48b9ef875d07b2b3d43588298f5959fcb1f8be5 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 14:51:36 -0800 Subject: [PATCH 195/197] Preparing for v0.6.15 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02725399..a2326317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +# 0.6.15 + * Adding cookie-parser and body-parser dependencies [PR](https://github.com/yahoo/arrow/pull/290) + # 0.6.14 * Updating shrinkwrap for Express update [PR](https://github.com/yahoo/arrow/pull/289) diff --git a/package.json b/package.json index e148e1e6..93f5ef27 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.14", + "version": "0.6.15", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git", From c74116a7d2d5dcb1826ad5f203cfac31ac6590c7 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 22:18:13 -0800 Subject: [PATCH 196/197] Fixing usage of cookieParser and bodyParser --- arrow_server/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arrow_server/server.js b/arrow_server/server.js index 2c1bb874..cce5f477 100755 --- a/arrow_server/server.js +++ b/arrow_server/server.js @@ -79,8 +79,8 @@ if (parsed["debug"]) { var app = express(); app.use(log4js.connectLogger(logger)); -app.use(cookieParser); -app.use(bodyParser); +app.use(cookieParser()); +app.use(bodyParser.json()); var mimes = { "css":"text/css", From fe281998e7ba4bf97cb22f714551da940e28aff3 Mon Sep 17 00:00:00 2001 From: Pranav Parikh Date: Wed, 4 Mar 2015 22:26:42 -0800 Subject: [PATCH 197/197] Preparing for v0.6.15 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2326317..076b3f41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +# 0.6.16 + * Fixing usage of cookie-parser and body-parser [PR](https://github.com/yahoo/arrow/pull/291) + # 0.6.15 * Adding cookie-parser and body-parser dependencies [PR](https://github.com/yahoo/arrow/pull/290) diff --git a/package.json b/package.json index 93f5ef27..47fc1e1c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yahoo-arrow", "description": "FrontEnd Testing Framework", - "version": "0.6.15", + "version": "0.6.16", "homepage": "https://github.com/yahoo/arrow", "repository": { "type": "git",

y|>%x`be|3ic`kDS$zo8|%kJ@g4rP2$!(5KPD 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 p+OS-Ex*i~6Rf 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%0D{9 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%0Ar|F%KMsxerjiVaUL^ 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 z%0D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℘jiYy@9Xrc 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