Bug 1519060 - Places maintenance doesn't properly replace malformed databases. r=Standard8, a=RyanVM
authorMarco Bonardo <mbonardo@mozilla.com>
Fri, 11 Jan 2019 11:58:24 +0000
changeset 509459 1ee1bd77fa1c6fec07e4eda0d2fd52cf93ab9ab7
parent 509458 25ba8700fe9477fc7091067e79a2b281aeb0aa29
child 509460 7448d41d4fdc5ae2ea6008ee1d71b83421a82832
push id1905
push userffxbld-merge
push dateMon, 21 Jan 2019 12:33:13 +0000
treeherdermozilla-release@c2fca1944d8c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersStandard8, RyanVM
bugs1519060
milestone65.0
Bug 1519060 - Places maintenance doesn't properly replace malformed databases. r=Standard8, a=RyanVM Differential Revision: https://phabricator.services.mozilla.com/D16199
toolkit/components/contentprefs/ContentPrefService2.js
toolkit/components/places/PlacesDBUtils.jsm
toolkit/components/places/tests/maintenance/corruptPayload.sqlite
toolkit/components/places/tests/maintenance/test_integrity_replacement.js
toolkit/components/places/tests/maintenance/xpcshell.ini
toolkit/components/places/tests/migration/places_v43.sqlite
toolkit/components/places/tests/unit/missingBuiltIn.sqlite
toolkit/modules/Sqlite.jsm
toolkit/modules/tests/xpcshell/test_sqlite.js
--- a/toolkit/components/contentprefs/ContentPrefService2.js
+++ b/toolkit/components/contentprefs/ContentPrefService2.js
@@ -1046,17 +1046,17 @@ ContentPrefService2.prototype = {
       Services.console.logStringMessage("ContentPrefService2: " + aMessage);
     }
   },
 
   async _getConnection(aAttemptNum = 0) {
     let path = OS.Path.join(OS.Constants.Path.profileDir, "content-prefs.sqlite");
     let conn;
     let resetAndRetry = async e => {
-      if (e.status != Cr.NS_ERROR_FILE_CORRUPTED) {
+      if (e.result != Cr.NS_ERROR_FILE_CORRUPTED) {
         throw e;
       }
 
       if (aAttemptNum >= this.MAX_ATTEMPTS) {
         if (conn) {
           await conn.close();
         }
         this.log("Establishing connection failed too many times. Giving up.");
--- a/toolkit/components/places/PlacesDBUtils.jsm
+++ b/toolkit/components/places/PlacesDBUtils.jsm
@@ -109,17 +109,17 @@ var PlacesDBUtils = {
     let logs = [];
 
     async function check(dbName) {
       try {
         await integrity(dbName);
         logs.push(`The ${dbName} database is sane`);
       } catch (ex) {
         PlacesDBUtils.clearPendingTasks();
-        if (ex.status == Cr.NS_ERROR_FILE_CORRUPTED) {
+        if (ex.result == Cr.NS_ERROR_FILE_CORRUPTED) {
           logs.push(`The ${dbName} database is corrupt`);
           Services.prefs.setCharPref("places.database.replaceDatabaseOnStartup", dbName);
           throw new Error(`Unable to fix corruption, ${dbName} will be replaced on next startup`);
         }
         throw new Error(`Unable to check ${dbName} integrity: ${ex}`);
       }
     }
 
@@ -1171,37 +1171,35 @@ async function integrity(dbName) {
       row = r;
       cancel();
     });
     return row.getResultByIndex(0) === "ok";
   }
 
   // Create a new connection for this check, so we can operate independently
   // from a broken Places service.
-  // openConnection returns an exception with .status == Cr.NS_ERROR_FILE_CORRUPTED,
+  // openConnection returns an exception with .result == Cr.NS_ERROR_FILE_CORRUPTED,
   // we should do the same everywhere we want maintenance to try replacing the
   // database on next startup.
   let path = OS.Path.join(OS.Constants.Path.profileDir, dbName);
   let db = await Sqlite.openConnection({ path });
   try {
     if (await check(db))
       return;
 
     // We stopped due to an integrity corruption, try to fix it if possible.
     // First, try to reindex, this often fixes simple indices problems.
     try {
       await db.execute("REINDEX");
     } catch (ex) {
-      let error = new Error("Impossible to reindex database");
-      error.status = Cr.NS_ERROR_FILE_CORRUPTED;
-      throw error;
+      throw new Components.Exception("Impossible to reindex database",
+                                     Cr.NS_ERROR_FILE_CORRUPTED);
     }
 
     // Check again.
     if (!await check(db)) {
-      let error = new Error("The database is still corrupt");
-      error.status = Cr.NS_ERROR_FILE_CORRUPTED;
-      throw error;
+      throw new Components.Exception("The database is still corrupt",
+                                     Cr.NS_ERROR_FILE_CORRUPTED);
     }
   } finally {
     await db.close();
   }
 }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..16717bda80052f35294ab4040ab7c02127f98501
GIT binary patch
literal 1146880
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
zaieMW^)r9W(R_b@zV;T|@^~dzzM3mPmM;&?pX2odm$SuUuJG9UZM`#lTYKTf9Y>?t
zPF_8n9Vnh389jD%-^NvsUwX|Odz(5Ek3`#BpDfzmY=3FI`lf+$wsJXFiMs4Mbmq)J
z{?fj4PaNBsNc`wee5CtVfA*P7w8S-wop$X-Sh>qxS8FhP-8aQ=<y?7FwNxrp7VJ-@
zSQ;G6M$@037#}ZQm>52CVC2lkRX4XDIe4+LBXKmbXW`p9o_jENHCHH&<;qL$dO0^%
zDnzXYqk%U~?S7)?_?d~FJFaYM*tqJ)fAI28Ur2W(4kvcqIdcE_aDBj~2Cn79<NeXN
z`?u~tbAJEGh3wP&hoW(R>#I+{;~lAv#OcK2ckWhyp)|aCW-pc;d$LfyJe)6X9xfH)
z@y{LIbatwEt#bHC<?O~)KmDy6zcbR%ktqFj-ZD!*`HR19o^N~Gv0Z%wyZZO+898(K
z+{RU({@j)4D#?yS`0KsWN>Aqos+GA}cW&LhHQV#;CVkguKX^8G^7O$ghbu>pZojs1
z)n6SQ+u9y|7-YiVPlP`UpAG*u{PXZ*Q2+n{000000000000000000000000000000
z000000I#l<nWjW@GLvjxlV}_oX?yv_=EhZxO^IY&l<ugN-TY)r<BD{xSxa+!y=dLa
zRjHX)4a;gpFHCecu54&ZwA9LKMbEdrt+68+b!>?`)=J*>*$=kIvp)AKpEUpg00000
z0000000000000000000000000000000KCdt<K($lc@Y2r00000000000000000000
z0000000000000000PrenkN!1<w<N-!gx?4s34cF~g||l`00000000000000000000
z0000000000000000002|ce$@Aljvz^PK*_@#awmsXlW{6C}cO6%EO79t1_9ygHhdR
zzP~?T-8@hlP27BKV<xdHDjUpQ%@s;xx$?p;uSsVTJEH3T@!@*ug4*s>Ch=HYTPO{0
zF6M_XR|}I1Tin-BUru&#uvDxptm{l>5)a4AnP1o%okLR?OoTrUFNdEGFNSxAXQB`Q
z000000000000000000000000000000000000092RtxfeL#|qhEuDW@&G?gzDvYSig
z;il!Ohg;^w%To^~NAvyt`Re9@(rD)1)UM=U?rN@38q1aE_iMZ-wIkU-K3p%DSCM{A
z>ak>hp)|a?m><4eElkd@OvQ`H4i1)zmHEXD?a}(~n_8O)p9wF8k+3JErav|Pcc%|b
zH(dY4>sPPudiKws{phpLJo}bsGtd0)GynLR{4+bI{%Y!9Pu-k46?Fmt0000000000
z0000000000000000000000000_*-M=y5)(MWJ~hFL?V+}-_o+S>EOiP_{XF7o$O6C
z4vn<E{9^NLo|~xstaNW*<a_Rm`z2d8&GcJy&s@I?`AWW;8(gCIwz&6>duzR$ADHRA
z`d05Hy7k1}dhc1DNJbsk&2($X%ye6#Q{1QT&0V#*l8@9oB|AG)dkcl`eWlXKXtq33
zxxMf3laohEJ4&aXJb&y$YTMd+=QT5(S9La=%MQ=<d4Kn8e(>1gokx3$$48zx^h9ds
zn)=qvoLq8c=Yi6-Vxg2ByrbX5;lr2Tdc3!P=i%a0sqL%ln=*5D$rYVP@|9|-JXvr3
z-rci#dF$Y%zHNPz+eZr%sZE{rJxR>;YG|xCd(WBK6MFL0iP3Avj_f>KeQHnB?v?dP
z9-e8wyy0waAXlt*&z;uItsk%FXA*~YA3HaB?(EZ7298!5_N=J)TtCyZEp@U~sdmr5
z+Alm%pY-PT51k*#jh^q#9T_+^KGd+gqrM~cuFWm2sl&Ny_tE0jQsL@M*LQ#ErP=(%
zfnA4opWAz)u<O9~H!rX6|Av{KElrs-wcl6oK3V^1^IE6pUwUpf&rKXWb@}N%=TDt1
z?%Us9@4RQGb8}PUfqZ3Pyi(~tRsY@e?ozS)=-K_Z4{~W}{P3lb{`|44<>AMc)d$%$
zGe}cYI=+1-OXKD4fpWHTIaj&8`{mrOi<?HTTs!mB`HOqo>fLwDbk8)UX6HVat5kF4
z?sKJ5;f^8p?z%FRKY#ARXz@_*;nw;PkJpDtHa0cPoP76z*`JN?K9#FpE0srXA7|v`
z<i)+kL)*_C-Zs_nmX`Wu=$#oT-84JSzVYGibLH&7NUnVQ2nR;{ckMkgcJ=Imi<O4A
zG}rHe*|SMC9m<z;L#2ti4UK=5{`Mg@9Xx)b{Pe}4t$TJ~KGYQ7u5%~T($LUw`w(Yy
zm1uJZ?%dbvzNw*!1LggbyNic=Gxgj4-r3teJzDC|7jm_>Q`cwu{J<a9OKUHJzJ~3M
z3*H~ehSYd*D5@U3z1K`}z1P-sz1N!Aw@yQK_F0+j66JAO-;CZ=tw+n;Jk{tL_h-us
z`a}=QOmVGGdTT?iQ}gVrreQQ!9AD5QdLrYp*;yJNO~yT%o7-o5ENC6Q0m`LPb+&a&
zd;Ge8?$!Nk0{{R300000000000000000000000000000000000ueR1WdG1wS1ONa4
z00000000000000000000000000000000000yvo|6f9ddYB78mkN%(AZ0000000000
z000000000000000000000000000000|BG9mZcMy3naE9K2M0^VZEM<7jfr)0@#>a_
z#zbebeRQzc*qm%ktW37|Po-O<e(CTZ65$)+tKpBL0{{R300000000000000000000
z000000000000000_-@ja>P(If78{nOUYpEKWCsUJ#ck=f)VkRq)tFk@(m&N6HBE-E
zCZhiV00000000000000000000000000000000000006+>5-XCa^~urFRNqK$@>;1p
zSV^}>rH$d~MEGL(RQS2@p6Cz&00000000000000000000000000000000000006#&
z9&Ah{j-DxG2Xd9u<>72GKb0$QnLB!7JXfB4D4j|iU$V)eQeiMxUYANG9viE**^-+W
zD2xy04wXxz`?3Qg<6~V7sl<-@09&3M&6cbCN~Mt~AL&X)6{Ds8d?B}`f2OQ*wp6ON
zMk{L!BZ=_E@UO#5;eU$`0RR910000000000000000000000000000000002sJLxs4
z$C6`(>_D!vB{wlp7$3|XDwjt0Wd}ya$5LIX9WA4!{(K>~rN2}f8O@eQDrZZj>O-lc
z$uqT1r_00HVty)D-ZFRe#CWbe+4ykk_|i=dl?sEoa{8Xsj+r)Fo{Yw>?wgsTp*>#N
zbFcEw000000000000000000000000000000000000002MtE@fxw|shaBK&dqmGFb1
z8qS4Hp?&%b)4w+T()4rF=cczul>h($00000000000000000000000000000000000
ze@orJyfu+bb~GnjGMRf)J?TW_&`8_MFE-ES_qX4w?^>k(jmzTt_07p-RNuI_P}o;0
zjf`f?Bb9XOj<MQqjkR`etoL`%<`1>T^=oQlt!+G)9iAKGR-5}<ZjG^Kkue@=j_V(&
zjj^WjK<QesP|6N2Hc->8fmY8A^xoaG`T9&;zpggW>c%7aO0`s;oE_#?v-=xw4bz$4
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
z+LRqXyKQ+~u<Ov7GXwcc`_4UaY-dwkuygCkw&R7Vk>bIV7godto2GU@(R2LF#LgX8
zHZ`_J8=nauN`$`%UkJY){-5wKq5uE@00000000000000000000000000000000000
z0RAVnJe|xW*CZN;M%rF}u{l!<J8I$0PqsAH!uEQ&Ze_X_E~|wvOmwDdVM8r^zU^%d
z%hD~GmRj_#&wj8q8aosIC=tFD{#*F-@TcL6Q2+n{0000000000000000000000000
z00000000000N-sIQ^{nyF-{v&=~PRyA)RVYX5u8BN;S8%Molu|=M&*C!xzIV;gjLx
zQ2+n{000000000000000000000000000000000000RQt_mdYd(jYA`CFTdEFnG0@y
zvZe7>ux@2~E_h+0Gc^}H-}bhKwp6C27QE}TA8d^Vye}M2gl~ku2ww^RDg1u;-SFw~
ziSVo8UxxoHd?fsn@T1{}!+XQK!}o<}!+0o$;qZ6DrEoUt1ONa4000000000000000
z00000000000000000000cgm!bEy=a(YT26mYT4?0YguPkEnBs=maSY<%T}zeWy@FA
zvbGhqthJ+-wJfh?&F!_UX<04HwAHf4)>@Wssb#6=OgfQFHr!LsI_p_eJ<HUy#(I{n
zXQ_JD&=_Sc4Xx3_?+b?#;hW*VhCd5m3V#${3BMU$4*w?nO8DpDXTpcVKMo%V?+fn^
z?+jC+97e)mczZY(PDY&o00000000000000000000000000000000000003ZtOgh<;
zyyw0sYfj#CZ&Ny%Om?Qa>UqQ3T5ac=T5ad*T4_^ec|C7zujlDy^*q&9&l_56y_#BT
zy_%Y9QL3XBrB>A1G&D5T!iJTZbW7A_T`kMpQ_C7VYgsx|%TkTCtRdZ)Zi$A8(x_WH
z-Q3*L8m<1m>F-a3KM!9BzZ3p#_@(gS@T1|q;rl{0<idq;IP4A^!hNA_`dia~I{o|8
zzcKys>7SeavFU#hbpikY00000000000000000000000000000000000;BVCObTX4%
zn`j&wX?yv_=5@7j&1`sIEnGbt-dhVhXTz>qxT+q$zk6*hTsa%Asf8=*;d^(lu7%5M
z;mtFNm9?;~9&Z28idxuO3*Y^vmpW=;OD%l<rRSE{!sgkqy%sjjhRbSUW;SfAg^jae
zYb{LAhAp))H5)d!rxTgv><QhoAnIHeMfEkj{GKzns-o35+=^a!;7saP6b;!lFZzK$
z%q)l+Z$(qrpG&t!`+wi`&m_WMhA)O!!Y9MW!_S9*5?%~9LkQ)N3m3!j@V%iYye@Qw
z*6IIm`oBzne)@N&KQaBwQ6~TZ000000000000000000000000000000000000A4N2
zQZv6@|MH8?>*fdd%@6LKAKWuP=(-iWzkBWcV9l-Iy}MW63f^<3b1t~K_2Vn&f)^e*
zvtllI_m^Jkm<yhN>AB_egZBBsviU*V{GfGy&@w-0o*y*L1yk3b%ghfN=LhNeL27=`
z(3Z-y%m%H|rrtMwI1&CV{C@ak_~r0Z;RE6MFcF5sg>W!z4-bb`AvyhDrvG62Q`7(V
z^oOT^Wcr2asp<Um#i$bi00000000000000000000000000000000000006gJky@Xe
zIDGi>TaWkl?>t<5YE4`)UL497a)W)b#<-wbDi!*(<yt|iR*)U8^vy`u3ieG6O&loi
zpWIzM+|-d;-%>7>s<SQP2IZ}Tm-@E#O>Q48OstLzMoazCB=rWFT0yQjKHH-qE*LpE
zd2w&?(DrkOw@tOi1($QXE^ZpVa_!7h=Pxdc3x=PZJW|?GI`!oFV;8#Og4{%QaIjRY
zjd9Psg5J1b-MoTralw7_3VPy#d+P-UPhEa`&-qg)i~E+x1($}#4__MT&mX&59&V2d
z&JW~9&-dnz44fJtS`imKdFsUIwPQzi9<DyMr!y`%abVY>-RJh6DC|10y(2C-wENh(
z$#Z9)zA|vMvNA3>c<k`bqdmprBTpQ9Vr^V-V6=bN-XmjI&mOo~X^9K=?z%FRKY#AR
zXz@^QTU@Z|;PDgXr!Nj|-Lw00b8B?*(&0ZP!Z*TSgs(&g00000000000000000000
z0000000000000000002+-71q#CX#E?wQO}N%G#5S4UJLOl5UObpL><p2LJ#700000
z000000000000000000000000000000ud>$Y-}3OjMEFMd^YG>Hx$sK(O!$ApuZCX=
z|1A8|@MGZvQ6&HX000000000000000000000000000000000000Q?Wvlujm-_oSBB
z@~*~Z^*q&H%hxux*7H<bEnm~vT+dT2wS0ABrk<yoYI$e6v7V>WwR~kms+O;4XlP6)
ITUs*zKeA%8^8f$<
new file mode 100644
--- /dev/null
+++ b/toolkit/components/places/tests/maintenance/test_integrity_replacement.js
@@ -0,0 +1,13 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that integrity check will replace a corrupt database.
+
+add_task(async function() {
+  await setupPlacesDatabase("corruptPayload.sqlite");
+  await Assert.rejects(PlacesDBUtils.checkIntegrity(),
+                       /will be replaced on next startup/,
+                       "Should reject on corruption");
+  Assert.equal(Services.prefs.getCharPref("places.database.replaceDatabaseOnStartup"),
+               DB_FILENAME);
+});
--- a/toolkit/components/places/tests/maintenance/xpcshell.ini
+++ b/toolkit/components/places/tests/maintenance/xpcshell.ini
@@ -1,17 +1,19 @@
 [DEFAULT]
 head = head.js
 firefox-appdir = browser
 support-files =
   corruptDB.sqlite
+  corruptPayload.sqlite
 
 [test_corrupt_favicons.js]
 [test_corrupt_favicons_schema.js]
 [test_corrupt_places_schema.js]
 [test_corrupt_telemetry.js]
 [test_favicons_replaceOnStartup.js]
 [test_favicons_replaceOnStartup_clone.js]
+[test_integrity_replacement.js]
 [test_places_replaceOnStartup.js]
 [test_places_replaceOnStartup_clone.js]
 [test_preventive_maintenance.js]
 [test_preventive_maintenance_checkAndFixDatabase.js]
 [test_preventive_maintenance_runTasks.js]
index 8ce5766f15cb40fbc441b2622880d4f7f9d38578..9210f215fa8df4475513add0dfe924465325da91
GIT binary patch
literal 1146880
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
z<CR?bYOefPzC190j@J)d&K8Tg!ei^V_0H^V?S&V29F1l>dG&C1pm=^{^w`mT8&^Gk
z={0ZcZR$uo5^ZmNvS@p={iX5hn+D3+%H>=o>ay$5nKJ|VOZ(0}acpNI@uNTSk?vpp
z*=I7*64xwt+O-#9<t}$!t-<Vd-xR-<bLCCdQmIf`us@YzX>c$bO@De~e7tyJV))2`
zkuw`t-Q0TQ;Kjy{#L>i_g>UD0?!nyET%k0UD=)e0<=j}Q5VabN2HrHa`-z_8XC`*;
zxU#8X<EkJ3!OK5=A>ENUoY-~e$o=EP^#PX}xRwu(_ebOI-@5<I`TZjovQO_HipKq|
zuRi^bcceNJrxTCgxm*2(((vY)y;ySW$wKw=aK5;CxKxP8KX-J~*{R~S%HboGvm00a
z^tW#O&PYQ?qV(5!%PjfiFaElDzU^(tcJ&SH>ff_x<jmo78&`e$b61|LBs&t}ulGtT
zJ)Ik<R_12ixpni_Y|pow^j)9*;Mv^C(+95{t{geK{o2M=e|2<hYkTxzkO_Z35&kTE
zHvHT0&%=*J0RR9100000000000000000000000000000000000yt-Cqni9>)OtN`R
zqH$=X?d2Dn8&@?pC6aMbx}#Qh^OG%&E7G-QEzRxqqID}*rDj?+EUOj0Fwxn#vY{!_
zQY)(!J>T}W#*Spvu_fwQD|y#vKiD46`rNC0)&Kwi0000000000000000000000000
z0000000000@G5JKljmOLMF0Q*00000000000000000000000000000000000z^kl1
z`qvcRk_dkiej|J&{QWQ%-X4Vj00000000000000000000000000000000000008jc
z<-Vp&qNkxbF;>VHbJfkGrKx<OklkD=4<~M}%48A`Ms=h4{{DP*^FV1dar3o}nZ&NB
zY%q5<S166;$_u-^CY?#_h^qU?hwG&aYP(aJ#A9)7p)|a?m><4eEle(KabH7yIoZL%
zQn9kIt}~fQJRC1)eqn2L4ozV&5&k&59DY8$7~UP8i9!GX00000000000000000000
z0000000000000000QeiXHr10HD`bng>gLhXRK8HiZZ4IFo0g{@ZkZP^Pd%6%&G+}`
ztD6T(qnUeCyOM*stGPmHELWc2ukoJLj%5G%aJ^t&Mfx?V$CCYp((vYDe)w{=Fgd?6
z6)z$?I9MuH<`*}#N9((9YHcEXCcG3z!k&<t{?zo}ojx$#aQzprU%kHT**|~wqt8C`
z>|37AJoCHH{Nrcx&+M4`tEqoIb#v-e)Cm9p000000000000000000000000000000
z0002sZ;hSnmM2=0Ey)KHiA-jFOUv4(gA;q>ACKO5vNzE<G}89+i_NonZld<H(!G6=
z@3}ATmu%TI({If^bNw#lEBR_}aEadA;@&&%t@UnxV5ax#TfLX)))RN@y=QqM8FgGY
z)2$&h(`|`Pai6|7ch%-fK2q<L?CebKEfl)<l}aO{+44x`_P)bUP97=kD4lxp{ILtE
zZENeD*UWTY)!A?^J3Q0p{oS+q!DEMa9_=X}A9>=?6RDkR>RU5&a><pQ2TIq9g;I9#
zj(!t|4_|)k@!tNOhl@|8wy&;l%FNj%S9Bi9SE{A*WWDu!chBbKt%H~Pw)IVJA1zFz
zHg(qbBr(&gp|RfVJ!fW5=*d$jMz0+^vh#5DsXa}*SJo$ac&7RChO@bWT(R0ccUm{M
ze!QNaNgUdJ?A+wJvrk_cI9h4gv!dQ}{Y=lc)X7q%+CBejzwkhP(wo~qbbcT=dcHSz
zWZ=~JP{Zzy`i|7QHn+5<4(F=fM~hcWg{w1N-~FYRX7dvVb{*P%Ztsc0t^?cOyu7~u
z8)ka8G-b}zeqX)&Wc{bjYn`5d>ABfFH*xUP<)`<YKXtOWZ-0Be^PZW`%}tF5@|A({
zN~QZ${dd#5OU3S^XZPPe$fcq2!<R<-^T)21haX#3A7s<aAWco_`1YABjhDLz%Gt{0
zT;=xemvg%=ZW_IE?aWi>FYaxtci%D7J=2t$o%>v_Qq7gS&y`ArJBHZ1>&j66{J9IG
z#Y4S^TkAtSULPXa*wip{^4$k!e>T4RRIYlhR35o~oRO207xxwqZ9jK-+f>6_TI!df
zcV?h;)9g6=#)rGlm9qmQx$^BJ92o82wfD%_)w2gKRvO;YT)ziq&nDG$C|}MEl_usk
zH2zik+lSb6@c4=H(-()f?%93$P*Z%n&Yet4Lqo&uL!8Z3qRkz+b6>0briLaCl=n~W
zE*|d9)NlKHXK(xTXsJJ6$kp0TU7zXm1AkaAt-T2P8n!nscz+}tQsc#;sCw}BUNgn@
zUR%@kUTbFGIt|s?XJxial*eU#GkR0C9xZe8RHJL$pDi!w6Fn?5#kD@^tqrwK&9kqX
zhS6Mcd_j-siHyr;XK8#i8TV*zZlCS3pmp>HD3?mr+14%X@$3G%SNE?C0000000000
z00000000000000000000000000002I+FIk}xmS4+0000000000000000000000000
z00000000000002+Dr=AarNhgK@b&N~;j_^J000000000000000000000000000000
z000000002|FK&6dG4a}DA~%s894r;Lt!Ym+Cf3cxt6Lfx6P?NS(ZOP4bFwk9GTGig
zm2QptrNe(ngl~kehChl9000000000000000000000000000000000000002syGc{3
zGdVg~Y*?0hZ8A5J9ULqbx24-s>t=&gV`^nf|5SU_G#S2{i2erv000000000000000
z00000000000000000000004hWtVpKTCr3+DeIvQaYo+pFCEXsCHioAY;fvu@;pf78
zqC)@x000000000000000000000000000000000000Qe4iurZZ5dZv&a$W>04hqJ}}
zRIa>b?&yi}TzT@LbSiOt$tH(Ng~42TT`HA$Y^>I1OKxJIFg}<&R4$F~%MOf;k99Sq
z5<BVxY<Y4tTdwXal}4g`q$?R!jF$TIh1{0@nX<~+QmNV+t*kMOB*GWNzYZ^j|1CNM
z00000000000000000000000000000000000004mRq}QY#OO6$?1G&nU+{8d(d@y&Y
zTpHb%9T*uOOLe7ow2YSe^M%}&{!(dVG+Q32oGq2A52cPK&(u1dE)Qpm`Kera%iPfu
z<GJ!=<HM=rOE)=GDh%ez>3dQ;X4-6dG8((OZ)T2$_IPE_y~;ZS000000000000000
z0000000000000000000000025vi9iT^6Axy@W<g-!ViXOI2SgB_USK7|Jw9R)6Y$x
zo8BH(0ssI20000000000000000000000000000000002|Ep`9$)<iPd(VT3_WbR4z
zq!W!pBW*9g*gTux-+rsUYmxdlE{p5eHz$)(edFFjVPB~<GMX)qRMM$C#%jAY*4nwT
z-rqf&Khzr6uc?i-w((qccy5eaZSHTmHO87n#(1PTu7995#+t?hrEA4PDLc5>Kuxy>
zT0J+=dw0*~>oalvy4pai8;|5G)lzwKc9>hu?r*#`OlNxc%rNgcGn?O^o>xCN&8_-3
zq~iJqYtyW3IGY>D6|3{k{N|a&Y`&o(ZuxMn<%))rrAqZezLKxz24|aY|Ilo{CK)wt
zi6>2`Gd=0Hsq4?h|JtMLz2e#bkO==SycDY8Sa@jq>(l>g`sVbR>2=q?bp6BEr>-Bn
z-X1jo000000000000000000000000000000000000092iwQWUu{qfGx(p29_Zt_~G
zJXon*DdelUzU+9llrIkECi>=A_VsM*?s;=Zdi|xY`Na#Gj1{s2xv^5EI+(3y`^Jm;
zE91G^NKx1Bp3TeCkG%QbxI_Q!&)qKw`l884>&<(+w{>sZ+Ma&o@w>Gj%a(J+>THkg
z-92wwmVV^PZ#P3BTd9tg2J=Jt+~B;~dfL*D99(mkzR@}5vV()SI`#IprXM+aw=Tou
z`N0L-&>O9>CB5ZjZ3{2wE7ekY@@o8p^p!gb>YEu)TI;$a-of7H^p^dde~rFF<<jU(
zw{5*mf6Y$w=Xzr%{orG@Q>!hba_gvXyj<wJoUL50HSO8c-Shg!^n*JVZ+khq7iQb_
zz9F4{a97u&?P@C+D2*4Z@qk<3m|Al7p>l2@R~(p}9d-MbhV+An7jGM1>DtJ1XBKzZ
zluSRkfAJ2tU$1yEt<j^hHY5|_zlJY|KM21SJ`sK;{CxOO_($P=;qQg(p&W+8+r#Ow
zFYE|!2<yV~s4)Nl000000000000000000000000000000000000N;I<r83Dx;xD&<
zc;lv@SveboFZ|>mte6c-U;f7DJ7<IQ$A0_K<+H)g|M-(X)HWMz_~ZAUT2&8z^d~;j
z{i{FQ)S7BcmS6wne|U7=+WO(AAART-SJw~kDZTUfnwC^!%f?lIb#!cNT)1)7Z+-RY
zccklwpZ?sH=NjsVAA9AiSC`cffBIWDekWBw{P7>W{L_u~!<$==9L&@Yhd%StGp#d+
zAKi1Qqkeem`kL3Z)DIuO^qMy|*AFut@0)CIjkaLz^#73v-wa<5UkhIe|2h0&cqM#1
z{6u(97!TQSBJ2teh4$&cnto;a*QfvG^iM^N0RR910000000000000000000000000
z000000002^A8c9bwaL-az~*WtS6$PQdbl3s`}^~wo116jTw!c9JCR$xJoR8L-nnCY
z@3x+`uT4Fk94?nOXA6b=RB3ecWTAR_IA7d6Tq^W$POVODT2OoK+O^FcixsvnR=8}j
z!q&wK8#+^)T5d1wO7$*iSj`o)g|W>ox0hFnrNP1M=FEMmJqyaqxv^3qcQrS-x$)lA
zt_4-Ke0aQnbGk9rk=(qzmbTT>rgSQi?2MCDak4T_R<uUDyf*xUMEGX-diYxSO88><
zT=>24@566~PlZo}Uke`#zZ5<iel~nK{GZ{+!aoW>95n_200000000000000000000
z0000000000000000D$kjbgCt}CQdryq&-fS#Ysad)zXqqH7D1`$?7=ijFVMyvNBFq
z#L4nFX^WHAIH~n$j+3T1$;3%xoTTF<)f!E>HcTeMH^bM%*TPrA7sKbm?}gtD|1SJ`
z_&4EW;TOWsg?}1;Jp4#_fB4_S-wV%0jR61v000000000000000000000000000000
z00000;BQJM)sRfwTwBjp*R$4o)>6-!>seDh%ha>RdX}zdsm4??Ik={lcEstnWpR3M
zdo689r;;uArc=$y&Nx{WCoAJ*MVu^;leX4qDQm+(B78G^J$x;EC44b_F8p5j_u)6g
zr@|+~uZ53=UkV=$KN~(6eki;<Tn}SWV*mgE000000000000000000000000000000
z00000`0uwYl}RQVheq07ezAGYTyXP~EgiRlbt~KFf)^$_m(2ywx4o^QEtP4h1@HRo
z2h*uUa&4Tfj+4$fSrsQM<77pgERU16IBAWOmN;pSlcqSy#7SeEq~j#j8ZB_`^b3jb
zXW{q5C&Mp?p9&uc&xeUH9G(h?!jAB|&>0%0zc&4c)4wtOE7KpD{*kCL0000000000
z00000000000000000000000000002rNh?z8lT&Bj+JF4W)a8>SJNw$>f{C4H2dBoa
zjT|1j(9;?hj8C1IJiX)e<%@4U^JHgSP#vB+G<5!nt4|FbxU?)T$W3Gi2TR4veUa7k
z3woo1wet(MMFneW1>*;Mdk3c`5B3b4Z;J~q7WSRrcj#1pqNlWJRb22?e(Tn4PwhUs
zZPSTrM_h1z>)xlH-gDvf!6*BQE8~K5M>n0FDqgD`K2kZG>PW3`Ih#9q`rwtrl_N*D
zUyB=@o){l5UYHm@a$w|4CN4O6^>B8ecz$H`*wKB>alwgVc3btr))Rdr1HCPA!LeO^
z1H1b7>=`+8_*_F=uz&0RGw1h@T*yAXe<&Rn?Cw1^R6TuZQ+E99w&iibu0v<e4CF8E
zJNLw~olSAU&aETcju)mziU&_#SP>U&n%ezD&+#)8J9k{!)Yuwrd?tJ-5&j~4A^dju
zf5N|r0ssI200000000000000000000000000000000000_@C7BbTX4%lV}_oX?yv_
z=1eW@sD(E_+0s}G+w0-FmFZfztQNj7(V41+4Ylz3wzoAbOSfcNYSFts`@z;|>`eHh
zMEF+tZ{g3wpN20+0RR9100000000000000000000000000000000000e79*#C6npK
zIBiI!Q!UAcbgDU-iIa3H)!fn=HOYjZPlUe=UktB=Plk_20RR91000000000000000
z00000000000000000000{LgP$Dw9k!4vn<E{9<!vF1Y#0md0Dbx|Qj<;Dw3K)Lig<
z+uIu2Qkj-o@UG8(ur(U+zHmGdz7hT+d?oy+@cZF+!>7Y1!moyZ8UC;Ek?>E#kA@!(
z?+xz`-xr<@<DnRa!`}&)!r7=3000000000000000000000000000000000000002o
zDU(jNB-gI1Woz!MWvlP4Wu0BMY}MLYwsK7^Td}&9Eniv7+E&!E){a`%vb>fxx7V_!
zWwk8RR?8Y&YgxLbmZh3A=|nQwa8Et!tY=O2EK|=K>sh*<rRrHjW0bWtv_=cRFC0pQ
zZ-)OG{w#bc{84x%{APGL{G0GA;h%?}2_FjoID8<yFT6XvGfahY7zu;n?crQF8Fc~x
z000000000000000000000000000000000000DuKD>10dtp8KM#IeE{$P3dGZ*_rC9
z=M8IXwVi8fwVkVLrA?XT^}MmYo~M`9^Hf_sZ)mOcYHF$VYHF@Usg7EdT2X7$(9l#1
z8&+o0Em4<swJdW_Eo<zoW$8>UOEuQAhIC`PB^oA5qi*SRb8|~;wEFv|zdsTFJbWSi
zPWZRsm%@j`kB0Y#?+ewC3m3xSusduB_l36UZ%zN{^zTpq#`MRhe{TB6rvE|I2><{9
z0000000000000000000000000000000001hzfsH6$xL!>qH$=X?d2Dn*VV!`v*CTU
zaP@3>Z!PSc4ZCXLs(SeT?zOdW<!rd77Otp=@7=w+7A~)aH_s$i*21=Wxcx&bYGG?F
zeD{}L>ZpY+web0uo?BiEn`guJTG%ujE~|x^*|4n^HqM5vwJ<#!w$#GZY}nkMPGpj^
zCv?w(sB>8q)z|Ryd(PadidNrnD|+F9GpSoqG-T7f=m-8Vvmk1`6-`}#F5MdK|9#Ux
zlL&tqz8GE!p9~)lKOg={crn}zA(TTdTnxv<_lBPEy3iF`r~kj{|1$mg>ED_D#Plym
zod5s;00000000000000000000000000000000000c(p7`&HQ%#%P%&sn;+aaKe%^(
zaL@dp>sIjo?zQuSHMfHI?p}Q>c+Z*6x!~s3kFT5yUU=Zlin-w3UwWxyE_nW>=a$b8
z+UEz$<_B%_gVy;$%lx2ue$X@*OkIC2Ge2mYAEf68srf-eTPo8s8?;87df)WnMEJAt
z`{9$}m%~qm4}|B#L>LYi!ojdTJRDYq<n(`;{)6dHP5<B1AD;e^=@+J_rt{MmqfP(-
z000000000000000000000000000000000000NidxYJGCz@ZrmEJ>J{D^KkL0HF3ds
zaVTHN4fe$v<AQ3bROru^YXzxVL3X&(HzQpu*f%vaaiF|^a(D4?Q%7ojOSx34&bEjf
zl(!CE>f6>gxqY-Su{tgoE%ir})Ei`K1-at*Y>$SxVC3ZF#l6Kt+s_@|Hq{yzT+Z#f
zxM}ptwKGqhzql+e7=Ci{NNGpu)RX6rUFeDnaueCX!BVj{#y#^2dgFq1^9r`b1^3M>
z=!pyNtrr|Tb@}N%=TDt1?pq!gTpAibd}*XVf9z^`xIHd7Kad+e-<vx!aB6&LMO^UY
zsS~5ujvd)~xcbzd&bZ*jfnA4opWAz)u<O9~j=12^?qlaB&z*hx%D~ae%DCX*vBNu$
z_7sngJaOoWwQ<3L(f(a~kBnVCd*EWFB`(;z>&j66{J9IG#Y4Sqalxj8$4``>zBsgX
z&+g03t<l9xhyRoa-w1yZz7ib(00000000000000000000000000000000000006*u
zt4unXNUllOvel_5Yfm;dG)7rVx;3tU?p0nN000000000000000000000000000000
z000000002I%37m;%ftH;;Tz%4!<WP7!Yko3;r|W48h$DKv+z&DkA)9Jl>h($00000
z000000000000000000000000000000@IPErI+;w~lUiQOyBe3(^Hh5+U)$JP&r@x+
rd`)9>Jx{gN^3{!*dY)>k<(=uqdY($x@|6v#TE3#8p)s9oY03QmS~IaQ
index 72f217bf70f1672eb0c7c865a7929e860018833a..4dbbb1ac75aabd19ef78e529c44e81522da5c420
GIT binary patch
literal 1179648
zc%1FseQccfeHie2Bae3$try3ko!IfIjv^}-Dbjkg6S%e_(K2m`mSxHjwPnPSd`O;j
zyrb@pq{LWyEVm7i%>jm`Th<Ig5@cBstO<fG{bN{$7AY{K1+pxen<Wj9c1Z_k-I}y{
zX%okP?72H0b$pXoY>1Zl^MUyM?)Uw@KEHc@&+}0K@R_Gi6ly_ks$7}P*K+$~&&Lvp
z*rT~zEEY>fKW~j)_m=1<)s~M(Kl@@gmW=hq&vjp^#qPZ@7rXk{mFJ#Yy0ZVh|NOb*
zOMRCIFMsFKh09wm-MRS4;#U`Lul-4Fu6A$rbJdfT|5mA7{K3Vgxj&mbSAMCSFMYc-
zJo}$#pDcc=*b{XF0000000000000000000000000000000Kn_WwYT1z?s@wD__fhO
zX)?GpTV5I~)PmXSSiV#$R~w)6wOXYxK3@wqs`1vNrw5OW4Cc-Z4?TTmFgG-OZ18OE
zwR_1uHN3V~?!J0vtT4GZSI>{FG>Afbu5JC5bkFg7;@1XOCeiGAu9%+)*3Ym}c<*L&
z+q7wGTFVn^)YxoB_v}pfjP8nGJGnCGh2ZjHxiY!j^IW-Fo6OhpWAmlL#ra@etzX$}
zcCXz{YnrW^?K7>{AFDUmb1jie_YCchU)#Ad_ISB`VK!g6P#v3|FHEkT*-Gio&8D__
z`_`0JYUJ*#SK0I2J?WmoXbyL7Fo$TCL4I;Fm|S0$Tb{v2L$7YO!NBzjN9q;!T-*MZ
zbk8%<@CP>-zJ9qC^VQmHd9pB7*k~5_++Y?Pw%%YeQy2E;>h(@8*V}XD?sU&1n|v#C
z`ASf#tuJ`X4JOjoW`p6IrH#v?P%D&6doJFU?s;c4eD@|RvOawGYplYJ&b)ScF4%J|
z`Q~)b(S7ZwJX5IF%9YCtg=kjIZ*=3LyVi}pNz2ywtBP~?HPS|{Xclj}@hqk)<=Ksk
z-uxP~SZTS*Eb8TBjm(~FJ$I&iPDZnMWRqDmcJk&6@}}3A%IfBu%;);uqHTQ^?ueFW
zXZ+gjD+4#GZG5X}7TvkoePWZAt?4w2m+uf)d!jr0&i1cmxpjTlH0HNzHJXKYtXqan
z8?7C*USq87yl3B-?s+&GKeKlHsY);rlqN2(iT7+a^s4%6M{O1EIe&Y)=kP|uHKsIC
zo-fs|2j95aSl27B9jJL`jiNol8`3=oqp{*^$C`;A5^G|&Z#L9Q-L)fCf`vxmp4r<r
zS;6^Aacm}Eommrq!)8ORs=s!)R^gr}cXamb+7<tMwfuN7s9r2a_n@(AEngdG|9so>
z7$ZmCbz(5rUUFY;ytub8d1-Gww`XR1y65h@<JazO^j05lHmK!W>5f&sw4%BDq6cqo
zWbo`r?$qg_lSfXE=AIlJjW$!hI3MJOpBl*xpE+@2Pww4ABac6IW+Zp|sdo<@%f0a6
zwsg<^_s4&I_sURhZ$E3Y+t&@e>P;z^D@;bqH!^s9@bv0AEWbmo6t-rw!7EIw&feTa
zxm1gu61fvk4Ih8@$myexABlof#r$-2rJrMij~zL4VkFnUHy2!*D^&9Jhsj2z^*jDX
z@s)@2MuqJU$o1uWUf8`g-E+@9@n64tW$9KHt?^;oy5)M!g=*acf4Nrb+P3a=&;I@K
zYsXiu)b+EeZV<Y4!_{l6aHDlB<!6K3@>1Nl|A9TNhr!A=7`(N!XLNr&*4Wg`8!<m$
zD>w3E8;mwKut9L^sV$xL-7~ss*9Xy)r8KcN+r8o5UoO0_KH<GlZqK#1WYhH<$+d80
zty(YC?VoR1w>sBfyEj{w+>tXQPYn%6El&;(kL=AYw`kronhUi43T%6KZ&ciK_?FI|
zCwJXw<yL-G7--LJx%TF+=pl1Be(lW4nYFz>2gRTkOl}y=tUK3rRq7{Qe{OGZ|EpiP
zr=!spg7v$q?HV1*boRXG@QqGu-Js3$TNlp0Fr7~K?A{&!jqdd)x+>GP`H9`=;%?uf
z(LTShZpSrm7|oaLRo`Qweb+}F6>7y`^<886+gf!2OqGk1L1nBlY<+z<xEXAG3)p-8
zJK3A7UM@{M6FuDKt2g)>n$?cZ<V(}R(fZp$P}#ipz@BS+I~up(7p_0O>d*e_%7@N%
zE8Ga*Xm#rqnwQbafUUjJdR=N;!DvlxbXi5KUJ0fOmzrB=ptG}Q@SYo8V~yE0udBw#
z^tD6DbWd+@{Dph2Kc7o;^R?x7=e7CN`X_W-Y5lZs@PuhpZND7a%I2#<^Y!iexwqe0
z+Fsrpz3kcZNUF2vncf?nYx~Tar`#Uth{a-EjsFWeo=ErX+ZTV~;p^XV`!5db0?GB?
z`RZRZHvjIg|4P)hZPwioufL|Rjji69)u38!+i!b*?QlHZvvX(seGjdiN%J-G`lrOY
zxwl?4bDPgPdIw#-i8t8St=Hn!(YDv}jUMYWg=mj&@RrbaU98>!8`W65X;v!r4z$%;
z^ZU<A<yE(ksd6PKOqVvBaQo%D{91m4N>SI7L3N^1m}}e=n<GTKb)gU}jumF}(?R{s
zzqxU{qw6sH+&_zj9}kDFe*bFa>cdyQeC4?-Z+Y%pQ4jzC00000000000000000000
z000000000000000`2WCT*{!jsV_Um2U0tzVna)_O@wejNQU8<d4<CA4wOpw^JaFJ`
zv-wM>gX(;-R(*J&zi;kH{>b3L`NgLW9<Ie=KRR&ci9g=^tC_8_BkTKVbnxJs_EYCi
zP0T$rck#sWsVD304}J4fANu=UTVrFf-mb2$MAW_`7MrQn=Bn@5w{LNAv2V7#R45kn
zedWsZzM#~5=9zsH<x;Iu7@w~N`=%@9zI?G*SSru<)howdoH=?v7<%yF=u^SzXYb!J
z_0^BP_v!T3*wNVj^}R>4ECsby1GM*73rhLoT-4=KW%$6{#nHu~VsYXA9m7{{e`~RG
zTkKjocJKN=XA9%wg<9W4d3N6;)u6HvR30u=Cfdh%+r&)1R0@g@?|NW=sW3fLD_)*0
zPxRI54QHd#o<2Eo_QI)iM~aKbiudn$Wc04L@9)?e+Z`=$bFgT6^W)|D+B+sH`RYti
zt)KJgZ11^emPQ}HbbLA%`{*Y>o%_OP-<yi2c>6}Dou8a6m#Q1A>r|l<OqDM+E9_gI
zTW>9>)`CiJtz0fvSFKOARGys7N5fz2?O(clW~4u;o{g6L#s0?!&nCCVhGGvj$Bws+
zJsB(n#qwNG*>u$_!Cbi*)tZbt9veP)pg44~|NQi5f8zcfpZLw0&peyh8ap04yuRo0
z`RQhdn|0hsr{~9`e$Na)HoQ<gbaJtO=|a@+OW!;Hp7+GJ#-55jvVOJ3i{<IQ<+a$f
z@5{y7%ygmDH(f5)`yZIDj?GLD92={SpS^#_XI{PbweI?Md;TVGcK`qY0000000000
z0000000000000000000000000xXHTfhv#qdBme*a0000000000000000000000000
z0000000000;3mt~56|D^NdN!<00000000000000000000000000000000000z)jX2
z{iMT3W8t5NUkLwY_#5HH@Jy5i00000000000000000000000000000000000004l$
zliSjrv3nC;vDxxcp;*lKl`GS+7vI#`85@X#bH#iqsP(NX+tJY(+gWc=7#}ax`X<V=
zu@~=7b;b@yvB_W|D3<4f%IYR}B|BpWqvG-T>1K3QX)e(jd$?X&EKm293ez*S;^oyf
z-V|?6CqFq^E>%~TWutRQhm*1JFTyW{p9?=6{-f}{Q5FCI00000000000000000000
z0000000000000000REqQV{#xqSIn1!THkDWsZcED`^uH+&aKIN<8Ar$t;wD7*~0jE
zq1HE1p6$3Zc{n~9ECj{!Tu^Cmn7Si*Fg`v%-3+u9B=1T-93L;1r~68U>6u#ba(iLo
z_T)e&KRH=0Rolbe(fqbOcPtkEm+<3ZIeh5qUtj&~)zZ~nSH6Aa6IcGhm7UMM{M_$6
zSBWYB000000000000000000000000000000000000093-_U^bf7LUa<(Z|ltU71WW
z5$iZV(Dmy3&$iNF?8*KUONSmhc7E>ogWGS7W#aL!dz-c6*~IB!A}G~zBl+oSqruNU
zbYHXKRR8eExzm^Cdxr)N9<L=H+SY8jYq@16d9qxs<(@563$<Xf(d3oS&osOE;G?I8
z@}naImrMOimmf+zxV6zV(`?$6=}I0CYPq4(Lb<rG-1MhEy`z;LI6Qo`*xP@sSUJA<
z&RZKT<9n7{rqi9L8h^_@ce43c)EkX{@{ze#x_GR2rgv)oq4C8t3rD+~jUQTW+?nn;
zR;W(QSF5?<=AUTKl}ovy(?{2KQkgzmJbe7bvBA=bCm!C??4)<Ola6%iNU@l^T%NDw
zCMx;rOi*3hyi}?To;x=>SX&r5bL5t0^MlLHQ|V-D?2({a3o5yha=Ey!i^Zo;9~d}Q
z4#o#YFC5P{yLhD8MLd~KET4StSnDs;=Z1sYV!3i*Z9n-V`;RW}ul7E0?1^_L9?dkr
zhW*POCDN^a-Zej+8>!?cE(DdeJq({J4nJ|`(D-O+;IYIbT~QC2cvtIe(vKA?!BqLu
z%6g6$%hPLnICE;@^rd|7)DsUp*#B6%aj~|}C6h=b)^>3^s77l$v3^<44xOGWome<D
z_t=U2fsT4VnfRNRFUCZ2zBE-RE?-P9fAQ<hM(>L)hsWv?{i$ZF+n2XWB2jBy^{pmR
zT91t_>rXUVblu(>XErF!uWAtOuX?Q2pyU2{y+v17cWaEbwJYUvtyR0bzJZ^=x%UqM
z00000000000000000000000000000000000006kzvh~CBH+d2O000000000000000
z00000000000000000000003~4bw@vm@PEd_zljb20000000000000000000000000
z0000000000008jIFO%qq-4^ejoh&80;vKQ=@$T`ZL^di&gg=OduS5p`0000000000
z0000000000000000000000000004O1NGETL&rX&S9m(yP@ulu45)Z!@i~a!s00000
z0000000000000000000000000000000Kn_Sws>+^e73wab|JXDSguS~6WviX9=;rl
z{s90000000000000000000000000000000000000z%RR=crteIR53phRQEkIo3GT~
zRW4tM(hJ$BFdlw47X1SN000000000000000000000000000000000000Dxb5J;{Ta
zQ^ov5P~G>;Y`#)^SGjy4N-uQR3!lHqlLG(%000000000000000000000000000000
z00000fSas4`bmVJj)h-~4gdfE00000000000000000000000000000000000@QYw~
zA{&cmc6P<%ot@iH2NOZ5Hj<yNrjoIa^8;P4PW89a`{MPA_ckhSJ6W#Qo-I@hwP13&
z=FdL(Xe-Uu`+fc<pBDfC000000000000000000000000000000000000NiBV^`9$O
zW8qiAkA~H7DBOAV$5(&<>Ibeqef6Fz-@o#2q9OnQ0000000000000000000000000
z0000000000fS-d0x>LKJylu9;G<G4lyjZSGR;w3_g<3F{pRbh*rODvZSbO2vzyrB~
zcWz1T8trKhuc|Uv%ufV!<!Ws*U(1ipmkJl>gGNtL)7(JcEven_ytCe5yj;F8o3C7`
zuF8x>gU>dq4?LKAAooCjHnsba8`Yo7SAtTl)#5;I;2oLN?q^<Wgkrv0n=MZkrV7Di
z+h_w_sojIO-=J-DPC<Th@_M8F`_rl2LpN$NJztn?UxujBz}q`hJ0ET|YOGfE`lqq^
zN^xu^U!7^z?avLots}Mb;Kp@lqE&9yd*HrQYUkme4eKows)gD_dA?Muci8{-<ffxf
zRf372G;z7r>%sm+YUlBdd#$fwqv!gftW3ARH=f#gbmQLFEk#s68(oFj@B^{%$KhXu
ze;U3N{$cog;pf8N4nG_P0RR910000000000000000000000000000000002sX4sPK
zjK^X>I&kKRKi->dWe$DwQy<DSGavorr*mKUY)3ZP5x;-OOW!;Ho<t_uk-2}zXI{Pb
zwPx@Wzd7@nWb@;T{f`f(njfdW`my(RH9rntx&5u_=Ep}y?|OS@HX1e?9*>2ugg*+u
z7rqq!yYS=T`@>rJ?kETV00000000000000000000000000000000000004hCTa)+3
zXUh|PwZiy#VYaXHuH++`=}NgTUn~}u%Cmi!i?x~QLaA@MTpaIvL$WvCUbwip*w@vQ
z+`lSV3rhLoTwi)^yjm(xPUibkZ%RJ2DqacZ%Ee$InCwg5nLNCzsF6<3kM|`yl3U|_
z*~T%`ICf;C$!Eha$HG^`zYTv7{$=>x@H^qR!f%8xML_@n00000000000000000000
z0000000000000000Qkj}N_NGw^+Tq9=&B#m^+RX<&{036>W5_gkVq!GGTEq6HvGL<
z__OeD!oLdtNBHgVo8e30m%{%T1pxp600000000000000000000000000000000000
z;1@$@G7*ox*wswZ&7`xLbTpGxGf6g+L`O1_iGs<lc(#7XWTQ^9;g@6KtKr{<KM4Oa
z{BHQ2@LS<G!k3~T000000000000000000000000000000000000002|VoD`r@ofE&
zsUN!PhjjhWSwD2t52^YgSwAF_$yg>EHOhwXj)i{}{%QE1!v7HdPWUgve;8g4XQChg
z00000000000000000000000000000000000008{o*_PZDU#birn7cT-I8-byr0ao;
zz5Pp<&y4g3)w9p0>Vdf<`6Gh|=NF$kc(|6W2WCcRd(S<yH2V0Z<I^3Dz|r%;(1Qm@
zp9)St+f@%toj)}(_srbI6UV2X%+v#8!{-hZhc5P?pC0W`)&pmT9~)jM9y+<$zjPr{
z4?KNx;_QV}=Z+K?j}<$&CU<29rmJH!(*wuGs^e#~_1QjulUEA>000000000000000
z00000000000000000000003^XZ2j>3O`Ze*000000000000000000000000000000
z00000007)%+4|x6n>+~s00000000000000000000000000000000000006kjveD1B
z@SnuOSHd5L|113O;kUy78h$1Gqwo*H&xgMoekT0w@MGa`MHK)5000000000000000
z000000000000000000000O04UGZoLov)da<W?Lia+S*9cw>FZ_?nctFrIDm=X(Y*P
zBS~aBQkkehXDSwtCwDZGM7o)DG?P>_NpwU>CXtOs+!lTy7XB>!arnLP<?zqKZ-ie7
z|0w)}@blsChMx{U8Ga=Er%?p}00000000000000000000000000000000000008)T
zNvGoRc)Ih}X4=u+OjBE$Y4Vn4n#gvh;+c3l6D3{obXOyn+}g+`w>9b{66r=Xv7-@9
zZ0}5E;_+lhBT1w>Qkf{2N_BN*veB^H!aHK&55hkWzZU*s`0v9{haV09ad<7PgcIRN
zI2axZcSjWf00000000000000000000000000000000000004Mhx-}K=jAvsV=Lfo8
zo$BA-$YvVZpMCJrZH;VKBm2{z-m$fjO*gVX`N-U@jcjKt+ug`^w6a?o*;FfgOCy_X
zWwVWJqLs~br!t-KR<5f%6<f}|`u?*!R^<{~qFknxyIvGEOSk3T7wfp5d-;oBPi3QX
z-4+hS!XJe%hkp`&Dg6EL--iDx{H^fCFbpeU5S|U641YDM00000000000000000000
z00000000000000000000?Y1O4<FStO16{Aa|Ll&H%+Ee_-}aTvE1#d)wvzejPw&{e
zlKII;=5B4zbhl@=v}bN<&t%&(nf6RqdnUb-dHIW9?`Y4Y+B1n;lAW1WCL5j7wyS>~
z3%?(JEBsRU`S4$d9}eFiUJ9qfXT!npVEESXwlEP@0000000000000000000000000
z00000000000002sm&>-~uK429rw<IADhJ~OqZe*z1djF2^iIt`G`@Id;nsR!zBE-R
z29slT9rZvhKV2PLmfD)!m8q1=wN{{Bp)!58c=-5<V}qp=PjuG<rBY?^+_}-g+QP`0
zE%m@`P?~SGNYn$t*pvMymJU61?EKvE9rZx|$o`{?`>VYV9DCy3*?QpY(CN9-iG@RR
zkDbV;>wz<;7EWKv_f9?Wz=Qo=^}wm2{OHKQ<x>CB<%hP_1H&WdPG6eu9U3@zytcg&
zI8_{e;>@A((bB+UnR?*B;o+mj-u`37%JIdm*=R`;;SXcsE71V}000000000000000
z00000000000000000000003S;I#coPcrwuuC7DFF9(n#I&j<hj000000000000000
z000000000000000000000B*8u^pgmG7z<yC4gdfE0000000000000000000000000
b0000000000@cPl2if7{66CF{K+4jEy9LewR
--- a/toolkit/modules/Sqlite.jsm
+++ b/toolkit/modules/Sqlite.jsm
@@ -984,18 +984,18 @@ function openConnection(options) {
       dbOptions.setProperty("readOnly", true);
     }
 
     dbOptions = dbOptions.enumerator.hasMoreElements() ? dbOptions : null;
 
     Services.storage.openAsyncDatabase(file, dbOptions, (status, connection) => {
       if (!connection) {
         log.warn(`Could not open connection to ${path}: ${status}`);
-        let error = new Error(`Could not open connection to ${path}: ${status}`);
-        error.status = status;
+        let error = new Components.Exception(`Could not open connection to ${path}: ${status}`,
+                                              status);
         reject(error);
         return;
       }
       log.info("Connection opened");
       try {
         resolve(
           new OpenedConnection(connection.QueryInterface(Ci.mozIStorageAsyncConnection),
                                identifier, openedOptions));
--- a/toolkit/modules/tests/xpcshell/test_sqlite.js
+++ b/toolkit/modules/tests/xpcshell/test_sqlite.js
@@ -105,17 +105,17 @@ add_task(async function test_open_normal
   // Ensure that our database doesn't already exist.
   let path = OS.Path.join(OS.Constants.Path.profileDir, "corrupt.sqlite");
   Assert.ok(!(await OS.File.exists(path)), "Database file should not exist yet");
 
   await OS.File.copy(src, path);
 
   let openPromise = Sqlite.openConnection({path});
   await Assert.rejects(openPromise, reason => {
-    return reason.status == Cr.NS_ERROR_FILE_CORRUPTED;
+    return reason.result == Cr.NS_ERROR_FILE_CORRUPTED;
   }, "Check error status");
 });
 
 add_task(async function test_open_unshared() {
   let path = OS.Path.join(OS.Constants.Path.profileDir, "test_open_unshared.sqlite");
 
   let c = await Sqlite.openConnection({path, sharedMemoryCache: false});
   await c.close();