From 2e0082fec00798f0ea4cd4c3efee055652f33092 Mon Sep 17 00:00:00 2001 From: wuguanghui Date: Wed, 5 Nov 2025 17:58:56 +0800 Subject: [PATCH] 11.5 --- .../11.3/{test1.txt => test1.vue} | 0 .../11.3/{test2.txt => test2.vue} | 0 .../11.3/{test3.txt => test3.vue} | 0 .../11.3/{test4.txt => test4.vue} | 0 .../11.4/{props.txt => props.vue} | 0 .../11.4/{test1.txt => test1.vue} | 0 .../11.4/{test2.txt => test2.vue} | 0 .../11.5/11.5学习总结-吴光慧.docx | Bin 0 -> 96347 bytes 吴光慧学习笔记/11.5/Count.txt | 70 ++++ 吴光慧学习笔记/11.5/LoveTalk.txt | 38 ++ 吴光慧学习笔记/11.5/query.txt | 30 ++ .../src/components => 11.5/备份}/About.vue | 2 +- 吴光慧学习笔记/11.5/备份/App.txt | 12 + 吴光慧学习笔记/11.5/备份/Detail.vue | 30 ++ .../src/components => 11.5/备份}/Home.vue | 10 + 吴光慧学习笔记/11.5/备份/News.txt | 61 +++ .../src/components => 11.5/备份}/hooks.vue | 0 .../src/router => 11.5/备份}/index.ts | 21 +- 吴光慧学习笔记/11.5/备份/router/index.ts | 42 ++ .../11.5/道氏理论定义及基本观点.docx | Bin 0 -> 12971 bytes .../hello_vue3/node_modules/.bin/nanoid | 4 +- .../hello_vue3/node_modules/.bin/nanoid.cmd | 2 +- .../hello_vue3/node_modules/.bin/nanoid.ps1 | 8 +- .../hello_vue3/node_modules/.package-lock.json | 121 ++++-- .../node_modules/.vite/deps/_metadata.json | 31 +- .../hello_vue3/node_modules/.vite/deps/vue.js | 1 + .../@vue/devtools-core/node_modules/.bin/nanoid | 16 - .../devtools-core/node_modules/.bin/nanoid.cmd | 17 - .../devtools-core/node_modules/.bin/nanoid.ps1 | 28 -- .../@vue/devtools-core/node_modules/nanoid/LICENSE | 20 - .../devtools-core/node_modules/nanoid/README.md | 38 -- .../node_modules/nanoid/bin/nanoid.js | 45 --- .../node_modules/nanoid/index.browser.js | 29 -- .../devtools-core/node_modules/nanoid/index.d.ts | 106 ----- .../devtools-core/node_modules/nanoid/index.js | 47 --- .../devtools-core/node_modules/nanoid/nanoid.js | 1 - .../node_modules/nanoid/non-secure/index.d.ts | 48 --- .../node_modules/nanoid/non-secure/index.js | 21 - .../devtools-core/node_modules/nanoid/package.json | 43 -- .../node_modules/nanoid/url-alphabet/index.js | 2 - .../hello_vue3/node_modules/nanoid/README.md | 17 +- .../node_modules/nanoid/async/index.browser.cjs | 69 ---- .../node_modules/nanoid/async/index.browser.js | 34 -- .../hello_vue3/node_modules/nanoid/async/index.cjs | 71 ---- .../node_modules/nanoid/async/index.d.ts | 56 --- .../hello_vue3/node_modules/nanoid/async/index.js | 35 -- .../node_modules/nanoid/async/index.native.js | 26 -- .../node_modules/nanoid/async/package.json | 12 - .../hello_vue3/node_modules/nanoid/bin/nanoid.cjs | 55 --- .../node_modules/nanoid/index.browser.cjs | 72 ---- .../node_modules/nanoid/index.browser.js | 39 +- .../hello_vue3/node_modules/nanoid/index.cjs | 85 ---- .../hello_vue3/node_modules/nanoid/index.d.cts | 91 ----- .../hello_vue3/node_modules/nanoid/index.d.ts | 25 +- .../hello_vue3/node_modules/nanoid/index.js | 28 +- .../hello_vue3/node_modules/nanoid/nanoid.js | 2 +- .../node_modules/nanoid/non-secure/index.cjs | 34 -- .../node_modules/nanoid/non-secure/index.d.ts | 23 +- .../node_modules/nanoid/non-secure/index.js | 6 +- .../node_modules/nanoid/non-secure/package.json | 6 - .../hello_vue3/node_modules/nanoid/package.json | 82 +--- .../node_modules/nanoid/url-alphabet/index.cjs | 7 - .../node_modules/nanoid/url-alphabet/index.js | 3 +- .../node_modules/nanoid/url-alphabet/package.json | 6 - 吴光慧学习笔记/hello_vue3/package-lock.json | 125 ++++-- 吴光慧学习笔记/hello_vue3/package.json | 4 +- 吴光慧学习笔记/hello_vue3/src/App.vue | 71 +--- .../hello_vue3/src/components/Count.vue | 47 +++ .../hello_vue3/src/components/LoveTalk.vue | 45 +++ .../hello_vue3/src/components/News.vue | 34 -- .../hello_vue3/src/components/Person.vue | 48 --- 吴光慧学习笔记/hello_vue3/src/main.ts | 13 +- .../hello_vue3/src/store/count.ts | 29 ++ .../hello_vue3/src/store/loveTalk.ts | 22 ++ 股票知识评测系统.vue | 434 +++++++++++++++++++++ 75 files changed, 1221 insertions(+), 1479 deletions(-) rename 吴光慧学习笔记/11.3/{test1.txt => test1.vue} (100%) rename 吴光慧学习笔记/11.3/{test2.txt => test2.vue} (100%) rename 吴光慧学习笔记/11.3/{test3.txt => test3.vue} (100%) rename 吴光慧学习笔记/11.3/{test4.txt => test4.vue} (100%) rename 吴光慧学习笔记/11.4/{props.txt => props.vue} (100%) rename 吴光慧学习笔记/11.4/{test1.txt => test1.vue} (100%) rename 吴光慧学习笔记/11.4/{test2.txt => test2.vue} (100%) create mode 100644 吴光慧学习笔记/11.5/11.5学习总结-吴光慧.docx create mode 100644 吴光慧学习笔记/11.5/Count.txt create mode 100644 吴光慧学习笔记/11.5/LoveTalk.txt create mode 100644 吴光慧学习笔记/11.5/query.txt rename 吴光慧学习笔记/{hello_vue3/src/components => 11.5/备份}/About.vue (94%) create mode 100644 吴光慧学习笔记/11.5/备份/App.txt create mode 100644 吴光慧学习笔记/11.5/备份/Detail.vue rename 吴光慧学习笔记/{hello_vue3/src/components => 11.5/备份}/Home.vue (59%) create mode 100644 吴光慧学习笔记/11.5/备份/News.txt rename 吴光慧学习笔记/{hello_vue3/src/components => 11.5/备份}/hooks.vue (100%) rename 吴光慧学习笔记/{hello_vue3/src/router => 11.5/备份}/index.ts (52%) create mode 100644 吴光慧学习笔记/11.5/备份/router/index.ts create mode 100644 吴光慧学习笔记/11.5/道氏理论定义及基本观点.docx delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.cmd delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.ps1 delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/LICENSE delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/README.md delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/bin/nanoid.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.browser.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.d.ts delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/nanoid.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/non-secure/index.d.ts delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/non-secure/index.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/package.json delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/url-alphabet/index.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.d.ts delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.native.js delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/package.json delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/bin/nanoid.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.cts delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/package.json delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.cjs delete mode 100644 吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/package.json create mode 100644 吴光慧学习笔记/hello_vue3/src/components/Count.vue create mode 100644 吴光慧学习笔记/hello_vue3/src/components/LoveTalk.vue delete mode 100644 吴光慧学习笔记/hello_vue3/src/components/News.vue delete mode 100644 吴光慧学习笔记/hello_vue3/src/components/Person.vue create mode 100644 吴光慧学习笔记/hello_vue3/src/store/count.ts create mode 100644 吴光慧学习笔记/hello_vue3/src/store/loveTalk.ts create mode 100644 股票知识评测系统.vue diff --git a/吴光慧学习笔记/11.3/test1.txt b/吴光慧学习笔记/11.3/test1.vue similarity index 100% rename from 吴光慧学习笔记/11.3/test1.txt rename to 吴光慧学习笔记/11.3/test1.vue diff --git a/吴光慧学习笔记/11.3/test2.txt b/吴光慧学习笔记/11.3/test2.vue similarity index 100% rename from 吴光慧学习笔记/11.3/test2.txt rename to 吴光慧学习笔记/11.3/test2.vue diff --git a/吴光慧学习笔记/11.3/test3.txt b/吴光慧学习笔记/11.3/test3.vue similarity index 100% rename from 吴光慧学习笔记/11.3/test3.txt rename to 吴光慧学习笔记/11.3/test3.vue diff --git a/吴光慧学习笔记/11.3/test4.txt b/吴光慧学习笔记/11.3/test4.vue similarity index 100% rename from 吴光慧学习笔记/11.3/test4.txt rename to 吴光慧学习笔记/11.3/test4.vue diff --git a/吴光慧学习笔记/11.4/props.txt b/吴光慧学习笔记/11.4/props.vue similarity index 100% rename from 吴光慧学习笔记/11.4/props.txt rename to 吴光慧学习笔记/11.4/props.vue diff --git a/吴光慧学习笔记/11.4/test1.txt b/吴光慧学习笔记/11.4/test1.vue similarity index 100% rename from 吴光慧学习笔记/11.4/test1.txt rename to 吴光慧学习笔记/11.4/test1.vue diff --git a/吴光慧学习笔记/11.4/test2.txt b/吴光慧学习笔记/11.4/test2.vue similarity index 100% rename from 吴光慧学习笔记/11.4/test2.txt rename to 吴光慧学习笔记/11.4/test2.vue diff --git a/吴光慧学习笔记/11.5/11.5学习总结-吴光慧.docx b/吴光慧学习笔记/11.5/11.5学习总结-吴光慧.docx new file mode 100644 index 0000000000000000000000000000000000000000..0c31625cd010087eb179942d353f009a9826fa47 GIT binary patch literal 96347 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%0D>>-OZe>+rtwCh*yr-N=%&azgnSj zwr`ic_5dK#7-l~Kf&GUv_}O!``Ve-ko6&vGoV2txtt5szBrYui1n&6FO?!{J zet7BL?*`y_Lh`o}#=5aFalI>9W||ld7qw}0hwI)Zh6WCq5F26{5PhczQ?tOoiGwcR zb)@<)*7a_a2^w^Q2cU(q#u6NWBD@z296*+{^46 zj+gN&>?D;KoA_>v4!LUROq%LSV8SlpnTq!1gcc5_XZchn82~%U#E%B zjNu!LrD>9^Q6=jJz|7E6WXIU&o95WSvNgztF<1Dj6lFN}E}$*WZlD&78VX4XF_OLh z(<28-XK4G68LCV`F?g2ev#veU>Fj=N{p)X4yUxcSb=3&Mn3o{&&Xcy6*Dfm#iyqA^ z%dz&wB=USBS&?C=)R4uGcBwT!Prk1sK1A>)^+OC>0CxIz$&(21uBHHPq5-rENzPz2 zv*7^q@lb%>U<@3!Z^r}kAFAl#I_p!k*oRiDYf`@|uz{48X(0LNh~=@|(+|>4y?VK}A!d_Nw|OfZhHYq(_a&tepj(9Qf`K_)oAuhM4N3ALEAA8nuAlR9M9offkOg zn95CXT&FX+cecuviqwIHZGB;3yP(>!lLu-pMy^907IrvlWe3Z z>zZujBK_2ThT@h;RgrsDR_NUB6&?I?OC17bM}sdOih~nsjs(-M z6K3p)m5`7o)}>RVr575XB4b#rSqVJr$WbN_jsF~g)BE0U01TZD?02Ts@z=UmK4?JQ zq^`=;K`GSor_)Xyvj$Ylo?Q2IEfVrmUN5>TV0C<9osMSJudGAo@Q$Umd#9PN^(yAX z*i>h}eA~rCaof4g7^(H5|^cCrJW`1UH*PF$hs-z~$-tZ}K z*Ci&2*A510kAEEE=2YFXfla5H>PRrQ)v_I<*Ok@vafri3wIwacY+S2Y!JTODE5I!+ zJ!aIvB-EU(?asSa`qs3j;SLj1^Pt#t_%d@MFQ^lIX=Ms~AXhPMm{H(gWtCgD za}T}>ES19LIgdp^S#o)gY45YDN{H3B_Jm*xXUNl%ld%$#iq+=>vT;GQz6rZySQ6k| z7T$j@U2U4txrPo&J$CJ^YQj}R+zf6i#Z`0D1s?|^2}>alxHjku=|xqnfuPxtlp#L@ zPTZ*Q=_=ljhdHgoG?~YO+=2L1QHr9q#IE%$-U5J^rdg*MV2;#;LTjL~IMUO_6*Xa81R*6OQo-N*5VD*M?@)7+-_Mrt; zNtMVI-^2rP9@OT2=(jMmw)z=!tC#FLv6-uYBy(yzKCr&M>f}`K)^>~O$le~WGsXd; zk7gB>1CjAgtknb6_(M*@_NMa(>q9oZIwK1Jk&0EjDysX3XDxv|LX};%-ly2AjC?3f z>-hAmp{`dCVA?e=_35mIFYo8P{Dx_LX}~-uhPN{-BS6egIAvzIFA~m@zR_< znS}jS_HJ2`P6$eKR&(}fo+D+k9aIwiVruSYp4}+1wpF_|Yu)@;Df~B1u}u zm2+{t2ia1scI717HtdXA7ftlqLkq8OyfSzy7f^`41NP)(!?i%m5>5uCjSRj=4sIx0 zJrNv)MwoN0&8U@f8Qr~o9}VY)H0M6(ujy8S(QD4N7Q}G5a^S3@REE`KWheH|_xkBJ z&XJJlNJx9NaKpjZK>8sC&|9^wbLH&2ie5y`lkMPgB9MX;4_%nb<6~?vMKrt-t$^#} zdSzW5mKqasF*iUJ_rEDQ6Y;VX5%(IFji`ok3KdEFeToOEDc)q!t!W zWa0PCu{X*!es-#GH8fXabO#m4%~91h9%th_`C~7l0|TRu50h~56)&RyZ5`rI?95de zPPW1tjoLbLc+>Wvw2RSi6f`0xCE4f`4@vg>Py~mWPw%2jPtqR&F=`W0wQ@AJ*`c!t zCHa(h5W%)wGK#O{KYg^kA+giReHn9P+#2s=!nLf%?%5_{whXgdQGYQ>I4gn=$~A5KH=9!>gpvm&=nHC40y9ee+dLq+PydU5R49 zS1JD#nC%m46{loAb%I?Vc0a`8vZ?3?vk0WJKSDub(bl@rg*%de!xdtKRtV_3Wo-EQ(nzH-hk^(0=R-gqKb~E zNMBtkbL6O391%b^j2Xq-RY25i!b*;%LHK9Q3a+w7n_n^^1R>?Z-Q@Itn^W`0Fw$N7 z93WMB9fFt7$@d6pH{~*jM)dgIeg7R7(7}HB%(NM;>{`T_9{YkMoO_QtoF6Mi!VYe@ zF$t2KzsS5^Kp_fJ$`F0z3EqPJ9^We9gbIj&nq#*6(e-|!o+6t z{)cFc_2~zx{VTF}3fp7TF3D*&2Y6k5(7Ic7-)jmPUeziOn=RIO9G|-{d`tx3cX~LM zRWc?}GSmR*{z2E@ml!Gp1<62kN>;HL(Hm zAG9T)K2jGSIkZ)&_GIi%!z5U79-luQoS$ZiVWqk=eE$0<3W@kC1Nb~-0>qonm0wz} zAP06s#>ndd?}>rHEw*SClA3U-Jo$`1on`zxKOHc{lq>K zTM=}B(1P3Y!NR7jFI1@8sjdynPsykFrK!!xlt9Wfk{jP|IACDl(eOaS&-pxIUiTTY z*3^)xJi;3%9)i42M_|A)a$2YO!dZ0`8qMK{fGwXe=8>?VatzN%{-}+$nK^E5o_?jBFDP|UpNkNu4V@xXx3>rURq@SHQ8XfD@K zK?Z7_0O#F9vfz4@dh-*_SY2DM8g($voCQUhiVYP`USq-4Fg^j#c>Od@Q!(+A^g^)| z5393brX#0&w%(Fug_|`s;RYh2>3j1)Y<3|vYsEX0y`3|upBUo{T7HfY#sESB=@_wJ+_)~w`Pt+kEL5-Z3=61jy3&RUkM3@WveYH1u z)<6`^cEkg0^GNO58dNxv(`f!FrE8AtY3@F=J07sqq6F%ewyvxLR$8SBn(kM+<%-kA zRGt#o3T4m8s|YmyNwhmvbQIl3bqITB<^~4>f9|AaO)=zr1>2X!Z-!Dcs?!{GbTGs9 zE5`7%(|*J1LT8~?-OUDCw370m@w^BE`j({Q{auNsQ-JHUeXOb+6>=Pn*5qhA+b;5% z9y4u61!KIJdb4cyTMV!d@5!Oq-XN811GMJJKVo==E^`g! z%;<$04F{9m2o|SD@-dP#^o6>C9)@uRn)uMEjl@37T>Ad_61Kh_|A7NMj?r$1DvIeT z7RCNbp{Nmz^Jy6h()Q(jG4ECdnzD7k?{+5!Z+`NXP6oa43Hzc6k@!Mm{Phj+|=GK`wTL-pgvlNZ^)6{g2 zvK@`LADjyo#&ie)9GlPVW#;YNPJMXeJS-x6k=qIXdNg4q4H1ry^GBbA@fUkN!6+_y z6ZSl?f(&ay7tJS9qInisfPURdvupL=p!?ydhSC*^W{h}8U|SVwy5e?NCzX`+KC5J+ zr@03)Y3XS0tAL5hc}@A)tM=gCy+weh751RG5D-{c*gkgJ-3x7}1&eHGlMDT^39q}v zKcVQ4$H&LN7eq|%GZFI=M_k6aJNE7pE1j+q>YYxH#C!2r*H}hBX!Py7O z8=V)|{{kAUd&?TKfhH`Om7mIao%S|St!Z62q!4^ysVn?4Fc|tpR3`J^4-sQUQ?fs=4q1aHP;AVL;+g-5xKHlEuIaf2zsTv*k;S17wDgxU2d0~f3 zN09A;GQKYh8F4tRnR8=I%$E3rrxDc(u?oj*L@O*+PcNEp^{+CNb-W1P=Vd1&4qeDi zo3BNt+K#E(8+V=byh|jrtffvO%uhgpjh2JP-3PTREL_@4RMV|cO|1DK%Xk-BC-Gz0 z!pI$XhYDH3eK=hqkWQulri7^OSb00OYS2^)b)V%)9H=%4n@^5xU-2aXwnz>ij9l=E zYCIiY{;04cH!k-WOS5kA8Vz;P5(C~P(r7-y)aNK`V%6U>M)}s^Ql*CX81^Z8$};@B zSfIj?mxm0l9s!6)BkOp%C0SR&WOsp{9D%P#MtaU?t8v8%H8D$2w!BIcnSp1X0ZGDj16P$g-*S!;CK#vr1eBWa-(yE z8T9D?bw!?SnE+BWjmC@1R-EKkMtL=y}|n@$ze3RHt>DIuXo z{tG^DJb(Bbm^*k1dAU--B_D<80bX0Z+FHYeL) zz4G3$Fa_Q1#-j_KvwuGFEB3?#8TQO9(4Lew@Yqzj<>j8{NK4N?4Hh*5Zz! zyB~@B^6>+J^?Vm2zsvA+7I6|##-PR(-tv+A%x?{N{^kwh;xa+?0_xiWF{c1<$nv@N)=pr~E><5WyjtO~@e-smT4 z{R^9n;}!7|`dSn)H%+)%oFV+af zc=oJz48BL{PyXVqn;oN7d3C@SBVVhzKQ2_trJatBVH|CwxE_Z#MG4^YI|O&v`Ezjy zVHxLVQ^GgFkEHUBq?XRiaZ_X|CL9isszKJ^>BiO(Pc`c|;-SV%E;g}mu*+(fNOxw3 zv{5!Repyh%=pnKWHjl`6*fkz6XRj-CA_+a+T>7*K;ibvv&?Sc#wG%MK>I z!dDsN$T@746{HT$aCIGI>k#`1PE+yG6I~ol6JR%dA+uo;Xj{KtQ58RLEHAr4 z)bRMm>|G0uL4>poiFMVD;tkHHZnjOIk=1&9FxLaK_SmX(U1^O^v>FZ74CMtY>SZN8 z2upF2kodgl4zv&b!QH^^#k|s$K092dm>M|gVYqawZrI9AmWyAcICCfe4O&)VC|$(( zULgYU#$oz&xnzVKFS08H^~bS`$PC#MH?^Hg5!-g04$>w3Gs$bFZFXA_jhQ_clt}4CFY>K#ZK8Lq_(e>3H*Gd?JW{Y6d483<+2k$D6f52At)TZl(Q>U;f?MA@ z=GbvRVo}#Tf=6P6|ycvE%r!X8N*#q z>9`SdkNYX!BbYs}Fx5JLF{D!eXyhNsB8On*B^j3CW7wP;tF=Yc9z6clbp$rY?{|H2 z=Zg9msT785@bGsaeFY~dSoIJcbgYV0JOF(4Wo}v@e3uZOAHFa+tNn#vKAO}$g5*IH z!DW|s6fd}V7jSUnp$!JVF>4HuJtL>D*cxWG#O-%Xn&eG7OkPpc1O<_SqE0LO-)a25 zocxSLbT^|&GhvOIs}f?~a$(LDkwwn{GJRW^w&A~PPmjv4?;Z0g()je#f8U*FTQf-m zw;T;-@c>Jc%SRzRQKq#Vk7rUpCTLkT&gj&mR=9dqIhic&dblDrtN=+Bq7J zvtR4lvu-SaTQm_xjY=i19gNkn7V~mZtJZc^ddxGD4s+FiAXB+!eLdi-%;CN-MMP%u zR=EDk|F)GTJ=8WBpACnes!a+6ApzO0{TWT9suP}FpQIt@w>r@0{OFZa>KNrELl%y? zC0r+TY{et(I1eStwAaxXSnNP@aZg-T<24n-f%rB^^#j^N{Rirq`(^zrq28BF%S=#X zQ%JXLGa?i=LQ*{V+aZyx1DZUPe5&%2r9$}`Owc&qBq$>1BwPAWL|SCf{jg6D?1U7w zDurzvHmG!uc(Gkc!EP)9JHEt!126t` zA9a^q5kaGhBsW79|!kvUquB!I|rIR2CDG8>9hM21@ z*YEVffj95)t*aR_<=Ee&5uvu`QrNChp7oH4$yX;D%yObXYFPx8;U=C8dTO#vY~eLF zBc9FftL>8Ljf4r&-{k8F`Hbiy-sVXWkq?6|Gy z+{ok+@|SqzsJ^U}$}`0oOyB>)F^pIz&IU~cK3@jnSa6OrOyjmV>tv`ZC^P1=)gWen z3EuV#QxpqX>zhn$YgC;?;*_w*QAiIdd)2c~b=se^PMTmlkAL?)T6yASw;eF*Z4j~U z7QhSlk?Uv68fBQJ_hx#CR|>c)6&oFM6maNMnhLiOkW^E3Gm>6-mQ9~j5OhY~6rdKL zqM5C={>`c<)_ePIL6HDx-+jjLKQCD7XqdesW$9;$kVJy7RAsF&CuBA+MK5JmRpt)F zBX2`;7CU*x&$$kHWOrZt-Ml5;sj#W!uSg31mGs07XpC*m8uI?PH-IFv{S{dFcY1~b zv1MQKk8tEHdPe$=7SR}L#Yv+}iM6yzy!Yb*hO^$8XL7$9!BY~@X zJW==k`nabKafy)dT{GOroZ{ZrE6`B=F0806g7c?3N~T$fRqCfEe}C*gu{3nUZS-tiSg-Eji~*A;vK?cbu^gB2!tQVMun^d-OZ%le+5=X zmmllm6FczK)w;@TV?3ZFN91kSXzUR3yR;u~lT<1D?V21r&KR=)1U3?$gs{fY8xGIQ zGu72#eGZ4e$0(h$jc+_|N?w0uMs&r)M4V??&;HJ!@xJ?yA4jxmK&6->PqQ8$`)d~6 z$2pzbgUhz-fVpgO0>{}Gs=b1hIb?Gh7~R{}ct-yooD)3XyJ?+Hvmv+66VQLZ{Y5a% z%3<4&?SI-&0?>T#p>zt$^jRH!$XFPwbYc@9&4_3hO1Fc5%lNmAa{R=FG}0kOiHVGV zdr+&Q+fWvXi~p!|%l=1G{G;X$vDYVQoS&A&|BE_ciC{^A=_>PSz!Zn^Y!;$4C4#Ym z?O@h4$!ffTB9{pQ5 zm&PrDSQL`CEh0AQlq52g(<+b0@<5ZC?B(9%40l|36VVihc?C4k0oVD2!MO**i*M7P3$`Tz+2 z_tjw4I7Q=v2;@8897r@YDPl;c=Y{^XE!Zk@W^9hrKJOil@%#-G;;5BrX))UYLm0}| z`~EW5j!E~0h)4roUHy3*Z1$G=;^?lCN+n30*FG5u+Fk2McwdfS68{wI zoG%}Y#6>`8{2{;6KSFNxo9OP36-=XdsEkR&ki0zQLv8G8nX}1)h|W2_+h0R_)=gw) zFGr#^s<{tXU8x0!Iefn~zFo(sq}}d@Ex$Frn6wZP^+Cw2?61UmmDKREdB0b6B!8V1 z>x1iW<4qvD9Oac?bP<13TnidxATjdNQ!j<`zVA`?I!Iv;rbpN;a}>yER^OzyP|?+T z&M|P*Z_SGeBPGD~2Zqq*gatF4JcG#|kVb8^mZfebf9Rv`-^W)F69j=X_W_Tp2r%Ap zY0NPlqX@(WGP{Wz_r7NZ@%)fuJ>Qjc8D&J_Pmjx;Gr}p0*OKk~h7fa5$k~VW{{ull zzQ15jA@avvd+`QeYlu`T$4NDK%9H!uwnz_gu*(r=yj99 zYGk+j#^_;BicGZdFISvt6FmC!4M?7Nup#Iy+Xt4J@8;vD4vJImG67F44;=BXPXGZeS$LbX;x&nSCB@HvGqTrSwWxr^hN zLD~55iF5C?94GCAwUQT`Q4^DPFP~`jxkrucfL^Xb49-07Z+n{=2gS;0TGv2a!>Z_`;_<|mA;jG z>H^3gO>g}>4{YiErzCy6Fl&2Wr1-0rQU6$toU=T}#O86;c43-*)<+(mE^`wLHl`nw zsG=lg#Nt*{_*uy)<8?`kysN-oq~kd&?Dki^*f{a;?J`j5W!)y1^h;l_P{sQUgQeH( z$v-3Dysz4{=KJ4#IFMYMV-=;9W=#nmP6+919`?iI5p>%UY2pM8wd;pF9ib{g=(!nh zbLU>heop~qnd-=V+TqjuOk!U7qj~a$pgaNu zFtBif^jMLf`^R19ebja0ejsC%ZN9RADy_zQ)Sg+smxj2?NJmT_zDHQSJG0z<$>==C zgHka46)~P5J?kARxJsC*o!xKEA{X)frMbLIXP>!)%(0%@fSprhUv+oE)6mr}x^eBr zONMDetoX2~?eNujTzY#K$ZE&z0ov%y9h#0?>6bu9EliYAo((XgCH?N&0kDpz4S4Y7 zJ1ogtbfLdAI$dF3da@l`ZdJC^Qu{MOXgAnJEkBNnK5lC^631sP%b_ZM(-pd!FI4Ke zJxUo794^Oz1n=d<>{t2+=J((YWWG&za*F48XoYd#^|?2(or;?BetO@CaKzf37$614^!D5eInvgZ(=*tJj>i7-~N%wZeb48m;1tmjM`h3F158PMy zJJ~)Q*Eg;99DLnH)dEr5&grz{I5-pb*0f8u>L*9>IjRVIcvQR_rlvw8Z`OYqgCn`wk6>sOq02`;nd&^16= zF7MzU=L@I=s*?_)5bhp$+i;9{G);i=PIVn^1RB!0N;h5Du$Ds^;9#t$SJ0QvH?eUM zI2Q7)73!j=EDiUAgF0Wi%H+2vG{eLoNPubBX8i+tEL!V&`9--+ zwe7HB)A3m8%3m;oq6GoX;}q8g_v@jV4sN;{6M^b(~E}w`L7Xc&K-)r9`oeomC!aEe)PuqfY6b4ZNG8(0Eycjd;V{g0L-?t2Hi6by? zTlHI;VIbDy4hhza7V1+Je~@SA)io~}wS%AHQ*WC`Gr!DnkSn<(uPX-*);h=_DMQOl zWJ)KGf#`KXq%d z=oGxXY;AL7c6n)}*5WOmKbN|_q`ROtE1eN<1d@d8ag7fqctg@9+=Telgq0lRGIUQe z^@n%DxC0$I;Aq6}tbK0mSig`Y^-6|Ii`yBCBV0*Ef^y_YS8emN@{P_G==(8&uxPyEJwO){TNNrY@(|2a|iJ0UtpI zoZCcFDd$g5a#qE5-+yqD7MyUvm5)h?9m83)7dDi2;)ft}^<8!Q(E|qnqgR0Z9=8v) zvRQ$(IsBsa1N}v?{c;)ZCC%qzNhjy#K@k|YVDVFXO#;}Iy3PWgjEsWk`(2q{7izV& zNoMSrhikS54SP2=b5(6;k&0JKj=e9TIEoRy{Rz-gsyN?o$fb<8>%t2cIl7+$-m{-FD$DaikaK>MXDq<%j6UpRXu~Zup!}C4^OMyX_cPi1)kAVdXWL;=(N{ z+KPi2@xDWjS)w_vMhci+7hb{&DZB z2kLk|qU|`^+l!yuk%Zz!SaiNz83)HXU%GJ21#tU(Jbqt+1HIX`!A0X+{C zM@JscU_lnj+0NKhC7<#RM4z5=)+a<*TPqSljgg@t7$-Ek(gEsxIDrRIM3?;OKU6V(M=C!MR65<+zx%Qn0F{{VFMBQ#z)0D9M#USUD z7sC=ltUC#6ONNQwmS#0tJoi9^3}DZ-yx+VCu0Sg1Nn2&Amv|hvm-&8vc!n%Gc~)fQS;Fw! zLz92WBtFENiAh1wOmPk!25`45%GFV*j(<2id0bvI`lvm_GaqK@4o}^dgVD& z^80+5BS|0NsT>t$@m3KS>hbbh#?Qo4TiIriLMS|QL^Ps_lq$0K;DUzWD%5#@3ZHxS z{`6Q1t(EXB?&Y%>di~+S@jMfYLH{Ejpl5W2mLo$pN?a!G7RyenchKu!3%ESqd5)Y&Cyv#U!Z|9mK70tA|xI*8n-v*G@|G0p73 z->_f&J8zfaU?}UQ4z!YGkA-)5_ z?U^^Md9bi$!ubbp%1stWPGD%N62dYeEyo08^On3VH>sXlz`)C@TWW3d!(d9_Zo$c& zG0a=>UJo(h{XFW zwC0vYw_eQ+xKZ)XVx;WsM0fR}b=yiagLP6>KbLntMwqGaU_C+gHq6-y1Udt<4$_-2 zYUANowJxC@E?Mdd(Nmvu0t8l9IPE>t4$;oyrC0DHyPLWN3Luv2G& zi=O?!H0mCeyYQG_fVRr;WXC(2<}w54ZvHo(u{N`}jrdIH+0Z6C88)H#Eix~^i?FzR zIiSnmu@}rW+d7q`>CZ5#vgy+`lQ?M0Z@FgBLZ>kbdu-9@oLEy80-DDY;0_#~!l`3b zp`in@VLPu)mr?xHp-%v0pXvA~3il*qE|f3sCJT7mq=hWcZLBpO0bp>{^5)ec;S~K( z0-K+brdZ!+AE@v;1iWa~(*YYb+0>%5Op|)9s82Fkf;X}yKbBM3 z;|w{pp3|mU;QGQm5dq7SwS~8nJjXuJ51SlXe-kp7>K|@$y3#>22P!)s)Ay^6Q6^27mDK_M$CVf_BA)JTdk1wzUwlkPxkey608Zt7xhUosHEdA=TaEmh zRQ#eI@b%lpu{muZ>;d>vlpllBRvKNaK8(ARrM2_(E#&Ls-mp#t>KYOtiDYtjNT=aM z2Fgxl>T;hf*Vu1EOfxfm5&AeIGWs7c4z>8QEk2QI$hMF2VgA>4J4#4BD)JPzVI4sSalCUf?Lfmk!VCgl7bUa6sgh z{q2MMR1&j0BK6w*Sxdteeuh}5d~;FlnU#4`+TQXKoZ8TO(_m9k3ie>k1i)x$T2CXX zo^tsg$M_28#~}`?5tSv4KQHx;M*9VM$2`0Zdt#UU&Wra|IJYuu?c^dM`t%rOWVwfL zMDu-+Xf(3Vj4tMqhG4XqN=115x5}kP%+5-Gzxza>2s=drp}gWrd7MMWM0&ctA;2b_y^6GyTsKW7(?YPrT3)xpTw$c z*Zp+y;4y03+MhqP;mB=H1K$CTAYF{3nP0PO6u!3|PUx{>D0#Q_^fE;H{Dm zL`-^|UVPZ43_zA*1HblYNJ%WHO$E%H@n&>sBoi+n8H;jg6~<56tG2_BV=V8heo zCKvam16OtAt1oc9Z#-1zemf1Ww1p(@Z);G>h)6tpLp-Sngz>gdi&rv5+pEI)+zRbK zi`gG|JPb0QJmAiekj?m0(#F{PCK9$&<$|&`Cf2mg(f{HRuTXmMSVtl3)w;|oVqXGg zI>13)vrs|6#XV{0knA%IV4>peM(ot13hMS4{Vi5RZMdrKaIA97=Zs5?>i8aE!RrlM zYWR=R+ZII|&7N>yN5PFO{Pt9qoxdBhNsv>e>*%{l-sD>vqWc9Qz`FsrkpU}k2!*gF zcS6Z^+mO1sjdtAPi3?{X#A+dU`@khVZF;u_Tztt0Q`k8&u0J?|(+-dgQf)d7xAz_snI!!RA*z2|$uqk0Bj z1a-Tw4r4nl_H)ZTGsi_XXN5xBH&gN6<^eQ-)GSFn0x3UQ`-%gpop#dzo5_WAX|6v= zCtweU%aCs^Q)uK!&<{3kne{_oD(+WpPXV#4RDihhuh%zzzDhNlcZ#VJ#YgWl7dcjM z!Cnjwtzly~#i_hCeeu||FQaE7B4ysZugZ-QaWlQKjP8>PZZ?kE4Rc2x&cBuKOy4r{ z{PjkvK^}4swu!8kl&x?6)^XQ;)>i#3rD`9X@Y+uvl_M4uK5ZZt6nbsyUUT~#2zyT~ zCS2(fotqn4x8nXe`gqe7y9HLtI~im+!tr)l)q>5^i-ACH$a((SJ^=**_tw0#LW6%( zy2-30Y+M@iYDlSEo}<&bUXI?5*`S|4jl^}I6WTO3b1;S1zb zi%uz59Oqjf)3u*9nYo(V6rPFI>W(0Vs2`*KL7k=G`4EH8f@Y12@8${4X$-PkDq!BI zy3=y1UzTm~upw$2Jb4?!Q>0V*m5QE<1%UsL})?m#hu8rAA1mXGg>kW&d#edh@sD ztsuY2&%q^YPf;5ft+ToFhFfCwvi;{3`iiNQIOzBc-^#$rz>qqXRhLRvUZ4IylE^0m zcA_@QE|U}_wYrwFXAd9S$Rd5y<3fKiUGoit&wR*feZJAGA)}LL^dhrC%S@=I!-yu* zBlUH+Z@S;yjR{D&M6W|`pne3h#7*alPj6sDsC>DGTaJe!H-96Jlw<_nL$xFc_z~9v zi_Mtlm7~GD{mK}MKHl){t4b3C?%Jp~v4I5ih8;alDd@QCvHaD;bo(CCWdWIBXaMw9 zAi;aIVEL8u!W9uoKC8D7)g7w*Ylx?cO|B-Yb`7RIyb2#N{=9DcU-#^DFBapCQ(kbh z!SZ#+&iQ77%~jw(q}v@*979P+DEkO<(B-Hbg+F1G5fuPVp!*+tbU1yIjqv2YB^lx0 zlc~h$U!lh#TvKPzRN;G`;WpOcbWFhkrNB{WOBO%BJ9|Px;^_1?a#u~R4x=X*DuVkS z9YHF-kaB`g&7;6|Q&u)U)xj*D5BqKnB5~WGL&9fxqe2(Ngu)ln>4Vz~dV#O(kBOaf z8;D@zIc*w~12E#7l(pEKpY?l9chu4k){0U zvy{w(r?=N6G*Tq)pG~$*E!=OTmArYwG1AGiG@HXBJXG}dKzpAA-U=j|jH|GcSkQJ7 z+@&VX3DW}&RqrtRGiGTqr&%vXi{<5I`4+l&Jhqe;a!9itCus{`kBYZfOLLzYkbn-v zlubyng^sN;1GhBT=GThilVYJRUF=2;+4L}VY&|tV~wm z<*{+j;N}_g=%iLp;B^&;wp;}tD@ZKuwMl-1%9SjRW((?syz0*Ta#G`y>um+9!&(}> zRh?C$^GPFz4*@Z5`i|AD++}Ipi{-jDUIvww`qe|;Ip;cqKP^OdWj7v^X{BN@r7!;< z?%p~q%5Uo*9_4F+fQpoq(v5V3N_TfjcQbUT2nZ6=45{=`Lyt6ybc}R^E-BFoz(;KbfUAzFHT_ac#6KIM&Z;2N6gXjGl!U zikyNMO8gDaBHYU_B}=WS2gf;w*ZY1<+fdT^WEgj+F9!ku&;l869NT1S$tR!ZKSA%W)e|R^z^eWeX?9_aFUYHJ}hvF|LXuK9Hudt5V zQmV)Aw65pSa^tHLB>y3}pnMb}HE+n;;gM(;%Ed`l@u`EGyY-&nm?OE=@$Vl(p10gX zHvHG!5j#DZCX&X_x)*$x13fb*wI|Ez$5n;-bK~umcOee;eFvcai|-{JOk=G+))rU! zSJcGE(~`UAr1LZZigAd{BhiF76PnF=`-KOYi+(ZU7gFWaG?Np1?&62e_FGGm3aNW# z!ACi@z(8Z8ZZ&XY`<F-?;sA471 zTT@WY+A)pYP*54UNCQ_@U)Qe{snKRXPtX~GlI)}kKRr~)$fYl5yf9B?KO$IgcscU@MD_t%kLF;J-D_gjiye8IJOmd)QIk#A;CL^~}6*CrqNC9*XpHS!F+ zu!~%6EQmb}@YWhUUmp3b879YpU(UP4pTnHM&1SlTtXJ5UlG8aqruGwS0$MqV1Sx+L zAu_Eo7@RQJqm?{Iz9QoNHPO8WRmIFtlQT11-H@ONR+N+pyL(+?pKH!Yif!8`Uk{i_ zP~)n5pibSy^bYVCtO*Bh2QH9eJO=yWWbnYlgX#*qh8>vv2c5GySp_&JG9l?cYkytg z&qG&`(~M~TmzGHN*7J@$f1quo=SrT^t65YIk=LWsvmv|ois3dn=>tIMz%L*L8h z6rQv>mtsM0sTNI-lqSs}Q5V(}g1s>99 zy}Z<@iHbEVh2DA_$hQx6xjQ)W*=Dk+?Ieu+m>Wzln=V^?2QcU20t4-BDuz9_EYRI3 z;Y^#zS~)`r6BF>%3>avY#^+p=9iloNm$mM6SY<>e#B4oEYFII*N#)Zx;@%VFJ{MD1 z*?qLe3r~6MhXYq3r|_&5OzqKL;=&{E3!3lBjq2;75Q1;oN{))m3wPtC(7!tg;?cBb z-K}*jfkXiS^6&R92y%ugz?$zb)t7IpneE>mdLnh)lz$MQM&GAP55A&m5q7fI%GW_k zvf-O$FA*NnE4SH*aYB_4vl%5}73!50w2q9&;TNL$5{rC}S^eNW-P{ZM^N9ECx6`Y; zLCmDRX`QOK*FJzVp9DrGB*l6OD}=oZASz(HmFhg8zK+!09+1S7B<(wy=88Lbf;_d~ z-)loSX%$sah#sB_n|7QFwu$95yy`nO+c=vexB;kqp;4Fsiw($U3Uz>)-jdN=mK`q2 zZ=Ce3kk?4SPIDwMjPhle%?K=dg1im9&a3p;T{~az#U^ztOB>t4BsT?tacaXC9?Rs% zEZtGeH9O({mhKJ6l-{MvSndipfA7HFd>)cKWVi)6TlJi}oL<;{$9s`=(FJ=xQDF&d z9ALDtt|Ca$50ar(hfEN3(@i~_@nBxDZDXGRpB;x3Tk5DWWk1>W-}oU|=N~JlaSnxS zT8xj1=!}D=D!2K`XM>p!2ur=@4C4p@FH#uxe8pUjpL(30j98cJ2N!X4t8(pnx5t87 zH$@v@d2oKh;I~9IcDXizGi~h+`uV8>1Ew|)0B@!}*AV>kbq?0kXO=dB52tI7t;Ykh zQ{i9pfdO8%KBAIWHTuz1!#hPsOetHl`}--t`uBX3d6vZG9E&pOyEn(eD30i}q#iCrPtQx^7+~T-56AOP}b_f(^`)7pNlaZfvelujp zn>C&y#naw75}vRvYV!;Aj3dXmSORCg@hxiHH!*4C(CLC~90!Q#7bS1Pd}We}Q*CB_ zJ(h@$eLbIuT!Co%8D3OXp16T!7TvuBwDU3TQPK= z-V5CJj1n^|DS4cB{cygbD!Q4h`^($Hp(mt=Abd~p;!SeD3dQd1^Ub7fiSu*h`fEN- zFE8oFNreY@NQ7;=+ykDpNV!aEf-nltdp+Dbp!4FMFv)PXB6);MZ*&lC5wKf~imTA_ z#f=C(+|I}Sch5Csigdhr1y!l1An_br$niklWyP>bprN>JUb;zXo9|-gz@ez4LqU!- ze}&3l9;pMrM|5Ke^k>94o)Akrm`}2 z9lLcvV|)1iT`Z2jC0~t6qlyRR`D}$^2fS8t9`-{>F`j$E7;R;eI53U$^yd(+_sMv7 z3KMRMn-9vFh7`US4Wc2pH51s^AD8`6W&cjc|&e8(VSsnWzsB zf1bNF1D5>c(`A%bNXxS-P~E+oRAaMTC!4{75AEv-$Q*FwITZpoo|QQYZi){enBYzq z3i#Bi2%5zt_>1-{MrTlEv1OK0Tf@ zdC99^0V3Huw#)qB%fY;aSP5rg-E5KLv$oL*qQy)U7pabqXu$zp;L>f9hE74=1sct! zT|s}ZuLg0G`Pno-DLPal;V}}x@K+AUEftd!g2>G-PyfN=_=&KDZ7qVFpI<79#>h)G zY0I+J-8y!`4F!skPcIu6#$>l6ohM2T-9!C3#>$FDYYg>Jg-BpI9)D>K_d~Bmm2HPZ zFmKA;;d8?IJaO9uv~ow2%F8eUt{fqF<|Ms)Y-ANfS6iDZdAIm39%2&gNiF{6GxELZ zfwOY64Q47#Ak)jE;k?OqY6Z=3kAX+F`h{=uUd2~XMAgkHOZvEeU>m8HjyLb6VLkL` zxLM>HdGQ6=Tm2sQ7DnY4H%YC7SWGhtV0s`jr7ar|-PTt(7V%L6m#S51*6X5bZTPKU zS4%&wU?7ZTo0biCrwV^g19*K^m{okiJ{z`#D?BuxKz^Q;ndj4kw%Q49jDVCjFru0@ zcg7A_(8}Gr&V7x&Tx%bBRPQ4QcQ^}kir)dl4aYfnC)kVf-!ev=S*g@SPOr^ONV`;6r<6)zPuUGZqqVO{NYY%0JkX_ zx9-Ww3{x|PQlg#ivw0UjL(kdq@His6bE8UhQ3V&N&pOmly5pmb7PZJPdvi-i%WP)D z;I>aCi{z6y$I8v?X{KxsetSL_1tOMQd&p??${#VX*o+<@o)Rr82O9VaG?b48+YX;Z zXxN(sDO?%hyk0V};$2zsx7?L897drc+ow)s%13ot&guHEP=aT*MUD+a=LF39KCj?D zPW69nAUI$F@(OR8j*K;8LKPUL^a{#U;*QVjQm}{BXzI zI@>eFM~X(FB4#E*!aJFI5vu#-@bj1A}e2K_=k?0(tFDUN?j*BAR;~1E|Iujie+0qlDYR=l<;mhv`0$trCrUFglvV=;G5tnPB-UikT zT$O~JyTS{cw|g zk|vDfab;#gmQqpM;=)oO^yNUZxe(%?P0`Ej0> zP3u&=++CqpL%1xGMP=DdyanL zRWCuj&E%|)-8giR3!-DgX^^?q!swX(d{3pv$&52;N>+-vt4%Jw2FD4utxDr3q9BuG z9s=taE(k`y(YrU8Xj&Cn7q(ehvubhA@f4m25?F>lYuHcr8epLFoA*e{SzXgU09Dcw zxGwi=ax=ULHwr(io{>v5`w^WBdF$C?lptzZC|TrCl=);>URx6wpJinA9+CMrFbgvu z+1kXoHt{yg$)8EcJ-r&_@>Kc8E`~KjdbfcdyNtvYeRnE9aa4o$Sm&Xh4HdO$%cYFl z=Tf*-rfiEKMt(xqv8WCv9@mYe{0>{jvkgKPFMUI}QuseT7!C#s^zO!>xl#sgx#5+8 z{fS5RYt3k@dn#`|Te12;u)WS~}**hFt_c(&Vih z&hF)%!9h2)Ng3LnWvb03#6y$T3e!VAO}ReSSFQY(%Dl88Zw8f)3^#_Z)|o=B+LKdQ zei@cLVj3h`F`-EfPhAb#exY@QU(!D|Tv%qXWu<^lKx{3M&TQ+^m?0cH9W0eQNntXMwuO^{rBpUz+p6#iTP|@rwzeJn?cwe|o2P zg^yB4{9I1*6Ua?Yuq&jXxu8v|yhDp?HtowWSKHaDb9$hWSD{MDA}xL^_u%yGnX6sc zkYgFkLHOW3v!C#*RN%<4YCnFu#<2M=3_>14v`IY#3v%zY5X&q1SsBLVP( z=z_moeHep_ZAS>7CNpaAnko$nRrX*8#@${=DN$rHVr&N&q0)ckCGK^08^$=##bDzv zl{&r?VDi$yX3S@fPMlo(+--TYF`9z6^za0P_1Eeaxiw1Srwip{2$33-NL=A}xGFU{ z=Y)Kv4jnhPVIpuZ$;}MiPzSYbFK6~W#{LkE9(P)CS%s0PNVvodKqSFnt+MLiut8O|a{ElLyIUG5$w^0N>Y|Hz7?)nKA zxP+KL5m|Pcqh;~~>h0z|!!~~4(tsh`{w$7%ofCIf-Gr+vW`8*O<#RY@8UQyE68L|G zH^)ZOrbeE*7Nx_|G_#&{45wR$R6QA^;9aZWU3Gg*4J#}ZF9|~U0VT3sv-V!KmT<-8 zj7$#_ZfffkS)WS>9V2Y76bLujL{M(YU7Af$1DEP%c!o#Fd8I1aJULdOgRGxq3$6q+LLM;FXU`#^gPq>zxe6me6G+E>p{fy9Aezy zui{f~Xi$GiVgSMgydDxCsrd3GwSd&dG`)(sc^>Qx5kd{zfA^JMXM1aedV5kJPL5iw z=xZ{Oer6gu>@5hp{cTlq2jq^;TL-Aq_i1CdlE}QfCKRUL{|AL>ZShd+#!sW7ZR$HV zqn(vT-KOM~0b~HcFM*e2ToaoFG3EHkenK0URx)qo)W?@5?7v6i^(eLeYQE7@SL*iD z%&B`g>~rj{2XgDyd7S08EB$K9o|6=J%nbm*#tAf!qfeGALJ?Jb*07)upsUwZfETVy z>Wi|SBr8eM_#E~{v=rZ7<&xy%wveIa#;6C9_twn7xVt82xDm?8OutSG%j7WQefQ;7 z^|5nuhSnG2m}uLY@$m^T>YOP%qctO9xAzr!w9%TxmPpTbnXhLInn?C?OXbf;<{J7329T~xJ)LZ)_i8f?=!qB(evjdR^&Z4Y5q0l zAOm!d;e|PQJap!yKiYhyT{^jn8;W_Rkxo2~a??C%Ghy3uI6|n`+Z;-Z3%`fJ?z+*d zFda21)lDgHi;BhkRHJlduP$e=)ULklYk3n&iOiQ>oiApfrdG@{YaLgUo4j_Ia)#^N zA;G5|u#M*3j-h|%0<>Mlg?xrt)yfYDU3pyaHXac{f`#`#Ph7yTgR9BRN@iCmY|fQ@>QU+Lc~x{!0~i zTeNKks@-$GL~L4QQ}%njTWN(WF0y~YrXeW2;(fJCwy{&UhPJI#P|0B!>J3z{i&4vR zsVsvJ(?1H4hI<4Koi_mOnR&_upGI#`oi|9DL_~Mmy>Q(|j3TtfMF4;oH`X|{%x%OV zH*1#l`O=8*007>!(eOm$m)83#8Tw)gY{hP)jMrfeF(#W%*E<7IH~>J?!!A#A-3x*C zGR%spq%jYC^v_FgPT!1QFCW^f>wQU;@_$&xjQ>Fa55qV#1j3Xz@TbI+Jp7ups4)vS zPOgbCW>)+OrU^fL%!+8Y@Y2lUx?gfx@T^YK;#eQMNr=m)%XZXG-6g{4+c5Zv$ao-Q zp?;Yjz9)CZv;c{Yc3lZ@M*IP$g43AivHPXoec*>N(%aN`F|+eRmJG(C)8TwtisztN zzeQ+O?=JLsBQ^iVElL7m<8mJBl5zg3#d)H^t25*79`2MM+zBH!yP$2JSUUU9EXct9 zv7(&0)Z&AkzyN{J0FE~%=3gBjho;5HcSnrY?U~b zs*3c+IAs(J80QQ;*{gp1`^TmH#{%!XD!~@MZ%)S$tRZWyG$L&?Bw{RKKlE+j=KJQF;oa|g`h73e$FAx0^B4W939oLh6N6MXx}U^ zaK5LoMe50u^qrVgrt!_ao)vO!bnQ8oq7Hh{bgoyNNM1>wV*njgI4e7^N^EWb=)&u1y>Ajr0)%R}-OzD8{yY z!sEqm6MPY$hOG}ka_`zwy(an(ij$k}PN^L`&oKXe9=N;Wxn(g`ZV9>n*zV!@G%1xo z@-P$s9_E_BvuGIjM$G#;o^0oy#Z|9}u8DBe+8wwHc2QS$^EBOY6Kx=K8FvjbA76LI zd{Q+@>$YtOcTrG}wy;+jh3xQp7Id%3{p&m-f(|6GfGs;5e@TX`a+P zkl;BR0rrTLyDK#=>ov<0{#fJ9PW^t*pbM*u0Q(sES+5t|CmJP+pX@1|GLkc>6jtZm+P6+5_sfj;aN+w zwL0uhtX<%3aTz(e{D7>$+W^4FN9L3Vqf-xqu6)anE=b>kp5mcx&OD@5s$e>I02Yf~>j`8)RZ8s|?{^bIA+*nzWy;m>mf(06$n zw~!uNIYNeAm(epzmv1P6FY)yqX0?DjJJ|!cD`Q8-mRX2EO$drQ#cRrOlj-x8-~OK9 z9scSH(>NX59J#P}zy?GU5&tiuS*FSNqUnmIeNji+eHuOy1zjTUPCjZfLzbixLkhrk zupj5T=krrDqDMK9!_$=C)P4S$nf$8;IrC!ORCeihyqje98QN_!PXaB^k{A92HEYa} z1b{dA*tvxbu3`Gj;#tV0O-DJ8@k1cfY`9OFLy!mUQ<;D{kCU@iLWXn2OY4;8GzTDg z)Rqz|KIqeR+)gk&5h6HVu1h}giGQv{H;fqXbR6#4lM(1djcbcB+MaBgl%ZHYy84~h z+XIDU%&T;5*?10-un|4rz5u(zVG-RXEqH5KQnUks_ z?Lx-3>pCqUA1S-9FSsUY98XuNW*!B5Srw#=qIUSI)0L>$8X+uk=ZSjzl1_fVa;u>E zDPaIp*tSHDR5``KD!iRps0=jZ6c<94JTcxUJUEF1c%JjH%NedW^++}bf8sUKAM2uK z;JQPo^4DQFj)8d#)@=+9Bg~IoPVy;wMzxc1ccj84%qTOFrU<_{Z!k%ck6RZ`bb}nB zW!A+G{BpoD@iljsbZXvL>2j$67qe8u-UX!gwCxfpy>9w)8_ECtIwoU(zv#_>Mb;!L zLL#iF4bzG91;Igf@=|`THtZe1jD2xsCqWn=6J&H1_OiA}Cx{&4ET63=v=SK2sTFTU zVXH)s{+g*-x={;OlA065Xo!4$l};B<=zcfmx_R%Eu+DSdRnDLEXQdzLwM^yACa8U? z@{(j#WavQ>5x7U1zXPLm7~m~oM~hf4FS^aRa2-c5f4Bfa6}Bx=myt(}4t@LUhDu{fF=PH&(?2F@XEL$Vtk;H6JyK=;?qvxk2!fXaGr zV(`e1fs~{|QZahS6Db#a&4vM|@<+Tn_Mr!nMm!1DOv5xB z$&D^HnM$-Dx`|bj!S@$grKU`Bd)(GZEJNuhIY8V>3d&oJ7Pb0xe#=Cin#imm;sgPbiEM{fIqQM=ANCukBGNUrg}nIFswc{(I}G%z7IK zDy`Gi+FiG$L~KdQA}aiAP3z!yP&HLz_zn^p#{}SGIiKP@j*1;Gko>#TY zLwNM8Svd3sDL?dXMfGI3TBqj1z($u#y5wQHpTG+hw)N3=S2=LAyv8M%i-NP#ICNzq zpZqc$M{rFoB~FMk+2g$nOS2T>V9gMpVNuAnc(zX3RIY$B)_R1{rC7A-A|LDj3$D2s zr8Iab%~M&Mp!1eqOnD5Rt;U7v{Hp(T;r)J%kO9(Es#84{td!u8P8=Dw=EBP($u@ei zHk5dtJ^8Cq+5T{p$-*Xr%oTa2d*SzO&*ZaWk8Ib#Rp0Kfp= z-wuzYO&50@LvZKb#^mj~!4(bo{a~Tno_1RwyaVd(e>=+Il~HRomt>jDl`~;?ms8SJoWu82!B3mBx=;wMtb@WK4kwQZsUX%Pi%jSZIZAr4r{^)CABd2pq8U10KlB; z-m$L}qixSVp{4af5OsSuY6!OFntQ|lkFD=Er%u~B^{Dh8Mzr{UL)7>5c zyGj;t<$LS?i)E9@JNEgT0i7I>zz9CqdUpj+CQmJ^>gKteN{eW-@v$U#jXuWe`tW>! z-*w1idh8YS`8*=y(04GJfX+TIJJvbVo(UT7bI24jQ$SOg?b0*6I?(TLS1Ah#I&MRh zCIp|Muks@&z^O(!(Xl~)58f9bTy|B&IV8IHvH&!g zWi2QE;eW$3mott+&Xv@tr?!oolxZ zkeb>2=ydxfeu*iUWJ1eIrm1J<&r`~7{b5v6dQHCtPgkvRoT1GK7mD)dWqm1;vu8{d zW^5Pb$TJwTj+3rEkUC@0hDPgb`xLDNzRzzu*upFjDyUhSPaRBQmMsqQtrFE-?5E8L zPhh{8WpT%nPR>QI0PpXmMdXHHf!x(zTy06(k&Yur&8%>ATV6+M{&~rSp+LoWP-%Y0 z3XOtc2I?I)oG5Dl90kjErB59Q_IO6#R5f70RF)6JqQgO)2~ zTt3R#fnDGOsdM>`5w9Qe6tCgCuZPV!lSYi=Xzh2eOBfyo>yucs%72WFP5P3G5hAcr z^0dsMV}Hcdv_>;$RHx;1bwJmETYzlD9C8!QyCI!`F@88MLB`cNm$s;d0EoYtH+TVl|ApyjuevL@TQz}J{;i;q* zv%d;|IYly)eC(z1=vi{ZeAt9U^4_YzGQ)qz9e%`1gjQgL)(vDV@op{o^5q#2Tpry| ze-q#qKpRarXo%y~ls@PX%U{Y{Z-6AoNz;9rnjenC-D$xMGSMt8b$c3j$;vbMjpX-u zo5nAUfWE={=;MXb1;`b8tE|)%Rq0)p5X|jTUUwzmmZmKy@vQ1el;@0DcFB&nV)q>b zGs^1|k}SW|p)j7`?St~lc=l%vuZNb&&R}a7Uvh~lf?Y@IwHtn{(lACje3qQl!-Ynd zi5&Jo61LB9cxG(&e%Od7LB<8Iin_gme*@8c4QoYb zWhEgeAZw}Al1sk54T_KxOSDN=ej^;{a1n?4nR8k6BX)}hT_x18>xW-4o0pfUJH$eb z#JHNzJ(ZUCeCKvvuI}#@^cz-Ps5V8o8>OGzQk|eM3+w{YSE`)DQddZYd>m)h5VnUM zFEM(W@4s|@pZ4=!tW)l<;4fi&?=DGM72VACbm2D$)wnu&tKEMObTZXpTt{V`|Fr`t zr0C(4YB_SS)n;L8R7|y{(HD?V%CXA=02I(gFV^RZoaaipW^w*p^?K25dLOa;Sln5h zOz8?^Xg>R5(^j0WJ;08cv)8S+HL~z!w9&>8UA5tHFI(w@mRNPk^L>+ZPHbRvG+E#2N&9Wf|nEb$oBmWfy}E z*ItpeZ6`^vnaWo@$aWRrM}1BDCE!;-tzHMTImJA7>!@JWtOyZ@{VH*Ua#$T|I(#+d zMoV2kTM%0zmn3t)6Hx!mNXpVOQa4#b%cyy%?9vG6pyxQ`ezE?JrJSD;mJV@u0Pd&h zC1iA&x-t8uMXuyO4v;WIWZ0#SGwMmQX~ISEqWmP~Ox=6L?B|zL-7EF#CeUFEMWZ*U z@EWYe#@KkR96F&EB~(g*0*oe7n2~<){bbwbNzHQDW84KWeBzCS4ofI7gtnc$B$y?o zsf>C~H1iNKB{%QC@fxCQb{BE7xQ<}rai6~q6}x0*t?j1; zn$>cK&+|wkvM(UF3!XTR-ysCeoRt$$oyST&G~0J)F8jDZeuNKrqoS{}R-bTxW+D7S zCBeK!-LB@gBa)T1L01RlFfn$PK2VR-=&MLU>m9 zs*n>cW{5CYOL8UeH@;$}RVXc;AJH$RT_UG$Yc$#!yZ;r%4FKSg@vcA<$p@m;bO=q4 z8kg`2gV{Dm$4_tSXgAMJcbNO> z(GZiKuyQ)s(Q*XEE!F)B6j0svTG^-k_g4BIi@_yuX{tiHci1Uq5PQ=4gDzJJ-cn*% zt9?z{Q^7p9)~=sL3}|n5R`E2pPogMLU4jG;Py?T6>F|~Gq_v$+t6LWC=_rkXJN4GM zRO<)TtiC5^rlVpx3isy?IM7F5z{ujFn)E(x+!lCg%R^@rD_Ul){MFmQiUlSBz)2R= zw{6k4pGd2y&%TfTsRot=Bwdk;QPlb;dWo-&Pm3`y)tT)pS(ZOhNDZY|~%a3U_3Z zHR@rn<}!971}jB+d>R`nOO|oS!ACB0x_S^lZi@~zw@-!ECMM7>_WNwPIE4zwo&5vy4)7z-t8CxL=pehomQ832H^XwW|*N!jG^+p7OV zDE`kvUZiM}@@30}nK4pH{LYx^tAK&9kGQSA%CROyAv?cin(o{J0197_-607ZcepGq zkD{6@nR+P|+!TQW07PLFoXX#DJ-ii*nRq8Kh_e4D#_4Exj{Xy{vcksQ*^z|c`D2a! zUg2$@OeG1^3OOudR3~psC!~Szi{i3TZi16>xBc4A%&5jUgSA8|ccWazGwU zhSrUZ91ymlg561^3VL_uXkbQjC|918IB+kCwzV7)^s_NY`mIUfVfon6kAvva>R$D& z>6v9h;8NKfm$Bxr0uBe$#Hq*lG^y?m$pdZv?H(%Cu{sD$*S#3NyYkTl>k~+W`Yxr8 z?O>om!{nk(KQr~V9e>5FDpvc$_wOo*{0E`j2C>x|YTXInnz8WMm9gbg6LuqP$aySV z|I$*~o{t&ImAkW)mhM>SlAQydXh|T)EA3cHUNQFBcQ5^(H^{psx@Id9?3&o+xpSTy zO%!?-+Ej$FtV<7KTfLj5(;b@fBJeEttfbW1@MhzcQA&I88HaG|!P|EWGhUUPancXs zPN+2pnnciZE$cN=zIv$#FEH{af!i%)Cbb+~z=~pE128Q4f<_fYEYNe?1n#Lvt4Z zkf)8dBq?*S*R=hZu*UwfMc3nLs`hA^e3?PynJa{n^>L4iOt`JUx>J`~8`lbiDDGe~ zIyFz3;oE6}4v(pPQkHK>u)=X2Q#tY{vzFVYOk@P1G12udpg*1sPQ>iIMo|KZnsM`2?Q-~rOALi8@BQlQ_S zIQ=MTygO@+%IYuM$5TMX*iY60K>nIF0AS$Vzw1kkx&Vy)SIoTZ`T*+xMWp;+;^wdz zni&pk_`5rA2)a#;J<74qUO|jHZdUw*u|%tv0b9zV{qghlIH>5F-%EeLVv~$5YCNne zL;N?&<>b{;nNIn#YIQ)ycG622y^{INmJIy z>BEP;H?Fy>lUIB4P2r}H@ndmnzngM=F2}x@JD*!(QEya|sfzW7Yf6;lo(<-!dxUw9 z1l=&bz|M-PHy7bzfjunGLW<0cIkT>04Xgj($b>y_RhO3Ivp6Qh3ZOgJE{uK9a%Tv= zg)drZ4x4RXnZ_R3z2e?WuaHWNx@rpZLdn-D9>>th)Z~do6EHgmP2OuE}57N`Ql~hhn}73w^BB8DoVAS;LpAIYCzl<>^wA;PKcxSP8VB=$*l~Ojydv^wst`SsmnQ`& zDJctDRCnD9_h+y_Bxo=RWD1WDsX#4*=hqs27r<|SFia(eNi}TdXqK*^G zR<+jCR0GcE8(*bA|NI6O#JMD%gc1^V>>&y&TFm)ZDvwSL?OUg%8e?ZQfj5omsvOKr zWGulzQC(nvbm!xbovR@b9h(XPijJsGi>OXzV5v?x!-e!e_`J>p=SLweF%!Xmk}?>M z!hBZAmENw{ebp()Wh2=yg~2}wo=%B9R*k5$i!+kVFj`tA8{h70afO!=+ie6f3FK$f}}e=~azrvG1=y|4`1)PE!PzO)0`3gW;E zQuxq5U(Md*=iTrZ7);$9bbzL|AS4E)1YN7E0J03N$W_yo^Rsvnc+in;Fk9Sz-w*MbYmDO94C~ zcC?=bDSL2{TGVn0rAA96@YQa69E2V38llQxwtrK7b!O&DUj+mn6F4-)u$=|JosWU8 z(wLUGiRkMwfAxvHIF}gyQS4g$%^yGd>wSgz0aqzrl5Mbh4l?CChu~;8YWLHClv2&R zL&iEne0%2I!D#ERE?TV-k=yH_F%^A#hd;-&Ymavg;(qbUL?9m+ePx;8zbU<42cn z@Qz2L-uw>ITs9a ziWAX<4%g%#lm#>PU`$)!i8f_oz^_!?nlL83Ze{8v&bj+* z{gDciZO{z?B*vZ4Q9jeV0Vjf5-RDa7>3gzwA?QZJ5j5x#m=eW5S3=M~*tQ^`)urkx zVkeq&w};FnS#TF0R3HNWwxWq%@mp`fCIZc^|DoVJ=6Oa+!w-8UGj(_?Zlk)CfjKo5 z>pD3-nP`Pa+|AB_6( z-2+Mv%1O4r^nmvU!5rP@sl^ZEvu~I2VwCY9$G_t}C+pK&s=+6=Zxvd7;6<0WhUV4q zOD=&f%YOmb@Bd#JLMC7*UI#XZ#A)=`WGsokI3w7F zwGC{iefgi`m4Ct(<})b=pTCH=$YG1v{Zz4^XGTMwwPe&R{n^?m0<4}|iOW|1>Hfks znq<`1*maCpL_!hhkt0V9bD<(!QXB-jOZ|tf1W$)Ylp2lv)zC3pMn+zn~ z#aR3U3iH4(c86eI-Pc#eV4sLod}qG!^Q)P%Ash-@p($4J;6j5q zSY_&LZ`H)@4yYX3h zO@JqO(6WD~q@7*|Nvu}Txy>uT*47!y} zBhQ)aLdnh}{XKmx`Ww}2vR!KV$g%s=GArnFS~qbKgJZ2!69zl(=q)C?613rDKKZDU z_?_CeZHN8odv!Dt@qx{{t!Zk(A5fYHn${!* z&`TZD^Jk1x&SuVCz1^X48Cl_PIE!*vZC<^|>)mt0=KUK*v1m15Pi}BDDK^N8Q4HS= z8KY36kF#ef@Po1xtH&<2&K@={%zZV;vMn^jCE9lH52!G*DKqGlUT+RJ8fVq2QjegN zh@ds;?GEUOs((CsY&o;v>UFUYfP(qI3Q-SNH%X<1cGg z=*Oz!T6p7Jx*-u0jHiX=WxG7TqsaIN2M4>qDktApKE)c2?dxw zJ^Tx|eAG0QN_P5{qRibNz4bFg^?zYqREN{k2PL! zrYd1RF>w!eJS|z1%>1MxCkNi|_dz9fLqghAH`2;hDDCb7+6`ZjnF)&RyCg3k<60Um z^4dx{D1~|bet&pcPyCmMLbg<>Vu7Y&7!oM)Rr+Zg(fF^ZQj=KN7}T#u#O%Dh1Tv?y zGOy%cWs_W}_=7lAZ$U=FL}$V`zf~!divZC61Y0{R3SkyN+;lOWTjZpDnJe8WTsW*# z`V0)=v`I(b6BllSi4T`E_9u*g{XO<+;bRMV*Y94*knu|!uM++uy_nf_ViSX5r8L~7 zj4LgEA3fpsY6`)@3RUGme}1X9uYB{oI|a6sfH(Ya@H3I}YqPt>I|JraNPqqn;guaJ zm_4$JO=LTL!OtL9k7WKqBhO;X71;1y4J2tJ+2}yc$>5dHQ$4qxf-^V8F9yIJ5ekhK zwx>Cz2AhexvZosc{M1rNcE8OauKj_RVk z7jg=ehENS|wo?;=N8|yXr zy|_KZxZPr0gy)1&`cL6qOpH29oc+_jwcs+r@$*CXt6SqH3vB%kc@W zvOi5*g>K%g?Bfg{e{|uE=v2w_p3gjMkcQ07KqjFBK^LWHD%>j@M5hr1yuDS!yNmt- zl!4l28+V;ED5$Zd;UYj0B@G%CzfOfy5gjZ*)$$+Rl8611k;Pbt z-=E|(Ax}&O_ai9A$(?i$%RgvdJxC5Qs>z+5v2B4oh%R2);K#pxTQ)})T^QA%6hVX z(#48z^P-#=AXZ%glBv6W3@!RKV`OW%x0Kd!7uAum25(Q!J`CyUv5ByKo@^6jt2DcM zRT0;!A=fTSROU%X_2W(`7c(()j^8%K|5fPQePh+X003#SZuSC zeI(KEy^w{C5{KesaC7IqUI<2-4fS8~x|Kl=SI+X(sG;*yb1Q<`jC9G#1)uDM!xHa> zmZoJ~+bw22wA>;yPd@mycy8?PuZU1C*crNIhCg7fxkO(g#?eh)lc2*_Y+vO}s$Kc_ zQAw*n$-(61XW!4wZ!YC99cueD+OjKA4f6bjT1Fl2;&S>YdS`seEm@ceLb+hfuShC5 zRY^m^pDlN6+9XbQHfojGiL1AC;+NpQj0G;$Z$+sPb=zF+ZP9fJV$67vwo1a&CA*WQ zBX*P`-v{DHHVBq@iai7XK4G4k)s1EbQZJS6V7vK~iIA#?!TFy3b7IZLE77N^)&Hlq zYY&HNUE?lMTcmcxHd2H#a>-?csdOT@j7^3kP2`dcLJUSc#HI|f5z0Lom!XjfO@krH zxDDl624UQWw)?G-vDcdO?9Q`$&hwo8?DL%eX4d-FyT12(f8YC?_50R0ufTG#pwF2r zbmf#dSgKan%B?R61q=kAV}jZF`WrjdtfL&V+;m`Jx#;k(J0{La@6*)uv~-5H2r#q0 zl{+oGJPl~s`0|6SL&>KU@TnXAYGb8wI%^&C?$an0t5lz{7yLAp!}BS#i1pG*yuFU< zIw5F7m7X|Eb?ksl^ylR#!*Qj|R}r1&ZR&Jr`&b*cFR*H0z4%KzL`wJ^aoyj4>&4Rx z8+i0a)F;22)>hA4-M(@zd78t!iy9)P%0lks1hq>bPVE2UAJW9j)571l8B(#Ow$@f{ zDISP90mrb$98A*oQ}feCQ+3m;V=nAPTy34Nnfn+$)LV7R?)N{Dzpk3gM-15I zQ!kF(f}F(=$%~E8m4ALVb?k@ia@1zcXT8zOVHZ}@{MYBd5b0qz7KaqIVOLX>;d3Dv?b1mep0Y?eMzwd3k*fw=udqAW zxyKC@n>D{>z)+Uxe@|C`Im@Z}wh|TX(-hiCy@7oJ+Q7jU{P*`4ODOdwC72Yk9c(-) zhX9ipbf~kn_&h1=0j+KG%GgqyCk50-C&aFYKD$p7W6Y+~0uFC{lnz9)QG~%kY2IuqfDXCoLK0!(f0+^f(-3b$ zr2sA>owT=2p&TqM1)3N*C`&?)b)4q>@--)c<0V0~wo2`xl=Uo;^ z(n5@=9vikU_aA?Bo7;k6vE*@Qt~hTCgeVi8NSaS7fG=>#7S2)*zmWti%^Di6-_z7s3eKcNeV9iz`2RAc$ z*k3Kt@awGZ;FF}2J`b|}R1PeLtQlQc&s(U(YV|&$3fA8eew^#R9$fLYiyzKEb)IMjiggkg0slxfCXUZzoGO@kf z!ak>U0N!&^j?R{qObTLwYiL&|)OGTa$;Wa&r z%$4q4hbq;fA@9fq-5b`+$G^^c+&3enFI;ukTSWQTbQw<<5sg;2t1a$?y&9J)Sw2b1sEv1z>E6&1v%?|_)n_WP1xZiHZKV%ol$it!b?R}5>i9sOT-+`U zD9Vw_zhks;aB2r@Shq*_?YjeU>mz1xuq~PIh}>L$;31?vfb7WtY68w`XcS z7M_{g`A~3fyHujeqw^q3e7Za(Qwyt`SMH*}x(d*xd+~)ZW4?@FuN3Mw(x5e$^AtT5 zeX)rCbnXFrxIWthc8uOCJ;JhYA*OQMzz`pMeC-IqF#j5rU)DSPB?_`TL&8fw z-Y5f856eℑ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 nuMg;7{)T^+46}d0|JVDVCL666AW1VH`|4kbZ* literal 0 HcmV?d00001 diff --git a/吴光慧学习笔记/11.5/Count.txt b/吴光慧学习笔记/11.5/Count.txt new file mode 100644 index 0000000..08991d7 --- /dev/null +++ b/吴光慧学习笔记/11.5/Count.txt @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/11.5/LoveTalk.txt b/吴光慧学习笔记/11.5/LoveTalk.txt new file mode 100644 index 0000000..cc35130 --- /dev/null +++ b/吴光慧学习笔记/11.5/LoveTalk.txt @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/11.5/query.txt b/吴光慧学习笔记/11.5/query.txt new file mode 100644 index 0000000..d40116c --- /dev/null +++ b/吴光慧学习笔记/11.5/query.txt @@ -0,0 +1,30 @@ +Detail + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/About.vue b/吴光慧学习笔记/11.5/备份/About.vue similarity index 94% rename from 吴光慧学习笔记/hello_vue3/src/components/About.vue rename to 吴光慧学习笔记/11.5/备份/About.vue index d897dfb..39941e8 100644 --- a/吴光慧学习笔记/hello_vue3/src/components/About.vue +++ b/吴光慧学习笔记/11.5/备份/About.vue @@ -18,7 +18,7 @@ onUnmounted(()=>{ - \ No newline at end of file diff --git a/吴光慧学习笔记/11.5/备份/Detail.vue b/吴光慧学习笔记/11.5/备份/Detail.vue new file mode 100644 index 0000000..ad50fb1 --- /dev/null +++ b/吴光慧学习笔记/11.5/备份/Detail.vue @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/Home.vue b/吴光慧学习笔记/11.5/备份/Home.vue similarity index 59% rename from 吴光慧学习笔记/hello_vue3/src/components/Home.vue rename to 吴光慧学习笔记/11.5/备份/Home.vue index 51cfcb9..ef3261f 100644 --- a/吴光慧学习笔记/hello_vue3/src/components/Home.vue +++ b/吴光慧学习笔记/11.5/备份/Home.vue @@ -5,6 +5,16 @@ diff --git a/吴光慧学习笔记/11.5/备份/News.txt b/吴光慧学习笔记/11.5/备份/News.txt new file mode 100644 index 0000000..529aff0 --- /dev/null +++ b/吴光慧学习笔记/11.5/备份/News.txt @@ -0,0 +1,61 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/hooks.vue b/吴光慧学习笔记/11.5/备份/hooks.vue similarity index 100% rename from 吴光慧学习笔记/hello_vue3/src/components/hooks.vue rename to 吴光慧学习笔记/11.5/备份/hooks.vue diff --git a/吴光慧学习笔记/hello_vue3/src/router/index.ts b/吴光慧学习笔记/11.5/备份/index.ts similarity index 52% rename from 吴光慧学习笔记/hello_vue3/src/router/index.ts rename to 吴光慧学习笔记/11.5/备份/index.ts index 34f6af2..e26b3a9 100644 --- a/吴光慧学习笔记/hello_vue3/src/router/index.ts +++ b/吴光慧学习笔记/11.5/备份/index.ts @@ -2,21 +2,40 @@ import {createRouter,createWebHistory} from 'vue-router' import Home from '@/components/Home.vue' import News from '@/components/News.vue' import About from '@/components/About.vue' +import Detail from '@/components/Detail.vue' const router = createRouter({ history:createWebHistory(), routes:[ { + name:'zhuye', path:'/home', component:Home }, { + name:'xinwen', path:'/news', - component:News + component:News, + children:[ + { + name:'xiangqing', + path:'detail/:id/:title/:content', + component:Detail, + props(route){ + return route.query + } + } + ] + }, { + name:'guanyu', path:'/about', component:About + }, + { + path:'/', + redirect:'/home' } ] }) diff --git a/吴光慧学习笔记/11.5/备份/router/index.ts b/吴光慧学习笔记/11.5/备份/router/index.ts new file mode 100644 index 0000000..e26b3a9 --- /dev/null +++ b/吴光慧学习笔记/11.5/备份/router/index.ts @@ -0,0 +1,42 @@ +import {createRouter,createWebHistory} from 'vue-router' +import Home from '@/components/Home.vue' +import News from '@/components/News.vue' +import About from '@/components/About.vue' +import Detail from '@/components/Detail.vue' + +const router = createRouter({ + history:createWebHistory(), + routes:[ + { + name:'zhuye', + path:'/home', + component:Home + }, + { + name:'xinwen', + path:'/news', + component:News, + children:[ + { + name:'xiangqing', + path:'detail/:id/:title/:content', + component:Detail, + props(route){ + return route.query + } + } + ] + + }, + { + name:'guanyu', + path:'/about', + component:About + }, + { + path:'/', + redirect:'/home' + } + ] +}) +export default router \ No newline at end of file diff --git a/吴光慧学习笔记/11.5/道氏理论定义及基本观点.docx b/吴光慧学习笔记/11.5/道氏理论定义及基本观点.docx new file mode 100644 index 0000000000000000000000000000000000000000..0fe31791a22c4fa19f12877cb5bb5915efa9cbc3 GIT binary patch literal 12971 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 literal 0 HcmV?d00001 diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid index 46220bd..fd093c0 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid +++ b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid @@ -10,7 +10,7 @@ case `uname` in esac if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@" + exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.js" "$@" else - exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@" + exec node "$basedir/../nanoid/bin/nanoid.js" "$@" fi diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.cmd b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.cmd index 9c40107..87f0842 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.cmd +++ b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.cmd @@ -14,4 +14,4 @@ IF EXIST "%dp0%\node.exe" ( SET PATHEXT=%PATHEXT:;.JS;=;% ) -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %* +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.js" %* diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.ps1 b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.ps1 index d8a4d7a..954cf93 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.ps1 +++ b/吴光慧学习笔记/hello_vue3/node_modules/.bin/nanoid.ps1 @@ -11,17 +11,17 @@ $ret=0 if (Test-Path "$basedir/node$exe") { # Support pipeline input if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + $input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args } else { - & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args } $ret=$LASTEXITCODE } else { # Support pipeline input if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + $input | & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args } else { - & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args } $ret=$LASTEXITCODE } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.package-lock.json b/吴光慧学习笔记/hello_vue3/node_modules/.package-lock.json index 05df0ca..cc9451b 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.package-lock.json +++ b/吴光慧学习笔记/hello_vue3/node_modules/.package-lock.json @@ -764,25 +764,6 @@ "vue": "^3.0.0" } }, - "node_modules/@vue/devtools-core/node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@vue/devtools-kit": { "version": "8.0.3", "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.3.tgz", @@ -939,9 +920,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz", - "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -963,7 +944,6 @@ "version": "2.6.1", "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.6.1.tgz", "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -1076,7 +1056,6 @@ "version": "4.0.5", "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz", "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", - "dev": true, "license": "MIT", "dependencies": { "is-what": "^5.2.0" @@ -1513,7 +1492,6 @@ "version": "5.5.3", "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, "license": "MIT" }, "node_modules/is-docker": { @@ -1555,7 +1533,6 @@ "version": "5.5.0", "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz", "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -1702,7 +1679,6 @@ "version": "3.0.1", "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, "license": "MIT" }, "node_modules/mrmime": { @@ -1730,9 +1706,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", "funding": [ { "type": "github", @@ -1741,10 +1717,10 @@ ], "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/node-releases": { @@ -1880,6 +1856,66 @@ "node": ">=0.10" } }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/pinia/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", @@ -1908,6 +1944,24 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -1932,7 +1986,6 @@ "version": "1.4.1", "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, "license": "MIT" }, "node_modules/rollup": { @@ -2072,7 +2125,6 @@ "version": "14.0.1", "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2082,7 +2134,6 @@ "version": "2.2.5", "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.5.tgz", "integrity": "sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==", - "dev": true, "license": "MIT", "dependencies": { "copy-anything": "^4" diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/_metadata.json b/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/_metadata.json index c3ff732..ba331cb 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/_metadata.json +++ b/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/_metadata.json @@ -1,25 +1,46 @@ { - "hash": "547bafd9", + "hash": "39b4f1a2", "configHash": "e5b55508", - "lockfileHash": "0d539b07", - "browserHash": "2bc9fe4f", + "lockfileHash": "22fdfde4", + "browserHash": "b44b993f", "optimized": { + "pinia": { + "src": "../../pinia/dist/pinia.mjs", + "file": "pinia.js", + "fileHash": "a97780a2", + "needsInterop": false + }, "vue": { "src": "../../vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "5b2b4475", + "fileHash": "1e96b106", "needsInterop": false }, "vue-router": { "src": "../../vue-router/dist/vue-router.mjs", "file": "vue-router.js", - "fileHash": "832988d5", + "fileHash": "0eced000", + "needsInterop": false + }, + "axios": { + "src": "../../axios/index.js", + "file": "axios.js", + "fileHash": "0965a06b", + "needsInterop": false + }, + "nanoid": { + "src": "../../nanoid/index.browser.js", + "file": "nanoid.js", + "fileHash": "39507410", "needsInterop": false } }, "chunks": { "chunk-SFGEOVP2": { "file": "chunk-SFGEOVP2.js" + }, + "chunk-PZ5AY32C": { + "file": "chunk-PZ5AY32C.js" } } } \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/vue.js b/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/vue.js index 8964ff5..6b4ca1f 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/vue.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/.vite/deps/vue.js @@ -169,6 +169,7 @@ import { withModifiers, withScopeId } from "./chunk-SFGEOVP2.js"; +import "./chunk-PZ5AY32C.js"; export { BaseTransition, BaseTransitionPropsValidators, diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid deleted file mode 100644 index fd093c0..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) - if command -v cygpath > /dev/null 2>&1; then - basedir=`cygpath -w "$basedir"` - fi - ;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.js" "$@" -else - exec node "$basedir/../nanoid/bin/nanoid.js" "$@" -fi diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.cmd b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.cmd deleted file mode 100644 index 87f0842..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.js" %* diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.ps1 b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.ps1 deleted file mode 100644 index 954cf93..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/.bin/nanoid.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args - } else { - & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args - } else { - & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/LICENSE b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/LICENSE deleted file mode 100644 index 37f56aa..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright 2017 Andrey Sitnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/README.md b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/README.md deleted file mode 100644 index f243c78..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Nano ID - -Nano ID logo by Anton Lovchikov - -**English** | [日本語](./README.ja.md) | [Русский](./README.ru.md) | [简体中文](./README.zh-CN.md) | [Bahasa Indonesia](./README.id-ID.md) | [한국어](./README.ko.md) - -A tiny, secure, URL-friendly, unique string ID generator for JavaScript. - -> “An amazing level of senseless perfectionism, -> which is simply impossible not to respect.” - -* **Small.** 118 bytes (minified and brotlied). No dependencies. - [Size Limit] controls the size. -* **Safe.** It uses hardware random generator. Can be used in clusters. -* **Short IDs.** It uses a larger alphabet than UUID (`A-Za-z0-9_-`). - So ID size was reduced from 36 to 21 symbols. -* **Portable.** Nano ID was ported - to over [20 programming languages](./README.md#other-programming-languages). - -```js -import { nanoid } from 'nanoid' -model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT" -``` - ---- - -  Made at Evil Martians, product consulting for developer tools. - ---- - -[online tool]: https://gitpod.io/#https://github.com/ai/nanoid/ -[with Babel]: https://developer.epages.com/blog/coding/how-to-transpile-node-modules-with-babel-and-webpack-in-a-monorepo/ -[Size Limit]: https://github.com/ai/size-limit - - -## Docs -Read full docs **[here](https://github.com/ai/nanoid#readme)**. diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/bin/nanoid.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/bin/nanoid.js deleted file mode 100644 index f8d7556..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/bin/nanoid.js +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env node -import { customAlphabet, nanoid } from '../index.js' -function print(msg) { - process.stdout.write(msg + '\n') -} -function error(msg) { - process.stderr.write(msg + '\n') - process.exit(1) -} -if (process.argv.includes('--help') || process.argv.includes('-h')) { - print(`Usage - $ nanoid [options] -Options - -s, --size Generated ID size - -a, --alphabet Alphabet to use - -h, --help Show this help -Examples - $ nanoid -s 15 - S9sBF77U6sDB8Yg - $ nanoid --size 10 --alphabet abc - bcabababca`) - process.exit() -} -let alphabet, size -for (let i = 2; i < process.argv.length; i++) { - let arg = process.argv[i] - if (arg === '--size' || arg === '-s') { - size = Number(process.argv[i + 1]) - i += 1 - if (Number.isNaN(size) || size <= 0) { - error('Size must be positive integer') - } - } else if (arg === '--alphabet' || arg === '-a') { - alphabet = process.argv[i + 1] - i += 1 - } else { - error('Unknown argument ' + arg) - } -} -if (alphabet) { - let customNanoid = customAlphabet(alphabet, size) - print(customNanoid()) -} else { - print(nanoid(size)) -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.browser.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.browser.js deleted file mode 100644 index 3858bd3..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.browser.js +++ /dev/null @@ -1,29 +0,0 @@ -/* @ts-self-types="./index.d.ts" */ -import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js' -export { urlAlphabet } from './url-alphabet/index.js' -export let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) -export let customRandom = (alphabet, defaultSize, getRandom) => { - let mask = (2 << Math.log2(alphabet.length - 1)) - 1 - let step = -~((1.6 * mask * defaultSize) / alphabet.length) - return (size = defaultSize) => { - let id = '' - while (true) { - let bytes = getRandom(step) - let j = step | 0 - while (j--) { - id += alphabet[bytes[j] & mask] || '' - if (id.length >= size) return id - } - } - } -} -export let customAlphabet = (alphabet, size = 21) => - customRandom(alphabet, size | 0, random) -export let nanoid = (size = 21) => { - let id = '' - let bytes = crypto.getRandomValues(new Uint8Array((size |= 0))) - while (size--) { - id += scopedUrlAlphabet[bytes[size] & 63] - } - return id -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.d.ts b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.d.ts deleted file mode 100644 index 9f28403..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.d.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * A tiny, secure, URL-friendly, unique string ID generator for JavaScript - * with hardware random generator. - * - * ```js - * import { nanoid } from 'nanoid' - * model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT" - * ``` - * - * @module - */ - -/** - * Generate secure URL-friendly unique ID. - * - * By default, the ID will have 21 symbols to have a collision probability - * similar to UUID v4. - * - * ```js - * import { nanoid } from 'nanoid' - * model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL" - * ``` - * - * @param size Size of the ID. The default size is 21. - * @typeparam Type The ID type to replace `string` with some opaque type. - * @returns A random string. - */ -export function nanoid(size?: number): Type - -/** - * Generate secure unique ID with custom alphabet. - * - * Alphabet must contain 256 symbols or less. Otherwise, the generator - * will not be secure. - * - * @param alphabet Alphabet used to generate the ID. - * @param defaultSize Size of the ID. The default size is 21. - * @typeparam Type The ID type to replace `string` with some opaque type. - * @returns A random string generator. - * - * ```js - * const { customAlphabet } = require('nanoid') - * const nanoid = customAlphabet('0123456789абвгдеё', 5) - * nanoid() //=> "8ё56а" - * ``` - */ -export function customAlphabet( - alphabet: string, - defaultSize?: number -): (size?: number) => Type - -/** - * Generate unique ID with custom random generator and alphabet. - * - * Alphabet must contain 256 symbols or less. Otherwise, the generator - * will not be secure. - * - * ```js - * import { customRandom } from 'nanoid/format' - * - * const nanoid = customRandom('abcdef', 5, size => { - * const random = [] - * for (let i = 0; i < size; i++) { - * random.push(randomByte()) - * } - * return random - * }) - * - * nanoid() //=> "fbaef" - * ``` - * - * @param alphabet Alphabet used to generate a random string. - * @param size Size of the random string. - * @param random A random bytes generator. - * @typeparam Type The ID type to replace `string` with some opaque type. - * @returns A random string generator. - */ -export function customRandom( - alphabet: string, - size: number, - random: (bytes: number) => Uint8Array -): () => Type - -/** - * URL safe symbols. - * - * ```js - * import { urlAlphabet } from 'nanoid' - * const nanoid = customAlphabet(urlAlphabet, 10) - * nanoid() //=> "Uakgb_J5m9" - * ``` - */ -export const urlAlphabet: string - -/** - * Generate an array of random bytes collected from hardware noise. - * - * ```js - * import { customRandom, random } from 'nanoid' - * const nanoid = customRandom("abcdef", 5, random) - * ``` - * - * @param bytes Size of the array. - * @returns An array of random bytes. - */ -export function random(bytes: number): Uint8Array diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.js deleted file mode 100644 index 80c7587..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/index.js +++ /dev/null @@ -1,47 +0,0 @@ -import { webcrypto as crypto } from 'node:crypto' -import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js' -export { urlAlphabet } from './url-alphabet/index.js' -const POOL_SIZE_MULTIPLIER = 128 -let pool, poolOffset -function fillPool(bytes) { - if (!pool || pool.length < bytes) { - pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) - crypto.getRandomValues(pool) - poolOffset = 0 - } else if (poolOffset + bytes > pool.length) { - crypto.getRandomValues(pool) - poolOffset = 0 - } - poolOffset += bytes -} -export function random(bytes) { - fillPool((bytes |= 0)) - return pool.subarray(poolOffset - bytes, poolOffset) -} -export function customRandom(alphabet, defaultSize, getRandom) { - let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 - let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) - return (size = defaultSize) => { - if (!size) return '' - let id = '' - while (true) { - let bytes = getRandom(step) - let i = step - while (i--) { - id += alphabet[bytes[i] & mask] || '' - if (id.length >= size) return id - } - } - } -} -export function customAlphabet(alphabet, size = 21) { - return customRandom(alphabet, size, random) -} -export function nanoid(size = 21) { - fillPool((size |= 0)) - let id = '' - for (let i = poolOffset - size; i < poolOffset; i++) { - id += scopedUrlAlphabet[pool[i] & 63] - } - return id -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/nanoid.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/nanoid.js deleted file mode 100644 index ffa1d4b..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/nanoid.js +++ /dev/null @@ -1 +0,0 @@ -let a="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";export let nanoid=(e=21)=>{let t="",r=crypto.getRandomValues(new Uint8Array(e));for(let n=0;n "Uakgb_J5m9g-0JDMbcJqLJ" - * ``` - * - * @module - */ - -/** - * Generate URL-friendly unique ID. This method uses the non-secure - * predictable random generator with bigger collision probability. - * - * ```js - * import { nanoid } from 'nanoid/non-secure' - * model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL" - * ``` - * - * @param size Size of the ID. The default size is 21. - * @typeparam Type The ID type to replace `string` with some opaque type. - * @returns A random string. - */ -export function nanoid(size?: number): Type - -/** - * Generate a unique ID based on a custom alphabet. - * This method uses the non-secure predictable random generator - * with bigger collision probability. - * - * @param alphabet Alphabet used to generate the ID. - * @param defaultSize Size of the ID. The default size is 21. - * @typeparam Type The ID type to replace `string` with some opaque type. - * @returns A random string generator. - * - * ```js - * import { customAlphabet } from 'nanoid/non-secure' - * const nanoid = customAlphabet('0123456789абвгдеё', 5) - * model.id = nanoid() //=> "8ё56а" - * ``` - */ -export function customAlphabet( - alphabet: string, - defaultSize?: number -): (size?: number) => Type diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/non-secure/index.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/non-secure/index.js deleted file mode 100644 index a3d83f2..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/non-secure/index.js +++ /dev/null @@ -1,21 +0,0 @@ -/* @ts-self-types="./index.d.ts" */ -let urlAlphabet = - 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' -export let customAlphabet = (alphabet, defaultSize = 21) => { - return (size = defaultSize) => { - let id = '' - let i = size | 0 - while (i--) { - id += alphabet[(Math.random() * alphabet.length) | 0] - } - return id - } -} -export let nanoid = (size = 21) => { - let id = '' - let i = size | 0 - while (i--) { - id += urlAlphabet[(Math.random() * 64) | 0] - } - return id -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/package.json b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/package.json deleted file mode 100644 index 1d0bc74..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "nanoid", - "version": "5.1.6", - "description": "A tiny (118 bytes), secure URL-friendly unique string ID generator", - "keywords": [ - "uuid", - "random", - "id", - "url" - ], - "type": "module", - "engines": { - "node": "^18 || >=20" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "author": "Andrey Sitnik ", - "license": "MIT", - "repository": "ai/nanoid", - "exports": { - ".": { - "types": "./index.d.ts", - "browser": "./index.browser.js", - "react-native": "./index.browser.js", - "default": "./index.js" - }, - "./non-secure": "./non-secure/index.js", - "./package.json": "./package.json" - }, - "browser": { - "./index.js": "./index.browser.js" - }, - "react-native": { - "./index.js": "./index.browser.js" - }, - "bin": "./bin/nanoid.js", - "sideEffects": false, - "types": "./index.d.ts" -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/url-alphabet/index.js b/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/url-alphabet/index.js deleted file mode 100644 index cfec9b2..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/@vue/devtools-core/node_modules/nanoid/url-alphabet/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export const urlAlphabet = - 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/README.md b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/README.md index 35abb57..f243c78 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/README.md +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/README.md @@ -3,37 +3,36 @@ Nano ID logo by Anton Lovchikov -**English** | [Русский](./README.ru.md) | [简体中文](./README.zh-CN.md) | [Bahasa Indonesia](./README.id-ID.md) +**English** | [日本語](./README.ja.md) | [Русский](./README.ru.md) | [简体中文](./README.zh-CN.md) | [Bahasa Indonesia](./README.id-ID.md) | [한국어](./README.ko.md) A tiny, secure, URL-friendly, unique string ID generator for JavaScript. > “An amazing level of senseless perfectionism, > which is simply impossible not to respect.” -* **Small.** 130 bytes (minified and gzipped). No dependencies. +* **Small.** 118 bytes (minified and brotlied). No dependencies. [Size Limit] controls the size. -* **Fast.** It is 2 times faster than UUID. * **Safe.** It uses hardware random generator. Can be used in clusters. * **Short IDs.** It uses a larger alphabet than UUID (`A-Za-z0-9_-`). So ID size was reduced from 36 to 21 symbols. * **Portable.** Nano ID was ported - to [20 programming languages](#other-programming-languages). + to over [20 programming languages](./README.md#other-programming-languages). ```js import { nanoid } from 'nanoid' model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT" ``` -Supports modern browsers, IE [with Babel], Node.js and React Native. +--- + +  Made at Evil Martians, product consulting for developer tools. + +--- [online tool]: https://gitpod.io/#https://github.com/ai/nanoid/ [with Babel]: https://developer.epages.com/blog/coding/how-to-transpile-node-modules-with-babel-and-webpack-in-a-monorepo/ [Size Limit]: https://github.com/ai/size-limit - - Sponsored by Evil Martians - ## Docs Read full docs **[here](https://github.com/ai/nanoid#readme)**. diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.cjs deleted file mode 100644 index 80d1871..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.cjs +++ /dev/null @@ -1,69 +0,0 @@ -let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes)) - -let customAlphabet = (alphabet, defaultSize = 21) => { - // First, a bitmask is necessary to generate the ID. The bitmask makes bytes - // values closer to the alphabet size. The bitmask calculates the closest - // `2^31 - 1` number, which exceeds the alphabet size. - // For example, the bitmask for the alphabet size 30 is 31 (00011111). - // `Math.clz32` is not used, because it is not available in browsers. - let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 - // Though, the bitmask solution is not perfect since the bytes exceeding - // the alphabet size are refused. Therefore, to reliably generate the ID, - // the random bytes redundancy has to be satisfied. - - // Note: every hardware random generator call is performance expensive, - // because the system call for entropy collection takes a lot of time. - // So, to avoid additional system calls, extra bytes are requested in advance. - - // Next, a step determines how many random bytes to generate. - // The number of random bytes gets decided upon the ID size, mask, - // alphabet size, and magic number 1.6 (using 1.6 peaks at performance - // according to benchmarks). - - // `-~f => Math.ceil(f)` if f is a float - // `-~i => i + 1` if i is an integer - let step = -~((1.6 * mask * defaultSize) / alphabet.length) - - return async (size = defaultSize) => { - let id = '' - while (true) { - let bytes = crypto.getRandomValues(new Uint8Array(step)) - // A compact alternative for `for (var i = 0; i < step; i++)`. - let i = step | 0 - while (i--) { - // Adding `|| ''` refuses a random byte that exceeds the alphabet size. - id += alphabet[bytes[i] & mask] || '' - if (id.length === size) return id - } - } - } -} - -let nanoid = async (size = 21) => { - let id = '' - let bytes = crypto.getRandomValues(new Uint8Array((size |= 0))) - - // A compact alternative for `for (var i = 0; i < step; i++)`. - while (size--) { - // It is incorrect to use bytes exceeding the alphabet size. - // The following mask reduces the random byte in the 0-255 value - // range to the 0-63 value range. Therefore, adding hacks, such - // as empty string fallback or magic numbers, is unneccessary because - // the bitmask trims bytes down to the alphabet size. - let byte = bytes[size] & 63 - if (byte < 36) { - // `0-9a-z` - id += byte.toString(36) - } else if (byte < 62) { - // `A-Z` - id += (byte - 26).toString(36).toUpperCase() - } else if (byte < 63) { - id += '_' - } else { - id += '-' - } - } - return id -} - -module.exports = { nanoid, customAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.js deleted file mode 100644 index fbaa230..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.browser.js +++ /dev/null @@ -1,34 +0,0 @@ -let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes)) -let customAlphabet = (alphabet, defaultSize = 21) => { - let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 - let step = -~((1.6 * mask * defaultSize) / alphabet.length) - return async (size = defaultSize) => { - let id = '' - while (true) { - let bytes = crypto.getRandomValues(new Uint8Array(step)) - let i = step | 0 - while (i--) { - id += alphabet[bytes[i] & mask] || '' - if (id.length === size) return id - } - } - } -} -let nanoid = async (size = 21) => { - let id = '' - let bytes = crypto.getRandomValues(new Uint8Array((size |= 0))) - while (size--) { - let byte = bytes[size] & 63 - if (byte < 36) { - id += byte.toString(36) - } else if (byte < 62) { - id += (byte - 26).toString(36).toUpperCase() - } else if (byte < 63) { - id += '_' - } else { - id += '-' - } - } - return id -} -export { nanoid, customAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.cjs deleted file mode 100644 index f1b0ad0..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.cjs +++ /dev/null @@ -1,71 +0,0 @@ -let crypto = require('crypto') - -let { urlAlphabet } = require('../url-alphabet/index.cjs') - -// `crypto.randomFill()` is a little faster than `crypto.randomBytes()`, -// because it is possible to use in combination with `Buffer.allocUnsafe()`. -let random = bytes => - new Promise((resolve, reject) => { - // `Buffer.allocUnsafe()` is faster because it doesn’t flush the memory. - // Memory flushing is unnecessary since the buffer allocation itself resets - // the memory with the new bytes. - crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => { - if (err) { - reject(err) - } else { - resolve(buf) - } - }) - }) - -let customAlphabet = (alphabet, defaultSize = 21) => { - // First, a bitmask is necessary to generate the ID. The bitmask makes bytes - // values closer to the alphabet size. The bitmask calculates the closest - // `2^31 - 1` number, which exceeds the alphabet size. - // For example, the bitmask for the alphabet size 30 is 31 (00011111). - let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 - // Though, the bitmask solution is not perfect since the bytes exceeding - // the alphabet size are refused. Therefore, to reliably generate the ID, - // the random bytes redundancy has to be satisfied. - - // Note: every hardware random generator call is performance expensive, - // because the system call for entropy collection takes a lot of time. - // So, to avoid additional system calls, extra bytes are requested in advance. - - // Next, a step determines how many random bytes to generate. - // The number of random bytes gets decided upon the ID size, mask, - // alphabet size, and magic number 1.6 (using 1.6 peaks at performance - // according to benchmarks). - let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) - - let tick = (id, size = defaultSize) => - random(step).then(bytes => { - // A compact alternative for `for (var i = 0; i < step; i++)`. - let i = step - while (i--) { - // Adding `|| ''` refuses a random byte that exceeds the alphabet size. - id += alphabet[bytes[i] & mask] || '' - if (id.length >= size) return id - } - return tick(id, size) - }) - - return size => tick('', size) -} - -let nanoid = (size = 21) => - random((size |= 0)).then(bytes => { - let id = '' - // A compact alternative for `for (var i = 0; i < step; i++)`. - while (size--) { - // It is incorrect to use bytes exceeding the alphabet size. - // The following mask reduces the random byte in the 0-255 value - // range to the 0-63 value range. Therefore, adding hacks, such - // as empty string fallback or magic numbers, is unneccessary because - // the bitmask trims bytes down to the alphabet size. - id += urlAlphabet[bytes[size] & 63] - } - return id - }) - -module.exports = { nanoid, customAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.d.ts b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.d.ts deleted file mode 100644 index 9e91965..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Generate secure URL-friendly unique ID. The non-blocking version. - * - * By default, the ID will have 21 symbols to have a collision probability - * similar to UUID v4. - * - * ```js - * import { nanoid } from 'nanoid/async' - * nanoid().then(id => { - * model.id = id - * }) - * ``` - * - * @param size Size of the ID. The default size is 21. - * @returns A promise with a random string. - */ -export function nanoid(size?: number): Promise - -/** - * A low-level function. - * Generate secure unique ID with custom alphabet. The non-blocking version. - * - * Alphabet must contain 256 symbols or less. Otherwise, the generator - * will not be secure. - * - * @param alphabet Alphabet used to generate the ID. - * @param defaultSize Size of the ID. The default size is 21. - * @returns A function that returns a promise with a random string. - * - * ```js - * import { customAlphabet } from 'nanoid/async' - * const nanoid = customAlphabet('0123456789абвгдеё', 5) - * nanoid().then(id => { - * model.id = id //=> "8ё56а" - * }) - * ``` - */ -export function customAlphabet( - alphabet: string, - defaultSize?: number -): (size?: number) => Promise - -/** - * Generate an array of random bytes collected from hardware noise. - * - * ```js - * import { random } from 'nanoid/async' - * random(5).then(bytes => { - * bytes //=> [10, 67, 212, 67, 89] - * }) - * ``` - * - * @param bytes Size of the array. - * @returns A promise with a random bytes array. - */ -export function random(bytes: number): Promise diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.js deleted file mode 100644 index cec454a..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.js +++ /dev/null @@ -1,35 +0,0 @@ -import crypto from 'crypto' -import { urlAlphabet } from '../url-alphabet/index.js' -let random = bytes => - new Promise((resolve, reject) => { - crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => { - if (err) { - reject(err) - } else { - resolve(buf) - } - }) - }) -let customAlphabet = (alphabet, defaultSize = 21) => { - let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 - let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) - let tick = (id, size = defaultSize) => - random(step).then(bytes => { - let i = step - while (i--) { - id += alphabet[bytes[i] & mask] || '' - if (id.length >= size) return id - } - return tick(id, size) - }) - return size => tick('', size) -} -let nanoid = (size = 21) => - random((size |= 0)).then(bytes => { - let id = '' - while (size--) { - id += urlAlphabet[bytes[size] & 63] - } - return id - }) -export { nanoid, customAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.native.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.native.js deleted file mode 100644 index 7c1d6f3..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/index.native.js +++ /dev/null @@ -1,26 +0,0 @@ -import { getRandomBytesAsync } from 'expo-random' -import { urlAlphabet } from '../url-alphabet/index.js' -let random = getRandomBytesAsync -let customAlphabet = (alphabet, defaultSize = 21) => { - let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 - let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) - let tick = (id, size = defaultSize) => - random(step).then(bytes => { - let i = step - while (i--) { - id += alphabet[bytes[i] & mask] || '' - if (id.length >= size) return id - } - return tick(id, size) - }) - return size => tick('', size) -} -let nanoid = (size = 21) => - random((size |= 0)).then(bytes => { - let id = '' - while (size--) { - id += urlAlphabet[bytes[size] & 63] - } - return id - }) -export { nanoid, customAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/package.json b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/package.json deleted file mode 100644 index 578cdb4..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/async/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "module", - "main": "index.cjs", - "module": "index.js", - "react-native": { - "./index.js": "./index.native.js" - }, - "browser": { - "./index.js": "./index.browser.js", - "./index.cjs": "./index.browser.cjs" - } -} \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/bin/nanoid.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/bin/nanoid.cjs deleted file mode 100644 index c76db0f..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/bin/nanoid.cjs +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env node - -let { nanoid, customAlphabet } = require('..') - -function print(msg) { - process.stdout.write(msg + '\n') -} - -function error(msg) { - process.stderr.write(msg + '\n') - process.exit(1) -} - -if (process.argv.includes('--help') || process.argv.includes('-h')) { - print(` - Usage - $ nanoid [options] - - Options - -s, --size Generated ID size - -a, --alphabet Alphabet to use - -h, --help Show this help - - Examples - $ nanoid --s 15 - S9sBF77U6sDB8Yg - - $ nanoid --size 10 --alphabet abc - bcabababca`) - process.exit() -} - -let alphabet, size -for (let i = 2; i < process.argv.length; i++) { - let arg = process.argv[i] - if (arg === '--size' || arg === '-s') { - size = Number(process.argv[i + 1]) - i += 1 - if (Number.isNaN(size) || size <= 0) { - error('Size must be positive integer') - } - } else if (arg === '--alphabet' || arg === '-a') { - alphabet = process.argv[i + 1] - i += 1 - } else { - error('Unknown argument ' + arg) - } -} - -if (alphabet) { - let customNanoid = customAlphabet(alphabet, size) - print(customNanoid()) -} else { - print(nanoid(size)) -} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.cjs deleted file mode 100644 index d21a91f..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.cjs +++ /dev/null @@ -1,72 +0,0 @@ -// This file replaces `index.js` in bundlers like webpack or Rollup, -// according to `browser` config in `package.json`. - -let { urlAlphabet } = require('./url-alphabet/index.cjs') - -let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) - -let customRandom = (alphabet, defaultSize, getRandom) => { - // First, a bitmask is necessary to generate the ID. The bitmask makes bytes - // values closer to the alphabet size. The bitmask calculates the closest - // `2^31 - 1` number, which exceeds the alphabet size. - // For example, the bitmask for the alphabet size 30 is 31 (00011111). - // `Math.clz32` is not used, because it is not available in browsers. - let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 - // Though, the bitmask solution is not perfect since the bytes exceeding - // the alphabet size are refused. Therefore, to reliably generate the ID, - // the random bytes redundancy has to be satisfied. - - // Note: every hardware random generator call is performance expensive, - // because the system call for entropy collection takes a lot of time. - // So, to avoid additional system calls, extra bytes are requested in advance. - - // Next, a step determines how many random bytes to generate. - // The number of random bytes gets decided upon the ID size, mask, - // alphabet size, and magic number 1.6 (using 1.6 peaks at performance - // according to benchmarks). - - // `-~f => Math.ceil(f)` if f is a float - // `-~i => i + 1` if i is an integer - let step = -~((1.6 * mask * defaultSize) / alphabet.length) - - return (size = defaultSize) => { - let id = '' - while (true) { - let bytes = getRandom(step) - // A compact alternative for `for (var i = 0; i < step; i++)`. - let j = step | 0 - while (j--) { - // Adding `|| ''` refuses a random byte that exceeds the alphabet size. - id += alphabet[bytes[j] & mask] || '' - if (id.length === size) return id - } - } - } -} - -let customAlphabet = (alphabet, size = 21) => - customRandom(alphabet, size, random) - -let nanoid = (size = 21) => - crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => { - // It is incorrect to use bytes exceeding the alphabet size. - // The following mask reduces the random byte in the 0-255 value - // range to the 0-63 value range. Therefore, adding hacks, such - // as empty string fallback or magic numbers, is unneccessary because - // the bitmask trims bytes down to the alphabet size. - byte &= 63 - if (byte < 36) { - // `0-9a-z` - id += byte.toString(36) - } else if (byte < 62) { - // `A-Z` - id += (byte - 26).toString(36).toUpperCase() - } else if (byte > 62) { - id += '-' - } else { - id += '_' - } - return id - }, '') - -module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.js index 7d3b876..3858bd3 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.browser.js @@ -1,7 +1,9 @@ -import { urlAlphabet } from './url-alphabet/index.js' -let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) -let customRandom = (alphabet, defaultSize, getRandom) => { - let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 +/* @ts-self-types="./index.d.ts" */ +import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js' +export { urlAlphabet } from './url-alphabet/index.js' +export let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) +export let customRandom = (alphabet, defaultSize, getRandom) => { + let mask = (2 << Math.log2(alphabet.length - 1)) - 1 let step = -~((1.6 * mask * defaultSize) / alphabet.length) return (size = defaultSize) => { let id = '' @@ -10,25 +12,18 @@ let customRandom = (alphabet, defaultSize, getRandom) => { let j = step | 0 while (j--) { id += alphabet[bytes[j] & mask] || '' - if (id.length === size) return id + if (id.length >= size) return id } } } } -let customAlphabet = (alphabet, size = 21) => - customRandom(alphabet, size, random) -let nanoid = (size = 21) => - crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => { - byte &= 63 - if (byte < 36) { - id += byte.toString(36) - } else if (byte < 62) { - id += (byte - 26).toString(36).toUpperCase() - } else if (byte > 62) { - id += '-' - } else { - id += '_' - } - return id - }, '') -export { nanoid, customAlphabet, customRandom, urlAlphabet, random } +export let customAlphabet = (alphabet, size = 21) => + customRandom(alphabet, size | 0, random) +export let nanoid = (size = 21) => { + let id = '' + let bytes = crypto.getRandomValues(new Uint8Array((size |= 0))) + while (size--) { + id += scopedUrlAlphabet[bytes[size] & 63] + } + return id +} diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.cjs deleted file mode 100644 index c20e374..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.cjs +++ /dev/null @@ -1,85 +0,0 @@ -let crypto = require('crypto') - -let { urlAlphabet } = require('./url-alphabet/index.cjs') - -// It is best to make fewer, larger requests to the crypto module to -// avoid system call overhead. So, random numbers are generated in a -// pool. The pool is a Buffer that is larger than the initial random -// request size by this multiplier. The pool is enlarged if subsequent -// requests exceed the maximum buffer size. -const POOL_SIZE_MULTIPLIER = 128 -let pool, poolOffset - -let fillPool = bytes => { - if (!pool || pool.length < bytes) { - pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) - crypto.randomFillSync(pool) - poolOffset = 0 - } else if (poolOffset + bytes > pool.length) { - crypto.randomFillSync(pool) - poolOffset = 0 - } - poolOffset += bytes -} - -let random = bytes => { - // `|=` convert `bytes` to number to prevent `valueOf` abusing and pool pollution - fillPool((bytes |= 0)) - return pool.subarray(poolOffset - bytes, poolOffset) -} - -let customRandom = (alphabet, defaultSize, getRandom) => { - // First, a bitmask is necessary to generate the ID. The bitmask makes bytes - // values closer to the alphabet size. The bitmask calculates the closest - // `2^31 - 1` number, which exceeds the alphabet size. - // For example, the bitmask for the alphabet size 30 is 31 (00011111). - let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 - // Though, the bitmask solution is not perfect since the bytes exceeding - // the alphabet size are refused. Therefore, to reliably generate the ID, - // the random bytes redundancy has to be satisfied. - - // Note: every hardware random generator call is performance expensive, - // because the system call for entropy collection takes a lot of time. - // So, to avoid additional system calls, extra bytes are requested in advance. - - // Next, a step determines how many random bytes to generate. - // The number of random bytes gets decided upon the ID size, mask, - // alphabet size, and magic number 1.6 (using 1.6 peaks at performance - // according to benchmarks). - let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) - - return (size = defaultSize) => { - let id = '' - while (true) { - let bytes = getRandom(step) - // A compact alternative for `for (let i = 0; i < step; i++)`. - let i = step - while (i--) { - // Adding `|| ''` refuses a random byte that exceeds the alphabet size. - id += alphabet[bytes[i] & mask] || '' - if (id.length === size) return id - } - } - } -} - -let customAlphabet = (alphabet, size = 21) => - customRandom(alphabet, size, random) - -let nanoid = (size = 21) => { - // `|=` convert `size` to number to prevent `valueOf` abusing and pool pollution - fillPool((size |= 0)) - let id = '' - // We are reading directly from the random pool to avoid creating new array - for (let i = poolOffset - size; i < poolOffset; i++) { - // It is incorrect to use bytes exceeding the alphabet size. - // The following mask reduces the random byte in the 0-255 value - // range to the 0-63 value range. Therefore, adding hacks, such - // as empty string fallback or magic numbers, is unneccessary because - // the bitmask trims bytes down to the alphabet size. - id += urlAlphabet[pool[i] & 63] - } - return id -} - -module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.cts b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.cts deleted file mode 100644 index 3e111a3..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.cts +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Generate secure URL-friendly unique ID. - * - * By default, the ID will have 21 symbols to have a collision probability - * similar to UUID v4. - * - * ```js - * import { nanoid } from 'nanoid' - * model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL" - * ``` - * - * @param size Size of the ID. The default size is 21. - * @returns A random string. - */ -export function nanoid(size?: number): string - -/** - * Generate secure unique ID with custom alphabet. - * - * Alphabet must contain 256 symbols or less. Otherwise, the generator - * will not be secure. - * - * @param alphabet Alphabet used to generate the ID. - * @param defaultSize Size of the ID. The default size is 21. - * @returns A random string generator. - * - * ```js - * const { customAlphabet } = require('nanoid') - * const nanoid = customAlphabet('0123456789абвгдеё', 5) - * nanoid() //=> "8ё56а" - * ``` - */ -export function customAlphabet( - alphabet: string, - defaultSize?: number -): (size?: number) => string - -/** - * Generate unique ID with custom random generator and alphabet. - * - * Alphabet must contain 256 symbols or less. Otherwise, the generator - * will not be secure. - * - * ```js - * import { customRandom } from 'nanoid/format' - * - * const nanoid = customRandom('abcdef', 5, size => { - * const random = [] - * for (let i = 0; i < size; i++) { - * random.push(randomByte()) - * } - * return random - * }) - * - * nanoid() //=> "fbaef" - * ``` - * - * @param alphabet Alphabet used to generate a random string. - * @param size Size of the random string. - * @param random A random bytes generator. - * @returns A random string generator. - */ -export function customRandom( - alphabet: string, - size: number, - random: (bytes: number) => Uint8Array -): () => string - -/** - * URL safe symbols. - * - * ```js - * import { urlAlphabet } from 'nanoid' - * const nanoid = customAlphabet(urlAlphabet, 10) - * nanoid() //=> "Uakgb_J5m9" - * ``` - */ -export const urlAlphabet: string - -/** - * Generate an array of random bytes collected from hardware noise. - * - * ```js - * import { customRandom, random } from 'nanoid' - * const nanoid = customRandom("abcdef", 5, random) - * ``` - * - * @param bytes Size of the array. - * @returns An array of random bytes. - */ -export function random(bytes: number): Uint8Array diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.ts b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.ts index 3e111a3..9f28403 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.ts +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.d.ts @@ -1,4 +1,16 @@ /** + * A tiny, secure, URL-friendly, unique string ID generator for JavaScript + * with hardware random generator. + * + * ```js + * import { nanoid } from 'nanoid' + * model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT" + * ``` + * + * @module + */ + +/** * Generate secure URL-friendly unique ID. * * By default, the ID will have 21 symbols to have a collision probability @@ -10,9 +22,10 @@ * ``` * * @param size Size of the ID. The default size is 21. + * @typeparam Type The ID type to replace `string` with some opaque type. * @returns A random string. */ -export function nanoid(size?: number): string +export function nanoid(size?: number): Type /** * Generate secure unique ID with custom alphabet. @@ -22,6 +35,7 @@ export function nanoid(size?: number): string * * @param alphabet Alphabet used to generate the ID. * @param defaultSize Size of the ID. The default size is 21. + * @typeparam Type The ID type to replace `string` with some opaque type. * @returns A random string generator. * * ```js @@ -30,10 +44,10 @@ export function nanoid(size?: number): string * nanoid() //=> "8ё56а" * ``` */ -export function customAlphabet( +export function customAlphabet( alphabet: string, defaultSize?: number -): (size?: number) => string +): (size?: number) => Type /** * Generate unique ID with custom random generator and alphabet. @@ -58,13 +72,14 @@ export function customAlphabet( * @param alphabet Alphabet used to generate a random string. * @param size Size of the random string. * @param random A random bytes generator. + * @typeparam Type The ID type to replace `string` with some opaque type. * @returns A random string generator. */ -export function customRandom( +export function customRandom( alphabet: string, size: number, random: (bytes: number) => Uint8Array -): () => string +): () => Type /** * URL safe symbols. diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.js index 9bc909d..80c7587 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/index.js @@ -1,45 +1,47 @@ -import crypto from 'crypto' -import { urlAlphabet } from './url-alphabet/index.js' +import { webcrypto as crypto } from 'node:crypto' +import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js' +export { urlAlphabet } from './url-alphabet/index.js' const POOL_SIZE_MULTIPLIER = 128 let pool, poolOffset -let fillPool = bytes => { +function fillPool(bytes) { if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) - crypto.randomFillSync(pool) + crypto.getRandomValues(pool) poolOffset = 0 } else if (poolOffset + bytes > pool.length) { - crypto.randomFillSync(pool) + crypto.getRandomValues(pool) poolOffset = 0 } poolOffset += bytes } -let random = bytes => { +export function random(bytes) { fillPool((bytes |= 0)) return pool.subarray(poolOffset - bytes, poolOffset) } -let customRandom = (alphabet, defaultSize, getRandom) => { +export function customRandom(alphabet, defaultSize, getRandom) { let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) return (size = defaultSize) => { + if (!size) return '' let id = '' while (true) { let bytes = getRandom(step) let i = step while (i--) { id += alphabet[bytes[i] & mask] || '' - if (id.length === size) return id + if (id.length >= size) return id } } } } -let customAlphabet = (alphabet, size = 21) => - customRandom(alphabet, size, random) -let nanoid = (size = 21) => { +export function customAlphabet(alphabet, size = 21) { + return customRandom(alphabet, size, random) +} +export function nanoid(size = 21) { fillPool((size |= 0)) let id = '' for (let i = poolOffset - size; i < poolOffset; i++) { - id += urlAlphabet[pool[i] & 63] + id += scopedUrlAlphabet[pool[i] & 63] } return id } -export { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/nanoid.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/nanoid.js index ec242ea..ffa1d4b 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/nanoid.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/nanoid.js @@ -1 +1 @@ -export let nanoid=(t=21)=>crypto.getRandomValues(new Uint8Array(t)).reduce(((t,e)=>t+=(e&=63)<36?e.toString(36):e<62?(e-26).toString(36).toUpperCase():e<63?"_":"-"),""); \ No newline at end of file +let a="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";export let nanoid=(e=21)=>{let t="",r=crypto.getRandomValues(new Uint8Array(e));for(let n=0;n { - return (size = defaultSize) => { - let id = '' - // A compact alternative for `for (var i = 0; i < step; i++)`. - let i = size | 0 - while (i--) { - // `| 0` is more compact and faster than `Math.floor()`. - id += alphabet[(Math.random() * alphabet.length) | 0] - } - return id - } -} - -let nanoid = (size = 21) => { - let id = '' - // A compact alternative for `for (var i = 0; i < step; i++)`. - let i = size | 0 - while (i--) { - // `| 0` is more compact and faster than `Math.floor()`. - id += urlAlphabet[(Math.random() * 64) | 0] - } - return id -} - -module.exports = { nanoid, customAlphabet } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.d.ts b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.d.ts index 4965322..5cd785d 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.d.ts +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.d.ts @@ -1,4 +1,17 @@ /** + * By default, Nano ID uses hardware random bytes generation for security + * and low collision probability. If you are not so concerned with security, + * you can use it for environments without hardware random generators. + * + * ```js + * import { nanoid } from 'nanoid/non-secure' + * const id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqLJ" + * ``` + * + * @module + */ + +/** * Generate URL-friendly unique ID. This method uses the non-secure * predictable random generator with bigger collision probability. * @@ -8,9 +21,10 @@ * ``` * * @param size Size of the ID. The default size is 21. + * @typeparam Type The ID type to replace `string` with some opaque type. * @returns A random string. */ -export function nanoid(size?: number): string +export function nanoid(size?: number): Type /** * Generate a unique ID based on a custom alphabet. @@ -19,15 +33,16 @@ export function nanoid(size?: number): string * * @param alphabet Alphabet used to generate the ID. * @param defaultSize Size of the ID. The default size is 21. + * @typeparam Type The ID type to replace `string` with some opaque type. * @returns A random string generator. * * ```js * import { customAlphabet } from 'nanoid/non-secure' * const nanoid = customAlphabet('0123456789абвгдеё', 5) - * model.id = //=> "8ё56а" + * model.id = nanoid() //=> "8ё56а" * ``` */ -export function customAlphabet( +export function customAlphabet( alphabet: string, defaultSize?: number -): (size?: number) => string +): (size?: number) => Type diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.js index 2ea5827..a3d83f2 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/index.js @@ -1,6 +1,7 @@ +/* @ts-self-types="./index.d.ts" */ let urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' -let customAlphabet = (alphabet, defaultSize = 21) => { +export let customAlphabet = (alphabet, defaultSize = 21) => { return (size = defaultSize) => { let id = '' let i = size | 0 @@ -10,7 +11,7 @@ let customAlphabet = (alphabet, defaultSize = 21) => { return id } } -let nanoid = (size = 21) => { +export let nanoid = (size = 21) => { let id = '' let i = size | 0 while (i--) { @@ -18,4 +19,3 @@ let nanoid = (size = 21) => { } return id } -export { nanoid, customAlphabet } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/package.json b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/package.json deleted file mode 100644 index 9930d6a..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/non-secure/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "module", - "main": "index.cjs", - "module": "index.js", - "react-native": "index.js" -} \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/package.json b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/package.json index a3d3f44..1d0bc74 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/package.json +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/package.json @@ -1,15 +1,16 @@ { "name": "nanoid", - "version": "3.3.11", - "description": "A tiny (116 bytes), secure URL-friendly unique string ID generator", + "version": "5.1.6", + "description": "A tiny (118 bytes), secure URL-friendly unique string ID generator", "keywords": [ "uuid", "random", "id", "url" ], + "type": "module", "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" }, "funding": [ { @@ -20,70 +21,23 @@ "author": "Andrey Sitnik ", "license": "MIT", "repository": "ai/nanoid", - "browser": { - "./index.js": "./index.browser.js", - "./async/index.js": "./async/index.browser.js", - "./async/index.cjs": "./async/index.browser.cjs", - "./index.cjs": "./index.browser.cjs" - }, - "react-native": "index.js", - "bin": "./bin/nanoid.cjs", - "sideEffects": false, - "types": "./index.d.ts", - "type": "module", - "main": "index.cjs", - "module": "index.js", "exports": { ".": { - "react-native": "./index.browser.js", + "types": "./index.d.ts", "browser": "./index.browser.js", - "require": { - "types": "./index.d.cts", - "default": "./index.cjs" - }, - "import": { - "types": "./index.d.ts", - "default": "./index.js" - }, + "react-native": "./index.browser.js", "default": "./index.js" }, - "./package.json": "./package.json", - "./async/package.json": "./async/package.json", - "./async": { - "browser": "./async/index.browser.js", - "require": { - "types": "./index.d.cts", - "default": "./async/index.cjs" - }, - "import": { - "types": "./index.d.ts", - "default": "./async/index.js" - }, - "default": "./async/index.js" - }, - "./non-secure/package.json": "./non-secure/package.json", - "./non-secure": { - "require": { - "types": "./index.d.cts", - "default": "./non-secure/index.cjs" - }, - "import": { - "types": "./index.d.ts", - "default": "./non-secure/index.js" - }, - "default": "./non-secure/index.js" - }, - "./url-alphabet/package.json": "./url-alphabet/package.json", - "./url-alphabet": { - "require": { - "types": "./index.d.cts", - "default": "./url-alphabet/index.cjs" - }, - "import": { - "types": "./index.d.ts", - "default": "./url-alphabet/index.js" - }, - "default": "./url-alphabet/index.js" - } - } + "./non-secure": "./non-secure/index.js", + "./package.json": "./package.json" + }, + "browser": { + "./index.js": "./index.browser.js" + }, + "react-native": { + "./index.js": "./index.browser.js" + }, + "bin": "./bin/nanoid.js", + "sideEffects": false, + "types": "./index.d.ts" } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.cjs b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.cjs deleted file mode 100644 index a332f0b..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.cjs +++ /dev/null @@ -1,7 +0,0 @@ -// This alphabet uses `A-Za-z0-9_-` symbols. -// The order of characters is optimized for better gzip and brotli compression. -// Same as in non-secure/index.js -let urlAlphabet = - 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' - -module.exports = { urlAlphabet } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.js b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.js index c2782e5..cfec9b2 100644 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.js +++ b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/index.js @@ -1,3 +1,2 @@ -let urlAlphabet = +export const urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' -export { urlAlphabet } diff --git a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/package.json b/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/package.json deleted file mode 100644 index 9930d6a..0000000 --- a/吴光慧学习笔记/hello_vue3/node_modules/nanoid/url-alphabet/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "module", - "main": "index.cjs", - "module": "index.js", - "react-native": "index.js" -} \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/package-lock.json b/吴光慧学习笔记/hello_vue3/package-lock.json index ef19588..f64fb07 100644 --- a/吴光慧学习笔记/hello_vue3/package-lock.json +++ b/吴光慧学习笔记/hello_vue3/package-lock.json @@ -8,7 +8,9 @@ "name": "hello_vue3", "version": "0.0.0", "dependencies": { - "axios": "^1.13.1", + "axios": "^1.13.2", + "nanoid": "^5.1.6", + "pinia": "^3.0.3", "vue": "^3.5.22", "vue-router": "^4.6.3" }, @@ -1493,25 +1495,6 @@ "vue": "^3.0.0" } }, - "node_modules/@vue/devtools-core/node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@vue/devtools-kit": { "version": "8.0.3", "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.3.tgz", @@ -1668,9 +1651,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz", - "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1692,7 +1675,6 @@ "version": "2.6.1", "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.6.1.tgz", "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -1805,7 +1787,6 @@ "version": "4.0.5", "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz", "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", - "dev": true, "license": "MIT", "dependencies": { "is-what": "^5.2.0" @@ -2257,7 +2238,6 @@ "version": "5.5.3", "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, "license": "MIT" }, "node_modules/is-docker": { @@ -2299,7 +2279,6 @@ "version": "5.5.0", "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz", "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -2446,7 +2425,6 @@ "version": "3.0.1", "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, "license": "MIT" }, "node_modules/mrmime": { @@ -2474,9 +2452,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", "funding": [ { "type": "github", @@ -2485,10 +2463,10 @@ ], "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/node-releases": { @@ -2624,6 +2602,66 @@ "node": ">=0.10" } }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/pinia/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", @@ -2652,6 +2690,24 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2676,7 +2732,6 @@ "version": "1.4.1", "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, "license": "MIT" }, "node_modules/rollup": { @@ -2816,7 +2871,6 @@ "version": "14.0.1", "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2826,7 +2880,6 @@ "version": "2.2.5", "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.5.tgz", "integrity": "sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==", - "dev": true, "license": "MIT", "dependencies": { "copy-anything": "^4" diff --git a/吴光慧学习笔记/hello_vue3/package.json b/吴光慧学习笔记/hello_vue3/package.json index a1510af..5a6c6b4 100644 --- a/吴光慧学习笔记/hello_vue3/package.json +++ b/吴光慧学习笔记/hello_vue3/package.json @@ -14,7 +14,9 @@ "type-check": "vue-tsc --build" }, "dependencies": { - "axios": "^1.13.1", + "axios": "^1.13.2", + "nanoid": "^5.1.6", + "pinia": "^3.0.3", "vue": "^3.5.22", "vue-router": "^4.6.3" }, diff --git a/吴光慧学习笔记/hello_vue3/src/App.vue b/吴光慧学习笔记/hello_vue3/src/App.vue index 6f2437c..3b26d9d 100644 --- a/吴光慧学习笔记/hello_vue3/src/App.vue +++ b/吴光慧学习笔记/hello_vue3/src/App.vue @@ -1,69 +1,10 @@ - - - \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/Count.vue b/吴光慧学习笔记/hello_vue3/src/components/Count.vue new file mode 100644 index 0000000..7a3f05c --- /dev/null +++ b/吴光慧学习笔记/hello_vue3/src/components/Count.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/LoveTalk.vue b/吴光慧学习笔记/hello_vue3/src/components/LoveTalk.vue new file mode 100644 index 0000000..b7a47d0 --- /dev/null +++ b/吴光慧学习笔记/hello_vue3/src/components/LoveTalk.vue @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/News.vue b/吴光慧学习笔记/hello_vue3/src/components/News.vue deleted file mode 100644 index 068c767..0000000 --- a/吴光慧学习笔记/hello_vue3/src/components/News.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - - - \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/components/Person.vue b/吴光慧学习笔记/hello_vue3/src/components/Person.vue deleted file mode 100644 index 37f5095..0000000 --- a/吴光慧学习笔记/hello_vue3/src/components/Person.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/main.ts b/吴光慧学习笔记/hello_vue3/src/main.ts index 265c7c7..8d9f489 100644 --- a/吴光慧学习笔记/hello_vue3/src/main.ts +++ b/吴光慧学习笔记/hello_vue3/src/main.ts @@ -3,10 +3,17 @@ import './assets/main.css' import { createApp } from 'vue' //引入App组件 import App from './App.vue' -//引入router -import router from './router' +// //引入router +// import router from './router' + +/* 引入createPinia,用于创建pinia */ +import { createPinia } from 'pinia' +/* 创建pinia */ +const pinia = createPinia() const app = createApp(App) -app.use(router) +//app.use(router) +/* 使用插件 */{} +app.use(pinia) app.mount('#app') diff --git a/吴光慧学习笔记/hello_vue3/src/store/count.ts b/吴光慧学习笔记/hello_vue3/src/store/count.ts new file mode 100644 index 0000000..ddae0bd --- /dev/null +++ b/吴光慧学习笔记/hello_vue3/src/store/count.ts @@ -0,0 +1,29 @@ +import {defineStore} from 'pinia' + +export const useCountStore = defineStore('count',{ + actions:{ + // 定义方法,可以修改state中的数据,响应组件中的“动作” + increment(value: number){ + console.log('increment被调用了',value) + //修改数据,响应组件 + //this是当前store实例 + this.sum += value + }, + //减 + decrement(value: number){ + this.sum -= value + } + }, + // 真正存储数据的地方 + state(){ + return { + sum:6 + } + }, + + getters:{ + bigSum(state){ + return state.sum * 10 + } + } +}) \ No newline at end of file diff --git a/吴光慧学习笔记/hello_vue3/src/store/loveTalk.ts b/吴光慧学习笔记/hello_vue3/src/store/loveTalk.ts new file mode 100644 index 0000000..8cc3102 --- /dev/null +++ b/吴光慧学习笔记/hello_vue3/src/store/loveTalk.ts @@ -0,0 +1,22 @@ +import {defineStore} from 'pinia' +import axios from 'axios' +import {nanoid} from 'nanoid' + +export const useTalkStore = defineStore('talk',{ + actions:{ + async getATalk(){ + // 发请求,下面这行的写法是:连续解构赋值+重命名 + let {data:{content:title}} = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json') + // 把请求回来的字符串,包装成一个对象 + let obj = {id:nanoid(),title} + // 放到数组中 + this.talkList.unshift(obj) + } + }, + // 真正存储数据的地方 + state(){ + return { + talkList:JSON.parse(localStorage.getItem('talkList') as string) || [] + } + } +}) \ No newline at end of file diff --git a/股票知识评测系统.vue b/股票知识评测系统.vue new file mode 100644 index 0000000..a65f89d --- /dev/null +++ b/股票知识评测系统.vue @@ -0,0 +1,434 @@ + + + + +