From 0782afa9b0730cef3e1e808458c23ff8fa94ad86 Mon Sep 17 00:00:00 2001 From: luzhipeng Date: Sun, 28 Apr 2019 14:56:15 +0800 Subject: [PATCH] feat: #236 #238 --- ...lowest-common-ancestor-of-a-binary-tree.js | 72 --------- 238.product-of-array-except-self.js | 56 ------- README.md | 2 + .../238.product-of-array-except-self.drawio | 1 + ...est-common-ancestor-of-a-binary-tree-1.png | Bin 0 -> 7530 bytes ...est-common-ancestor-of-a-binary-tree-2.png | Bin 0 -> 37676 bytes .../238.product-of-array-except-self.png | Bin 0 -> 35311 bytes ...lowest-common-ancestor-of-a-binary-tree.md | 149 ++++++++++++++++++ problems/238.product-of-array-except-self.md | 102 ++++++++++++ 9 files changed, 254 insertions(+), 128 deletions(-) delete mode 100644 236.lowest-common-ancestor-of-a-binary-tree.js delete mode 100644 238.product-of-array-except-self.js create mode 100644 assets/drawio/238.product-of-array-except-self.drawio create mode 100644 assets/problems/236.lowest-common-ancestor-of-a-binary-tree-1.png create mode 100644 assets/problems/236.lowest-common-ancestor-of-a-binary-tree-2.png create mode 100644 assets/problems/238.product-of-array-except-self.png create mode 100644 problems/236.lowest-common-ancestor-of-a-binary-tree.md create mode 100644 problems/238.product-of-array-except-self.md diff --git a/236.lowest-common-ancestor-of-a-binary-tree.js b/236.lowest-common-ancestor-of-a-binary-tree.js deleted file mode 100644 index b9143120a..000000000 --- a/236.lowest-common-ancestor-of-a-binary-tree.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * @lc app=leetcode id=236 lang=javascript - * - * [236] Lowest Common Ancestor of a Binary Tree - * - * https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/ - * - * algorithms - * Medium (35.63%) - * Total Accepted: 267.3K - * Total Submissions: 729.2K - * Testcase Example: '[3,5,1,6,2,0,8,null,null,7,4]\n5\n1' - * - * Given a binary tree, find the lowest common ancestor (LCA) of two given - * nodes in the tree. - * - * According to the definition of LCA on Wikipedia: “The lowest common ancestor - * is defined between two nodes p and q as the lowest node in T that has both p - * and q as descendants (where we allow a node to be a descendant of itself).” - * - * Given the following binary tree:  root = [3,5,1,6,2,0,8,null,null,7,4] - * - * - * - * Example 1: - * - * - * Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 - * Output: 3 - * Explanation: The LCA of nodes 5 and 1 is 3. - * - * - * Example 2: - * - * - * Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 - * Output: 5 - * Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant - * of itself according to the LCA definition. - * - * - * - * - * Note: - * - * - * All of the nodes' values will be unique. - * p and q are different and both values will exist in the binary tree. - * - * - */ -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {TreeNode} p - * @param {TreeNode} q - * @return {TreeNode} - */ -var lowestCommonAncestor = function(root, p, q) { - if (!root || root === p || root === q) return root; - const left = lowestCommonAncestor(root.left, p, q); - const right = lowestCommonAncestor(root.right, p, q); - if (!left) return right; // 左子树找不到,返回右子树 - if (!right) return left; // 右子树找不到,返回左子树 - return root; // 左右子树分别有一个,则返回root -}; diff --git a/238.product-of-array-except-self.js b/238.product-of-array-except-self.js deleted file mode 100644 index 92079dbbf..000000000 --- a/238.product-of-array-except-self.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * @lc app=leetcode id=238 lang=javascript - * - * [238] Product of Array Except Self - * - * https://leetcode.com/problems/product-of-array-except-self/description/ - * - * algorithms - * Medium (53.97%) - * Total Accepted: 246.5K - * Total Submissions: 451.4K - * Testcase Example: '[1,2,3,4]' - * - * Given an array nums of n integers where n > 1,  return an array output such - * that output[i] is equal to the product of all the elements of nums except - * nums[i]. - * - * Example: - * - * - * Input: [1,2,3,4] - * Output: [24,12,8,6] - * - * - * Note: Please solve it without division and in O(n). - * - * Follow up: - * Could you solve it with constant space complexity? (The output array does - * not count as extra space for the purpose of space complexity analysis.) - * - */ -/** - * @param {number[]} nums - * @return {number[]} - */ -var productExceptSelf = function(nums) { - const ret = []; - - for (let i = 0, temp = 1; i < nums.length; i++) { - ret[i] = temp; - temp *= nums[i]; - } - // 此时ret[i]存放的是前i个元素相乘的结果(不包含第i个) - - // 如果没有上面的循环的话, - // ret经过下面的循环会变成ret[i]存放的是后i个元素相乘的结果(不包含第i个) - - // 我们的目标是ret[i]存放的所有数字相乘的结果(不包含第i个) - - // 因此我们只需要对于上述的循环产生的ret[i]基础上运算即可 - for (let i = nums.length - 1, temp = 1; i >= 0; i--) { - ret[i] *= temp; - temp *= nums[i]; - } - return ret; -}; diff --git a/README.md b/README.md index ae100f6e1..1e17d3354 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,8 @@ leetcode 题解,记录自己的 leetcode 解题之路。 - [201.bitwise-and-of-numbers-range](./problems/201.bitwise-and-of-numbers-range.md) - 🆕 [208.implement-trie-prefix-tree](./problems/208.implement-trie-prefix-tree.md) - 🖊 [209.minimum-size-subarray-sum](./problems/209.minimum-size-subarray-sum.md) +- 🆕 [236.lowest-common-ancestor-of-a-binary-tree](./problems/236.lowest-common-ancestor-of-a-binary-tree.md) +- 🆕 [238.product-of-array-except-self](./problems/238.product-of-array-except-self.md) - [240.search-a-2-d-matrix-ii](./problems/240.search-a-2-d-matrix-ii.md) - 🖊 [279.perfect-squares](./problems/279.perfect-squares.md) - [322.coin-change](./problems/322.coin-change.md) diff --git a/assets/drawio/238.product-of-array-except-self.drawio b/assets/drawio/238.product-of-array-except-self.drawio new file mode 100644 index 000000000..3d7642a64 --- /dev/null +++ b/assets/drawio/238.product-of-array-except-self.drawio @@ -0,0 +1 @@ +7Ztdb5swFIZ/jW8mrcI2EHK5pGS72LSPTpp2NRFwAhpgBk6T7NfPBpMAplOqkeBqVK0Cx8aY9znY59gpwMvk8Db3svADDUgMkBEcAL4HCEE8d/iHsBwry8yGlWGbR4GsdDY8RL+JNBrSuosCUrQqMkpjFmVto0/TlPisZfPynO7b1TY0bt8187ZEMTz4Xqxav0UBCyurg2Zn+zsSbcP6ztCeVyWJV1eWT1KEXkD3DRN2AV7mlLLqKDksSSzEq3Wprls9UXrqWE5SdskFfv76+8eN+SXE6dcjXn8+wsh6LVt59OJd+4ELdqwlyOkuDYhoxQB4sQ8jRh4yzxelew6d20KWxPwM8kPZHskZOTzZUXh6fO43hCaE5Udepb7AlIoda03l+f4MwJKmsKF9bfMk8u2p5bMq/EAK8wyRsCISGl+kuWYimYpIeHSRkG6eZCkimeOLpJsn2YpIikYZjVJGcveRP2MhpTiNr0K2wCvCk4YNvQqW059kSWOac0tKU97gIvbWJP5Ei4hFNOVmn4jGeYHQNeJzwftOhTVljCaNCm/iaCsKGBV8PHl2aod3LRM9Tw5bMUveJYXvkbuAZDnxPUaCu4wWvOaPcsLi9TdRHNd9BAgbxmK5QgONG5bVom2psNEtYc8m2E/ADiJ+gezDnhRsGP7YaPPHPW/7TR3A0TACMSHWa0ic6yiSrZlI9f3bKhmv+N/48Zqlm0vB3tC/Vqv8HD+As7TzMaThm9hNmPom9duq9BIypvFVegkp0/gqvYScaXyV1KSpHs0BsmMRPG4ofzaxUFaHmvavHa2iSrzZmB6ymyZ7Kz4Rb8D2EiFgui6yskRMC2XDZt0y73HVeHXR6HS64dv4dNQsB/4jGQmgnqc1BWHrBqI32zgFPQMA0RNEN/ocH0RvRtONPi8EgvlPPxCoLRDd3gykpgPpLikUofgjswtWWZqLGtKkLJR011OSKAjEbXrlbwMSLFtrJvO5UdvlHhIyhiHldFZHkaWAMntAoauBUmPrCVQPKGSPDUoN7y8bztbWzFCHs5wUlw5m/x16bOv2kqpJy8T+NuzHf+8H3b+Cf4PZ3C7Qel9DutgAuJGh1/4VGnQDa6Ldoa3ZbiVS88eJ9mC0u3uTo9NWk9SJdkX7OpvT3S8njL45jdUtxckDrukB3el9fA9Q10UmD7iqB2g3BiDVA1wLOPzXAa4JFgvguMLyhh+bwJ0DBwLnvqzjAsdW3EWPFK3lk428DNpq/jZbGcZqNdAkD9t8oaPyhfiWCRtWV9RKeHZJsQF4YYCFOwF+JmDTuB5gfnr+An1Z1vg3BOz+AQ== \ No newline at end of file diff --git a/assets/problems/236.lowest-common-ancestor-of-a-binary-tree-1.png b/assets/problems/236.lowest-common-ancestor-of-a-binary-tree-1.png new file mode 100644 index 0000000000000000000000000000000000000000..04be42ec20c54ac04a19406d4962da4ddfac9071 GIT binary patch literal 7530 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 Z#2;L1VGI_Yz~w21y0VT^je>Rf{{g8QWAgw2 literal 0 HcmV?d00001 diff --git a/assets/problems/236.lowest-common-ancestor-of-a-binary-tree-2.png b/assets/problems/236.lowest-common-ancestor-of-a-binary-tree-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a604de351b92928f6426ba341e38a43fcb4c3579 GIT binary patch literal 37676 zcmcG$Wmr{h*EUKw(jp-sU4lqA(j5ZQ-AYO4qNE!Hq`SMNkq&9;ZjkO=u;;@2e%|N4 zkMDc;kA3XJ^+Tqt8P_$&InHsOV;Za|FM*Cihyn!#g)Sv2`W^}jmJbRF+6@T-II>`_ zQwIfw^4vm1L{UmagiO)S#?->n1PV$rI4&Mh1$X;-Z(HI)cvTbQ%lIXCEg?6X_c@^h zRp(n(4x(a|FMNW?$>p%#sK94uN-AP0F~UK^??WTQNTWR$5~K3VX?0$5-v)0lG_={9 zZGoHzxX%#1aer>v85uxBt*ynn=sug0ee@Qhw#JT%4u`Apevus8S9^MF3m^2*_xNl4 zh4<9y%kWy=N6>wn^cyzDXjrHXA6rXva++tW)?bFWwRN#ONU`E&JQ=r}U0j~MXL{l#@a-}8 z`^<*ml&1UbMwn!BxMaMTu;JjIB*DlhI&N8Hebjw#hAI{xj8XVoA;j4x7Aj~-6d4)K zrWsRS&QyFnti-Mw;U(P{6Le|Wg~Pulr&wV0546YxiHYb!hG*={PlmtY=eL4Hi>R9MoXvY;g>eUJapmoI1Z$sHZ%{~lk>8-} zdc#-1eIP^Xc!wK=5G*_%1(SoYE6mtOT;-?zikTJ)C4fA`g_dC8%cby*B9_WCRgv&f z=TX<4w+^s`0f!>7qr~Tgw@}&oZ)F3i48+t?O@Dl-K;1{T@u66OYwdWpi{u7f?R|!>HAywBKt6dTJfyl z%A7GNz%+|}G|yb31|!K&Ug$^|KVxtVeaFdx^!Aw>c8m8zSf)PZn~yJW!f<*>aeSn@ zHw>lUIDX^!srr-Fl(70sw;_Q#RSDJ<7Lj*&&tdy>{YV3?O8yyxeOxE3z|P>cU$&-P z&cs9sUk1D5R^?ZjR>f^6zB{{M>k^iS*7qW=t)I+ZV|(B{kb~d^{q$ZTVd5fD!#NAn zzDiY;Mf>v^D#cf}y87DsN>S7W6gx~W zXw=DOC|yKs<3qCP-yalY{v!VP`U1r;T_*mIM{AQV=fj$0{^h;FqR%f11STB)i})$(6G^-e z?26$krHU=32*m_NVudf2i9Yle5Eb_pPZvafiefKed(W1{PR&k`RF*WG^fHOLcB2-i z_L;@SC(kL4(TGWbLa<_B(RxX2=|t|CrkZL(wpOOQT4a`4dA(M-@=;uC66o8*XRtd0 z8!V@vCqfHCI$AiIYryLOd+}58AL4Q1>x?{ueyZ(_)?qAl97|RUR`*L?qm=y{CH>`j zgn2A^a(UH6Upc;5aWxnW$WDb>eX!y%7-qxZ5Ht`lcxCjXuAtK8Bb^z+M-4M>qg+Eg zE60J~xwUodBaK6Dvprp=`Err32c~{-j5v)(eB3rtv%c!mof7D1odx~)(QXhZ5=qfB z)_oGS{yjDar?+s-;>T>CYrcIt>a0nuOv9kEnyOmbrv#$?t$nANgE4Xc@Dn251)rwa zJA+c^k6V>&MiGdYCSlEEpcx&pxd_jy|Eu2OOlcd@qeLzY?+4iCM_Z#S>|D*Y#Mp zRD^pGxz9J~%U0;wDj!SK@iqmtyja71Pf*ofxk|j*j8u#E`dKO}D=Gs@GBPJBGfH~+ zn@}!d7JLgV4Qy^w6C72N3;H>hMtV2y9{xN5Q}!w5I`(Iz_{7cvX@sOW%k?@R-RCY1 z$_P0Vc%$`WY$*+VwmXVtzF^l=I#G{BrymMc*`2EO$I@-l;n5wv_f#IqMb7KaN6#tF zJ5osRuNb*@LUcnkld#E?-Aen}pZbBf*!f+Pu+zn1{CsM)JI~;&VgroN3P00Gt81%6 ztCkNh=I7%m5@X|7FXB4Yh8jE?niozy^X`gT#l2o$T&#dvz$SNs+x}aNKc|P8`ybWY z>Av5D4|C=&myjR{zEL+trq8$W+W4yu`ogin zF-6&3+5HkU(mFD{gByd-;yoE78A(ek%FIi@7A)vBcrc#N^nD&&f2|s$dZS7zFPi#Y z?Lcu+H(Oo#eQ2p%p{LXMmGNVJi4D@4h|_cJdVzx{vrE( zUwQP@I{wAktg-it1Li}5u)~z;t`9oL&PHZB!9yN9dvQoa%{jbmytx0}#HHA?T|eVM!jE(w0UdGPhG_AS z_$|qA!lgGJpSuhudfnAB>Rx?ibkyb+b*jH9Z}vG}6Eh}-hxkE70?(!V7ZddC&$(;EevJU}&s^^F52XES;wP$=DNErRRL zQ~`UtWmn{mWK%iDju+viP+WLW0^#LlWez1}pdyg~Pbi_0@kR;l*mgQ7`J7LCw+#`& zi$8DGA}@(F^xD|4rdX_@poE~LMBk~nK<}rbdgFGdK6!384|{b@C})fNUyDoqqzb{16;i>)Qp9wnjl_#z zG)X^um@YT_ly8=2mS^v-Eg&g6 z{PTN;FzARF@8{V0e&|PC$1;6;-Fw5%&YnB?VFLY@zzC*Il&R?8YdW0Zv9cAj>0l<9 zs*XQGX%h{!k|5=-WTjSQXYK|0(_xN`p3s#911}pbMnPG z{6BA8ks8WRf&dTh-9J|VB^(MZO}Ln42lXFkA{XeH>{8w?Ez|0`B7kB<_m$#8i-_|hF7XGymA5lTOHpgLW870hpEJjZo|{i! zi5#MS!AdjNSw;KjZfEo%eb3p9Ez|zcXFxN*QJeLibOjL<<1OuOpuxI1`alWp%0@9e zmf4^-YFCH};xDpYrBT@!eK4H;UEZ#sK;c%_;h(Dt9LUmMA8BV!lic8Wi63_S!d`^& zUn_tGSpm4XAo72$zzZDjA4WgnEC0O$LO}3isgQ^KGbhOOA<@i&-}UckhK6jPVlXYt zKQHUe0vzwr#{5@KD8j*M?>dRgIqSWB0|axod|iz7dBFg|eb&!&vz7dOEPgdeT+*$B z!%ySPR%oQUNK_$_{M+2CGVBKB9y`&v1OC2U0bA&iTuL<3$y0FSf$zm?@D$$gKR^iz zE+oubMpIySz{H=}X--a;f&Ky-5}pM$`0?z@&khvE75Iv55!ytp-y+;o2G3-p;Ddz4 zo*gj9mp-7}pR;9c(`&11LJkbDKcL;O1&fwVeExwH$-?>neFcC3en*vs^sj~Q0Rs4i z{k#9)wy%9`X66M)D_$^qAVs|^PJzk~$%ypmlY2(JK;c)f2@-Xi!vrwOr)5YYB}n6J znI;l;sgNARUi5cw4^5Abd?ULqv}cKd6QrR3wJ5j(mfP@q!0-|byAAJ(H@qiVJxXT5 zKMutddh~tBRk=-QY~=Z9Zcc`uo`dp3U$H6G8c`X@r-{5gYF|)gZ8ossh7J7;$FY=# zkx#(n*xdGi+FuvJEXH%Qr{A!u5#(R(YgoK7kk&FxeTDF^bdp4BU!jW$5oP&T7+@o} zuSgmDzW7Haf$|}L1?877NsrzAui7L@3FSu|cd-ilo+#SpInn5{tR7Ji9u@@hn79(B+! zJ?A;UuijVx2iYey3BSyzA?8MG6Qw539uQNFm=L`)LaBtlH+1b|c)}m1x%3>RU7eAlK914*9BpXX|SGIX_L zoF1s9N@XWz{(VO$y`=eOX|4euO4Q#~n+|0Wu$qqE-<(-2eE-a5IrC!Sws!1vbFg;XruD|OaVzQ5P5_bhC|Yh#@ao?s=bI3eJgTgB5G7>W zGiHz&HEV*z!wJRQuMTsk^}JGb-FB%Ocd|m?6Y>_msEFG ztAXs6$z?4POkfWg z2&3XN{oU3^FasBPSqK_t zc-?MQttFg)Z8!sAXws z4>a_q?t*F3XlYwA{}eQDegL2=CHRF=v}kxSA^zuH|K@8Zrca^O|G$QoG^o7o zfoCX*J+!E}IF|?B(HL^F-bAys#1GCjZK9$d>e@uDu#GbQCy>^_`u{*)Yk~Rng)3wV zzAEw05T@=!PF>-2pqa#CB>pZT>SEiD>@S)nL=C4sekyepg=aTo!RcCB@C)(UC!I25 zTvvTc7Qi?u!IOfHSxZndhgH_i*)|Qm(fglU2}jv_OOIw*tLqlS3k*A1Hj$iko91tE zXykKpWfJIXm8)+mpVMFD(IbMhE(pEyItcF93dPC+dMXV3;J*nWgy+UaBL@Q*6nvEz zUl<^Z4fI>{bynG**LyZ|Ea&yUCq@X|Y2I!{T4$xF@O@ztI52O#+4RiY?!L9>{=2&) z!+|N2{qpJ$dsF-dcey_+(iwn0=yRHSzI}F>dBk_Yz36ag9{s?md9^v@&>hjT=2202 zQ~99%4DPQK>Vp(bS@U<#Awh@oRmk3+6(~SkLU$;QS(VXc1%=tedDL@F>!c3bZAjJI zH#`$(hTsO`|3E6FF-RQseTpAkTIjZAh0V=P?y=Uai11{2x8GR;4krxJj3Cae$X(Ze zU3co(SQxeH2~0EKfWmj<(MtSL?;SpvTh_pf0&KBr+~_pW`ODbOxjX?tu|(z6CFT^Kqc4nYQdY!_T3J ze@071z<*ua_IfpNVyaZjVw}<-^&26*`7mi(_I4XbV8H!Rw+`L1=;Mq#R-)yR`M>sz zdR3K16)CWD&T7e+PW4U9x|uPb;NWzoqNI#?9zJvSNax-K_Ic@iba0i2WgFjpmA0%cn9NOGxT9sEN!QIf!_UomitFBD4~M# z>(zYddkG1)Q}Gpm_2jaDni}m1CpwGICm^V7ExDpf&^8pell;RoGrAzGwh~3+GjIaw zyI6lZxoj z3FpbF`>PIDoAwZ#ZBA5dbeLES1Vwv(r3}2LxbDUY*3AZsY4ov9UUrAVSj2s|F(pSCK@Sv+j=Up1X8{`wLzcbiP_^E0K ztH0W|tmiPX1fo5@G;y_-Cq+;}$H?>C z=W3;4#TV85;r@nzn`t!P$Nmpp7zg4s-(io03K0Tl)-Zfoc5A^j73jQI@FDuJ z=}17c&XOS2^K!N;8MO7*_BI7$yO)Bm*_1~0I}qIcn|2n-d3iCN{C}Nk6woQM|GGC? zB^bfmvB;fm!AEW#$4S-mDJ`2ZDVo$AIp+1fa3anmY5$3J2iIG|?X%mx@`;W9*tk=d z--Y?+Ktj%$=15}*A^ln44WKQgyP<}H0v0$|eq}4!ChvzIA`Yp^cYx4Y^hUg7Gw#D2 zdb1k+f`g;#VykE5Y6nVH)VxLbKI_`y>eCZz7UIu_9g1`myouE$sih zaAYb0viwq_Ugo8 zaiL#}i;E}nex%wB(ETdc6HMZ?(RFq^g*yO5B@(JObJ9c*BZs&OZfuJR%)m@BQX$Rkz!1);J^1DZZBQMb$H; z@f@kx##oWNJ@IJUEPy~^S2#*|>v4vB!@*;^_YNVR(?gs4hI$paKreXCX8R0+t5iZO z(GnzMe3g|9JBCO=?~!YIe!P{#H@<%25|XJ-3;UF@-coQYxkHpul24s2iVxJ0XD333 zABI2yHvuhNs;a|%H#6v+a-QrflHGTIOBVb9KXN1FdP-7qn)bVc`$OlpY>SCJJRK>o zyZL2o_xSa<+&>I511LG8VmNo=& zpkN3f^60BKK~L@MD{Pk)AH*HtcE|*tyX%iwmA70HzSgWMmlOC#@Ttj2o5}$~&PXls1?=EvE6a-VVjeI}4nGRNBy9gQ<2{$PMen9X( z7s9<;5Bz;dZ2CevqVinW9{!UIs)!5c(lU%plOnYI_;3}P#g~X{czeEE11JkX-jK8a z@RZ1hqVWeM$;nq@;uRX-YPh81TZ}B0eqLR;g*M{^p5x`q(T6$pH(D} z3j}b+FXZEd+w#`ikcYjthvHvKFXA7^BuFRo>KE+>Uk6-aJrNEvMGuIQua}x73P}^` zl}Rj@x0` zoc3q1X+K|z8Rx@$-LI2EP;;&)M@{>)*k$ml)SntM50Sd>=zV=5!5x*>9;c>Tc)-c( ze7JDl5k=;t&;mg2TDTPAGh#`zRLAE9e{u$w4qDcNVLU{v@=x}sIxk5b92}e(2L^IjDDPxd%bu9#a|qUFD5B#v0vl8b*2Pr(fm?>VdX zc!}a)V{Ghp^7fXmS(n+BkHk}@qd`_LFM(_n&wvs?ol{Rl(8zZsf4Ex``#!8d(fQH) ziZeR$;35 z&nz))F`dhL>sQ$KrB!D)gPbDau0xhkb&7$`C+lSKNIBPA`+hVMVy;^$2#joHZMiz=LBzP z3!paI7s2De9(_gffk%BFHMp6jWz$kCDxGp?SS53WMIk;4u;`e(pHY9nRcHxdQ~g9A zjo~23wuR}k>W{wzQ7s>D(jQr9-sOzTtz-t0WKB(dXj}~-YFxL4f&3zw;tV7}oxtzh z0TzT!QDM~k4B#H194n@Q!>?FBY1-w{rpk0=+8!>-hZKnE{um=0sSq;GYiIoAD$e4p zfSs%xcd2>6=Mz#)hC>4Ed={eKEq;bZ?F~6}{#BhwW+AQ(8-5t~$9j^YxF>R5)kIMy1I_o{3wB(jg zs7I1cux`8?Wv+^h*}(LIYjYtV`veqORM)&YU3HRs%Gwp!r&4 zF3K~j)25qbjy&c&?W5=tANf??A`aAb;~L@hVHNHKY(b`C2y`DC!30AC=8bLG6OiM0 zEq@cXtY8pqh@{P{>7K$bd%Al%AAm?eV6qnefYj@r#cIAT93ngn4GnEv-SrqEC&qP*$PS9I4?phy%c=tiKIkEE6G$D7~WVXOQj{`Wxp1loV z%VgenljLwqk-x<8JWCOyp0G@09O}{Y-3j-FfT~IS5y+AXv0wu9gGR@oB+8zP*jTLf zr!bY?PD1mfcRC9Z9ur_6??b#*lhX%*n~m7>pR6OJA$SZm>@QhOe`Wwe&cyf6>*g~R z21(J%PfSgL736fZRO*?i1JJbBfbcfVv&Wdk@6M6x^>8ys!c2c4^!sY$@qWZ%#vpKP zh;umwH%!_M(iY`_q~gXGX%WC>Z4YiAEiHfjPL*(b51)NnMf90Z3zR zp{}q3^iCPY<*k}TyQ_6kOtwUZe$M?dRCBc91Xe+3ChKao=(!VER}l7?fs52`@s94- z+W{aiqOg3#LZ6QnC}kJ4wx;QNfgRm;a}xl4ok`kaKWD%@oD%c^=)6@dDei zjFxjXh3;*sX|jPb@d9hr6t<7xD`hgw3?SS%Okk?eKkFpV27G^Q=SFWuo9p}islfcV zyd9O)j!5buM3d%1-U1N(xr6~k5*HyYk?7mPpNFSOXz~edHFg3iq}xQKE+}}BZ(e%c zpPba&TCqScWt#!ImjjSFH0Fk4L_ENrqt7e)+66&am=89jQxat$=|+IY45B(d?!=g= z>?J9dQ(My;bCuR)f(6=ziYw;fgtG*ne1?~fzmzN_uyXh!Zm8PryImtm9*!N@31*V# zztSl)T8N~Sx1vj>+Wr{;AnPC`seu8m5kq4;Z&h!BI^bH0=Jolfnf`jfS@V9?p!sx} zP8X4GnMQTM!)1NjrZW0Q+$*1Veh3!s=N0oGb?duz?`G(HUd~00^(hB*`*A_o7A_vd zu2oH?1;kyUJh++QcHX1r?1tnm=CTiP94<497b)EKHT)DV_G1ntW+kIIu07cL_3L~s z2MKNWxgYej1D(u8_HS+bIE0tN5iCHr=@4dmOgzs&u5$2zs%u$?x+k+{Fy*0$xwrCL^WVNgfB zXMA-#6bNcI4a~2ctwldM?;B)pYi>d=tb_e!!&&tW=ZV;7LQab_+>C|%%Kh@(V1;u zIvd}dr}k(}4p^F-yf2 z#}w=2R?de#^`e_>^tg{h*$cqd`AY+}1EqE=1CR}bdf+xQ4a9WYXejg_3yT? zPV!;^CIt`3wwf8xRbe!WeO3@>p_S`95b!`~k^#O#Oo1sbHk^<*@?WlkZ;B25$LCf{ zDPJ#4TCn!tL0R>YTtK~kLUUsH23pHcQR-rXSy1mvHVy>c938wh;l0hLT#SXkJJzs0032q}WRIYvAc0 zkRawM0OUI<_QU;pdDL57z%>9Z`x8A21s@HCir`JfgXso{N#~Tb=KF2=doRY ziG2X|-;Q=nf2npu45VUDPEJ-LZ{$dO5 z9A?5gP)WjU$dRXWKeQo3p^>XBQ-E;qv7vqc$BTfNT9Q$BFa}>FuzvuZT!uMviB40z z>CbOUqnkz$>3j-Ph^Q)n*Y0U>iS=p1go%Y=qaxPoR8y%C;}}*@N+`Fbq9oDI>7y5< z#15qk>aD%GdNCt0^7z0#H%}LPkR!m#louL7#7H5_EuX>_9nYlmQC-4xiin{&CN1^% zG*ZRvt<_u&owHRz6V%;KD^YsR(ft-RVXB|b>HFGDYrIDJpIg2CMKuhn+&j~%N(hK} z!z*S`Weh0yVY3Cm7>nvgiMiK{RhBX}$S4IamJd+p$AGG7r<^r);IJJxjpCOd%X2e9 z$(Zhaqw%Ede?r=*K@TQp_iRW^YrCUyI9QAO_0{jP^VeuVi3M*T9-wl$!Ej%r_umS? zgN1PZQJk4-GYoVh4p~x@IoIu0x$_@6G!~1m@e||ol!PHV?+-$l21^m#8ClLqt|XGF z5GNAVje;O^5pI}JW1wPLDnL>2)s>Ue0`+QC83v#rDq33e6UJ!iHn)bnV}bY+iLo!c zI?p*D1y4|0GL1*bA-0q+JDlBYKp%S=2}&Sc^Np0!_rr$hJbYZMK8GAhOkl@^Ai`c$ zh%dzHn#DQ30|RnSnkNihn&th*$l9SX&k^U|4k%9;q$$bO`(ba zA*T5#Mx{g9RLN)NA~9?cz$tPe>`%J1M@bix_8p9MeX@suo_tu^iQ1zd4@l)5-W*>} z|M_;?VeYH^MTunm;j9zt%ZmSb`Wt$zImK2<3Q}Onny}iDA{Rfx-2$2MO`a@4*;T-0 zbEKw$y~u9S`_-Bu-$k%^qFww1oob%B`aMHXny3KFTg8msbAKo(}FF9~QY7b{^!vK#- zGCeGcK9q`7|=-tVShg#m$3lc-5S8^G&hD$0sNHz0DpqE zUGV=A_>r~khu9sCTCTPP*GV?|Ag;&1D^YBH&miTeK1c}=0wGrf7Aa+mj{z-(Tr9QR zfX$Z1#^q`t={O)Z$?-bv_pMp*#h?Pu)sPXw2BE%W^>A-GVzpW&0o$it91f8GEq?gI zJM5L#&q)?<6jh{^Fz4ehP0lEKnv0~+fO3xtS4XwRGPtLr*p1?Yt}e(%edRgPX>Lp+zPIgCs&0V_h= zeuF-`f}ImY8dL0o10=>H3-@^-F9PT0<}8)oPx)P}f_2pe;oNb)0}~RKivhsj|L8-& zjED#W#3|Q=2@emiF&iP7YjJn(_zW;?6+OLjS1aE2FxDM_ZdNOG8eh^vorJc~tf0y+d`cX!@?j;>GTkSUzl_alr1)*_Z~&a~Yg{8Q#*CW4pQS+kLV zkqjS0NX!4?6P^i-4>`@s)g5~H3l7WcYUd-}gB`mDNcYI*urqqN4ya~w`Dt$S7l(_< z5qzhTuOHOfZt)-^TO{uLELJ)SttTg%FVlLQ0Dd&#e$*miUC+BrPu50)`Tg#&iJfBm z3yyq7DzCGq;c*{FSGFHS)eN3LpQ$urkNn~h4kR5=LV&qW1-fa0foCurl(sAFK5#}` z0A>CqZthYOAc&5R&LSSh_7URmyasgzVI{p%R#uL!`LYjP3d~wHjkJwN5_8Ao$)`#K zZk(QOOZ`a@6ff<{#q<3e8cZb0NdnG&8Si<_`g|grW|kuos0%Aec_X8B&&`3jE;s&% z>-D77P6UD{apx;!;x|`)kCqilT___vo5DadkUtEb>^_C~(zxzunER zWlrZKCxaz=$47;n`3Ct|lZ0fm-WQx9Unwpx1XawBk6#4N|W>7%&l6hn5;`XBaRg}2=;{zB6X=^Y_s*g(! zj_4KN8em~unFovj5{LybjpH!Py=_jRXhEXzeW+&%7@D)#9nU=n!rfeX3(#5L0rnG1 zmF2N)5*r=$Gkkv$Z*&riib0MVmlH$fdCW+XQjKcrJoNr6T0A=4k)Db9nY(2`G%ajN z-q(g+f>Kt3czQmDuU4d|mGYXH-vI;syM{DcQk-rofGV$KddqqoI=bR4V^dS{s&iuC zy7Oc_YW0HBvO+T3q%Z0fL?E#U-P?3vZ8fXudjJL*lZ>GHmxEfAQoc@;0yVN`;)1#P zA+RO)BoH0%LEGb`dk!}fGLG04i~|`*oa@6SVghDJHqLGe8X7d#>;K0*)6|k-0W|I* zR3dl3Smnd>&ADdR>Yl{2&1;9-&jjZqXO30+b;R4SU~G%}y1I`DksCvf4S-vIa0WCW z-^K%m1s^@!0KKV^b-URZv=}WVuWo(5Gj_g{9XSptB+>xf1#T7iIo?mzx8j}Q{^mpo zbjln^^arLKRpvuyfr*JqD}{%aZX^Xpd~F|KP;G^or&&^$kkzv9nA@E`_Os<^pBNZB zWdEB9BKdkK*rlH;0n_Um-($(x?qIHVE@2uV(H02gMBMw_5$J*(pl_={O_JXi1q4m& z417J0XvmN!h-Gu^B}Wz}N&-~5^12%b%88ZvWRa@HJZ5?A>h9ND4&$#*9G~|KqXZW) zDqeX3@%Sl#K!I88N$W7ASa}a#GkhASURqH34GS5=4zgk9OGwYJ?~5vYg_E8pE8)f1 zb2(kC#=I6y_^{(ga4&GXLoxK($5<=u{`_ayu*q!r;qJQ1M#;+b>}(+cU*UPIRgi?r znwR2eLiEUxx!Q@vX{~Nsaam&s=-7|c91I<)e#%y_cfW=|Cm`U)o$X+pf@k;Pmksr% zKPcwIno@3yw;nks0W4$`pXDX~zU1>kR5h|Fd>8{1Wm?9(tRM{18=iEZ$8Ti7kj~W6 zOtC=K81*EQ0>|#=9zj~f&7R(45{KoC(7uY_RleI+qS>2wQn_whO0rzq2lI#J8n=bG1i~G^}g-* zkMo|0ZS(mbkpqk z0pkulcl*`so%t1W`8Qx|(h)KideV%8a3bZ)riFBf3iO}ZDLP>oT^8xH+e@?E$pbIk zyuiqXvZy!a!iG5kU9@NlCiX!}DVVO{I}3XeSkLj}*6-UH71@3ZYan$G-&a{5NF!0K zvK`%*Gh(0dMsoaW6GKncL&_Fk!0m^-!NCrm!T}$gDYAQ(LTK zNB;9Kv&_ijuIY|QuY03LKv=7};NSn^H+^+~zbzPvU%lzbbi0^H(I%7ptRxS7!2ABP zDL*1n0ZdF`*$*%6BUA_(wkTqcwA=Rg7Tn0i=U7xYI`9mqU(hXbLhPpl-G{!kM-CP1 zGGO5mnR6paw|%+i6vD+3;NWXeIhDV-of9EM)KY)+nchC2i;aup8##mbbr^cu^YYkc zpQvkiyO#%+x1wQ4sS5dF4MNG-2?@d!v0;Eg*Z(5%H7V^ccD_RW(^lcf6Vk^qtLrdQ zL0wi47d`r>0PTyWqiMm+nIn)iYe0(Fa$yS`xJ-u#`JA2`=7sa?26_pfGcoT}tdfT{ zJU6eSVwLsX9Nn~xYa;@q&aQ%vI`qg}l@Khlgf}iZdOrFyuVo1X)zd{(4zRLCR6&*T zG-Spib4XZ&C;Xr~?HBT%#l9+P{a3!fR&BE5=F>B4n;!GzTtoXY@#}!8x?T>|F$%E| zt1l85e&{ck&cAZ5Zw{%9aIK?R;pnu4y&OImJE|LBc5Vv-O+Q12;qexNw1DO)WKmSm zBx(lCpO*9kzgbVo1~wyh??`9cijHQLmaj&C<8sdT&nO ziZWc@0_e{J&vVNn%ghG=MQs_2QtP8*=d6Hbv&?q?H=2_%VTJ% z)x$iY!~9p;jQ~%uSZ?(!Bw@Ko+jpML3@yD|)aSj`QT{{{>?1S+$SUcN#{G~NvRI$q zVd?&_cUVkMj79`geVp9frw7k9)&r9&JH5P9hu^XYD~tGjdWM4#@#X`Jo|2Wnx)Bb( z%WWd_4y9V6`XG+8g6_w+h9QJRZ}{x8vDKyLM66Hj#jRA;UlTd}m>!LDix5#r`mw>*aPB;y+X1@s z%U%3U`|_<`kAggi}0jE0&3n}SpK1Q|6uUzX1X*TsQ`OaRaDtGEemeCl&H z$FE99r%|?Hm@H8P-PLKQK``m;W%v{dd@q^CR#*l|Ki|BnfJ`Q`S-c0m6=CA0Qv3!i}30KdLDdL;g)$3D1=`k|OyP4++`w^_Ddmit)7()q2pe>L8H zj0aWh$8|ufB11lQ2*J2&m9jxKqQU%_FQDpkh(+8|NwFFG(sd(1?fiI0rfQo!o7eD5 zP%1v9j3hoO_HzY^_IGiHIl(U}c3^o~S44?B#(v!1s-BCnMhZBZyTk5o+FGMSmn>HX zxHH+k7H76fv|V%LKWe=ztBb@azgWHC=QF9Mfd*SE?5skjBc#X z)e-w^bE`7jee!sG*db&vXRgkQ z2r$&GJV&y`LSusS!X(;~u`#THuH6{&N*h82nPwy0wOWs(yKes0Fl^E`tJBL=IV5C} zfay7vycZ3tV}u-91KlcYaqY=5bq-wql{mNxVrV(uTrOg|2ZrI8L<(~OIeh$Od}LGb zj^hb|0@-)VU^O@U?X$ThLHZk^9uFA6Hanj+OUF_`7N+%p$z92ntBrTNIxKCd(5?N5 z2N}|$R!EZtICskL^(5lk#W34X?BS?oid6`iNkaW-WV8P7D_o5t8r9XE1qzw&Dc#!QVKfWh}n$Y>!57^9g0 z?pyAt?Xfl5To|}BI7*1a)fWSdbuj)|tsE!EM1!vZJG$(5r{>yp9@g^GiCeok1ok?P z%bBcyCgw2Z=|YlER*>~#!0(Ztp-aK8@QLN&>ed<&S7^Ad7^}XIMeHt6Cc6;%o(wSo z?0hGyL|JlQbGvak0AtP)`6+fNp1{mf-d=fI+A|WqZ}-rj5y95dd=M`$3i6I2LA$T{ zF7^sE_GMR|e_u&u8EP%8U`LN+V>D6v8_faqyrvUlcHO(qi3yh^&0>xa92Tb(L)xJ5 zZ?Z56{yJ(+Ut;~@%g~isT}i68An^Z8qAACh&T99QFZxT}G=<=c>=^Loq#jh^5I6(Bl!j$FZ<$YaSEwgdryHBBi(SO4FHZ6T~Pm#8&L+HPz z#zB+tf}VRp{0RrLbquXU%XMx&%(B_^ZQ_n;(7!fH^FOYBZ!g_>oAjwd_8a3Ih)d_A zJ#m}ntIB5*Gq2~|h)ITmr<@Y>V_*j>w`=X{f8+EZS3*zc8MB?=gll99+d$E214R5$z#Ry><9_HuJooayxbl;5re|Q-1sXuj<<1L&W$_Eg zuv^taJ^BWa+OqhDE6b&qHb*mQG@&?nAfCjXZ4H|tvj=#|ULMCG2u>MfgmOC4N1ij! z4a_|Z$A-Twq}3yWuRc?ii*)n>1+%~Zc|RleJK%Qmyer_5QcZ*R;<2>2Z>$4$F5dk zRW_5ELWhpN>h6G|N#ThuQtprjQ20z?JSS0u1gYm&UH1d_+fLF4{jcn|_^|XvDK}#t zS0lhMQbu+JPss1Ry@`jG8ezfViQ)U0-9V69%MwZ@sG;|R{~6R@{};egxNz&T-W2qG z*hk^i(9|1tHa1#MJyvRObxc|om}h~pJs97F0s0u_;bZsvn2OVRCTKMs8^#c~hdE-O ziRZ1H+R@aX7`MNRGXe`=iY{%@(sN}5IbLl{AmEj=))!R&ZB_4 zFNud2^a1yIL*I{MpKCbVR4VAS;Q+96)fcnQ-Z!bQIpcgmoSfRx^hjR`eKwY7q{HC= z5f}w7MZVG}yn@)}G*N=_dK$5H4S0dij>qrWM?Ck{8f1~c{GyxM!cX@qBd|nF&5;q( z`kpSLg$qLyh%thz*oQLo{%3v_oeI239AllN3rx-R>>-FhN4Z>Eb3FplNtVK}GPxk5 zK05qa%R?`H`(p?H1xSq`SLAx}~H+y1Tm(L_iv)ySwXq4|?zY{pXu;96Zi@c=z6`_FC(C z)@uu5!GPYQZ>^C;E-JA$BI#w=7`OTCA1`+Ayz{K}_rf`TUa+6(9F46rAS*j=Lw@Ky zw*K_HdnL~6hj7m)|9SCpdBuv=YK@4s5#mRi(`kAc7$^;}b%Ax>(29k*8F?;vwERwZ zfYwW$htJF0(`Al3fa<9-(zh$x05SJumsE^TzF-!QXKpYER|1DI(j2tS;{ap6{>0VO zr#iy;`z&G45oo!|>F~Z+>GXM&!4{iHB%~B^i{ZC(vm6U&}L&?n7QDYZ{%1i`qR zFW`J~hM8Nd?!r;x(rJoqb19U=0}1Lf$7kaU8Hk61+|eA~LF5WFuUZ(F07e)@`e<`B zM`4UchYf|dN}rf2$tO=vw#bbfV%>mxkitA(??Ou`G4lEKVMk(MjXTyD(B|2l3sKx9 zu79#o(KCL$70s*y=dS_=)2dkzY#y*demwVe%QEas#VdS6^Tl0g-=4dGs>`Nyv8Nic za^ySBNwBXTp;H^);F=2MS9u_r25g~X3~+WK@ZCC4JFcUfVN;^nYKTpF%Lhgf|Ao&^ z|^+C#7BdD*?(jU6P*Crg130>!y`{B z+E3u65l+lNq->-652qse4DX}nZYDFSx9bI1s$FQ~FNN>E!1V7Va;W9R^fZUTfLnqd zS4sIC^1_NK=t~jxKhyGX`TbXCAm68~1(N_N^gbSL#@TbrvQI5otRmc0L_M2z zicJO4(Oy)vamxa2E+O>{Bjd{cA7w)*B$J03-h_ z*_VmCbdO#tqL<@?nKF05vnMWr4h^M&xl)V`FR-_JJ9@1=w>zz)s$H(?^<;HoW>d6o zYh*XN@1tWQQoc~Hb3O$(JB8n+iq?Ne3@Zgo2UQ5$T+I1D;RULp^#maIT3Rxk!4qM@ zkhUlT{fm-YGiX6&YXxKKH8r78Ypo56GE{ zX7%u^qapp~4OXCA9w;8Pl&m$`4kOtTop{Uk8{@)L91-0{S0Up^TuQExx zWY6jD7CHUw09-F{&B7BjM+a(2-(c=EP_~*sE)3*OXzq_WtWu=SLaR4@o~5rwqz~YO znOjNWwg1K!MvkqGt{(_b7_(I%11M=QqYA9Q3I(vH1PemrLvl!X;^}AJQF%vECQC%D zTRB#4H_54JOiIujH;*~H7SioYfj4d~_E^)1m8;<1x)S#J+&4R}hsv+VpotfhhTw}qPj%iq>!o~+jk3|?d@*dBX@E%YtmRI=7o>DeP!ku%z;y zh_CHBh@Fy#WS(#^)V=g(vuIqfTAhFkaWX{ZJJBHdfM9Hcs{=cR)i)NFLDp} zvBIO%vX3>+feP+XmID8OtR|yg4I<5z7?N&Z1)&h=&{l{$L$3JKO(J>Y{}^ws1yS$q zIK{>!Ut-OxB->R*7N7_P-n~ab&!53Lr$Y;nVt@kR6hH<(6g^Wd7U_m$=47Mb?7zE4 z`O@Sapba#68~knZ*0Z_E5WX^4P30H0J@kr$A{V*!GLVn?x}>4?sUo>xY z$y6kj%cR22@sOL-ZTu;6pA0)02xZI$6x`kU^1s9b6c>q97%?szgQ^P_78Z3a^|?MC z;Xy^Dce*NjJWZL%)jpSp@naLuFVHHVT!05*x2fr(2i)&3rP!srl`}c$9RsKFx=`J~ zgRoW3cy=^LN%J8``nfHGx+jNyPg^*Ai`bFlvY5!s>|jpIS70A-&<8pKLbE88fCEG_~U6aEVnU?*FlFU>RWRVAF)RU_})3TW|q~eE~9L2SyVvmI^G&}-bdxsnr$X+?@sF~hROk| zl_}@|bi2|5VtBHTMqL%^r+O3MA|S+>ZBc~h;~I`mk}0Df$DU#|f{N%CqGCUFg^AQ` zCVrf|o7Ov4kPGMauIXEFVX>TD$#6}#Bamw^34d47g#cJi5p0_K#SZK>5dKB$t$(zR zXf^`4%_2ZX9G!`#YakGzJ2vo7PkdTNpz1*}hxrP=+I!)IVO?ys?Onx?X=3R_&*NdQ7F|$PjPQM z#fj`-`+D`$#YB0N)(qzQPxqP)R2^H~BZlRWSlgS0VuOb8{bNL)zDh6)eSAuR#D0fM3pZ;*i(4H|p2$qEm+z(E2jczNHr6fV$NgGsyfC94Bg94!=oA*+aa+Azr zMRVa6iu9rl#=cRX9nv#VN(kDkaCKhPYFwpXS!_fbNY@29(}qFOf zZoavRPu=jOlElr>kA^7$SF2c)Y+XmgYO7lO?OEfb4z4E zc$ImYk(+vx-e@-y6smjn`$!OCcB4Z^Z2_ARXa&5&HTTW(eQLhie+Di{t-i{zod{_+zUobY zwRO0)^8Hwu41nKTFKg0#=Iwscc3NFJCN>XMJhFuOH2wXEtyXnF~Jo$D+)*X@d)>L+ou9 zPtM@y)5F=M$wBP9%E4LmZmiUGwa8Q(c8+-4vzq$e4Gg91xRzTI4B^8V00tqf+aDQi z2Osjvi(3j0uQsMB{mJ~GzwU4aZeihsocN#!H!UGa^?5JH>B7&PvuW$iVX80n+BlD( zUrA%=1X-uQrx`g0PA-4<2U_Q7)?6hK+}l1PF3_C39;p}mD2Zo%5>8<+r6lMgjY&AZ zuGn6%F;Q2!^yycxIoVfPAk=LZJp4*fP^YEMczfWQf%M2SX=Y#jDWSrR3lv3io@vX%uI3zyA`U@;ua0>W>%Q zchW_(7T(%S2qGL!J^1Dspg{jlyD)LzE4HH(<=Pzx+3v_mmVOuP>I?Z{BLEjqZlDhr zY68c?1lVQ8hK(|B)W?eY2cXGwBOVC7ynac3B#ZqlYU&wL<%;!+gbiuxRUj>*#JxoC zC;!JiDqMnYb1{~pEn#^eEH#ZJ676CEUVAQ|CL4r^iJ%%{a)Re(7Lgl(p2%^XFcqDe*wY@<;x-K?_h01w;4JylS^K^Y$tC;3 zXoasE2hR@f<232RMLFe_P6N5O0CU0>F3xe^leb=98)J2T#7Ai@AJ!9}xlUg`08mkX zDWIbVn94)mr?S{(Jr?BIV?Rjf9dP1f!bk*b8Gd&p>UwtJ`u$aY&Ef7o&6CdXH=p(I z;uX~I=8yQeI}XpeI-UX2iP*8H$_kb>k|k=zJdD#prz5BQHZaic8QtIKi`@p8e+x{< zBye_q?>)7&K&LL}z9GVda_^!PH8-6By%eLV<5Ie;_qg|-4QWBX6K}H*0QS&gG%E}S z9bfOy#(-0tLa{#{+k~ATyeB7>*2{dq6+YDLx|WtO^aqdG{Llw@_3?Ji^`s3#h_ z?||{)0J<+nMD>NOMSJ4uO}@NdDG=KrBiytTJLxYg^r!c399reRlfO?)C!(W4Vj~8Z zUvuoL_Tzn0bB>hLljy+kthVs6f@N#5PHi`Alqj+62#7x_x%7U1{V*;zkD(vZUNcy( z9$FPXdb*5v#jPi1`RhAC9iXP85ZPu2E_j6iwbCqQ!|nGA1?BabPn>PnnkA=GUk26b zT~_EO|AfH56+VM)UvO-j&zVbk_Zu^8Y)+TA5T7mm?Sk@;V>H+Fx5899;p?si8}-Ux zU03R|PxhEweOzg$F9~(rf`Y*4?X^lypt;4*7-o)nPvoQL2RUjC!Wf2N{Vqk)_Irj5 z_6MncTC$`_2tt~SC+-jRj(p{nzG)p6_W=(*v2l#sL~CNMDIsvPM3V6#Kl0W==@MDo zWw~5>PeG`4$LNxZg(f>w>aVg5;j`ohQPL!g4ODw@^f1ep8^c|=z26c)X^ajPvsC7@ zd3Q*HE(M}J)ThiH|5PWd)TGjvxmgK*(7a5v?rdFcpWQh@R7EPS8VATaL@6Nx;ZY!A zm?*j^A+oGL$m$&~;o!q6O;KVY{h}r9kT8t7#hJcLkybEGS&K)DpzX@#8?(M6KEwzP z`;GmLK{0fAq^Cy|ohIf+gi6xVs~h#M#2fk1e1zM>ayw!Q-wf*qv>J`k+qVV1$JxQr zix>0VF=p#e(`xVMW0sch-zyjTjM^F4u0yhMuwc22FD&}zTDY>Na&1BJ+w9O!{hs9c zNUeiQ20s0CnSJTb`(2<^aZ6h`fj%fF(W%X=jw&zq-!+hRNsi$D=AHnMk~LV#-@PB0}Cx-QXD2bVnVf$hpsbW%?b111ifU zWa`QHLH<}%lA*krB232^Le}*H;*X_)YFZ?D`gGayuJ_B=w)ug?mv3`J?WxZDs;dz6 zQDPqVN9ueUPZ=*-uPSZK5TFnND@jEr27|B>Eh<$uJzsUD?s5CQwYXW?Yhv?OVIJ<( zO4bp&+|2^rdcG={*ZMO8qzh_SH0;77^VFJk-n%6@Yoj1y%$q=A59{BPPT7tE(;jo8 z-`h}c!hXi8Mxr9d*yxUPLDR~^+I@63xG1dA;pNCCJG2Rti(fbAMhKDx8nmw}1UT+> zk7_557g{@Vh!Mch@y>Zk9zK@;V2NFs{t~ajQbYAp-ryTdP&iIJxmexCe)K*STa&0Y zfpt-R{PHIIXJuOyD&f5|TM1b(R?FMsX9a22h$5VI`W~s zkQC+6nb#T(6{$o>jNReu040yur-`N@dkkv&Fv;jPl91WslcJd6N=YlS?{!TcZo_G{ zKg14~ARY~8v&{BlC(ZOn5y&a?$DjK#VswfdOp|{0-&+Dy&(+-kD*V?|`!A6!#YdwK zm(66$$Fs#_2Y02;8jajR6>DE*sDZz9c(?#G&$5{{b$EGiM-|N3Ig~2uX^Hu`x$D_a zlPj-P7Hmu)6_A`@%tfFt}eT|o%*@48TuyA|$LXKQLM_r@=|Rxxa2avhTPW+O0sr$Rxc$ zVh}XR2RqfY<5+8zzT@6e+j0REroo+&$IGpOA6|2rb++{_9o}NcSR5?3>hiw5`8t5q zSRCDygPeG$&-^1{Wc$8*Q)I*X8%U%ja4*QxJcd!Ko$)g**QdsvC;}I%E`>v#wcMCw zuI#9zPyrH>MK%ny047YdtP*xM8A?()dn3xiMMjsCU59WoiTRNLkibB*;ITGlA@i@6?8*8x&N}rvUl^YL-Ots z9@$*)w*s33CR#KCRBEmt6?a4qz|Z0(=s@`jy>Ze_9%bZYCt7x>s{0$phes>tpjN>~ zi7YgZ1x_KI9yE)q!`yNd(r^^T>xg>LQxV!v0I{&|dY~%-Bx-a;#!+F;Bp_^x&m{0k-_F=6Iie%B1b zWcR-Oo%wH7Za1LXWL>H!%^2*{m{&>~1P>_$8F{i}zCr}!Aea5T66dt^`boX4u{m_f z*Av#e-ZRZku{~?y0|9Vir?bl&{_SqfpZ!%QOJA#B9?AAfl8D8}h{VI85Hi2YV1Z`1 zU6*h#oc0a9s`IMAXV`30po!?pWj>f{{UB#7YjSL6>H4|4CoQ%Fh6KgpoUd<3LDT93 zgJ5TvDIW?Y%KXt~0%!*1_L00?kg-8T{QZ?4T{@v!u@O9e1UQzaIKelv)acY+ELDj7 z_4-?P??8fAXBwnWXn-Fxa3`vk;1Uf}AxG2N+4=PMk?&*u>?d;*f&sRn$8wbJD_&kqz5nWQ600e9Gqv~|ybp$$5b$WPV{_T7K#z3?Tooj@- zjRB@wC6BnkYwH4<>H<@xQK`7_g>wdX(E%N(lW`N4F`YaUU>RF35$Kmls{w5_8~2Mk zQ<%SC{B^)o6|yZ-gfL&w^r7>A^po{8tmG*Bz5oh;;I$J1oK+Fm6mgVDwSP&3S>{Yu4|SFH}DSlFy;!AN8P9IlHU z>ZZX6-^1t?R5i?vYIf@AwEE; zHZfw?=9kwe=nxd@PCWcIM|@Te)G#gEgW%Lf1yjtq9eUiOlJ;)YQ#Y@@`Mgk52QbS{ z#n2Y5E|B?JjnonCvVdZ_jgVlM_;2Zib?L7I%)f$z^Qj4(Ckh#(j!dyD;6c!DfQYkuhmXf#Eubp*Hv)S*uLFdd>Z$+csb2JOVx!wL2i=# zU1@zobGORgAdtu>GwKONFt}vhVH4m9f2BSWr}zj?;=Gk(GhRF>%38b?6A^-3cbs;~ zXBcb-cw>!F{>L?wGIm7^G6E_nanmn7rjYxHO~b>xUm-a@%d1Ed8xUyGbTbO(H}_NC z70&6e(%YchS{x{s%N>lZPtDw#Nh+qknp@|!rCFHNGCL^iq7)|f=Vlw2-{FHq<#Y4G1gnN(& z5^j@^6m~aLx|HHS4?UhdSuzaj2%97xwR&I7yDuC0#QGK>UsD079e*sp0)s)lEyIQ2 zJ2gqpWP*@KN``VCrAxvo`xG zjGr+-SJ7>sjlNcKG!6XJ68b{~^2KtWXR$f_g;Xm6XrX`n?FTa1Io_<^57QQ(>^^hB zLtFi+tM;c%M;Ss-Pv0kL1Syt0wDm-!&9Q3m@<>r*dydgZ7N0qM<9;T;TN|I5OKYl$ zgy1Hre9iu`kw?pu zdtbapF}eJ9iY1Z+#uKe8f!lKmy6&aFS`BcIdEWv(fy00m%l<*X<%Jj#c>VqR!n$at z%&_XbPDNFXBXs)*D>c4;qNda{es9j7%s`=P@a@eI0eC;LfTmDo7+5yoeeN;vnEr4l z3kane2Kd>@>Cbint#mD_ncZp)H#KU_o)bWVdp+0Q8Xc%C;rN3ZUIYO0KN(+lFlF(U zBkhdb2;?JG^<1un06@QFbA|*a$~NR@Nv!zjwDCkgHl5qP z1>&V#kn^2(fXXM_49_XWqM9;cgpYv7v$c%uNt~8vaINuK&4oL7|&9 zQ)h$Vzl1y@2$X{VU}jJhN?Udlb)O0+;=E(92R_@WSoewn5#4HxwwuWaH%z~eSkIzZ zL(FJ$fbY|I~&ULRx^r3o=~Y_Qvino3M| z`jb4}jyC%Y0oW=Cm|qxXm)sLsBA#+hZ!ml5xYK{msDfZIAYyd*bj85!+E@q@+?t8k zc6Gr3A*E##<@=W}`5zBwR}zd1r!|f5xaml}zyXbRnt|yT@+};N*H?|cV&xr@+A|Wx z^!;#(#>U3Q*o2!eM3@2K!eMp^@-Wazhlg%Ay@L=hSK#8%nN4!6Rd3*IMYW9eiSg_A9^P}L0 zzAU>rlOV3jP}oF_f;wz9XE87~{C~6x{st7|rEM{9n9{K@xFIT&t7T&c!cy+4KGFW5 z+k4M9_roYoBMIhd6G(^v0EZecf|$RwC>!9?u$Ph~2_O%A)Nk5cn3^*-4dwzvd9F9& z5)DuUt0oH#&@Rs|=w~Q!)S3anRztuqT<{Y8MCri|-Qo4o?17?j=y*z8kYWk@b^FB+TxCeH6t)gopug}bfwAy^(Cj$5xeFecIsaU$(%aS~{I8D+ZH#Z1 zKN-{>=~BB-`ag#CtRNpmGlYlnCz1l6=>v`3%yL#OO@S+;RZocq(*21I(&2x_}) zd{nhbYS2?a@HPLpR$qzdWX;~4=ke!6h3Amt_hCY!oC8I~EBEx3&{1BGtXG|+fQOkH z9~VVcUP*vctg?LT^%p@}urM_xUS?LJ@6u7SD<-o30kSjG92M7Svm z)t&J3Y(s2A)3PcFO|spl&a3WY*Gazhik#ivF|^EO9Rp6r8hyk^M}xz)V-N)+yp>cJxnMm?35m2Ltq!PGQcv``)drHwy;Ba0=_}sHL^a6@J7#asgKM+9 z(8(Yker}iW?$8l=>Z;Zw(IG`<1H+kug7&)BO-BpdN#au7c5}1iiK#*dH1%eSIxZ!q z5la6KCHUKZj)Tj9S;@p?b)}S*ABSPkBM6hya^GsJkFFn*EVuei}G(-_x=A2i|aA-<@K^RjEAlx!8){Hus!_ zvpD4r)4(XOaJ41Sa;3`Pv_QSABw&yXfvVeF38~BflreYU%zB!sm{}u3pvLiq=2g06 zuSZN2p6Hvm5sl_KM!-A6Dgrv%{hl1@B?9pCu_b90V6_uqFy9J2HqS+T$Zw-ilU)yy z$IvU#?HONE5D_Lu6~)%fhv7hncY3Y6Oz$87l5egC|^+0f#bSV9Kkzzg`qyu6g=+&7S zIi3r0eDG~V@n;e?ezi?pOLwTZN$rmk8#g2(+AOaMJJiKWN;f>k_D&jqS!O-QE&V<( z;ofAXd8Y#?Ah^5(5NgM4szbm6TjwC=7Zq%8(4wrn2>}pw*-Gx6pD$5050!75w-lvX z3|o3;D#hh@tuq`Lj}q>nO^&7pjhqG=IOQwzQkbFtMD$vadR5uG8kfP)_(rsb&Q}R9 z?a)9tjdg8PTQ)E%P0iod(dV&bz6;6RgX#GKa$&MX_fNGsrK~#HpBK6-3YwKKKJD@U zVf%aTZ0A5pS}!@eN!iWZJUn+ftTCRSF_}+7Nn$og!i&{aa#4Y*#lo&hAg9kR@*>MQ zBTxLyAf-&DR)T?mC{1UlSz_?U0m4vV38f*9nMx~(`Fq3F=I-I|gLp@ekNcN$*K*75 zlN^&A$G+;hM;+dGOTRlkJwImgU8gf{%5V}jIxPOo^+xvXmPeD&K4FA1;Oo1o?b4i6 zCuXHMg7=xw7dX`MrWNvf@ccuPInbv;k`hg2c|MdtJ54o{+(sI@hpo{J;TuzJ>{kwz zufk1egYxEnErIm&8bZC#6|XcCZTc`#xq^l6^Q$W1O3iZY2XkxHdN7;DXbYBJN1Iud)& zDIini@lE;Bg1+YNaH9HapZ-gp-{;zYeD>LHw9GfICpukdzJLcuC=B=AU?K&5uYCC7 zytmS;I;Y1A&?}gcLlJ;1J+HAn=XM{k4m(d0*cPP{V%*XbGo{?A`})Yv!l*i5)e1y) zoXmL5%k$T}lHU}w0X6P5*X}RRFs@3JCGj+yR9xsUTyy~31q;76H&=5}A zF}oiVk@nPk<{mAeq3e^8O<-n-L%Swal)${)y0}o@l1XRH`F6-zQ&vQC6K^;`pm&_m z*Al;_m{88iz+VN!{PpW>kw7}vo$Bzb^ZGcu4oKTb(l~8H7BL#UY^1((fSVvU4*&Gj{Wn$g-;p;o`b0=DjFK&`V)f3(04mZT} zQU>(D=Gn8)$3O)lq3LL8-J-ug+zlnM{`wx4d(r#;DQ-VK9`OS*>Sax|Y-j~(N5;|o zgSnwKp5@%`=EEa}>YUH%g6qz_>hs7W*VqgpD(vX+w-en1+TG4q^~vKZeMlT*5kH4_ zr4Wrlcl7-;8D#f6QV`IMR2Ys#Wn}%EGO>spVKvwWdRatio&_qnQO@2AJ;Yn)gNF`B zdLXhSxx{1XlUfMI1=vmsGUN~j9dR`Y)b+8H>a5%D9@UmHJK%Da4T})EHi5I3x4isN zD2ebX#evGQZfL5A$x=8B2DG=vqY)KIR2L$kWdd(a>H)92=*pq3SL5`snY`PxyN(rF z>noLtO=8mXbeIrvrWR(?fO>JNRzS!2PEc1Nfh0rk2iHsh|GUSF?x?KX%po#sLXtdZ zq1o}(h|V0@bJKaK*p*BDJ9nY4@=maoh?p~Tf7DJGmZ4UX-H_R%te=}{ckwk`*ys87 zHdi3nr+<{}6k#zZ5uWa#kH{BWp3e}Y>St?q&<&rP<0}eER7g#H(T7t}_JbyVxayg7 zGPWW_ajy6z!O(-G9#=JtA_}Y*Ohdo{rQ{~~E-V1}$AcVMA9<#&roDhJj}xJMAL|4% zEx_RPBNY8pDeZ!yWlLp2d7y1!(NZ_gSFZ%lYPj-r9cfitBCayQhWqtvO_$c3n?!yZj^>LgJ za5iAsw(=o;5TB?lz)MNnl*F3l)pqTJ2PKbBA<=gy5ua}F8TgW0j(wkYU?Q*JD8m+U z+tAbcjyRz-NU%`5$uTg8WRAdA;fF^74l$H4fmK-qUP?)Vrl-@@KE9crbYuAg zM85%BvPsP*=m$4!Wn+@8n}@dFqvwL&*sp9CY6)9i>B9*YjLw|ZpUybl{krCX5ASL) z(e{7JnvxbuYe-R_rF@S5C^K9`LD|8*$;4w&j^3*LwO6K;N-M$1BQtT{EVy!*QR>@D zs<5a^=FO`(xftZa`D4a+g@w@*JRct@+HKbdBb_~{9LWAoffId16kRPAahw9P=WxQ@ z;ClAMdbL2a-Hkiztt2lF8J8+d{wYu-VCWD4u^e(tg(;vSk#(@iO51A)IyL;kiwIAm zBkNCU3WZ@%Dl-%&=JX0RV$e>nl&@7WRvp9{{^ABZfuNY2ptK|Cd=|I9yiFf9d*<|= zP___ej(b3h{k`H;(DMt(aS6Q2AdzMXko$sLuCAQ=8WZo|$`=utP8DSqe}^G~$v?7>VEPKF(6f@SZD$kYeh}^p*$G1D zQDdM%e-9Xm$2ecJ$V(H)x3B#}rDcxjm{4!99xbP_?&n1WVigf$t`xMV;z5-{H&Rs^ z$4Dt}vMDrd#zmB1QN1j{#gU7WfY+>RGAS&Ldm-5-Tfv5;6Z{w_&Ihcz90cI5Qqu6Z z?;U2{#8L(FOlqRL1~`afow{p`W+};NKd=tc5PIGyyQfP5S^5C%F7ZH z)`qMm%ueyOFR3|R<%bZ`;xJKxBX9`+JIwJ#4M}GKTkd&FK6+fn`BW#|#**}I+qe|x z*AHc!IM-k{5$W&cCl3X`%u`bcIF5|tlDri^24SA^$xve^d@8(BF>gLqZP!y(_{O96 z+ZB_z?Sv@A*Mu>0fE!oBF!aJ-(`Gm*hucWAI1X#u+yY}xbgf+4rFrr(7( zk@6aClg~rBJh0sFw%Dco#Ov$hmebgbU?ni!;-nVi=W(e6oQQzHcgW7Yrklj9<_Zii zxAc45W?)xF(*4?$PYT6D(_T7Ntdp6ItsdK%>q zoEo~3mv%T6ae~!%Qhxq0zFV5#r5yl%4Bsz0R|aid+cFz>uk>i2c&DjOcL@$OXdeJQj#V84SI{swrL?9 z8_&D$C+rI41vOqC0TISGiTBvbC?rs~n)8PKRD z+8kA^Qlw84x2AZ%S8^J=F{Ck3l^PghER#wr4987*JM5|7-JNF{GAarzw%wsFES)PL zS+Lm@x2n8H6v;(rc`i<9)EUe|=3nQ$;Zs#vrFdU5^yz^QAX3S9RK68ZX>m$_;R?o~ zj$P-OQyoNYQ84AO)gzjWA)SX8A;BENXoPGyvm)^#d^`&Fq)$Pe6x8;Rp?=rA`rH=~ zzgGS^B6G9Yj^iQD%!1u`G?rdnG{vh~p(5$c6a#(YnwgD#CP{K<)egoLE>a(TT&p2!z0krt}T1Vg9v;jhd@w!Cwf}imdaoUkhMV|aFRlv4)UGPpxZRv zA@BNc`%0U4pceB(b(66g^`-{8&5Fg;SKnINFL?2uSB!B)I;(LN!x~265@f%VW?oOqJL?t_eAdOlu&>{v?iVZLNv|lS} zD%J#1o6_-Oh*^JR;ynm4WZ=Wd)Bi-1V%dz1Z0Eh10EF^wYVqh(q6MAJ)Q;XHx+A}g z9xxuS9yqY0*c#95N&dPs1qh^=3`7UuO_KQhn^O=y4!V7LpwQI0_7gRR$v#mVK>h_N4zq%2L50-N3Ts0p{+Htn_iNKvjMmKqk=)RwRlAho^>Cu`Ked4E*5nWk<3jw?E6ah6-> z)Vb;9*hI70p{oA71}RaBve7a5$(YV_V-M$N)r75L^Jyw&57fhZk-P7%9d8|pDn2C8 zQ*l8Vj5U|I65jWn@Cyp6{}|i(MbyCGhcvHpIj=98yC3XYOa~e3n2I;s<+cC}_3N8$ah$Km`yeB{%$jXS?bBkk43)7{1(~SI~a#8+G*5hf7Cf?fNKOi(yOSGvlIttv(o`uJE8$vD+HQ-?PY>h?h$R z4-+c>Q1~XCg62s8{j^`pU=OK0d-TzETWO1Z>tIu}Iia-2lCRjZIa-93H!zDsV%i=F z7<&k#HW-nX-h70~B=~b3>BSU&_G`21INh_|xqR1oCI<`w{w|xF;AytJegVuw8N>7DeL5U8+=Q4P@Qy3108KPCBSHWM`=#HQ{i2IEkn;oYhUf zEwQt~@yS2>om%MtjH0Ha4Hx%&r$EccS^tbB!8RmSTF20)5A9Esk>(!Zj1@sY_EFH-Gn^{BgKg)HV3z2R)D}M`C?;dGQ)SJ)y zQ`)$wa)s-~x^Hz?qbZi)>{fuWE|@XuJ40-)9R1Fi)tMo!-j^!<(#zuus!nV_sQr|< zHYvvYub&kJ9625$*kPrL#$spg+cpO-b#8ND?Q4HWZ{+kzL1EFlMW+T;Bs=7_z4p2o z+YQz}7B{o#SEfmdhQ`fY_k+L}A#j}oT(7HOstK)3yqvWFw@WO$;3fJ$1>}Y)`RcEe z2A87-{*6UEkV04mX-oFF)~&m`MEWa;hNt6U6ONo*_F)+397GZ$kH%_P>1Lj^m8~37 zLXV6)3;Q;?E9sW)r?!GGQ+6ddzKB(e3w8}StI!HpvT5j24qu`@V=PV&>V2>3Lr^nt>f zSW+P5y>8rf^_wNx^M;T%*7hILUvSU8)YuYt_&VC{Nx8}@yW@P~=EE0E(WgOtddpVEW6&LE*t<%q1S2)S?I&L(P7&&x zjt%KjzebEp<_u1@ID3~r)WiIYg*Npt>Za2|^_gzj3UK3NR@4CscmS&x0?feR;D`cA zQeqGFchVe(@6rktZ0DowM(U1^%YQx?N5&&RQ)3`zl9E=N%wLUKP6!hcK#4?(2$BXF zcHJec+|n6QF6a2%`XosQ#$?@*3%Rt|m=aO3{)iJ^%D{U06n0ZdImB%~XY)PC!ej)=q*}M;#K=< zs)aflxg^%i-Vb-3`o^Y1%Jb%XgyQSqC%a4m2YFNWZk*_!*7}FeNH&(u%kz|bynfu9 z8Z$q(d>)`ZQ~i?~haS?AEz0t?ebw1%EO_i!YDH=G0jDA8+bD2W@*oH##Yty;0wAvq zsCPMhnF;Vjf&k+c*%ONNh8Mcr!& z3xx^1lxhah{dy*OuZr+rq6X0v(WOD^coZcm4eCq#FQJw^uNI}NPZ*H)mBS_A%)Adi z?7bSC`_`*LqVai6-m3VF&4cr$FiQlEcKQP3UX}&9jHa(!D1QuOO`K(nF%nkwvr=Pl z)ng%G-VvAX&P-o3iR-NsX*i@qVcrC@5xh|6Gs|@i`m%rc%5U@XeWIc%eseBx3-49> zbkb<6-^j}~f4)O@u!7YXcl-2Vy;p8?uS{GQGK=$ zs%_bx4&(sur-SITQpo>NZS$yU&G2ID<`X~9ISoA2(1cg|qx;)FA9gE+;&@2v_)o0q z5S6fMXWKmxyUjKqrmO8gk-s5M3jFJRL2^oIk7TSyL{zt91vKJ4#A-j#+Sq0y3s2fg<=n{vO zQxi#<@u-A~Cc=L@*IB#aT9e)p??qK)Cx7%z_}OL`YDOau+3>2m;%!->5{q2I;VY$< z5D~VgJT3XP2ejuPELesiXB$#C)^^Ls!KOcGiz70l3Lnuf`})vRWg_w2dv#{HyakFP z-YK@y3pj@azg*GvQ!xE{YJb2(*pPx{DmBVaT$u1kQ7?PAg5e6Logoy5$$F^Q^qsMXc}rgwn4Cw(ehPXgOheLjrPG5Ok#-0YJoY%>g`F$W@wCR4C4rOs}ZNVFHQbpXuy zaKFqH&0>E!;48F^OctR<7^C{V!9(Lz*fWEv>4dDi#U&nQQucje0Lv?xE<47$wLcjjCS=wb9J9ptMlggt&Yrls^BlQF+2sj6O@?hP8~<*5Z9}yJX{TP%Xu` zO$QC8YP<@ujk z!WML(mJYn%p!|>Kx#2{2vj_6`I1dMMRG=VW!aR`FHasbfj`*9`wYC47=ggKs$ip~y z+I>LmZ~d-JAuOwkNhyOv-v5>y?yo&11KU#=lIg$pbSkDREEnF)#6hmPN8Bq~@@Gf? z*^wA(0&)=9%R!62Ll9jxM{rSlX_+EZVuiwpzH1)z=@Wx+TUG8)kS^TmiikP;mJ2+D z74aGG??Zv$htS;A{tXNDgu+NXoLj}+SxZ?L6q46({OEyS&@rJ-)z}!1<~E&uOuvBVS;={ z^Xpm9>JXLvD`@~*rs^-$$1Qu06_HMH$J%&oE!Q73Qf?NA#*fR-XUR@C`Ly)$8d(^o zN&f%twd;sX1HY}jw8w$z3NI2`lq#C!?QF!qfa%#OvDT?7kCAWc;gH~S6c*%u_;(eqrE zLCswLo5J$JE~w+XX8jkhq{em~T);f8fu6G-yT($YkZ_w-UWyECH|m4^V-M+_<+97HKf#s) zY%FXMjW~$jrebG(pr+@`keMlQOZX=l(10*nKwwM!6UHn*x9L~q9bZ~JL+J3P1Z_mS z5H#MrX-lg3Qx`bWaDU>aLmmz;8A76+gaTG8M)cd?DenGom@A@CLS+Yk?u$Efqkh}0 z7Yp&j26TJ*L57e)SCnsB8tug-pd*3IMxq)g+piy)CB7X-iy`Zb{JpCB0b)+pVDhdi zSLHL3smASRcScmnp{i6PUbW~#Uxt}tZ8a&6c@P&E4 z8~ssoS##vz6n01|C_VkXW(w~(wUCbSrMPYG0of3wcOik6(O!Q4D2P>e&K z(N9h985MmQKqs1Q0c>E2WGK|%U-%#;`mM;k#p^AW`Tmg_@0+?r*fp!kyxkY>j8u<3it01{pkcdXzH&@duT*{z;VYu z_Sa*Jd#J|5rIn`TixknaK|U^|30$)e?6i&WT{fu3i;9l^!XmKwh0k?S& zAfhK+ACuwjJa+W~W_=uUZ2S}6zak8zbPxd3#QZC+3FV)O_-iO2AO(QWU1)~>dA1kf z1pdnm9XOZ|d6f2q|96{!pIv~@599z2`~T)=y7$6|sAR*n|9pcd4HFS3~)Hk5N z{~zD)d)NK$ecyZUa;;g515^9#^X&aR=h^zo%Zj0+;-exUAfQW#3o9ZZAo3v~+^c$o z3|~ndQ4d8xKz(i^BqT2(Bt$B2V`XGwZis*&?i&&LQ2FV~b4WwXRzPtLJyGP0tA>D! zm13%YNAcluv7NBUs~28h$;f1|Un@UI`5`Wktw4`-@4@Chl>3s8p9_dkd`hi%oN-;b zT$!qBumvrH9Xq%V9(q3QTDH;GyN578ALgWuF(Q5KDL`rYBse4hsnqjDTv%J#{;u_d zuUBo?Ljx~7NA`&V%CxV+7Y&lHS?NO%5f;6y&5g;ZFy<^jcXMfKKWQexj+By_Cwt6- zoqiB}4|_ys;j6ua=0dPN2Fxa~A_~1(6JghYJr4IC0uxRaixMZcILUj8=83%@3VV+* z-PGtpiBJ)IzZJS@P93uuz04)tui(eNUd7u7$+7dy%V{@60g}~o+ednaBi2%K3Q{(V z_B{BbuhS~W7J(z`uCT>#;&B1uks^ZcJ2%Afdd+CKq)~LyHa+QznY=Lj9>4@1j@K|z z+!IHYl2Wf3GveWh$9;w!^RrZNM*GDeO+rdm&(QD)(|z47jdwcp-F1K*fyWm*Y>bEq z`WguGWgf$VKM__1mY+~uybUXO=m{n9Jf@dr1{l_PYftJSVDBPwV?9t5z@SD%H((di zMWqjkiTC2!MZTv?H|r^m_0Wm*nZZXsQryK)pJpFXKYW|?oYix1mVOmsdX~8o+0yIf zYgFQoD6i4AJs%VzsgOQue)IGzvajGk@cmTeH9`6|!s1VwF9FmDsNQ5rPSkiEpN|F4 zBt5*UWdlRD3*9OK*Y?ruU2nUnjqpo8x4y@FN0Ey?f=%EV@N2vAxo(i2MiJkb-sV#W zY@Zh2`5|i~PDet5sL!3P5p%M0jB}#agO!d>Pqgt1{3{?2=NI*#GkHQqmc>QrNWTu4ZDax@5o{(TegT-H|g)+5= zJr(I7iwNxr&JUxM*lAZTrXBYt6qcnVAsr2KZ98eVqJHW})*AXmTq2n;iB&OQK0$tF zum60+;t}Ve?Ma$MtxMkce2hZ=rM0%M zrmjLTWhVJ5;|r>Hq+_p~gsda|QfL*oGJgyanlc=r+WUDYxA&VH6HaJPNKCw)U?q}L zP3GxOSvxx%JbVNDi1k)nr%jbwCR1?rV;>S?tGodx(|f!x-%7qQ{d%Y;p+`6OdhW8B zp_#n7lWd+Wl1z`xnJkYig^WZvCfOmGDcMJuN0`L_N2_uxZ>wT!pug6$INS{XI6vE; z2S0oLfWe*=$`rM)9K?qtAB)pVN=k5x+fa1ADiH6HVoIe?OHT7kW0dTc7)OG))l z14sZts7!g$MO}(UB(`rv1%D|}s->$N$s38NNQ{WFYm~n|E+SM2q`+lVr5~lMAO$e& zP$tqq>8}O6k{T7iDsyJ{6%^)XrmkjG$`uKHP>~RBm!J{KQdKkHK7Cwn0`EN?LFKwb51REowASJj|oP(g)8fznPy zeJnWo>cgcgGAkm-CwJsJK6}J3qZ`thW5dRL(wQF=cTv z^Rw?&`(kc;K{|dqQ@Tug2|+mfXA90My$uF`>Y`xXpF5|y`8fC}?F?5VHvG+Rk1)8qtt6HA?)E?n)t{(?C zH8tw_2nCV<>Tlf(UZ@O9#ern?n>3BLIcL}=qKzAdNmX?!slHWBFpDDCT;6mT+v*qn z60k?WGv!qicCL2zjt}wuZz;&`pSGrKgT4`6ToTtXS?#295MZDt1qB+8)+DB!N88G6}SkUND z<4`!z0H}!pul+d*nQ%?8)t+#X7~;GoKBApqs-|_}`o)*dZ^SkNC}+bU!6kI$PrxU^ zfmUdlx=tMH<>PZi@r3AxTEEisT4~Oa`uwEgl>=peNaD6YvCY0}dl=0!%`=)EMR%p% zG?et#4D{5T^c}gx_QKv%hlef?L1I?v(#r{5?eQu+IgW2?1RajHBPZiaT)8`6=ICL5 zkn2hyDJd)QFNSU(O-@FT$Am?&97VLKc2~Jo)lTiXr=Mrni+T_p9nFI4E)CCtD_@qU zyGDBe?bq)bX)4bGdN|Ucxx|lvuiqKJbGjfs*1c#d5_;}~?}y~i?3a#FLu3gsdcN|k zfv71z1ue9qbz!SIp6ena=+qqhjBL$vFBBy^Oe@FqdrKh=Qu$>-t0_!?!1FtT|=8^ zC}F0)4||-cAFq$gZRX6)D#}E45;GP!n`bykawljLhc7iC5ZE8ok=WZjG(mmqJ@=*AmcdcE~LzzpB%ZfUG zVt={F`AC(>gBjm?GpAk`=ylUhOPA!j*c4#D2?;@fK=9%zv|9Ci8YRwT+xXKxo!&zO%9ma!Aa9{Z zKEaP9lRy4KM1h#@zI!4sq4G{ zCkStvDNw|sy);>3*0!&A?2k6G*Ymf*EQ5U0T9*vb%ELLT1vBTh>#=9{TE15+iM@{y z?>{2-MEK_ci`?t;s)q%NiJ4i{;%=Y(w^&gnECGajNdJ0xCLZmXArmSQ-?fT>`p?sD zUjU24E3cQ2il`mKBxk5lnU-QXV?ch(&B*og@-l)wE|1{I->A7@tkoXKW;XAWxN)Vp z<+kb3dY&Nh!TuL!L&zo||2)Es{}>4W*Rbl|m>zfzRdoSFE>xLTi=G*L``3rOc{kP+ zgg0_5$N2W5cRw8H-bZ2(Ei>7_zmTT@3o6zjtA2q3=-=M~3CsF9>FS4cGV;4$;D6>N zUv=BAbfQN@PTJ?h_lBFz#HnXZNp@zDT$-KSV{w?)k=8y2reG28qPdQ7sp5{hrE4Ao zb2ftZ4j4Wvg0 zG_1p?als$&hMwsO>8h^+XyEDHcv8dTNyGl~!JR}wdjCqG4=1H3mF8}O$(?ZV_Xf(HBz^#$?Gy^^0Hw-H?1 z^w861@zE)27uVcv=|#16D|&KOsQ@HtIzj%B4%q>u{}ns$-?4K)YJ(71Nu7L^@|g8W zd}ckaBRylftbbhsYt@H`$8Xvk6|6$W>+pfeta4HR8f_AJWf#r#bdZsevO)@;o6s_A z)CNIptC`j>EPVYAseh%KG}0rN_X8oUh`vx%o8d*h_P{A$QwR_I@QU$t4)lPt{vC?PRAyq( z?71uF;KB*6(%rqo67n*5eV=x;-eqwipf=6*XBzM(@RgeYN-MU5qHDFw`67Q7aH}Qz z10WqXaZP13o92Ge^%sjzwzu1eiyJmcL2{nBqt5w7=f_u$o%!aN1Y;gW>^lHMN_iiN zk7-Rj*6VH<`r(WHjQ^K{Eq-`(WSETWoE7t}Vyu=rdkQO}H&=hKyV{69UKZqEwDfEl z#ZuqeTArJS=aYoUV7Z%ywt}~&pmKe)MV#|GF2mQv8YyMji)7_j9&WP-8k;S9K~NF} zNWeTF1v8b-Bt|?6(t@A&n1Qnk?|^PXa4RMGhbBxQUE^M>jz)zOfLLnr2THwoANwS z;SuKP7rxE!w?8wUCk{VDsRyyHQL%gxa7S_g3D@tg${R1>5>C9tdGaIGJF#kY?&Vpt zzK~6l%0&?u4nci=8m%~wWP5PnpZx2l4Sp;tu!OG=(B*nt&FL$G~VNefsdymla=s; zqy;}nA_TVSR1;s6kwocr?aiNNi83` ze|3oR;O77{(f>fzH!aW3$zPV@D0h*euMwUF=u=$Ec~uX(1}7t}2+g-ejkiq11|46b z|32MGOAjh*^OhX%A!JiDD)nYlsKwjN50DJ^C;cfT>KgDWfL;Kv0`dM_H=Fq=A7fef7~$d-kVy0n9_F@u_ zkJ;Tf3a=|cQOEdsrpp9b(B+3>B2h^8rcH%$5K@z&D4swRO?49kN1BO_1;lu&KAAsVS`;1@Dzq%ABU! zz`Siq|5@>t)JNGJVu7U;A^o#od323@e0h^6rL`URKRBzu*vi}weDmSY-pM=O>p2{% zL(9C2wU34rJz4n5hSD}8;Ym~fZRjzHd;jOnQvr9ExHFS-F9%kQAO)R2^(YfwiWQ=dbHF0EJcXdsMR1V(_Mm z>LmD)mk)HXx1?-P&OYVi%TiWXoOm>Ptil5|z8HupH5jlscC$I#u)C9lOQD z_)CDf`SLCuJDx8ZIOPDXp5trhWHP#hi0;q(l$E|M0zC75{-yW+Z2QNX&f%%1Jf{|X z-}lN3aW9;su8f~IIMDD94$jP^TZtT#+@BrLPEqQ1(?60bO-p6ao9Iv2shqXrXL{dE z0e!cDTQn}OwYA@0u3x(j+Q1_eJ9}21(!Y+I+Yplu{z7);rhE;Ps-w9;6}fP}aPyxH z_xEq#2@Qh7_J7O(Hr{1vxv@`NNTLkzQzR;*8un~qfP}5-hy3pyQJ3~i%4p^OzC0r9 znUOHu7i&{Q0yv`9By$+8C37fE;!g8nA%y z9Q#=yXQB{~G{0Z^dO{(C=xg_%wn?BHUMWmPrJC|6v7$1*^arX;+L{1a8hQQCJ#5V2VW!}BB>)<5f8CuXDyx*^) z#;u{}4D1+{KG$({bgbuUpOxlkdmSQacukgfiaZ7fx3{nFVIHB`dCOLFbA;)*b|5)S z3ZYM%71SBnxHebS-L$u&3!_I}Np|*>c8T%97XHrbrrFf=DpYRr?YDo3}b6Y#`{+1O3a%&SsdxK zn*(&OMvt69q!8skYL%;s29=#UolcC80*~ zV1$o@ey0``waNg{$Jg#_Guej4?@!jxF-5RUL;z@TGNUsR#;Fox_A!T~rnT!qhhm#h zV&d>bAPfESk9$WijK$v7&0J#Vquc%iUKU=f4Q<(V&pLzz9;g8M=>1(Eidys+-0R)A zDptBWbaU_7AM>*sbq&6lt6;rvOY_R)i|X-kS__|=PwK#**0X}bGuiILYOK$HdP@*pBzrr1Nun77SV#g znShr%oCFLBMlg4xy2%2t&wC-$J0NFsQu2ZU&y{+jBXlR}6h`hY*W~dvSE?m3h-^6e zq~vHjZ=J=NC@@p)DBMG0h8Sj0?SfG%v`E!^<}SZ;mAO*iSpFMwjUU`gm>EH>oAR`{ zC`_1J<)nW}vP+UktkxM&!)((*glJ!LLQ$+(^|RzeZk=5B68OE7k72WRW_sN5^t-EW zN2GLW3S`(h*YGx+;omAw)Gjvi`Nm)NGG3xn&2j6g zd%BmV^EZ^x=F7bZ@@A7Sofc{e3z@KI%XDwG^CtDynId7s)kInrC}%rsS=mQoG@wz3 zr^_q{3v;TKTB8o~4T4-�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 如果没有明白的话,请多花时间消化一下 + +## 关键点解析 + +- 用递归的思路去思考树 + +## 代码 + +```js + + +/* + * @lc app=leetcode id=236 lang=javascript + * + * [236] Lowest Common Ancestor of a Binary Tree + * + * https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/ + * + * algorithms + * Medium (35.63%) + * Total Accepted: 267.3K + * Total Submissions: 729.2K + * Testcase Example: '[3,5,1,6,2,0,8,null,null,7,4]\n5\n1' + * + * Given a binary tree, find the lowest common ancestor (LCA) of two given + * nodes in the tree. + * + * According to the definition of LCA on Wikipedia: “The lowest common ancestor + * is defined between two nodes p and q as the lowest node in T that has both p + * and q as descendants (where we allow a node to be a descendant of itself).” + * + * Given the following binary tree:  root = [3,5,1,6,2,0,8,null,null,7,4] + * + * + * + * Example 1: + * + * + * Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 + * Output: 3 + * Explanation: The LCA of nodes 5 and 1 is 3. + * + * + * Example 2: + * + * + * Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 + * Output: 5 + * Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant + * of itself according to the LCA definition. + * + * + * + * + * Note: + * + * + * All of the nodes' values will be unique. + * p and q are different and both values will exist in the binary tree. + * + * + */ +/** + * Definition for a binary tree node. + * function TreeNode(val) { + * this.val = val; + * this.left = this.right = null; + * } + */ +/** + * @param {TreeNode} root + * @param {TreeNode} p + * @param {TreeNode} q + * @return {TreeNode} + */ +var lowestCommonAncestor = function(root, p, q) { + if (!root || root === p || root === q) return root; + const left = lowestCommonAncestor(root.left, p, q); + const right = lowestCommonAncestor(root.right, p, q); + if (!left) return right; // 左子树找不到,返回右子树 + if (!right) return left; // 右子树找不到,返回左子树 + return root; // 左右子树分别有一个,则返回root +}; +``` + diff --git a/problems/238.product-of-array-except-self.md b/problems/238.product-of-array-except-self.md new file mode 100644 index 000000000..959e3d49f --- /dev/null +++ b/problems/238.product-of-array-except-self.md @@ -0,0 +1,102 @@ +## 题目地址 + +https://leetcode.com/problems/product-of-array-except-self/description/ + +## 题目描述 + +``` +Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. + +Example: + +Input: [1,2,3,4] +Output: [24,12,8,6] +Note: Please solve it without division and in O(n). + +Follow up: +Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.) + + +``` + +## 思路 + +这道题的意思是给定一个数组,返回一个新的数组,这个数组每一项都是其他项的乘积。 +符合直觉的思路是两层循环,时间复杂度是O(n),但是题目要求`Please solve it without division and in O(n)`。 + +因此我们需要换一种思路,由于输出的每一项都需要用到别的元素,因此一次遍历是绝对不行的。 +考虑我们先进行一次遍历, 然后维护一个数组,第i项代表前i个元素(不包括i)的乘积。 +然后我们反向遍历一次,然后维护另一个数组,同样是第i项代表前i个元素(不包括i)的乘积。 + +![238.product-of-array-except-self](../assets/problems/238.product-of-array-except-self.png) + +有意思的是第一个数组和第二个数组的反转(reverse)做乘法(有点像向量运算)就是我们想要的运算。 + +其实我们进一步观察,我们不需要真的创建第二个数组(第二个数组只是做中间运算使用),而是直接修改第一个数组即可。 + +## 关键点解析 + +- 两次遍历, 一次正向,一次反向。 +- 维护一个数组,第i项代表前i个元素(不包括i)的乘积 + +## 代码 + +```js + +/* + * @lc app=leetcode id=238 lang=javascript + * + * [238] Product of Array Except Self + * + * https://leetcode.com/problems/product-of-array-except-self/description/ + * + * algorithms + * Medium (53.97%) + * Total Accepted: 246.5K + * Total Submissions: 451.4K + * Testcase Example: '[1,2,3,4]' + * + * Given an array nums of n integers where n > 1,  return an array output such + * that output[i] is equal to the product of all the elements of nums except + * nums[i]. + * + * Example: + * + * + * Input: [1,2,3,4] + * Output: [24,12,8,6] + * + * + * Note: Please solve it without division and in O(n). + * + * Follow up: + * Could you solve it with constant space complexity? (The output array does + * not count as extra space for the purpose of space complexity analysis.) + * + */ +/** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function(nums) { + const ret = []; + + for (let i = 0, temp = 1; i < nums.length; i++) { + ret[i] = temp; + temp *= nums[i]; + } + // 此时ret[i]存放的是前i个元素相乘的结果(不包含第i个) + + // 如果没有上面的循环的话, + // ret经过下面的循环会变成ret[i]存放的是后i个元素相乘的结果(不包含第i个) + + // 我们的目标是ret[i]存放的所有数字相乘的结果(不包含第i个) + + // 因此我们只需要对于上述的循环产生的ret[i]基础上运算即可 + for (let i = nums.length - 1, temp = 1; i >= 0; i--) { + ret[i] *= temp; + temp *= nums[i]; + } + return ret; +}; +```