From d477c08133d9e9c1ccc782d4056b717b5f93d27a Mon Sep 17 00:00:00 2001 From: riyaGit Date: Fri, 8 Nov 2019 10:44:56 -0500 Subject: [PATCH 01/14] [#54] added message list component. Still incomplete --- app/package-lock.json | 88 +++++--------------- app/src/components/MessageList.js | 53 ++++++++++++ app/src/components/OrderBookSnapshot.js | 7 ++ app/src/services/OrderBookService.js | 2 + app/src/styles/MessageList.js | 9 ++ app/src/styles/TimestampOrderBookScroller.js | 2 +- 6 files changed, 93 insertions(+), 68 deletions(-) create mode 100644 app/src/components/MessageList.js create mode 100644 app/src/styles/MessageList.js diff --git a/app/package-lock.json b/app/package-lock.json index 863fecd7..16f0b935 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1537,8 +1537,7 @@ "@types/dateformat": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/dateformat/-/dateformat-3.0.1.tgz", - "integrity": "sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g==", - "dev": true + "integrity": "sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g==" }, "@types/eslint-visitor-keys": { "version": "1.0.0", @@ -1575,8 +1574,7 @@ "@types/node": { "version": "12.7.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", - "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", - "dev": true + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==" }, "@types/prop-types": { "version": "15.7.2", @@ -1865,7 +1863,6 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", - "dev": true, "requires": { "array.prototype.find": "^2.1.0", "function.prototype.name": "^1.1.1", @@ -2040,7 +2037,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.13.0" @@ -2050,7 +2046,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.15.0", @@ -2061,7 +2056,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -2230,7 +2224,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/axios-logger/-/axios-logger-2.2.1.tgz", "integrity": "sha512-Fy+ej6O2G8Yx9E/6mVQ7auoWL/57HbIwJxOpQfhXEL8LYjH4F0qToRos4rzGoLuwJHOFwkrtJKIKt/ttHOsmVw==", - "dev": true, "requires": { "@types/dateformat": "^3.0.0", "chalk": "^2.4.1", @@ -3027,7 +3020,6 @@ "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, "requires": { "css-select": "~1.2.0", "dom-serializer": "~0.1.1", @@ -3041,7 +3033,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, "requires": { "boolbase": "~1.0.0", "css-what": "2.1", @@ -3053,7 +3044,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, "requires": { "domelementtype": "^1.3.0", "entities": "^1.1.1" @@ -3063,7 +3053,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" @@ -3072,14 +3061,12 @@ "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, "requires": { "@types/node": "*" } @@ -4411,8 +4398,7 @@ "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, "debug": { "version": "4.1.1", @@ -4633,8 +4619,7 @@ "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" }, "dns-equal": { "version": "1.0.0", @@ -4882,7 +4867,6 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", - "dev": true, "requires": { "array.prototype.flat": "^1.2.1", "cheerio": "^1.0.0-rc.2", @@ -4911,7 +4895,6 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz", "integrity": "sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA==", - "dev": true, "requires": { "enzyme-adapter-utils": "^1.12.1", "enzyme-shallow-equal": "^1.0.0", @@ -4927,14 +4910,12 @@ "react-is": { "version": "16.10.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", - "dev": true + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -4942,7 +4923,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz", "integrity": "sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g==", - "dev": true, "requires": { "airbnb-prop-types": "^2.15.0", "function.prototype.name": "^1.1.1", @@ -4956,7 +4936,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -4974,7 +4953,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.15.0", @@ -4985,8 +4963,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -4994,7 +4971,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz", "integrity": "sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ==", - "dev": true, "requires": { "has": "^1.0.3", "object-is": "^1.0.1" @@ -6260,7 +6236,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", - "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1", @@ -6276,8 +6251,7 @@ "functions-have-names": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz", - "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==", - "dev": true + "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==" }, "get-caller-file": { "version": "2.0.5", @@ -6627,7 +6601,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", - "dev": true, "requires": { "array-filter": "^1.0.0" }, @@ -6635,8 +6608,7 @@ "array-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" } } }, @@ -6985,8 +6957,7 @@ "is-boolean-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=" }, "is-buffer": { "version": "1.1.6", @@ -7098,8 +7069,7 @@ "is-number-object": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=" }, "is-obj": { "version": "1.0.1", @@ -7171,14 +7141,12 @@ "is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" }, "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=" }, "is-svg": { "version": "3.0.0", @@ -8711,20 +8679,17 @@ "lodash.escape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "lodash.memoize": { "version": "4.1.2", @@ -9129,8 +9094,7 @@ "moo": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", - "dev": true + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==" }, "move-concurrently": { "version": "1.0.1", @@ -9218,7 +9182,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz", "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==", - "dev": true, "requires": { "commander": "^2.19.0", "moo": "^0.4.3", @@ -9230,8 +9193,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -10987,7 +10949,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "dev": true, "requires": { "has": "^1.0.3", "object.assign": "^4.1.0", @@ -11097,14 +11058,12 @@ "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" }, "randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, "requires": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" @@ -11535,7 +11494,6 @@ "version": "16.10.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.10.2.tgz", "integrity": "sha512-k9Qzyev6cTIcIfrhgrFlYQAFxh5EEDO6ALNqYqmKsWVA7Q/rUMTay5nD3nthi6COmYsd4ghVYyi8U86aoeMqYQ==", - "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", @@ -11547,7 +11505,6 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -11662,8 +11619,7 @@ "reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", - "dev": true + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" }, "regenerate": { "version": "1.4.0", @@ -12038,7 +11994,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, "requires": { "lodash.flattendeep": "^4.4.0", "nearley": "^2.7.10" @@ -12901,7 +12856,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.13.0", diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js new file mode 100644 index 00000000..e22dce77 --- /dev/null +++ b/app/src/components/MessageList.js @@ -0,0 +1,53 @@ +import React, { Component } from 'react'; +import { Box } from '@material-ui/core'; +import { withStyles } from '@material-ui/core/styles'; +import { Styles } from '../styles/App'; +import OrderBookService from '../services/OrderBookService'; +import { SNAPSHOT_INSTRUMENT } from '../constants/Constants'; +import MultiDirectionalScroll from './MultiDirectionalScroll'; + +class MessageList extends Component { + componentDidMount() { + const { lastSodOffset } = this.props; + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffset) + .then(response => { + const { pageInfo, messages } = response.data; + + // this.setState( + // { + // pageInfo, + // messages, + // }, + // ); + }) + .catch(err => { + console.log(err); + }); + } + + componentDidUpdate(prevProps, prevState, snapshot) { + const { lastSodOffset } = this.props; + + if (lastSodOffset !== prevProps.lastSodOffset){ + + } + } + + render() { + const { classes } = this.props; + + return ( + + this.handleHitEdge('bottom')} + onReachTop={() => this.handleHitEdge('top')} + position={50} + > + {'hi'} + + + ); + } +} + +export default withStyles(Styles)(MessageList); diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index 46c60cfc..0d6d32a2 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -28,6 +28,7 @@ import { NANOSECONDS_IN_SIXTEEN_HOURS, } from '../constants/Constants'; import { processOrderBookFromScratch, processOrderBookWithDeltas } from '../utils/order-book-utils'; +import MessageList from './MessageList'; class OrderBookSnapshot extends Component { @@ -294,6 +295,12 @@ class OrderBookSnapshot extends Component { handleUpdateWithDeltas={this.handleUpdateWithDeltas} /> +
+ + + ); } diff --git a/app/src/services/OrderBookService.js b/app/src/services/OrderBookService.js index 8af82ee5..529ee4b0 100644 --- a/app/src/services/OrderBookService.js +++ b/app/src/services/OrderBookService.js @@ -5,4 +5,6 @@ export default class OrderBookService { static getPriceLevelsByMessageOffset = (instrument, timestamp, offset) => httpClient .get(`/delta/${instrument}/${timestamp}/${offset}`); + + static getMessageList = (instrument, sodOffset) => httpClient.get(`/message/${instrument}/${sodOffset}`); } diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js new file mode 100644 index 00000000..86d16125 --- /dev/null +++ b/app/src/styles/MessageList.js @@ -0,0 +1,9 @@ +export const Styles = { + scrollContainer: { + width: '100%', + height: 350, + display: 'flex', + flexDirection: 'row', + justifyContent: 'flex-start', + }, +}; \ No newline at end of file diff --git a/app/src/styles/TimestampOrderBookScroller.js b/app/src/styles/TimestampOrderBookScroller.js index d73b914e..1220922e 100644 --- a/app/src/styles/TimestampOrderBookScroller.js +++ b/app/src/styles/TimestampOrderBookScroller.js @@ -12,7 +12,7 @@ export const Styles = { }, scrollContainer: { width: '100%', - height: 700, + height: 350, display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', From 6ebf040aff28cdd1d31fbe61696f2e3ee16258d8 Mon Sep 17 00:00:00 2001 From: riyaGit Date: Sat, 9 Nov 2019 12:35:44 -0500 Subject: [PATCH 02/14] [#54] added table data with hard coded data. Styling unfinished. --- app/src/components/MessageList.js | 106 ++++++++++++++++++++---- app/src/components/OrderBookSnapshot.js | 12 +-- app/src/services/OrderBookService.js | 2 +- app/src/styles/MessageList.js | 23 ++++- 4 files changed, 119 insertions(+), 24 deletions(-) diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index e22dce77..a52bd578 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -1,3 +1,4 @@ +/* eslint-disable camelcase */ import React, { Component } from 'react'; import { Box } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; @@ -8,42 +9,113 @@ import MultiDirectionalScroll from './MultiDirectionalScroll'; class MessageList extends Component { componentDidMount() { + this.fetchInitialMessages(); + } + + componentDidUpdate(prevProps, prevState, snapshot) { + const { lastSodOffset } = this.props; + if (lastSodOffset !== prevProps.lastSodOffset) { + this.fetchInitialMessages(); + } + } + + fetchInitialMessages() { const { lastSodOffset } = this.props; OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffset) .then(response => { - const { pageInfo, messages } = response.data; - - // this.setState( - // { - // pageInfo, - // messages, - // }, - // ); + // const { pageInfo, messages } = response.data; + const { pageInfo } = response.data; + this.setState( + { + // messages, + // eslint-disable-next-line react/no-unused-state + lastSodOffsetTop: pageInfo.sod_offset, + // eslint-disable-next-line react/no-unused-state + lastSodOffsetBottom: pageInfo.sod_offset, + }, + ); }) .catch(err => { console.log(err); }); } + // + // handleHitEdge(){ + // OrderBookService.getMessageList(()) + // } - componentDidUpdate(prevProps, prevState, snapshot) { - const { lastSodOffset } = this.props; - - if (lastSodOffset !== prevProps.lastSodOffset){ - - } + renderTableData() { + const { classes } = this.props; + // const { messages } = this.state; + const messages = [ + { + instrument: 'ins', + timestamp: 67500, + message_type: 1, + order_id: 23444, + share_qty: 10000, + price: 123.4, + direction: 1, + sod_offset: 1, + }, + { + instrument: 'ins 2', + timestamp: 23399, + message_type: 3, + order_id: 988888, + share_qty: 6777777, + price: 111900.45, + direction: -1, + sod_offset: 1, + }]; + return messages.map(message => { + const { + timestamp, message_type, order_id, share_qty, price, direction, + } = message; + return ( + + {timestamp} + {message_type} + {order_id} + {share_qty} + {price} + {direction} + + ); + }); } render() { const { classes } = this.props; + // const { messages, lastSodOffsetTop, lastSodBottom } = this.state; + const lastSodOffsetTop = 1; + const lastSodOffsetBottom = 20; + console.log(lastSodOffsetTop + lastSodOffsetBottom); return ( this.handleHitEdge('bottom')} - onReachTop={() => this.handleHitEdge('top')} + // onReachBottom={() => this.handleHitEdge('bottom')} + // onReachTop={() => this.handleHitEdge('top')} position={50} > - {'hi'} + + + + + + + + + + {this.renderTableData()} +
{'Timestamp'}{'Type'}{'Order ID'}{'Quantity'}{'Price'}{'Direction'}
); diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index 0d6d32a2..1c08cf57 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -296,11 +296,13 @@ class OrderBookSnapshot extends Component { />
- - - + {lastSodOffset && ( + + + + )} ); } diff --git a/app/src/services/OrderBookService.js b/app/src/services/OrderBookService.js index 529ee4b0..d4a50ad6 100644 --- a/app/src/services/OrderBookService.js +++ b/app/src/services/OrderBookService.js @@ -6,5 +6,5 @@ export default class OrderBookService { static getPriceLevelsByMessageOffset = (instrument, timestamp, offset) => httpClient .get(`/delta/${instrument}/${timestamp}/${offset}`); - static getMessageList = (instrument, sodOffset) => httpClient.get(`/message/${instrument}/${sodOffset}`); + static getMessageList = (instrument, sodOffset) => httpClient.get(`/messages/${instrument}/${sodOffset}`); } diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index 86d16125..ef2d6f6d 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -6,4 +6,25 @@ export const Styles = { flexDirection: 'row', justifyContent: 'flex-start', }, -}; \ No newline at end of file + messageTableRow: { + display: 'flex', + fontSize: 900, + border: '5px', + borderColor: 'black', + backgroundColor: '#000000', + textAlign: 'center', + }, + tr: { + border: '5px', + borderColor: 'black', + backgroundColor: '#000000', + display: 'flex', + textAlign: 'center', + }, + tableHeaderRow: { + border: '5px', + borderColor: '#000000', + display: 'flex', + align: 'flex', + }, +}; From 0c5e29f2933aaa46e400099acb076a593b17e6f3 Mon Sep 17 00:00:00 2001 From: riyaGit Date: Sat, 9 Nov 2019 18:56:17 -0500 Subject: [PATCH 03/14] pass messages from messageList get request #54 --- app/src/components/MessageList.js | 115 ++++++++++++++++----------- app/src/services/OrderBookService.js | 4 +- app/src/styles/App.js | 1 + app/src/styles/MessageList.js | 33 ++++---- 4 files changed, 85 insertions(+), 68 deletions(-) diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index a52bd578..adc238f2 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -1,13 +1,23 @@ /* eslint-disable camelcase */ import React, { Component } from 'react'; -import { Box } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; -import { Styles } from '../styles/App'; import OrderBookService from '../services/OrderBookService'; import { SNAPSHOT_INSTRUMENT } from '../constants/Constants'; import MultiDirectionalScroll from './MultiDirectionalScroll'; +import { Styles } from '../styles/MessageList'; class MessageList extends Component { + constructor(props) { + super(props); + + this.state = { + messages: [], + lastSodOffsetTop: 0, + // eslint-disable-next-line react/no-unused-state + lastSodOffsetBottom: 0, + }; + } + componentDidMount() { this.fetchInitialMessages(); } @@ -23,11 +33,10 @@ class MessageList extends Component { const { lastSodOffset } = this.props; OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffset) .then(response => { - // const { pageInfo, messages } = response.data; - const { pageInfo } = response.data; + const { pageInfo, messages } = response.data; this.setState( { - // messages, + messages, // eslint-disable-next-line react/no-unused-state lastSodOffsetTop: pageInfo.sod_offset, // eslint-disable-next-line react/no-unused-state @@ -39,44 +48,60 @@ class MessageList extends Component { console.log(err); }); } - // - // handleHitEdge(){ - // OrderBookService.getMessageList(()) - // } + + handleHitEdge(direction) { + const { lastSodOffsetTop, lastSofOffsetBottom } = this.state; + if (direction === 'top') { + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop) + .then(response => { + // eslint-disable-next-line no-unused-vars + const { pageInfo, meesages } = response.data; + }) + .catch(err => { + console.log(err); + }); + } else if (direction === 'bottom') { + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSofOffsetBottom) + .then(response => { + // eslint-disable-next-line no-unused-vars + const { pageInfo, message } = response.data; + }) + .catch(err => { + console.log(err); + }); + } + } renderTableData() { const { classes } = this.props; - // const { messages } = this.state; - const messages = [ - { - instrument: 'ins', - timestamp: 67500, - message_type: 1, - order_id: 23444, - share_qty: 10000, - price: 123.4, - direction: 1, - sod_offset: 1, - }, - { - instrument: 'ins 2', - timestamp: 23399, - message_type: 3, - order_id: 988888, - share_qty: 6777777, - price: 111900.45, - direction: -1, - sod_offset: 1, - }]; + const { messages } = this.state; + // const messages = [ + // { + // instrument: 'ins', + // timestamp: 67500, + // message_type: 1, + // order_id: 2344909090909094, + // share_qty: 10000, + // price: 123.4, + // direction: 1, + // sod_offset: 1, + // }, + // { + // instrument: 'ins 2', + // timestamp: 23399, + // message_type: 3, + // order_id: 988888, + // share_qty: 6777777, + // price: 111900.45, + // direction: -1, + // sod_offset: 1, + // }]; return messages.map(message => { const { timestamp, message_type, order_id, share_qty, price, direction, } = message; return ( - + {timestamp} {message_type} {order_id} @@ -90,23 +115,17 @@ class MessageList extends Component { render() { const { classes } = this.props; - // const { messages, lastSodOffsetTop, lastSodBottom } = this.state; - const lastSodOffsetTop = 1; - const lastSodOffsetBottom = 20; - console.log(lastSodOffsetTop + lastSodOffsetBottom); + // const { lastSodOffsetTop, lastSodBottom } = this.state; return ( - +
this.handleHitEdge('bottom')} - // onReachTop={() => this.handleHitEdge('top')} + onReachBottom={() => this.handleHitEdge('bottom')} + onReachTop={() => this.handleHitEdge('top')} position={50} > - - +
+ @@ -117,7 +136,7 @@ class MessageList extends Component { {this.renderTableData()}
{'Timestamp'} {'Type'} {'Order ID'}
- +
); } } diff --git a/app/src/services/OrderBookService.js b/app/src/services/OrderBookService.js index d4a50ad6..521fb2df 100644 --- a/app/src/services/OrderBookService.js +++ b/app/src/services/OrderBookService.js @@ -1,7 +1,9 @@ import { httpClient } from './HttpClient'; export default class OrderBookService { - static getOrderBookPrices = (instrument, timestamp) => httpClient.get(`/orderbook/${instrument}/${timestamp}`); + static getOrderBookPrices = (instrument, timestamp) => { + return httpClient.get(`/orderbook/SPY/1340285560000000000`); + }; static getPriceLevelsByMessageOffset = (instrument, timestamp, offset) => httpClient .get(`/delta/${instrument}/${timestamp}/${offset}`); diff --git a/app/src/styles/App.js b/app/src/styles/App.js index bdd1f83a..e4b907b0 100644 --- a/app/src/styles/App.js +++ b/app/src/styles/App.js @@ -6,6 +6,7 @@ export const Colors = { green: '#159027', red: '#943e30', darkGrey: '#343434', + black: '#000000', }; export const LightThemeColors = { diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index ef2d6f6d..e1113865 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -1,30 +1,25 @@ +import { Colors } from './App'; + export const Styles = { scrollContainer: { - width: '100%', height: 350, - display: 'flex', - flexDirection: 'row', - justifyContent: 'flex-start', + width: '100%', }, - messageTableRow: { + table: { display: 'flex', - fontSize: 900, - border: '5px', - borderColor: 'black', - backgroundColor: '#000000', - textAlign: 'center', + backgroundColor: Colors.lightBlue, + border: '2px', + borderColor: Colors.black, }, - tr: { - border: '5px', - borderColor: 'black', - backgroundColor: '#000000', - display: 'flex', + tableDataRow: { + border: '3px', + borderColor: Colors.black, textAlign: 'center', + flexDirection: 'row', }, tableHeaderRow: { - border: '5px', - borderColor: '#000000', - display: 'flex', - align: 'flex', + border: '5px solid Colors.black', + textAlign: 'center', + flexDirection: 'row', }, }; From fd5c6bd815fd92555ffd0e2d896093c4c98314f3 Mon Sep 17 00:00:00 2001 From: riyaGit Date: Sat, 9 Nov 2019 22:09:16 -0500 Subject: [PATCH 04/14] needs styling #54 --- app/src/components/MessageList.js | 57 +++++++++---------------- app/src/components/OrderBookSnapshot.js | 2 +- app/src/constants/Constants.js | 1 + app/src/services/OrderBookService.js | 3 +- app/src/styles/App.js | 1 + app/src/styles/MessageList.js | 11 ++--- 6 files changed, 32 insertions(+), 43 deletions(-) diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index adc238f2..96520c3a 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -2,7 +2,10 @@ import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import OrderBookService from '../services/OrderBookService'; -import { SNAPSHOT_INSTRUMENT } from '../constants/Constants'; +import { + SNAPSHOT_INSTRUMENT, + MESSAGE_LIST_DEFAULT_PAGE_SIZE, +} from '../constants/Constants'; import MultiDirectionalScroll from './MultiDirectionalScroll'; import { Styles } from '../styles/MessageList'; @@ -13,7 +16,6 @@ class MessageList extends Component { this.state = { messages: [], lastSodOffsetTop: 0, - // eslint-disable-next-line react/no-unused-state lastSodOffsetBottom: 0, }; } @@ -37,9 +39,7 @@ class MessageList extends Component { this.setState( { messages, - // eslint-disable-next-line react/no-unused-state lastSodOffsetTop: pageInfo.sod_offset, - // eslint-disable-next-line react/no-unused-state lastSodOffsetBottom: pageInfo.sod_offset, }, ); @@ -50,21 +50,28 @@ class MessageList extends Component { } handleHitEdge(direction) { - const { lastSodOffsetTop, lastSofOffsetBottom } = this.state; + const { lastSodOffsetTop, lastSodOffsetBottom } = this.state; if (direction === 'top') { - OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop) + const nMessages = -MESSAGE_LIST_DEFAULT_PAGE_SIZE; + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop, nMessages) .then(response => { - // eslint-disable-next-line no-unused-vars - const { pageInfo, meesages } = response.data; + const { pageInfo, messages } = response.data; + this.setState({ + messages, + lastSodOffsetTop: pageInfo.lastSodOffset, + }); }) .catch(err => { console.log(err); }); } else if (direction === 'bottom') { - OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSofOffsetBottom) + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetBottom) .then(response => { - // eslint-disable-next-line no-unused-vars - const { pageInfo, message } = response.data; + const { pageInfo, messages } = response.data; + this.setState({ + messages, + lastSodOffsetBottom: pageInfo.lastSodOffset, + }); }) .catch(err => { console.log(err); @@ -73,35 +80,14 @@ class MessageList extends Component { } renderTableData() { - const { classes } = this.props; + const { classes, lastSodOffset } = this.props; const { messages } = this.state; - // const messages = [ - // { - // instrument: 'ins', - // timestamp: 67500, - // message_type: 1, - // order_id: 2344909090909094, - // share_qty: 10000, - // price: 123.4, - // direction: 1, - // sod_offset: 1, - // }, - // { - // instrument: 'ins 2', - // timestamp: 23399, - // message_type: 3, - // order_id: 988888, - // share_qty: 6777777, - // price: 111900.45, - // direction: -1, - // sod_offset: 1, - // }]; return messages.map(message => { const { - timestamp, message_type, order_id, share_qty, price, direction, + timestamp, message_type, order_id, share_qty, price, direction, sod_offset, } = message; return ( - + {timestamp} {message_type} {order_id} @@ -115,7 +101,6 @@ class MessageList extends Component { render() { const { classes } = this.props; - // const { lastSodOffsetTop, lastSodBottom } = this.state; return (
diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index 1c08cf57..ee7b189e 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -296,7 +296,7 @@ class OrderBookSnapshot extends Component { />
- {lastSodOffset && ( + {(lastSodOffset !== null) && ( httpClient .get(`/delta/${instrument}/${timestamp}/${offset}`); - static getMessageList = (instrument, sodOffset) => httpClient.get(`/messages/${instrument}/${sodOffset}`); + static getMessageList = (instrument, sodOffset, nMessages = 20) => httpClient + .get(`/messages/${instrument}/${sodOffset}?nMessages=${nMessages}`); } diff --git a/app/src/styles/App.js b/app/src/styles/App.js index e4b907b0..03e865e3 100644 --- a/app/src/styles/App.js +++ b/app/src/styles/App.js @@ -7,6 +7,7 @@ export const Colors = { red: '#943e30', darkGrey: '#343434', black: '#000000', + yellow: '#ffff00', }; export const LightThemeColors = { diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index e1113865..601a3fce 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -5,21 +5,22 @@ export const Styles = { height: 350, width: '100%', }, - table: { + messageTable: { display: 'flex', - backgroundColor: Colors.lightBlue, border: '2px', borderColor: Colors.black, + backgroundColor: Colors.lightBlue, + }, + currentMessageRow: { + backgroundColor: Colors.yellow, }, tableDataRow: { border: '3px', borderColor: Colors.black, textAlign: 'center', - flexDirection: 'row', }, tableHeaderRow: { - border: '5px solid Colors.black', + border: '5px', textAlign: 'center', - flexDirection: 'row', }, }; From 23591c65e12bbf6ba3417c1086c5fea1984be148 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 02:03:48 -0500 Subject: [PATCH 05/14] [#54] fixed some message fetch and paging issues --- app/src/components/MessageList.js | 97 +++++++++++++++----- app/src/components/OrderBookSnapshot.js | 4 + app/src/constants/Enums.js | 17 ++++ app/src/styles/MessageList.js | 32 +++++-- app/src/styles/TimestampOrderBookScroller.js | 2 +- app/src/utils/order-book-utils.js | 9 ++ 6 files changed, 129 insertions(+), 32 deletions(-) create mode 100644 app/src/constants/Enums.js diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index 96520c3a..f6e81a66 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -1,6 +1,7 @@ /* eslint-disable camelcase */ import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; +import { Box } from '@material-ui/core'; import OrderBookService from '../services/OrderBookService'; import { SNAPSHOT_INSTRUMENT, @@ -8,6 +9,9 @@ import { } from '../constants/Constants'; import MultiDirectionalScroll from './MultiDirectionalScroll'; import { Styles } from '../styles/MessageList'; +import { roundNumber } from '../utils/number-utils'; +import { getMessageDirection } from '../utils/order-book-utils'; +import { MESSAGE_TYPE_ENUM } from '../constants/Enums'; class MessageList extends Component { constructor(props) { @@ -26,11 +30,44 @@ class MessageList extends Component { componentDidUpdate(prevProps, prevState, snapshot) { const { lastSodOffset } = this.props; + const { messages } = this.state; + if (lastSodOffset !== prevProps.lastSodOffset) { - this.fetchInitialMessages(); + const messageIndex = this.getPotentialIndexOfLastSodOffsetFromProps(); + if (messageIndex !== -1) { + const messagesLength = messages.length; + const halfway = messagesLength / 2; + const directionOfPotentialPaging = (messageIndex > halfway) ? 'bottom' : 'top'; + const diffFromEdge = directionOfPotentialPaging === 'bottom' + ? messagesLength - messageIndex : messageIndex; + + if (diffFromEdge < 5) { + this.handleHitEdge(directionOfPotentialPaging); + } + } else { + this.fetchInitialMessages(); + } } } + /** + * @desc Helper that checks for existence of a message in the array of messages (from state) + * that equals the latest lastSodOffset passed in props. + * @returns {*|number|never|boolean} returns -1 if not found + */ + getPotentialIndexOfLastSodOffsetFromProps = () => { + const { messages } = this.state; + const { lastSodOffset } = this.props; + + if (!messages) return false; + + return messages.map(message => message.sod_offset).findIndex(sodOffset => sodOffset === lastSodOffset); + }; + + /** + * @desc function called to load initial message list; when there is no messages or the sodOffset is + * significantly different from the current one + */ fetchInitialMessages() { const { lastSodOffset } = this.props; OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffset) @@ -49,16 +86,23 @@ class MessageList extends Component { }); } + /** + * @desc Paging handler for upwards and downwards hitting of the multidirectional scroll + * @param direction + */ handleHitEdge(direction) { const { lastSodOffsetTop, lastSodOffsetBottom } = this.state; + // eslint-disable-next-line react/destructuring-assignment + const existingMessages = this.state.messages; + if (direction === 'top') { const nMessages = -MESSAGE_LIST_DEFAULT_PAGE_SIZE; OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop, nMessages) .then(response => { const { pageInfo, messages } = response.data; this.setState({ - messages, - lastSodOffsetTop: pageInfo.lastSodOffset, + messages: messages ? messages.concat(existingMessages) : existingMessages, + lastSodOffsetTop: pageInfo.sod_offset, }); }) .catch(err => { @@ -69,8 +113,8 @@ class MessageList extends Component { .then(response => { const { pageInfo, messages } = response.data; this.setState({ - messages, - lastSodOffsetBottom: pageInfo.lastSodOffset, + messages: messages ? existingMessages.concat(messages) : existingMessages, + lastSodOffsetBottom: pageInfo.sod_offset, }); }) .catch(err => { @@ -79,6 +123,10 @@ class MessageList extends Component { } } + /** + * @desc Renders every row of the message list table. every row corresponds to a message + * @returns {*} + */ renderTableData() { const { classes, lastSodOffset } = this.props; const { messages } = this.state; @@ -87,14 +135,14 @@ class MessageList extends Component { timestamp, message_type, order_id, share_qty, price, direction, sod_offset, } = message; return ( - - {timestamp} - {message_type} - {order_id} - {share_qty} - {price} - {direction} - + + {timestamp} + {MESSAGE_TYPE_ENUM[message_type].name} + {order_id} + {share_qty} + {roundNumber(price, 2)} + {getMessageDirection(direction)} + ); }); } @@ -104,22 +152,23 @@ class MessageList extends Component { return (
+ +
{'Timestamp'}
+
{'Type'}
+
{'OrderID'}
+
{'Quantity'}
+
{'Price'}
+
{'Direction'}
+
this.handleHitEdge('bottom')} onReachTop={() => this.handleHitEdge('top')} position={50} > - - - - - - - - - - {this.renderTableData()} -
{'Timestamp'}{'Type'}{'Order ID'}{'Quantity'}{'Price'}{'Direction'}
+ {this.renderTableData()}
); diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index ee7b189e..249e35dc 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -148,6 +148,10 @@ class OrderBookSnapshot extends Component { } }; + /** + * @desc handles the updates with deltas once a message is moved by a certain amount + * @param deltas + */ handleUpdateWithDeltas = deltas => { const { listItems } = this.state; const { diff --git a/app/src/constants/Enums.js b/app/src/constants/Enums.js new file mode 100644 index 00000000..efcfa7e8 --- /dev/null +++ b/app/src/constants/Enums.js @@ -0,0 +1,17 @@ +export const MESSAGE_TYPE_ENUM = { + 1: { + name: 'New order', + }, + 2: { + name: 'Modify', + }, + 3: { + name: 'Delete', + }, + 4: { + name: 'Execute', + }, + 5: { + name: 'Ignore', + }, +}; diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index 601a3fce..cfc700f2 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -2,25 +2,43 @@ import { Colors } from './App'; export const Styles = { scrollContainer: { - height: 350, + height: 300, width: '100%', }, - messageTable: { - display: 'flex', - border: '2px', - borderColor: Colors.black, - backgroundColor: Colors.lightBlue, - }, currentMessageRow: { backgroundColor: Colors.yellow, + display: 'flex', + width: '100%', + border: '3px', + borderColor: Colors.black, + textAlign: 'center', }, tableDataRow: { + display: 'flex', + width: '100%', border: '3px', borderColor: Colors.black, textAlign: 'center', }, tableHeaderRow: { + display: 'flex', + width: '100%', border: '5px', textAlign: 'center', + paddingTop: 10, + paddingBottom: 10, + }, + tableColumn: { + maxWidth: '16.66%', + width: '16.66%', + display: 'flex', + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + paddingLeft: 20, + paddingRight: 20, + wordWrap: 'break-word', + wordBreak: 'break-word', + overflowWrap: 'break-word', }, }; diff --git a/app/src/styles/TimestampOrderBookScroller.js b/app/src/styles/TimestampOrderBookScroller.js index 1220922e..d73b914e 100644 --- a/app/src/styles/TimestampOrderBookScroller.js +++ b/app/src/styles/TimestampOrderBookScroller.js @@ -12,7 +12,7 @@ export const Styles = { }, scrollContainer: { width: '100%', - height: 350, + height: 700, display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', diff --git a/app/src/utils/order-book-utils.js b/app/src/utils/order-book-utils.js index 5ce16f62..75a14011 100644 --- a/app/src/utils/order-book-utils.js +++ b/app/src/utils/order-book-utils.js @@ -134,3 +134,12 @@ export const processOrderBookWithDeltas = (currentListItems, newAsks, newBids) = return { newListItems: updatedListItems, newMaxQuantity: maxQuantity }; }; + +/** + * @desc based on values for direction returned by the backend, returns verbose direction + * @param direction + * @returns {string} + */ +export const getMessageDirection = direction => { + return (direction === 1) ? 'Bid' : 'Ask'; +}; From 3b4fd038dc142363542937a9fca1a671ab78d684 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 18:49:48 -0500 Subject: [PATCH 06/14] [#54] finished message list and fixed message stepping --- app/src/components/MessageList.js | 78 ++++++++++++------- app/src/components/OrderBookSnapshot.js | 7 +- .../components/TimestampOrderBookScroller.js | 20 +++-- app/src/services/OrderBookService.js | 4 +- app/src/styles/MessageList.js | 4 + app/src/utils/date-utils.js | 14 +++- app/src/utils/order-book-utils.js | 51 ++++++++---- .../api/hndlrs/msghandler.go | 2 + 8 files changed, 123 insertions(+), 57 deletions(-) diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index f6e81a66..682eac98 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import { Box } from '@material-ui/core'; +import classNames from 'classnames'; import OrderBookService from '../services/OrderBookService'; import { SNAPSHOT_INSTRUMENT, @@ -12,6 +13,7 @@ import { Styles } from '../styles/MessageList'; import { roundNumber } from '../utils/number-utils'; import { getMessageDirection } from '../utils/order-book-utils'; import { MESSAGE_TYPE_ENUM } from '../constants/Enums'; +import { nanosecondsToString, splitNanosecondEpochTimestamp, epochToDateString } from '../utils/date-utils'; class MessageList extends Component { constructor(props) { @@ -19,8 +21,8 @@ class MessageList extends Component { this.state = { messages: [], - lastSodOffsetTop: 0, - lastSodOffsetBottom: 0, + lastSodOffsetTop: BigInt(0), + lastSodOffsetBottom: BigInt(0), }; } @@ -32,7 +34,9 @@ class MessageList extends Component { const { lastSodOffset } = this.props; const { messages } = this.state; - if (lastSodOffset !== prevProps.lastSodOffset) { + if (typeof prevProps.lastSodOffset !== 'bigint' || (typeof lastSodOffset === 'bigint' + && typeof prevProps.lastSodOffset === 'bigint' + && lastSodOffset.toString() !== prevProps.lastSodOffset.toString())) { const messageIndex = this.getPotentialIndexOfLastSodOffsetFromProps(); if (messageIndex !== -1) { const messagesLength = messages.length; @@ -61,30 +65,38 @@ class MessageList extends Component { if (!messages) return false; - return messages.map(message => message.sod_offset).findIndex(sodOffset => sodOffset === lastSodOffset); + return messages + .map(message => message.sod_offset) + .findIndex(sodOffset => sodOffset === lastSodOffset.toString()); }; /** * @desc function called to load initial message list; when there is no messages or the sodOffset is * significantly different from the current one */ - fetchInitialMessages() { + fetchInitialMessages = async () => { const { lastSodOffset } = this.props; - OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffset) - .then(response => { - const { pageInfo, messages } = response.data; - this.setState( - { - messages, - lastSodOffsetTop: pageInfo.sod_offset, - lastSodOffsetBottom: pageInfo.sod_offset, - }, - ); - }) - .catch(err => { - console.log(err); + const nMessages = MESSAGE_LIST_DEFAULT_PAGE_SIZE * 2 + 1; + const lowerSodOffset = lastSodOffset - BigInt(MESSAGE_LIST_DEFAULT_PAGE_SIZE - 1); + + try { + const reverseMessagesResponse = await OrderBookService.getMessageList( + SNAPSHOT_INSTRUMENT, + lowerSodOffset.toString(), + nMessages, + ); + + const { messages, pageInfo } = reverseMessagesResponse.data; + + this.setState({ + messages, + lastSodOffsetTop: lowerSodOffset, + lastSodOffsetBottom: BigInt(pageInfo.sod_offset), }); - } + } catch (e) { + console.log(e); + } + }; /** * @desc Paging handler for upwards and downwards hitting of the multidirectional scroll @@ -97,24 +109,24 @@ class MessageList extends Component { if (direction === 'top') { const nMessages = -MESSAGE_LIST_DEFAULT_PAGE_SIZE; - OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop, nMessages) + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetTop.toString(), nMessages) .then(response => { const { pageInfo, messages } = response.data; this.setState({ messages: messages ? messages.concat(existingMessages) : existingMessages, - lastSodOffsetTop: pageInfo.sod_offset, + lastSodOffsetTop: BigInt(pageInfo.sod_offset), }); }) .catch(err => { console.log(err); }); } else if (direction === 'bottom') { - OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetBottom) + OrderBookService.getMessageList(SNAPSHOT_INSTRUMENT, lastSodOffsetBottom.toString()) .then(response => { const { pageInfo, messages } = response.data; this.setState({ messages: messages ? existingMessages.concat(messages) : existingMessages, - lastSodOffsetBottom: pageInfo.sod_offset, + lastSodOffsetBottom: BigInt(pageInfo.sod_offset), }); }) .catch(err => { @@ -134,9 +146,21 @@ class MessageList extends Component { const { timestamp, message_type, order_id, share_qty, price, direction, sod_offset, } = message; + + const { timeNanoseconds, dateNanoseconds } = splitNanosecondEpochTimestamp(timestamp); + const date = epochToDateString(dateNanoseconds); + const time = nanosecondsToString(timeNanoseconds); + return ( - - {timestamp} + + + {`${date} ${time}`} + {MESSAGE_TYPE_ENUM[message_type].name} {order_id} {share_qty} @@ -156,7 +180,9 @@ class MessageList extends Component { className={classes.tableHeaderRow} bgcolor={'primary.main'} > -
{'Timestamp'}
+ +
{'Timestamp'}
+
{'Type'}
{'OrderID'}
{'Quantity'}
diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index 249e35dc..a5913739 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -18,6 +18,7 @@ import { epochToDateString, splitNanosecondEpochTimestamp, convertNanosecondsToUTC, + convertNanosecondsUTCToCurrentTimezone, } from '../utils/date-utils'; import TimestampOrderBookScroller from './TimestampOrderBookScroller'; @@ -166,8 +167,10 @@ class OrderBookSnapshot extends Component { lastSodOffset: BigInt(last_sod_offset), selectedDateNano: dateNanoseconds, selectedDateString: epochToDateString(dateNanoseconds), - selectedTimeNano: BigInt(timeNanoseconds), - selectedTimeString: nanosecondsToString(timeNanoseconds), + selectedTimeNano: convertNanosecondsUTCToCurrentTimezone(BigInt(timeNanoseconds)), + selectedTimeString: nanosecondsToString(Number(convertNanosecondsUTCToCurrentTimezone( + BigInt(timeNanoseconds), + ))), selectedDateTimeNano: BigInt(timestamp), listItems: newListItems, maxQuantity: newMaxQuantity, diff --git a/app/src/components/TimestampOrderBookScroller.js b/app/src/components/TimestampOrderBookScroller.js index 542f3da6..e1f24397 100644 --- a/app/src/components/TimestampOrderBookScroller.js +++ b/app/src/components/TimestampOrderBookScroller.js @@ -24,11 +24,11 @@ class TimestampOrderBookScroller extends Component { } shouldComponentUpdate(nextProps, nextState, nextContext) { - const { listItems, maxQuantity } = this.props; - - if (!listItems || !nextProps.listItems) return true; - return (!listItemsEquals(listItems, nextProps.listItems) - || maxQuantity !== nextProps.maxQuantity); + const { lastSodOffset } = this.props; + if (lastSodOffset && nextProps.lastSodOffset) { + return (lastSodOffset.toString() !== nextProps.lastSodOffset.toString()); + } + return true; } componentDidUpdate(prevProps, prevState, snapshot) { @@ -43,6 +43,10 @@ class TimestampOrderBookScroller extends Component { window.removeEventListener('keyup', this.onKeyUp); } + /** + * @desc handles the key up action while moving messages + * @param e + */ onKeyUp = e => { const { handleGoToPreviousMessage, handleGoToNextMessage } = this.props; if (e.keyCode === LEFT_ARROW_KEY_CODE) handleGoToPreviousMessage(); @@ -79,7 +83,6 @@ class TimestampOrderBookScroller extends Component { /** * @desc Gets the message for the given offset and updates the order book with the message's timestamp - * * @param offset The number of messages to skip forward or backward to */ handleGoToMessageByOffset = offset => { @@ -94,9 +97,10 @@ class TimestampOrderBookScroller extends Component { }; render() { - const { listItems, maxQuantity, classes } = this.props; + const { + listItems, maxQuantity, classes, timeOrDateIsNotSet, + } = this.props; const quantityBoxSize = maxQuantity + maxQuantity * (MIN_PERCENTAGE_FACTOR_FOR_BOX_SPACE); - const { timeOrDateIsNotSet } = this.props; return ( diff --git a/app/src/services/OrderBookService.js b/app/src/services/OrderBookService.js index c2586b46..a390e02b 100644 --- a/app/src/services/OrderBookService.js +++ b/app/src/services/OrderBookService.js @@ -1,9 +1,7 @@ import { httpClient } from './HttpClient'; export default class OrderBookService { - static getOrderBookPrices = (instrument, timestamp) => { - return httpClient.get(`/orderbook/SPY/1340285560000000000`); - }; + static getOrderBookPrices = (instrument, timestamp) => httpClient.get(`/orderbook/${instrument}/${timestamp}`); static getPriceLevelsByMessageOffset = (instrument, timestamp, offset) => httpClient .get(`/delta/${instrument}/${timestamp}/${offset}`); diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index cfc700f2..083194ed 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -41,4 +41,8 @@ export const Styles = { wordBreak: 'break-word', overflowWrap: 'break-word', }, + overrideTimestampColumn: { + maxWidth: '30%', + width: '30%', + }, }; diff --git a/app/src/utils/date-utils.js b/app/src/utils/date-utils.js index 6c012e28..59573f5d 100644 --- a/app/src/utils/date-utils.js +++ b/app/src/utils/date-utils.js @@ -42,7 +42,7 @@ export const nanosecondsToString = nanosecondTimestamp => { /** * @desc Given a timestamp in nanoseconds, returns the timestamp converted to UTC - * @param nanosecondTimestamp BigInt + * @param nanosecondTimestamp {BigInt} * @returns {BigInt} */ export const convertNanosecondsToUTC = nanosecondTimestamp => { @@ -50,9 +50,19 @@ export const convertNanosecondsToUTC = nanosecondTimestamp => { return nanosecondTimestamp + offsetNS; }; +/** + * @desc Given a timestamp in nanoseconds UTC, returns the timestamp for current timezone + * @param nanosecondTimestamp {BigInt} + * @returns {BigInt} + */ +export const convertNanosecondsUTCToCurrentTimezone = nanosecondTimestamp => { + const offsetNS = BigInt(new Date().getTimezoneOffset()) * BigInt(60 * 10 ** 9); + return nanosecondTimestamp - offsetNS; +}; + /** * @desc Given a nanosecond epoch date, returns time string in the format YYYY-MM-DD - * @param nanosecondDate + * @param nanosecondDate {BigInt} * @returns {string} */ export const epochToDateString = nanosecondDate => { diff --git a/app/src/utils/order-book-utils.js b/app/src/utils/order-book-utils.js index 75a14011..b93e7030 100644 --- a/app/src/utils/order-book-utils.js +++ b/app/src/utils/order-book-utils.js @@ -54,6 +54,20 @@ export const getOrderBookListItemsAsArray = listItemsObject => { }; +/** + * @desc Checks whether two arrays are the same in terms of orders + * @param ordersArray1 + * @param ordersArray2 + */ +export const ordersEquals = (ordersArray1, ordersArray2) => { + if (ordersArray1.length !== ordersArray2.length) return false; + + return ordersArray1.every((order, index) => { + return order.id === ordersArray2[index].id && order.quantity === ordersArray2[index].quantity; + }); +}; + + /** * @desc Give the orderBook list items stored as an object in the redux store, determines whether * or not the contents are the same @@ -66,37 +80,35 @@ export const listItemsEquals = (listItemsObject1, listItemsObject2) => { if (listItems1.length !== listItems2.length) return false; - return !listItems1.some(listItem => { + return listItems1.every(listItem => { if (listItem) { const siblingListItem = listItemsObject2[listItem.price]; const { orders } = listItem; const siblingOrders = siblingListItem.orders; return ( - !siblingListItem - || listItem.type !== siblingListItem.type - || orders.length !== siblingOrders.length); + siblingListItem + && listItem.type === siblingListItem.type + && ordersEquals(siblingOrders, orders) + ); } return false; }); }; - /** - * @desc Checks whether two arrays are the same in terms of orders - * @param ordersArray1 - * @param ordersArray2 + * @desc Given a single price with new orders, updates listItems object with new value for that price + * @param type + * @param newArray + * @param listItems + * @returns {*} */ -export const ordersEquals = (ordersArray1, ordersArray2) => { - if (ordersArray1.length !== ordersArray2.length) return false; - - return ordersArray1.every((order, index) => { - return order.id === ordersArray2[index].id && order.quantity === ordersArray2[index].quantity; - }); -}; - const updateListItems = (type, newArray, listItems) => { const newListItems = listItems; + + if (!newArray) { + return newListItems; + } newArray.forEach(askOrBid => { const { price, orders } = askOrBid; if (orders.length === 0) delete newListItems[price]; // Remove price level @@ -113,6 +125,13 @@ const updateListItems = (type, newArray, listItems) => { return newListItems; }; +/** + * @desc Processes existing listItems to compute new max quantity and new middle + * @param currentListItems + * @param newAsks + * @param newBids + * @returns {{newMaxQuantity: number, newListItems: *}} + */ export const processOrderBookWithDeltas = (currentListItems, newAsks, newBids) => { let firstBid = 0; let maxQuantity = 0; diff --git a/core/graphelier-service/api/hndlrs/msghandler.go b/core/graphelier-service/api/hndlrs/msghandler.go index 96818a25..4743da30 100644 --- a/core/graphelier-service/api/hndlrs/msghandler.go +++ b/core/graphelier-service/api/hndlrs/msghandler.go @@ -33,6 +33,8 @@ func FetchMessages(env *Env, w http.ResponseWriter, r *http.Request) error { if err != nil { return StatusError{500, err} } + + paginator.SodOffset += intNMessages messagePage := models.MessagePage{PageInfo: paginator, Messages: messages} if intNMessages < 0 { reverseMessageOrdering(&messagePage) From 08da868e7f97aeb24b00980522ec8961dbce23fe Mon Sep 17 00:00:00 2001 From: riyaGit Date: Sun, 10 Nov 2019 19:24:53 -0500 Subject: [PATCH 07/14] Added tests and some styling changes #54 --- app/src/components/MessageList.js | 5 +- app/src/styles/MessageList.js | 8 +-- app/src/styles/TimestampOrderBookScroller.js | 2 +- .../tests/component-tests/MessageList.test.js | 58 +++++++++++++++++++ app/src/tests/utils/mock-data.js | 28 +++++++++ 5 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 app/src/tests/component-tests/MessageList.test.js diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index 682eac98..7c3fa0a2 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -176,10 +176,7 @@ class MessageList extends Component { return (
- +
{'Timestamp'}
diff --git a/app/src/styles/MessageList.js b/app/src/styles/MessageList.js index 083194ed..05df6b11 100644 --- a/app/src/styles/MessageList.js +++ b/app/src/styles/MessageList.js @@ -1,4 +1,4 @@ -import { Colors } from './App'; +import { Colors, LightThemeColors } from './App'; export const Styles = { scrollContainer: { @@ -9,24 +9,20 @@ export const Styles = { backgroundColor: Colors.yellow, display: 'flex', width: '100%', - border: '3px', - borderColor: Colors.black, textAlign: 'center', }, tableDataRow: { display: 'flex', width: '100%', - border: '3px', - borderColor: Colors.black, textAlign: 'center', }, tableHeaderRow: { display: 'flex', width: '100%', - border: '5px', textAlign: 'center', paddingTop: 10, paddingBottom: 10, + backgroundColor: LightThemeColors.palette.primary.main, }, tableColumn: { maxWidth: '16.66%', diff --git a/app/src/styles/TimestampOrderBookScroller.js b/app/src/styles/TimestampOrderBookScroller.js index d73b914e..1220922e 100644 --- a/app/src/styles/TimestampOrderBookScroller.js +++ b/app/src/styles/TimestampOrderBookScroller.js @@ -12,7 +12,7 @@ export const Styles = { }, scrollContainer: { width: '100%', - height: 700, + height: 350, display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', diff --git a/app/src/tests/component-tests/MessageList.test.js b/app/src/tests/component-tests/MessageList.test.js new file mode 100644 index 00000000..892cf090 --- /dev/null +++ b/app/src/tests/component-tests/MessageList.test.js @@ -0,0 +1,58 @@ +import React from 'react'; +import { createMount, createShallow } from '@material-ui/core/test-utils'; +import MessageList from '../../components/MessageList'; +import OrderBookService from '../../services/OrderBookService'; +import { MESSAGE_LIST, ORDER_BOOK_FROM_BACKEND } from '../utils/mock-data'; + +describe('MessageList', () => { + let mount, shallow, messageList; + const getMessageListSpy = jest.spyOn(OrderBookService, 'getMessageList') + .mockClear((instrument, sodOffset, nMessages = 20) => Promise.resolve( + { + data: ORDER_BOOK_FROM_BACKEND, + }, + ) + .catch(err => { + console.log(err); + })); + beforeEach(() => { + mount = createMount(); + shallow = createShallow({ dive: true }); + messageList = { ...MESSAGE_LIST }; + }); + + afterEach(() => { + getMessageListSpy.mockClear(); + mount.cleanUp(); + }); + + it('should render a messageList without crashing', () => { + mount(); + }); + + it('should not send a request to get message list when the date is not selected', () => { + expect(getMessageListSpy).toHaveBeenCalledTimes(0); + }); + + it('should get the correct data when the messageList request is made', () => { + const wrapper = shallow(); + wrapper.instance().setState( + { + messageList, + }, + ); + expect(Object.keys(wrapper.instance().state.messageList.messages).length).toEqual(2); + + expect(wrapper.instance().state.messageList.messages[0]) + .toEqual({ + instrument: 'SPY', + timestamp: 1340280000000000000, + message_type: 1, + order_id: 20933587, + share_qty: 598, + price: 135.66, + direction: -1, + sod_offset: '3', + }); + }); +}); diff --git a/app/src/tests/utils/mock-data.js b/app/src/tests/utils/mock-data.js index 83b6da2a..8ee8d429 100644 --- a/app/src/tests/utils/mock-data.js +++ b/app/src/tests/utils/mock-data.js @@ -165,5 +165,33 @@ export const ORDER_BOOK_LIST_ITEMS = { type: 'ask', orders: ORDER_BOOK_FROM_BACKEND.asks[0].orders, }, +}; +export const MESSAGE_LIST = { + pageInfo: { + nMessages: 30, + sod_offset: LAST_SOD_OFFSET, + }, + messages: [ + { + instrument: 'SPY', + timestamp: TIMESTAMP, + message_type: 1, + order_id: 20933587, + share_qty: 598, + price: 135.66, + direction: -1, + sod_offset: LAST_SOD_OFFSET, + }, + { + instrument: 'SPY', + timestamp: TIMESTAMP, + message_type: 1, + order_id: 20933587, + share_qty: 2100, + price: 135.66, + direction: -1, + sod_offset: LAST_SOD_OFFSET, + }, + ], }; From 5530b96302349c7b0ac83f5b778586423ae20f8c Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 19:49:17 -0500 Subject: [PATCH 08/14] [#54] fixed backend tests related to paginator --- core/graphelier-service/api/hndlrs/msghandler_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/graphelier-service/api/hndlrs/msghandler_test.go b/core/graphelier-service/api/hndlrs/msghandler_test.go index 904456d1..8a73910b 100644 --- a/core/graphelier-service/api/hndlrs/msghandler_test.go +++ b/core/graphelier-service/api/hndlrs/msghandler_test.go @@ -58,7 +58,7 @@ func TestFetchMessagesSuccess(t *testing.T) { mockedDB.AssertCalled(t, "GetMessagesWithPagination", "test", &models.Paginator{SodOffset: 100, NMessages: 25}) assert.Nil(t, err) assert.Equal(t, int64(25), messagePage.PageInfo.NMessages) - assert.Equal(t, int64(100), messagePage.PageInfo.SodOffset) + assert.Equal(t, int64(125), messagePage.PageInfo.SodOffset) assert.Equal(t, uint64(12), messagePage.Messages[0].OrderID) } @@ -86,7 +86,7 @@ func TestFetchMessagesDefaultValues(t *testing.T) { assert.Nil(t, err) assert.Equal(t, int64(20), messagePage.PageInfo.NMessages) - assert.Equal(t, int64(100), messagePage.PageInfo.SodOffset) + assert.Equal(t, int64(120), messagePage.PageInfo.SodOffset) assert.Equal(t, uint64(12), messagePage.Messages[0].OrderID) } @@ -114,7 +114,7 @@ func TestFetchMessagesNegativeNMessages(t *testing.T) { assert.Nil(t, err) assert.Equal(t, int64(-25), messagePage.PageInfo.NMessages) - assert.Equal(t, int64(100), messagePage.PageInfo.SodOffset) + assert.Equal(t, int64(75), messagePage.PageInfo.SodOffset) assert.Equal(t, 2, len(messagePage.Messages)) // Checking to see if slice is reversed assert.Equal(t, uint64(13), messagePage.Messages[0].OrderID) From 38c51013a51eb6ced14f2f14660ae0df8720d225 Mon Sep 17 00:00:00 2001 From: riyaGit Date: Sun, 10 Nov 2019 20:07:32 -0500 Subject: [PATCH 09/14] fixed styling #54 --- app/src/components/OrderBookSnapshot.js | 3 +-- app/src/styles/OrderBookSnapshot.js | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index a5913739..bd7b35c6 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -302,9 +302,8 @@ class OrderBookSnapshot extends Component { handleUpdateWithDeltas={this.handleUpdateWithDeltas} /> -
{(lastSodOffset !== null) && ( - + diff --git a/app/src/styles/OrderBookSnapshot.js b/app/src/styles/OrderBookSnapshot.js index b1f93139..dce926db 100644 --- a/app/src/styles/OrderBookSnapshot.js +++ b/app/src/styles/OrderBookSnapshot.js @@ -80,4 +80,7 @@ export const Styles = { justifyContent: 'space-between', marginBottom: '10px', }, + messageListCard: { + marginTop: '10px', + }, }; From fe34877b34acf2d29a3a53107d23c307f2d67810 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 20:16:18 -0500 Subject: [PATCH 10/14] [#54] fixed paginator reference usage --- core/graphelier-service/api/hndlrs/msghandler.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/graphelier-service/api/hndlrs/msghandler.go b/core/graphelier-service/api/hndlrs/msghandler.go index 4743da30..a58c0318 100644 --- a/core/graphelier-service/api/hndlrs/msghandler.go +++ b/core/graphelier-service/api/hndlrs/msghandler.go @@ -34,8 +34,9 @@ func FetchMessages(env *Env, w http.ResponseWriter, r *http.Request) error { return StatusError{500, err} } - paginator.SodOffset += intNMessages - messagePage := models.MessagePage{PageInfo: paginator, Messages: messages} + responsePaginator := models.Paginator{NMessages: intNMessages, SodOffset: paginator.SodOffset + intNMessages} + messagePage := models.MessagePage{PageInfo: responsePaginator, Messages: messages} + if intNMessages < 0 { reverseMessageOrdering(&messagePage) } From 8df9c84d2ab3c7f479e728e6daf7641c92054578 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 20:51:22 -0500 Subject: [PATCH 11/14] [#54] fixed small checker function for message list rendering --- app/src/components/MessageList.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/components/MessageList.js b/app/src/components/MessageList.js index 7c3fa0a2..4f7f1f33 100644 --- a/app/src/components/MessageList.js +++ b/app/src/components/MessageList.js @@ -57,13 +57,13 @@ class MessageList extends Component { /** * @desc Helper that checks for existence of a message in the array of messages (from state) * that equals the latest lastSodOffset passed in props. - * @returns {*|number|never|boolean} returns -1 if not found + * @returns {Number} returns -1 if not found */ getPotentialIndexOfLastSodOffsetFromProps = () => { const { messages } = this.state; const { lastSodOffset } = this.props; - if (!messages) return false; + if (!messages) return -1; return messages .map(message => message.sod_offset) From 5e1c512615eda0764df75c9dda139045c391a6a1 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 21:59:44 -0500 Subject: [PATCH 12/14] [#54] fixed crash on key up --- app/src/components/TimestampOrderBookScroller.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/components/TimestampOrderBookScroller.js b/app/src/components/TimestampOrderBookScroller.js index e1f24397..9a9e6229 100644 --- a/app/src/components/TimestampOrderBookScroller.js +++ b/app/src/components/TimestampOrderBookScroller.js @@ -48,9 +48,8 @@ class TimestampOrderBookScroller extends Component { * @param e */ onKeyUp = e => { - const { handleGoToPreviousMessage, handleGoToNextMessage } = this.props; - if (e.keyCode === LEFT_ARROW_KEY_CODE) handleGoToPreviousMessage(); - else if (e.keyCode === RIGHT_ARROW_KEY_CODE) handleGoToNextMessage(); + if (e.keyCode === LEFT_ARROW_KEY_CODE) this.handleGoToPreviousMessage(); + else if (e.keyCode === RIGHT_ARROW_KEY_CODE) this.handleGoToNextMessage(); }; /** From fe5328cc1a4c33eac2b82bb3f9847eda7ec28100 Mon Sep 17 00:00:00 2001 From: Chirac Date: Sun, 10 Nov 2019 22:38:37 -0500 Subject: [PATCH 13/14] [#35] Fixed bugs for deltabooks --- .../api/hndlrs/obhandler.go | 3 +- .../api/hndlrs/obhandler_test.go | 33 ------------------- core/graphelier-service/models/orderbooks.go | 19 ++++++----- .../models/orderbooks_test.go | 20 ++++------- 4 files changed, 18 insertions(+), 57 deletions(-) diff --git a/core/graphelier-service/api/hndlrs/obhandler.go b/core/graphelier-service/api/hndlrs/obhandler.go index 158432cf..a5f0e2af 100644 --- a/core/graphelier-service/api/hndlrs/obhandler.go +++ b/core/graphelier-service/api/hndlrs/obhandler.go @@ -104,8 +104,7 @@ func FetchOrderbookDelta(env *Env, w http.ResponseWriter, r *http.Request) (err postMessages := allMessages[preMessagesSize:] orderbook.ApplyMessagesToOrderbook(preMessages) - var deltabook = &models.Orderbook{} - orderbook.ApplyMessagesToDeltabook(deltabook, postMessages, numMessages) + deltabook := orderbook.ApplyMessagesToDeltabook(postMessages, numMessages) w.WriteHeader(http.StatusOK) err = json.NewEncoder(w).Encode(deltabook) diff --git a/core/graphelier-service/api/hndlrs/obhandler_test.go b/core/graphelier-service/api/hndlrs/obhandler_test.go index cc8f6382..295d45a3 100644 --- a/core/graphelier-service/api/hndlrs/obhandler_test.go +++ b/core/graphelier-service/api/hndlrs/obhandler_test.go @@ -98,39 +98,6 @@ func TestFetchOrderbookDeltaBadInput(t *testing.T) { assert.NotNil(t, err) } -func TestFetchOrderbookDeltaNegativeOffset(t *testing.T) { - mockedDB := &mockDBObHndlr{} - mockedEnv := &Env{mockedDB} - req := httptest.NewRequest("GET", "/delta/test/2/-1", nil) - vars := map[string]string{ - "instrument": "test", - "sod_offset": "2", - "num_messages": "-1", - } - req = mux.SetURLVars(req, vars) - writer := httptest.NewRecorder() - mockedDB.On("GetSingleMessage", "test", int64(2)) - mockedDB.On("GetOrderbook", "test", uint64(100)) - mockedDB.On("GetMessagesWithPagination", "test", &models.Paginator{NMessages: 2, SodOffset: 0}) - - err := FetchOrderbookDelta(mockedEnv, writer, req) - assert.Nil(t, err) - resp := writer.Result() - body, _ := ioutil.ReadAll(resp.Body) - var deltabook models.Orderbook - err = json.Unmarshal(body, &deltabook) - - mockedDB.AssertCalled(t, "GetSingleMessage", "test", int64(2)) - mockedDB.AssertCalled(t, "GetOrderbook", "test", uint64(100)) - mockedDB.AssertCalled(t, "GetMessagesWithPagination", "test", &models.Paginator{NMessages: 2, SodOffset: 0}) - assert.Nil(t, err) - assert.Equal(t, float64(100), deltabook.Asks[0].Price) - assert.Equal(t, int(1), len(deltabook.Asks[0].Orders)) - assert.Equal(t, uint64(12), deltabook.Asks[0].Orders[0].ID) - assert.Equal(t, int64(10), deltabook.Asks[0].Orders[0].Quantity) - assert.Equal(t, int(0), len(deltabook.Bids)) -} - func TestFetchOrderbookDeltaBadRequest(t *testing.T) { mockedDB := &mockDBObHndlr{} mockedEnv := &Env{mockedDB} diff --git a/core/graphelier-service/models/orderbooks.go b/core/graphelier-service/models/orderbooks.go index 89c4a70f..0417d3c5 100644 --- a/core/graphelier-service/models/orderbooks.go +++ b/core/graphelier-service/models/orderbooks.go @@ -244,25 +244,26 @@ func (orderbook *Orderbook) BuildDeltabook(deltabook *Orderbook, message *Messag } } } - deltabook.Instrument = orderbook.Instrument - deltabook.Timestamp = orderbook.Timestamp - if numMessages < 0 { - deltabook.LastSodOffset = uint64(int64(orderbook.LastSodOffset) + numMessages) - } else { - deltabook.LastSodOffset = orderbook.LastSodOffset - } } // ApplyMessagesToDeltabook : Applies messages to build deltabook while also applying the message to the original orderbook -func (orderbook *Orderbook) ApplyMessagesToDeltabook(deltabook *Orderbook, messages []*Message, numMessages int64) { +func (orderbook *Orderbook) ApplyMessagesToDeltabook(messages []*Message, numMessages int64) (deltabook *Orderbook) { + deltabook = &Orderbook{} for i := int64(0); i < utils.Abs(numMessages); i++ { message := messages[i] if message.OrderID == 0 || message.Type == Ignore { continue } var messageSlice []*Message - orderbook.ApplyMessagesToOrderbook(append(messageSlice, message)) + if numMessages > 0 { + orderbook.ApplyMessagesToOrderbook(append(messageSlice, message)) + } orderbook.BuildDeltabook(deltabook, message, numMessages) } + deltabook.Instrument = orderbook.Instrument + deltabook.Timestamp = orderbook.Timestamp + deltabook.LastSodOffset = orderbook.LastSodOffset + + return } diff --git a/core/graphelier-service/models/orderbooks_test.go b/core/graphelier-service/models/orderbooks_test.go index e30c769f..a233d0bf 100644 --- a/core/graphelier-service/models/orderbooks_test.go +++ b/core/graphelier-service/models/orderbooks_test.go @@ -209,8 +209,6 @@ func TestDeltaAskChange(t *testing.T) { orderbook.ApplyMessagesToOrderbook(messages) orderbook.BuildDeltabook(deltabook, offsetMessage, 1) - assert.Equal(t, uint64(99), deltabook.Timestamp) - assert.Equal(t, uint64(3), deltabook.LastSodOffset) assert.Equal(t, int(1), len(deltabook.Asks)) assert.Equal(t, int(2), len(deltabook.Asks[0].Orders)) assert.Equal(t, int64(10), deltabook.Asks[0].Orders[0].Quantity) @@ -226,8 +224,6 @@ func TestDeltaBidChange(t *testing.T) { orderbook.ApplyMessagesToOrderbook(messages) orderbook.BuildDeltabook(deltabook, offsetMessage, 1) - assert.Equal(t, uint64(99), deltabook.Timestamp) - assert.Equal(t, uint64(3), deltabook.LastSodOffset) assert.Equal(t, int(1), len(deltabook.Bids)) assert.Equal(t, int(2), len(deltabook.Bids[0].Orders)) assert.Equal(t, int64(10), deltabook.Bids[0].Orders[0].Quantity) @@ -243,8 +239,6 @@ func TestEmptyLevel(t *testing.T) { orderbook.ApplyMessagesToOrderbook(messages) orderbook.BuildDeltabook(deltabook, offsetMessage, 1) - assert.Equal(t, uint64(99), deltabook.Timestamp) - assert.Equal(t, uint64(3), deltabook.LastSodOffset) assert.Equal(t, int(1), len(deltabook.Asks)) assert.Equal(t, int(0), len(deltabook.Asks[0].Orders)) assert.Equal(t, int(0), len(deltabook.Bids)) @@ -258,7 +252,7 @@ func TestApplyDeltaPositiveNumMessages(t *testing.T) { messages = append(messages, &Message{Direction: -1, Instrument: "test", Type: 1, OrderID: 26, Price: 200, ShareQuantity: 10, Timestamp: 101, SodOffset: 7}) messages = append(messages, &Message{Direction: 1, Instrument: "test", Type: 1, OrderID: 27, Price: 100, ShareQuantity: 10, Timestamp: 101, SodOffset: 8}) messages = append(messages, &Message{Direction: 1, Instrument: "test", Type: 1, OrderID: 28, Price: 200, ShareQuantity: 10, Timestamp: 101, SodOffset: 9}) - orderbook.ApplyMessagesToDeltabook(deltabook, messages, 2) + deltabook = orderbook.ApplyMessagesToDeltabook(messages, 2) assert.Equal(t, int(1), len(deltabook.Asks[0].Orders)) assert.Equal(t, int(1), len(deltabook.Asks[1].Orders)) @@ -271,13 +265,13 @@ func TestApplyDeltaNegativeNumMessages(t *testing.T) { var messages []*Message messages = append(messages, &Message{Direction: -1, Instrument: "test", Type: 1, OrderID: 25, Price: 100, ShareQuantity: 10, Timestamp: 101, SodOffset: 6}) messages = append(messages, &Message{Direction: -1, Instrument: "test", Type: 1, OrderID: 26, Price: 200, ShareQuantity: 10, Timestamp: 101, SodOffset: 7}) + orderbook.ApplyMessagesToOrderbook(messages) messages = append(messages, &Message{Direction: 1, Instrument: "test", Type: 1, OrderID: 27, Price: 100, ShareQuantity: 10, Timestamp: 101, SodOffset: 8}) - messages = append(messages, &Message{Direction: 1, Instrument: "test", Type: 1, OrderID: 28, Price: 200, ShareQuantity: 10, Timestamp: 101, SodOffset: 9}) - orderbook.ApplyMessagesToDeltabook(deltabook, messages, -2) + deltabook := orderbook.ApplyMessagesToDeltabook(messages, -2) - assert.Equal(t, int(1), len(deltabook.Asks[0].Orders)) - assert.Equal(t, int(1), len(deltabook.Asks[1].Orders)) - assert.Equal(t, int(0), len(deltabook.Bids)) + assert.Equal(t, 1, len(deltabook.Asks[0].Orders)) + assert.Equal(t, 1, len(deltabook.Asks[1].Orders)) + assert.Equal(t, 0, len(deltabook.Bids)) clear() } @@ -387,7 +381,7 @@ func TestOrderbookPriceSort(t *testing.T) { func TestDeltaPriceSort(t *testing.T) { setup() - orderbook.ApplyMessagesToDeltabook(deltabook, messages, 4) + deltabook := orderbook.ApplyMessagesToDeltabook(messages, 4) assert.Equal(t, float64(100), deltabook.Asks[0].Price) assert.Equal(t, float64(200), deltabook.Asks[1].Price) From f0f0a9dda75b0b7f4f27f97530f50e9d29c24705 Mon Sep 17 00:00:00 2001 From: Alvyn Duy-Khoi Le Date: Sun, 10 Nov 2019 22:32:18 -0500 Subject: [PATCH 14/14] [#54] fixed crash on out of bounds date/year - Fixed readme - added milestone document to repo --- CourseAdmin/GraphelierMilestone1Document.pdf | Bin 0 -> 212069 bytes README.md | 4 ++++ app/src/components/OrderBookSnapshot.js | 1 + 3 files changed, 5 insertions(+) create mode 100644 CourseAdmin/GraphelierMilestone1Document.pdf diff --git a/CourseAdmin/GraphelierMilestone1Document.pdf b/CourseAdmin/GraphelierMilestone1Document.pdf new file mode 100644 index 0000000000000000000000000000000000000000..515c365d4984f33218890d3b1452030600585528 GIT binary patch literal 212069 zcmeFXbyQu?@-GO4K=9xW2M_KLJh($}clQ7XIJgCOceg-rcXxMpmmJ*nk^8;BnLF>j zS?~Qdv(~IRYoDrBy?a-8Rabp_udYq;T||tYnSmXiqT??26`q+3zyz=}w1ns71u)83 z*qRtPSh$%O1DM|>01Gn<69*T7Q39X^U}j-se{Wz0=l~ey0W7QlMo|D48z(CpfKd*> z0bo@Adz0fU2Y{a+-o)1UuS&rGgFko{rvETR+4YABfKgr1#Pr<^6I(N&Ie?1^z$j*6 z4K#6h=hg;56A=?5JLC6W|M2ey4mOT}zfKUgvv#tvbp)^j7{5E17+V+t?Ht~%f42+3 zsP@+p0M_^ayB8#FjZHv*8@S#b@lS)P9f0-g`#cl@jEZ)4z;~DYBPhN56u`{f$)JgddNXA#Xw2gC{!NQIrR|< z4-s)SMhVkXO1aI-INh{W>6&^DOus9oo3gR0RN@XHO7i&=6O;4}q=gp%27mk)vT=nZ z#WpHG%0Ez(4Qudy#*hq5r{2OH#Fut!1VDKB1C8hx!M1iRPRXpe*(0it*sr< z@f~y6IRE7cwtv8e?JtNc0@(jT;5+*VblCs;;$8at{5xa&hq3>|{_!LGKU&_gOxVsA zXkz=Wn&qE+yIrBF0+v~zMWdS9Hs;3*0M ziYo!%(e+=FI4gklpQ$m5a{}1@naN)q6?-4T_nE-76UQ{tQ0NXznFp9AQ*!~Tj zVjKXre=K1X`wC$D_w>ZL0Pow;U&H>Y`|e<8q+|kopDW}0?)JVHnSg-r_-ykYGeZC7 z!vE%y?Ccd_0_Dc_2q7({bi%!zV}lK(esXX$IC*;+AC2e3&K&$y~}+`W1qm= z!xR16WmJd96WGP+X+!}1Bh{$v52l!2VwX&ug5kKgPu^~)evj4~-3 zt`rD`X45=**pCY2{Y;R)%8XK{*r^P~(2l-doF;mxMctTW$ljo^(&u2S1w?}|k9$xM#509E|2wablCj}!FNCpku-PRhlaK=*-X4dNGm)#hs zaYSu5^sghyqk&_l^LuvO-It5k$liNW(c@Sk*e@oG<=vN6x%9+|{7dWkdZx4GorJ~w z)(#e8ZGlse4lZ$l9a0;9mdG-`R2*{D8Q5aL+3t%hH?KvPgw`3xu3*qigRNjz!`~rn z+LWSU35hmVX5_&0JRe;rw ztru1Ywm{HjQ{cVF>OqBNJ6o(Tny>Og2>sxv%@Ca~Z8)Av&mm9wo%7TI@wSP9-D*>= zp+*kD;M4FB2VRzwMk`$JCl;5_ZnWPezk3jclhb|uVh~+R*WtbED?QPD0I~O=6#HAUnS(C zpE`cZH2EyfG=ftfuyL7{Z|(iGrh05EwuU&{^i4`SuGtkgN$|6cI6K!SK^&>P+(N8y z1lVIvE;M5koX5es+2d{7euksfI1*)e8D;Sem7dmfN) zaZeS5P~U{`XGs+j<3PR>ORV|y1N+Iq%1_q|GVn$+huWefYykHQ)z*S9GCU{ zQ*$=Iw`)nKs3W+%SCT6E+EuI6fzub>46myZZZ{eJZ7o@vKkj0v-{8_hn6-3~F=FiA zf)n?g)IXJLAR^G#Bzc=f#emMuC5307=`$Ljf!0F&7w_A!c_u#fZ}lmo8C+5NW%g|@ zCR#fd7{Y=I$X~5;K0{ZozbmQqC(O#1TeHdUT(PUV?m^p&2wQgE@GaOSQYzZX^L}u@ zYy}BdQnu5E&$R6Oq?m-BY^g_~pI+`Cw6~sW+LEg?`La+Sn>1gX_WX5SJLKY{&f|r? zl#LPXQw9&)71IXO=IAjCW3{HW zm2o*@5o%p`(rO=QG0zIe4)_=mB#(Y8Hwm%IF1z_0*VZGgR9fpm)ZjpX0AR4rQ7wqST@#R?!G9;3{K2}8jiQsvhUpp6mhE>BWme$2b@Jm zL~Iv+qifVzY@w#Z1(qXaa?c{33=Ny4V2u^dx;84Wcmw2Fe!vZS$Wh%fmF4{w2~RQE zME`1F7<9OqHtSJ!J0URIc|=+tCQ1g5;AQ~{VrlXP4#y$W ztVRYU=4V-neEjzZF!LdkKJxn=hddO!nCsL1cgQ$xJ}ycPSD8r#*gtPcb*vz&2xXkW z%8qgb`Y2x!h`_2*ERNz87?o=`T)ZR z)QLHjvm1`ZB2!1Cbjpt6LX=wfGU*+UfcaWj+bm%8>%_0m!8f(cIxh7^uD5xnI!oeM zWr~FvnNp0?r|ZYji99gxoR+~>jPTOqRZ_+fXV6c;7!;z%bb&~WYd?4eZ^T`VIPwJZ zqxTZ;XDTQ#Xg~Sj>c+~@ygP~jS4@g3Zk0c3X~8SdbG)*JQWTw>8*b04sysh_xv6la z2siw^tu+VQhs%dbQ!IO3H8WlSamIsPS~P{%T4#W?Mmirn3+9r@eB+7Sh8N71*t2DD?s58FDD#GhY6 zx?XD07*aS^Pcpr7FRE_am2s?=*VQ%_*5`OvZop$W!xc&#LwFxg{5|%D4jYpcT&>7* z`8Bx(kJqfSNPh?n^+GIX>F@+$1W<5uhu03;e_oR?a_84{M<2Vvo$O~R;xvjThq@i2 zd{M8(iGI5OG9J4UokTDHF|LqwNyICob}Q#7mX>+)HbBg}d~Cb&YcHkDTzPTpSnH$L z1rTwPA$wcX7zH=9qf!Z>9%#+68{$mbfn!gf=qn9w%OJo5HG> zL_60@&ROOVu;^kXZ=sE3GJL+mx zIwvlbA<0Qq(+cu=Sy}A7R(_2;Se*5HH`^*!PKV#-<@ZA2oI!V zgMD-4KISgRwktyDZZ^`N4HokUBQYDwtSjM}LErIJk9=WLubrN>^D)Qn4XfETiy8Ws zpCG$(^A2lXM~~q|f_ReBUTaIBXps+}Yb&>OBhZw|KUH z-sKP7e~6aLW*r^7R4xAojE&DzE_CxbO7=6{#Gx1&<< z{lRu0OwmxVRVE*$G&0T%e?Vg^$1n*Y^K>V_?1{=4R@S=7Y?}a{+gX8+=GLqZkFa7# zP}9lK&L&)pm}oQlb5myqWqgBM<9zZ+Xtk_U8U+z)C>hb9Ey7s@RmJGeElv+@4}V9Ey@_Zn zvv%k`76}(Op$)OrTtxl7l%`EIy>yCdHH11)k}eRc7bDtlPK&t1+4cjZ|1nO{(hP6d zMw^irl~Ys(HV!>AT^@c>&y}CN5CXZsHm#>JLeh?ojh+f?jCFgww@mox|V!s3=|Ry1yqcVq5!g@7cLEkufIgzXp+$O=D7$)r*}t z;Tjz28>t^~o;@MY?L^?6kmV!k^X{3dE|mHQN6y)DWSJ2{s3WR_54}m;NQpjSjbu*= z|K2Q<)DF|+-okWticwo0qLuk9xD_g2!O~77wtOs+Z*=U*cMUMYV||!%mmFZz=LUX> zW{&XEY)aTX(J6%T7lliKA(w172IzK)tSR-FaIsMBTKJ+mUXKyV_OpGUJAYC2I{mB$ zF$=Dl))iJeC(XGDT-WHxt!0-p%t!4zut9wg?8Dwc(+c|l`#Yr)mn(8c`z2+$A0A=!s$mji-Lwdhk36epJ zS);SerMt?lDTTSB{p9uU^Hbmf;%il_)2+)lO511#g>=u+J&Q5+EcE%nX$gzB++q7u zkj4*BmbbT5m{;PEPi0%?-7ItAV9)IRl+Ky3v7Tt@#{}(rmK0Xv&e-(%IF>&#sX7Vc zthnSF`k{ibwZ(Tl_8>N6i$9UM*l757eBNK*!x*p)cP{paTweGQYKpnwZG`)4t^}@x zJ1jN46c!eDrdvQWOU0!$rvhdQWUINPhmw;f92j1V(QHcul!+(?{0uLKKc0zWMH(#9 zCXpXd4ukPLO!oT)8w8a3K!~VLVgx@WMExT%yf}o5X_hxHD;y+7)=x&f8h+6VzUyD` z6K0yNESx@PMk@OW^P`XR=F><`^@8xl>o)7Rv&!*_$p~EUjl%6a;JG<5U*l0twO!E$ zGx#I{g<5|xP$vzgTWrRWYn$rM;iC1be(Pz8{m?8~R|#X022s>PjR4BWK?l4M9&Py1 z@kjaZ3m*C|gj2O+)5R)dE`5tO3JqVZA0l#@j=`08$=eUMB7p_^%f6#S@FdJ=HOV>= z&V0|`_YPKlLu(08Oq*{>#~f0t2&$CiiJNZ?FeY0-wc$DXKUnD#0mv==G_Wh=tGm;a0^`bSfq@dwqk}>z^CFyiu3)ufFiq9=n}{=1GbV&O+E0 z0A(;M#;t`4r8ZspNt9sC9VeM1e8U}D=qjSrl5kw424}xMW(rl7OTi$KC`BjpN(``J zamKG?{Bhe+nMARxCC9A0HYKnk3SU6&#E&c!u@rs1Q^H{_lr(r7`;2s1y_&7g9MFRC zv|^69e*s5e1Faidd9>0rc!`4(z!Txhv`m?~MfL-4*>BT=or#8StF*+Ko=ZVZE+B=b zibcnY=v#4@BK3_VH#gOB+E0__grv9x%}&*p!l};t8;7vo5dDsG8yKDkTE~2TJP(oO zAqK}02MATe(q{>8`(D5=q@3yq*6{mdX4r);sfMS!BwGAOfA+{zvR1%uTf|uO*$-D| zbJ!-NCD$@1(51+Lvco`iPe!y^Yd}nL!2(W%?11t|T=C@h8$5Ky(u1?}Zr(r{r`2u8 z?;lB&EPf-24q%jor9@jG?ojG7>+`;_d^9^!3x~V!w6kBmp~RRxW1=QZ)CASA@2u+c zmf{lQRg73xR8U&{^ps89If>-VOu;1k)nD<=`C8z|O7JXJ&q#|{yItpTuKkXsMb{XJ zzF+9VO?+n2jBc;t7>Kf?yWPsojgo)XkMHUj@+4LyAJktJh#pcyQ<}CNPHeuNQqm6$ ziYu`4fav0)&!6J6aP_}dw>4sYZK2C#cdH^F`DUe)Xc&?b`(q_yhU>$EL_}3!+N;P; zZ|MwVDNzgRNnLm>4uz$|>up=Pw#p52#hC(vPC2VDt7fDk0^$~_F&=cfo4Lx^2>EU? z;>%`WL=E)%; z9S7me_^0fZ$z0UUul>e+n@N#-luju*k>4Z2waCz<>rD@w^I}N5TikKfSaJMdzL4-m z%n$9(f)pgEDHm^!+L~G>Y6tN9Z=5|mXpfc3((oc0LA4(ymM<@ z0u9E9WAly+))XY}?2$I@Y@e>?kDJGQOA&I_5Li3r(Bi#oLp=;(#>|xBh9*tr^6K%P z%sV~vPVE*Gh8LsRRJT`=s)^Juz8r5<#x%OUHdikNYuvn}mQ4)B&4B88pA&gZHr=Xk z1IojAeD7~1Jf->KgKU%z2j|Y*g*2Au5z~$97ZF~}LYY&fPQCv4XTx8R>A4H5y1AXi zNp#_p=naGlvC8a(GIe7av5m+nF;Q7=_Nqm@!4wA87R_bN^G)lNp0gsO>R|=aI8&{Z zVWoN_IA^lGh6Sb5Ow;YliJG* zEH_^0w)QXcF?%jL>t%@|O3eW#cZX#cq}c}H=2jv^k>)jrxyR;68t7sB#Nyy3Tf+)2 z^^tkv)8ZbR)49u#jO!_*ytNpS|)`I*^be0HqPL7qHnBNz zXdGl=DuGRmrqTXvi{m<6B#le2$9r3r(?dGz6J`kb@?KT5Z?A|k^3?5HV$ImVvqUr&ZSlS|81 za*#W0>s_;T9-nC1)+uj+F6ob&-QkhN%IT<%h&7tlO79V?8yasuV-o+_%13PUw zqYapO{{8Xas)CIplzA080juKn^h85~NKtk`Ik6VFp!$&?aF^Khq)RM0&p)UyEj^05 zwv%2@30F{77fRVG3VVJu+$`fhrn-`1JWZEEYxFiIg73>XyVb*&z{|cW=~nv-cn$~U z%U(NsYdQs^DzsFluY1z1`1H16qh*Pa=T6diD>XQd$MlcBFL_BZ19Xf{gmKMsK=kRR z&pHXvm~=TAx{dr2H3l-xJT*PsBxl7xH8V3KEo1_gC7*8sCJ3;msEkWyy>xW+?qyUL z1wm>Jrn5@$%$x+l;+*R?^(*{e&?=$JOoM~8v=)W@bg~96fA*1PH2cnQ<~+-alz3~8 zFwVO=Q-=F5h&*49IbuFiN!|n_B=3ZVb}fqABx8;f6F=l8>N=_@;f^V>-z@> z|5d}|U}O5fmR`V~uG(`dk8h6S2dhY@0VC}pcOO9ZkRMS+BX)E3Q;Hj5Fh6#yNN{M7 zTPa#;%G6kIl$zI6gW*+^HEYk}WS7*r`)Xx0xVYk$NFBV-98Y0Iv`qK!US3}x+J0tE zT%|i^9;Ck?>v3fvpfQue7pmkdn2OrC_H5I$mXm}o%VO9&^;Mg`5VzQY;=b5@jxl-8 z4eYDCGk*&v$I}%x<~Fe(yA(Z99b1$G?nj9jn5nsr(CT$if(T4Sh$DUriQgj_RQU0K z!ckON@$dqdu)d1)_M?l|&&{gE&pe;Vk)?8@fS)W!ChRI@K& z!R&<8;Ni6)-HGX;iLwog@0OAj^LQVmIdxgDHRUvIXzi4ecbq=3aVl(6$=P~89b~yj zenlul=(762)aO%VqIf2gx}BfpeVPHLV|#q+km)f-$$ZPzE&-t1J1D~Jp{JPX>qImz zecnPxTolPz#-9bGej#9*iG^0%@u4?D1!U@NhHU_F!Vv637J zxf34hADVoq{~!ddzyfl37~1_n6mnC9;~ZCw?|i)i{gNQpfjnLG@BxxrvgHp4j)P7X>-~KPQeM@8LZ}y zV7hPRew2oWALguJQT^$Gz7Lem_%FTUACP0xyoE1JIrlof`;y-feXt$dvoCWLk2l|7 z7Ag3PK%*)!Us0?&<`1Zj@N4BowZpnr$XpPg-Kewi_!~b?e!1y+#GO6}enPPpJQLmo z_jAus=*uQSEfNLO)_wD$-Z!+&_(lMQ<8yJfIWqt;0hJlYeeFBU`e9Z(O=2hQc>_`$ zVjI#9vOM7d=F5j#Nup9>=vP2O#UO4<8jFCjZL+RH6SvwiQKcX_psqi&IN({s=W8d^ z6&bJ|vZs^wrRMv7=_;eAspYC9Ak{@M0>3Ba5|ok9h1|Pb+NxDcGFzYUVBgL z2*rGEyj+7ti+S6qMv9%M`lIN6>S~mOJWivzPuWpFkz~-be!|IMAOGq>nAbDMS|As8 za)oH7mn>^v5Sx;FoM~#}2R+!Q`dpOTV4YtE7HlKSqCKc18qsYxUp>O0M;M%m=9|TM z5%vD$^2F=8To_k{rO2Q>-K7M#nYtxce7|Nqzvyg+GD4Ha`Fgu?`?dk$y>ZP%5A~8@ zk+gy0ULNP(eaSuoedvkv0`^hyL7iuF4s(J#sU4*%!ZpLs)&-g84heJRhFywaxNcH$ zJ|3jWD>%9E?Ry7!%AS0#7@=2)&jkzH^lCnPrlUY`37m&Rx&md!3A3a<8yWSY23X9D z*FJJU4j63kAuYn(Px^E~@(c3M7r%tn2+o^1@n?&DnE!Y=*U=#$pqGc#sdl$_VDHMk z-S}Kfkd-uGtZ zk02Uuu#;dVg1cJwOtzl?9#VEbsVwF(;W0r+!KF6%(**CP0~=|9!!=&7(;f=MwDPmVJ$ke3Gh$kc{thkt zM){@Wu=Bll;;n{UE>0ZG6FJJa;p9`m+WCO&Ft*OHIA;k#AmeWO{@tvnzf4P)H@1#3 zQtnErutHXQ5eUIDMAM2j!{Fvi2ZEFC8~W3Z)$XE)rcLPeTmI!6YKPtvuKS_YA4WJt zBLxhz$5h(^UCpv*^iHe2*QxfxFDYb|cA3rc9uWi`S$Jb8Gb;NGyK4;TA6q^*R2Yn) z;h{WgUR1s@fe@Hshw7#TwASQzx%Mv3;-C7aMXRt-=3%2|1=rpx%Wt`^+cH)25_h#a z3f;$=TNjuDSMd>X2qETl;nX1;X&_1_a69SX9JTWw+pcLg^6hsU2)t!^f3~^s>{+3F zk5>Qr)T0K3o5-fEO&M%?`O3;Rm_t8pkzAiuXeCf`bpWsQdGAZRdHRl?V$2s`4{ViC z=aSjyY$HfcQeqOb<9t?G%to^ee^6PXr?yER?mgbJQcP(^PdUgCN#P{Y~ z-`R&uNbZeK8@k~h(T{#azbaUZV=OS;n_Yb;9CyHr1fLI{;+^Z1HGd4F8|xCpU`d>@1( zon&x&;KQ@)?hE~jXo=0#e+K&p!ef?`;^fAkh@VtPC zd_~begD8~_e_>b5oOn|reAD{op$3IT`_?e^B|%uP`wgqQ3JgR(5qq`Co}s`2v+Paq zRGme9&GD`~7GUriOt4=jxFpy>c|?Qr1n=xTo-HTeUHDEW!FuWsb?ZO__@M+g?>WZ( zM<|j_A`5=silRL(znr{cjpkY3ThK5S6Y!MVI4g!hulwB6lV7!}3VFK|ovK_xJy1io zmnA|F$3kDzCqit*K%eW<82IRg73ftJ#uv2TU++C!T*SDAV0Yc&o{nC9c?GRzZHTpf zr93c$y=?2Cw;DPaxFA?V7r%qK9kv^Lcth7eYefcqJimN9sWVQ9Veh6s>1}DWyZ@oq zhJBW7H_4q#_B#YwKz!Db;rR1M0*u9`kvDxR9HIwMCR3=+3P{opwifQ&W?(t~J+ymvo;0;oZ?LU|@Z znC0m}Cx_nhn9D=`m_&zsf|#sxi2);cj#>FG+#tY<847Bvms+4$uv&0hlF3VF{mvocu}BA0abpvaitZrTZ` zBN^m?rT;G2M{d2dYgTz_^c^qC(VC(qP-o!Ol)pad!4=Lsprik-gjsgRS~Ij>NGngL zV6E&$a|)O=O-C0S;pjc7DBd_F*wsC*Id^~*N~?9*4fr> zkERE#E6@F)(WtZywlkJDw)^TXfukI^cz$*Hd8Hc#w?clgtX~Jmao137x_ZSMMFQCZ zvBpxN5}|TZa#FH*32cl<>G}9^L^AtB`@567=exgl?~T*j7;h#3F5jVbN zrluWBW~6H-YQ{8waT-c0WHjnX2l)`=cqS9iqeStfyMv~;o_jt9nGrH@c}#891=;cb zInw}4U!-lI;xG?I%&*$@%Ih5QB7Ijc4t z*JrQVjfWlo_mp{`fmiioAKFfTY$Uco!lai?OAeLihIzR?0Q-yrvu~4RTQ7z*@MHxfjfVU zqPy<;)t^kWTm1w+MsSn&#Ev`soy>Y%huL7}E}x`3%z#VZ8^Igr0c+zCpV5+eQ%`l5 zL(3k=NLiv5U4;fw-KtF!!odRn75NM|x&@}gS+)JZYr5YXAH+Z{%4WvU{WQ&yOM7j~ za>)ix6P{0v=qQGx2<~~eZypGRytRY+zKl_UTyT_Glhs>3YKL5@uhPqH@XP_`Wqd%13Dy?0oX>M_SEs98)gW zjNB4;lVsO4Z8A~QLM7QZ%90gvNxC@;hw|4jZIX6V*tNmyISm$6d}3io#6bEsaqmKx znBPx_R?V^Fd6t?&b%X2NmU(WPQb@BBva>>CgGZ{5vE$;-j711Xq`MDFK+dv!%-T?f z!iq!uBKgiBhEeLgowx&jcbjeFg ze1CMgMFc9J7GJE%+Zta>AtBZ7rqdr5l%G?=qr7P25qMG5Bz&*3CQr#`xgD$eK2757# z&KJor#G1)Hq)kR(YT_Esb68u(Op-38ty|ZmqH19Y|BvkKs6Z74$Im7W8uv7?@mZxn zjmwhzH5>kLVAYm2w5M2Bjm|Z{rws9AP;C%@ZpWnFQo|pJC#vxh@2ay!LFeF?PA_AD zsw@pWo>8|&)cKKV`$$x?bjJt;+ig?ZEmhkcL2Gi9edp6n65e^# zd;iuceNkwUX%T8s)GE@+)2UedwN|p`8+YXeCIK6O6~Oj3HMc+ORaSENirVtq3fltO z9wY0epT0f)zU2fv+GN%1J*hrXy-~ekzeN)7Zd?gJ!@iQeg}jZTToKVrAk6>ys)G~W zEWgUg5enPuzfDpl$xBCs8nvzLs(s&UIu#k`8U_;LrOxc;s!`#MaCB=~B*{db2xYiP z2kEu~bTJr1lKN=3RW4FNI;|w@7qXOj%e{~X^=(K+@4_~ImENQxW1Z_Y z-;T*OYQ|7Q7*gZRYDn4`{kE!o zOrvydNQ=GV#_x!^ev1u@%c5!1+;(CN*44ofVl`)`UvP0thIJo5t`L&sj8~oq5B@q# zUTnPoDH!6f|;YGkiOib%ML)I^A((*up@xz-4N?M z?e!9Y;kieYR<*qOK2|{2ZD~)fwB2EB`S-kz=h&lFMayd-zFqS}qLy8YXAhyv`keC} z-`%>)TR$w3hxts;GFcS=ZKIu|`#>U9rbmh6$;?Xq8EAj0{2PA}J|1t>cdlOVK;f*DoS2D)uvoOIVoTb`y{`XUG8;!7BCs@v3Iw zlj4X6Df`~6lK8N*6c_g}EHM572$bbZ94Jbn=6F$;L-~qL`2M}s54T6I6s3uR)tDnU zgV0m=-vH4wW3zDvn6`32fyf0n!TB%i#Y{tUzJJX>4_x9xYz%e>gG$rUL>h#8xxH-rIj|=LL0qu?PP{qFTj@XH6 zkD;d6*jVJ`6ba!ncU9Dw)CivOEKAs_h3e*^n*C;(+cm#Tt}QK)%H}wWT*{hCW+V|t zrvD^RC+wMFKh<8MHHoR?&C{RvX`gHSnWCgb$x`&_>zsnNku|WcV@R`_*UourHpNCE zkd2*)MH_|GIL*|oH>F8zhnGv|R~xW=u8uV%Zb6hjo<_4!>EySQ%K1ahBY(G~NLi#@ z##Mos6QZ}1$2AhSytBin^|FSc_p2gBEj@O3L|THHnh~d#D|UWVV;%KiYA2EqH>G_E z7wgBL{pj!hl{_$L>#xkB)XtK!SuN<$Ps#_Ih|S=as`@@!O?v z@;wrQCF&+P3ald>bN?h=^2gz;^|Ei|)g~4EdD~yibjTa{4XpY3m2 zMFDW&-609uiwhR6={Zg`cD=~bWBem*MrlDxI|W8h1%4~bH}9PB!{F|c5Pqx|o}Ts2 z`|Bp^8M7>nQtWbSRu3M}b>_0p`}Up$A!3${F2vX{aQ?tYf!xs6*i!2Qa zrviCl#S-K~`5UegIV4_bzt~tWrNS9QLcr{i0H6Sao5s}qC@tC9`YGRNdBEIEFHcY} zX1HjA$8jt*+o-=V7otpqm0dKexzJkHwa9y}8)Ge{+LYGYN1(DWr?QkWJL9!zf%3jk zR|Sf!WU)7SStofZi+POiXTF;*Z5w4IW-8E&r4oxsVTPB1O~zu*~3*NTKf zWtJe>Mmady%#^EHFAQl^uID?S;Dm4!kZ9;UaM+-Uc{bj-K<-+e@F)(LDR`A|gtI^r z$mzgY7Cck9*&zL5|1^X5(-cXl21c`#g!Obu&2U%h+}IrZyZ^k@38afJRx(QoA<=3{ zFiB5!y`{Y-9q-mE%m(vyzssUfzG)SB3pJF!zK19_p+VRxR|5ihFOA30u;#eIf-Ii; zh_DJyF*|3?H0Z<-s>(;dHoObjCYnRtl~lpCGwDnyP2tx*X(0AQ#x&2fPP=q}Qb$C6 zuN}@k{f9SdpBEhuGg#FN;H7}{YKB0tcjVCco_9gZH~aR8j&CWS@1tF$=UufXoH< zCQ0YS1%nif7uHv-#xTwu_P)NXO`{|7O?nuw7`r5{v8-+RY0zfm?dM{@iZ#-y9k6K# zkyX*R-(Py_G6edG3qh6q%b9pl>##hEL5)HU2K@bJ2V>xn^7Cha7bmSLY}c$<3q|1% zFM0RKbYssa=e4?oih~orDlVc1vwX9>#G`S7lqQ9lwMPj)@r_>xJP&imepi(S51PD= z5(k4sKCqRUdP@ur9uMOBakXJHG`uSqDuHJHxu4|C-VPx}_bx`vv3!goF?|x=j}gNp zH(en&g*u5Lu!}QIzaeB}?&U$EAw`?}i1^38lMm#0fT?V9yxC)V2x1 zcY=s!68%L9O>yJBi8_Q-0z)wO6Pl>hUlRSrPb4PxouHD3#{YyxBa#3CwiNzhzCXn! z-=)9IScnuIEhTzT`7ik?LP^e&@RyLp6q5rb4x=YYa%kZQ(YXH#QbIvLk>PYCzmjbI z{E3bxNAVAn_?qxjsjuiGfTEdX3Ms@^0!aIp2}P7jDp5gBF;j_ zMQBTKF&Ur#5~+W;7`W9qz=$uGLX<+6LP;z!3_1(eBUI~1)k_zsA$%Kt1Z?^LL_y=H z_=ic{$N!bynFv1lGGGcOgoENQk*F2Sm6fb5?zMrG2zleDemj{w57Vf^45HQR3#4t0 zZC3z&1gqYYE|;DYo9A_7PgB6_edB^}P%Pv?!^Z2##`SJ1i@$viVu=?$-+*8Z^ zk}6U{Ua!+GT{M!<*j+{%lqBSaOE@~F>Iku~D~fb4u6DsOx`$99j6plkutl&I-iYt*=8FgFdz< z=0-RyzRf{+N0(c2q=W^)Ei~yJ)AO0YQ zm-#Q{m=0Q&ul&gc#)HOSZY7_8TID@SEr655nzDdv$9Q|qZpKBJYbV)v36>$w3ltzm z&?5Sl=H4)nJ?eRMZkKyZQgjHeDJn`h1`4;yDe+{dkD8>y60kF6Pt$JU|t3yT>Z`d6;@^x7kS z=_!rAG~AYE=r;cL=D4ZWZMppsXNF*5=G%gf} zXv@&=k9-~8=1}jytqE7LviS2QinbG-t2Bzr0S7ew8l<;AWKn7a90|qVg@rev4$%FU zVh64+QQs&DXl{2E4ZDyOwp{8Cr3o2nYfr?m^R*L|@@;p$M(AL9_9Gz5P^?VR{gSTM z`tUKTA=|Uo3}_(bDkv$gYis|?Y^Af*p=y6xA(Kc;MVn}~xA!*uqn%(p&T4O@?s8Al zHIuha)u3+lDR+BJHC5XWTRngW^y9NbBOOVxu|sW*L9EPS85Koexdce_vwO7P1-G4i z${$CF-O0h{mgYpsKIg6N76coH;L~McShse??GM?oWLu_lD&bL6l=~dP+ zlahPhy$+%p%7=nLqvFbDh_{@zQizQYT*XIf9jV^n-vtE)lKh&}slkO$Vxt+S_(6AP zV^|1@G_+p?H-5GA%PM)M+0=K-d1J%OWJ6mej!4o(6mUFrjVjsxQd!H#{dOPd$Fwh<1UNEQN9dN!BD4BoXpk0esW8+aAD9s3)^9Oy zHT;KVx89Tk)El*Ph&OtFMNZO@xcND1WEVjy-0Q<`f#>pp z@^(i=De&XRod6r;utEnn;*AaAppzpQx4@UKH!{_Td}$^p9_aoH9`2ObJ;&>71Lzd=%J_|+7)1@cg`C^zB)9Lzua7HRD=oZ{Y&?0*6v&Mcy8G> z&7Xt~oo%`cpQF-s-Z#S6gA2X2eON;KFXL)UB_gR-6 z{;P0Z&&6z*L~S@4_5ys;XNI>ZhZWZ$qr{`$XgqNl{wk@9md+pC3!4gIWl_>HISH8#QfbGK_8IAu)EVm9U5$HVqTGrbN){GYd{^s8;~0FX zPV?QP@3cPqFKkT-2=3T&2Y>0UA?Ltwlh;>T0&@6gbd8(pI>WX2=?vH!G}O2+8dXAY z{6GN8?>u-gFdpc7QFr)N>}Z|8uz5#xOt@UVO!A6JPfgcOEwkM?rgJY&mU_i)YkJsC zug|Z~wNJLs-jZ1|8&;a5Vh3yWeJ~6I4FH>qu{Q3KGufR|)|qdT-9}dl?1+rVnX=5h zCZ9w4tZ~h#tFS)e{qjfC@eZ>{$f&X#WX4 z`yziLsx7qp6&SW{Pbwsp%GXUL5UsyrPUjw?n%Weom33I?T%Y6;hJ8O&8DJ%%5G^oxe?W ztm?_zeY-VF9QQJ{Swzi<9xPD1@I>y6y3rVVQB8 zp`5{*VJ&PJ&D#P?A2}OeQw{C|)V~X!O{!ggs3GOBkC$7Tbm0Xu7UJpVg0rdVGVv5@9#@hh`j^z8_~WqeJ`%vlSs!BJQCy(vpJ<9_yFXyhdI^EM_tEEbs~ z64dKC{memRw{o=GCBvCx=_FXxcI^UMskoLB*ZHFV-xxcm7)^j?@9*r6ZQHhO+qUf; z+xG0(wykIUjCO3>w$8pcCpq8Amz<<8y3=>nRq0Mw{eK0+xQyTmu4WwSq)PgYmh>&9 zTA87m-vi~3U?iV8nY8MgKr;vrS0I{c_?F@%eVubkFjLin$7%9$;xKrcDoD{(@|PIZ z9k+mzJ$mG6IuJgvF7unu5DsKV07CGb4|?zP#~-h+=YHJ}haG}%K1~5wLB$6L!D9xZ zm)svK*RTQm$ix;dKLFGGAQU^G*#RhyKjr(OIRDq;1KjadXPw+9SsXpHJG4o^sU-Q> zlX#5Oiw(LlLSNiTy{RJIW?hSV^-uh;vTf$Q;#J~C#&mE8OWc7nzNG~Mei2JDAPKPH z!HB$2WTVH2|B6uSI!pGQbMx~XgLr5`jHr12G57Qsq6Xe8z^>7@kq_}M=75vbH9tWXc!|YD-YIXh>xdt4 zJ+D<2a3ZTNT~b0zL(V;E#Z*SB@`uGjSGIB07~Vx(B7Ph@orQifBNN!1+mgTKBVLvQZ=!AzA=_U-XqhcYcIHi|2bsIY#dLel?GhD~3b>qU5b|&}a70xm1xMiz9Tohlb zOl0oT8z~;=2`fZSB6}?-sttnGahnPCMt{SG6Kd z=V)dVl~yA+tPtc}0q449vUh|lcMyv=h;DaXJe*D8z-=yRr&X4V4SGI{ZA_!a%eXl6 zrhMma8rQa_)KR!Amu;cLzKsnm`Su&hwYiyuA66wYE`tDy`g$g-k~@l(l#^>~ge*cg zO9Ztsl)Y@i>S-u)8%)QQkbZ<5nd0lR8Tu_Ds4shLP|1hi@dN_BA#`+NqJX54(BuAh zlO`1vMEK`+B9q3#B4Q*=qgF`o8AXeAj+tV)hcr|TE$_YA7rfod9ITuU{-Q>h;!Ahi$j-A zv?bmA_7)EhGlKvdg-}4<50+=6gWN*>kiF3vAOM9R18Xvz60Y5eG0a8E#^9yVgh|Ul z{$O<=iRHUPJ(kt1cBh#EeX;H9Y{s_8xyw1fN~y&5r) zc+#nK=|som>+FMbP8BWCd6>3gw>BgOG?#EndIi(knfz3WSIWHh7oQZ4#VUU*UcFVT zJbP79EYs3>Qm!Mko+FVbaz6>XIG6G78EA{$Tl>~5ZHVjEQMgkEZix2@_@~K%Igt|a z$Hb)x4*-aajFpvD2#=z(V))C7Ep~FKwJ6nih3sWuxg?h+Fk9#zdZwN5qPq*9Z_?Jm zcM|-$_xqCM`qqU$lf}hpuzU5<_G+g?%#IJEapzgU+^7fPq4i{CHr1ykYHyT_#;bK{l91#VjY*3cgOg?v*t>DZ3Fn zWlU5>M^3I^&B~-gfpZGQtmB#{b+;`!X8s3Vc?jo)x;GaF--7Q>Qt%gQ^wb7RFDXYo z%MIlNx=-ocsib|avZQ@bad|Q0lhZY9L+$TUkFQYz1O-6z{D(o5k})zfdGyqSs@7gj zux#Y)Z5dfMw`Hbx{QW-TdV70?lSMIoluovn=b4++@~DGopdZ=SB52p@MMM<)s2Bnp zLOgY(&0+d|>=DHzL)PVtx&O{Vq)4N9cnMFK$DFts!YwJnAPGHFm!ISeBEM;6rC$b7 z!72p>vsQ_3qySme(2y&881D%j8HQ?B-T@YBTKa*M;~o-DUe3aJRvsdH7YU^vx=jpK zj8W)7B0PLN1+&M^iR!uII-^A7gkO42*TtlRg}VY|rN>9LZJJ(~rEX574;~Be=?3PL z6Kocmi@mIG3_1!&DYwARd`Yb2Ov$^91-A@B37B@?cwrL(8g?AtPuF_Z%cdJBtP+{| zr}V-|pGDzp5PuRIne@hj{gDE82??vjSth9p5tZ=F#QqACrqKeQW6(1WmLkV0P<6H( z&rd6VKX312SGs}CceVQY!W=JyQ(qqR4Zls9GK@uqywPc_=f#BVy`XuRQO@93iX!{2 zf&*Zg7f)U1#e)!+(^7@Xx<+1y{TpE$zoq-GRF6OWOcY+G_gql*LN<|pM&LctIqwj6 z+}BZt92 z^;xt!J(V`&z>MmdmkTm(^%k(-}*yXKo4eg5Z&#U~cU4U|_uA zGf>CqT)mOV{~i!@$Jt>*Px-f$t5gh?^drSk$50w+zW(rJN4h4r=D8$3LO4Ht}`u3-AI&MB7& zUSXTI#;u6#%gtj8#&gVoXpu@`Y=Bq--NIGlz0HLm&rH({0IW5+%_~fYHll50N@#HG zsM&1q1gZ5Ub@zAZz006Rm;in+i*5)HRjL)xZ(5^)J=@>O$Wv#P5Sr6S&;ucLWa=fx zSgrO-qM5=JOt&GW^xgOfxE;yYKa};trhi{>~hnq*^LqGGd}?3)x2Yy#I?Mu|k`uLgM+t zKDv~kk;Jd?I_pHa%Dcg|z3aAt>ErV9Yh33t?E`ftA!uQEJheh2!~n_D^Nt{V#aS6< zN+npqWfD3kla*^ViPzN9I?mU2ZsnkX$|PKKQmB+sN4eUhoR5o(YnYjIHF?WaK)~5^ zp>davL|sCUd#|+|N5WQWD``)2xHhtb`e_LXA@-&uE1Boh!4(!Ku!t&P_Ua0gSG2W@ zM_1(MWxL1X6KR0vp5cB{8Ts~JJJIX#!E@4-)VO;%;_cn#ek7;r5R)wW#GgdZ{$6;U zzod)u?iMl^QZWQ6aA}?*gp3Xv6ROo*xU4GP26e z6jWq9Yb;}_mr>>f5=|#eOU1;`Z1z`AL*(XN`-e~$kwQYW(iRz~v?Mtt2=YKz=3`7% zXSHuTPw3!K)!inpMk@Nt5BUr&K2H8cCmYnb=90$6KWXF+VVnjCY2f;?{4&W?!FRmy ztb+g(azkBTtaLG-RPe2~uor{-m7u|U;qcu+NT2&+lOVo1exanxC#Z-ijjUjbgxhxj z+2^zDt9|GoHdIg%HiUQ#xAXxM9tzz-o>4-X2YEC?T~+y%lZ3e3x$i+W8iC)}uJ@pq zKO|3EJHHA+3NV+3ivQ&jLPAq~E&Fv4-0Vat(P*B6uH9|wscJbcmvt2_hnds*Z{d8Y zf!}7H@7Rmm*h>d7T8nou#ZgTCun|WFYZljZ_Jqq|>HVpZful@$wWbjzP1jpdPqp6Z zap#n@U@pI*)MGk-N;}O)alJ5tM0-{H3Ny3nisEn{d-;^hT6M^>6iNbZa2y3gd9!R0 z>9wdbS1x0lB;?YV$zRypr>sN!O@I@Hj%xMRB$P$D^iU#{MYV)$^B3J~Hrwj2x^zo5 zvn5WA6R+i8p*_!*#^PWrBgr(Obt|PYIPgnG2POj66GU#FgX1rO>sDr0kjKwHfNa4w z4l4!H*7G;?JSCq`w$OenO0LCU^2YEy^S|bQVc^z;VFu4(*QAk04GS`ctaB+ zzp-2yW8-Q$EO}xh?O80t-OXR*gW(I5X0L&LXEdxQ=*atwmO{5ova@&Jy6C7Z3;AGT zqokB;F@7$SIw@0-xUP{F0gP(i6#&_6~~W4IA^%$5g&7sg@~)V}6e%?lKW zHtBnPbNOW7Vo~_SE`(3?!Q${k`gJEra{>(tSgao?@AZWem7ZISmRvJUNv-fVeQp8Y zHNP$z;p->(1GfJ&2)lJXK3huv8V?0?dPD%BU>ag3@N3 zA2ev-@%Y#h2*4@@AJe}PEPyA=vSl5Z6-xenH2w1-y;l8!kK*&7J{EJ5!9eAn*MxGA z++P{Pe+#svrUrcE0>rh$EK24I;7#-^FPDpv&d+wJIn<$VGzLYuNsGI)8{*~`shx{; zYgCOU$-Xbe1sm0;DCx?Bo?5I&tYcVduBcnm9=w_wgp(WVg~!>eZn@c_hm^~_N<>Kj9!!`*KlydCDrb(Ye&C zj(E5wNS3sWEp_Z)`h*Xg?GJqOW~dj}qSYJ(d(lW1#bL=5;EV~z61{jaOl&iDFZ*F7 zo}D|Q)ChT84+o(KzpT+(u!raKpR@>Z&QnbLlLA-uHuJQ&M`k#PRjQg3JFp^jk{gn3 z-X6=!_W^;fhNxLGBUH<$66WdXrJix${jUTxSR&Btx|`2 zO;ICzU*$5Jzuxt(N*=y87fel8XT4A{Yt)da%3xA_1Z}t+Lb3TWtpXQmQroZ>=(V;S z#J1Ozd(~poX%twoZN~UeZ;YFguIJkwp1@N@S}MbyPT9{e+}!qarYC&s?C%n94#p9D&sduCVOTd4ih9!6ikTdyFDn^wxh z^ovIDYSaR?j`wB%R!EMYr&KOw1s>B@_eh#KJB8PzVZ2NnIS#=l#OHJV&s^jnEH9+AezE zP5*+*_I|t(Dgq`@4{us17(8B2RD@c)a=qxhEmxn^6@hHGP_7m|&e&WaYL&z-T?p2c zv!A&nD+!=iX?1@-YP_`$Y09Z5nTc=y1LoX;E!lqI%{-WC+4z$^V0W#r_xWS1)mXDz zj}ntS`%fA8^5}a_@))KSq3x%it6{&Axp)>-0zhgouoEj-%)eS7;ndXe&MO2Tzs=M? zoDX}sscFnRIv4-xbFl~4<-~j5YFZ>JHtKK`=hMH5(e?MmSsaf+<)fTSl!EW7dAlkX z{obFMmSc6RaTF!qmr}d>ls!AW`Xd)Pca~DOW;Qtq9pbl8{I*q;yR_N-4fGcYSPZJ7 zzLC+U0vC(x&-vdAWX=R{XfDW3t#;t)>o%Q48bt zo>tRBZdZsoJO0?#D^S}6`PseoovQXW!W=g-`qgnv=Ws($U3YVaaC%?a{TB1q`DX5V zs&a;dbA~gKRds&;5SAIGNqfp;#VkR8K~lvtwV>njz{ zQ|W21?2yXax4UDfzgL&9sIz%m0!m@0pUWL03j042_sp%U_O#RM%{Wxk*Ui%OtLeuM zti6fX=`Skl=xb~)RBNcFa-?anisV;xbQVfE)Kb^YGqvj085C=nq=tz*l(YfX7gV=b ziqn_X&JO?dl@vq%Sbsv!@MqABj77y3mCc3yQ(W+9pM_EiwdUN{5Qkv9S@R)@t^);zz44 ztF^MS(Wqo)rZ0OycnO1-N!9MzRoB$2;Kn}6FxqiF)L9M)yGb_z&+djFox58qvC-8% zZLoI|y?mV>nd^)dmFSmkcHn!KV73?4Gy?u%-3DMdmef2NB>OiP=d?PXeK1wdYqV+y zTggE?#HW>X^olmtZ4cy<8}z|Q(Y+r3JsQpWv$jg;lvmTBPyKzB_+&?77%MwEI_(=+ zduF5CIXFrt7}*BQsN?@u(;4Xc3Ay2wKCx>QLu7;B0?$grGVczZp{VqZ?d+^69RjQk zD?*~C7Ui6c$G84!8tBxS<1D6Eq5LY9tF5cZZvP?7Y}O zhINnnna^K`G+RgKpi6A`)w2=K7M&QTZ<-CHuAk1U!bs&fuXyXmdaD+T7N=V5W|P}m zqOOn4NgC01!Z-I@; z#ylFhGDi#d^R0hA!{A8cP^Hs2AA3m8)o#}{(BCE|qcM#W?n>*FPW2yyE=~d3nu@XA zVO<z4z3IP_KTCnw=tK|Sd?m@k*s=)AC3?Nwvj zm9#f-Y_a8ZT;XM`c@SX{v0hk}VJDg8W`4?kNxuUaZ$eDDK`Z zFu_p%`qO$+?$mfhXLrk9VWvn&(;e#;1{NE(71dEu*;`VI+|gORwvJ8d+{b8eN0g+$ z5DP2{ZP*qsF9AA<-Opmm3i#*FR2ACUN<=d2nX3nYg^B+Z#|u#wiyc2w>VhY$uOj-bkxJ#*gy$_}6yR(zlZWrJkTv0+u;hy2(Hj zzip^@pa=d31YDhbQt+qj${S|0@dgsH5eY=Pvpvl^eK|jwcN11bdM2rC($WYg zf4u0NGfj$*=zyA#z z_z!aW{{R~xWMO3cA6RF-q#5fFM#Pb8&nPZ?glO@pwIImo%b@VDf>wkb@_lwilZe$| zhwVQNI+lci1T5R8M>0vJzP7PX3Edr1?k7fn#ksP}s*)isx-ADiz@=sSlz0zUbkabb z+9vTwmtawDT(noX9FoI3aKF~i8*Ic zklfUjE%tIHhltv&UaoC97(n3&Ptusz8>xCbn|k-Aygc3L+wt?b*LtvP;I{mNb1o{i zpAmRD^FjZ&;r~M%|34U>>0gHlwtp=0|E4@Jv$8Y(kCQmehVoHeT)oNjzNXFaB~M;u z)-q?#7-t@reTo$fO9-I_6;4V7g(M9TEEF_GX9rWN(nM|8v)8Lsw^70ZAEInmt&l-m z*FM*#(_XJ+TkKqjB7eB={O5sd z-6gii=KZ0{k0c9_7vR<7AiTex5njMMV*suBV*go-z+3$t|BnuAK_lHB^ZCl#O$1($ z1Ya~kZ3_p5Wgvq7wHKO;s4wN&@Q)hdPQ=Z;qT;7oysdU--;tglx=;a*i@NC3aAn0Szs3W{R_w&iF>Ai_QhNeH4~h3>S6%k+DK2vNxU7iPkB7q0#=c4 zqw1sWw*l#cYGg4=bmk&F^Q6$D&BPzEUzY3XI}|Cf0$^Us8W6Az=PQVLAq{{&Ng8}yt zJj9{>@HyNjb~- z;hn<$%&o&s9|}CrLma0>H_3S79;J&a7rlIgoP5;0R`98FKCHcf*!oF5H?m?EY6}Bu zOUF2a;x`2CY_a!8!L7)?_sI3fQK(5*+@-0}C_QiM#meF+_I59CV{dVh>HthxHCw;k zQEM(LVgIuc0WUbhAP!;};s@qc7~c)~MacRNbvu^(K1UP_S{i71&3@c$48^e?ei4 zkeY>fXv4_g@2hBf|HC zwR^bT?YP#`Ye% zm9@FgMA1^1s&;)6&oFDtc7oOPs;_WlB_N zOwJjq#5cI6YF*accti>ol6y{zOXe(nRWQFgOTk>ja4}U~8s*1ksVceTmtgacDpgp2 z6=VIGJ9vn5rkt5}R_($qC{m*zrEK#s!s-02-m!*Pz%;u_*-3^!TO<@eA4!F~xU@wr z5pnLS8g9Mxd{ur`4fuGfNO941@k&|Ms#mBGE`!!9a9!@_r}sst;C^{HYxLzEveaxK z8qnKpVP0siujvF{xwb|dF-lC*kY=GIMSF6+Y3A%YkM>qmxa%@ihNI=^KT0nHYfJ2i z3Sdw!5i5URtl%?yh+x%LDvlgISFar8DyCIcav!)EnZr$~fH@LX=v+Hry!@=ct8Ivv zhd+%98QXYc2;kB}DVq$rRpKz*tPfk^FH2rLyqo<|EvR6*4q(6IF%0E{1?g+!8~WY& zhoX?FlrVY~JvKvn>(sfiw(=_GqvpCLthL6`)S}>VSb*cpsGEe;gImM(nc4mE!ck2v zaZ`I;IFQ;Ew3FDbW-EPP;i&4w7|qL%a%oKutFp`|%eig;Yu$wm0@ zDxMVDorXq(7gyzPS9K*YE&bY1I|Pxhg9cwP_;)|{fi*2Y;UlgUs@yX?I~tA9B%Vte zC!bp9=GB}6L7vRI&BdkpX|M4T1T);hy=>!1V`|%Vsx>9ECFc&Fk=c>;Q1>Mr%$@Q9 z1`RVV@soxwQHJwbptA&yMR+-O8uF}RZStK^{7$aQL?LLJt9;Go>Q(WKKt&RtGDQUs zDhnM0AGqvdB=B{qGLgMXF|4Sw%vu{v0jP>yVMyA>vYc$u8i5)^WvuyoNxTS@V_Fw> zp9zO4;<0cMDTrJmt7>%d3c!SFX>DR>(u)4xRxrF+@931ZvYx0k=am${Co_ielR{jA z?*kV%m`&fiSx4+!cUIuAhL5b19{X|yY2Vs%b%6P|7&9ouG@)(tq{_0Jr<5&-{1mqC zrY@TveRtQ=#R+!KMyv5?ub|IZZbEw&I4?5Qa~ zbrOm6c!>b{ro+|9HfFI<(VK zV7IAPjgM$+Vs&`cdF77VIt!~*LSNjEi<*e5SR^hx7)C;VHqtu)k2>!lqF|}xUA{R1 zZFg>i5#GcP+EUAW;SN+eGXi^E|2@=sH`EcSB6PYno!{RnB!d&WG8-M*lAL&8UG3Qh zQ`E_WXK4rJ+P0%u)}m@vmVmE|OqPqUl=37=T5k?zpDK=}{K6>mVPc;eFDF%@v$Z9k zis8FX0K~Ha9ltF zCMXBo0VN?aklQ4>vh9?%41&6nE8^_|^{Mrtj{Lj40CNC2KpX%L@B%;@{b3ZvB+Zt= zBzy?phe0}rw1KjLJVu-*e?anrs)DM5x6X1R6jK zkQL@K0xyVB#BNO^mWCV-Ar>Yo2uM&EBRN2J7KPMZITOjt`{^5ED~vuMGe&BPI0t0~ ziZFoJIw@F;tZM{=^Owp<1`8k+2rtY`6qz6?Nw@-a3yL!!U5_{kijs;bL54}im}W?L z0>vGamQPd;MIDrspU-Oo=?tBMR169wM0f)l_k*}y3IJ-9eFL{^18@Rpg!m)&qDCKn z(YHpt2mKVF@DYDWx#0j%gv3Mnlf@wM6Mux>5bgc~yoU&=c=|(U=|%jU6(vmSMCVi^OMZv zNWLbY>rQn1Mb@6{sJF5Z(w>%NAhIIYo>}?uYpy$r^*2&2Y!*7Pd(shF$OIG*z{xJ+ zI(&Z(DLr&Qjkq;@pBphfZ2t@?J!C(PuvfwfBl$?I*xAUC;SNR5?QV2!?ZD*hbzGtF z1NIOqWmL_AEL`cSAVl%0kT<|t0O(8Ut>_o!%m7qSyb|ibIUJ?@U9b`93;~Q+w3q0B zJ5)DwxRaygDBK8e<^#G>E*I(sH{u*xrx4`pmYm3Kg*uY~OuS^^WOkh5X9Ecti*;+PE*oIfh!=q*I}VITLUk>3cWq$jZ|*?8X}w`W-t8;l zZ`*`@7x0eKfoUQ9mM4VL(q+a=fRKw%tRJHVBO_(D&N>0^$~=MY-|cOGp>Mm-_-7f0 zlkLTsYcULh6Aer2rNvsfFF!hn@K>q7MZ5zFVPIz8M1DUxU;gAl$~qtCgG`HyJiMwy zct2Oe*WT5@K3!;GT|Cu5y1#M0sJ!H8HmLa|mz}4C4604S0HE2R-(#8E)pT8LH56ENh@tqems(!vBvvj=*1^p!LoPSB~jMUq0L;rGr&A>VoZ0&H(uO@$< zxi25V(zk<+Tdt9uak&l&_?Zbk^)t3!W)O_Ew>vX{oUNu*xJR%@mu{o<=%=-U_|zy+ zii|+fcxW_A3QVA4M{oxh7a|*i}sd zA`!qvJ_{20KB>5RrN_?7%*uL!cejTDY$Srk!XFSo!u2DO2-BLpLClYO*5Q{mi7*mX z#m3g+5Arkw1xJV+m~4|(eQo9a(h%5QOZtvQc=m6)`R)@~I-K}%(DqaIBKK(`5a#xc z=pqne7wHA-6r{17f zis(Oi+tVAyQ3?lb@)tSnm&IqW{e&_7;wzw8ySytub#{NYW73CSI%4?{*g1i8GKA9@ zQs_c;?NHxp{J7xwu?%o?{KKAB==&4XndbviX`7N41Y(!y zU~nZXe20-2I^IZtKalUe7;{9p@XKNOU-kM91!DnilnA9^hBs8P6DX>i-lW>F}bQLZ!`^s95D;>;sHD zDaxGrjFhZ*9m=$hf6v>#NW3IlVm0Cq=hoxTdmy;|N!7xqSbx%!m07Z|+D7*0a3zL| z_Wt!ruyb~Uq@8)oV65-~_QiYn)28e}QoHH&c!_LuliV;T%T^l=nAbJ22BZAZ@Q<{3`0-N%z|*0?Xdo`=Z% zZx3k91&IdF;fL{nZYs+HswijoiwrsKtZbQOElg_$Cz-ciUT-DWXm!tU;c($5Iwt;T zJux7+(4T#NMheom_S~f1k-r5%4iuqd840uzg2TGN91_ho?jb5GjT;Z+3(_GVo_U9M zRNKi6Q*N-kdH`yaUBa4{>?v=f`uG!5 zyRh=Xlup|E^y%ZeRQ$b+Qz|KWc^uIUv^VX_&E1&limJRaV>2>)q3xDqw7IWbyHgJ6 zkc;~jALPd|X}VO$ZaPV^OiaSgNhAM=XKeozmUH_hNthXgv5949YMntiXDa%t+VjZB z^VQO(#y_1uq$-|X%9Jmcqe;~a2#&TH?6Ok-^+;2?RTi71JC!P3*a*ph!_E<}Y|+_6 zIbZ^>VQy-*`55tN6RT)$-$&V?Wq5vpZH_RzYd@f}!YvMf*fNrcG+ZA{;C}rANsY@o z#?J8(NEp(!Zy7OL49J+z z^ROXuszJyKu^J5xts!j=S)><)uFFSD!p~=46W`*V;XI-Ze`;d8@pBAm+RIc6g3HC_ zrr$`Q0~>*P)L&WKK5lvaiao1hdk(Zrm!@5rH@DC@j(dXmHGdtG)3n_(I_qz z?67{65oB0vrSN6M>3YHh?IL<`HiEp7;OjTb*p$`pQ7fw#^dWRKqkXf|F-bF%71Z>h zCZeerVkH>nk`Ci>$wjg{-Q@-MbDeb58d&w!RA!;V1!~vc&fLrqxdGbm!h38R^~F~< zX}6ezh$*w^mSXOyso#Enqw!oGhEBGHqxe}nQj)+Jjjrz6sKhRBh-)pC6WQNGnmv06 zUQQNJ05s0=Ju)6(8Pz1VRtAijATNlotPEuzZ)Dk`R2 zixx$WxMIsY8Q-UH55IU>xVI+vsTQb7mskQKdF{J|M>n{KhsdwUj`U-b^-|NwPN$?* z*5;BN|9$SqmD9FEde8zRH>qu~SF7#sM8>D)RLcW6#?9YRkX_ZE8u8~`!(VU;epDx4 zUoShws@pF3#f~XFRbh2B|DvKQ`O*sK6sXMyN@k@NZ6pO0Hj~NQy5M^6Vcg`Q*|Fg8 z+DganT1n%Enw$uU@P7zsz-FfN*jb{Z;W!>eMORvyh-9lX+hwHYE1_bCmR8>E?UhCIh!||Hbeg!O>d{rmPc~Dju&7u# zw3n5AZw)lIbJEjvQ4W|WRZNaM?e9yi-a<)n$SzTP!7SN%4{fMil(wH$2&SDqn6rTyLAa zg9#Dbfa0VhSX}Zz&7APO^u#L}rSlA#nxs?l4myP0F$FD4n75VSiwdv3PJL}|b4t3$ zy%$Qef2l)S1d1kt^fw<{gO@&{nR2qBF3{uK;*Lpkc0ggyu>G?~6C*iPn$HZYiIn)G zdz({#>a|>(9B-PU`7Rl9>Sp@C0uGw!`QKj9%*wIbe|k=HHRTZ(pn4Zj^W-`flC0IN zHqktNBxcjFTDp#68I;b{m@}ZeKAigul2!k(Cmz{ZSxMJ*6l5CIE>x8$v%&ww&mFo0U8p z8{52dpcB5ZcHX^|z0w<02o9`LbQF%lPWEeRVnC_vi|$KCaBqEevGBU#((SuoaCWANGub#NSN; zKVj_~a@*N%uF}UBYG*6-ejW26GSaC=v&1dx>8h;!iLCzqZV8z+?~=!c^$p!-Xq(jb z8;GiGm0c9o15WO!uH!UZiYbD%DXt@&_=dqA5`9^zQXVrH;X=ttI$yo_s)2G%Iez5%o4tT_2`z;nOg-Za83!D%Ov$*1v_Um zqc>&H+!TBADtWVwkft7*9g$U%4VFG^2%5VrxUS0E3;C7!ex-@=TNrA28vD6-I@QQ? zIr(du>H0mr$;fESAShK=E3Ir~FMh;4^p;Lxdt%wUcOBjdAeLk+JHpN)$ zh#M=H%9S*lDSu9JieHU*3sE-=f(1MNIdQ1O=PY~wGI>)jMLDDKed4L0ca`L*dWi{BQsJWoqb*@K0d zodUJ3X&CO%NXv^iVB=^~%2A>}dVPv?FHN$H<&lfnElH0X^qNGm%HGNKJw^?cqu0%G z&s``45SL);g!w_+V z&`@8@E#jP)0zNgNDQu-yGXN0EnabQMpnB5I&~<6W#gfPp6!Boq))y6`Rk=2@yjN8g zMLhX}Gn3Ch&%~iLKWEvdWhlbq;tuil^oQ1+t~5tGI1S=b8aGK;Gz6dhJJ|QSO-8Z0 z;n2k6ifl~}F~rsPB_l+;1;(v>*_$qt>-nd%GIES4w>+0N;G&()?YZlX5{c~G<;9-6 zeR_cTNmMA-X^%4}U9BwV6Vn+MXsbu+sIBiwEnXeEbvZmmb9!y1?q7-`*8jRRnCl8l z2eEINNXg5&l3}p~rPKS8u(NGzAyZNt+N>;%Bajl}1;}o|>0+E}lr)_nZbz<@F?{ps z_R9eah08=UQF0_btgRp|c^{v!Kf9HkBI(WQzJAS(obZ(g+4a$tB$i~mjSTp6#9MJR zvCdoRF#p1XD{ABD7_ddxprh1mu#tND=vb`aL`qI#v6Xf+j$6-3E|;&UtdzUnYM}Jp zvk^JU_R*2|Q&Kk4FtS&3$9O#d^8hk;4!Oxxs7UF}u78Fwkx^)M?aY0Wlvr>a zTdPFPQRr7?W-T{EAA4LLga@g3fI%1i2H_Pc+eXZ5KU=s-n0n|GE;nec8?EQ|HTD$@jtoCmm@YkJPftB(7^@D!mW$En zRAt@Vsz%B@XVHx2e*bUR*V&re^j+tF zI`Ci8{~}E-(>&dhr6?He*ji7}sD=S?T_d3P7l>VvtG+8q&DSPxsl!Lv zj8?alJRJAHenxLPHM+i{HcJxjDZAR^qm0I-t-_3f)8k#()FHLg7+HBdh8xD=^kb$m zOC|K4%Y8I1)$Hz~-gXR0Wfojl21~nu=;)elgN-{`i3-p^Z z2Mp^M{K9SDaYfq~Ub7dS17b5YO)d^@@e-WUa1NdXY-G38+4D5tRbG&B%FGsdW036|ID;4bOnh$7D-J1>bjF6E zOvB3j-s0~@JK5}8c{gEwYis*L>we1=V?}@K{jkvgV(c7(G!42eT(*ra+qP}nwr$(& zvTfUTm+@6~*|s@7vzho~HWQJHcae*XxEUFl_dU-!R%~b5VWRg|Mbnh&;}h`L*xTl% zWPFVPfoqjT5@fQUahqr!Gu&zp(e1oaR2*&NgQ z{)vkzT74%i7xUtjW?Wg+1oo9qnaxHy7d|rkgV>Geue(Wct+~a;H!de(i}*S2C9VLK zn6;9Xk}T9M-`L%}=9(Vo!UGg5g6FIeo4LefW(Z?J@@N4{d}WbGu#{6J!(Zp8{p4Q$KoFGyd0=|y(g71 z6+oG;m9GMh7lwZEjm~pL@(I4KJu3M7l5FoChA(j-wwSR)GgP8Ft88^bTbo!{Qdo!? zxz-~cU0%7#w6T_zh(hvl@OSqyHk!}AZd*<~`Uw{l^}O8Mx0&a&c;)=1%1ywfqEMB{ z2hMmKziY4^`udHM-1&eH2Y7T-{m^K*r;z_BAJ4rjOikJvUY{5w8n)waJs#7l9mHk{ zsXbD0!(>13gS3gRoygQsSLSdKr{bBG@8fFB?#8>wg5hf5-B7XrzH88c@5sVySSOt0 zn96Mz;OnH1|MF)cjGGCJ))<3(d$TPjUiJO)pv6Ealw7t(wv1HBRT&Z_+N$e$9HQRFmh; zlqS1;8lyoyD^D19_#ShsHW^j?O+U(cw;}4TOWd0OH};A{NX%4k)k^l4J%O6EJZO$| zaPQV6e%z{}3UPw?=#pH7UjXat45Fk0ZU9xeM(jDE%C3GH^t0&fBb&JUxUBS)N>hN@ z3M)-quE4#ZfL&F@zkY&*!lgfMqmTL8T-79f<#e7!w*8A0;;gg*z6k@Q%qa8|f!Q-2 z%~U%bQ`tl%@8SwGIBr*7j_B_}wbOr*U!m^OX70=-Xr=FI@^rjYud${QWnxX9RLJUx50j!p9o<%=>~G#QL&-qskL_x|L21D$HQomTaK&R=6` zH=5N7%&=L-GQMdVF(-!58waT;tt9&o8%ZhoYh#dTUGJ6U_0UTSwLAAc&-rDqn0af` zq(|8jbAOR==rcRt3Ln_R!==f`{hYU;1eh&Q88q z;6faDZVr-cv^Fj?kK!xu45uaKhg<@*hd(iXVBEI_>?bl(ET+v)zGj0r&uLLP+V<{b zY}_XM4x>s{6rOhC5#swEGqIiG(!)7YpV>~%0bW0GTy9>l8Vj3yh*5Jx5X3Iy#lvbW z1>v5#%vxs}FgQY!@!XuSw@~vaiV!_d__>ox7FiN=*Or$I78VsGNm|99_FpROpB7o< zMSiBAM7%qcCi}Khjb$^oIke@nC~Gyz$zXEH!&S-qajirvnDwT(pUd|(cj*fGLR zeB45HidAx%NiSIhxB12&7rP;+@!g}^U2pl4Uda?Ak z_f`_zb_sB;_p6QXS~Cv{(>mX9-5lCfHa zkKn;#lwp?kH(78o*=Jo(=>BeJbrL3;#U?=o>*5vPrm`QF9CAJ8X~AO9XB_P%AH&Zn zENRu0UDk-EOWDgruZ@+DQ+VM)Q)vZ_q6fJgn^l>}apzL48!JSmWY>_}_0Z6BEhX*F zz_i4CnPz@Q_A56bP8o7MEr~#cn2SSnG_C8c7EQ*_&f4-CU3;vMTNeT2JbO+mXHS1W z$qV8$Ap1TALjWK^W=+$vX3+xAi=ByIDer~5t6 zm%nMwExfl~jbpI++Mi(gLsg`aWdv^>* z6~JXjmLuCm{Eb*cx0Rqi8n?6-JZO!2S-evJ^+*CI&l0)xihU&n@qi*&dS@%6>s9{n z+$9rlzpqw0P{}Jr&){)U^i>Vi-bQujj9OB$i~C2l=A)J*N6nRnw{VGtx$r`qjhu8a zsFNLbu>hvaPt2Muz~zE>4xYzp!v2uj3(4YC>j?BW9i}(wWh+OxFw9f8n)=^!?f`Gf^Mdl<84liZH|fS++9#tB99#hgr@X6;Ggudq5L?4jS_<_B>=7pL~m1qs+ota;fR@ z4H+ZN<*aHhs$$kHG=XA+&h|GaV{g|W^Oz$&7H#&{$)Vz~(BD#rV&j&_qPxsmpvi}29 zCAcGf-5ZH(^0pC~9g#uR4rJ!5GC~JT(@(OWCX5jvF+w+di%DV+|AYKf9;pK>Q_4VR zY3EdPiG8WF)4bSN6|m*#xHT`R;IUKHm-o9|{OH};*_n}%2PNYVh>p)k_=u*2!&;(= zn8F!5aIUd+c}8408eNm#TOQ%+#JrK}vbm~q8XR0dZ zFsPaTPdGfTFKs`Ofya-wK$|M-`#iSE$7=2QOa0)?>Z_0Vs%!3ixX)majSYhS=&5xm z|7p0;X#`QK8e^=H%RCzt=)MPL_+z0B-YcUyd(Gf9@E@$P@0T$n*-_tr(G$!12|F}O z%_u50LThK8=}~VUMz#bs0~!2}60Or^*6Odd+!j$saAN0&f^zv8!B(+`luJ&6bs2M$ zUZx613(;&hs5X7lGhwZrm~L7VFf;uUGhT6;9>@47I!A)N{-1d^$oa2sk~bWO&LR+^>t#oQf3^ z<4Qhb{RMUSnD5pi{-bWIs-BdqB@}E-(`lkc^y<+bA4b0f&HJc#?hy=@>_oC(N!krr z@G-p|Ag!8bT1i<51@6ne^vX9zOr~_<4XM?{?D(;VZT!Y$>fQJYO*4IbOWL0I0K--r z6rCk>sTI7aGvT#cY#)2I65dslnn#z$RX$@}%S{Ba^ClcNh*522M26@`DY=qRA}9F< zFZNijbfcY*#vQ;>b``;egL-kR@h_QtKDuiIh3WHwp)X?{jhKT~hHr;5n|Z(Ro*zUx z&uYH^3qf%H{~!oL7IvopU>@|6r|m-+k;Gnn!_u#aL4KLwKogacCTTtvF8TuvibSi% znoR`v*WZy%@J9Xr)WK*!uGp4%Jmb>n44ldrmKYvDvx+ePM{EuIk`%ewt(NeV9Tpp(oV_%v4`<x(rSNzOYJbH% zK$)Giz17t!>~uX+?kinOd7?0#0&RFln<#=v3sG4@Zg}k@R{%N9BeziJ2+rl9R6LMG z`fL=*5DTJ^3WZTX=Y!~zGK2R>zREg6Li0gCp?OoGDL=|GMY*0pw#!p?{<+{cAhI{P z_1jacnPno53Wv5O>nPqF9z1`7Hm3Ao`a#aD)Wj2Xd5f8D+tMiM)V^pNt}ii&F(cxZ zd#Pm$(W**2!JLm9xcI*X>stl!O70~ztjo`I~(hNRPd_T>%XZLPXF0nk7qyf zX0xWvNmKJ=+2qVgQ;XzH(i9}9AS4h{Bbf;>lvTl@G7zCiLrpYv%$DfirHiA$wqiT0 zMQT;*HEpYF+B$=!t<=$dZ5V7RJ1(;`p@ENIefc{#A0OXOxswk$CwVT{Tqjy{&No0q zP(E!QH8UsHT-N3{SR3fvd zMfB`6U*6{njL`d8LRIR=XVysze?%kK0lL=KauIeo-v6Lu9t}!&V$6O8i4B>C`0qguA(W~lF{Uwhf>)zfK~jt1H|<-Z%6^2i0Re^n z*H)?|_eBWTZl=k!!sOQorib>lv3{zg<}UI_EMQ=A{XD-nEfEKk=6vH%#A(A(jlWwEnH0ZEZGf@-q# zRVY6|fA-mdRE55PS;Hz z5N=^#cn}NrBW!rAYoaZ>3MagL=w*!eMw!p|QGh(k6{4KG67^d`wX&oHB}~q5o3`K@ z(gkK@@;)mBwi^fP0+|Eh3cCFYer0T8q_Tt=a4OJX77(P#pgM&cm;=zW5)>c{B)kKW zH)FjHS~4$BTWpKzCt73x-J*vmD3Ue9`i&AT1FvokUJF5H;J6Z0izk43X1JXC0U_Fm z#Q^bMIc#gXKqqI@-0xcWNso}sWKS^)%piMH_Nve7>l+?8wgcHIpUp?%SXLe z>Q5`tdEl!xxXe?#g9Gl;75iZ9Ksm7$93U-0I&gQ*1G|CLK||MZTEGi%4GoFuzQOF0 zN($-z?VJrrH;3q9M4&eL4)O+w!vz?Vcd94VH18r5r&o)_V-oxxCHOwgaIobd?ge;D zSZ_$b@UaGrkId$om>Hd!zddOR`zdd%{2>ekxFn5WZ;D)1;tz_LUC4OCCkv%E=eVA* z`5;fzmS0;?aX}ghy>h<3wxEGlHJ*=A3+3Vo3H;9AV-M}gpAQ_l20+Erkj~VCGy}dZ zShoiAt@#S`rJSQhe5Xv0Xx_higV~Gn2Q=};B^DeO2-^iJI#eI6lO5XI(S z782%3PL&=_TA=a7Uy4aiIa?YqO&?fXVfcdlBjXG0PQke2uEiV#VJQ~eAM;PuTrs|I zUVTx&fcQe~h31MW7W_^*PR(2qw!#+`xhIC>nG-?Hh$)ap$>Rc{UQR zg*^&*7Jx%TpKpu8V2|f6EFH49HWpcHoz7FkC!Y#8vaAcMnus|od;SM4VN~3G@p^c0 z=Hpt|vQKAON-{cGT2fZAom7umHX1E>)c{Q;yOcX@nE+1fVo7x2@2{Xxi|Q zNJ~r<9+6C)rDydZm$a|rar5um&Bd%mNAe<@TE>#HwdV>7Tlt7ycD7ADLR~ET8%1Pi z+xqH-x(wx;SZi=5uPmB-Snf2$rMD0BB^_?CcW+_*ljU-NNAEgVV-mz$W)tn$#~jH< z6&$mJl#g%Ig~_T~J3wwOVo1s8wzV5LBq{_?=60HAEZs#uhc0U4Mi-QzO1{~HVN12j zlp0bFN~S?V6oE&#h4&!mJc@zg5(5BWB7I%3&VSz)FD44;duEg{uR){2dFm$~m1T?E z{X+??td_t7OG4~pdl;LqLWT7&Dz1`5Ad0Y0Lv?|`;9S#I9oV_TQq{ znMr)*t(H#Z64>sc-N)@>0Qw3?kjB}r?Nv!>6BkHRAq}A1US1`SNa7;izPfaRARFa& z)CLmKRDU)9j`s4D4Crgu&;nWYzimtYV;Bn}+L#Mo#MBjKU3-4GJjxbl2a`t=6Y~7d zP~kj<%kqp^LEz#1$|r%_1&v*1Y@%e_POVBdIVfdQ$nG9@Nrj`+#%*h@6h=SK$abP{ z3OtsOkDwllxCcdW9`qz4`m17q8lAC(%j?3Le#Trw=Mb@?o)~-Y-kSL^C#-EGU zI3;XPN}g5p>ExRlkmH<8iNn-K3zU~IKR$E0hE z5#(S`urPsL#=g^U88uzzoL=B$F$eF3US7v>F*MhGP-N53Z}Xlt=D{pJXCgRzQD%HLQhQ(E~F~B;E{(g7Sd4C z!+`(TgZ{H}ewIOgouake6z>VQ^H_cQ6AcSX%VN(<3NagdB241Wb637q4&H)APb|Xn z*LaOr+msvwLi8dk()#Z#Ao!|B z9kLKXBo_kljxe&Ko?Cx}G`@(`4h)h6AbO8HqK31rlh!jGaDGAqw{+wD)RHd`@y?QWP|${48~>C>CxwlsGi2Bs%q%m zg{H;3iTMqT$`?|c1U-dk0J%Q9t_m-i65O6i^A!Yh9Am|CDCkX=m+(NhxmycgWtiD< z-D+D3oVhiR&4z-hu-4xc-kKmwdJ$(S^3L5!@Jo<_)|A-P)pkBALRL{3t}LPYZUqz3 zhmt7Xe`$3rjl6cm2|>K{X%zE4fU2U|MOb1>m%zng^7tix3a_;cV{>9YC+!+@ z@H1ApG!Vf%>GUIw@kRY)D|Rl5B!04>$r{ z3oK!h^&T+~>7Ohv1@zTug? zq|^?mCJ!&(g}n}WA@4ZfJ7$8*@5}Gjp!c1FUp0bXsf9jSgmk5m^2s6^1@}!(tM&Z%c6l=&mmE1r-kVU_Uo@HEl28aTo2CxG)fM-E< zK@y1>Fa_0sSb#8qYajqHj<^FNKncK~D1z~eox&A*P_3|q?nKMznPZ05DQ#^7zEJ=-~z>fj2{tp=YYmCAVak-c~0bxQ`dfgPRFuk+i)G4`kr|T z)*OIZnh55jR|3=Onb*_mH@eup9QBf!%+8nvW!{0F9?93ey(890bs%LqmbI_4fofL# zj}cr6fI^gkPEevd6SyWe6H;gN%?Vs^OGswy%@LJ}aa{;D;DKm?{h@XRfWE;7m?R2j znM#cDgMA3XAAvhwgi3He64yPLCzYN_kszU!a%VPYY$4EnGVEsLB*D%wjv+GKd1sD2 zy+K*hj~xut7G0@WUP>m0^UdECHeQ9mA&e}M-Fb&3 z5@!*}Xt21*OY^R;{Bew1paWxp%?O(zM%t4t3(EvQb2W!pf-6#GTmm*H=4u9#1L?v$ zeFD1JefRJ9rYZ>tRh@kt#G4i>*qT>HEXkc;G?x5OOgw`)1=9p#L^b3VjD%LMTw&%` zOodceYP^u{AlKDkz2s9!W>I9pbCM4VZJ#z84urE}S%W=_=x|*G7 z+f&G&_fJTwYa(v{^T^V#4yD6PT|Lk>tSBIYLXoTyFhvqUtU3rOy|VCy#ky)DGCDOO z>2Q7gIfl6M(YqGPy!*QrM*n<)y!ZXL^*h#>1rS)0mFiubV$%TyX7GWg%tl6a#pqxq zW@^dO*w`eMBS~O1LSL3xb(kroKxedqUo4aoFjGt+&LxW1fjl_{v8t9-c#Ec%RN%^x zl*H(S*aL6{K#4_!d12X57M|X`xgjU0T6^nvuJk3OKXjkmBkYL&EP4KcbEvboVV>Uj z0kTVTgk(cEOPW2mOA?CY~$dz}YbjjTBaU zp21Fnq=q6x#D+5)0@XKI2Zd}r`3@nT8~n;SS@__b^YduH-+R*ySjYR&nydSIxwbIf zO1n1jX!dQF28}cD_I2)RzT_xx)Ri23!5_#=hP>N?#7a2A*O1SA!>{2}Buo9e1N!Eo zAM0c^@NBp_k*u5i=E4iFQ0i8ew@H1^8+Ed$eoG_Qirx;=T^l*r zzN@Fo#Y03k)ytN5J=DH{`ywP==fJ~8d#|cSb4L_Zq%}Di z9L$`|JBGrP^DcvgX*@>mp4{#7@%(4f`%I>Chk|Lgvv+_8_V3Ubji}B zPcp@!|E)c2@T_O9Ywwn(lX9SR;?0VU;8rG*l2&)T#3osS&NK+qO3aDX!!Tjp!d)s` zrx;D9Og0^r$|yuRYRlOx0BPggAiPu&B*_FF1`v9VI90%D1fkLlGe^lHwXryvTy1_S z{xEy7`i@LhFa}qL;lja{SJNV$q%K~qS#*)2zByV+C+PA$y?0>f_tw&N)9UyH98DZO zq>G)hs^>iFKl6v7SHRGO`d(-69_?xj27tMQa1GWJ&}3lGK-~|v6wp~hX_{V;ze&6ASpomUrO? z0kKB57&PdK;d^!>npRDptg?naS$hHJh0^&L0=bJ?P0(+{n|m9?KK{{Ze}ft$8B7%h zA!QOmYT(R2SkEb3g;=2do3^7JHx^2osne_+L0)JrDs<58^HUKsOL3&@AXD{;mg5 zJ@6;SE_$E~5CiBhkPdi5f&r)j`oLVEcAy#1Qy@!7OHfO2ONb1Jc_>Eo0;~bZUGNFe z3GhTSgV*U>%)Pnc^r8GPhHwGs0JLwyPyg56+pt@MA&0OXxF3FB`cLQA(%YCl z%pr^6xv+freCQwM&zRfF+o)TUJ(9iQJ&`@Xz1}^(y{)~Z+uFUo+xXk(TSZSBPZ>`a zPbW|F4z5k4I_T=*HMWeOtNiC5maWL=p(gMsa}v7y5qu06^8!@F_yGK3BbO(>VAQvT zG#b`TKaffQObKx<<5;82j8_RB4{PI?hrs2VD8nMB<6#kmUA)FAzQTtU_esAEJm1Go zn*PrNj5qQZnZD_t3Vdam0Ho)z?I%<#3|8o zqP9%uyf2mxpQIJMHh8Z`!T9_^1!S(^i_rI+ z60Eo4Cu=fuh^UIm&uD7G7pB(^&=$N;vE2;6I~06T_I$`G0~Gt`Y1?V@Pw(?LWd7fU z-hoks7DU&LLG^||wkI9-KN|TIg8FlTw(P;`@xlD~qU|OW+>!1@e>9`|BK+fF>yl@G zvgc4O5nKG8PBc!X68|F4-|!~_fKHDf8Q+g>97eS?5!{>M+zi>?ap>NEIFl~|-Ul(* zgGaaEzG}c{|IVW{)VU=-gVf*>$S~E3b_-r42+H~r-2bxxZh`qrq?{+#-2lD?^wba8 z=}}nTfOw8jFz$rW1$Q+EO5gtwz_DIG$@ZZ{j8DoqE6N}n3ke8P zGjvcWIGF!=S@;5kYds>m0*f{Nb9p~*TCf4K5VBV&v=H>q7lem>SMa_1>$rvuyVQ(U4X#P%R|8JuwF$QC2fu%AnUP^w_l|pQYHPN4q?c406%Rdo#OO}z zPD?80(9WvzvEZ?Q_AOxgh3?JuZ3#x`u7g?Pcg=g>xxu;lQ+gJNUD>l!uBwM({fYzA zDf~3tNlF>HpQ*0R=Q7&&&zBF6Z$5jk(fj?>TFzUp!=KO_{s*0(kUmOH3p zbJ0zs!kRg#yKRM*_&AH81ZAal1POKu^b^!FS-l?z8FnHhG`UVd5ue%Yd%n&$lB zvh%tI?XD_XB-o5W3HJB%qK?e81|nz$yIe#F^lwB=Yt4>ky;E3qwV(c+n4<3X}Y|b zSnO}Rm~wd;#I&hTf2{xpj*D!PC7pY8fATPF@|zfYki7K4ne1q1MJ8=BS!V1Q7w72p z{V(BoW;Tm}GzPYWKY#P7OZJNkReKjlyPj#lOZP1$C(qjeSNAXj)NJ2$XM^lo8qvE38;hRoP0BgRooY21L|ePT){(@3&^ zY8pjFxODpT;l@g42{MlEg2O@!jMch~UYohH_UpNxm%Scrnkrq6QiU@>U%&Ug9>>nj zS{H6vlb)LzLh%#<&UH4=au(I}_ujjnfVDAyzl*|Fk1@-5tUq6uv~qK8wT%qfkmWFd zOdj$5M5(_(Zm}v3UJB=n_{*BFnxlBhBpr;vG^mi3C3mJ8j>069wK+@e26HBym5F9M zf2`D~F(b)j*hsv7F3~~iS)cH{7YIQSBA_A~h9q-J^y3#mI8)-|7oj6~Zpb}MTYdRV z8kj3#C|n86vIPW;Y);=_W;ds;#fTGyZW}R~8`D0Yy@!k91qTn~ySZaLwBOf zn1JV)xr8=WIdlxxUe_908}EyFbeHJbi*HAbilKT|GblG(4L>!AQ;XFX0fA>rSKDjW z0QE5tda@4Rm%F?j!v*mswBcoO7sJc9(^ZNj^UK(IN)>j?!?QDU*x`u+3Uvm-`0XBp z#1o5&L35U05+c|bt4#(I6LUN`Q|XOOUvD+n4dV6fyTfoMjSmq^OMcGN>K>bxR7F$K zEOJ+@^09eOiYcw0LNWSR>m5U!5qg+w=nHuw77P`pG9Wcy(ONE_#_;(`dgt-{FXHw= zdd-f7+`|`spy{tP&MY%hTj36v<5ya&JnuX|%fYOpr|GK&NO&;nqzT{3>3S?&XnwEM zI^qY+NkOvC^Ylg-$~G%K?}^++7?YZ`;=-1k%i_XcR5V-p!`28F%hr&{@^v#kD^7e-f>^MLsSu3|&9ImwVMTnf zTuey~Ytf`pBh^tLNp$RHC*WTT0=+0H5#+4FTcx634+vD~qLrc(9thX7B+r{Q%ZnBd9nZy9}VT-MyUQs5=NXrUglBp^{7cJOwU4i<$Ip!^Cm$py zL&Q?c!rcc;%|HHw2aGEHJ;~V~dF(W7>|ZRFAT9YAXqI zRd6;_&z}@)QR7hiT#o}wsoA~Aet~F)NzoT7eRwR(XoY@)^~WZ4>($6RcNN1*JG&Lv zPsgsmEqFPJ9guX|HwRCyn8^(#q#j%M(=&KvJpLoZa+L&N1yJ-9buz7#^lRPvhfM1$ zWB4O6=g^s36jzjXP)_otAiq)XitF0rV8=D_Zc<+RFy3WF;Dd1|TbRWsr%cUD z0y*mfx%~PI{<&k66%(=0q~oPYd$p+HvYb_mqrB*!cgsWRZLSp3u-8d60#x$s6q?DN zNd3CsqW5z!j(j^8uyZ&Vy3VZ^DB*qOKwBr>prWE|qZd$&lnd1o&v0v2162y$n=@x; ziiv)szJY!h7ZNwe!8fSO6oSV#G%)JIBLW+_8B$6UyD}PrmJqNKgH-I_s~F%=cjV7=M8^-46V$D~oSp5E3*KuI5^s zh#jMrvtFu(j)w6IzO({X>i}swQ>(HCkfuCwFVd-j72!r|hV99(gT!KF%bW>HUshom ze89!1iDtC+is!x#$^11*ouq2*dVH|WTdvjV_4pFj36U%6%hqfrYu!-X0>aRL;Nd0= zv0{nBAp3Sq^nAK$?xEs(1j}F$A=NZS*!Ze}6w}%eJcT|(86_92HBKmFr1Ct?xndqe zCep5T_{G!k_yTQ1)US}b2OzIy)KhQF@K88^A+=US4`-(q6iK5{sZ{}61!L`Sr(giBtHC-UMhLd zlF|x=$0`6NJ0;KFh06}mR9aH9cs8!1Hjtu$nGblpn~Y<`)axhGT{P=j zmyH?N-(8|O?a3A#~7yLIh`1$(u^S!P0W%aGkKtC z-=Ao~hy=^#m^REZ1F)UlXRv1NtBFC80_MJq0iOl*jdkx1fpwD+FOsbSzcV9h;U+KN zu#_;Fu2Ssr5r_)Aw;tGlG-b17nq=!T{>wd=DnxHyv!mDTx7w=P=-aW)ZwoMM@ANk^ zd0I3y9BnG>WwBo6TYTzu=_s*_`U!W7li?0Ns&=qH7g#Kmi}GLicelEz%I)cBRn%8V1(9C-Qg>TMP*0VJ z%l!4qSR>R_PM@jXZ|lsQ8R0tQ z_Sl@LiISVonnBWw$rz)T;SPeN*bw%IeW?Nh8DEO!4}L-$w!c>^lnu`&MCCYxc0P}z zE!G$qlcf#`G?m<2o=7H2YMhlVW`bwZtWPH&RF}^>P8*8Oer0eo+;8f-<4Teog4>AV zdl+VXJ8BNy0T2ZPLpB5f%xwD-4Iw`cPBU*LergnCTmW|o)L-6LF&)Q{nvYQwjL-=s zW*b|R3*Ghy$G#6x8rWF}?L#=aXAhj*G<{!@I!}N6kF&Q@sH2TW$=kiT%lsaQ`7%WR z>?R;*Jm^*c`Mr`3nGo>TEhv`>pdE%9-#byKyLn&sASGMjG@-$8T=eOjYQRwuN3*~n zP_;yxk6uNKz$7KBQP%M1%pEnqA;RQLW_r;cvfe}F?Obmw8w^^E- zY%5qm9wYzR{5Y1ytr>B*oy%Hc^h+}HIhj|Kdl@4nQE)yH7f|~?F8%a2uyi}J)BRYM zn!dR4lvLa5Zfq$%ItHn)JwLu$7*?TyS(1|$@DDn>qN#3NrKKvke+l|zh`AP`YB0G* z%jx9Q0b}{g7c2>TL71X`q{yW?4lHCQ-G&cKR*Xjb_nMel6?v;em*39cf2twq8YoJ2 zV6uvQj8{f&rGs(cV8#hQh4RNf3ilJi7QsDmz?Bv*xx;V-w&NXqD zd99JUndf$tw6)i|%i%!IW;Km%&avstQ##J%NC%PM*=Qh5sqmxFGpU%+2y+sP@4iJ$EHOA>T!I&xGU7NSo+~mr)dfNDV1-9-I zqIV1gx7Y_PhDvWH8WHMDyH>sK1ReqsG>>@4zL@Fz*KLk1pTu&kUfde zJCJ5qkwD}nibPa4nCjXqFU05oBNj8?y-{Ze&Zt!0zCy6H+)8lY?p{jB+>T~*k*pm< z?GwUQQ?$??jhiBtiP; z4wCeSMiyyzNlpIc$ElmN{H@hyhqiP)JgSZ5m8M?rPR??+mPhf?yA7+ndVYc1Z@Hm! z36HZi0p9u|ggJeui&T=A(dQc$!My-fzCh;%>!5U*l4KL2N~LN@x9r<;eE9uV-nsle zgCjBOG>WcPb57h>RU)>OKRrC?tK6|)P;)*RMls<%*5#veH~<}6Ps+SbmYwh|ep-}9vVaSZ@In~w6p3_C$bfvyYGqwxWoEqaT z$MM)?dlAB&ypyI%ev^}Ueq~%|EF<;;3!j-_AlcE$pwHjk+*{H4^7j{dLq%484Fa{% z>diO7^010*Sz+HY89F8oPTfb!^(`5{@i|pu*+$Psw~f`+buU+1b}@jh8j+1t#Ix(3 ztOb_ht;7)2tDo2nErZ4KVZd>0K>s=lHk5f*1FAsvYjx^oGSZ|*QsI*)W@MY!mSw9C zS|NCA>FH{JCz-u<=1B2~YC9q&O<)OHKC?2jP_inTWG!&=G>}BVT<1V0#)}I%iz+Zr z%)o-7<4o1(zni@;No0)1|rOih|!wvvq9m#?h!A+nuC5$sf zHJb5M9AX&iMBp^PnQ<@%UF!OWJbJDbNyIL;On$Q_;&bitOyILo8XlHCK zX)my?>@#996Xf+4u`MT9FlMOq(ApqC+PBsl=}O!=QVB99XMa;Jrfcv!4{7S3yIR?( zE9iMz#FW|!`K>6o8(9mj7e(j%J(*kQrqRLlb9oc8h$JA?%;W7W<4yF?0 zTFsyv_79y7>`;qOgB41f$e08Pg%$?0g2!j4;knS1%(pva;wvL*Rg^G(WtPpvC1d#{ncT#;AY^>S+Tn*EYGoykp0B&y(nHqeV*eXd-A9_w0C#AA zulI=xeu;O%uF$z%4Y}Q~jUM?_@>f2%@LM+}Sedn$OV}?Ki=+6knlVw{HO8$k+SP`e zhS+dDFzD(1t5~Cqr15l$`;K3S`UxkUup6)w-G+aHWA6SLU>X+}N8$-&Qw(Oq06XyY zj@WTjbH)hV+@Npt2)Y(iK3+B(7=$jYEgy`Bo#{8XNV03Qmai5P->IY34qu#V{`vRD z)Q~J?R(G!_lw%^tgUyV`HEI}YE&hGaoH-Wk!Fap}J$N#7f$7>o83T8!t(xhf z-Gt#$rEdJIU1Blx8yE>>c7+L1BvZIaA*tyId2G0vlTw8->`)aAYUG2rt}f3| z{ZDq^puk8BAYF;VTO*@55haF#B8V9uNrGN07|S{8-)@xxHIAWUEEZGMRrRG^&e1j1 zb@kmF0v{KKWz$SMs>EE0wprisQ8limb>Nhw1%Xgd4gxDNZ1}@i(|EAqVfZAs2?ujk zq6i%3{;@B=%(yAexw==@*1?q&a1pp{1IhvBLWn$h5QL?Wu8!~AhSPzy6FjQN!sySR z2}oLC98ESugI8aJAiw4wwB}9dO~!Qjy>f1-BJ!KBXLPZnpt_~4nqAM{@kop#QIMPk zzfTU9Q(O^87`i#`TNjSoTKX!gDeV;K&=5=w_&IM&JdW+ixQ%qDjPfO0l?P=gFu@GEzSxCAl+{Zly2ZS4h zs)wlPhe?@)>4bm>|CnbO~#TvEf>4Q}Kc z6NLS;3+J~ja1O$_nESZx&@dT{0)Tq-Q_<>Dkl(tQLW00K9PDJ0@a*MtS9K0<3%8k( zWdv%J%PJ>yl(czzxhARPojuS&%k{a*xm7ax>?@dCcr5SLqjykil$T)FmXE2lz;dQpq#q1c{b%+TixgcIgk&xA0zBIJ9@=iN)KqD1XCb zF?tq7(y8)n6x0tc+?%>OywL|qd*920FvGV!eO6=^^!_?j=y6hYcJ&)Av0n+$<9P)< z9rY9V1;Bs5{}#}w-w-&MwK(~rZ==XWvD-r{7^hW@w#RUuC?v7vv7PvR6HNCG{4Z8X z9-#yhFu>P9#zYXI1}}@76?^sls(W0HD|buW-~UT1d0m;?42qfA0;zf)$u7&JPi%*% zz*|=S^l7S(4BsbqCl^4*gc#!>xen;7k;MHQ`aC^@Z_vWQGDm!rYVNT;j!rFSCbD!` zLqajszsclg5>#reZn*?ckUDGIR{qte?WjF*7S7b&mvd!VF(JMBUyPkYlqkX0r3<%g z+qP}nx9qxQ+qP}nwr$(CZFUWMb@$(I@+O%pCowoDS43v)9p9b^1+5s@TCd^dvDc46 zp*z2Ds5UHyY-r>MW~+RS7pX>6SM4LVdIl(Y)2}?lfIkFEMs*8lh`#r?RyB98U4}^Z9xT zW})~7dByfYx@44gcxeHZEG_HvgjUNpLH^SJ9r@0Z0oK{B5EE-$uTeQ7h)Tp!WQXHo z&a4(zs6ml1C@CT&$%u8)R1Et2s}bJFSjM~&^)z5+=Oas`M9pEt7g9d$78`P@qGujt z)>M8L0MUVRUJy1l=Cp;rZ!p%M?7}oHB+^Vv*o>J7K6w`G%4-o6E-H%HSzX zd*psZBRO0~t;k5NXrAO>ufA4>JSIH8=t)#*4+k!))E$a~GrB^GSEu0sd5iD|5p#MJ zTs*{KI413^|7^X$7=Ab(1j+zx8pgw_RW?a~3V}YV<2{hc)VOj1Ia6i6 zb98C5!O%(hZa-_P3XYYwnMN~KU3Jo=i8iC9y!;Ey!rWS`R||Z(h*{+X42q{s2`$99 z61+$~K_`Px>Hz#0Bru;_bzpxzS;l`Hz}`Mu+aUW$R^Tw5>UBzkHH;0M)+Rte-W(Hp z-D8qev>M?b2~{$<{htY%w-UrC0tr&7giz#xv27?L;VYZie=Yv2v`MF3mE~rSFfm}s zF^BwFovQkcSXb?X6i`oAtJR!PlsFRMUahR}P*&Dv)+%12+lN(oR+`raVuk9;5yxIj zNL5#urLuJ;Xe-LwFW?7$cd{5AgB)u)13DgIvA;=@Bty>Bi3Wk%Ekga0*9h38LbTIC zNpQ=l!Eek)`=jz@lP19pr8)iO_z~2C_2P-)Jc*HbB4E`n`3ALe?7qcd^{Ue<`z67T zdhU?2OD4;S9p@+PL*@YkQA+v{TAu$is=sBWnuR@T!vD@ORS7&l2sG~0E3hCRo z%gScJ3>}zEMFwJv1bFP@9d|%eKFR6G&L4x^xx2{9nm^V(&CMuXTFZy&#tm**CTuD& zeD|uFO^gMtDVgU`N3N&FWQ;2odjEp+SK0QpcE`f9Q5wx@vN!>L4W1#BW&FfBSlkwk4Q=&)lC8TPj4cv8uh9TRy``XcE?dw-VA2Hi#qKZNoGsolO3F6H&(UG5T1gCQ2sjTC>Fw421W5Vg76>rz9uH zWjC5CQUxmD9-0KFep$roLO}9`*$;n<^w*p`uJ-)FgKx$zJjUkjnj14_XY7T-Msx$b zcyfygD&&Px+^}cwg0mbgTS?*gN1fu<qPG zr8bs`j_8lC9{Fhe&t8-?`!ZeOdE@14VQWsgVKMj%%n8&)<*~4v z^N)DAY!Pof9Is+o?Wr^j9{G2k9x;%-cz)6?qROx&G7z;VG9Pj)GOn47s0*xH1t@Bn zanxg|u)#cG_6+L~G(i8_5S3i99%#Xd5d4}BsSPv@{zd((!@gP~ZQp@hdG`TZWMiSr zLuP!tvyriAI-C4Sn73&|$L1?;jZ}?dj;DahZSu%x=}~dOg0e}2o5PtN*TY-lJ#*?3 zvZzOW)h3Se?t^+$S#}`b&}%k?GdNMyP)9y~fo+7vS88UlydCuNr9+TX#czxGL)GMxUU69h<3f-F$Y z2wc)cqQG1#R-VZZvaS@09;p33mu}@IdqD37X;5)ARZh|td7T>hIlCH<1eG;7{yLubk&^hH zVI-8tfr5Do3lJ}tYe0uj#6Cb1GP#+Kj@mi`(1_Cp--lFBHJP!E4T4(2{@7-}M} z-&TCY&v&;+3S=fd@;~%>vdB`8b^~3Y>?7w_8$04;;*2*55bw?k)8-mLRIR+}-KvC3 zmIl^GQU$h^NOb?jZ(9=X06c8p{cNgfHQr4fJPo1X>ZS{o$T<`qvI8feie@Bt2A3Q# zXZo9TcUOv(O^;_W{A`De&wiHX`zI+fRsZE_$;ca($r{p)5GakB~j$ z6*)?@j~efF~#BO7eS#&e(5i*q@4%1AIvT@j)=0p`a@JGrp2ur#)l1w2a7JABWq5YHO;s?0n&MOy^m9I0@{!A-i-$G#yB1Lu8wl& z)vMB4V#;WDmG)*D9IVVt4b`NC)|Gn3FO=#POCy{yQeLRbB{vjzLS%5oD5Y5k*mZ#) zjQe}Z66BPxOi-gHFfR>~W?Z8wa-@mRVqyxb&r`Er5R@&Ir-bR5AH1ACaV%4(P1etx zcfsGr*SYceENj|E!{;I(-cP%qe#*zX4zxz%qH##X68+*}lm_Dmvw6OeAnvmfpoS;8 zui%U^n;M*Ux=-5x{nAxu5lUC)NmZb(13V4H6dy+Vw|!OIe5QzphZ;UH?nh7Ks1h zWI#(wOfVJIEi_F{{ zA|Ifx7TwJ1d{qDlMUK4A0M4%tCLFC=O5~7n8Sus6b9$NH76n;Ey98QmY1I{1m7XjC zJ9zV06#UEmINlq*i_VgBuGDR?^@3FWc9gLDdUk7QaXOwr{ymM335Iv$^icCcyV>#) z9bh%z9LG_?MtcUFcE@` z&7dfROSF^TzfqJao@kcf3jA2qH3OARkg?YLrvlr@h5dP)uoUB!+<%P*-p4{?KNQcD z-;2iik7jCuyM0 z<>7YqD99&=*`2Iut3#m0$9MHY@P*s2PBF1krYMA#R$DSaG!1g&4(yN2xlmb5A8gXE z{u`D_UxtUA37VDE#A`^XOoI=c5Y3V{-6ZBx^hF+mcNl&aDK^Px9X&7*%xQ`Qrsw$HPC@+orUJ(dj6<$3>%d8L(e&6c+T1Moy??< z`CuK~m4kh`8Gf(VlAb||7~#Z-ae0gfZ^&3N5w1?H#*r1_)F-KQSljPexPEcxisKPK z+;ZYa#dpMxc5*)cq4(G)8k`!JN*0|tJTZwVjmlsk@p*^Sr2pI;kmDVb(!yJBIwdr< zw{rcl!1Yz5ceORg@Y89WqDYMfx3$??IPM%kzSHv$TBKFa?4>M$64w z?9^TfwniRP(!%>qaIX^!>zWgYv&Z6+aU|4uz;m0tur^Yz44LWBNsEEXTO8zpt^m1g zNh3+{jOT?r&9BDvMuHggqqfnjKY~7)@*Z34gD@*A!Zt3e``D<~Ve(Yz14FZsV8ezD zd4pSDIHa^wASw_S~^&R@l>G9`HN-fY- z^W`bhX6mX64R*te*_2oh>69;XFc-4UO+U7_*Rz$-Oa3k?-ag-xAIUZD;1Og`vJ(~C zoAY%Xt`{x3e{0O{mab1vH+e{W-0|v$=tqzLnMb^tHt$M+X(pZ_HJ>&QTh8UWG+YO` z%O3Ws8EszJzS_T(SHqV7Y$Ilg3`Py_NE3>gxN9R0NI)C9OH5KaZum_+XKq+VZs^;7 zg+29ne0y?xj8xVh?8zh)_=M@SV|P8UxgYzE zpR-CNINV!*DYG#Q0Edj33r9>3|NJ0D8jvB@F)4z~51YY~Yi6Rx`3O?UMiA_vl_!=S>O(cB7uV`60BkVT$7D4+U5+Afd`8MHygN;llR`&*+qm9dE8$Ms z5qY^jSLff^O#vCNOH!}JOBE_`*5@JXR2|9BRT`4kx79imFEFsTz!&cys*g{VIHM;U zsx_JuHCU$vEzt4XY>(8@Q2?jcOBWu?f-4s)efVao0X!C}u(9nKqh5D+ljrIkxS|}r zE;QO33k~%qOZZkPx@%2gAp*Cv!aKdY>)k^apdR*lbKf$5YW$nQ9Nv;D2E3&71}*Y1 z4|~PkRr*{#OhfF<4j-nd+}m@(uQ4yraXb4r5nF34mPoy)+Oz%ox__&Zn^dH2F%Y=d z)+@oYNiRSB0t@?`;?af0YB@@F1#{?9qjLr#TQ&<;t-0P}K4yLcX=)kNVzL!pP1Q74 z5Gn?uXT$p!`WL=0v}H=85d{j6oGUO|0b)*bUeXF>|L&_H@-q`_-U!sqZSL1uREjnZ zda4Xp$RqE;vrE57%po<$S-JtzwsTdG`8*Hu(LEHq1NQeVP(fRpF{GIr9uFiYJl9Jx zMvP@v2=5UAbRCX^WMy+r@+Sm_v7h8or(cuqFd=hj)*Q~t1_TEu5A5{Rt+WO6*08t2 zF9Id>Q}#FJ$wdj{*F0=Kq=6fVD)Ht%stb5<=AZn}#kX~-%BcQNZA*O$F=NJf{%d$j{oB8mgFExA~3QT$GocGX?gCB%pC*!#0&V4wp$Xk z?$i3+CpI?OK&z&p>v^^rQ441NBB{~4a!cmmOPeM~-R^6|kb}QXO>*Pf@594%Ms;{X zDLPErAb$6t;I!c917dF5pj58&z$U3`OXe*J~Js+=voUg2t#@y!SwM6}y6r4{X9E}>`_LvF+Mr&I#M3O*Af>;Isq{J;F0Gs6Dh&RBRvf~diKxTI&`P@cl% z@Vdx`-5U#IQ^F-gwGoFJFMVv)r!v;{hSx2adcYY@tHc1iRt|_uAXO{EIQpU@UGSZH z8!Kcm2c{_8_jO01#FNM&ygW{KwmRjqU?^^py9}k>#pJg1Gt#ia-hlCAUMWzj9t>Z%xHO^bs9x{99S>SFbd{_L9!uE4>@ z_Ais4wKj)oo}IVp3$EYGrXL_E05m-WHnIy0sMvPL%X19i>j1zcTt{=@5EZW_FR!47v^%h=&JI#B!?l>&Rb}f zrvh@*ag!N~as1vL2%dDXJ8wKeyg$q!?7V=0&&2&N0`q}!J5YdEG5Q6@=zI8&4?g@H zofheKvcAqTq>Ea07_v9=N$SY)?Lj z*x*YHJt-jjF1YYLi^uAXO^}5W0{Dn_BdQt#o_=crDXTTn1_F!-0Sj@k{tu7_Wg=+C12^{OGOlAl^0r$id z0B~<|cC};Vs|6_@q-yJyhY+&xL*Tc8%XKHodgwt!#>a4Qu_x?1XsXgZ+h(>UE~G% z0BO9H>{$m&mfQFqUFzN!4>W`R$@cl*%?)&djw*2ZmwHM`7v@Cg!S=A6x6iRjW1Tn2e}BDGmj zZU)%$^mn^;>dQh+eVVn#WGhBz3liN@;X1D4I<0dYvy62K)<}Lgpi7Uf$L6_ixt6Ot)ylF6uC5s*;WZ<DC&z|T5tsY@m6Ol} zUVbz*OX=~Mh71{qNRh#=UYW8LdmPDrK*PnW=Uy;hVG3uv$YTY;!D&@ zq0SvWqLnL#59jgQH^k5HX8_3s>CSP|qO>XQ*-zrFE4W4Bvyywlb{8!PsE=7ZtdTri z^lx_JIVC>2=WNlETf%l{*h2191mstyYR1~2C;hwn6}sUmsbYEh zqDwpaPtAUW4&p(Q)F7LYw)BNEmJwvQ1*I0Tt^q}j+?r&@&o4DDf4R4eo&t|jy1rj+ zMQ;?X1K-?)k~Sd#v`yDM_Jh8_epgU-MwH1MjmV&I%EXR9BEVWj$Mi`CWB;P)U7nlK zmr;*$+ZP*HKQ}CnVpwfJ-k*i_uS^|$itm{e;T|jesVeseu(-I+B-S*sZfaUKkGI}8 za;`?CWVGTOKC)F;egr7NGeveT(8o}j|3Mt^g7GOddt^N^7~3l{Z77gZ?-BE3GZn@Z z%|%>LH9Sxk;hHs_h~dLvunvR&KSC^iYPYds-N6(OAwWe^Y5x2D%Ru5{OD{qUQ9=*lBX4Mz?aC}YY9Op&T(j6&EKG~j8Y0d8%neqJC>h2r z?3wS}QfcRBF$+3Ze3hT)P<4jvhJ)+f?_5&lze*Hf?-HY50`-%@-VF78!YS^)v@jRS zztu*>4_EuDg>72-z;rJPhJv-*6Sw6^IbXjT2Le-w6vh+}6~HKn364ZU+b1&-w53Ov z>)JOfVKXi9@Wtg3sL?el1G)&qOoMR!^7e4tQTRJ|bUBACVGyXcctlPC+wjGa$)%$< zyLoJJ3+ea-sd-cJ-An4}>*z3nol%!3J^1DaKc(=XQP#%td))6gD>(*N&)ND!;crrj ziriYDl7f3cjennWCCGuy`f~W$OdR1`eiA?EK6D;}-^2B4;uI zOX4bHOs>G(RI1UqA>ZY#1wc8h5G=q63%X0jn%C7=dl!$NbD+4oJ&>8hLh{pmDL6Vy)GaBp8! z@=)Y>tNE!#S{@r4KNhK#!Oz18yVFM%X|r=C45UHX@ZhqwDP(=-f`ihnKYD%I64_dG znbS`qr%1({s)_K3s261y8pdaEeW+z?;(<6gc<@&L2GzKMit!mGr;u{XB|-lM0XTp zopR7vMsOyMERIe(>vk76wYR)pG1V zUQ#>HDy_O*g|nIf1F@=g4bT~&)QGkv{Q(-)DU)^vk-#pL=9r(zX#bSl%oIR2Q+zZP zsL|jL6D=3w1(7dQk94lu6WZFtiap4wER}Ado~f)j(J&&>DrOC-@Jd%`nx!|PKo6VZ$`@4$`|+r{nXlx2HB+ZRc{uMW9};jj=u8 zov)VJtwrI-tC|@rnikU=C(Z5EqexV~6f2rn$2qFx4YQ1eXAHffcwFoZwha;}a>ls$ zF4%u`iyeFC> z)C!Ul&@iQ^NSA$eySlVmcqgyse9*e9eu^Y)0Dw*CX+nfm zd#>xO5Z_TiK&cWlI^UZh4I2L;6Qt?)0{k9< z?Mzh?+>U-BW~PRuDja`_gVrl5XldhBMC+&k^vF|4SDqtAH+OokCE)=E@F?>TCt~`T zjT{6E7WU?&#ot;Xd)R)RTXk zPVCU@p61@#Eyc6JGr_Zfo8l(XWpv|6rA@>-UUe*I>>kbS?T3J7Ru~_FzX5h~Hy8aC z(SM0AFe_}n!NjCTz%~&y)huEjt*3FLZ&GGqEuACS=6HBh>hcfF{PMtEV$9+uE%x+K5j6tcrGMJ`jPcr35G6GRO>#v5& zG3A&+6$QKaVdXM&#ouwYOH?4sHdYosE*e$(s#1iA2DDS)YpBt-{JNoR>=8Fi7g>S2;LmZhkmXa6BLjP*P)+*G%e zo{yTXPhDO&HKA_|U)_n#1`{_X7gUE`e}`A)a__8}hT+;kP5YXWf2ItzM4-cZyE4l` z%ULS4*$t5XX-s&};K!YtMBChYTA4_h#$*}&536Bel7D_@*jS{tlAB8@yGQXIC>Q_x&hD`ZybktgTqsXosDX@e}4`XT>lVp~k4nQObs zImA^Oe`{NmI=YGQ2|+#ya!OjPDo)fBCLf01x{e<}#As@zAJo&+xoj?TH&$gbX*dL7 z^ihxyQ){KCbTnr!V8){wO%@u{NXj0zy(VsY4!37*%xdhoyBZuv`?H9oQM9*n3Vol; zM2g~8Pun-6PHoC7SjoxB2zJxD_3eYgnRK={ZDu2?ro5iT)CF_Z25YMgkdFGpvRJT+ zAIHOa;48;KabM15M6qpH=D!(d8&jkgKEfG9kfbr_mNTd_l!xjHMHB`P39BhJY6LF= zAM0aOp*z3f)L3bDU6fhyal347Fv(d$CRRHVTdkj3O|ZOlKAh6b$f(R@dmP3TRGuxV zjt)gPzt?zSlYU|JvUyVmz^HKOZS_&8fpIN7`d^TC6BB`A4P+%ErPhjy);Ra- zTPH`dQW={tC&@Bl>$m1e=Gtq0s<)u3jufqYV6AA1Q0HaGwN*NnWEBP1#W_aaVVkkr z|9LnirB=QnC2%}MHxZK+=#|x0wY~d+shbFS>U{BEkZqWhv%$6QFIYVafN-l_Ab2v; z1a2%k(KREJ0wUwy`G-X~7-P$@85-Mhc0@1W+^;GzF)2D@K+8I-PHXLTXgSs$>JeSA zt)^Iv4Qu3o?cHc(T)^ZgKam~G*Q>1)6nMytn5jhl#kHs%JwfwG-5M5=a&TCuY)ZZ) znWRZC5c$^)uUo@6 zs(saUUJYSf+HZwcOEr5!$CN4WgEuf+@=QME4=ARPE+#2&2BQO;v`pBeR)myFv#W3> zOm2`({IhlP#2%mKqKs*>rc61t?_d;poEvVXV1{dHDO|)N-|MYZ)HLcNQG~SmvbIz1 zNN73xd0GD4l#h*hwSgEvbiJ2%+n!e!C$FmOqAT9*Xl|xpXUD(@rEE-~-~93%HK$(3 z#!l)SEGV?kud8Zm3Z2wHus^=Hm+cq3%Dkvd3>spH5H!$5U?*j($GsYcL{u<9ls9)9 z$o~6{f`N+(D;Jsjs8?HJQyN0f9wIi>eVfY8%FD<&i-w6qh4?jaP_X~17Frq@_EMEM zZTd&t1;z#5@Bopr?8$PKW<+RLU4HeR z09kb+sn=zFgO||Oz%(E;>n?N@+#fpe0U>-rh-FQNM1m&J_gtu+8t4O;3jNby`up=Z z%pipDfYCD{^U&{VLlEd)5<#qc_uCJB^rlhrz!!K)8v*J9LmYEx{3rDb z@@Y^z?1bucw6&f1w)A%lrGJQd$Xy69gbdMIghc&{hl#od1-8?oTwhM0VVxNo1QypK z5dCMu9|Y!ZzQeMo4DFN%N5Kd+!rYM+c>L9&IoU$wBKAna;o>4RA#;RjJN}=5k<_8d z1(-z4ctnmk`lIfumsU=w)0*D-uY{ILKj4?ajpez1aq$n z=9%MB3$Ool`W-BG!Z)WQ?BS1G=5}h}rRJ1llxhgfshZ2_ao`l+O1Hu|e9%rzs(u;7 zTG4aLkMbJ?i*O1vX!|H<;S#d>Y4A(r@27MoqrA@f$agxqqMZKo4DRAlT+$o?qXg+& z=Fwux7MhFHai@aJ4a7ZpZd9GEtm2L|jw}Mo6;fFcgecvY(@quNqtOUA84Ty}+Cq)i zBa3S8@&<{b7+ZUEWghdT?&t+3{+SK*8rA(>F8kea6{fVj^*hA*0-R!xP$yGfcG`%* zdt7H49;RFIJND5BJgyuYKfo@YiQ)gLu`vF38Vf!n>;I>C#mUG8(!&See4#jK!DRqJ zo%_X}R%h7W66N#dHUhK8HB%h*_O#%Ih9xwPCAjUJO(teAG7&}M$F;EN8QeYE&Lkvv1ycu;yEAY z_`ROy;Q#LHc1u=!@9Iv9K8;m0RF02CAf=u^-Q;?2LDCjLmZ{Z>l}@pE~_=fkwv<-9~r8X0g12}yGK^F#D_M95%JLM+QD z?yqYv8_|LxOEdd*2kwKPuAi@$ofMB9>@;RV%3SaL#?h53F~uLoSC9NLI)t{=8Zz4P zbK~LA=}(|I(X6=YYu&BaDzLC(Tw;5&c7HC;9-8jxlQxGuBd6Zkub%DZhZ{dWKz2F+ z!S9|E0W=t(X$Z%WmY&d_n~x`-A3_Xe5*t-;(&ko9h+Moyvl%94@OP1j;d@x3w4GgPX%IGOTTC z^iA8!p4&5tge&OVrd9xBiEJQH4Se2P|HLAOVg@!wfpdBHez zxdZ8t^qBAv8gJPqpgC<_4Mh0?%M{cn74@N{_lH?#F1x^-pJS$koUWu4HJ`LOigp2L zaWKNPy#oCrAaRC9V*sxNbw$y9FGUIE2jkjg!R-@bGbayqtj5r~!2J1-dx5;8@^rQYT3q$!7{qxp^&{Rf}lep_~tH11Q)n5l2scAg*-8>-R*xm11j`rb25n z%y}zzZ=~xLso8BgTzpI&F~@w}d7iJ@6`KpEt6=NFnH!LA&ReN7!IUC<^{Z#!W-yLQ zo^RL-^luCcob4hU@n45XPU^VvZkx$#t@Fj*NZ2-A3xONUr7J*)Uyol0UhU7}Bf+E^ zVwcZjo@HiN2IXF2`pmX?)^s*soTF-qFdC;0L|qzwMCSfjLNb?l5&}*4;P2{1)JG5e6)?{@oRy#8=sY&jfxDrCy)K>tfn_=vvFNDaJTB3J zkCWf~&{}R*R%YcA=|m&U*xNeKSj~eOS?jauy%aT>Tc9(Xlf~0mTJ1x&vs*oklbIpS z0G0aN?b&+v;n_OC{u)nW?tu^&qx-ak?1#AfGEC0Qblnp^90rf&)2*lqSEs~>$UT0J zTYh}lUeIO5z>Aq2G1O|2kV6yF0LVJjNXOd7fY9aat>${(q1PFQ5)T(+fcZD0!$aSL z3eQ|+R2suj1cp*Wb~Az7$Z0`ic0wi9u3XV9nGhe?C(-`M8~zFF8-+JFN)oB+xGL58U>)C2qE7J7-8Ygz10=J%U`Y1x0ASiAi@WYzN%mbbF6}MySi7=e9n}L5fFEfx#W%NNW@Y&^xxc5qDRr8v z4}arYn)$7}15Qq`OAIz2khR2go_XG353vAO_;<`VQTTt%V7;TBtsu(C>Z)y5+ePOW zF2ecp4psSOci$*?7xbCnUd9l?CXHQ*Z1q(QC(b-V?MUbf=nlF?fj$_j#+S~ZS8hz9 zwjnm`x!^~h4wp2{0{)z;_NL4}UDChj`BEl!ftisRXwW=Oq^c2Y!FiGD5m;6Q&|zkX z{`j6mUFxszM)!W>PmQe8jJ_#Z=l{eqXG`M5wQIvEAaj-g2PR}#ynd7+Z%B6KYQweq zca=Hr#53jW!~XTZLF_O-0IZ9xEGSn-#aGP$OsO9$+W}JCottOL1XwO@qP9IJ|JcVY z2|mC#fnzaVVSy<<;VLyke;EOoFPQ!doS5k7Jt!xPIAxvtChZguH-jzs?;2 zhylv?1@<)opabXzapk|4Qa}Bw%P_NV_5pb(Y704Y^Y*1KgL*;Ja+$MWM~iQ*IW95F z>H8Yl?c#C4RFBWr%#<{C?8C!qR<;iy2RXex=qVr)+a@e&*|AQb3!?u)F+*z=e&5Yg@)dW z6F-EJ?}>Ssc;+{sY)R}#mp5lt3C#m%#rc!hF(G$mLC4)salK8Wq1a-hDQg|~ndq63 zYcwad(Jg*&4>zV{lxd}5u%Tb+!tA#4#qz1q%`?09OwVQAsp?8VW&IRZ$HT^l(9Ly#PbinNh`wFrDGIHnm<9-KJSomScPGAG8%<94%8 zBp@jOB>)QSPU@fS^zLQfd|wVghWq1As5jFS8`M?f=kcWKLF;kn`+h~9>bBcavT8DR z`_*pNX{hs+3>KLtwYAybS zF#)PEf-^}(J$gjLp9}piORkN+_f_56iq$1cvJdWylasrd+aphq8iSQui#4Z9s7rTe z;19x$A!|e6OHya1j-aja?m_1Ux(1$0x;3jyXJ@dEgsq|O{_gSa;h7VvH;_+3XSUB8 z6Px;hOPXia51VI?XIPJvFF%-iqDyj*n68=Vx&zBlk~Mm+KE=$|VT_Z_p)Kx^lY4I7 zu$6mHonD^KSh?epJ3`)|tr1+K9Rt*k9Iuow7MtCR(u8($eo}2&Rry$V+kEB*ROq@K zj7z|0{0~r%P@c)>dYgKWRiaCqRo?vbav2#cwo2U=XPJKkLr+dkEETHCx{iAwR5LXi zb)QTpG!>OGbl@6UuQV}IG6r5GH_&$m{*3lb7X`)9?+wac$Q`Rk74P7uWP)7}_ zU;;CQjhaA(?{nPArmB_(%qA@CTqCwB8<|TOvQ^@hg-K8oB3Y_xGt2Hn-c}pMD!VO< z?i+zm$^9!-n=G0<$oqMf(1`if?DAC9RoaW{Pdt8p?avyg8>+Fo2UQIBXvquRpFp`F zy_Id-qr6tvLFt04o9*RZk@t{A>Jc;L3tuV=#mnvM@%8nrA_bU56XRud_DQt*k~wFj zbv2*8y;C0%r3GGoBR5YMDa{&MA+rEASm>|$EJl7TGny7t7r%>*AZw+)ja61tFO-o5 zn+ddOvWH5XDl|3$`;FJdt!enRyuC3B4nf#BJd;_!J0{sHC>(;WdfMYr@z>I#A6SKt zQpFc_X~CgFd9~K8ah-FUJ$~1H8I64rUspVW%}er_;!+dWk2}ziicg4|TJ&XwPs1(T zMgM-o2A3zG+e#Fmja5}vOR`EuJF0lo^`J(JjlwU*$oY@{IJ2dB6J-~IMY>DV6o7v$ z3w?%WQYewJOhsMk)`_@!l2g+>odVmejs+LFlN(!;cTRF4?3E^^WOqkkvSP;Lz`G+% zIAe!(?$VCgudDubE+;F$sc^E~TIhYfvr06hGQMRr-39!3JW+%sXm!}OB+clst>Ipn zifYfQUIRbWU8}P~)gTZ2NHL~9zd|)!r7CdVvUcBA+%gfD`&OL=#y(7HEhh(&JZOcNJJ)o$-;G`^EB_gSOp_vvZ?%L-S}o*Wl4e<@7~Ii3?tt zj;1QZD{m_oR=|$_>MzVDwQB7T3~MEeX6^ZQT`nbB9o>7cdFJ}%W?dhtj3vk9Bi)Tn z^QW98W18gA>xOl5RLxpF0cr0=oZ4Pe>RP@*-IJUBmJ9t(va6z!Gw*iDT5W}D8TH&h zT6~T-+zkAF|Go}KAUs0pciQHzj|MBi67 zRqaT=rM{2D{=8}D0FQhbFeTOWYb&mZf~oF3Us zdoy<@zYIBhg=$e+YVF5Mks0%(8Pu=$H3u}BG(}b;m9@lrZ`pybNZH*JtNK>muPHy% z;AWPGUuT$b+D}YM1R0h|uPQrxN!s75-D+xFHWbB>fD^;Hhf^hF=Ua(J_#S#I?wspF zFIXM^B8`9mk5ZKj``iA^g{Bbf-_6l+FU9YrQ5Fcf@68q*t%5PP44h0r8y8#ICN}~w z7o)pYGxzNR*z5$6nSwVrKBwOSX>LjbPApIo(y=>zX(xBic5&B}egXr~+>Ox|IbRLU z`3~;E2KPlGk|Umq=`f>%xDN73v7-VD+&7^^CezxkQ8J#Y`3Vb0 zfDL5WQR#;^QO6W4L}7Hfv9nZZS)FzB#6%o=!QY}9ota1OZ)9rF!gb#)= zQrJ^PfxU*$nzMazoiSt>&<-}Z3K|UU+=(12Fcu?(MY3hXW-OGO7dT3qp*KJp(uk9l z7mc$doGSoBau<_FWi}opL)}D##H>q|j0}grD_=~_b48~#Ko~G_&OaG85^)rHlGh3* zGIHwKNlYjz87bF_zj9VYh_s_MbYN z+qP}b&E=9yE|*I#>C~?`>7?_fx~m=(cihlyl1Ua8x48eJF!w+rBr#d#NR@zpJ|TI5 zxrcAeMy&t`;)7B731j3|tVhIH$bs-GtjJFDIMpkYU_UKuOxMdxa178{)N>|sd2*GW zwZ3_b0W*l7ZDM+v7pJ?UypiM9-Tiqk6|FUUBaWYl%rz5JVi*XlOy&ur5n0>s*e5L9 z-y9QzKZgAP57!z+Bx>AG)VR3p?x_oAA#dDZ{D?4lbT*WT#Fd!P=UvL+2#}nX`GJxk zk$On%FgbhuY0+ojrISzt(}-xhM#(o^NHW7desXI3RH{67P%f>Pd;`w!FV3)*u&!F{ zv6^MEL_R!G3nVcF=)=5WiIkqV10fp32;cy#62psl&T{cTt*#?)h2_W0*D#RQcnaB3 zxauJND*)R_mvlmcuZNEGww2tZ8USJJlOhosUGqP)&=?p(tR$aQ1DI+Cf2PtNKEGsp zxO7mVr*vE-R2SL#Cpeicz2)ced zD}A!^!co2&@7V5a1(f4wpbOLasbseGwqh>O{fuhD2@)-(jabC3F%alN)aK%lnQ6c2 zKw!`ez{oc$uS0X+sH}<4`kv%*J$j#;7^qQ z;0G`@!AlHi`?(k8zaT7w6M$rWw1?kp%VMgX71gv)>v$i_-yqCy zN-M-`+7RZzm}2EIOXV|eBQoLC!%Mj!$ho!b6E*wBxKCTBYfH;3BudfD0s4Ois%ydt zOE@BAKoqS6G-8rqQ2)t$7?qI=MIAcRKpy_HCviTMHBwzbE&I1uqam93@>FIA%EaCl zbyPy7S_0A5`#mhlUOM&MFP(jMXj=Twq{&z$G1Y4!Dx9J03^$lIJN^>3#2T8Y9DG4v zj-(4wS>x72dzsP$mtwMIOtK9FS3Ts~L(~R{7JnOU(VKA*wCPYz{iYPB=+wnkB;gwI zF!BJ^(r0iuS8 zV^Y=xLskS$WoJ}m*u{HdwF7H2u4UQ<1y_b;PzD8eJrhS9b@ted1R4LtaJU05%N8*+ za}aOK7_LYNd+$Wxkg_%YaNdTN|Jby;>TtxuOx3l-a>^O!g&U%hhj)$(*ZW4ubGST; z&hF`1!R1-aPsXYRfO&6NsATOLM@^bo1KsNaPFmV=m=R(A(x32IWeswuCvu2i>Zn|CF(GG>JrNp7ry&iv-`+T zocdTQw_@sPXaJRdO8v1NV5%*6hH4M^kzI~fDJBec@fZ9V{t@F%yYa8uq5e2-?aYeY zJKTLqoYxm`+FS16vsPMo?^D~DSsesEP-fzH2^Ub8M2~(B%zp}U=T5v0o~_Df;yE7; zHO*u$va9UKWV@dtvnFwF7i4)1m)9oMyPiEz5_n3fy|2HdhLun*Gxck54t*`HYgOKjX{YI^x2`Wi+FYNAy({#c`U#+@D6WQX<<%Z1f#oFrMa=^o__C z-As+macX*5#7yD)E-VU+YkE$;X1 zo1D^INS)$0GyQYu{?uY2N$Wrx{$DGZqcuPpwPQ9tQ_qo#x-&XD#s#_ADa#b3= z9ErQ*-aJ&|-VIe2x>P#MC!3aUl~N-tn@U$dx=a!zyG>1$@fEbhBwD z#O?)8_bP|wMi+^_P<0R?HwkG^@pj}QgPxvm;4Zd*jJw?o=^uCK~dv~!SMcG*LEvZZ4 z*33%f2wQ#M1S8`=nY1?=ThhxsXs-5oonC#P%E;R5GndGL21gzM#;A z!Ui)uF&NVXuTY|Jq8`RXIhe=^Q&h0WPcT6+Rvs!zur$1cqEDq42t+xfG6(&Zip71I zPm&FV7#H^Q$OK}v`iR^yEvNMfqC3Xsrm5CYr5 zn9_J&D{`-&88<<=0%KTw1_Lb?7Ti9-CG1E7Fp(JCMlaQwRbCJ?@8o~QdSm;+V0p7# zZBVyv8S+jgXlf#uuLmAfM9xMW;*0UO6_G#)CV?u_hobPAAiCK3KoBlMUn}>)WV3VJ z^}aEd_V0V{cXAy1b%}}ZfR2{IC0JxqSgiY^+sS->%0Ler*qhpU-;alzKIwDtv^!rV z@-n|~>sKn;fO&7%?GuLiuR3&7p=thd1(fMTOh{@D+WwGn_3dff6f@%Fs$@si!VQ#63Qm2WcWUSOB@ z9#^7n`|pODF?0rbgRU3yV1&F@u3SR^n-8t)XE)BtsfQc_3_cNPJi#pZC+vnEeqAJ^ zN?R$9_x4f>_1$^6Wf#`I7C}}EDybs9{ytU=eeOW7MaZ7T{h16*ZjBt$z-ox-4viMy zOr%wVM>)}dOuu&++QhhqcwPVN9J)r2>gd>DEo?s~CJjMXgv%T8t^^g1*e3A4o1V*V zK#L)6y46;W<7*}53wM^$r493CLJfg04gD3X^r)zIGs?Yr7mpBJDmF@xgvetCnIY;A znE!_+y$|efa4E9mdG~=$YYOKIQ*j=ug1amX;Gel=MTBqklY#U>}>=KxOdIi+@MgCmx}R5uf2}m4{hz` ztd|OGZKE1rdJ%B#WW@n>K0GfU;wh)Ds{%U?_;uYrHeik#9zmd~%yE+I{`dXP4@S<7 zJMXkbFZI0RTkJ>n*UAp%VTU9p1wdZ27-io0;8 zeiNlw_ypKn+5^HU+1S++oGgVU<}&7VqvyTpTPga!6pW6KEN#7(i9PkFg{|~+l;l*+ zvXN&Dy5|FQJ^-E4ACy1QpAfh&7$~?Rt7V1S*Y*?I_)BwqH5jL03H$EarmruSl*iD? ztU=@@$c$;e^V;<&xPnx_UJUE_s*{%P@}i;wE8V6IEg04kWM^V!gQNQL8B%oonuK`G zDNGG8r@+^PPoig(bU-;HC+r`!eYYQeljoQXpwF28d?Lt$8@A)6>Xa$}DN%=zr5S#B z7^)}|%oSgu6it{|#z!FC(o8s1Ptbr6FcYD&`!dEIT!12V zYN1{d9wO*WyT;;$#tVGU@$wlf*CH8Z8{4{WQkt|hc7B<#{*fZn8Y@-edp&GV8Eh50 zEgzLdI%~$V|D>^sKO;trCU(erXO`*J1w2itqe-3JJbIe4exT&ruDvCf*a>>+S(&xR zk+d+Cy)JIM-x7J?61ASX_S8I|{+2wONinE`JL241kA$c( z+B%+!XdP7AxIH2A6o6o8j6LP)v6;0-j}&!T{Al?+XU=(I`K-VQJ~Vi-syev!0ToUC zZmwtIg=N7$fmprYmJh2u)J|CxFap4N#!!vm+5R7kvNT-*9?gpU5^Pu_~h^|q%0DjJevr$d#GcAQb)8?@r_T&lqe7mXD=P$0) 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\suf+axiG9 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 K(n_nyApaW+4C&nf literal 0 HcmV?d00001 diff --git a/README.md b/README.md index cb9ffc93..be522ed9 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,7 @@ Displays detailed exchange order book contents docker-compose build docker-compose up ``` + +## README +- [Front-end README](https://github.com/Lercerss/graphelier/blob/master/app/README.md) +- [Back-end README](https://github.com/Lercerss/graphelier/blob/master/core/README.md) diff --git a/app/src/components/OrderBookSnapshot.js b/app/src/components/OrderBookSnapshot.js index bd7b35c6..d44deb34 100644 --- a/app/src/components/OrderBookSnapshot.js +++ b/app/src/components/OrderBookSnapshot.js @@ -250,6 +250,7 @@ class OrderBookSnapshot extends Component { type={'date'} value={selectedDateString} onChange={this.handleChangeDate} + InputProps={{ inputProps: { max: '2100-01-01' } }} />