126381
2015-06-23 07:56:59 +0000
OO corrupts formulas when reading Excel spreadsheet
2017-05-20 11:55:35 +0000
1
1
2
Application
Calc
open-import
4.1.1
PC
Windows 7
CONFIRMED
P5 (lowest)
Normal
---
1
jty
issues
jty
oliver.brinzing
orcmid
DEFECT
---
---
2
oldest_to_newest
1880233
0
jty
2015-06-23 07:56:59 +0000
1880234
1
84806
jty
2015-06-23 08:07:04 +0000
Created attachment 84806
an example spreadsheet corrupted by OO
OO corrupts spreadsheets created under Excel, which contain references to whole rows in the form '1:1'.
E.g., Excel's meaningful =INDEX(1:1,INDEX(2:2,3))
becomes OO's =INDEX($A1:$AMJ1INDEX($A2:$AMJ2)), which makes no sense and produces an error.
The most pervert form is that Excel's =INDEX(2:2,2)
is turned into OO's =INDEX($A2:$AMJ2), which is syntactically correct, but produces generally a different value.
1880237
2
orcmid
2015-06-23 20:52:09 +0000
SUMMARY (the TLDR)
I changed this to be a problem with open-import, since it involves conversion.
I also found that the problem is with the conversion to and/or recording of OpenFormula incorrectly, leading to errors of various kinds. The use of full-row references in these INDEX formulas is not interoperable and involves a combination of defects. It doubtless extends to cases beyond use in INDEX.
DEMONSTRATION
I confirmed J.Ty's example XSLX using Microsoft Office 2013 Excel. It reopens fine.
- - - Making an ODS from Excel and interchanging that - - -
I used Excel 2013 to save the example as an .ODS file. Excel reopens the saved .ODS just fine.
Note, what is shown to users and what is recorded in the file can be different.
For example, the XSLX cell A4 formula entry "=INDEX(1:1,INDEX(2:2,3))" is *recorded* in the Excel-produced ODS file as "of:=INDEX([.1:.1];INDEX([.2:.2];3))". This is perfectly valid in accordance with section 5.8 References of the OpenFormula Specification part of ODF 1.2. It might also be valid to record it as "of:=INDEX([.1];INDEX([.2];3)" since the start and end rows are the same each time. Details at 6.14.6 INDEX determine that the second parameter is the number of the column to select since the data source is a single row vector.
Using the Excel-produced ODS, LibreOffice 4.3.5.2 *presents* the A4 formula as "=INDEX(1:1,INDEX(2:2,3))" and the results for all of A4:A6 are correct.
However, on performing a Save As of the opened file, that LibreOffice saved version is not reopened correctly. The re-saved A4:A6 on opening in LibreOffice *present* the same formulas but the cells show value "Err:502".
When LibreOffice recorded that ODS, the A4 formula is *recorded* as "of:=INDEX(1:1;INDEX(2:2;3))" and similarly for A5:A6. That is, the formulas are rewritten in the Save As result to a form where LibreOffice fails. When that file is opened in Excel 2013, Excel 2013 reports that the file is defective. If Excel is allowed to repair the file, it will have the formulas dropped and the values preserved.
Using the Excel-produced ODS, Apache OpenOffice 4.1.1 Calc "presents" the A4 formula as "=INDEX(1:1;INDEX(2:2;3))" and similarly for the rest of A4:A6. However, AOO shows "#NAME?" for the value of each of those cells. When the saved version from LibreOffice is opened in AOO, the results are the same ("Err:502") as when LibreOffice opens that file it saved.
- - - Importing the .XSLX - - -
Now that we see there are serious asymmetries in how OpenFormula (recorded in the ODS) INDEX (and full row-/column selection) is interpreted by three different products, where some products can't even read what they have written, and AOO can't read any of it, let's go back to the import of .XSLX.
On opening of the J.Ty's original XSLX file in LibreOffice, LibreOffice 4.3.5.2 *presents* mangled formulas for A4:A6, showing "=INDEX($A1:$AMJ1INDEX($A2:$AMJ2))", "=INDEX($A2:$AMJ2)", and "=INDEX($A1:$AMJ1A5)". The cell values are shown as "Err:508", "2", and "Err:509". It is cleared that the presented formulas are a defective rewriting of the row references that corrupts the formula as presented. On saving of that file to a .ODS from LibreOffice, the A4:A6 formulas as saved are "of:=INDEX([.$A1:.$AMJ1]INDEX([.$A2:.$AMJ2]))", "of:=INDEX([.$A2:.$AMJ2])", and "of:=INDEX([.$A1:.$AMJ1][.A5])". Excel 2013 reports that file as corrupted.
On opening of the J.Ty's original XSLX file in Apache OpenOffice 4.1.1, the A4:A6 values are "Err:508", 3, and "Err:509" but the *presented* formulas are the same as presented by LibreOffice. When the opened file is saved to a .ODS file by AOO, the formulas in the file are the same as those from LibreOffice also. Excel 2013 reports that file as corrupted.
The defect is confirmed. There appear to be multiple problems involved.
1880243
3
oliver.brinzing
2015-06-24 18:48:42 +0000
.
84806
2015-06-23 08:07:04 +0000
2015-06-23 08:07:04 +0000
an example spreadsheet corrupted by OO
test of a complete row.xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
8644
jty
UEsDBBQABgAIAAAAIQCkBM/pcwEAAJgFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE
lM9OAjEQxu8mvsOmV7Nb4GCMYeGAelQS8QFqO8s2dNumUxDe3tnyJ4asECKJl2227XzfbyadGY7X
jclWEFA7W7J+0WMZWOmUtvOSfcxe8geWYRRWCeMslGwDyMaj25vhbOMBM4q2WLI6Rv/IOcoaGoGF
82DppHKhEZF+w5x7IRdiDnzQ691z6WwEG/PYarDR8AkqsTQxe17T9pYkgEGWTbYXW6+SCe+NliIS
KV9ZdeSS7xwKikx3sNYe7wiD8U6H9uR3g13cG5UmaAXZVIT4KhrC4GvDv1xYfDq3KE6LdFC6qtIS
lJPLhipQoA8gFNYAsTFFWotGaLvnPuGfLiNPS//KIG1+SfhCjsE/cUR6d8DT9++lSDJnEse4MYBX
znYres65FgHUewzUoVcH+Kl9hkMKIyc1PdUrF+Gge8qf+mcanEeaJAEuB9iPijY69yQEIWo4DIuu
pjs40hS63PCo66GdcwpUhzdPc3X0DQAA//8DAFBLAwQUAAYACAAAACEAtVUwI/UAAABMAgAACwAI
Al9yZWxzLy5yZWxzIKIEAiigAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAIySz07DMAzG70i8Q+T76m5ICKGlu0xIuyFUHsAk7h+1jaMkQPf2
hAOCSmPb0fbnzz9b3u7maVQfHGIvTsO6KEGxM2J712p4rZ9WD6BiImdpFMcajhxhV93ebF94pJSb
Ytf7qLKLixq6lPwjYjQdTxQL8exypZEwUcphaNGTGahl3JTlPYa/HlAtPNXBaggHeweqPvo8+bK3
NE1veC/mfWKXToxAnhM7y3blQ2YLqc/bqJpCy0mDFfOc0xHJ+yJjA54m2lxP9P+2OHEiS4nQSODz
PN+Kc0Dr64Eun2ip+L3OPOKnhOFNZPhhwcUPVF8AAAD//wMAUEsDBBQABgAIAAAAIQD+aepXCgEA
AMwDAAAaAAgBeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHMgogQBKKAAAQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC8k09LxDAQxe+C3yHM3aatuohsugdF2KuuHyCk06Zsm5TM+Kff3lCxdWGp
l+Jx3pD3fjwy291n14p3DNR4pyBLUhDojC8bVyt4PTxd3YEg1q7UrXeoYECCXXF5sX3GVnN8RLbp
SUQXRwosc38vJRmLnabE9+jipvKh0xzHUMtem6OuUeZpupHhtwcUJ55iXyoI+/IaxGHoY/Lf3r6q
GoOP3rx16PhMhOTIhdFQhxpZwTh+i1kSQUGeZ8jXZPjw4UgWkWeOSSI5bvIlmOyfYRab2awJY3Rr
Hqxu3NzMJC01crsmBFkdsHzhEC+AZpATeQnmZlUYHtp4cNOHpXH+iZcnN1h8AQAA//8DAFBLAwQU
AAYACAAAACEAAz5wY1UBAABBAgAADwAAAHhsL3dvcmtib29rLnhtbIyR30/CMBDH3038H5q+S8cG
UwkbiVEjL8ZEhOe63lhD1y5t5+C/91oCYnzx6X72c/e9zhf7VpEvsE4aXdDxKKEEdGWE1NuCfqye
b+4ocZ5rwZXRUNADOLoor6/mg7G7T2N2BAHaFbTxvpsx5qoGWu5GpgONldrYlnsM7Za5zgIXrgHw
rWJpkuSs5VLTI2Fm/8MwdS0reDRV34L2R4gFxT2u7xrZOVrOa6lgfVREeNe98hb33itKFHf+SUgP
oqBTDM0AvxK27x56qbB6nyUZZeVZ5JslAmreK79CeSc63iudpGkeOsMp1hIG9/MohGS/kVqYAZE5
JYdTcJtSMsTCRgrfIGiaJXj6Y+4F5LbxBc2zPAlsdgGP58Mh0RIdtb2Hk47xn4Jd4vro25lExy7F
OBD+dGcX3eifu9M4L7bjkIqrCqUHE7GTaZ5GHjv9fvkNAAD//wMAUEsDBBQABgAIAAAAIQBs0i/T
UwIAAAAFAAANAAAAeGwvc3R5bGVzLnhtbKSUTYvbMBCG74X+B6G7I8ebbJNgeyHJGha2ZSEp9KrY
siNWH0aSt3ZL/3tHtvPFHlrYizUajR69Mxo5fmilQG/MWK5VgqeTECOmcl1wVSX4+z4LFhhZR1VB
hVYswR2z+CH9/Cm2rhNsd2TMIUAom+Cjc/WKEJsfmaR2omumYKXURlIHU1MRWxtGC+s3SUGiMLwn
knKFB8JK5v8DkdS8NnWQa1lTxw9ccNf1LIxkvnqqlDb0IEBqO53R/MTuJ+/wkudGW126CeCILkue
s/cql2RJgJTGpVbOolw3ykGtAO1PWL0q/VNlfsk7h6g0tr/QGxXgmWKSxrkW2iAHlQFhvUdRyYaI
DRX8YLgPK6nkohvcUb/vSI2FEveo6G7hfX2Bx72SQ7reSby2cbAA4kKclUZeFDjSGCrmmFEZTNBo
77saJCm43AHTx/0jujK0m0bzqw2kPzCND9oU0EyXGp1caSxY6UCo4dXRj07X8D1o56DyaVxwWmlF
BZhkgJwNSCdnQux8w/0ob9htiVQjM+meigRD6/oinExIZDQH3jDx/GvawP4wFrXlLR+IV7JvRJ+P
R74HEvzNvxAB3TQi0KHhwnF1C+zTB2bRXkoQ+htwvtuH1VPZoRIFK2kj3P68mOCL/ZUVvJHROeqF
v2nXIxJ8sZ/9TU3v/Rmsdc8W2gtG1Bie4N+P6y/L7WMWBYtwvQhmd2weLOfrbTCfbdbbbbYMo3Dz
5+rxfeDp9b+INIbHtrICHqgZkx1T3F18Cb6aDPL7HgXZcO2nJIg9/7rSvwAAAP//AwBQSwMEFAAG
AAgAAAAhAPvoXUdgAQAAdQIAABgAAAB4bC93b3Jrc2hlZXRzL3NoZWV0Mi54bWyMksFqwzAMhu+D
vYPxvXG6desakpRBKethMMa2u+MoiWlsBdtd27efkpAy6KU3CUmff/1yuj6Zlv2C8xptxudRzBlY
haW2dca/v7azF858kLaULVrI+Bk8X+f3d+kR3d43AIERwfqMNyF0iRBeNWCkj7ADS5UKnZGBUlcL
3zmQ5TBkWvEQx8/CSG35SEjcLQysKq1gg+pgwIYR4qCVgfT7Rnd+ohl1C85Itz90M4WmI0ShWx3O
A5Qzo5JdbdHJoqW9T/OFVBN7SK7wRiuHHqsQEU6MQq93XomVIFKelpo26G1nDqqMv865yNPBnB8N
R/8vZr3XBeK+L+zKjMd9q7jq3Q5efzhWQiUPbfjE4xvougl02EW0IPX9Ekl53oBX5B6BosfLqxsZ
JGE7WcO7dLW2nrVQDU1LztzIiSOKA3b96PKJswJDQDNlDZ0X6Iw9llWIYUp6uZcPk/8BAAD//wMA
UEsDBBQABgAIAAAAIQD7YqVtlAYAAKcbAAATAAAAeGwvdGhlbWUvdGhlbWUxLnhtbOxZT2/bNhS/
D9h3IHRvbSe2Gwd1itixm61NG8Ruhx5pmZZYU6JA0kl9G9rjgAHDumGXAbvtMGwr0AK7dJ8mW4et
A/oV9khKshjLS9IGG9bVh0Qif3z/3+MjdfXag4ihQyIk5XHbq12ueojEPh/TOGh7d4b9SxsekgrH
Y8x4TNrenEjv2tb7713FmyokEUGwPpabuO2FSiWblYr0YRjLyzwhMcxNuIiwglcRVMYCHwHdiFXW
qtVmJcI09lCMIyB7ezKhPkFDTdLbyoj3GLzGSuoBn4mBJk2cFQY7ntY0Qs5llwl0iFnbAz5jfjQk
D5SHGJYKJtpe1fy8ytbVCt5MFzG1Ym1hXd/80nXpgvF0zfAUwShnWuvXW1d2cvoGwNQyrtfrdXu1
nJ4BYN8HTa0sRZr1/katk9EsgOzjMu1utVGtu/gC/fUlmVudTqfRSmWxRA3IPtaX8BvVZn17zcEb
kMU3lvD1zna323TwBmTxzSV8/0qrWXfxBhQyGk+X0Nqh/X5KPYdMONsthW8AfKOawhcoiIY8ujSL
CY/VqliL8H0u+gDQQIYVjZGaJ2SCfYjiLo5GgmLNAG8SXJixQ75cGtK8kPQFTVTb+zDBkBELeq+e
f//q+VP06vmT44fPjh/+dPzo0fHDHy0tZ+EujoPiwpfffvbn1x+jP55+8/LxF+V4WcT/+sMnv/z8
eTkQMmgh0Ysvn/z27MmLrz79/bvHJfBtgUdF+JBGRKJb5Agd8Ah0M4ZxJScjcb4VwxBTZwUOgXYJ
6Z4KHeCtOWZluA5xjXdXQPEoA16f3XdkHYRipmgJ5xth5AD3OGcdLkoNcEPzKlh4OIuDcuZiVsQd
YHxYxruLY8e1vVkCVTMLSsf23ZA4Yu4zHCsckJgopOf4lJAS7e5R6th1j/qCSz5R6B5FHUxLTTKk
IyeQFot2aQR+mZfpDK52bLN3F3U4K9N6hxy6SEgIzEqEHxLmmPE6nikclZEc4ogVDX4Tq7BMyMFc
+EVcTyrwdEAYR70xkbJszW0B+hacfgNDvSp1+x6bRy5SKDoto3kTc15E7vBpN8RRUoYd0DgsYj+Q
UwhRjPa5KoPvcTdD9Dv4Accr3X2XEsfdpxeCOzRwRFoEiJ6ZiRJfXifcid/BnE0wMVUGSrpTqSMa
/13ZZhTqtuXwrmy3vW3YxMqSZ/dEsV6F+w+W6B08i/cJZMXyFvWuQr+r0N5bX6FX5fLF1+VFKYYq
rRsS22ubzjta2XhPKGMDNWfkpjS9t4QNaNyHQb3OHDpJfhBLQnjUmQwMHFwgsFmDBFcfURUOQpxA
317zNJFApqQDiRIu4bxohktpazz0/sqeNhv6HGIrh8Rqj4/t8Loezo4bORkjVWDOtBmjdU3grMzW
r6REQbfXYVbTQp2ZW82IZoqiwy1XWZvYnMvB5LlqMJhbEzobBP0QWLkJx37NGs47mJGxtrv1UeYW
44WLdJEM8ZikPtJ6L/uoZpyUxcqSIloPGwz67HiK1QrcWprsG3A7i5OK7Oor2GXeexMvZRG88BJQ
O5mOLC4mJ4vRUdtrNdYaHvJx0vYmcFSGxygBr0vdTGIWwH2Tr4QN+1OT2WT5wputTDE3CWpw+2Ht
vqSwUwcSIdUOlqENDTOVhgCLNScr/1oDzHpRCpRUo7NJsb4BwfCvSQF2dF1LJhPiq6KzCyPadvY1
LaV8pogYhOMjNGIzcYDB/TpUQZ8xlXDjYSqCfoHrOW1tM+UW5zTpipdiBmfHMUtCnJZbnaJZJlu4
KUi5DOatIB7oViq7Ue78qpiUvyBVimH8P1NF7ydwBbE+1h7w4XZYYKQzpe1xoUIOVSgJqd8X0DiY
2gHRAle8MA1BBXfU5r8gh/q/zTlLw6Q1nCTVAQ2QoLAfqVAQsg9lyUTfKcRq6d5lSbKUkImogrgy
sWKPyCFhQ10Dm3pv91AIoW6qSVoGDO5k/LnvaQaNAt3kFPPNqWT53mtz4J/ufGwyg1JuHTYNTWb/
XMS8PVjsqna9WZ7tvUVF9MSizapnWQHMCltBK0371xThnFutrVhLGq81MuHAi8saw2DeECVwkYT0
H9j/qPCZ/eChN9QhP4DaiuD7hSYGYQNRfck2HkgXSDs4gsbJDtpg0qSsadPWSVst26wvuNPN+Z4w
tpbsLP4+p7Hz5sxl5+TiRRo7tbBjazu20tTg2ZMpCkOT7CBjHGO+lBU/ZvHRfXD0Dnw2mDElTTDB
pyqBoYcemDyA5LcczdKtvwAAAP//AwBQSwMEFAAGAAgAAAAhANu+RKMjAgAA8QQAABgAAAB4bC93
b3Jrc2hlZXRzL3NoZWV0MS54bWyUlF1vmzAUhu8n7T9YvlqlNgby0RYRqjRZtVxsmval3RpzACuA
me0kzb/fMQySrJuU3tk+h+d9z4eIHp6rkuxAG6nqOfVHHiVQC5XKOp/T79+ebu4oMZbXKS9VDXN6
AEMf4rdvor3SG1MAWIKE2sxpYW0TMmZEARU3I9VAjZFM6YpbvOqcmUYDT9uPqpIFnjdjFZc17Qih
voShskwKWCmxraC2HURDyS36N4VsTE+rxCW4iuvNtrkRqmoQkchS2kMLpaQS4TqvleZJiXU/+xMu
enZ7eYGvpNDKqMyOEMc6oy9rvmf3DElxlEqswLWdaMjmdOGHyxllcdT254eEvTk5E8uTr1CCsJDi
mChx7U+U2rjENT55SDRtgiNyYeUOllCWCHYT/NVp3DkBNiicnnu1p3ZgnzVJIePb0n5R+w8g88Ki
7GQ0wRa4ToTpYQVG4AhQejQefK+45XGk1Z7gNNGmabjbDT8c/+fDOBIudYG5iDJYxS72IrZDa+JP
7PE05p/HlqexYIgxdDDYCF5hI2gNjAdQa+6xez3i29dl93o0dCaKjbq4dsx1tVuN4lm8/rR6//Od
H/rX3SkIg+vx1VXEMtcbPlg7k5u+Qm56IuPgQc8+FnjGnr2Cjbn/LGUx7UWSvwrotrHbm4bn8JHr
XNaGlJC1u3VLie7Wzxvh2arGbdwtFpwoa1XV3wr8tQBukttGkill+4vb+OFnFf8GAAD//wMAUEsD
BBQABgAIAAAAIQAFPNuqogAAANMAAAAUAAAAeGwvc2hhcmVkU3RyaW5ncy54bWxcjkEKwjAQRfeC
dwizt6kKIpKkC8ET6AFiO9pAM6mZqejtjYgILt/7PPimecRB3TFzSGRhWdWgkNrUBbpaOB0Piy0o
Fk+dHxKhhScyNG4+M8yiSktsoRcZd1pz22P0XKURqSyXlKOXgvmqeczoO+4RJQ56VdcbHX0gUG2a
SCysQU0UbhPuv+wMB2fEeaPFGf2Gjzj/i/YndDnlXgAAAP//AwBQSwMEFAAGAAgAAAAhAK4Dmc1/
AQAAGQMAABAACAFkb2NQcm9wcy9hcHAueG1sIKIEASigAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAnJJPT8MwDMXvSHyHKneWbkMITWkQ2kAcQEzaH84hdddoWVLFptr49KStxjo4IHGz/Z5e
f3Us7vY7m9QQ0HiXseEgZQk47XPjNhlbLR+vblmCpFyurHeQsQMgu5OXF2IefAWBDGASIxxmrCSq
JpyjLmGncBBlF5XCh52i2IYN90VhNMy8/tiBIz5K0xsOewKXQ35VfQeyLnFS039Dc68bPlwvD1UE
luK+qqzRiuJfyhejg0dfUPKw12AF74si0i1AfwRDB5kK3m/FQisL0xgsC2URBD8NxBOoZmlzZQJK
UdOkBk0+JGg+49pGLHlXCA1OxmoVjHIUsRpb17S1rZCCfPNhiyUAoeDR0A3bsu/t1+ZajlpDLM6N
TUAHEoVzxKUhC/hazFWgv4hbho63w1k0fMM+3zdpK4370hnEj88+G7fFVbX0M0VwXOv5UCxKFSCP
L3HUTwPxFDcabBMyLZXbQH70/BaaI1h3ly6H14N0nMb37c0EP920/AIAAP//AwBQSwMEFAAGAAgA
AAAhAFRXAOaeAAAA1wAAABAAAAB4bC9jYWxjQ2hhaW4ueG1sbI5BCsIwEEX3gncIs7epokUkaRHB
E+gBQjo2gWRSMkH09saFLsTNh/8+PL4aHjGIO2b2iTSsmxYEkk2jp0nD9XJe7UFwMTSakAg1PJFh
6JcLZU2wJ2c8iWog1uBKmQ9SsnUYDTdpRqrLLeVoSq15kjxnNCM7xBKD3LRtJ2MVQK+syBqOOxC+
fgAR3ik/uPuPt79Yfi/1LwAAAP//AwBQSwMEFAAGAAgAAAAhAN27hApOAQAAcwIAABEACAFkb2NQ
cm9wcy9jb3JlLnhtbCCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIySUU+DMBSF
3038D6TvUGBhagMsUbMH4xITMRrfmvZua0YLaauM/XoLbIjZHnxsz7lfz7lputjL0vsGbUSlMhQF
IfJAsYoLtcnQW7H0b5FnLFWclpWCDLVg0CK/vkpZTVil4UVXNWgrwHiOpAxhdYa21tYEY8O2IKkJ
nEM5cV1pSa076g2uKdvRDeA4DOdYgqWcWoo7oF+PRHREcjYi6y9d9gDOMJQgQVmDoyDCv14LWpqL
A70ycUph29p1OsadsjkbxNG9N2I0Nk0TNLM+hssf4Y/V82tf1Req2xUDlKecEaaB2krnT6APrVe0
5rAT0Ah2SPFE7TZZUmNXbulrAfy+vTRwbnIv9IWGZ4B7LiIZCp2U99nDY7FEeRxGiR/O/Tgu4piE
tyS5++wy/JnvIg8X8pjkP8RZ4XBhQpKbCfEEyFN89k3yHwAAAP//AwBQSwECLQAUAAYACAAAACEA
pATP6XMBAACYBQAAEwAAAAAAAAAAAAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQA
BgAIAAAAIQC1VTAj9QAAAEwCAAALAAAAAAAAAAAAAAAAAKwDAABfcmVscy8ucmVsc1BLAQItABQA
BgAIAAAAIQD+aepXCgEAAMwDAAAaAAAAAAAAAAAAAAAAANIGAAB4bC9fcmVscy93b3JrYm9vay54
bWwucmVsc1BLAQItABQABgAIAAAAIQADPnBjVQEAAEECAAAPAAAAAAAAAAAAAAAAABwJAAB4bC93
b3JrYm9vay54bWxQSwECLQAUAAYACAAAACEAbNIv01MCAAAABQAADQAAAAAAAAAAAAAAAACeCgAA
eGwvc3R5bGVzLnhtbFBLAQItABQABgAIAAAAIQD76F1HYAEAAHUCAAAYAAAAAAAAAAAAAAAAABwN
AAB4bC93b3Jrc2hlZXRzL3NoZWV0Mi54bWxQSwECLQAUAAYACAAAACEA+2KlbZQGAACnGwAAEwAA
AAAAAAAAAAAAAACyDgAAeGwvdGhlbWUvdGhlbWUxLnhtbFBLAQItABQABgAIAAAAIQDbvkSjIwIA
APEEAAAYAAAAAAAAAAAAAAAAAHcVAAB4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWxQSwECLQAUAAYA
CAAAACEABTzbqqIAAADTAAAAFAAAAAAAAAAAAAAAAADQFwAAeGwvc2hhcmVkU3RyaW5ncy54bWxQ
SwECLQAUAAYACAAAACEArgOZzX8BAAAZAwAAEAAAAAAAAAAAAAAAAACkGAAAZG9jUHJvcHMvYXBw
LnhtbFBLAQItABQABgAIAAAAIQBUVwDmngAAANcAAAAQAAAAAAAAAAAAAAAAAFkbAAB4bC9jYWxj
Q2hhaW4ueG1sUEsBAi0AFAAGAAgAAAAhAN27hApOAQAAcwIAABEAAAAAAAAAAAAAAAAAJRwAAGRv
Y1Byb3BzL2NvcmUueG1sUEsFBgAAAAAMAAwABAMAAKoeAAAAAA==