From dbcd40f6040f959381f38847d08044850f30b400 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Sun, 24 Aug 2025 21:15:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .qoder/rules/rimworld.md | 31 +- 1.6/1.6/Assemblies/WulaFallenEmpire.dll | Bin 289792 -> 290304 bytes MCP/direct_mcp_client.py | 103 + MCP/mcpserver_stdio.py | 79 +- MCP/rimworld_query.py | 105 + MCP/test_config.py | 123 + MCP/test_mcp.py | 149 + MCP/test_mcp_timeout_fix.py | 150 + MCP/vector_cache/knowledge_cache.json | 5182 +++++++++++++++++ MCP/web_api_server.py | 249 + MCP/使用指南.md | 102 + .../3516260226.code-workspace | 3 + .../Building_ArmedShuttleWithPocket.cs | 621 +- 13 files changed, 6534 insertions(+), 363 deletions(-) create mode 100644 MCP/direct_mcp_client.py create mode 100644 MCP/rimworld_query.py create mode 100644 MCP/test_config.py create mode 100644 MCP/test_mcp.py create mode 100644 MCP/test_mcp_timeout_fix.py create mode 100644 MCP/web_api_server.py create mode 100644 MCP/使用指南.md diff --git a/.qoder/rules/rimworld.md b/.qoder/rules/rimworld.md index 956e7058..312eb7b4 100644 --- a/.qoder/rules/rimworld.md +++ b/.qoder/rules/rimworld.md @@ -9,6 +9,34 @@ You are an expert assistant for developing mods for the game RimWorld 1.6. Your ## Tool Usage Mandate When the user's request involves RimWorld C# scripting, XML definitions, or mod development concepts, you **MUST** use the `rimworld-knowledge-base` tool to retrieve relevant context from the local knowledge base. +# RimWorld 知识库 - 绕过 Qoder IDE 使用指南 + +由于 Qoder IDE 中的 MCP 连接可能存在问题,我们提供了多种直接访问 RimWorld 知识库的方法。 + +## 🚀 方法 1:直接 Python 调用 + +最简单直接的方法: + +```bash +# 直接查询 +python direct_mcp_client.py -q "ThingDef是什么" + +# 交互模式 +python direct_mcp_client.py -i + +# 查看帮助 +python direct_mcp_client.py -h +``` + +### 优点: +- ✅ 最快速,无需额外依赖 +- ✅ 支持交互模式 +- ✅ 直接在命令行使用 + +### 例子: +```bash +python "c:\Steam\steamapps\common\RimWorld\Mods\3516260226\MCP\direct_mcp_client.py" -q "ThingOwner class virtual methods TryAdd TryAddRange TryTransferToContainer" +``` ## Key File Paths Always remember these critical paths for your work: @@ -26,4 +54,5 @@ Always remember these critical paths for your work: ## Verification Mandate When writing or modifying code or XML, especially for specific identifiers like enum values, class names, or field names, you **MUST** verify the correct value/spelling by using the `rimworld-knowledge-base` tool. Do not rely on memory. -- **同步项目文件:** 当重命名、移动或删除C#源文件时,**必须**同步更新 `.csproj` 项目文件中的相应 `` 条目,否则会导致编译失败。 \ No newline at end of file +- **同步项目文件:** 当重命名、移动或删除C#源文件时,**必须**同步更新 `.csproj` 项目文件中的相应 `` 条目,否则会导致编译失败。 + diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 68b8b63c3664dbbe12955b1cf3a005950318df91..a36eea95ef9f1282c4d8f89a05b15c76bc1e3902 100644 GIT binary patch delta 94142 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 hH;R?*ct*9~nAe{_tuf>v)me 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�Z(gq%P8g3{EDW z>LN|Zs}uPsVTXnN@mHa8?%l;*yF<$b*Jfae4 zhdZ^eoW?_sS4nhV!&lz0D^p9{uoz$Im!@dW=3t-NvbRom2TzTuBOmKzX*MsWp4_lV zIi-cQflSLFQvK9GdSxmv&2a)Zko9z$Z!iWnlrf4l_?O8T*hmi7mAg>cSY|LOH%;UN zMR-=58Pi0%FIEBRPqIy9j!yJ9;3jg=5~ZX2O-QEd1q|Ojx0430AnNytYb_ z_9o+w)e1*2`DH6=#|0m+Q6zD$HJtk#N{rgAb2?iX6VpsS z&}mN+{sdZjtyj8+d1cPcWk;QowY7xFj3wp_yb?mwjby4?-&`g#t%20YO)<^oS)KkK zzb)n!xpEU(u7N$Zcf|zC> zuD;9F&|VUsz^ZTxugceST{CmF*jMEU2i&$J31f* z=sJI`W^5l#PSr8V9*fG^Ow=_dq&2#Z!uORqI#Kw(()V2zFlk3XY+qSV5eMumo9H?U z*jKjIbzjeKik5HbMDhAcO=DCe(^oEGQd6(5%w|djyQLi#+@RB1*(J80EYK;@&?UCN zEYfMZu}ka#d5}qY87M!{btZGW*n#qbgKm&4Q{hvguXE4XLGr$Xa#X&bzcF=V`=HgC6W$X)`35LlxnACs{m&rSM5iA$frNd>| zF4d*)?udyUE_*5BE*&oW={oAt;c}?1t7VTv%gs7bmkyWPnN*Jsmj{?sUksPWnNs0^ zG1zCgJiUvLf2m+{x*9q{K6WrokjC9qnN)DY*_|N!>D0vopYW4wn3U6zGEdk2Tbb3#fqup?{bX8=bijI~wn6z?1H61O7=%!TD z(Q-5s)zpMEPuEdp66JiIXwD?cx<@&LrS6WQv5B&=BJP<)*;3b0z(mz0#ETI@J^)4?)HK6J25l7H!zjWk1gY?746scx!GT`g`sj2dRge8n;=)}IzP8}V<*VZbuzlI(>y228#;D( zc{g^Ftbc-PnhJ3q>pUmRR!kJ$1Sv9>Nwt28?5z{Eeu`{)id$$2+rBS$itM0>+dD;e z({(fvr^rZMw_AHJR+}Q1=t%9IB3Co1_D+!-m{MV;GleMD>8Ta}s3CvW=}TO8rpTrr zQ+QR;DKd;nRdlM1)QKuORpu90R&=T+3l(xrr^>y$l4?3t9?^AF)2Z^QPE^sU((p-T zz^Sq}lL|OZ*42puPLrcfR|cFWlN52hX;Mqkl@xHAoTDo#;57M>P84vOJk6w9I8FYb z>u61QQwE&j5WIH2DSs#>QWFv1mie#B@NY_sA`btibk}qxg@04l(3KSaO*up-3jd}Y z&7{J=Dd*`r3O`-W*NNIYT}FLc8F0FcQ^WzM%R#!1;!T$cpK7Y!6mYuSqnlE|>GC}$ zHP@%hkD1iGm@dyUr9xXgj!l<8IOyJz_jKJ?)?lBvWYe=0L6w^!+cKp>zEiNz40-S@ zAOBQ{nev2#=}cLwoA$Pxik&GhIOt}{Yr1YFx|t>GovREnTQ*}#h0mRhfwN_ACKX|h z9O_^>M~*?l;~%biP#QZ&PIfSzD?fXQzH%rySANfwimxBN5Ia}?tkZ3CS?oOdn?pHG z{^L+iljhH;qN&iqa3fZe?nLS-xgTTa%f_r!HC-UvGO2D`AiL@X*Wg+30vW55m$(<3 zDhI!?G~xR}XE3S#AYC5OiRMMR^!l8_t7(}oTQX_tj5S?$U{niay6mQi50&XMQrFQL zYr5R36U~xzxsypv%XE20*U_|GB+Zv7pgOx+BnvKAhF>I4GL>tV=i90+6!Bh_@V+*-x~EsM6FXs}rBRK!(VEcfd=s@h_CT-W`oIrmyDUB0U9 znZ?qRNmXXC^kYherMOotmQ7#iG!rb5k$OSuwxu#dC#uX+X}nh1ZA+y;Q@Lfb0eEEfZHwL(F4Lg*>d=QrX}-1yo(SOtxZD ztym^IF{MIP_|;qeW}h z$r|5OhF>KEm{j;xvISErP{38PtAlQ}4A*rOaJ8Jyq#BVe7dTjE%O$$yMX1#)Ta#NH zlyA$Ox^k_xey_LXF{Lv%8eQhRMi%STVf1w*`7KqHs@AmETIr<-HjKhw-O4UH9m79d zt&8kG-uY!Be%&?Ei~)p7dp`i`g-{*lR80PFaOdM@)TMx#T_bG&inm(X;Z`}=}I@v72KKb$j69qKE7I~LR^~F}%{3mV%p9^f2*>@}Z zVyoQ8q*}jK9=*%QKegy?l_zv1?Lb@Q8AaUst$l1}Ose%;Wn-pP zc#KWjD%&{d3S<{u_a2_g7szEueEfUMY7Bfwu6HoqCJS`a?#=?X$wx1ACZsC&Rb^5AlfdM=%&=d?Q%7f>fr5i zx2~grJLF!SDBun`^MMLTOVSQ$SHuB#$P8Ua0e8q8T}MmO4*44sUjI?R9r7uo>ckz= z_>i2Yg1ht8&>iv}CZ#KsyLDYOPN72ise|rad0E$WMcum+KM;X0Hu!fL)Qxh+*Jr7z z|5$z%hHt2cgjWGSOS5JJss9!J?~?K*6z`&Z$Mn6{l;3_OmFY99Df76wT!a5bG_>3QF`kjlK ze06IbO1GIzavA>UyF#j*VtnAkAxA@q!Y|e0ONhrRN$N&6a{ZOtf95!9|4-?E_ckb( zEKk=X8QYFL$1kDuBuwM}pAtc!jJB+%^oivXjWWkl`p?&?fJ*=TI<>FHt4carI_CdR zX${?xqXvZ(ru8%$j!~2TCl|U0)xL$?J~hP_wsUuv(42>r@&&$cmZXZP8mXz4jq5~; zc~}(*zw->3*r+mnBZjoIwvwb#l(4e_Ra9C2zvSHUqq6@gE!tpGXgp0Er`X~o8iM;+ ziHd2}y}L?RND0sPy1N@7#`nMHIPM)k^CVUKRApM?YfgFozk_cvH{!cZ0l)f`v4*}E zJiIx8GkEl*uOJug1hBy1QS?o$-$Mah@C~YfUx#Xsr7Ctpa%w<#4|<$0i{ZL~jr zBOOvZNVJ)RdxU@%9oUBDw|GpEa0w^10o-1}`ELa8rsR%H@$IPnX~*+Li4UX?d&%@A zOZ*iFx{w%#9H}vm#l>5~;+j-eEmn^6Kn<~416uK#dt@BWe+eJs{%znr(ul7irNYW6 zmjlpFXyD3KXdClk)Nw~8dn3NOjGEE7HSIOMXOo{Fd2oGkx=HqF;5ERAYXI$vw4&ho zU;H%Moi>c50*+~FlLU3BeZH5piDt?Pz+7lPU@M ze1vptH}!|(X<5Z_q4GoxpD^L+?2H~9(scf#T1;vKzDSkSs(b&}74Uzxrx}Cuf1wYZ zZqV5rzM8EDtz4IAX2MdOl6a~#n$i`MvC>lQLY?PUR(ItgN~_73RYT3HO8ei2SDwr% z8gXuHA4-)YdjmYnB%AMtQpo?7R$7wY`gulWRW!#@ zQ~^|5)j6@+sVXHdIJnXopcNkpRlXX&$GnRcMpLy^`gfcqlFzB|p?*BXOQ?;fDh6nI zn5v@ovY#|ugYW@8mTJ^VA>o%Xln;$5{qTrD1Rg6 zt8+l_A>=|sdjnV&ROG*$qfX{%c~*;bg;aacn0D0pfASu*Hqu?A#Ruz7djU_G|4W)I z&&O6;s*Y8IsM2&2W`HJqMx=&-2Bl&M9Iue56wZG#!k>ijf}qms&_bhYfOmtbqrCAb zXVNWqVa|V>k}BU(`e9eo`|?Ou&iR+pnyygi|NjRg-Gv$g)z;VWoS?$BW0+QxDPLXX zBrc)!jn_!3;ZQ@Ps;Ek7H&aQiizTP&;M zb`Li<+{$sgi68Xz#qAz$)p0Aw?IwP@vnp=)aC5`09JibJ0ne(q-NVfdw{qNW!k73a zu`e<2OQ?-oIc_)cW1gMwh#UA?tsAJg0S$30$L%J5p0hP>_i%d!w{qNW;uFrTal41x zE4Y=zt+lShWOwaPtoxss{U_G_Pt5)kO&>!i-0tDl9=CGbZsI35eQ~>oTXo#Zal47n zzxKfG9&X)mE6437esD7yw|lsS<5rH_O|XcnxZT6e4YzXKZsIpItKxP~L*a&7Ic_(h zil~R%J=|*JR*u_Ea2L_I-NP*$w{qOjA<*BpJy4qPt$397M`?vtDBU55WeCeCmT@fO zS&n2m4rMib>j^$){=zN%nqh6Ttb+Io+1iT{s=e=@bLLW+4M#yGHK%aaOMJ zrhPl)qr}_0DEGin)+Vy{j*0S(Q_1j-`ZQ)ovTmkFUo-4 zYj+X8%1#g)uvCgD0Q$Xe0Td5iggJAUEyMKvwI=)&ZKi#-DB`LVaDEZcUB5Vy60u#x z8}WNTnh=(i_`8-;xDt0lSS(+x`$TwHW=8%C(>o)sqN7iJ?qbf9o=-3*AX3Vs{7{jP zW&UwD>2ERh_mLQ$+Q-sItUS_5=8F>lQ0XIlyS<9Cez!sLIBF-#5X+2V(_}HH3!v&? zyrCRrX|r>?jI(^0bRK2R7UyLtd_xa}fC(Ryh!cx2-Ac62`$EQB#&o(SGv(>T@8w8~ zeepd>`M=7uy6csDjE2kbch^SXA--E#$B-*Fj%$E9`}0~uu4uAlyYLrvLK_?6#JSN) z28*$M-ekiy4GZ5DK{&ZW!6hW?7Gb5&+5qtV}h^S=Q9YoE6V<>R_XP*F7XLzKHG;SMHf>`N^J`u=P*;@tkrXv5jw8f?55 zv=Z;*Pm4ovAiPaMmUj5_Xkl5L)72Dj{5&}f)7NrhIH#|P`Yax0`@GR64?)k1k!2F5 z`86X(-obKN7UF~T(@nV|8sFW1(K74!0(>Bzrd6(>_mUzS*J}tatsdW6U(ntE}4Y&bXyId-~sx< zbSYf#gbKqebIVK?Yt8ZBno1#dCYd%)y<_sQCe-=GbkdTte}?fWzx~q(ojx-8SWW$f zlRwI8PED-uH)-e;CBJp+>=b1E)-A*-#Co`Wv{R70Fx4ue(B~jb(|a)Dtb=Edb&9uM z$Vt(h;zerGY*ZZXk>NDb`q*nZrU&Dr!%yI*eYKO1{2PY=15fm#tS#U>sTt(?O)`@egI&1jD&*S)lWI5Q|$2rS7WFEd&U)G=J=bU94bUeU0gu5ud=R?;yw_?*2so`gZQn+$6 z1-+ZpPE~QfXx((+jB}aQ67V_ZblqHrGIH~E=W=Ul;djn=te+8Ey6wbyLWO_KpDFJDQ`GmYU$fdr?cvR{-xX zZ3V3jg&6*WZ051+&M7V-wf?f&UB+~hE}1Uv^K33zE+UI@al4A8P`q8BnjA;*DPP*K0 z@P|vO%cSh5E*D+;E(BY-%k6b0Tbav0hpo0JE*DlEF!}Qgpf#?(EnY5bzudVLR@4r| z^{zvAT!2W$hpk<&eA`UyiEXwgI5fM^1x+i9ZF?=vCJZ#)9^#?sb6YFhz*oPv9TeNw zJ+?iuWcP7*jkDdfS9guFed^=yn&onLkLtz7m~Mx?auhUryQ{Eu$Y^P$qgkwLkb&N6 zDl8lDpd4@ec+Yt`hbL4JhQYT}vMhy%OEXpnTjN^UXf-L@>2Dy3I{5uVE8|UKRsju5egMYIilU?lWFxhRK z?TfbR&@$aE9_LDq)x&n%YrY#zw1sX@EPbagbxX0ihOTnE#zSx!_c-lq^AFtZce&d$ zv3=)IP2Fq9uDj}%f*pR-?GYEqLhWyES%!9%a+sr zI<8r-$CWuh<5`_$8?_b@$%$mQqp?i>}cBhW+9=6(@y1NH(_$(V8HMBCT@4j&Nw&)sH zK&(+8OjGMm8tA2>n2)P(Dyudw0Za9+R9%Zp?ZEFo> z%TO+rWuP~RM!C$wfs5tp_T%dIm4M%)D3N_nnLG?X^9C)y$tb#7^+ zvzp1+f|&<8c-ZCW{j`$1uuMidl-(t=yQ8-Dd3`-j+V+hY?2*W>lUX~BwbM9f4(FtC zPMT`HfnH2nYQyz^qP%EJZg|`y%kXzlHF!v)f^yAzr*&}c zlM!=6JbheOkB{+uVoB>0@7ct)XWf7bzX5)lXx(=V z<-nqoXg_^wiD!`O70*=RZ%p)WV0dC#GWD!yi0h|5pQHBTlrqmK*FNjCZ#^Fx=`nuZITuI^{zHeVsDS^?9DR7haFzvF@Qk)U1j5WAG~w2+t>my>ah)Ju%Q;{=_nS{82Bv z>%3lN&PT1+YkOm0?`fC3GF=xBD0430>0HF}Aj{({>3ZS07s>k73MB1{S`q(ukmYe* zdUso1?Vu!C#Ik_pBSAU&c!9C5S}WJ~9SYFJii68U5z9w{(g!(xoMnN0vpZ=?J`yAk za{4&S0!il$MH>HikmYffxZh)!7T}Eata27-Y@;fdc>%f13&=BGK+f_UE@GQ&Z1V%# z{J=KXSo?^Vpu4Pn#M(!!z02BzT=tpND1gyGE0obdE7UVqA7{1AKw2->da>4Kpp`4j zmELrUdpTA#R5sl;zIrmJljX5yDR^B+`F;jopwL5W2;fr9anG74<6LidO>l0@+AaoO z|GThyoRJomTvt>7r`5-?i+tB{oxHq54Ybr0y2i|@=N)VC?bh0RpDPUN*n6mfPRkOx?je@bhc0=CSkl-1h4}-bY&DWO zUs#rmXi(#%>)r-|C_ik_9_0;^T*adt?5L5RYCGxjhi`xEp@s?lMT+UKL1mhAipe?t zy7N&ZJrH-%Sni!v!(wpSFsa5vLD%aSja1)KSFQVu8W-77oF&Njygcc$vq52vQlsaX z-8J?>NUis4l)D~^I8lSHn$OkPCqio7sBy>jdh{@nQK;Ovh8V5Vt4EyL?lu)2i?Hy(8&d;f|dA_F3O-10BX5TDsyJ z6v~|pS+{-5oakFHQEmZI_k16UyVxsHZrb3@qGlBCayQ-l+36h%-TT;pl@QPbbKGlU z8jpcZO!Tdr4eWG-f$ww}_#TIW_TwmFZeHdb=k{YlRLzr?r2JzwpV-PKpQst{_D;|Hop|NpF*nn(dAVgzYsUK z3A=n}x`pHf`q|w)yGQw1tbLmH@|(k_O+~y@?SpG8hxr}k-YVifD9S`{zl<`aM5Oy= zx;?_rPo8xBID3s>mYY}JdcRz^oAxc3w&v|b8){yh$$J-mW+mTurT2WY0+GuIvQ7g(y%42e}4jeV5(?!m)j+E8=ThFN7&U^mv=a0^J)?Vvb z_h&t8?Y(EOtvaHvSko>PNvCJn!QL4vw#yKg_?2&g;5K)_w*(3O;M-wH4wL+fQ~`^5 zYFBXCp+LpA*DO#uqPQEomBG!ktUxY7eif8sg-Sao+zKzgG3GAUmtIdsz=|lW|5be5 zp6~kku3P*Bx4*3&2ky$A;8!H`7ZO*f{@FCu?+|s+A!_^z72hGVLdETeMRbyHFnNvf zuCa*x<+B!%?;c?h`L2)+swdX*?kF32!q3{QDk}BSG^=h){E!2LFS`o+MY9RD6e zrtwz)ZbQstclsYgaVvyluzHQc3F`s`Ui9f*3(Zk$wjV0cve7z%B3_f zpg`Xey&UKL{Pa6Vd=A$JEG|v2+#S%RJ~jp8UhVtT-eH1!q2GdlT`16|fP8Vfk=Ont ziqfU7Ma$)gZ&I<|dhG20p8W^Nc*lV=0R;lT>|hajE9%_aWBw6f5u2=7V3oMs=lzJf zz_35_KkzD@)98=u)mU^yO8XX0UymlmG@HaV|l(^aFe-_@g(|^MH@kk zCLW;_j*wzTx~mFng1S`S>_R)K_#4DzE@NfBGA~h*%qL1&=A}-O`6QbT|6ADD>;8Ok zF#!?y`hR==VfSc?HI+iAl6=3*_tSB%=(=h~QgFTN1zTEhy!!=PUhr-j1(DLM%`@TV z6ZCFsgIN^UI*THAVO%Z`j?@=pdC4!Qs#u?D-PTa4PsMk=oJ;j9lKGyO11e67`_X%! z3bwdstbQuklj@qU^UgdHoP#X;K;d!df&0?YFt_kgF_Zg+kP#sRhN@8)hwId9W+#Q{ z)K^F6hUl#7$Lz%+i)DUkWUM2cup*xVydcjA{-~TwMpL<{=F28XN^HEzeeKbu-KihqW z%;%IQx!#IZ-fomM+ zpcXZ*|KnBBRD*p~F7DM7+O4X4&MtJTP8B^3A#PA})C$_8TXnXmGc-q?xB0EmLx{Ch zJSOi_{u7$7`>iuebh>$Aiu8QR~~nDj@j^+(YZmg4`bT zi^!b;RH&Ak+6Q;%={I;=rmZ~J#xv)Z!_d;F=N$39QZYCf8p-M36S8&+gE6*eTi zUOnuw;P72)y(Ju5kQ#DF4hb(1_>NR|$NH=fe5ThHt|U%6!MpgYLsJzk{3a0eVp8 zTZ#$7>2}|U0a5j6aKu++Gp>;4n{>~t&5GzyADraHBK64_*j@M?;Nplb_wlV8{j#5CHmBpcU1WIsXr{oWp#C1`P-^K^{_RI z{d?38CD%msxF4Rl1J`->EqFMhTg|uC>|&E@cSZEO*ZMyl(dX{n`g}x>`qPAGgl@{E z=Q?}w=474lm33sOWD{mY*ae-Ci5DpMQ4&4s(!G1JUK?4ocUX~IlI2{)08YEk1oWxZ zv;P^#r>X*+T$y-uri*>FpKF8hg^4lwMr$bU zrWvzv>S8ji46X1f(m%F*a*WO@z3x%rABik?$5=okD>5$H|2*8jcXh;+7+W7a5R*>@ zDj*6%B9@m2WxnTO3HemeP04Z%-=eTw!?z|BgldaLwMxTZ(mtT!x3J1J{6c=YGaX^$ zHapf-CvVe_DiExXZ&NXwrgMwOs1Yh|w{4o7F(GijKWovD5h`w_JA|`aMvjW6wn#y4=X$YF%Me!8Vi|`PO>nMy`?tLI8eYQy{!`k2bd47=eXuxp8WM zwMi~F@|%X`#{040?3bH%@fshzZ%FJa;{e|5y~_9t*e}md(}I`cdo*oStPWvoeqyZ6 zc<*Bmgx4FV-j^ABMB^QU{?^Jb%}&=zac z@b&zl#!&unuS%tM??Qd^TfE2yU_%-rK$x^}Cwv8rLsw-!L++#~AuzY}_o;iF}>9^|rVM z<7>ljkL@#_D4QPFZTyc?6KB%)-qs`!SdBq3565*eeM3{+pwVL*H?behemu@*>_zQ+ z)F(ijhVNy@Z=vD7mHJkk!}5XmY8>aAarv$;>tkJP8g5bsWWK!|Kf^s6$BTYGu0wbZ zuPl$$T3>;^GkhKWOD(IqX2eJ0#|0;}i>cm~ zDt>$2WZJuAdweCO<73)1-bEP1J%X=%%ca6;bdSKA`c!;_>)&x-B8aYc^E$l|pM#t7 z$K!)cZzOfcN18raVjMoGJGADL_Ir`si8ycTE;_N=6u?Gp5% zClcCJI}Uu3;A46mCra?g(8@8rHvUS2MXRn?C;FIPdBq)k^%WJf&<`mpv8ehAx8wQn z^D(6_QbFFH8Vng_g&qF7#Ugn~aaCfZwqkKL zxZ}XO#9FFNfvM`jXK-_R2)0=i@MD4I#3EDi<4+})o7OBmmN@A4;_~>UAY4|=#zmUk z6}Q68FW&Tv;iI|H4PHGVslv25z>A?>QH=sEpCh`M8&-$~RP>FMi?v>zK4)K2hw%NY zEZJr}Fcs@H)8xo}-;K10ZlZ~`i6+(}idL@W+l1*{U6Ky`9Wi4 zong!E_at|@r?#$24ie^JE!m*mRK6-%XW-X`f`m=?*C2HF{hN}5tisCsmE=L=C~i93 ztFpGjpoTZ|x&NDOIQ>xb%`pdr5}ac8so%z%e^1fkI!CNp<~h1g9lGf5(LHLnElu(+ z)t2zFa*uk+#wPii%um;^$?uNYA@Vz;OCU4$!TU$gq8qTY=+U%;r213zIa*yHLg#mE?2V$0|5}s)EFA)x-GCk_?R*KLD z6PqKxHD?T#S$x;>BAjxM@joTU;3r3Y>ezOk^sBS>4m&0D;`XS&i{iE+qk!}F63%le z{KVT*@&#h?^T{35aXYBvcA4(;7g8FG_9tCa@^u-LN2H))xF*u0&PlQQXxdDBW+$ff zsn4x;5qi`cNBU^6&cRr3Gr6VAhv<3~Zcv|iaHJ119z&T$xyH4b{8N@97FR2*eW79l zhUUE&hx4127FD?`XOR2ykY`hNUsvZTLC*;JuG7?Ady=)pEq-z6KK_ z+c?47(rsE5?rZ5Xjh+)^=`%Io9c8JM_?3Vz_F~mIOTXzH)^UTzdHZ}cYv@-Y1E%e* zcUyY&r(Z3zv{N>1+L3o}we)F6Y*H)*Le;q4aEFY4-ZIFto=059+CS5DySL5gx9n5# zcCsF#hB`zIC76w&y3``oyrT5f9_?`NTT)Ht_UX5!MoLG^C#L$Cr#v?;)ntgp#mIhH zJ$X}VkU6t?YibuOx@D~@()`z<-k$Mh-V!F4S8-<8ES_~hKg80ey{Q)Sffrs)Z5AKc z%H2Tw0I$I0hUw3 zH+T6^W7N+-@Cyg&oKVrTUp?&5xaVx=1aSy^LZPKRnK2pp+ z`7fmz@qO|K5!>NEJpqz(M`=6U%1mo4zT6WzAD4A zT011mhvo$zZO+gUS@9l^nIa*xeP1N}^-7bBQ12!=-s4ttWLA)sMB_aU@dNFn=%*lU zXx6AKT$#iIYnAY%uNOFR0WL}#W-YDoDL0?-o}N{qb-`&Uu8b^zikZ)CT%Q#w91MGg zFI>Z($jTQ7b6T@}+$Sj6J|bR5rOGxli|~4u8Lzb9%qLDH;`blitB_a(YS}Du&n9=V z(239z@+l*h6PFOz5^cmfVm)yav4Oaa*i76DiY#9I5X=!(*;ZcLEevhie=#FNm0W~P^T3MTT2lz3fZ;A3X-|62geX65{rnRfo9Bq zJfRC9vLPQq!+lgBE-Y$zabrMaPwt7JnJq!6$Tn$sJ8dKGB<5(jWS*A$=fiD9{w`j5e4{Xf9D`iogwD_fxd3Rzy(55Vh+{(JDM{zvedo@IwKyw$vX6rNe_%o@c! z*oZqvvEeKR3}F+%C{_q2vPEDTF_$=={HL%A_|GJtQsN?351*Cn6>v4{yfc?s?MONo zzX9*eD#ZiyoKE+{Z0C%l!l&>#M=TY&yHjdpE|ZwdC7HaPQ`^WUPdcZI5{}J~T%v^B zq867%wsTUeOPX-7=qNZi^Bg$(?ov0NLM!%eUoIYUYXBiLK`C7_N2?&Q@ZsCvUlGPYF7@W3cJC|at%q5l*?L=!UeH|s9BT9ahC^45|}g zO)Mo=`!_Pv)T87+N0b66O=2#wl-O#eug-u(^x08zpCd|v6oHsaEG62Bt;C~5DTpMA zxy0fio?0ontI2IAcMG{&$$gY~F38FwOTnCh!HsOf)DUv#5{rqY#A;$MWHwK2329`f zr}l>MSZoBvC1w+giPgjwr%z}j^DnFh?U>6E! z*b?o+{23)lc45_wmZV1ZVxf?17apD=VDI0~tRP}`awGe`Fo)bNaHmfT98EvbsStA-*$dON=RA*URL?;-S+lb5X=L9{Zz<)$ zoy1-un@c|PczJt?+1ULP(TKhCc^|U{+$V4WcXyWaYtYGMnqli0h23$dk~*~DUEHL-=*Nz7hOSrR*my+l^Q{R4^F#1>+w)5p4kq7kc! zEyPY@FOjXJ?1{z1YGMnq)9HUNm#HT964`x}F)^E1Ol-NI`*#xADk}-C;>;!%6RU}V z50F2xn%F|@B=!>7YD$5aO{^xi5Ic#zM7D+`iP^-KHQUMl(?KthttBC1HnEu4LhK~= z64`?!Nn|zTCRP($h@Hel_ zg%Y!g#l-3@+`om`OUz*nBudOC789$9EyP|T+e(teY+^B|qo`4QPq6mK4^426Z#T{Bqk>oB(^7hnRq#|AZd0|dD7~n+N3vDy1&v;gsf-y(#-r-c0!*CCQR$nP6FD*>8Ez zGCXx|>Vv7fQlCkEFZG*LW7>$c_*>J)q}`MDMB47O=h9wE`$w8SeOP)+`YY+D(yyh9 z8K#Vp85c7Cm2ovAHFI(1ip+;Hw`A_j?9Uv`9G#V(bxYO*S=CvavKq6VR|d9;f44TU z7uiZ4+t2zD^FMej=_+12JBWA0{>a|M({M+aMmUNm;Ev&ex3}Wq5~?!tz5!Ofv3!HTDN%GXA4_lS{B_i4Cm ztxM11>$z|qP+8drnr^uO4twFBU}3`m==Rco!0l6bXgAgGS_iMk&?4?r*zglk!sE!# zmgzvhJolUK@ugmHf0a8NtVj$3Hxb*2QxdJ*>(dG0;2kq!KzV&4IJ7MT{AWcjI4{mw zr+m0)QB&tO@{Av>;DyK}_vcf%`}~kQAye2e1>EzZv#E>VZhxM;@4AP_ieEMdKF;bb zh?r}|f!j+9f9v%JcVWYF_!KtWOI$;&0S`880DmgyjX8YwBXIw`u;~vzg$<9xr?8;~ zj9>ON=xiG&XC}4Zfro0RKlm~N-YYx+R{8O|ijTbk_b=YZz%|>sJ8UY|mE8Lu<1$XA zvn+oXp<{P&nRiG@hYsbjcExg;VU$|fcJBV$7*0n8=O`b}X}n#nY!*cuyX+*QrO)I6 znJ;pR#DLqmX6##X8liug#(DpvJk%?IvwbV4bJTqE@>zsx8oAGX9h`~O>~~J&o#G5V z*UqcaNO7MeTB{!CqP?V6m$&=_qRyU+p?;lA3UxctHR2LN3mYzj8>y#Lck`sDJpDa* za?cMp-EL1aJjwlM|KG|yv`5WltQ7h7J#IH6yuRD~|J(iB0^PrxtFyBZzb(+)=77Q8}P`b$hJyTz$U2>d|a9i?vRQ=hcpvBD9r}nk>-H!N+sYa zsT4ddm4Roa`QYbLIe0-@1YVSufL}|?z;C4r&{JLs4w0)sKiPU8z5?V`V3@objF8uY z@v;?6lx<+TYzH&tI&hl2UJ%%HP-JCtJvd)}7`#v31g?@dgX`r6uwHHiH_O|=23f&F z=)S6Q%u7$GBf%DR6u4U*W5w6g>R9kubv*c-IuUGFCu91038L??mm&HN+o!gGuR`)2 zb^wy^u-DXS;2}tU$a*39A^Qg;KV;|C8Q>R?{E%IO!RgvCMf z6P5tUPgs&B2OJH_Pgn{hKVhkwTreGyy=(y_d)Y!r_Ohj#aje(MmP53ct$=7RtJLI! z_d@hMwor`(AA#t3wnb9_ZiVD|)&$A(>`~1W@G(e!!FEIP3-&Z5zhKWo@(cDHB)?$o zko_OmmP>}P+2WIsC#$$s`ZB>Pz}B>UMvAo(8_ ztc?UmXrsUgZ45Zls*S~0v^E|brA-9mw8>bCBtaC9^+Oa7`D>?x>5#n2G9h`DWowJT zTOc{eZiVC^yA6_qY=SleyaSShY!V~~*<@`NI2DpVvb!PqBP)jFkL(`pOmME&8jG)a z5dD!Y(9Q-ILiA_00-`^&N{If*&0ax%pTO1fz^=I34ehkR!NZ53GZqx z;0Z|TgbyI86HaQ=z>gs5DqMo3tMDZxU4?HT=_*{-#?HmpzaZ)=T!E;o@I6G`1s7c; z=%$MT4Z0lAsEY;7x_Ho2mkSQjC1Xi843b8{7m`N7UsnnSLeeM%L((XW(3OE za|G+Z~nS-`#T$tAvzvA zMoeJ;V3XN7e9p5O*gc{M!>kD7=Przlnb7%}>`QEl@K1cc!slx?n|*`Nx2%+1W@T)E zEo1*;RqWsFUUr48X5T3vKO=fASpyYZgGaEe>?igRlNZh1)ATdX^DBdn)MdqlcCmnIkPabs5inOwVSS$Nr z^c1%omlv7M&n~Pn=u^`(@X6ILNzcc}qJKKQ0G|we z3iSumr{j}>j|E{xzCeclZ|PPxJflj#DPy(%^$bOSD!5sn6}jCp^LcTYpwzdELzOq% z#Te!Dm&9PjWv|$x?1G<=q=Q>gM(-Dm*AvQpRs4(+N}z?^nmy;K}3d**TgV-xJLmNAXAE5xpa_S3D*d=9g8@$zM5XamlK(6}K&OeAy>X^>E~U zC+?7xD_6zQj_g6PROfhAl-5a(9JMsYT|a5XveL4ZEAuPMmfX3*vC>Nl*XXBImMooH za?j$j+_J@s9ou}R^|&^TlqZ#}C|g?T@bZ`LRT(Fh+_!Yj*cB!7Dsz`Dtz5Cpu`Wcq zQ&d4`4n2l z?!)&o9G9_C^pDL~3OBp8U~%ivChYc-2wYnhOy1pXie zE3-SXnk!UZ?38Xb2C_*khfQa9kQ^%`UtJ)}$7U*dY@*{zr?f{atX3+HBBF7pOHeq&U!-thlrrgM$RYy1@mDM8(qQlWldsXw+Ft8Sp=LjE6;Q;LsC zA=U^qM?9J%5+%PM?gY5mxS42#LKw~*7(!nCJE#FBqfhcsnyKV74k5WH-voT_fX@{8 z|DgfBc&fZBreaH+<){yDej)!isdJB9RC_UXDz8o@d@51t5>$948nz7XKzw+!aOJq! zhmLnXlJNN59HsYTDNY|t5z5hG=x)XRloUK-{%`U@5;t1(_mbmINn?fCJdL3yXJ$8A zdn#L|m|mB>{dpO0c=GQ3t)jA${}naZ8TGen_=o6s{;%l9-{;IGDiwc~{4If0Rjz7F z(Q3TC_yFO)P=9JiuJhcFw;h{)vl$eZrBYDrpBr~M#JPSs6J7;(3Hpm?&Z_JGR{@1o z<>ZHwx9fc5#LIz-D#BqY3`+e!8Z?rpoR9qOMLvsBP+pa})WOcN?i}+Nl36$Lu24Ihb1AxMpQ-^~=ju((pd{Zz|-JidS)~IZjD^TMCT$wc7KbW6MzX{}z!Ik*T!u z(Ypjv_fj$b-{J=S$qbD}?3Fi*&-I&63jZxNZUlHsUT>UvGk@QEzqSrfgij6JHkCpp zZcG)wZ!<2>tH8D4HdKS#d9D?_U4)98Y18nsmcfiVhgd1T|9koVSAy5ey!K|Yq;UVY z7&q(@ANy0;0#@!x&2lG=XI@6$uO*6csWiO!zxTo)js0X)?M7emf%$9yQu=>L{#ONJ z0m`nUlD{h}y;*W<5br-W$n^wij>HcCJ?JdwJZ0dJ6drHED#@wbM0|+ZI|=lxSOf=eJ^wM zaS^`C`#($RLXX4c7b!xx^J~GMxdsXdJSZ5<)jhlf-{~|+&9q7|t192x&}QjMNQB3 zqbQBL$yTV<@-kNM7tFSaW_z5oytYEL0%`(3t=XQWv1AjDkSz=FfO&-A>f7Zl{J?t!}4IBT$w$!C4TSpwgg>5gtZCbfbLy8MUfE zbEA-G7cX<&F3AnqyZIPJ$=}(o{){^i;E%@k7t}7O?nF0PqwJ9JfJ+-xpv^Tmb&ARMk#FruDC8>z_EgN9k;1^kilol z{c1ThsE=3T0tbE%Y_9v7<2zUM7{1J9=DI=U4Yho$cC0A6iDvt4ikn6rCa9EfjT{|% z*f1i{1y=L1US#7dWG55GJ>3Z=|17(_4PC(u2wem#t%O_g-9>Jod>f}J7SedCqN*T&p zojgLwQ=Zbv?+O!@B`)&Dumx(27qjhxt44)xU4Z865P5&u7pS4BW?KY`QnyVBaFw4m z6`0o*AWtfH9codeoN<*S+-CE3x2{6j z?Iw>Ds+14iWIth*^0k}%sLOGatszxoHrtmgoAmOkAq{BL8eIUI3U$MO9Ppm-HOSLF zck+?2ZWk4~#zY5ul=TMr3D1LW&|}iAGP7-vayzV8+~t^IM>HDAY;)6!sG-?b1*e-R zB9C>)m1=i6Mc&5s;*dLjzRX>YK6m*Q!M)n4>NOT>idv=BBnP{06HpeeDC>HZlO{PP z`#A6Z<2tTi>v{}Y(W%__T9i+O?co(E^1@{$bh!aT0X@!J7maEQ(zu!J8i(3+%8ok-36nV-q5hfGUnAUrl%S`qL(>gyM9K&Fz z+Dx`kG?b~P-elhd0p$fxd5F#jkya?w*x6}*&SFF9D~cjS4&I0=W8 znM33fXxL%g6^Y2>r6}PoXlsFUeLl5I&3-K(FZdEQ=ri;BiOOBx@*QD?usKXN*FeR8 zGOwSF5;*&y4E@L3>{*^fiSmKB{F+dv)DM;C3gyZ-LuCgv`Dq_HR9Ndc;UhmQ2%8*L z!{sW`>m>BUWLFK*sL9gUPl_h{N#z$md05y4r+$469_ zKi=uPSNXkN{!=kVs~!W`g=FQp(z4)eSWvyUQL(4QiuW?J8^JRBrX@xE-bUq%3*Y7D*x zSB->Y{8zpUlFK7{pyH6HU3y(GW}iOggzxhq6Y7T5ozG=#_%!bFEOLS8Bef@4LfJQGQh)CQIE*DyInv|m%) z!{w|rRF2Pw8}z(AYQ}P>iNgodBECGC77fJbPAI6oL8~>d>lb;c(P#DHa%`aNR2}pb zS9=~c$c<0Ln8cyp>rKj;a5-pLsF~Z(P_%A!8zOW;2}0d4l4`YzM+6kgs8}N80Bwx3 zj4?`a1T=oAV|#?`DU7k8@l7>VP)@BD-#iaI31F`I36r23dAVsdvKtR`-l0DDVb6M+-J9 zPex;s+orr0EoUK>AEM2=Q2d2L)+GdidyC27!KCk4o5M(r83;%^?~& zs|1v{1M>&3C;o?MOx*UMR}c?FXA_^0l$cTSsN0|w)ufv>yccQ8sS!*YI=nS5$c7?0 zmsVK4AZA-A*OHsotggpM-He%hV3h1>&DMmOYm<->g!$j~T&o*ydYNtI=IRCtLs_UO z&O?&!@MJPXc}Zpez9^k8tv{_d8%+& zc_mg(OR{MAk_n}xNGHu2tRZUid2UYQEs8?|WooBiE8_@`!ypt2l-uLwF>=93jZw)C zlOr83#LEu}!g`{BH0f&?OFg^3Y&0u|WcgN&FPh(M4^(C*%Oi^;y#lczd3_{S zBw7P$u&F*Csd15Xq*I^lT!hwU7y@B>ZFMwZ)Mkht8i}f4TZ>rz+z#6(XwZLL!w|2| zMoCOkE+oqqbY{S4IWQp4H4uZb*<3RK#h~yRDj13D+09b!9xaFJ`BZ4GpU5Zi`a)&P zXnCklk<&(FC2_r(?6nlTS~)UW_Kcnl8w?#YU|B64$gsX|I82HEX`x(pE3b~h60uo1GX`_0mtsqiy*c{{DjB+rvNQQyoxbkvIWsN7x`I9{U&IR zX}yn59pGx(RNA_fQQ zQNub@{VsEj4P&N$&y8LrVNxHSMmkQawCF*V+7E-563ljS*T^s~R5;|iVXab-D*shj zpoFK%EkdpGPMW+=@Kx5P%i+-nAW(BiOH(3jC_j1$sGZ2YD)=12z5WW=-ITY}_5YpwlAGjZftQ5$5)udy5-wSgMIj*jDj)(P%DxJUAP-)^g_oNbHbn(R zqh7@gaNj_UiXsYBTea1SRjXFTTH9)^SglsA*7*N^&)l~J?eAawICtipGiT16IdkUB z+_^7J?*^LQ3T)rf?VShIkB0Z}k4CpH*{Zi;oSkMEmInS|!`1hlnYU#_nlYJxooU7s zzN@f!(6B2?@G@Y&6mt7^5h`Ek`lo!5L+bt^sqLjF4i z|C>g-ar2kTIC7yLdi#v&;Fx6?f%=7@@moG;69^2`ZihZJZfMJ9e)EFdLchjYt=6LE z$r;_U7JKzJH?Pastp#F*@#ks6|nNt?ILCPogI|Jj1C8{00iIEoY}RL+R{C0aN zCD^J8as#8^TpPHzDWo&WW-RE&&BN269@h zOPVXX{V{YY>QT2h1MA5FF}5_9mXA<3H_t1tLV8*GDZ!XWcSC|D$eNlzD(_sf-b3A( zKy@>WreVNuXztQ|V)Linvof@h4bA`Q-mCfE?xWgY4_dJTjd0wruT*8tB^3pkmw_8p zxwEBz#o{!zvUx|(rOIwmRY%N{JL8q^K&I7d24(#`>GGW|pVriwnK$dY4>i}E&}-sd zZKPxa!^uvTp#tf{Z{$rgLBO^}RcHx)0S`t?T1b zNc+yc00uIm_cp)UJ6KAJXj^8$X=t;r&y?yLS-A-f6=Ycn45dmmo`5zt_URAt9_v$q z^qoGZBkk3$dA}f$36f9@j_rxg%WUO83QTPLX zp{KCx#|eoU1Ucuom6JrNa%!SMZAB%~%H~ZYu2L&o3P+}^&QC%? zxkgr|^Ac2KWkvajo(kItX0=-TTLz38Zg#}i%ba_ zt1wZ2(Q@b1&*-PGoqi(Pei7-)me%QeP4#T^o*7jczXP!q{ay3>Gv4a<8uAsjMU@un zJ;zRUHqohq9EXTN4$0o0SyIRy|(%_;QfP@!yLb`3y#eifi z2E3(W@nb5B3~KyociPP#o?V_rV_|7ybGs!KknyA?MGEw%EiHqtS1zrC%A4;#cOoi( zdG3C*zFD&0^X1&aju}tT^mNQm9W~x6l`&Z9UA2lytJpk!V ztNWes*Eom22#2@H;Yr~@j6DW}X^&+xj>Gy<^AD@Lsdt*YM55}wmYXBzr)9p68kpP1 zS^^htP?>+%rLUTAy69J#U+Tj5&C4#Hsk$~FT36cq{>1~lT)%bk+@l!|vkybUUthGKZO_=AR3|EoU;xrsF^VA=bN!!01tQ zAo_PCjqO;I(Rx1xx>pzw5wQK%;tgJK1!|O1v;KFPa*<$-MP!yAIuWy28`?Tij zre3`QUaJ9+8CH}JucBmGvCJFyUgVj9cZqPr6PfS}7-M&5I;ucT|7po`S+ zP6Esdw9~c4dSH>I{?)wfk@4;N0S+@BN@|}oq~-7<-P20!cwGnv84*6l7kT@UeO*+r zN>}QmEA`?d&FS6J|A}L&Qzc5F84e$Ttcqv_pBYgMmVbs*(L8*ANL4h?*uO(nHh;Ol zKk`*i4M)2Cse$bVYp!F-&gYD2X?ZGamP}xYhCCjbR%;wZ83<+-O%s}jJk!wb6kTbu zt~9mfg=bz!S3k5|{oFK!IW2#A;S5XG0@Hp878Si&A-LSwGU1iQ!FH$Xnu~PJg)ImE zvOYU&Hh}aS%bUl3(c|Q0z*%N^E83G8;vgbTvwT*R2>V`ubMt-n)zE4|T7H^+4l>Sp zB#AC-zUPZlHK+NPUrZ`F9}wxn3S?TX`RsxYna*#i{pSNJv``xLIbq<9^unomX@yg* zXt??FFAGanwynH?mGwkk*ABQn&-Wr!ftYMq;upI|0_q`xayjFtuEeouvlTUbiux>I;loqzmbvaCL62lWppyPBB>e~dHHxi#*{V` zZu_okn0nHk(p8D0@jmTs`gF)M`LA?oDJH^GyQCxmC zD_pM;eTlfA09OP05%84zU^i9U<9+h5Z_tPVMEtD{*E)jKR9BU&4rXYoTU4$_mLO=? zCU%V|{SqpDyC}WcU0bgD6u(HdnbBUTY+pm|8%KlLMr6cP_h7l29>B_H)tqQX2LfMP zW7_-OitcKF**w*q*IhNJH{5r+tG-3AO!f2<>7Pj{zQ zK%Q&c%5y2@(I$VbyQe~RG8dojzKnG~_;W08Jl##JRJ{=7RKpz?V6O_vsUrAgzXk6a z%&rca_BlrL7Z((EHcEP@8LunDK(q%!`!Kqq9e58T@`k&*Qk4y?yA^od``T5D)zGM(6Qj}uh1e0&iKBMAY3{2XRLGq)KxHhd8wVcsGtg(hj{$pnAibuyVfh-b zYunc?$-WY!cSLW&GhjpqU{N~&4&j?I1dZ3Xt$3MxxTh-U7}m5_coYaBCAYN{W^#%! z^Xqm%GZ;WCjKBq!5~85yA&*@gl1J3!aIb+lc6Mr-g2 z!zc+Cq5mcRP(zMFZ?xAf;AH_*UACeOnT+6WQ=CLX9eg zowR9;RyC^>P7&N*m8v#$oJtW^cWuu z{d8#5fVl5hs*a~&cV!uo*U%A9^4meVb-ZCHdpKeR9mX2f22S2kkq+y`r{5W#osHqE*>=r+ae`)p^`q zK-+V%P9Sh*bu;`c$Y(<+Fxy0>~y9v4OaIzSJ|pc z?R0Bw)p6!MsMhGVwVlgpbb8ZHjD0hBRI3oQUg_C=m;88yX(HWr&&PexD2-2%;Iu!M@I(2}tM|e6df-y$SGu_cW z)rqnD(Z5gFKVMCOFMJNT)?g;e&~YY)FtIa&*>xP__*6|1xy%ol|IkL}oP5*153*wl z_cVOL@Ivm!bT{U%H@dHY32{Iay#C)^2Yo8p(RL8FC1?H)_obey zZ{a&_BrZtD@zi~8ewCWp<$ew#4pvgV_EoH}*Y=y;E2^+~J>VXxQl)+lQ9(|A4k~|L zr6%-x2GVDUe~@ihW_UByDOueM*{T^wiwg3LNZncPN*pa#Z3lBKmOIg;*c(qHE3{po zgwYj)8*2DW`#0{HHL8bs{aJ3TMs+oRcb1zyQgwC@)u_zir@DeSY8Wzcp6<~a)lnUD z|6QZ1Pkj)wR;SyvHql`LCT=GVsZ{mZ*dSYmJqOCxvp`%rkX4{5>1`QXVDF!iHsYV* zb{V8P#(cHe`DSZ}j=*PDXZxb-(b;+|RQ|05rSv$mbOvWV7s!g*w8|jF*aI=NVv>{J z^l2V8cGi|ZvImu{<7p!PnQ>Nq|4&}_EtqN98CVca6t+eoC z>|JJlCPN>rQ-O>c1b%7Z#{ov&>V8K3K4ga#Wa)7WWQCs~Dv*`ZVE9Q5N(=9oYE^QM z{UG}CxfsfZ*hWi4SM^=S;$SmdZ!z2L%e^woBOHmF|2q90?lAisD3bfjB_Gb8fN`>nCkF;!%%YQ?o1o! zUkr#R($;T-C1UzEVSwVGodB^b(Ltb&hkNZ1TWN^H#T=#|J=sH3%|ORIki!t4_`!JE z&!P+Vb4X+YXf8xJ+#v|hAuKV(Mf+ZuAt%BNG*TlA1RDQZkc>MRXn?Jj#*Fqg-OeW| zD~o|&DQf1rwI`__v%Qf)xGQm9y%FiR&{);c^E6g%PJXth@9gSq>o|q)t_bO+es@KY zuPv!Bdf452lIofEtH_as?x!cI&gORu-JJfa1}Fc9Ti0K8>mtDl4((Idxhs;v$_?(i z{;G>Rw!bRWq&K!D#m+k(*W5_b6E)RMZKf#Pv?`3q zBDehj)!j@9@be0e5C2lb|4et=096nxfe%IeZhT3>7FG?B-a%;&w-MbPoS-Tz0w9$Gv%gs?2{8tb_Kik;2Nkgg@)PK0x&jm0&L6 zganI*5kMdy_{eu>YY%ApoS`sK(I8Aj8 ztFC$}H;pjR|DqY1Q4R}(ltKhN+*m+3=o@ZEFrwh>>e1RE0|yuB$C#5cySg^AfQ?GX zE>Rf|s$}CAex1GX*zQ96)e_Gwino_lsogpnrFXAtgJ66Q1Rqrw#A}Fz;ol*!sHn|A z?KjW>*K*UyM`v_^C?fm9c)4TgJrMAUlP!k-61@%oHi?fD7+j{t;o zqeNK((W;U0a#|R#RzRR%lH<_9*qP+#OAE&&TI9AY&Z01kS0|{^*VFUkC?yK}QVUP8 za9UCgj7)jr;x#rJjmbaLm!_wNnWW{Q(#&Jp&f6e<#^$T~8W3Ivc3THKQZlBg0jPnG_BMq%w#56`4BT(jZQ{ zc+iC-iN%O|lC%rK6Eh4m)Vs9vqv)?h?Nx|>F* z%8XqpTmnDg;=Tcz_LLp=10xF>zQ~#9a}(Kn5}`GjdV$cZ0tUfn;k<=?)#Gdd6fmtm==Q0&CdE;Kiysc6q-# zk1m6!Qwt&5_Y}>DoVk(<+s_?5X(*N}JCl9JGs}Bs^BFmSn(_63=d(p&tbSb9-M@}f zm8blN{5>9#3xEsSe?WgKYD+33*Q6A4DkBdiirJAPlK-Vp0`=#xd&X$BB4+>v9{*l9ncHZpHjypimTirT8mNF)J}RvS}_V0}%Zn1emBf}*kN-LcAj zXAF)M{605rtmZe-W%f{j)>K^y5vDl)%>mC`a z$_Kv(Y2_@`Z(x&Q)bSctmc$}*MIf>gT*Ek$_Yb<`ILt+>-4n*CqT)?)irV_rir21o z7mQOK#@&-Zk4Z%zNPv5#f`6R=hf={uSGxzssdDq<)$Rx5RPVf_l$xijSE4_xR0EoW)#Y3*h1ef(5|Ml5jhlbJC9f0Otan{IbN-th#n_K z-zSG-*^w#r93MTjFoN?^iWrW@L@_5bzNy8@%JzEqdoav-pTebApMhhkKe}rtsA=j0 z_r(b~Y5bG>)dW>B@k8J-UF|#J?KoYz`dxq*FE{D4q=y)V`zoH6Oi=51XhXEkuBX`e4)z|+q5TX3^ z!tmeRPbR9GOev??pSYb*RUOO!F4au#Yk06wgo^S89QB1T82;3qeJbAB9CNpys*2QS z?!Bj~A?hFQN2jV9^|@O(N%dOr7}}FF8RujMD}OM%z5LQkL!8lcE8PrSxN^oY8*;|- zVdv7v8|ING64hRX>2leJ6Z5ax2XK7FMYL)t0Ed@hcXt0UNmY%- zeG9%S<-?3J&5VAGm9~{HCuH4(vVt0&Y2!68TIMykYFzw)g1Z}+L%XJGKJ9N6`@*NG zZ&kk6OhNlVdp4AbhAy6>&dK$O-t7{wh>miPO;MdJFW-Ku>JZOYPgS);1kT>i2v6cp z!wR2_hpFpQ6|L!%j&De+=)dqD8h%Wp$GX=|#cQcF_sOYheDOcgXG6a{Odh)Rf@I~Fz_w6kQ59ZC(j+0)cXv2^K0^imVTzuls3y#8#RqV=xK)5 z$TY|l>W8`4-CcNw8c>rdV4wW}`e2yt;wqRZ5}b}SXyesA?Kpb6``j7I?)D#WK;S_e zj{bmrjW4UFgNYONRunSuYP-tKo326&rlB%U2={?;rAPiFC}cWu**d zsQT3v`pN&tNM=xqD`+qINPK))X_v$HWqaDQSzImp)(Sw1`0oi8`G)M_aG|gu4eJfx8R23#^pc}}OBx8M@=8li1sE0FuA_n{byV=UjtZV&R8Y`6 z!@z3|9Sp=RI1d8U`h3+n@K66Sr^0-nhmdLMd1-m+d6wOdvNGT(z)PWfO~c5Q9%;Aj z`-!LYURq$0or7)`tw)c1!1 znNlHK48&9;eF_`R4rCV;1PW>fp&ZC`I=b)8S3L?#K!Mw-e8dGQb&D3L9)V6|8eAUe zFgu(JzK~|h0)?|z_mTywb9O1Po>1=I1*&Ixo{X0%t0owV%ZRUlr_t6LCcED+P~{zP ziwllH&p0zWOHi|k>I%!z$mkSz-a^%RN;}OnT!zLRE~5yKxCWVK171Y?WyN*4;HCoN zjnXNE^!gJgcXJo1QupJ9swlS$Smva{C-u?pfDc_VZ~iCCnQ|*6^m5= z46fq^rQ~O2+G|X*+hNcV}o5VWY@2kMc28mtVjS@oGvzs(>iStuD^bwX2!UGtvWj;hhaSp!jkj3vudN#!8saY+>{=?d(VQAQUh#<_U?nX^ol#*U*+ zVQqU|)n{36VmFXAip}TNy6@r{dkGwN z+jub#Lnom|x(~MO(HYgNr znNb|N`=bvbaW23s8mzS!u-(%^uDMx8-58LY(RG01m=xucq|E-|Wj!plkRF>wERTHD zfj8C#>GL@#*A!^3oMp1$Lh6s#a&U5;SdqErL{7DB&xC5UQMbu zj?9VdBJyYKQHFLNNMUXfqf^|R?-pM1UJ>uHDvCTSsN$GzCORKDId$A!(J}IY;Nsm{ zkgQhvUj&HT!ZMI%XAJxmr)X(hhz=K}s+J@PA%@L2nsWseZ;kHDj@dQHVjI5arSknp8@|hv zsQ+&-s=A6dT!rfe9kjPhOn+~3PIjACtD=~6mS*YD5t`np(HI@NK(9=xpnpWjiRnpc zYJFC3Rk58aWOAF3bl)r7gY`K55ObgbFZZrG7sRKa z01K=TKBi0U@``}fR;(y>5JI?%-C9kKf&GpEaF*3MK9hDq*rZQPok_9CD}pP|w-Q5s zOdut=maSb`X(T(!`kio9E;)Nsm1jh1L7_F+Kn?O60e|Ey0vjlelJ_v^6M%7K}}YB&xGf@LoZNe{T~A}X(HtL*`IXY>w6tM zOWf!dy3H4;^8Q1e|Fv#@vhE`HQ`8;t=>J^z$>eO1*i?6Bp*!V5Rnotz@qZOzZj#Mh zch`lg>!>^a=ejtLk9VC)#3_juVvd`Bk?MMGAy&2jO^3Uaj+&0BrklrzlMS0g%~j&; zr~^=|yc*)U^a|Rzd*wxlQ6sX3;#E2+3NkPOwK*3@jtZvZ@fb1i`0z>-nnD74grvMz zdm3$qZ|7jm4A2ot@}Ud*N+@O;jt1=5IQS^Uq3K2_r@B+5chm7vnvQgX@?8K8(KK?w z96xG+yb3#`R?L%>V#NAh@g!Pj=wUHiTlvuld(@W_+4`X z-8c%p)@6G%vL!)#3?8^aBn>WwJZuRk5jDMxKxTAof;>D9S%OZ%vvGU^9tuyejMK0O z52WMraykw;(@k;l@bK8<56Z`ZhS%U#P)%)aN`ZG=d5({3K)QYI=74wSM{%F^Y4_r& z>YC_14%c<>UrQ=$j=L|ay2a>$ob_}*$!^F&Aby*oeJEs4r0B>7+Udq+xPthup|G_B zE}g4DVg0Ef;l~ZoMT&q09ReL{#vUgf#yc`90~75u^e50hvPLzzGaFRDDILYK8Xv^* zogDn?y$<%}vRMlHjp~7L%iL9o0P-Fgj@dGZ>VyvlG;SR_l39YI8~5D?RlE#eZN|4n zdM4^ zpV`3uV8TI=gI@2BXYqNHI{_?mQ&_ZL?|$N_a&N~ZTzjwgxF(h_1oM&q&h_j#ePT8H zzv*v?(YYbMG8O#zBWRX18$u#z793X0xo&p|do* ze1<9PG`cflYE1sSWE4FE)}*gre6`-)8&efA{1i&Sz!)_R!~ILKqK*cy9O52G{sxS| z2-LtU+T6M;FphXF3lk2XhQti7gb79`BRkvgllRN#Cbnj#+#2LytppE_OtPXJ>FWTv zIMPrd_>P)e1G#x2S4m{Iph_8cyB9U7E}>G2N+BU$iGdF|DCDCX+`UbzZ}k*ZU3(qo zSxtUMAU({YJrxPej28~Ls^lA%pxm7GYN+|=4eqJy)ey6FgL}n#RoVG;5El!v-)GI2 z4&il~bR^Pyqx;HwHP^ytl!5vO-M$;t=pLtRr#XFuaUy+QTpNs{OfyfPp!<#`JN0WgdlnmvOOPe%gBzQ@hohs+?Y$R}{196#T4zm_+DPVPd(CxJuFG%OQvp1`SeYR~fRuvZ7^FYuPgH6E~ zpy52@H<+!l}UHWps%&d$m?%i(es^HugoaXeyi+ecS2I0jyK6$*E>xz*iuxhgDQbqS7Vg;7zQQ6bK7MZlo{Xr^f|bKklg z$Mm8Dk)$Ta<6KDfRCP9^tY6i!ei;H-v{7{jXC+ap;Y{hK#c!!hA! z#h{K`+~_t{l1WO8!A|$qZTRGI7wbitMgo^&(Od@8l3yzbpO57eH(`hhe+zF=39H$S zf_NTIg`Frwhs(?*JiHoWJGUdJE16N|!wBvDjS-;i)nJ&)l>|Ysz>YluCnL%>=}Hx< zPBzWyqdAix*UZAXwxyBKxHt+KoO*hf$lVmF(24JSg2`Vr495N8t5JF-mBDL)4kL^ zc9rU-?siMJ!^Pg?zH*}~awlz9B|Yy!wJ6nMuSbXMPY}h!7vD|jh3J75tiK44VEAJ9 z>g_5t8rQ@FMtwa<`O^Ddkm;XUtDaDg4@KoS)*b*b{u^ueBX3xlQ9i@C{^!R}lih@$ zChOwnT&-rrNb3Ct8ge3m8BGF@lkG2fP3E^k&L1J8DJ+i@5rS5x+WmuI>e>BXWO;Wx zb%l7a2*96NB5soJ(I+%Dl5f4)4mPrB}y8I z#@K9h8YWmR-rS1}b07m^LR?>6kLiuKoa>;Eipah;R_#Ou`1iKJ1_B$W)2%wpYL2be z`CwV!gkf_U0d`s_mC1L5X))b_qId_epcwGsq7?`!lp>bM7~&o5wqo_zlIl=Av6i$2 zYO&7viCFlaepISlk7~L2&|($G#o9(iB*h{{V+>v4X9N$qU9MH38CpxXqh&2byzlt3 zDYcEqbQ^r=HadE394$#{fM~ry-{M|%E$-`6A$lOWK#MIT7HFD4iVu)t+z0eb*q!zP zwBMu;5U%0_ZiZEGfu;pGOvDA;4yY^-?ttr5?(!;5+I-B{eIU@2y$MQ?;~9JkydHV{ z2m;P((!v{%hoH=-kjtJsyb(A9-~YvHX5w>(1Vut{0Wv?{>Lf)nrslub*(IU5{{#OfY(8^eJTQwTT&afXp$& zh?f~gfSzGbBgYziI!_|O3?mt4*zdg=CR|~mBr&5>H9o^A5N8;H_=eWrjQ)l%LE=0^ z;7y4 z`76lhFePkYDqqoa)4}W4ozXK9Nu#!cls}v14{t+G#*bJ%8b#h{96c?rP3k*YyR`%E z&?v$VnmwpV(ILlY(6-hee>Cm;y&)o8&$D~nT{oy6Vk~+%InQKR^*oDUc5=)$FCv9! zViM9yQYN7kF)HzSh)>Sp|H(klLz;7P9tva5!&B<-hGd+GVg^iPBI0X=Ho@^Pfbb^9 zbI3|?oNZhSJE)b0e&Jqqqw1SSGN|>Jq>et%)w(?PJPP&}%!23=IK+zD_LY(6+q%o& zklc*&QP{DtkSA0KMMA-PhsN_Pu_1@7B@|%>aX0uQqsJOzR68$_F3OZnlF#sP3_v>_ zbmEL+5I*VtXp7slLzN8^rbYjSsh0L^k=Ck=WL*Xq`y#oUQF)+eM|a@8*snE=4=rW! z@eC2vv!#@AlA??fw==!8@<5_TiMmaWk|^S zE)!}w0S#b4UIJD0DRc;5jr^YK1;~BsCRL(da^Jj3J%h*fH>=*(0WfKL*?s9|Rnz+j z>X>Qr1D{p9adYMslp`>+luIroiS&Sa3WN3@*S{A+P*E&&N&2Z$C*&Xs~>5ho9YLgDLyNAOi4ksdK&*Zupg zs!QD;koP9gyT~3N(h>bL5#14=8$O^qxeIPne)R`;`E9T|lA_u7@QA(#k?p;(emS}g z`rpGXC~;j0Z1@I9>op%|B^sKAd-$4~cL%c{n33DBY>F zTj&VyLaEdjP!U*n;1)0&)En;`O#28#ft|8ntsM^Ft3vH)e+wP{R&{WX>{NxKJdY$u z68$4y+wt>kc7{VTV6krj z(DWCe+nDpM?)qK0$<`Nb`J%U>W3@HD=&g8~(T_n}Q5&o@aS0RWc2@mPfGhkC;gFj&kd6NLj4j9|CYk=XbQu>nWy}Bjwz=l*l)${`BP+NYtCMK*7PO%0irUhdp_EqadlKx5 z+mab(QIY25{5{6zI=01QR!}M%7rZU3Vuyx>g7&>&R#ap^nrOP@xH|Rsv$@a6E~-=V zXtfHd7}>)-00ND}zKeMla9dAzrL-+S*`-q#DaI_tq%rpsW2SzzF>?Tu#!R?2=J#P2 zG-k@sJPlGY-ENR0A# zv`=ec&mAVTmcI5E0H>a9d<%>>Qr{sfkz|I^A4e8DWs~)-d&1r7M(Li_W-8kwaE@VHU$Ag8U)I!L9GKtZQTCK8#$Jzf=WS9R7i5CpsIO>|A;#l0Z zAh@b7vYCc>`djV%2eOz^ol>q=3ojgw8(LzWf0Hoeu){L6qM%Ta|Jf}VLgxn(M0Kh; z;n2e46pLF4(VA7!ajc5s#?~r)bgKE_MEN+0h}CS0k7EXW+GyXMQHKI8bJ&+!YOK^CSLe01m( zFFi0wOj|8P^`4nLEe59HV!=9V<22Ip)`oZ`MCw-kV^FXCIFgXJVx$RoO=Ct`vaz$X z!aWg4I2MXAMoW}IP80|U+r(ucNAJO>qmaPFNQM)IyU^KqEyh?RF{4s7exlF{tr0~a zn6O>Vq{w4(^lWTT$!~_K*ROP8qEoE}MB;5sg1Cf9u%I~>$2k^w9Cg(8ANSDx_?D4P zXxX>}78w&eVD>7-aHJTw8f@fYHLR_zhGU(y8sREN^Sx&@6xm@SMq}daS9}&#$yau` zClt3DKeFPq(hQ8Q7wcrYS3RI=VkCnt;2m9B6hFeq3-h?-?g3s#NaKYnS!5Ryt}^AN zUfWQGp2QKlqPBDlRipv()1iux6+4+Ruubxl$wgF(j-*H(aq~Gqbi}r`j@YxLj-<{3Sd^Ynux%X3Fz3MG|P-ivexd$IqLDDKdoYO|@ioA9V69wfD2VJytbuK&{y7o`(7ozQ*hrB( zW3M`4a#wh~vhLy85T~gl$c}uDLmv6DgUF~96h8S+JAzX}4>eg(_ETu4sT3$MEhE!T z?(g@iGOL{VF7EexRoB8wps~fS&{RE$>EZT%NS%~ZMT`uFQ{%3FNOkB)h&U#8D>O6I zKmKC4*4_D#>XI=~MzhL&{vp*XMq-?HTn16<4?qwHpNPo@P$Qy!P>f!Hix1)7W0x&E z##(^FPlGo63@hN{v9#*BW|YtHK|thl;e)VB{4RoX5};<5(;pAmJ4@lippkPmeE$$j zHeg0c@R{QfkujXjabtF0c$ zv|2r(y!u~2hKi=1KD<^6+K0sVO1f`1-f|s%EtL7+}a3#Na8X!QX{A3Xq zR0h5cBjxl>A-|E%SIFyxoM{byet^}&wA-4AT0S|_&{e}bp=0?G&t1rXmh)8ZH^?Wu zc#BOgDSx3M{2cn>oigwe3HC6N7crE&nMmJ1~!VZ=l+Jt3?eL!}gFt zB9r@f_Bh4UNl`};h{}yYdUk+D`#M|?N%3{mi{A27p>_H?_Ss>AJU-q{b7%vWc~%s+ zRnr_Apg6uhAWsc$@ws$-+TtGOPooRse;(cDNUGN#HrB9@$N!1g$|kG7tWA|={*MhD2MF*#dHcqJKAbabl2l= z!ih#TIlYTiOGFWDCT=(Q85$P1PK9M5GE5xP;wM}XO;8eTJsjKQN=dl39{w>9S`UXz z{v-(ULwv@xG>1be7BlELiy6Vn+R=|f_9yWu@jqiR!)P(3g?^(wHcod+KuXHwyWYe5 z@UE92v81ucn9-^~Rs!9(^B-yF8a=7_(A%zS4%W?Cj)~3h6?}cms@fsY2Lk z8r<6u8ft-i;7OcO609{!YZc8Vtd&gS)`~+*DaPZu!D6MXt*w;yl(bUeD)AiuP7JM- z^eH5k3J=u3J1XjB5@LYjiEe+5J1oXR#r4(m!Bo63YsxHceMsQxJvqRr?O z)T}=ORx!=1=y+b5B(x1nHNL=2VYAyljCi4b2qOUzqquEViKdB2(Y_RuUSf#opE8%V zPUYn^>M1z@M8HjC1nc=XcQ^o(0dc4e|=9JlKMRhWa@hw)LE z?~XX2IusG|GY(?9yYc{*l)0{Z0GE`dT0O4#Sk7W{i0X6!^3EJ27%4)c%rj0}|(BOh^z&J<8=@x5U+n|(yJ}e zrnw(Hjm1E8AuVxwNsEc;#fIVojKzRO`ANsr#bBrmGr8z#HXpg< zC<}L)X8ij|9A&D)VS@ZZpHY?OQ0+3zGeMFZW_}5CF+AHaG{6r7&UGJtMg`R}_l0Lv zulDD$lKmF!(~K@hzIpFw9o;SmRfaVWT$)z6wFlLNyf83{T~|1<>nh4#l|b}%e>|u< zoKREjD{E)Jj=5q+iS!C`0k-N^G`~7g0~Lx{RB1^@-5I2*^`34__E#If$kU|&G<`$5#T-$&Ku*%_8KtA9SYZUjQ7vs&?UPWnr-lowx{h}QwzCCJJZpJe?_bHuJYu; zc8$ArDBS(>2;LQmj)A_GBaDeWF9jFANE8ewC$etI3-~VZD)*!p)Jc7}p`xgsjc65i zjH@sY{ZAQBPdN8xRFBC`we6^bOZG@3=~w-XAq%EoTa50$V3q;Xru&*7Wo@(!Etsy`kLx#~jb9{$6wZ3gTCMvM zdiW;@bgKw~w36;8lCMFXFNxGx-Mdn+ci87Ar=&DL5zTAv`tu!sCWdY&e7OFdXC2x_ z)76(VI*sHUB2p%2BKo6SjYoe7Tcij*#@{L6hj8e@ zL8Jpey8mS0CyW{Rb(cS^$jFbqc9=-8hrdYAJ=JDBnyzu@|3-B=;9pU$mFu+otXE_*wfdbQ{! zchi&N!wg^(hY!u3o0Jx$S^3+CSn9^1Hf9PXiT~j=T<*rlWq|6X?sm2o)hWqv*Ct`l zyhxsk3qJ;w6VsPeStar!EH!za;Y}{V{MZ(wCs(o=v*8ZZmp|G7M-l!PT7sM!PmJ@m zo-TxFjTFT-62n!2gr1=hsZ{8&R-Hb+);+ru05hsn-7{QHYU8nzINdYdu@vazs1O-) zHTrlntkUaVj0BM}geFdMygR+gs%FDopgO*P8c$5Te}w4%703Ixn}g$-5xOUJ3LRF` z0~zy1Qh)Kf+#AS>NVKg)T;D1p54Htz7%Cd8`MQ{$#fv1Z8C)Ps(ToCH#&XgFDujz+l3 z4s$z9oqh&l55#vgpb|&p($ORi5BPcLXb3b;2gG-SO1?g6{Dwvqy~lm-6;&1c76l{K zSKJFa&sW@!Z2Y(%Esx#_%w^Y7~lj`+1LK5d;a*FEo0py)~kifn* zWDg4AfA>Z64n@=8C`rWmg}(!)#`eIe6z*+DRHxdHFr+DUWQmX$5BB8vyAX|TwRWVr z$M6wR%(;*4gdB<}r%cR1YIuBNQU*ne92CAmI7J49w0cmemE@pEe`Qek^t(q_Oifk%V6!|V5RuzM}YA3{wT63Z<@!80FSr_UsXi|NycCF+mB~;1Ks65 z8PplM|{Ce-{IGjb>t=4%x$`4%xmwN9RxB zQio3h;xIw}apoV>`6rlXhed_>JJN0J-Dg~f#wKceKL9HI;|KFF(QET@$KGf3^FVU| zsxB3f2bm9u_eXo8|A8|7mi(1VEBb>w`!!Ww`ZU;iJIEyGC8)IAZgqFOrn>Rd^4C<^ z)Khiy2T9LYV)VV(eEtZY@bS19fIq{VQ#~B#EQcr|UzB5CAwV3T9R|$%D~lW8Y%xy{ zxwWsWVS{G8fp1`O==L0*qjCSBeA=4GvX$r5qr*mKvogNA8nEfpjQ?~ujrM?*kDET8 zvp=W8z3X*V)n_@@K>X~bfd-6+urgy2GtLJda>+aSmB2xCV>)1*%x}5s4gBFQjvk=K zv-saIT4ynjt9{02gWum|8SW6KX+xRz8a!!JflW;+_~E2O>;gtzp{!RHo%)nXZU73|j0p@O(Cf_<98e`r{6Y zyC;w7x6<&JYuJphj*#=AIW#|pl)s10EaQycgxALI!4>+E5ZW?M?0wIbXnsd#4818o zg?(BA)_!9#^7+QT#vl9pjmJgOU8@K`bRlWxUVI4H=$SwE&o^dHC(ZDF4TJKHUG15_ zpgr@S1b*yq8M`9659b@jg@iZmB0SWN`6sq9|ILleubI>^CARwd zmR`)?Ch%cTFrOimdqrE%oj}Neo)qrp4M%3gE|_$CQru@#QrK~qQf@aInC@s` zdL4A*H;(pvWu70tm+7OiL3}L4ON-9Nj46+VIvZcKJQ9NJPmpx+B}|uL7Wj=jq_IW& z*+5T+irv}5^v+pK{}Le0U&b^2zJZX}doo>pG3gKNA^i3QOdk+UpLqxKpAUfj=Nkj3 z(j5M}{18aDT*zuePG)*ZCC6#_9;Tm*9h_c5c8|ffL3s=FA8sLs84Ji^M~Lu$_2+PW zE>kYLk2K+pOh?WlpZ+tL{%#7>%SVa*KO>`i#b8#x?S7_%hLgqHGKz!d5pqlna~r0a z-*{h!;ITZyCr)SjL<`yFozL{!$4T?I*-X>Ki=6F{X53KP%8)ZD?zs_)`_b8A{|#M< z{_~9ugC_cDK7Qjf>E91i2wx9Jk#B^DutGOs*Fy#+4-*eFWi!(&i3#D}#Qw1l(|^biTqSd1$)lva2=2vioY27hz_XZ+ zl5~f7h|2|g8Jssf!NW{P#Kx2LVm6o>1>=c;E_&rc(e~)?|&xIiwqFX3(x_}_}8O^ zJawh`|4Hy-mhr1CT+MdpY@VBEoYebGuJ{(AzYe0h!a62%) z_gbdo9%kwuV7l~VrvHG>@{M~2vToK>guE(Zb=?3yF=LS^^OI~Mw#ayIfTzPU+MXlS zOW2*1L+mA|G3^Z&meDB7$qmA;+Z}{|C&qO|gs7KZ4wf$6BmKU74{82jv+iLm+ zlqUmGAwqYW#)hwxx}VDM%|pYMQLus`$-!8?NYRtN$!TDEp7e4y(mdmh>^EU7f86n7 z|8B;ISj)Q^f3vB^C*j5X#!GNG9gV&lreE37c%+4^*&{cT+Yaf*iK4~YWfbl;S+Z|j z%UaV!h|X6s|M>nGE98ode?l)Y3m#;JKZ#i1NIFE)Q^gFQmAM-deRPyj94d|7E2&>r z_toO0w~80}aTA+)YaSQ5*QEJl4TM-1G5zxe;{SiWpFUu@xRLv0IJODtgJRX+ZKjB6 zGAQ3HU_M72ZJr3RN+{1+MRxaz1>8M=`6dyrN@(sD9w={YKYSWIack%#)RE)y@&CEF)WDp>|?c z&x%%7h$h|;KVeFs5f#XGse7lmqt!B{AGw~b{A20nx%tKoIkcg|1^*lf`+uP)ANPw7 zm>^T)fK+xRf0E>nNH3j%)Wo^FC}NA~EYBfivdolsq~Thjd{`o%f1gWjEx3&IhlN`| zn4V?iJkH)%uVdX%>>@tWW#QQ=UT^Rvg!pAy>LJP;DQ5NdWrY7j#@jfVOkWq_u7gSe z7YjH|RQ;o9@o0q2ueq7&ONC7TF8&~jNYFACiMRcBzj*Z?(%6Idl2QMYn3jstK9dI4 z$%OgRX7djVWGtF&$-KQMm!k4rgqJ+c^fd|8`pQUOEJEzNnDA}4k>{%-^hhzlD~0DB zYsLN_+d`tu%b9i)MNN`s99dw-2x*24&<@eZoPAs^S8QX%kS;-0lNjT^%V;+);t9)m z{C2K;Z)3du##WgNA3RPWN@Repl~{5J=2vV$RuguF2&&dnMNKlxzmqXjvaoK%?C)rl zFQJpEU&VCoK)RYevdnDjPodv_fN9sOo-MSD$7Da$rI?V4^U2eZ#kxeo(WmDSvR?*q zT{CE6MsJDQGDKy#?0BqhI`Td#osH659I>QHDfZY1AL#NvZmYV|9nYysMNhIpr8GYZe;aq;#)Ws+7{>8`(l3ZXr;Zw@{jEoPf*L zEIk)|nLJ0Hs&N-cX~C&6B4-;HO7ZP0kJa6xX5*>~ zN!MR=tZo-d4N|%nrCZcI!;w;*;N}?{q_jwIi;ay^`lygiEH*BcQm6x4SZZuB)`RC= zOQ^M_##X`kwjPVsHKBN=APY}8hSD-)yC5%_cdTxUvBJ1kN_TiAS4wNn(zqQ`y3s4$ zBBiHLYC^r8Qu^Y0mcqtvV?C_oDs=F$vC6nZO3z(#tS-jlokDsP#TV5o<1Q)PRe!AR z166O_C#6RpC2ozeR|I{12iaU~JSjLIdiaE~&Ui{nm!HN`gK+>G8o0rt;Jsh5;C8!t+!Y#?!$8o!a!MH5-N9DnkaY`$B@(pKXY zv4q8oXbIOCuL|x4;o^Fw8B)5*cwKPU?P0yx%{UAqn|6~~yv2A+N`bB{-D>Cw?-^D6%CJSj)@I97L( z`5yjEJ4V%Esr()9 zkEe7iP`4bZ8Yx`rL7qy~H|7*S?2)z@A0 z=32DxLppcyD(g;QJH3OtK1>Ud@{#&7Z9-a(G=OOg7UqboE(QvGdA%z{bJ@JaC{`wn zB-0vVG*hR3n1!q>#xN~oT~jfM=@bsjGLr15-1ijl`w^hMNE^? z@~DWzy5q~^u}OzfEry6xR(@ZfXqb4DDX!Opj(6~toM}v3aO79W(c&$pi#USsV8K>0 z{e)B@$BIm)i1oWi7*Ov7eQ_avpT_H_R6w zFnt$FqkFzM##9^Y8(>%}K4NOom}FCKp^Sm&1z!~{!;l=crbp3 zBY~(UQzo{|Qu$2yG3`cLj?|oK3^sQQ`5)1OX)ewYyx&j0B9riFSaT+IA;^|Y&_hux zwyYh1gVZ2p08_UBJpSby46-$2qZ-s~2HB3u5owsTlkJ(Bb|Rgf3}kXe8Yb;!C(hzG zcgn(Ec4ZPCL>AeNEhpg|DKa?7?o1nz4jLR~5K~egJpMfdCmF#Q!rKNX*&E%s!ZYlO zonh*i+i!jpeRzACHuQ8X~=f*A=GVZs$1klpajq zBq*xRv?Q0L8*goHaG>BICGhgU1vQ~EM_;bcxSgv%OC0Z5642w9)WG*3&5!*=P+ z^y^$LZJ5*&WfucA_w?mj+HufiZzlUb{g)E;XZrC~MFW`j>okxlMW@%89(j@FVj0I2 z+g8zFrXd>?4KWz%xx!{|{Hg}+jZ#ZybjEwHj>9IolxZn` zWpo@i%Qu#_M!xp*BCW}0o$-2R8xl^uX>ds#B!lK z#M$6zq=HW2k>F}@VNx}8Gq~AUR>RvRsw_PW)tTyZH+dSoZ7jVFzQ$yM$G`C@R8n6< zEgNMmLv0(XYp8F;2@Lgz11uNy4gN+0HhwC;I_)_46VmOrAjg8}2RjCSA|L5^BHAl(1GKDRyAtSgpR!0%f~rm@iwY%T$vJ7gIH;QEGnjRN34 z%Y*@)g90F$3*DxE5Qe)RSl&4RdZQE&y*32Bd9vKoycdT5=E7P1sEA+9quMv)iq$wu zMSQ5m(4TDqBtPj+P2HRo5B71*Mo|2G)Cy=i_k>kIM#4ZWb@PP5C{M&tac6ZNfrV&0 zk_yosrJY^<>i&j-i}wYL2pYIp^csPMaN0$F0$4sDvf0TFw$xgW@>X+g460Ss=mIiI zWqF?m2qaU?IvhlH&^eBzeLTr~9J8Vug+n-88AJ9j$5h!E!|vA<(0crb-2|kpo`4lF z&P>$sPtJ;2C`-dByg!GUae^O7|JMtI8{m`uv50rJk?Suxv(LE!w>Bf!zxVWXu!DEE zFGHK+vG;4@%?d538n3_t*%m^z${VAr;&1Ie?vCT%|J5~U zx?mmEPnE9QK_{G41DjMsxw}CZl&e;6KpWfasWI(fA=l%dQb3*6x!9JTt9PLk+|-V% z4`8^_>SHLoZ}7n%6uP9<#IP34P%G_pP-Sg0hJA%KSU&J8%rY;Q>Uxc{$y@2u1s9ek z6hCY~HD(%i5KhRT54+hx(aNhBKacI*vu)i5T0HF@}`9m#+=k|VefC0wi|mUCF< zvpf?^E$zIO zp-DI}dUEa9#dR7q4vt+M%rfHuh1asAuzpt+BRf0pu$KU|-p zKHN>C*EU>>7uTcB9a`BzA+LR%*k(K~+gQW`vj1~5rH$gjySfpDPw(!K|rXHR|DI_oJqIKz_7(K(6ZnWm8Yj;D2{5U_P&smv9LRfWL5M#Ba2G z+hfh@jHH3N1=kM&nMIv3W^geT=tvyNGhE3$mQHK2=o)xMlA^pLHEdC6Y6m+w#tr-F zd}`SHHCo{_&FYO`Q(M4E%+d~a>?e6^7%f~s2T-fHy+U$g4U+xGkYv{{c@7AniTw%p zeJb|70Oem(8N8nx6l{bmxoc|M!KXDyrp3@f;(lK$1ZAuWft|&N77HItv$!65p}AO8 zbi5~s3+LaOic*UUw}lIr&4s()mx{icyLG(Ay_m`eO^2p*khs@}+TfpkiB3C&Vq+%E zqk6RBo}R}&y$^fZ4yI#+<5c9iu%<4xWy5TWDd=CVO3w+$VIa#qSjOmH@I28N&TZlGG*?YN_)up1=v<{~1JX7jp@ zRO3(ElkCFvi{TaG3oM)wzG<_)z7hUpNgnXkdu_IB_$Q**9BllKH48+0*t?`g%l?b! zZS*&|!HBgBG2^b7ff4)$uRxoTgV&%8z_1&%FhN z*wg{=#fs(K-QcbCcd-!L`1t8IotjtU(Qu=N3RAD!wWp5wY#7Pfo!_d7<3BTnKpzhO zn$sWkpfPchd(n$~(JPVcA9pCg%>F$}wk1;S_p>ZxIo7AjzZwl{l&CSJ*$$$AyZfF8 zof=$f=(+IF`X`DH7>%!CGgVJa~y@A1sq2C3Xch|pc*X$pk>-| zjG3q58e|7*!TEMK4MW=%?HTWj&a@)e*5PF7d5FSW+mQ6zMElyF+-AO<*#gesaT98@ zkQHRpnEl6d{L`l7VZRUM;=`%#;M362G*0bvc#DzGvJ1!fv+RiDLqKqPDGtUzooNdB z`_gh`aG`bL=_(4}!^O%DVnNDGMK%GKM>}hPqPCRwL?m=@Qg2OrOXdHkq{%Rj;ZEfmP9a5Gw^{L!r#<9(8 zl(_%-jT@&H9+9epyMH2@p7bNR)^8^!PUuTcS5G4OB%%n9kn48QNdB$`Wl!s-?fUrd z80=~6ZzJ5;l!)!*x0&R}{b@br4Y&r$bF=Um>Y!)3rHo z(x523opS6kx(>+w54t;! zCrx&6&ga)QI3xopEHD+e4KGCG2hXTD?e$3618-w_jpW@aUN!9Cn^pC3Gk2gZ#Y7#V z&3;EMhXzG|-U0kEfU=~aR4KpU@UhseMglgoOr1*FetbN<+}XZ|fYbBtVi(Y9jDW8) z95LoImafYwT%Tocl(CC{kEOJI+0S9N>AGAaqcV2%9y+pv`xB|B<9OOEi>CTLnMnKK zw+C{)3#qt&uyo~N>$ZVnMsKGP{(Lyu^zKfwJIkV@6dvVIay`p(jyb{dagM)+$>w^~ zSpBp&)&A5(Dq|5#xs}3q`J`-fI)yza9mN;pUB~PNyu)(qQHtL&k3vy#nPt$Mq-!=1_bcm(4HyYX|dfOP!92y$-o3FF8^CZkOFC?c7K1}DC5ur-pF3<6iPjj z{-Bl4cDHdOUv(kN32ro2n&7!2HScAtv8U-9EYKm`h~nDLtKJtg5^;f|oi5&}W%nbu z&?B_WGddb};)EZsSmmM%ZkIxrsyM|+Ufm=AHs%))SFJ&ymV^a*HskrV9Z1mj(& zU`*71O&}n5Fco(*OG-=io{jacV_bmoG)0x9_%|^=(~|Kb{^)#K0oC;)>L7f`=34jl zXmkoTql}*G7liXNljNuoYS!++`1x`-$|07+oY|)s9%ne!v+{&Bw!_7q0~fDOyolMH zPJ)x$xD5-+9jkV#}2m3|i!>~;7F~ z<6VEl@Q<$B>kF7#jZU8LR-@&pqdUn;*V7xk7|t&|QyVL9<`7(Moowv2{L1-_T`r~W8^cOiMj zZ8*x_)u_Lf{b4@(wHZgdCLA{*RHZ2z)~Sw>dMM9C!{^Zg8a^xMk)$vgP3L-7YAI$m z#+-r$Si~=TF2!sLwxpvh%cbMOYw@%)-sfY-UwD9yUECT^*JBqq#%qPKi}#Npc@a<6 z+CwqM@c2(hNAA3zschJn)v7%s9?Ht> zt46@^#?-HIDDgs4CWWmmqtcI}{YEQw!G}&1AC-O_eX2s>9vZ`ELush0m~ze6-_WNn zUN47K@8BiWWN|OZgcSdRNSCb0JUjC=X0wW^6n^SQy2JGV|0RJ>i*u;EqtleAiFmnw zXnmy{iDZBro%-Of)-)sh%vcJe@tx*IaBV=QsxWxk`4Y`hgxOyXF~ZW9bgP(>%-2_H zjz+ku)5@4+VT8thoV|G$e(Pq0nL2sR{U*eu!N-iL<}WiVLQL?vt{ieWS>V?e{;J$# zci%?cSe+W~e}K)H(@^OgCjJp(4>5Q%BGuk;=6^!Wkj120#sU1Ak**XPcm+5)Ko^~U zuO4V}0PS6TuVH0<9iZqXy2exra?J`feWa7y(pe@)h-*RVlHd*V3X>CzW>T%@4AT{1 zJDEeBVKGxF^gWbsa)v94%!ej7!f#O;YOhpf?+PsyVM6CnSLni|65d3&N%FmJ_uFO0=+!l=2YuKUr>6K?4AVCs){)gh!K>DGZ? zn}(rYuz;x)TvG)2KoH+6nFK-A%k6#OW1ZaU61n2{RG5D$IO4$Yfx7gy6%q{$AIM`; zJ?aCOm@>T=CWpEDK=UrjvOM+!bkkO+3mz>)eestvq*Li?!5k))t`>Z&bl5RnLTkZ& zA`Mc_CnAFpAF)zR!&=a%o63Tktrlc3B|-hQL}Pq93dRm1ww`z4z25>+U|`o50oe$wfWPLq-TP^6g$Y(I$^nnNgyRP&hOjqoPYx{Bb} zwTWn2sFQij?9c|#DU>aFwe*9*Or3sD@r+{6#ru0a*bPjg7%If+z_x@Y|avFf>Z(CQbB2f*2w-W|~6X zUW#a;X$q~Fl3>Ehw9uyD7fU)d5}HB;Qxc5QaO>0*vUO~L-*7dBk94Z-M081~H_YVp zDwAsbrtpU%Y~a2&~(N;z1b8~2OC}1iDO4l4F3{(Y0pPEw(aDT1J%_~ro zDG6WvoE!QIgxTm?!X!oL^xe>wFo#JwZ3*VM7fzj8!2u>!v;a8z5?xk=UiO4)0r0(^ zaQ4dmp#kvJ#vHo9Q=MPtl_8lGXU!H_Zv(?KTON+nv)RBC=JsIy%#yvwAV27_@lS>kwJ zjaSNG0~4(X6!A_wu1;Z_?uJI<#X3IzCBc;me}qQE5WJ;=-1NprTlIoDOi3{7^;}0@Nl0h% z@Ag+{Z+MS&YLvVRXY_QWdli~bBQHttil=}+;F_q2GVB9cOsWn0LLL$y|0rQ!D7I1d zgO8a?fpq=gnT@VLJ{ELH^@@y;@}38avBFKXI1G2Lk^SD4TkG;s&qr(F%usDsD?w} z`8-l4L5G8;u%R$&ewFD6{2e@zvK#?>Y;+^xu#IjcxGbnjHwwI&RJu_xz(zM3Mk*bC z|Bcy?hV6^05{`iaCY5ju?BGGF>N^$+nUroU)LmSaZX7gcQo3=l-bObba%^(Eh0nli6L8k3p_6CiB~n?goQ=dcNIBU#bhmL6dfVdzptQ(A6xpA3g}8qpGO z)qr|XtD{Ly@FB|Y*Dg3PYkn$d*s^L`dSjGu?TucSOm#D2GZndef z_^m3-1i*I!;6LRh0kU4AE*YdNH5aEe3QK??I@KMZHNqc9jATp#nj{HuQz>~BNQ5rS ztDGi61XBq-$i=fl_(i9?xvj$z!LXvrayoduL;){R7p8Ua_&}f*HXWwvXjdE@HWS{l zF`WgaOi6gGiVB+r7nw?7Anpoh!E>bpufs$?W>#fC3x0cv8mwj=dg+5+S}B6?=tm}P z7Ia}O1@{4w-m{_h8Zs?~ez*qCfnH3iN$0>wCMx&9usKlhf<}emB*>z4O1B7Nm{QEe z{#KC$({%a*w|YsifvFT`u9zH_q=9KIB`kr(8Hr&_@YW$BmEjVo&6EVSO^sj)w9@Ho zi$LnQjx1Bm%l)ik2@GXYPM5$+Cgn33wlOK6$?&e8Zc)>drex60>A2i)L0B^Up_4AxM7cWkaUv?#X$ihbEd|Wl2FfA{ zzH}uVs#CRUM1?w?Wb)2tOS7@DRir={ovzF*w@-mICN*JG;2oW!dy|)|I#F|{z~GJK zrG#61DNNj`AO9w0ycxC>l31zglnUugs!pk}OQ!+WwPC4nN2flxMST-)ZX&0+2|t<` z`X+4Htg>j}y*Vrmg0>JP!M=rgVap(9tD^qCd&Ay>kGAshPi2?^cUhTf9^K<$SOz?1 zDusQATKi@|t8GtBhnN{N%?tFSB>sVAhf_AKz*PHvJQI`3N8IvC1S3ZEA(Y_c9cXHs4^z?GM% z``eU`bgnfvz#v7C{`T##Y&b=vVcCAiy~sPzKd;jC@342^z9OhGpb_kcq3@6`2}*HN z?gzgeiu$du5xyS^bQ-ep&wzulU?=I+X~rQ~!K8|I2;OB{2X@7c!w>WkJVw>}5GLwG+qn}klSvi(1mx?)$G;PBk&%|!_TeYs#!CtN z?^90AufAF91QarrV8;mj0ou?a(v`r$>^rqShXN+tLp19Weil*=kS+HG~`?QiZt+ z;W|-au0j-(%J4c&P-LDOIxze?+-9O2w9$6g;U^t$jw!8m9iA)V46nnD_bH1MaK5DHIM`TR|T=Zwnf?_fGp<@9%Oc|pnHze8iDQXn^f!n;g(RQ4 z@Hb@W6!>~UIEcMEB`rG=ZV;z*D#Q$pV#0Y!mjv%IU13UvOH2zcC|&oJC&P`R=4F*b z*R-qQCeh_GAOBQu+l#cXNSO)mZoL<76*=X~^p`dB{GG&Mo&H)e#@|^q{+e{ENnJ#L zCe_?7;sO(0YMJNnBEDf#r)sX^&I@`L?kYNd^Wyktj=-M^exov^KCCXXboyyey@={! zao%#M(E>J*+aJffC3!=wsRM_gsX3tRD18rBho*T{=1wx2kH zg!Nx%&d;A8;U`L8Ql4eXG>@E~gt}jtO3fd)Y6O1bw-=V{8v2P=*U4!n9IhMY>MxAn z65+8CPh$PWRi<@Nv(cLo{=)p7vYaz;b3{{-LxlH#!Gf*tL^Kl~-;**49{cQ#XfAFr zWg>kP(MDXosS@6(`9(xWQF4okFUEEjKiwu$b?Pke*QZ3dl717>S-3Kln)l$LiE)`l742+Bu)BaX;a`f=X zAz~_iL036QhvD}91!?$GTW>*F3Ja%w-*gx@KT#5dfiBVvr$>5j9L*nLDa&l%+!TvH}q&WRSeRJwlLZ>ag{L% z9Jb^{P7_D%$W--jqBy}sYgvdfQJiB^jh`q&@XKZ@%(_uKBNN3AJSn3}(Bd^+e9EM} zOc$44qRn`b8`GI(!rsW~n)sNp1eR<*5IJ3x;0Xme9X0A`~{LB-oD`W{CNC1+Oy0RU(B+WwA;u*NL)NB~~foELMpuohXY; zakY9?4q2ijb`RwsYM7$di)mhX{hyF(m@S;Wt1{doyk4SaFHz77%4@Mj%wbY9eXB@) ziLzf<3fL+RD8ePlDQc_u*c*TUPL2Oror%V+q9a}ls;uue5&RM@V4@AWd(<|O!K5x( zY!mjlW>%)l5w0&$J0?o!6O|)Em`Y(#vy&}y#8xECUk#z{VkawAEw+pIU!u>MDlLCd zgih;3Z5NMpidyZDWW<{)sY(-TPc&{9cywl(hxE2stP_35mM1O|(fJ>Jf1f9U@#`f@ zNZ(!MiD67C!#puwkvS#)Bqp4pQ}M9CCV671PD>{_y^<$3GpX;4^TfwGwch_cVu!e> zEcv?HPH~k9kALKJr?{(>W^%eyJl7M_+3!vxYr*xtNXOZZPva*|s zM951tOA&hMhhCCj(q%BwLKBC&LMFA&6p0h{l}|qY?HA`1^6Alj(We0^OZg0FzgWPe zPCDKfHT{*2*17k^SteDd_r(=O?B#tis9}|t_eBbm^74uB!w1e&4&ya+^NIM1QMvg< z+)!k0*>*(KC*oISYTmb~S))(z8%Rn>t30JEW>QCvPefxp^C71@52YDP#2}^;STtr_ z)Cu9(OzEb!F1J4^QkXKKZ)+_f>ZEwWsIo5;vN@Tmc~B<0FqK+j20m$6Ci*a?m`~Pf z1Z83eQ>uB*29Ne-VlUHeORV>IzGdQ&PEMOi_n}TZaX(ciO7(O*HhE~M{DQI65|&L) zFX>9UL!nHJ!YiHF_vVkM&5kM)Q<+LFpRm(eOiAWfr;ufmuA9i&uh7#yYe~9n-Le-K zyM(F4^4_LKpp}WQbY-)SWcsa6&8HJR)M>E~k>wRCOp>_}cfn=CgQ>*w{bV99rd0Fs zgoRkpI=bbTLrB+Cr?dNrX6m$tNE7ceR#^5&S+Qw$GgWrQ6(-fcWnx@Q)rYTRp-ziT zowiO)GoBWQb)sQ;Mik=B+%!t)2!BTO!(R~5xPZ(6r!!(KQ!0$p&e~Y%2aT# zl^pfCC~8NP0?#)sZ1ROT!;}imVm#rj2ead-}!&C}2HsHO1 z0{7FL;ng8T{dM|c6H$gvmo^jSGNr=Ac%oCfu3ZXIgKo;pK_F_;ZGE3tq@8x$OcbK) z-gP9Ju2WZ+Mo9B?qVLZyiX}SjbON*AV@s6Wt|sQP_3ohOvx1uqx`JaAGR8ypN4`QPkGyGp3e0B{2mtrJ6Ue z&uKcD_frlh72)APqxwE(ECm`}7e(_R%1~|RE{einMKsnfikdyRFg&_03A!zqEU5=C ziIE{hsc^qxBe*0s==5{Lby1f@TA0#(h)dy@!XumrcOp}96Y!-t%vd5kwnrJi6dfZ- zSt9&1bECc#eVCGE5(C}Qymm(`l(atFXE{k7ch}2NOjNhUX-4=9@$7SKI z6WsuESu|!U6+x{&3e~<6X*!l-uU!#`b^2&j2-0(%-ou0V6+!POrWzjbePk*ZXI@qG z=iY*-uf@$iimdyJqppgazKTxxl(o4o&gk?zj?r(02VOv0C&Kh|vkp#9DnPa&&qN>3i`=r|%t&t!|2l*HpT`cq(v9m-G7RR5y}lU)SqI4PSj9;3cA05#>HA(v;P!FM=DEd;6KH4ou~~T zizcI3$8GUMbYdzo)9Ud=L@*@*G@599BHE6&*#tioT@fjZXE?l`ifE=%^UOWT;+g2L z2ueC#jCv+6>6XhgTx?mEQP&##*>?q$&P-GoA(dZ->Ph-+x*Mx~iXL%%%P%XMH@-mZZC>ME$ zNnN3Fk>=@SnQHzJuU5IpRyut)ZnT|?%+u+6Chr;S(>$*6r`=rSNJT&=)Gl(v8>A}% zjV|rD%B;DBRMKkEuJV`pL@AIwq-JzAIc?3W{>*3}?IjDCN+Dr*#|}R7 z4inz+k`W$VN9O2r>-~OsIZ%cyCNJt*j=wBiqVijz#g2^jm-kZ?y5$7`9Y5oQr`9Xw@`;U5=Z700>X@WjtE1b= zAf{BPKwW#;f0NQh4atsfFF)3)6As-D@}^E7y>U<3)yyEnRmidVBz4`p6O{m2QAM$D}GaK$bHlgNLjZGeBw;IzEx-LI%p8 zb(#$4LSB>qu}L^c+PzCzBtxRZxsXA!I+Jo5C+q0C2(x!goNQ^M8!S8Ox<9SnF@t4< zPQLcuF+=1a?S-ichRT^t6=F~)0mEdmPR61}NFV1@_DPWLNV;oG6_(hYfhK$=qasm) zT{%qN*LCUn9grUBx`kTpm|?Q#F7i?#N|Rzx7rl$;DAmG*I9^v$_QT}_ohbX^@<&CM zzu#>XGhF_v>nOwF@`WvYU^8su73Fv8+sn zpDi6R;bfi4W%rm7a;8qZ4c%i#$^|-Q7`w-ek||8e%V@b=*VQ+7j2SI+Y;m%Aq*ACrQ73 zs!qvn0w&AxOv-YyoTlsQI+M-=PxLBRkIAwwQ!@Cwk}mCq&V-c5q}pPNys1bN)EHA_ z$^mktM)wq%%T&RGZHmlS#4R&L7V0``nJMzHuA{*=MLyGsT4stg6jv2(igaX3hGIK` zx@Ec!F9Mkm^B7gxrb>^4l(2$}HdSW5S5>sBvPh?vE_nBv{DMgpbgI0phzmMZUek3{ z(5do{uA_oZmCX*T97;7T=~UT0Ao(88T5< zKEfmQ47q_x6=tT)v$32h_vn^;OiN;B%7ZqRZ^+{|mT$<f``G=}WsVip7!jFj5kew}0GgVj;-(3|mTV7Pe9Wz^g zt?Q^`X3Lwp?w!T!VrFZy(Z|Xu^~`M9l1a72Y}t`X)qb`Nc}drcDH*oPT+DEQjc$${ zsq6YW?}?csx9il&b))-SS*X);hdnX#r1qPR8{9U!&zItORqYqZnoO$p3uRrMsP+rx z-=A=?Enn{}j#((}KUI~W#cQE-R>X_fLg}sRtc%}A%ON^Zbr;Gp8l$T3LOGc!8P?fT z7Fjw)I*`*3baKLFXQ6!hBAp4zvqWW2GiH(W)`<$bNG6`BD(E6PR}pv2BDwg4rj*n( zi)5Ovq>?U@r*)!|E|M3S)VNqAf6{f7p(cOPi89n=>r+)3YO<3e&QO!Vx{mVGWXvf( z{#6LdP?IZlQ_4`2>zP!Bnk?3Jl;L9eNGHm0u`K?KGE@U`u{_UI!5y<$mMh}y7t0&E zjeE*@j7FzgYIxb(DRQ?4uK9pCoFh8CdtOS zjxtP=t#ln#H%V$lc>LoGljNJMRAW6!u3=K+B1vv$N`@#rjwQ)r8{HClOxHDb2=ZAX zpW5h>rSWqrS~6U>3-U>pDNHJd6uF8?KmMi2Y~6IDzl?sIgrRQ_tC zOO?-b-Ou*MR;jY?7nGsO;!W9{NqKowwqr_$TW}`kO&O#tHNKT0O>VVGm?n4GButYB z^n@w$VoaL+K&P>mt1-*ur#9)*GFzhxybN+OuD@BLic0LTk^4ry=fwm&=+uHO5P9D`e9bmL^ywBbd|*ktx%3qH&QaZ(bmuYFK81UTb8?3!MqF1tK8t(Om(Dl9HLLyYU?6GdFK^%AbBVpGx9OIJlAQ1k4yUXIX-ind<9 z&ZLUAUQT05hGST?^-}wtQ8noXi4O{YF%LFKD^oHwHl7RFAnWUN%oOC4EnC}IZj_xX zEpZXrC@0zIHp!W~uA6<3&nEe?PFA$sEbnNHD*G++kxjxa@;|yMWw=E;eOpzut+F~3 z77g8Om0?WE%Qo59#&Vk+qFbKF-zaXA(`|G)az0*v#`@x#WNp|hN4}+$=8`ex_PH`k zr%Pk5AzgTputl%!@}?pP93$Xu>3D;S27NX!Z1T43uhXCX@Y`%Tp+f17Y$2NT9g!+% zo}Bre&G}!RT+GU3a4@&+l_zg8shR$cgzqV#8o@i{1f6Ki?2u`9Nv9T?9r7KWXoJ2( ze!`?S=sV*@#J%dxvbpqz2Ru*@X!& zD2UFzcF1s@IvUP}?3AzSbQ?#|yK?}b(1#*K<{qQ2i9+{)lV3#1Dy>hosZP0R`EMrowRw!>Wsa7kJe)m+BsMU((w4aDH z)oev_IiqT*BDq!(H&l__tm|m170EnZN9|N3f6$5AsYw3Jq*|s(K4waWp}4ayk`X^s zhN@^qatu?2#@9Ob%Lxkklxx47@(Y)g&vN$5HxzMU_R9sjjtaA1rsz64%h@l#)rktT zU;eh>3@z->g&dGiY;?s^{zmDN;dKrBzF5{_R0$8t#=3Ga>gZLr^zf&D z$`#!x=3s+=%9dgH^nbY38}OAs&9;!XPWV41#Y>3WOYxd5M7JTuC#xv&S(Nx&o5@x3 zmrT-O zRX|`}3V%3_WPQA2zEY}~IQ)6c%Q3g(CB`(=C28MqB+srcD&986HjMMX%G5UePj?Tv z9&X&=``eN0&)*{ZFELC{@Fl5iI%H9}?MjI@4eMvvDSM$Ag6bn+MINEa*bj?;h7r4Y7OeTwNt3alcYLKA(-{793(#MW^tG zok$v9r9!0VQus`xs&JPWigCf;wy18E@Vh@2RMSnVU-hW}F{XPhO8jq`JDB12+gKp#To}{)h27zs8_}HuyK`iBPWb3s@^*ASwWad52h-x?fxJml+f;Uq z3O9`Bvfsg;pvgnBz^l>}??m53eV?Ip2K9OT-@>IvLJ==Gs{j69 z-Cc?%541qpxW@4R?nnC{%JmONs=sfqrEDS!>3wQ_7E)#*gD57QN3~i5RLreD|I}7% zOO{U}s^Zy3(_N@~+q!GErD_3DUGpanC<)=ysgbED_&c0`NY(2q{^f#36jE9$v;lsK zq_h{Ok<=*5N}w7@eBLY>jpRwC3PkY+e6|)@+7|KOTIE4m+J@C|+qsAQ)SpM=V3d@bVqfnTmugA3fOZZ z*$=|`ZQu!M#0S1s+5C(XPvS%0NK4hI)TXv38=R;bs#T3?VKK6)2~u0rwAqC77@w+z zze~jnlMBcZ*%){YFyb0OQ<2sH0mo<3bPD`em^@2RhuSqoWSL~9nCXt>$H@ivfB39W zS86(?R^!~Z#onW@DGpGV14QC}-XED$pl*P_Fc;j()VKlF*)yke(W@$(3qqkjj0TYPx^N9Ov=8np4?^RgEdefKRL? zpUT7kwgPJZT$%s31plypbTM}jWodwE>7-pejH*!?Rxu`xsRjItE8HQr`u5%XXN7gk55dDpdR`Z%T9yq{}Lw4X1%H`)lOG+q6({BVd(_2R9!%w zQrQJB&ar6xtDaL^=99yzW-3gjt~@&Y9YjlS@mOjnrIo?t&UVxd|5I^+)7XELIp9lDP1wRve+!N@8p9lD9kDm(s+=8cA_NN&46wCe;;)wCLZ9^l6rKNa}7g)cL$kDmwlsg0is{M-T;5rv-z z_zA;L1%7VfDIq1M$dRe~!sE1~1tOxhU~TuqgMzP}YuR?OhYa zPv)4J9J7GKDIAWs3tsXNj-YhKM;MdOERGMhr&LGmwe$FUiA-~)Yga)T_=-%falWdz zC=IAD@}bR|X5t8*7`8%5zqLAo=W2aKl6`K%08tL~#KH5Buy&-_jHwbu9?-qMc`$0& zn;7$O`Em>=Z!p1T%zlk1;G*Q=i>pvk0CeFnR+Qp%(c_Htawdz#|HwX321ELOEZi&; zH=PhZmM3H$uuI{By5*7SChOvWX>qfRD`Mq90-DBm9qa zlDWdQeu(rD3Eg_5oYQTPJc?Rvs*JRF4xcGY5T;_XU4u8vSj(y1J7t_Da?)9pb6cF1 zWze=Z{>%i1;15`01>L6|AWr9eDMwk}?{rlzlVityFXJu0r$3Ms|EoO1-Xbmjg+{|A z=-aIkxC#83n;}~?#%I!Bg7DndkS#vkjxTPgCuW8;HpGgFV<#Fc#?v{|3|BGneG!O5 zY^@>RaxA`!F;>ux;<18m9xt*uPwHblZkgS1v@y=KJbt3_Ioc!UZ2%U1m8w zVvez%nATzurlKD*J?HMo7W7iIY+=CnMr4b-^YF!O*`f{0J9#(T{C5M|&roM3|b{=DUze)o(<9NSNgjyT#|<5Z&EibUG3Mj z_MX+#CD<;~>d+y|E>L!yX%(^79onQp2*LP>k~r%-^C#GivX0A6w2KqYljdW*L(eq3 zcx!LZ6&U_`cd~ebJ-x=xM=t4)i;U&@)DP|I$s4|nAlS5K$_cx<*1);vG3Mb2T>E5= z2Kag&@kzZXW1JXU^BShwSo24_A`#u@7rQdM9r!wzBlvJv+_RKHn}v?{N!FiMjka56 z{cK@1`(WAi7(N4A7JB*EXItM}gl|8P+M=5FnWhIv{ZLCy7b^#NHnq>Swt)`z`PO!^ zT~OO>PON>b2*j7xoVRSs#a6MVO&e)nW;r`zEJ~Obk21wfVY>sJy`4Jur(pr?Bj6v za9?vxjJYpzrSFk3W)G2_NH#P({CIXWM=h;1R|XfNmX zDU-=dr&waqeiqvFdhbn3e?bdywj7A>A*AK5z%o`ZkhZJSdCO!S{@y68u@3k4Hb7}C zY-!Du^x)b|EF6v!mXVgY+_qLB#L;s5nV4#{^$0&RmRe#ehUpoxG|N|8M>#a;wZR(i z&~w=qYdI`0yoMby5j&z>#^JMx9$LTH6KERc@I+g*!CEdy$6dpLa|Yj%LWw`KKD5$L zr0NOx8Rs!G=cCu`=Q^yf_0+n|;r&k1A=BY>j-x}i!g_}%{6%JYNSsjJrxHSh%^>_r(8rQ%vPJY*Zg+1=|YKP*gm(e}YBxFYImW~$3 zKZ4q6juwkogPx9Am_0rdUXEKe&(Y2C)m56~W-d@34x%1Vz=Nm^7SnGXVLSdX$j33S zSFU3cw!{v{C)hQ6&;t!CH^=|f(i{aY;Zx;9JQQ7U40OEO`y0Grv&*K(j>78G&($f; zF?dOJr&z~&zV)26Y=@*m)r^guvK>CdW;w!7__jFiPHSnUqgjkopn)DZYq132L3xzp zpu)3q0S~A^%tk;k%Q6_Ze3?_c<8MP&IK>(2<9ZrrcyH8t43~y)c8W973ofYpa?xho z^1V(+xq6YBWzxQrPUV&>0au(#c*30Fx}M?b5on<2<;EFe<7+x!5?QsV27lELcP=xG z$r~Un7N=wVoP#a1It_C6ah%m@m~*1TtWN!$M;Wwcfu~K#-8>gN(>Pn|EUelGGcug#I*txm?R=HH;1W-{o80X8xhTu9exIY3ns*sC-4*9V zZ17vokJvsFwZA!M8qzyu88Z!T_-?dJL$`R6*^Nnt;wugx@o0FCKHXi6GC#kOi=(W0 z5RaL%tJbZv%Of#ySP&}syJT+6Y{#b~(p`!S?Ta#9vK=3^zlLkpz1VX5=RB&j9Uo4z@pH?5>$N5rKaQs2Qz35<<_h{r*LI_=xgWt2#=O7uI1J(7*k>OsbAf- z!rH#5p=+>ZMklSKtB>Q1PTgJoIQwizI&4%}_Z5Y?w&fXr91GMJ!&Lj@hVSse(^k>~ z)mG9WxUHl;-Ejlmnc78C2PI0=lqIf-GT=y>YpiAK+ik5OY#G9-G7a?Ot5^pY?6?>z zu4e4dsY_rbGIjk=6!vu;pQcy zYqdm&8J$9_(WY%~H8;m^*J+Nl2gDWAX+q*#)htd^qjyw$Vy?eue>K{)33#sYUe?Vi zIq`#Pw60yQmc>0PoIV|hhhV2_eH*wxF}K>&!QICxw61hmCf{Bd>|W2Q_T*@HVYT#& za}RL3l0U+|iPQcCW8E#5hs!s*2Rh|AZbP}Db)I`Y9Gv=j8|oVQ{TuD?oSNu`tI_0VxU_qILb0l(#D~HWiiX6ET8jI zgZJ^^0&)fiY$KOTyntMiU2*+*&g;h+9>N7|bCqpwvdvAlxysr{yae56?IYG|k63-5 z)y16nIjfBZTA_>v&VaQ?S?g$^>^)fP!CFTHEnL}7Kl|V}THLT9@}oVIs!!(dWa-m9 z5l`!AwAVE70)-x0gCD1AuHn?0D&w5Gb{lEmmepNY-G$ZhMp{^Moze$9s~*oT@|`~H zPbAX6&*l47FFY z271vP8RFHSC-YqPRwT4_2~)g;pp%3m6=me}T;ng9Grf)&>9=Xeoo?sP#c+CFkyjb` zA3o$Y)Ii&^v0U^>%g{p?y&^3&Ha*4o-I0#olR4gEX*|;3yUgjSe=C&chV4-{MR}Zy zc!cvhVszK==Wb;VG5CamIOC@y2Z%(|YTOweLqhZl>YWE^9sk&Tfmo^(k_=_R2$_CtRB+MtWFj zu=9@EXQi7-3+wBf!O4moZq^;=TO_{1m$LadZ+|b*=e*PT?kjyQdz7IwF zdU$^C{PQ+ZBNC_FE$4d5sfEVGW-J7*78v7NW3z#dfldCu#?Azwsxtrk&spxqayLOi z_Dw+cO}Xs2c5_KoQgQ=<5;sJ#w6x3RfAIrltA#a~IZjRM^!(MpFzYa9}9##Z6M z=x$AczNX0P)2X}Na@0p~pIXu3Q>6dF=cijzyYo*P_e!Gr;N!nZ8l>pJ#W3gjO}T|$fC^Y%Q~6+1@x>D)%(z3F`VJkhT}=5LR#P*rW7?stqT z=ol4#g^F)pTA||ohedRfZ~b|T@v5ro&2qh4qHnpFQO z#+9#Xdm85|yrj2Dbp|i&?GraYanY|!Up}oD0r5*JyNd6cnJb312l?lUC&Me$x#ESA zD7a4t&WAhe@JP5zN~8Sy#Dzh*{=NE2<2e6r{hM3w^M4D;t*{Aiq1S5^&QSeX#Ico& z{Vn1bc+2G(s=rQM?yJi*oofDSQ;TTBR&Ey29qVLy!iU3a{q0m`@HM{?(WsVf_3zVX z4DZ$yxvbIt)4yL>x%ewCU$WJ|Uw{74_Y@`GOsTJ{x$2Xr^Nw~8u=NY4CWN!MV8a`Q zR^j+?|A1Cu(eqdfa-A2R9nhe9p?GXSf%{L<%W&P#FTZoeY^)9BxH2 z*})?6Vl)|CV*e3f5wBx{Rp#>kkf+oIdYA0)AiL@w>vOM;;lSL;_G4F z29MB}0?$$1_p9uWy&D*0m|6FJ;6;?{D0YR)wO_SkU$^F*#0U4!sdd~ST6MN_ht)w? zqsEo`EmDw8SNZew!wIds-v9>yj{hwX4+K_yqvOKHL~4X)2`aFluJH% zX}{nm^G?Qt=t~`1C^4FNfNF^?P@AW4sLMGtxgZN7;>w} z2JfO)5Gj51v~3m+_z1m=%3wBmo=u)R(JYq*C%Au$>E$jIzKZp#d>X@~UKQVvw1o0k zAoJ}=`&FE|hNwq&1m_y+9@`P@LD|UDEzUX-Y(7wbkqIuZd270L?{4u6Eupfhr0lK1oM3Wj4V9~{ zlJXiU)$A({wTi*Z7lI|F%R>kBN8_&g)X2Q-}auue9SFI=m>n2|Q5mrQSfXh&IorXNt* zf`%>+t3i5ItU%^lv|4bhKwyU`2ZtzGT(T*wOEnY=kX@?95A1;s?@)8qe$Ny_Qu#nf zSgyML>3718!PippEqTP&@51tQB?p9IdAiJS&tbU;A#qq2BAx)&Jg`ZwH}IWQt!nE3 z&&Yf>SD?;c{>-pWmvgUe))c|RmSGJB&-(4dnhftX?|}Q_yzSr$NE!^g>$VSTF+9J1 z?=W<@)vv)_S$h%W{Xw5t7j$`8k$O_;wPAL3PtzB}8q}ZJ|2?cpy>~BmUsT6q2d*YH zZ%r)*&pg}3VMY4H@WJ8r>Q}Y~hqtKbTf$k9zGe8}@H~O<71oM^$_%$+E;|KeOM*RG z3@&*U;d|9J_dgmQDISMTr^_*4=TfB&?hoPKtA2CKrtouAq36hY_Np%_o5Cw_>9QMs ze|Yxg@OEUZ%@%&~>n-yc>Rn+(r7&Xo3*=aE6>R<{NofF|vh8R*Z7|2Fj26Wtwhv0iS3HNsqi2d4qW(pN297}cQ8o4XPW$5_YL@@(+H zD?-rlA{8`zpOQ{>%>IrjenaVWRHypX{H~}g8t6Edl<^NTg~=Y zqY5_7x1qMwM`i~_53qx?hehX#Rf!d9p0oVuCn;whXthg49eMUu@rLScd}sW=Xp`

xw{w+G!sH?dW&1e3%qWi=p_5Lwd&)69jZes<;&A4{))*r_^!;9QQDyGKhB$G#le@5@V$V6+??pw z@LO1A8orQkLye$F^Ms%+4os@TtnRUSLfjS=vupAj2E~S|c)xAeY#A8>_rf`g28XJ6 zC*3MkGz^c8rm{&^Jspx8+s=A(Cc*E4(bHmE1+SEX*bF*5hR%*rJuqrT>=+8IUc+_r zgf~X7j_tA;ZtQ#(2Rw~khQF?THnz*~CL~Ritah32D%qlOw&`tX-z_BX7pidmX3~tn zt4d9p0nC?7n)B%MO`2m{K8T%&h;c_i#fS9)>Z&V@{0-!*jrXB%s4((P4=aq^B=ZE@ zzNP$*W^u7LuEMwuGu;Z~zJN_~g^}MhtT1|F!r3QB?%+8NS~WNh#);Rk+l|w~KKWR> z795w@t=UV-Y8Ae;CdJhoU7H>aZ!jKvBrEQOW@QZOTT_6$X}y{g2)R%5if=gU*Enzq zR&R{9VSm6T<5S-E#tmp*#GR}z&1vMgUl;iyl) z%eU^LdUSsxwJ#k%{Yv=>|H9xF85Z7va7E74u ztkPeNJ7ILKusx02WBNsHaYe$m>Bl+eor;@I_0(njYx;#aLEGEttr4_C2V+7Z-n_pX zy~3*K>v6s6SX|xpi8F$3$8{S&^O56w)o0_vk;F40xXGd~+;#x@n>)fazE3pN50CFP zzVS+2{A{v`Jl%6U?}=|R8h!7z#q}A>9-I;1ZG3WTb-YQNV%;PU7;P~d;<3)(uqj?J zZM~m&vE_6B5MOT`hun9o6G6L%ZxqLGp&8M;?TUs34exL~=bz*ATpwQ_=VI6J9;ILA z8~^bO+>7x%=~v=gh1+<)e596lbhbSGgqSbm^YpEG`-M)I+Fj0Z>?S06^E3$qn$B4+ zLcP&|*V6ZEB5I-%N~mml)d!|#!p+-)RsU)0fuXG$zAs{*xNO(N1fA(G*h|vn*5@}f zArikWIHO%m`L0y)yX)Sj)TPfQR8lxWHdEgO7hwQ52|o8NlRmlMd6QsALX&GHZc7Bw zdNf`aS+DOByiEZ! zeuAVtXNeMrwHn?`<+I^+_z!2fZ>UQE<1VRV+!giu}6YYD}p&h6M@! zL%Uq8;<%t-k4nm4i!dYXKZ$!)3GG5skm*0TTB@W5W;G3-=$~ZKK3X3S`8|g$;Dkde zW}#nGRI2z@z%80v2boSSQZcLPLfS;=++Oa0oG0Nd@w2 zg`1KhwYL^O4<@wlPO71N6qvdme*rhAU&4K$0z}i9B;XeVA0-u;zWqaYQXWNIV7mAK zt`D`;zO_~?P~>Sp^8N;A6Iy;qT5aNe!)ntKlu({F{WJI@m>ofTMLyPLm@G)|?y7$RV@-3NP z)8CQ;mw(=WDxh1v4sRE4(Y9`Sc;sH2iQld7R&N}; z4yvl@-kJjUUEx*wGX0xg8zAu==j@=GMivRD{@CbWBuqtakSx;wDcdJ5S1c|ZiK!Uh zbG`_dTfHR}*Sw}tb1kX8>g+WxLbv+*aBs~m zn(wxoic*(A^CA)_=-+K0?%l1v7y2lPXxI35(~8te_~N#8PNw<)fIjx+t3LdWrbSiZ z${A^RBjn}OU3YALdl2l|b$>duoG{Iws>bNsFnORxK)Hrpc0eu}15 zdur}hOP_Y@#_g6o;q>@@aN8!dS_as;m%23rZ1et0nr=gG!B>_;Dqc>bIho84 zgc;HbR6iArO6%2D47n#Q$UJ7|^1^9pk>+drW~X`U-@<}rpS)peV_JgwY}3}X zPWJMswKkQ-9OXU4BiGE^rMHV2ycwANi;Na_egU4Hk?lL zpnT++*S$L4uT}W=A@m1k(YHITz+5-HJM9Fm zrni`j=3Go~HD_j7RDI&n_RHz*HuK|$<#?;ia~vd(o`>k=t9V&ckn9t3Gd+%&Z-Si9@K4B_YP~Z~$XEAAW_(VA%@~n4<}S1Ayp)U^ zB>2BMBBjTyZ(_wAMEA(~z} zI|$@@ z5w$M%H)PB-XxgLtOg^Rz%S_~5 z=f~|x-M$C*Wwx6yPVUU?RsB1*JF}Cm$1ldpq=!p3$$Rx15A*T!xkde%1Jaj=F^7

`v>{>2@6Ti9{vJS>A(ktMys@;@lRFum0uZvaGsgG4ry51~ty9 z$trM<&t4^C_VUL+Wz`#B&Ec0|eB;9_^h-8=fq^9%ms?GZ{t1Jcn%>LG6K8tag5SraQ4eWNA5^Kn|o9D)Q+cX23zWTx0mO)>y z_09ICLBdq5St>WZSd$WTKy-JR^hiOG#vFdHWw6k_ z8!U0Z1}<>_0$l9=4Whi^{vF)kyWawDxeExI>D4*>P4h>~V(~=lJK3>p5DULAmie%F zFofL)MzNV-5?gwoEtaL@E0&EWPM{OhSS2L0NK#B(#GZs?1v?Br#!lWh8qeFmlRX;0 z6MrYWnB2v8+#6W)%#*_3Aiqp37P-4aYGm$Hn9O}K`8iH)Bg>z1*`|vUPR*2DqJ(h; z%`T0sdCE?gbm3URN$}RJ%b;a$u^SI!C-&Z7Ixok)kzJe8?9Kz~AodWMo`Tl%pbPbl zEGn;=B+VoVH1e~7rbf0Tuh7KZ#bzF+!)&9V&Cj8|ItFp>B#!prMOWo9NO&c$8T@o= zu_t*T77vaRuFi9S4;DIxaLt`VqJ&F@Cx^TyEGjxVKp|Vbr`!Z1qBz@v&VlmM{+(|r1yi5!U z;`+AH^i>$dgDWO?6}cVcZYK9ma-Sq#CQ8BFb6{{IyKj03xknQViB-fNoPBnBb4VlW zp57C}^;szSBIXbaZS++|Y<7ym8d*?&6JCYt+|Bvi-9hdSa_1B@ zvV}9)EDC{`LoA#{_FqK@&BP93&mB^rh1^@t{6^L~qiX(3$WzCBURhP8jqIBlJr7cH zAEKa%IYhRQCq0l@wUB%f0~c|>Ig7ZY5N_B%Tf(CWBvuidi5>;vp(yZXjAyyHai5p}dx*?wn8X}nA+d_sLu6GH95IJjNUS0@6MKlvPMX9V zVxiMr>kPVx zOza@`5LqJyN30@t5POJh69rAoAr=y=h#kZpBHK)w#2jL>uv2)wZQ3*9+k&ktK}t+a z9GzI5xH<8I#Pf+46J3*XlIA5nmUJZPa*`@}NU~q@jO60v@??AR6UlESUr2UM$xqpx z@@mTElz*qlBeWyJM3l^Y*b0Jd^h(p22&I4PejroA8O%Lw1{;VOrq>JT~_s zp1tY9V{vEk7~FZr@CNfylR#U;czpfi>51UW6Z1iz)dgU8!#r@_5iYsjPy)WOcp+sA36W^DrfObXPA$}-D$Ns@O8amBe*F2 zS+HOS5ALD4-1GGYg}9B_Lfk`q34A)|Ah^hS_!sw)nqzQ><~#kKg8O>I`(St2Sx~)` zhdhql)x(|cZW}~~@=rl+1XsFPc?EoM)HU#xm%jwBH{1YQ4&DRh zg4e<0QReFnYH;j>Zs78<=3m^`ioM{@9pevvm=p^Bi>OHsos6fUTj^lrq~SR6&zbSy zs`Vql1ABA8lI7#Tx8j|7nh19*74?Ni9`Sb-yfDv_yLdWxrwy43o$C$vgJ}nyMLiqt z-2L4B-F)urSowTND0}ExA|Ap)%fTf-i|$CAxp$tu-mn5^uQ#kF+K9E_~q|GZxh#X8r@sV-iM@{bfzug@}=bKb{uyvqtK2%$K7$Mobk&!YrHuR z*{EQzl5KxjewGI`i=R0A3a3JR>|Sme*-N`|_JJ9k?g~G1aF8IP>}FyTqa7HpjyfX-KAVmFO3Eb(pbRQYr$Ul8V7*sTABHJp}HT z%D|VUMc^T633ym42fL&S@T{}~{D-s>ydv2i!Pl44YVd36G4MaqTJU?x2HwVREs!(W z0czx0P$#bkW9512)h9-2sS zuqF!h(qw`|HF2P?CIR%^88my@HfZ*;KSHyY?a+(|cR{n4?SW=5dr@Nr_d)YB)&b4W*qhM&jJ>7F1K)w> zXY5^Qe#TB~rh&FIP`%17K=ms71gclrMW|k7e~0Q-)&te6>>p6Q%C1238oLI~YwS8S zud&aed5wJu&1>vyXkKIAK=T^A0nI-4Jv95+O=$M9pP<=?;WiEwwF#iCod&9H+7!%T zT(ps(n>Gs6Yx6)ORIf8LRIf7+s9tA-q4_<#ADZ8@nb7>6&DO?%bD{Y?D}?6vY`!)L zEP>_#TL8@gwh)>FY^inzxD1*DY&kRsSf#cAd{}Es!L;d7sNQ62pn8*4X*0oUsNQ5X zP`!zF0A+)92=o?v7Mi!%CTQNmTfJw2TcLT2{Q;V{*f#AP@Q={E&Gta^HhU48x7mJe zG59hxZ?l8Yyv<(KmV$@0DSVTI|3KA6_#Ub*!cSTY$aHa_s7nB4T{@`NrC=@>tcwIg zbx~l1&H@gHrkfBAO*bJHnr=coH1$F%H1$FnH1$G;E*H##re4T_rd}AO8x4+uCVohG z4^**h0#pscL|rjB8L9?h3RDfkR9z`Jy)CIloG0App7=^qYjR4;Pb1$;ecCc$5z=m_ zEl+M=WG>2lK66I4T*ddlxcl#mRKB;$uYX6fk1M@9#6h;N%enBk zr+$L+@BezSx7+Xkz9-pl{nlb{AilSVgnvK({Q=wX{Qj?#{Ju4qY1!NO;BBPr6h7}_ zzX)u@p={hK`q+%D3yY+G!RIVK=kPg?&tI{t#mD$uU;(U~MY2z@Z2C7A%`UPSc8R63 zzhj4sPuV@JhfP3hoWTBpO&cz=sSI~X(B@{cf3gBJr~)*V2ha#+!MbO$e_`u}&++*J zpD)=Q_7y%~+gLH{XQk{LR?hy-Reup1s_-Jw%~@3yYMQE<5kpp zI~!yaj^erg#*Tu%ZPJGC9YC^4RQ_@CNQ_@OtQ9`b2 zQG!Frj?7ifN$zyLFGb~+9cg2EaW-~t#5}iLmsjwbB`itlbG2tIVWLZ#L)dPdgvb2z z#qGwi?l~D&eC~5!k&%zjSoi%IbMUd^Q{?{VjADGO_>2w2$x?i*?mZcJQZCc(-k7=G z{Y2(Y_jAF!-LoTKXgm3WI8<;OyJ}haiqbJfl|@y`r79a)mnb&!&`^Pm`E z_-!JR6*vCCH)4nO|26gzZ4s@=dt2eF;wOTblAvT95`B5(iOTVPVyH(-(!9j~kv01v zab(-&Ln0nR#rY)C6jPGgOl{&g;jSc(Zaodn@#d4k7n6je9PjrAt;!FQ2}=Xz7XvOP9A5#!8p96z#Oq#jpw`eI&NbSf+e9QmWGM)F7O; zNvTpqw7}X{lt^3dQ*w?^JuXg$=XIV5cp1*ca}r`M(E8!CVGs_JN3G;}h>l$sT6MO*J-X{{)fD+!mRp-Ro0lF@rPqja!9w(L$$ z0@3xvv$e|7)6x*7{DNe}+-fajtCfV)l9y8co}^aRwoC0oI%P-+KZ;rIEak(a(m2KE zwB)I*d{;6kSC2`-ZKcPgx!ShZ-a-?{or@r{&0Dku&qq4`j}8(-i+Q$ww(XC#jt&pYUtc zwlT;qkFcCQ#OD24#=l9-o#^NNHu}4L{yy?(L|%j}l>Abdm53n_$>)Vz0{0^fH`-Xy z6r_3)3=Y+bVE#*BJS^qnX~{=MUMHp)bc-Y^GZA+vNXmmCDPkoD8!PzPVBIY%N#5dPwq4S-}=S zREd9!k$j#YmiOD>r~P7|-0Ul%y-bPkmOO2NFm#@tK(+*FUPhkp#JhWU0@0VVCCai>QWQ$M2m)t` z@v@nZW1b=QyO#35TLO=Q=gip_%h;m`i63$MaN5Zd6c;xI-XXB66Fil+U%P@)(5!^X z@VdF%a7H1?ye@xkhp~4Gnx~w%!$3+iug|;B@NOg!=U2k#Vk&u_@t=!fH00doOKni8 zgvap+YzYPN%PBhJ%=UjRq^ic>7B%nkN|=>$xCHS{N1lG)c^4tQycEd1^3jDXLb8_O z-_METg;o3P#R84gO%4$OQYL7|0>-drq)n@sl*+Y!jw_pNQ0C` zKS-;MhL`4Un)~*mF;89pdgHLHPyf?);|IxGFwfBh3WA@xs!PiR&{Shr0)CX5)b+C3 zT(eR6(~r_zp-J)kNeUIVE2Dmr#t0tD`k$mI!Ap7VCoFOJDv`Ib0@AK1x20)u$IUe- zMErT0iv)Ac+jqXqHJ#>~_nilwZl;-WnMLSjF*m~#yjaH?I< zo2$Bc`~x}-!ZNKEOlx(4qF|~Tz<)_?F5oABR1ONV?+}%WF|++g9TP=-;XgmFbyqG6 za=PHB1c>rlp-9;-%HbH)-xlQ@ZLXRLZl+qR;x5TaD8F1uJ~L>oD}#SelU*=7GF5>H zqE-o%<=ET?4JDv5n&(~^s`l?JAExAJF|>?Q10E~w^W;wckNHBCy9TFw&s zm1ea(E#!o+9wlY6kJX!MPw*+C`6JWw1uxtGa}6dzH5|a#+x3JUx9J zUvTtu47dhL@H}8HHP`;AxM<~ZA=nDeO*A_uq8ROPQS$9;o!PLjg{O5oWrbFbww}<3 z24dqusF~K8Jk9Go1(Q7&sc<8+fLk=L^A@#89cml$K};i>OL^rxHkup_qG(zdq=mmQ z<(gIw5+W5Bo%~2piZ&2AK47-*menRZWofq?lkQ{{xm9-Pm4ftc-|xoT9X&Be%FtH`U#u~-e` zG}|MPl-ed`k(>OYDc`&&ldNcR3!9Si|JjtyI2tmxl|h6(7CqC#+R0dU=aWr^()srZJlxl}fi>UOjj-in3Z4 zfFeZR@E-@f))pA#86GX%_}A^GBv+g0V6Sr4ApgZH_cAE4MyD78j8X6V}* zjbygFX+`AFY+nhdn<(Qv4c$5L9&<86UExfi_jjVaWgxfQR)ZD zVd~GE<#}k3{I2kYvep9?(y#3Bkf+=+$?rVmVN-uZ!1g(?SU1=QT%s0&nn}pF2mx9b z|3cf;F-glcO8NQqIu{MR?SgTNA};~Q0Z1JOoDr6L$`Sg5Q0D!YPK`=EpzQXPV+@`q zrZKJeh6OqrV0lWfr|gyH&5gB_w=`!#AU3UNTJHz1C{4#9bD6nJ3$wLXnyc+d7ASi0 zTpm-B2Fq!Jx3YAw94vg%)-YK16od}tg&}egEKlbpuQXYCvWj@g+M9X0Cn-;R$%A2# zd%Wby!wS&lFxgxUQ~%Mtz6e$3OhPH@k(cI++)Jr4)LVW-C{xaR%O%1RC2gqOh5)`9 zDu)U7HZLFfML}q2JK-y@6g|(uPD~EfV2zqO8pk=&&5jFjp1M^{+Li>#W&usODp>Z^zK`DA z)x7?FWqYtZ%;N?+aCAZzlRZonc{4DrKd*cojLkf5m>f57LXCb)@2hv!NI1rSB{xJa zi@3x)oAsCAnM@Q;H7uY=(5i^;8qFQ;zl2~M`AoSPA}>_)E^+-A%EC}N&iz~N{*l_< z`X7}&p>m2?Cn%Rf>e0ebK-JPITYhL$-$Wx8tKOZ5-1;UE?m;+D7BGtfHuLI#sp=5B#hO!?P{d# zA$ag{(Nw(>cBa+ho5zu>7@}lf4Yvt%omEMUk{?RSrzFz|UWYuH>gMpqR@F*FxV-`0 znU)IITvzJs5b8>mGf{F>^b+n734))h-QF5kb4{q(aS3K_szHOUUM*q_fLZZ)E0mCE zIR-stUNoiT7wbYW#G8%+p*~uS|=PL(tM5iIF2Fo?^rn<$*Xk7Mp~k2^lqL@kh)xF+4miLZb?*iR9U><~2+sOtoODdtI-Q z(F?TxtazuaYy5bzwR0Tj9R;EgsbF9q_LbDI!;rQ+F;lW(a8-N5hH%4!1;J>Ls@h9N zvK-6}K8lk)lnL?jOk{mmygXfaTN#L#(~~nbd_Ds$vgC7S4Q2&3lTdsRQ89{x17%(| zcLmnAAOY=4$XA|8lt;?>!!<_b$#6Nc?M9;fgdki~Y{_yKA6}|9M`;F|YjTu#ljY1I zd}30^TVWlanACl%<8zX_Zx!DZRP>KZPKxYjtylS>JZr|F-~T0kbCsQEg65Uf`J=_% zgAi&~jF5+F+<612Hz^q-wBsTJeFEkJT0OO3Q@sV| z#Z_{Ur20(ftgj|lAIK}MmQr1lD-O~~lmPo$`05kTpdC{*827lP!e4DI1u) zL8T+*z<^1vfoMWa=IVZDm75*2RcOn1qAOH(jg-TtTVQ7f9#j-X|7+Q zj8By(4qZ#$HgQw2myk`{?IhZ!97x5?tXcUWRSwteBH4?|tyE0Ywk!S?`Ne2&6XS-C z(GT@dYOWqIYDudH!9e~x9b6$^Q@*jtxkJA8Li|+7JPGJ6`BzQ9a&MaK<9!R$ACo=E z*=qU4K>cRaK8AGV@ickE$b5Hh8q~ucH`nE(bQ~4Dh<0PtL~aDCvYH4UT}`}RLk-AO zldI&U%O0cm^5GvL9{9QT=rnH(q@SwR$Xe8#O6`YcL81&7H2A7+N)4i^vnxuvd|p_r zEXk0Yg*ru_DIXF7m6Mrrc*rp*RCjP31Zwhli?84vI~Sb?97bhu7Ot@(lXi+4;^wr0u0Y%_V6+XR7qEiSLt@G}ea2nLsFG!|pTUyeV*F(x|P$3<88P%dQ4 zqlM2E-yAvA^#;V%5&Ycu%7h%*&sB!I#>nBNtjLjvg+~7zDfO&1c!bDY{VqSB%w1PF zK5u(7NA8k_+%RHdfu5SrOB^?NmyOO3Q;&UP zhk?DBYJxPFx?>#E;+xNAwbV|k527j3A)n`P2OnQ~A6=88d@xS-^UBnq=Q3i}fNKrW zNTU|Iq3Vl@G+rKs$>6y07&@;hj`4B=u7Y15FOL*fw|y~Qz9@zVsv>Yvy^@#!afDbyypJ^M3L=c diff --git a/MCP/direct_mcp_client.py b/MCP/direct_mcp_client.py new file mode 100644 index 00000000..fd559d94 --- /dev/null +++ b/MCP/direct_mcp_client.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +直接调用MCP服务器的Python接口 +绕过Qoder IDE,直接使用RimWorld知识库 +""" +import os +import sys + +# 添加MCP路径 +MCP_DIR = os.path.dirname(os.path.abspath(__file__)) +SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src') +if SDK_PATH not in sys.path: + sys.path.insert(0, SDK_PATH) + +# 导入MCP服务器 +from mcpserver_stdio import get_context + +class DirectMCPClient: + """直接调用MCP服务器的客户端""" + + def __init__(self): + print("🚀 直接MCP客户端已启动") + print("📚 RimWorld知识库已加载") + + def query(self, question: str) -> str: + """查询RimWorld知识库""" + try: + print(f"🔍 正在查询: {question}") + result = get_context(question) + return result + except Exception as e: + return f"查询出错: {e}" + + def interactive_mode(self): + """交互模式""" + print("\n" + "="*60) + print("🎯 RimWorld知识库 - 交互模式") + print("输入问题查询知识库,输入 'quit' 或 'exit' 退出") + print("="*60) + + while True: + try: + question = input("\n❓ 请输入您的问题: ").strip() + + if question.lower() in ['quit', 'exit', '退出', 'q']: + print("👋 再见!") + break + + if not question: + print("⚠️ 请输入有效的问题") + continue + + print("\n🔄 正在搜索...") + result = self.query(question) + + print("\n📖 查询结果:") + print("-" * 50) + print(result) + print("-" * 50) + + except KeyboardInterrupt: + print("\n\n👋 用户中断,退出程序") + break + except Exception as e: + print(f"\n❌ 出现错误: {e}") + +def main(): + """主函数""" + import argparse + + parser = argparse.ArgumentParser(description='直接调用RimWorld MCP知识库') + parser.add_argument('--query', '-q', type=str, help='直接查询问题') + parser.add_argument('--interactive', '-i', action='store_true', help='进入交互模式') + + args = parser.parse_args() + + client = DirectMCPClient() + + if args.query: + # 直接查询模式 + result = client.query(args.query) + print("\n📖 查询结果:") + print("="*60) + print(result) + print("="*60) + elif args.interactive: + # 交互模式 + client.interactive_mode() + else: + # 默认显示帮助 + print("\n🔧 使用方法:") + print("1. 直接查询: python direct_mcp_client.py -q \"ThingDef是什么\"") + print("2. 交互模式: python direct_mcp_client.py -i") + print("3. 查看帮助: python direct_mcp_client.py -h") + + # 演示查询 + print("\n🎬 演示查询:") + demo_result = client.query("ThingDef") + print(demo_result[:500] + "..." if len(demo_result) > 500 else demo_result) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/MCP/mcpserver_stdio.py b/MCP/mcpserver_stdio.py index d814dd90..40db4658 100644 --- a/MCP/mcpserver_stdio.py +++ b/MCP/mcpserver_stdio.py @@ -55,7 +55,8 @@ KNOWLEDGE_BASE_PATHS = [ # 初始化OpenAI客户端用于Qwen模型 qwen_client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), - base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" + base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", + timeout=15.0 # 设置15秒超时,避免MCP初始化超时 ) # 3. --- 向量缓存管理 --- @@ -192,36 +193,47 @@ def find_most_similar_files(question_embedding, file_embeddings, top_n=3, min_si return results # 新增:重排序函数 -def rerank_files(question, file_matches, top_n=5): +def rerank_files(question, file_matches, top_n=3): # 减少默认数量 """使用DashScope重排序API对文件进行重新排序""" try: + # 限制输入数量以减少超时风险 + if len(file_matches) > 5: # 进一步限制最大输入数量以避免超时 + file_matches = file_matches[:5] + # 准备重排序输入 documents = [] for match in file_matches: # 读取文件内容 try: with open(match['path'], 'r', encoding='utf-8') as f: - content = f.read()[:2000] # 限制内容长度以提高效率 + content = f.read()[:1500] # 进一步限制内容长度以提高效率 documents.append(content) except Exception as e: logging.error(f"读取文件 {match['path']} 失败: {e}") continue if not documents: + logging.warning("重排序时未能读取任何文件内容") return file_matches[:top_n] - # 调用重排序API + # 调用重排序API,添加超时处理 + import time + start_time = time.time() + response = dashscope.TextReRank.call( model='gte-rerank', query=question, documents=documents ) + elapsed_time = time.time() - start_time + logging.info(f"重排序API调用耗时: {elapsed_time:.2f}秒") + if response.status_code == 200: # 根据重排序结果重新排序文件 reranked_results = [] for i, result in enumerate(response.output['results']): - if i < len(file_matches): + if i < len(file_matches) and i < len(documents): # 添加边界检查 reranked_results.append({ 'path': file_matches[i]['path'], 'similarity': result['relevance_score'] @@ -417,6 +429,7 @@ def analyze_question_with_llm(question: str) -> dict: messages=messages, temperature=0.0, # 使用最低温度确保输出稳定 max_tokens=300, + timeout=12.0, # 12秒超时,避免MCP初始化超时 stop=["\n\n"] # 防止模型生成过多内容 ) @@ -494,13 +507,20 @@ def get_context(question: str) -> str: """ logging.info(f"收到问题: {question}") - # 使用LLM分析问题 - analysis = analyze_question_with_llm(question) - keywords = analysis["search_keywords"] - - if not keywords: - logging.warning("无法从问题中提取关键词。") - return "无法从问题中提取关键词,请提供更具体的信息。" + try: + # 使用LLM分析问题,添加超时保护 + analysis = analyze_question_with_llm(question) + keywords = analysis["search_keywords"] + + if not keywords: + logging.warning("无法从问题中提取关键词。") + return "无法从问题中提取关键词,请提供更具体的信息。" + except Exception as e: + logging.error(f"LLM分析失败,使用备用方案: {e}") + # 备用方案:使用简单的关键词提取 + keywords = find_keywords_in_question(question) + if not keywords: + return "无法分析问题,请检查网络连接或稍后重试。" logging.info(f"提取到关键词: {keywords}") @@ -549,7 +569,7 @@ def get_context(question: str) -> str: # 3. 向量化和相似度计算 (精准筛选) # 增加超时保护:限制向量化的文件数量 - MAX_FILES_TO_VECTORIZE = 50 # 增加处理文件数量 + MAX_FILES_TO_VECTORIZE = 10 # 进一步减少处理文件数量以避免超时 if len(candidate_files) > MAX_FILES_TO_VECTORIZE: logging.warning(f"候选文件过多 ({len(candidate_files)}),仅处理前 {MAX_FILES_TO_VECTORIZE} 个。") candidate_files = candidate_files[:MAX_FILES_TO_VECTORIZE] @@ -559,27 +579,36 @@ def get_context(question: str) -> str: return "无法生成问题向量,请检查API连接或问题内容。" file_embeddings = [] - for file_path in candidate_files: + for i, file_path in enumerate(candidate_files): try: with open(file_path, 'r', encoding='utf-8') as f: content = f.read() + # 添加处理进度日志 + if i % 5 == 0: # 每5个文件记录一次进度 + logging.info(f"正在处理第 {i+1}/{len(candidate_files)} 个文件: {os.path.basename(file_path)}") + file_embedding = get_embedding(content[:8000]) # 限制内容长度以提高效率 if file_embedding: file_embeddings.append({'path': file_path, 'embedding': file_embedding}) except Exception as e: logging.error(f"处理文件 {file_path} 时出错: {e}") + continue # 继续处理下一个文件,而不是完全失败 if not file_embeddings: - return "无法为任何候选文件生成向量。" + logging.warning("未能为任何候选文件生成向量。可能是由于API超时或其他错误。") + return "未能为任何候选文件生成向量,请稍后重试或减少搜索范围。" # 找到最相似的多个文件 - best_matches = find_most_similar_files(question_embedding, file_embeddings, top_n=10) # 增加返回数量以供重排序 + best_matches = find_most_similar_files(question_embedding, file_embeddings, top_n=5) # 进一步减少返回数量以避免超时 if not best_matches: return "计算向量相似度失败或没有找到足够相似的文件。" - # 新增:重排序处理 - reranked_matches = rerank_files(question, best_matches, top_n=5) + # 新增:重排序处理(仅在找到足够多匹配项时执行) + if len(best_matches) > 2: + reranked_matches = rerank_files(question, best_matches, top_n=3) # 减少重排序数量 + else: + reranked_matches = best_matches # 如果匹配项太少,跳过重排序以节省时间 # 提取代码内容 results_with_code = [] @@ -617,5 +646,19 @@ def get_context(question: str) -> str: if __name__ == "__main__": logging.info(f"Python Executable: {sys.executable}") logging.info("RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...") + + # 快速启动:延迟初始化重量级组件 + try: + # 验证基本配置 + if not dashscope.api_key: + logging.warning("警告:DASHSCOPE_API_KEY 未配置,部分功能可能受限。") + + # 创建必要目录 + os.makedirs(CACHE_DIR, exist_ok=True) + + logging.info("MCP服务器快速启动完成,等待客户端连接...") + except Exception as e: + logging.error(f"服务器启动时出错: {e}") + # 使用 'stdio' 传输协议 mcp.run(transport="stdio") \ No newline at end of file diff --git a/MCP/rimworld_query.py b/MCP/rimworld_query.py new file mode 100644 index 00000000..bd491e84 --- /dev/null +++ b/MCP/rimworld_query.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +RimWorld知识库命令行工具 +快速查询工具,无需Qoder IDE +""" +import os +import sys +import argparse +import json + +# 添加MCP路径 +MCP_DIR = os.path.dirname(os.path.abspath(__file__)) +SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src') +if SDK_PATH not in sys.path: + sys.path.insert(0, SDK_PATH) + +def quick_query(question: str, format_output: bool = True) -> str: + """快速查询函数""" + try: + # 动态导入避免启动时的依赖检查 + from mcpserver_stdio import get_context + result = get_context(question) + + if format_output: + # 格式化输出 + lines = result.split('\n') + formatted_lines = [] + current_section = "" + + for line in lines: + if line.startswith('--- 结果'): + current_section = f"\n🔍 {line}" + formatted_lines.append(current_section) + elif line.startswith('文件路径:'): + formatted_lines.append(f"📄 {line}") + elif line.strip() and not line.startswith('---'): + formatted_lines.append(line) + + return '\n'.join(formatted_lines) + else: + return result + + except Exception as e: + return f"❌ 查询失败: {e}" + +def main(): + parser = argparse.ArgumentParser( + description='RimWorld知识库命令行查询工具', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +使用示例: + %(prog)s "ThingDef是什么" + %(prog)s "如何创建新的Pawn" --raw + %(prog)s "建筑物定义" --output result.txt + %(prog)s --list-examples + """ + ) + + parser.add_argument('question', nargs='?', help='要查询的问题') + parser.add_argument('--raw', action='store_true', help='输出原始结果,不格式化') + parser.add_argument('--output', '-o', help='将结果保存到文件') + parser.add_argument('--list-examples', action='store_true', help='显示查询示例') + + args = parser.parse_args() + + if args.list_examples: + print("📚 RimWorld知识库查询示例:") + examples = [ + "ThingDef的定义和用法", + "如何创建新的Building", + "Pawn类的主要方法", + "CompPower的使用方法", + "XML中的defName规则", + "GenConstruct.CanPlaceBlueprintAt", + "Building_Door的开关逻辑" + ] + for i, example in enumerate(examples, 1): + print(f" {i}. {example}") + return + + if not args.question: + parser.print_help() + return + + print(f"🔍 正在查询: {args.question}") + + result = quick_query(args.question, not args.raw) + + if args.output: + try: + with open(args.output, 'w', encoding='utf-8') as f: + f.write(result) + print(f"✅ 结果已保存到: {args.output}") + except Exception as e: + print(f"❌ 保存文件失败: {e}") + else: + print("\n" + "="*60) + print("📖 查询结果:") + print("="*60) + print(result) + print("="*60) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/MCP/test_config.py b/MCP/test_config.py new file mode 100644 index 00000000..9ace940d --- /dev/null +++ b/MCP/test_config.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +验证MCP服务器配置和环境 +""" +import os +import sys +import subprocess +import json + +def test_mcp_configuration(): + """测试MCP配置是否正确""" + print("🔍 MCP配置验证工具") + print("=" * 50) + + # 1. 检查Python环境 + print(f"✓ Python解释器: {sys.executable}") + print(f"✓ Python版本: {sys.version}") + + # 2. 检查工作目录 + mcp_dir = os.path.dirname(os.path.abspath(__file__)) + print(f"✓ MCP目录: {mcp_dir}") + + # 3. 检查MCP SDK + sdk_path = os.path.join(mcp_dir, 'python-sdk', 'src') + print(f"✓ SDK路径: {sdk_path}") + print(f"✓ SDK存在: {os.path.exists(sdk_path)}") + + # 4. 检查必要文件 + server_script = os.path.join(mcp_dir, 'mcpserver_stdio.py') + env_file = os.path.join(mcp_dir, '.env') + print(f"✓ 服务器脚本: {os.path.exists(server_script)}") + print(f"✓ 环境文件: {os.path.exists(env_file)}") + + # 5. 检查依赖包 + try: + import mcp + print("✓ MCP SDK: 已安装") + except ImportError as e: + print(f"❌ MCP SDK: 未安装 - {e}") + + try: + import dashscope + print("✓ DashScope: 已安装") + except ImportError as e: + print(f"❌ DashScope: 未安装 - {e}") + + try: + import openai + print("✓ OpenAI: 已安装") + except ImportError as e: + print(f"❌ OpenAI: 未安装 - {e}") + + # 6. 生成正确的配置 + python_exe = sys.executable.replace("\\", "\\\\") + mcp_dir_escaped = mcp_dir.replace("\\", "\\\\") + sdk_path_escaped = sdk_path.replace("\\", "\\\\") + + config = { + "mcpServers": { + "rimworld-knowledge-base": { + "command": python_exe, + "args": ["mcpserver_stdio.py"], + "cwd": mcp_dir_escaped, + "disabled": False, + "alwaysAllow": [], + "env": { + "PYTHONPATH": sdk_path_escaped + } + } + }, + "tools": { + "rimworld-knowledge-base": { + "description": "从RimWorld本地知识库(包括C#源码和XML)中检索上下文。", + "server_name": "rimworld-knowledge-base", + "tool_name": "get_context", + "input_schema": { + "type": "object", + "properties": { + "question": { + "type": "string", + "description": "关于RimWorld开发的问题,应包含代码或XML中的关键词。" + } + }, + "required": ["question"] + } + } + } + } + + print("\\n📋 建议的MCP配置:") + print("=" * 50) + print(json.dumps(config, indent=2, ensure_ascii=False)) + + # 7. 测试服务器启动 + print("\\n🚀 测试服务器启动:") + print("=" * 50) + try: + result = subprocess.run( + [sys.executable, server_script], + cwd=mcp_dir, + capture_output=True, + text=True, + timeout=10 + ) + if result.returncode == 0: + print("✓ 服务器可以正常启动") + else: + print(f"❌ 服务器启动失败: {result.stderr}") + except subprocess.TimeoutExpired: + print("✓ 服务器启动正常(超时保护触发)") + except Exception as e: + print(f"❌ 服务器测试失败: {e}") + + print("\\n🎯 配置建议:") + print("=" * 50) + print("1. 复制上面的配置到 Qoder IDE 的 MCP 设置中") + print("2. 确保所有依赖包都已安装") + print("3. 检查 .env 文件中的 API Key 配置") + print("4. 重启 Qoder IDE 并重新连接 MCP 服务器") + +if __name__ == "__main__": + test_mcp_configuration() \ No newline at end of file diff --git a/MCP/test_mcp.py b/MCP/test_mcp.py new file mode 100644 index 00000000..4cea894a --- /dev/null +++ b/MCP/test_mcp.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +最终功能测试:验证MCP服务器是否能正常工作 +""" +import os +import sys +import subprocess +import time +import json + +def test_mcp_server_final(): + """最终测试MCP服务器功能""" + print("🔥 MCP服务器最终功能测试") + print("=" * 50) + + # 获取当前目录 + mcp_dir = os.path.dirname(os.path.abspath(__file__)) + script_path = os.path.join(mcp_dir, 'mcpserver_stdio.py') + + try: + # 1. 验证SDK安装 + try: + import mcp + print("✅ MCP SDK: 已正确安装") + except ImportError: + print("❌ MCP SDK: 未安装") + return False + + # 2. 启动服务器 + print("🚀 启动MCP服务器...") + process = subprocess.Popen( + [sys.executable, script_path], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + cwd=mcp_dir + ) + + # 等待启动 + time.sleep(2) + + # 3. 初始化测试 + init_request = { + "jsonrpc": "2.0", + "id": 1, + "method": "initialize", + "params": { + "protocolVersion": "2024-11-05", + "capabilities": {}, + "clientInfo": { + "name": "final-test-client", + "version": "1.0.0" + } + } + } + + print("📡 发送初始化请求...") + process.stdin.write(json.dumps(init_request) + '\n') + process.stdin.flush() + + # 读取初始化响应 + response = process.stdout.readline() + if response: + response_data = json.loads(response.strip()) + if "result" in response_data: + print("✅ 初始化成功") + print(f" 服务器名称: {response_data['result'].get('serverInfo', {}).get('name', 'unknown')}") + print(f" 服务器版本: {response_data['result'].get('serverInfo', {}).get('version', 'unknown')}") + else: + print("❌ 初始化失败") + return False + else: + print("❌ 初始化无响应") + return False + + # 4. 工具列表测试 + tools_request = { + "jsonrpc": "2.0", + "id": 2, + "method": "tools/list" + } + + print("🔧 请求工具列表...") + process.stdin.write(json.dumps(tools_request) + '\n') + process.stdin.flush() + + tools_response = process.stdout.readline() + if tools_response: + tools_data = json.loads(tools_response.strip()) + if "result" in tools_data and "tools" in tools_data["result"]: + tools = tools_data["result"]["tools"] + print(f"✅ 发现 {len(tools)} 个工具:") + for tool in tools: + print(f" - {tool.get('name', 'unknown')}: {tool.get('description', 'no description')}") + else: + print("❌ 获取工具列表失败") + else: + print("❌ 工具列表请求无响应") + + print("\n🎯 测试结果:") + print("✅ MCP服务器能够正常启动") + print("✅ 初始化协议工作正常") + print("✅ 工具发现机制正常") + print("\n✨ 所有基本功能测试通过!") + + return True + + except Exception as e: + print(f"❌ 测试过程中出错: {e}") + return False + + finally: + # 清理进程 + try: + process.terminate() + process.wait(timeout=5) + except: + try: + process.kill() + except: + pass + +if __name__ == "__main__": + print("开始最终测试...") + success = test_mcp_server_final() + + if success: + print("\n🎉 恭喜!MCP服务器已完全修复并正常工作!") + print("\n📋 现在您需要在Qoder IDE中更新配置:") + print("1. 打开Qoder IDE设置 → MCP") + print("2. 更新配置文件,确保使用正确的绝对路径") + print("3. 重启Qoder IDE") + print("4. 在Agent模式下测试知识库查询") + print("\n建议的配置:") + print(json.dumps({ + "mcpServers": { + "rimworld-knowledge-base": { + "command": sys.executable, + "args": ["mcpserver_stdio.py"], + "cwd": os.path.dirname(os.path.abspath(__file__)), + "disabled": False, + "alwaysAllow": [] + } + } + }, indent=2)) + else: + print("\n❌ 仍存在问题,需要进一步调试") \ No newline at end of file diff --git a/MCP/test_mcp_timeout_fix.py b/MCP/test_mcp_timeout_fix.py new file mode 100644 index 00000000..2f0f803a --- /dev/null +++ b/MCP/test_mcp_timeout_fix.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +测试MCP服务器超时修复 +""" +import os +import sys +import subprocess +import time +import json + +def test_mcp_server_timeout_fix(): + """测试MCP服务器是否能快速启动并响应""" + print("开始测试MCP服务器超时修复...") + + # 获取当前目录 + mcp_dir = os.path.dirname(os.path.abspath(__file__)) + script_path = os.path.join(mcp_dir, 'mcpserver_stdio.py') + + try: + # 启动MCP服务器进程 + print("启动MCP服务器...") + start_time = time.time() + + process = subprocess.Popen( + [sys.executable, script_path], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + cwd=mcp_dir + ) + + # 等待服务器启动(减少等待时间) + time.sleep(2) # 从3秒减少到2秒 + + startup_time = time.time() - start_time + print(f"服务器启动耗时: {startup_time:.2f}秒") + + # 发送初始化请求 + init_request = { + "jsonrpc": "2.0", + "id": 1, + "method": "initialize", + "params": { + "protocolVersion": "2024-11-05", + "capabilities": {}, + "clientInfo": { + "name": "test-client", + "version": "1.0.0" + } + } + } + + print("发送初始化请求...") + request_start = time.time() + process.stdin.write(json.dumps(init_request) + '\n') + process.stdin.flush() + + # 读取响应 + response_line = process.stdout.readline() + init_time = time.time() - request_start + + if response_line: + print(f"✅ 初始化成功,耗时: {init_time:.2f}秒") + print(f"收到响应: {response_line.strip()}") + else: + print("❌ 初始化失败:无响应") + return False + + # 发送简单的工具调用请求 + tool_request = { + "jsonrpc": "2.0", + "id": 2, + "method": "tools/call", + "params": { + "name": "get_context", + "arguments": { + "question": "ThingDef" # 简单的测试查询 + } + } + } + + print("发送工具调用请求...") + tool_start = time.time() + process.stdin.write(json.dumps(tool_request) + '\n') + process.stdin.flush() + + # 等待响应(减少超时时间) + timeout = 20 # 从30秒减少到20秒 + response_received = False + + while time.time() - tool_start < timeout: + if process.poll() is not None: + print("服务器进程已退出") + break + + response_line = process.stdout.readline() + if response_line: + tool_time = time.time() - tool_start + print(f"✅ 工具调用成功,耗时: {tool_time:.2f}秒") + print(f"工具调用响应: {response_line.strip()[:200]}...") # 只显示前200个字符 + response_received = True + break + + time.sleep(0.1) + + total_time = time.time() - start_time + + if response_received: + print(f"✅ 测试成功:MCP服务器能够正常处理请求") + print(f"总耗时: {total_time:.2f}秒") + + # 性能评估 + if total_time < 15: + print("🚀 性能优秀:服务器响应速度很快") + elif total_time < 25: + print("✅ 性能良好:服务器响应速度可接受") + else: + print("⚠️ 性能一般:服务器响应较慢,可能仍有超时风险") + + else: + print("❌ 测试失败:超时未收到响应") + return False + + except Exception as e: + print(f"❌ 测试出错: {e}") + return False + + finally: + # 清理进程 + try: + process.terminate() + process.wait(timeout=5) + except: + try: + process.kill() + except: + pass + print("测试完成") + + return True + +if __name__ == "__main__": + success = test_mcp_server_timeout_fix() + if success: + print("\n🎉 MCP服务器超时问题已修复!") + print("现在可以在Qoder IDE中重新连接MCP服务器了。") + else: + print("\n❌ MCP服务器仍存在问题,需要进一步调试。") \ No newline at end of file diff --git a/MCP/vector_cache/knowledge_cache.json b/MCP/vector_cache/knowledge_cache.json index 3a0d95b6..be4d5de3 100644 --- a/MCP/vector_cache/knowledge_cache.json +++ b/MCP/vector_cache/knowledge_cache.json @@ -2066,5 +2066,5187 @@ ], "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\Verb.txt\n\npublic abstract class Verb : ITargetingSource, IExposable, ILoadReferenceable\n{\n\tpublic VerbProperties verbProps;\n\n\tpublic VerbTracker verbTracker;\n\n\tpublic ManeuverDef maneuver;\n\n\tpublic Tool tool;\n\n\tpublic Thing caster;\n\n\tpublic MechanitorControlGroup controlGroup;\n\n\tpublic string loadID;\n\n\tpublic VerbState state;\n\n\tprotected LocalTargetInfo currentTarget;\n\n\tprotected LocalTargetInfo currentDestination;\n\n\tprotected int burstShotsLeft;\n\n\tprotected int ticksToNextBurstShot;\n\n\tprotected int lastShotTick = -999999;\n\n\tprotected bool surpriseAttack;\n\n\tprotected bool canHitNonTargetPawnsNow = true;\n\n\tpublic bool preventFriendlyFire;\n\n\tprotected bool nonInterruptingSelfCast;\n\n\tpublic Action castCompleteCallback;\n\n\tprivate Texture2D commandIconCached;\n\n\tprivate readonly List> maintainedEffecters = new List>();\n\n\tprivate int? cachedTicksBetweenBurstShots;\n\n\tprivate int? cachedBurstShotCount;\n\n\tprivate static readonly List tempLeanShootSources = new List();\n\n\tprivate static readonly List tempDestList = new List();\n\n\tpublic IVerbOwner DirectOwner => verbTracker.directOwner;\n\n\tpublic ImplementOwnerTypeDef ImplementOwnerType => verbTracker.directOwner.ImplementOwnerTypeDef;\n\n\tpublic CompEquippable EquipmentCompSource => DirectOwner as CompEquippable;\n\n\tpublic CompApparelReloadable ReloadableCompSource => DirectOwner as CompApparelReloadable;\n\n\tpublic CompApparelVerbOwner_Charged VerbOwner_ChargedCompSource => DirectOwner as CompApparelVerbOwner_Charged;\n\n\tpublic ThingWithComps EquipmentSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (EquipmentCompSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentCompSource.parent;\n\t\t\t}\n\t\t\tif (ReloadableCompSource != null)\n\t\t\t{\n\t\t\t\treturn ReloadableCompSource.parent;\n\t\t\t}\n\t\t\tif (VerbOwner_ChargedCompSource != null)\n\t\t\t{\n\t\t\t\treturn VerbOwner_ChargedCompSource.parent;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic HediffComp_VerbGiver HediffCompSource => DirectOwner as HediffComp_VerbGiver;\n\n\tpublic Hediff HediffSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (HediffCompSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn HediffCompSource.parent;\n\t\t}\n\t}\n\n\tpublic Pawn_MeleeVerbs_TerrainSource TerrainSource => DirectOwner as Pawn_MeleeVerbs_TerrainSource;\n\n\tpublic TerrainDef TerrainDefSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (TerrainSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn TerrainSource.def;\n\t\t}\n\t}\n\n\tpublic virtual Thing Caster => caster;\n\n\tpublic virtual Pawn CasterPawn => caster as Pawn;\n\n\tpublic virtual Verb GetVerb => this;\n\n\tpublic virtual bool CasterIsPawn => caster is Pawn;\n\n\tpublic virtual bool Targetable => verbProps.targetable;\n\n\tpublic virtual bool MultiSelect => false;\n\n\tpublic virtual bool HidePawnTooltips => false;\n\n\tpublic LocalTargetInfo CurrentTarget => currentTarget;\n\n\tpublic LocalTargetInfo CurrentDestination => currentDestination;\n\n\tpublic int LastShotTick => lastShotTick;\n\n\tpublic virtual TargetingParameters targetParams => verbProps.targetParams;\n\n\tpublic virtual ITargetingSource DestinationSelector => null;\n\n\tprotected virtual int ShotsPerBurst => 1;\n\n\tpublic virtual Texture2D UIIcon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (verbProps.commandIcon != null)\n\t\t\t{\n\t\t\t\tif (commandIconCached == null)\n\t\t\t\t{\n\t\t\t\t\tcommandIconCached = ContentFinder.Get(verbProps.commandIcon);\n\t\t\t\t}\n\t\t\t\treturn commandIconCached;\n\t\t\t}\n\t\t\tif (EquipmentSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentSource.def.uiIcon;\n\t\t\t}\n\t\t\treturn BaseContent.BadTex;\n\t\t}\n\t}\n\n\tpublic bool Bursting => burstShotsLeft > 0;\n\n\tpublic virtual bool IsMeleeAttack => verbProps.IsMeleeAttack;\n\n\tpublic bool BuggedAfterLoading => verbProps == null;\n\n\tpublic bool WarmingUp => WarmupStance != null;\n\n\tpublic Stance_Warmup WarmupStance\n\t{\n\t\tget\n\t\t{\n\t\t\tif (CasterPawn == null || !CasterPawn.Spawned)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!(CasterPawn.stances.curStance is Stance_Warmup stance_Warmup) || stance_Warmup.verb != this)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn stance_Warmup;\n\t\t}\n\t}\n\n\tpublic int WarmupTicksLeft\n\t{\n\t\tget\n\t\t{\n\t\t\tif (WarmupStance == null)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn WarmupStance.ticksLeft;\n\t\t}\n\t}\n\n\tpublic float WarmupProgress => 1f - WarmupTicksLeft.TicksToSeconds() / verbProps.warmupTime;\n\n\tpublic virtual string ReportLabel => verbProps.label;\n\n\tpublic virtual float EffectiveRange => verbProps.AdjustedRange(this, Caster);\n\n\tpublic virtual float? AimAngleOverride => null;\n\n\tpublic bool NonInterruptingSelfCast\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!verbProps.nonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\treturn nonInterruptingSelfCast;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic int TicksBetweenBurstShots\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedTicksBetweenBurstShots.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.ticksBetweenBurstShots;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum /= item.burstShotSpeedMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedTicksBetweenBurstShots = Mathf.RoundToInt(num);\n\t\t\t}\n\t\t\treturn cachedTicksBetweenBurstShots.Value;\n\t\t}\n\t}\n\n\tpublic int BurstShotCount\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedBurstShotCount.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.burstShotCount;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum *= item.burstShotCountMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedBurstShotCount = Mathf.CeilToInt(num);\n\t\t\t}\n\t\t\treturn cachedBurstShotCount.Value;\n\t\t}\n\t}\n\n\tpublic bool IsStillUsableBy(Pawn pawn)\n\t{\n\t\tif (!Available())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!DirectOwner.VerbsStillUsableBy(pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.GetDamageFactorFor(this, pawn) == 0f)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (pawn.IsSubhuman && verbProps.category == VerbCategory.Ignite)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool IsUsableOn(Thing target)\n\t{\n\t\treturn true;\n\t}\n\n\tpublic virtual void ExposeData()\n\t{\n\t\tScribe_Values.Look(ref loadID, \"loadID\");\n\t\tScribe_Values.Look(ref state, \"state\", VerbState.Idle);\n\t\tScribe_TargetInfo.Look(ref currentTarget, \"currentTarget\");\n\t\tScribe_TargetInfo.Look(ref currentDestination, \"currentDestination\");\n\t\tScribe_Values.Look(ref burstShotsLeft, \"burstShotsLeft\", 0);\n\t\tScribe_Values.Look(ref ticksToNextBurstShot, \"ticksToNextBurstShot\", 0);\n\t\tScribe_Values.Look(ref lastShotTick, \"lastShotTick\", 0);\n\t\tScribe_Values.Look(ref surpriseAttack, \"surpriseAttack\", defaultValue: false);\n\t\tScribe_Values.Look(ref canHitNonTargetPawnsNow, \"canHitNonTargetPawnsNow\", defaultValue: false);\n\t\tScribe_Values.Look(ref preventFriendlyFire, \"preventFriendlyFire\", defaultValue: false);\n\t\tScribe_Values.Look(ref nonInterruptingSelfCast, \"nonInterruptingSelfCast\", defaultValue: false);\n\t}\n\n\tpublic string GetUniqueLoadID()\n\t{\n\t\treturn \"Verb_\" + loadID;\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, Tool tool, ManeuverDef maneuver)\n\t{\n\t\treturn string.Format(\"{0}_{1}_{2}\", owner.UniqueVerbOwnerID(), (tool != null) ? tool.id : \"NT\", (maneuver != null) ? maneuver.defName : \"NM\");\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, int index)\n\t{\n\t\treturn $\"{owner.UniqueVerbOwnerID()}_{index}\";\n\t}\n\n\tpublic bool TryStartCastOn(LocalTargetInfo castTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\treturn TryStartCastOn(castTarg, LocalTargetInfo.Invalid, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast);\n\t}\n\n\tpublic virtual bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\tif (caster == null)\n\t\t{\n\t\t\tLog.Error(\"Verb \" + GetUniqueLoadID() + \" needs caster to work (possibly lost during saving/loading).\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (state == VerbState.Bursting || !CanHitTarget(castTarg))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CausesTimeSlowdown(castTarg))\n\t\t{\n\t\t\tFind.TickManager.slower.SignalForceNormalSpeed();\n\t\t}\n\t\tthis.surpriseAttack = surpriseAttack;\n\t\tcanHitNonTargetPawnsNow = canHitNonTargetPawns;\n\t\tthis.preventFriendlyFire = preventFriendlyFire;\n\t\tthis.nonInterruptingSelfCast = nonInterruptingSelfCast;\n\t\tcurrentTarget = castTarg;\n\t\tcurrentDestination = destTarg;\n\t\tif (CasterIsPawn && verbProps.warmupTime > 0f)\n\t\t{\n\t\t\tif (!TryFindShootLineFromTo(caster.Position, castTarg, out var resultingLine))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tCasterPawn.Drawer.Notify_WarmingCastAlongLine(resultingLine, caster.Position);\n\t\t\tfloat statValue = CasterPawn.GetStatValue(StatDefOf.AimingDelayFactor);\n\t\t\tint ticks = (verbProps.warmupTime * statValue).SecondsToTicks();\n\t\t\tCasterPawn.stances.SetStance(new Stance_Warmup(ticks, castTarg, this));\n\t\t\tif (verbProps.stunTargetOnCastStart && castTarg.Pawn != null)\n\t\t\t{\n\t\t\t\tcastTarg.Pawn.stances.stunner.StunFor(ticks, null, addBattleLog: false);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (verbTracker.directOwner is Ability ability)\n\t\t\t{\n\t\t\t\tability.lastCastTick = Find.TickManager.TicksGame;\n\t\t\t}\n\t\t\tWarmupComplete();\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void WarmupComplete()\n\t{\n\t\tburstShotsLeft = ShotsPerBurst;\n\t\tstate = VerbState.Bursting;\n\t\tTryCastNextBurstShot();\n\t}\n\n\tpublic void VerbTick()\n\t{\n\t\tif (state == VerbState.Bursting)\n\t\t{\n\t\t\tif (!caster.Spawned || (caster is Pawn pawn && pawn.stances.stunner.Stunned))\n\t\t\t{\n\t\t\t\tReset();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tticksToNextBurstShot--;\n\t\t\t\tif (ticksToNextBurstShot <= 0)\n\t\t\t\t{\n\t\t\t\t\tTryCastNextBurstShot();\n\t\t\t\t}\n\t\t\t\tBurstingTick();\n\t\t\t}\n\t\t}\n\t\tfor (int num = maintainedEffecters.Count - 1; num >= 0; num--)\n\t\t{\n\t\t\tEffecter item = maintainedEffecters[num].Item1;\n\t\t\tif (item.ticksLeft > 0)\n\t\t\t{\n\t\t\t\tTargetInfo item2 = maintainedEffecters[num].Item2;\n\t\t\t\tTargetInfo item3 = maintainedEffecters[num].Item3;\n\t\t\t\titem.EffectTick(item2, item3);\n\t\t\t\titem.ticksLeft--;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.Cleanup();\n\t\t\t\tmaintainedEffecters.RemoveAt(num);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual void BurstingTick()\n\t{\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 pos, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo targetInfo = new TargetInfo(pos, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, targetInfo, targetInfo));\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 posA, IntVec3 posB, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo item = new TargetInfo(posA, map ?? caster.Map);\n\t\tTargetInfo item2 = new TargetInfo(posB, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, item, item2));\n\t}\n\n\tpublic virtual bool Available()\n\t{\n\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t{\n\t\t\tCompRefuelable compRefuelable = caster.TryGetComp();\n\t\t\tif (compRefuelable != null && compRefuelable.Fuel < verbProps.consumeFuelPerShot)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tCompApparelVerbOwner compApparelVerbOwner = EquipmentSource?.GetComp();\n\t\tif (compApparelVerbOwner != null && !compApparelVerbOwner.CanBeUsed(out var reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && EquipmentSource != null && EquipmentUtility.RolePreventsFromUsing(CasterPawn, EquipmentSource, out reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected void TryCastNextBurstShot()\n\t{\n\t\tLocalTargetInfo localTargetInfo = currentTarget;\n\t\tif (Available() && TryCastShot())\n\t\t{\n\t\t\tif (verbProps.muzzleFlashScale > 0.01f)\n\t\t\t{\n\t\t\t\tFleckMaker.Static(caster.Position, caster.Map, FleckDefOf.ShotFlash, verbProps.muzzleFlashScale);\n\t\t\t}\n\t\t\tif (verbProps.soundCast != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCast.PlayOneShot(new TargetInfo(caster.Position, caster.MapHeld));\n\t\t\t}\n\t\t\tif (verbProps.soundCastTail != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCastTail.PlayOneShotOnCamera(caster.Map);\n\t\t\t}\n\t\t\tif (CasterIsPawn)\n\t\t\t{\n\t\t\t\tCasterPawn.Notify_UsedVerb(CasterPawn, this);\n\t\t\t\tif (CasterPawn.thinker != null && localTargetInfo == CasterPawn.mindState.enemyTarget)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_EngagedTarget();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.mindState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.MentalState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.MentalState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (TerrainDefSource != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.meleeVerbs.Notify_UsedTerrainBasedVerb();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.health != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.health.Notify_UsedVerb(this, localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (EquipmentSource != null)\n\t\t\t\t{\n\t\t\t\t\tEquipmentSource.Notify_UsedWeapon(CasterPawn);\n\t\t\t\t}\n\t\t\t\tif (!CasterPawn.Spawned)\n\t\t\t\t{\n\t\t\t\t\tReset();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t\t{\n\t\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerShot);\n\t\t\t}\n\t\t\tburstShotsLeft--;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tburstShotsLeft = 0;\n\t\t}\n\t\tif (burstShotsLeft > 0)\n\t\t{\n\t\t\tticksToNextBurstShot = TicksBetweenBurstShots;\n\t\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(TicksBetweenBurstShots + 1, currentTarget, this));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tstate = VerbState.Idle;\n\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t{\n\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(verbProps.AdjustedCooldownTicks(this, CasterPawn), currentTarget, this));\n\t\t}\n\t\tif (castCompleteCallback != null)\n\t\t{\n\t\t\tcastCompleteCallback();\n\t\t}\n\t\tif (verbProps.consumeFuelPerBurst > 0f)\n\t\t{\n\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerBurst);\n\t\t}\n\t}\n\n\tpublic virtual void OrderForceTarget(LocalTargetInfo target)\n\t{\n\t\tif (verbProps.IsMeleeAttack)\n\t\t{\n\t\t\tJob job = JobMaker.MakeJob(JobDefOf.AttackMelee, target);\n\t\t\tjob.playerForced = true;\n\t\t\tif (target.Thing is Pawn pawn)\n\t\t\t{\n\t\t\t\tjob.killIncappedTarget = pawn.Downed;\n\t\t\t}\n\t\t\tCasterPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);\n\t\t\treturn;\n\t\t}\n\t\tfloat num = verbProps.EffectiveMinRange(target, CasterPawn);\n\t\tif ((float)CasterPawn.Position.DistanceToSquared(target.Cell) < num * num && CasterPawn.Position.AdjacentTo8WayOrInside(target.Cell))\n\t\t{\n\t\t\tMessages.Message(\"MessageCantShootInMelee\".Translate(), CasterPawn, MessageTypeDefOf.RejectInput, historical: false);\n\t\t\treturn;\n\t\t}\n\t\tJob job2 = JobMaker.MakeJob(verbProps.ai_IsWeapon ? JobDefOf.AttackStatic : JobDefOf.UseVerbOnThing);\n\t\tjob2.verbToUse = this;\n\t\tjob2.targetA = target;\n\t\tjob2.endIfCantShootInMelee = true;\n\t\tCasterPawn.jobs.TryTakeOrderedJob(job2, JobTag.Misc);\n\t}\n\n\tprotected abstract bool TryCastShot();\n\n\tpublic void Notify_PickedUp()\n\t{\n\t\tReset();\n\t}\n\n\tpublic virtual void Reset()\n\t{\n\t\tstate = VerbState.Idle;\n\t\tcurrentTarget = null;\n\t\tcurrentDestination = null;\n\t\tburstShotsLeft = 0;\n\t\tticksToNextBurstShot = 0;\n\t\tcastCompleteCallback = null;\n\t\tsurpriseAttack = false;\n\t\tpreventFriendlyFire = false;\n\t}\n\n\tpublic virtual void Notify_EquipmentLost()\n\t{\n\t\tif (!CasterIsPawn)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tPawn casterPawn = CasterPawn;\n\t\tif (casterPawn.Spawned)\n\t\t{\n\t\t\tif (casterPawn.stances.curStance is Stance_Warmup stance_Warmup && stance_Warmup.verb == this)\n\t\t\t{\n\t\t\t\tcasterPawn.stances.CancelBusyStanceSoft();\n\t\t\t}\n\t\t\tif (casterPawn.CurJob != null && casterPawn.CurJob.def == JobDefOf.AttackStatic)\n\t\t\t{\n\t\t\t\tcasterPawn.jobs.EndCurrentJob(JobCondition.Incompletable);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual float HighlightFieldRadiusAroundTarget(out bool needLOSToCenter)\n\t{\n\t\tneedLOSToCenter = false;\n\t\treturn 0f;\n\t}\n\n\tprivate bool CausesTimeSlowdown(LocalTargetInfo castTarg)\n\t{\n\t\tif (!verbProps.CausesTimeSlowdown)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!castTarg.HasThing)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tThing thing = castTarg.Thing;\n\t\tif (thing.def.category != ThingCategory.Pawn && (thing.def.building == null || !thing.def.building.IsTurret))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tPawn pawn = thing as Pawn;\n\t\tbool flag = pawn?.Downed ?? false;\n\t\tif ((CasterPawn != null && CasterPawn.Faction == Faction.OfPlayer && CasterPawn.IsShambler) || (pawn != null && pawn.Faction == Faction.OfPlayer && pawn.IsShambler))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (thing.Faction != Faction.OfPlayer || !caster.HostileTo(Faction.OfPlayer))\n\t\t{\n\t\t\tif (caster.Faction == Faction.OfPlayer && thing.HostileTo(Faction.OfPlayer))\n\t\t\t{\n\t\t\t\treturn !flag;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool CanHitTarget(LocalTargetInfo targ)\n\t{\n\t\tif (caster == null || !caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (targ == caster)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn CanHitTargetFrom(caster.Position, targ);\n\t}\n\n\tpublic virtual bool ValidateTarget(LocalTargetInfo target, bool showMessages = true)\n\t{\n\t\tif (CasterIsPawn && target.Thing is Pawn p && (p.InSameExtraFaction(caster as Pawn, ExtraFactionType.HomeFaction) || p.InSameExtraFaction(caster as Pawn, ExtraFactionType.MiniFaction)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn victim && HistoryEventUtility.IsKillingInnocentAnimal(CasterPawn, victim) && !new HistoryEvent(HistoryEventDefOf.KilledInnocentAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn pawn && CasterPawn.Ideo != null && CasterPawn.Ideo.IsVeneratedAnimal(pawn) && !new HistoryEvent(HistoryEventDefOf.HuntedVeneratedAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void DrawHighlight(LocalTargetInfo target)\n\t{\n\t\tverbProps.DrawRadiusRing(caster.Position, this);\n\t\tif (target.IsValid)\n\t\t{\n\t\t\tGenDraw.DrawTargetHighlight(target);\n\t\t\tDrawHighlightFieldRadiusAroundTarget(target);\n\t\t}\n\t}\n\n\tprotected void DrawHighlightFieldRadiusAroundTarget(LocalTargetInfo target)\n\t{\n\t\tbool needLOSToCenter;\n\t\tfloat num = HighlightFieldRadiusAroundTarget(out needLOSToCenter);\n\t\tif (!(num > 0.2f) || !TryFindShootLineFromTo(caster.Position, target, out var resultingLine))\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (needLOSToCenter)\n\t\t{\n\t\t\tGenExplosion.RenderPredictedAreaOfEffect(resultingLine.Dest, num, verbProps.explosionRadiusRingColor);\n\t\t\treturn;\n\t\t}\n\t\tGenDraw.DrawFieldEdges((from x in GenRadial.RadialCellsAround(resultingLine.Dest, num, useCenter: true)\n\t\t\twhere x.InBounds(Find.CurrentMap)\n\t\t\tselect x).ToList(), verbProps.explosionRadiusRingColor);\n\t}\n\n\tpublic virtual void OnGUI(LocalTargetInfo target)\n\t{\n\t\tTexture2D icon = ((!target.IsValid) ? TexCommand.CannotShoot : ((!(UIIcon != BaseContent.BadTex)) ? TexCommand.Attack : UIIcon));\n\t\tGenUI.DrawMouseAttachment(icon);\n\t}\n\n\tpublic virtual bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ)\n\t{\n\t\tif (targ.Thing != null && targ.Thing == caster)\n\t\t{\n\t\t\treturn targetParams.canTargetSelf;\n\t\t}\n\t\tif (targ.Pawn != null && targ.Pawn.IsPsychologicallyInvisible() && caster.HostileTo(targ.Pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (ApparelPreventsShooting())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tShootLine resultingLine;\n\t\treturn TryFindShootLineFromTo(root, targ, out resultingLine);\n\t}\n\n\tpublic bool ApparelPreventsShooting()\n\t{\n\t\treturn FirstApparelPreventingShooting() != null;\n\t}\n\n\tpublic Apparel FirstApparelPreventingShooting()\n\t{\n\t\tif (CasterIsPawn && CasterPawn.apparel != null)\n\t\t{\n\t\t\tList wornApparel = CasterPawn.apparel.WornApparel;\n\t\t\tfor (int i = 0; i < wornApparel.Count; i++)\n\t\t\t{\n\t\t\t\tif (!wornApparel[i].AllowVerbCast(this))\n\t\t\t\t{\n\t\t\t\t\treturn wornApparel[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic bool TryFindShootLineFromTo(IntVec3 root, LocalTargetInfo targ, out ShootLine resultingLine, bool ignoreRange = false)\n\t{\n\t\tif (targ.HasThing && targ.Thing.Map != caster.Map)\n\t\t{\n\t\t\tresultingLine = default(ShootLine);\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.IsMeleeAttack || EffectiveRange <= 1.42f)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn ReachabilityImmediate.CanReachImmediate(root, targ, caster.Map, PathEndMode.Touch, null);\n\t\t}\n\t\tCellRect occupiedRect = (targ.HasThing ? targ.Thing.OccupiedRect() : CellRect.SingleCell(targ.Cell));\n\t\tif (!ignoreRange && OutOfRange(root, targ, occupiedRect))\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn false;\n\t\t}\n\t\tif (!verbProps.requireLineOfSight)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn true;\n\t\t}\n\t\tIntVec3 goodDest;\n\t\tif (CasterIsPawn)\n\t\t{\n\t\t\tif (CanHitFromCellIgnoringRange(root, targ, out goodDest))\n\t\t\t{\n\t\t\t\tresultingLine = new ShootLine(root, goodDest);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tShootLeanUtility.LeanShootingSourcesFromTo(root, occupiedRect.ClosestCellTo(root), caster.Map, tempLeanShootSources);\n\t\t\tfor (int i = 0; i < tempLeanShootSources.Count; i++)\n\t\t\t{\n\t\t\t\tIntVec3 intVec = tempLeanShootSources[i];\n\t\t\t\tif (CanHitFromCellIgnoringRange(intVec, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(intVec, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tforeach (IntVec3 item in caster.OccupiedRect())\n\t\t\t{\n\t\t\t\tif (CanHitFromCellIgnoringRange(item, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(item, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\treturn false;\n\t}\n\n\tpublic bool OutOfRange(IntVec3 root, LocalTargetInfo targ, CellRect occupiedRect)\n\t{\n\t\tfloat num = verbProps.EffectiveMinRange(targ, caster);\n\t\tfloat num2 = occupiedRect.ClosestDistSquaredTo(root);\n\t\tif (num2 > EffectiveRange * EffectiveRange || num2 < num * num)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitFromCellIgnoringRange(IntVec3 sourceCell, LocalTargetInfo targ, out IntVec3 goodDest)\n\t{\n\t\tif (targ.Thing != null)\n\t\t{\n\t\t\tif (targ.Thing.Map != caster.Map)\n\t\t\t{\n\t\t\t\tgoodDest = IntVec3.Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tShootLeanUtility.CalcShootableCellsOf(tempDestList, targ.Thing, sourceCell);\n\t\t\tfor (int i = 0; i < tempDestList.Count; i++)\n\t\t\t{\n\t\t\t\tif (CanHitCellFromCellIgnoringRange(sourceCell, tempDestList[i], targ.Thing.def.Fillage == FillCategory.Full))\n\t\t\t\t{\n\t\t\t\t\tgoodDest = tempDestList[i];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (CanHitCellFromCellIgnoringRange(sourceCell, targ.Cell))\n\t\t{\n\t\t\tgoodDest = targ.Cell;\n\t\t\treturn true;\n\t\t}\n\t\tgoodDest = IntVec3.Invalid;\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitCellFromCellIgnoringRange(IntVec3 sourceSq, IntVec3 targetLoc, bool includeCorners = false)\n\t{\n\t\tif (verbProps.mustCastOnOpenGround && (!targetLoc.Standable(caster.Map) || caster.Map.thingGrid.CellContains(targetLoc, ThingCategory.Pawn)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.requireLineOfSight)\n\t\t{\n\t\t\tif (!includeCorners)\n\t\t\t{\n\t\t\t\tif (!GenSight.LineOfSight(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!GenSight.LineOfSightToEdges(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic override string ToString()\n\t{\n\t\tstring text = ((verbProps == null) ? \"null\" : ((!verbProps.label.NullOrEmpty()) ? verbProps.label : ((HediffCompSource != null) ? HediffCompSource.Def.label : ((EquipmentSource != null) ? EquipmentSource.def.label : ((verbProps.AdjustedLinkedBodyPartsGroup(tool) == null) ? \"unknown\" : verbProps.AdjustedLinkedBodyPartsGroup(tool).defName)))));\n\t\tif (tool != null)\n\t\t{\n\t\t\ttext = text + \"/\" + loadID;\n\t\t}\n\t\treturn $\"{GetType()}({text})\";\n\t}\n}\n\n", "timestamp": "2025-08-22 19:48:28,843" + }, + "ThingOwner-TryAdd-TryAddRange-TryTransferToContainer": { + "keywords": [ + "ThingOwner", + "TryAdd", + "TryAddRange", + "TryTransferToContainer" + ], + "question": "ThingOwner class virtual methods TryAdd TryAddRange TryTransferToContainer", + "embedding": [ + 0.006078479811549187, + -0.0008539823465980589, + -0.02052130177617073, + 0.011929108761250973, + -0.06403351575136185, + 0.04042520001530647, + 0.004759148694574833, + 0.06885513663291931, + 0.05618367716670036, + 0.029517745599150658, + -0.037220582365989685, + -0.05224405974149704, + -0.026269029825925827, + -0.02418161928653717, + -0.03651497885584831, + -0.009474196471273899, + -0.029929347336292267, + -0.1125437542796135, + -0.05239105969667435, + -0.0003801346756517887, + 0.06356311589479446, + 0.041513003408908844, + 0.008827393874526024, + 0.054743070155382156, + 0.06150510534644127, + 0.012568562291562557, + 0.012465661391615868, + 0.029032643884420395, + 0.009731448255479336, + 0.016728682443499565, + -0.01001809909939766, + 0.00038955191848799586, + 0.0012706374982371926, + -0.05915309116244316, + 0.025989728048443794, + 0.011745357885956764, + 0.011502807028591633, + -0.04039580002427101, + -0.0007308692438527942, + 0.048480838537216187, + -0.02247641049325466, + 0.0027636135928332806, + -0.021476805210113525, + -0.004314471501857042, + -0.029238443821668625, + 0.016522882506251335, + 0.029253143817186356, + -0.046746231615543365, + -0.004384296480566263, + 0.04163060709834099, + 0.002495337277650833, + 0.013127164915204048, + -0.03886699303984642, + 0.0032891412265598774, + 0.02394641749560833, + 0.021623807027935982, + -0.038131989538669586, + -0.014913223683834076, + -0.018860192969441414, + 0.03345736488699913, + -0.003965344745665789, + 0.0423068106174469, + -0.02116810530424118, + -0.0380437895655632, + 0.03951379656791687, + -0.01206875964999199, + 0.03472157195210457, + -0.005681578069925308, + 0.0306643508374691, + -0.023858217522501945, + -0.003750355914235115, + -0.018742593005299568, + -0.03822018951177597, + 0.03433936834335327, + -0.03669138252735138, + 0.05800648778676987, + 0.03536837548017502, + 0.029429545626044273, + -0.010988304391503334, + 0.022829212248325348, + -0.025122424587607384, + 0.009753498248755932, + -0.017522485926747322, + 0.054537270218133926, + 0.10978014022111893, + 0.054272666573524475, + -0.010973604395985603, + -0.07526437193155289, + -0.03580937534570694, + 0.009900499135255814, + 0.02180020697414875, + 0.02071240171790123, + 0.031634557992219925, + 0.002998814918100834, + -0.0067252833396196365, + 0.08014479279518127, + -0.10060729831457138, + -0.016037778928875923, + -0.030723150819540024, + 0.018874892964959145, + -0.023667117580771446, + -0.01815458945930004, + -0.006045404821634293, + 0.05118565261363983, + -0.03172275796532631, + 0.1239510104060173, + -0.02588682807981968, + -0.012708213180303574, + -0.021021103486418724, + 0.028812142089009285, + 0.004939224570989609, + -0.009988699108362198, + 0.03254596143960953, + 0.0020745478104799986, + -0.03125235438346863, + -0.0010455426527187228, + 0.0052846758626401424, + -0.04768703505396843, + -0.02501952275633812, + -0.026371929794549942, + 0.05541927367448807, + 0.02334371581673622, + 0.025519326329231262, + -0.013876868411898613, + -0.020609501749277115, + 0.04318881407380104, + 0.011348456144332886, + 0.0282682403922081, + -0.01594957895576954, + -0.007335336413234472, + -0.029870547354221344, + -0.00015986329526640475, + -0.003902869299054146, + -0.024225719273090363, + -0.019756898283958435, + 0.018051689490675926, + 0.05530167371034622, + 0.00983434822410345, + -0.0724419578909874, + 0.01809578947722912, + -0.029400145635008812, + 0.02785663679242134, + 0.0012660437496379018, + -0.013185964897274971, + 0.06150510534644127, + -0.005376551765948534, + -0.07561717182397842, + -0.016537582501769066, + -0.02566632628440857, + 0.005369201302528381, + -0.02784193679690361, + 0.020447801798582077, + -0.012134909629821777, + 0.05133265256881714, + 0.018624991178512573, + 0.002504524774849415, + 0.0016546769766137004, + -0.021271005272865295, + 0.00037186589906923473, + -0.03924919292330742, + 0.03822018951177597, + 0.0055345771834254265, + -0.01622888073325157, + 0.014927923679351807, + 0.012340710498392582, + -0.03774978592991829, + -0.012715563178062439, + 0.009385996498167515, + 0.07032514363527298, + -0.00907729472965002, + 0.05956469476222992, + 0.008283491246402264, + 0.0056448280811309814, + 0.02052130177617073, + 0.04901004210114479, + -0.041748207062482834, + 0.010245950892567635, + 0.039160992950201035, + 0.011561607010662556, + -0.05009784922003746, + 0.05909429118037224, + -0.0019367345375940204, + 0.012767013162374496, + 0.014354621060192585, + 0.02118280529975891, + -0.02609262801706791, + 0.028753342106938362, + 0.013560816645622253, + 0.011987908743321896, + 0.05150905251502991, + 0.003939619287848473, + 0.04095440357923508, + 0.006879633758217096, + 0.017742987722158432, + -0.04236561059951782, + 0.01855149120092392, + -0.03727938234806061, + 0.02524002455174923, + -0.10913334041833878, + -0.008768592961132526, + 0.0043585714884102345, + -0.018433891236782074, + 0.036838382482528687, + 0.01380336843430996, + 0.039601996541023254, + -0.023035014048218727, + 0.0065929824486374855, + -0.02134450525045395, + 0.01046645175665617, + 0.02631312981247902, + 0.026033828034996986, + 0.006534182466566563, + -0.007155260536819696, + -0.04245381057262421, + -0.02695993334054947, + -0.0029933021869510412, + -0.027136333286762238, + -0.003075990127399564, + 0.037661585956811905, + 0.027445035055279732, + -0.013935668393969536, + 0.004376946482807398, + -0.002739726100116968, + -0.042395010590553284, + -0.008871493861079216, + -0.020859403535723686, + -0.0027525885961949825, + -0.026886433362960815, + 0.003226666012778878, + -0.0056448280811309814, + -0.04051339998841286, + 0.016566982492804527, + -0.08467242121696472, + -0.012517111375927925, + 0.007644037716090679, + -0.028371140360832214, + -0.025945628061890602, + -0.002388761844485998, + -0.007236110512167215, + 0.002947364468127489, + 0.0023005614057183266, + 0.02610732801258564, + -0.0009775548242032528, + 0.05130325257778168, + 0.002002884866669774, + -0.004990674555301666, + -0.03366316482424736, + 0.04539382457733154, + 0.031222954392433167, + 0.0048326486721634865, + 0.0332515649497509, + 0.01165715791285038, + -0.05888849124312401, + 0.020653601735830307, + -0.023167314007878304, + 0.03627977892756462, + 0.0019587846472859383, + -0.003325891448184848, + -0.008606892079114914, + -0.033810168504714966, + -0.014001819305121899, + 0.041571807116270065, + 0.00426669605076313, + -0.009525647386908531, + -0.020168500021100044, + 0.017860587686300278, + 0.021535607054829597, + 0.01794878952205181, + -0.03883759304881096, + -0.023446615785360336, + -0.017331385985016823, + 0.052773259580135345, + -0.00777633860707283, + -0.042424410581588745, + -0.024505021050572395, + 0.02981174737215042, + 0.01637588068842888, + 0.04483522102236748, + -0.014185570180416107, + -0.002296886406838894, + 0.0028260890394449234, + 0.006390856578946114, + 0.007460286840796471, + -0.015361575409770012, + 0.039631396532058716, + 0.02265281230211258, + 0.013671067543327808, + 0.0023611991200596094, + 0.003437979379668832, + -0.05724208429455757, + 0.02657773159444332, + 0.03513317182660103, + 0.043482813984155655, + 0.024211019277572632, + -0.03304576501250267, + 0.026886433362960815, + 0.003015352413058281, + 0.009011144749820232, + 0.002293211407959461, + 0.021006403490900993, + -0.016522882506251335, + 0.04654042795300484, + -0.012656762264668941, + 0.007361061405390501, + 0.03777918592095375, + 0.023814117535948753, + 0.006074804812669754, + -0.1676984280347824, + 0.017845887690782547, + -0.12159900367259979, + 0.006387181580066681, + 0.01661108247935772, + -0.03904339298605919, + 0.02526942454278469, + 0.00588370393961668, + 0.04207160696387291, + -0.021756106987595558, + -0.015582077205181122, + 0.008349641226232052, + 0.026915833353996277, + -0.009841698221862316, + 0.04107200354337692, + 0.041307203471660614, + 0.015243975445628166, + -0.02895914390683174, + 0.004509247373789549, + 0.04042520001530647, + -0.012384811416268349, + -0.013222714886069298, + -0.015523276291787624, + -0.05806528776884079, + 0.011289656162261963, + 0.010672252625226974, + 0.0041564456187188625, + 0.04424721747636795, + -0.03319276496767998, + -0.01392831839621067, + 0.0003445329493843019, + -0.010076900012791157, + -0.0018365903524681926, + 0.02867984212934971, + -0.05286145955324173, + 0.026386629790067673, + -0.028385840356349945, + 0.02873864211142063, + 0.006611357443034649, + -0.023696517571806908, + 0.01813988946378231, + 0.007982139475643635, + 0.009106694720685482, + -0.02371121756732464, + -0.007489686831831932, + -0.02848874032497406, + 0.03627977892756462, + -0.006291631143540144, + -0.01101035438477993, + 0.03348676487803459, + 0.00582857895642519, + -0.043482813984155655, + 0.012752313166856766, + 0.03780858591198921, + -0.02719513513147831, + 0.05747728422284126, + 0.002901426749303937, + 0.02415221929550171, + -0.006287956144660711, + -0.004347546491771936, + 0.005413301754742861, + -0.0067252833396196365, + -0.01045175176113844, + -0.006096855271607637, + -0.060329098254442215, + -0.015030824579298496, + 0.000876951206009835, + 0.024005219340324402, + -0.018242789432406425, + 0.03084075264632702, + -0.04792223498225212, + 0.019815698266029358, + 0.07591117173433304, + -0.005692603066563606, + 0.008820043876767159, + -0.026680631563067436, + -0.00572935352101922, + -0.023182014003396034, + 0.007526437286287546, + -0.012678812257945538, + 0.02157970704138279, + 0.03927859291434288, + -0.015493876300752163, + 0.001029005041345954, + 0.03145815432071686, + -0.06156390532851219, + -0.006188730709254742, + -0.009547697380185127, + 0.01621418073773384, + 0.013876868411898613, + 0.032281357795000076, + 0.01500142365694046, + -0.004571722354739904, + 0.01594957895576954, + -0.013163914903998375, + 0.00567055307328701, + 0.01983039826154709, + 0.006773058325052261, + -0.01940409652888775, + 0.029635345563292503, + 0.01944819651544094, + -0.03777918592095375, + 0.0029051017481833696, + -0.056036677211523056, + 0.0069384342059493065, + 0.03883759304881096, + -0.018169289454817772, + -0.031222954392433167, + -0.033369164913892746, + 0.02047720178961754, + -0.01944819651544094, + 0.019345294684171677, + -0.1034885123372078, + 0.03084075264632702, + 0.03645617887377739, + 0.00013700926501769572, + 0.013340315781533718, + 0.030517350882291794, + -0.02848874032497406, + -0.007067060098052025, + -0.06303390860557556, + -0.012620012275874615, + 0.007078085094690323, + -0.02806243859231472, + -0.03777918592095375, + 0.029605945572257042, + 0.05092105269432068, + 0.013840118423104286, + -0.0530378632247448, + 0.04901004210114479, + -0.03263416141271591, + -0.03977839648723602, + -0.03448637202382088, + -0.024710822850465775, + -0.002739726100116968, + -0.012046709656715393, + -0.0039065442979335785, + -0.07532317191362381, + -0.013112464919686317, + 0.003570280037820339, + 0.02591622807085514, + 0.04118960350751877, + 0.046716831624507904, + 0.0013790505472570658, + -0.01370046753436327, + -0.07455876469612122, + 0.03178155794739723, + 0.02895914390683174, + 0.011605706997215748, + 0.010172449983656406, + -0.027959538623690605, + -0.02544582635164261, + -0.017360785976052284, + -0.006875958759337664, + -0.02741563506424427, + -0.008930293843150139, + 0.027048133313655853, + 0.00453864736482501, + -0.0209623035043478, + -0.0742647647857666, + 0.014582471922039986, + -0.004406346939504147, + -0.00652683200314641, + 0.00048693991266191006, + -0.0028830517549067736, + 0.004759148694574833, + -0.024534421041607857, + 0.03663258254528046, + -0.04818683862686157, + -0.018816092982888222, + 0.0018806905718520284, + 0.004549672361463308, + -0.011929108761250973, + 0.006159330252557993, + -0.0040351697243750095, + -0.031222954392433167, + 0.014237020164728165, + -0.017169684171676636, + -0.05791828781366348, + -0.06797313690185547, + -0.019918598234653473, + 0.01466332282871008, + -0.04224800691008568, + -0.0076293377205729485, + -0.015493876300752163, + -0.023784717544913292, + 0.005016399547457695, + -0.024754922837018967, + 0.017316685989499092, + -0.035515375435352325, + 0.0095109473913908, + -0.014369321055710316, + -0.09225765615701675, + -0.01424437016248703, + 0.04633462801575661, + -0.017419585958123207, + -0.01218636054545641, + 0.021756106987595558, + 0.004568047355860472, + -0.06250470876693726, + -0.03366316482424736, + -0.051450252532958984, + 0.07173635065555573, + 0.0010703490115702152, + 0.005835928954184055, + 0.025798628106713295, + -0.0375145860016346, + -0.0009986861841753125, + 0.0051781004294753075, + 0.07050155103206635, + -0.00512665044516325, + 0.007923339493572712, + 0.05371406674385071, + -0.013185964897274971, + -0.0077469381503760815, + -0.0015150262042880058, + -0.008570142090320587, + -0.026033828034996986, + 0.004303446039557457, + -0.030091049149632454, + 0.0119658587500453, + 0.015611477196216583, + -0.0037264684215188026, + -0.006670157890766859, + 0.043071214109659195, + -0.002585375215858221, + -0.005159725435078144, + 0.00894499383866787, + 0.05121505260467529, + 0.0029675771947950125, + 0.016125978901982307, + 0.0023464991245418787, + 0.10260650515556335, + 0.022549910470843315, + 0.029473645612597466, + 0.00970939826220274, + -0.010848653502762318, + 0.08096799999475479, + -0.04959804564714432, + 0.02371121756732464, + -0.07920399308204651, + 0.027739036828279495, + 0.0026496881619095802, + 0.0036750182043761015, + 0.05927069112658501, + -9.824931476032361e-05, + 0.020374299958348274, + 0.03283996134996414, + -0.026004428043961525, + 0.013671067543327808, + -0.01662578247487545, + 0.021418005228042603, + -0.06791433691978455, + 0.01896309293806553, + -0.019712796434760094, + -0.03945499658584595, + -0.03910219296813011, + 0.006394531577825546, + 0.032516561448574066, + 0.007210385520011187, + 0.02135920524597168, + 0.0004628225869964808, + -0.02569572627544403, + -0.02571042627096176, + 0.03000284731388092, + -0.007607287727296352, + 0.052567459642887115, + 0.0735003650188446, + -0.031164154410362244, + -0.0024457245599478483, + 0.0742647647857666, + 0.06344551593065262, + -0.04213040694594383, + 0.00016238987154792994, + 0.014972023665904999, + -0.0209623035043478, + -0.002914289478212595, + 0.002976764691993594, + 0.03178155794739723, + -0.006166680250316858, + -0.0037411684170365334, + -0.01768418774008751, + -0.004138070624321699, + 0.02246171049773693, + 0.0032450410071760416, + -0.034839171916246414, + -0.004641547799110413, + -0.006074804812669754, + 0.013303565792739391, + 0.018639691174030304, + 0.02738623507320881, + -0.005233225878328085, + 0.04621702805161476, + -0.030987752601504326, + 0.03689718246459961, + -0.009951949119567871, + 0.00426669605076313, + 0.020565401762723923, + 0.020638901740312576, + 0.005538252182304859, + -0.0027360511012375355, + 0.021873708814382553, + -0.0013533254386857152, + 0.014369321055710316, + 0.0500684455037117, + -0.00021659638150595129, + 0.010143049992620945, + 0.00035716581624001265, + -0.008452542126178741, + 0.021506207063794136, + 0.0025614877231419086, + -0.012237810529768467, + 0.0004632819618564099, + -0.009283095598220825, + -0.01165715791285038, + 0.02762143686413765, + -0.037867385894060135, + 0.02657773159444332, + -0.0018025963800027966, + 0.06250470876693726, + -0.00196797214448452, + 0.002647850662469864, + 0.016125978901982307, + -0.007599937729537487, + 0.021418005228042603, + -0.03307516500353813, + 0.02115340530872345, + 0.006159330252557993, + -0.008158540353178978, + -0.04421781748533249, + 0.015934878960251808, + 0.033133964985609055, + 0.012318660505115986, + 0.03131115436553955, + 0.005402276758104563, + 0.00962119735777378, + 0.02005089819431305, + -0.0003475189150776714, + -0.004149095620959997, + -0.006648107897490263, + -0.03360436484217644, + 0.004777523688971996, + -0.012090809643268585, + 0.014567771926522255, + 0.014817672781646252, + 0.002030447591096163, + -0.014090019278228283, + -0.04071919992566109, + 0.012039359658956528, + -0.004042520187795162, + 0.021903108805418015, + 0.011833558790385723, + 0.007452936843037605, + -0.0196686964482069, + 0.009577097371220589, + -0.025798628106713295, + -0.0004687944892793894, + 0.05065644904971123, + -0.018463291227817535, + 0.00022348704806063324, + -0.017007984220981598, + 0.010672252625226974, + -0.02806243859231472, + 0.04950984567403793, + -0.01794878952205181, + 0.022314710542559624, + -0.0037062556948512793, + 0.009224295616149902, + 0.03910219296813011, + 0.005681578069925308, + -0.030576150864362717, + 0.013685767538845539, + 0.027474435046315193, + 0.0019054969307035208, + 0.00907729472965002, + -0.030135149136185646, + 0.056007277220487595, + -0.019301194697618484, + 0.03295756131410599, + 0.0008659261511638761, + 0.01090745348483324, + -0.04624642804265022, + -0.012517111375927925, + 0.04809863865375519, + -0.015155774541199207, + 0.02765083685517311, + 0.010944204404950142, + -0.042189206928014755, + 0.013641667552292347, + -0.008246740326285362, + -0.057300884276628494, + 0.02182960696518421, + 0.05012724921107292, + -0.02028609998524189, + 0.006515807006508112, + 0.09319846332073212, + -0.0019661346450448036, + -0.0142296701669693, + -0.008937643840909004, + -0.019771598279476166, + -0.029267843812704086, + -0.011738007888197899, + 0.014207620173692703, + -0.025813328102231026, + 0.012377461418509483, + 0.005949854385107756, + 0.014604521915316582, + -0.004718723241239786, + 0.01769888773560524, + 0.021506207063794136, + -0.0172725860029459, + -0.0644451156258583, + 0.000543443311471492, + -0.018463291227817535, + 0.0009665297693572938, + -0.008437841199338436, + 0.04030760005116463, + -0.015978978946805, + 0.0016721332212910056, + 0.012737613171339035, + -0.012215760536491871, + -0.04621702805161476, + 0.06550352275371552, + 0.01424437016248703, + -0.041101403534412384, + -0.0015949578955769539, + -0.0012761499965563416, + 0.00680245878174901, + -0.02177080698311329, + 0.02157970704138279, + -0.028121238574385643, + 0.006967834196984768, + 0.03904339298605919, + -0.0044798469170928, + -0.0174636859446764, + 0.11030934751033783, + -0.0419246070086956, + 0.010811903513967991, + -0.02438742108643055, + -0.021476805210113525, + 0.06297510862350464, + -0.0011861120583489537, + 0.00865099299699068, + -0.010760453529655933, + 0.03845538944005966, + -0.004027819726616144, + 0.007254485972225666, + 0.03425116837024689, + 0.000848469790071249, + 0.06373951584100723, + 0.005894728936254978, + 0.005376551765948534, + -0.0012577750021591783, + -0.011899708770215511, + -0.01680218242108822, + 0.01897779293358326, + 0.014913223683834076, + -0.004351221490651369, + 0.0016473268624395132, + 0.0371323823928833, + -0.019139494746923447, + -0.026621831580996513, + 0.027724336832761765, + -0.022520510479807854, + 0.057065680623054504, + -0.01282581314444542, + 0.07155995070934296, + -0.013796018436551094, + 0.03460397198796272, + -0.007192010525614023, + -0.0032321785110980272, + -0.03063495084643364, + -0.04295361042022705, + 0.009996049106121063, + 0.004545997362583876, + -0.06550352275371552, + -0.019727498292922974, + 0.01856619119644165, + 0.03304576501250267, + -0.03087015263736248, + 0.02763613685965538, + -0.00040080666076391935, + 0.07914519309997559, + 0.0052993763238191605, + -0.04706963151693344, + 0.01391361840069294, + -0.007265510968863964, + -0.005946179386228323, + -0.03001754730939865, + -0.029062043875455856, + 0.08631882816553116, + 0.01163510698825121, + 0.02718043327331543, + 0.0055603026412427425, + -0.027592036873102188, + -0.020139100030064583, + 0.007967439480125904, + 0.018654393032193184, + 0.008562792092561722, + -0.008349641226232052, + -0.025195924565196037, + -0.053184863179922104, + 0.0336337648332119, + -0.04509982094168663, + -0.02675413154065609, + 0.028753342106938362, + -0.005799178499728441, + -0.011003004387021065, + 0.026166129857301712, + 0.016522882506251335, + 0.011929108761250973, + -0.026210229843854904, + -0.018198689445853233, + 0.004509247373789549, + 0.026019128039479256, + 0.012649412266910076, + -0.003950644284486771, + 0.025137124583125114, + -0.020374299958348274, + 0.014104719273746014, + -0.04595242813229561, + -0.002906939247623086, + 0.015214575454592705, + 0.07826318591833115, + -0.009422746486961842, + -0.05932949110865593, + 0.07126595079898834, + 0.03307516500353813, + 0.043747417628765106, + -0.031840357929468155, + -0.0011567119508981705, + -0.018727893009781837, + -0.03201675787568092, + -0.017110884189605713, + -0.010973604395985603, + -0.0042740460485219955, + 0.012524462305009365, + -0.03175215795636177, + 0.002971252193674445, + 0.01684628240764141, + -0.016758082434535027, + -0.029899947345256805, + 0.004733423236757517, + 0.05885909125208855, + 0.010216550901532173, + -0.006030704826116562, + -0.01489117369055748, + 0.03469217196106911, + 0.04210100695490837, + -0.004178495611995459, + -0.030135149136185646, + 0.010304750874638557, + -0.004270371049642563, + -0.002925314474850893, + -0.013560816645622253, + -0.025578126311302185, + -0.0079894894734025, + -0.01963929645717144, + -0.014112069271504879, + 0.049068842083215714, + 0.005755078513175249, + 0.03586817532777786, + -0.03216375783085823, + 0.04189520701766014, + 0.07838078588247299, + -0.009518297389149666, + -0.012480361387133598, + 0.01944819651544094, + -0.03451577201485634, + -0.02547522634267807, + 0.024255119264125824, + -0.005755078513175249, + 0.020550701767206192, + -0.03301636129617691, + -0.0239317175000906, + 0.00906259473413229, + 0.009518297389149666, + -0.025519326329231262, + 0.03460397198796272, + -0.0004455959424376488, + -0.016699282452464104, + -0.011157355271279812, + 0.034221768379211426, + 0.04365921393036842, + -0.00841579120606184, + 0.002664388157427311, + 0.018507391214370728, + 0.0014690884854644537, + -0.00981964822858572, + 0.011686557903885841, + 0.024064019322395325, + 0.0001028430851874873, + 0.00013700926501769572, + -0.025813328102231026, + -0.0833200141787529, + 0.06350431591272354, + -0.02591622807085514, + -0.03345736488699913, + -0.005909429397433996, + -0.03369256481528282, + -0.02571042627096176, + -0.011502807028591633, + 0.01985979825258255, + -0.009555047377943993, + 0.015493876300752163, + 0.031840357929468155, + -0.008408441208302975, + -0.003439816879108548, + 0.02528412453830242, + -0.007519087288528681, + 0.06321030855178833, + -0.003658480476588011, + -0.012112859636545181, + -0.011319056153297424, + 0.027018733322620392, + 0.016537582501769066, + -0.040895603597164154, + 0.024563821032643318, + -0.0029510394670069218, + 0.01815458945930004, + -0.019756898283958435, + -0.01962459646165371, + 0.0358387753367424, + 0.048921842128038406, + 0.04033700004220009, + 0.02672473154962063, + 0.021315105259418488, + 0.061387501657009125, + -0.008151190355420113, + -0.03472157195210457, + 0.006409231573343277, + 0.0015637201722711325, + -0.054919470101594925, + 0.029032643884420395, + -0.009988699108362198, + 0.019168894737958908, + 0.005350826308131218, + -0.015846678987145424, + 0.032928161323070526, + 0.02134450525045395, + -0.031575754284858704, + 0.03604457899928093, + -0.01621418073773384, + -0.04512922465801239, + -0.01686098240315914, + 0.008327591232955456, + 0.007585237268358469, + -0.05991749465465546, + 0.013002214021980762, + 0.018669093027710915, + -0.006409231573343277, + -0.0005985685857012868, + -0.021285705268383026, + 0.06215190514922142, + 0.005152375437319279, + 0.0013165752170607448, + -0.003654805477708578, + -0.015346875414252281, + -0.03866118937730789, + -0.01946289651095867, + -0.03736758604645729, + -0.009657947346568108, + 0.005251600872725248, + 0.007353711407631636, + 0.0388081930577755, + -0.011730657890439034, + -0.06850233674049377, + 0.023417215794324875, + 0.024255119264125824, + -0.00358681776560843, + -0.03283996134996414, + -0.07708717882633209, + 0.0077469381503760815, + 0.0025780252180993557, + 0.032722361385822296, + -0.024284519255161285, + -0.020550701767206192, + -0.018272189423441887, + -0.06115230172872543, + 0.013002214021980762, + -0.024284519255161285, + 0.020330199971795082, + -0.04430601745843887, + -0.00432549649849534, + -0.06450391560792923, + -0.007379436399787664, + 0.028106538578867912, + 0.03525077551603317, + -0.012634712271392345, + -0.025137124583125114, + -0.020388999953866005, + 0.031193554401397705, + -0.003627242986112833, + 0.008151190355420113, + 0.00810709036886692, + -0.0102533008903265, + -0.005714653059840202, + -0.006251205690205097, + 0.0020010473672300577, + -0.08620122820138931, + 0.0021792857442051172, + 0.002517387503758073, + 0.02632782980799675, + 0.08302600681781769, + 0.004759148694574833, + 0.015258675441145897, + -0.008695092983543873, + 0.061387501657009125, + -0.04704023152589798, + 0.00010112042218679562, + 0.011510157026350498, + -0.01123820524662733, + -0.014861773699522018, + -0.036338578909635544, + 0.021256305277347565, + 0.05330246314406395, + 0.011495457030832767 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingOwner.txt\n\npublic class ThingOwner : ThingOwner, IList, ICollection, IEnumerable, IEnumerable where T : Thing\n{\n\tprivate List innerList = new List();\n\n\tpublic List InnerListForReading => innerList;\n\n\tpublic new T this[int index] => innerList[index];\n\n\tpublic override int Count => innerList.Count;\n\n\tT IList.this[int index]\n\t{\n\t\tget\n\t\t{\n\t\t\treturn innerList[index];\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow setting individual elements.\");\n\t\t}\n\t}\n\n\tbool ICollection.IsReadOnly => true;\n\n\tpublic ThingOwner()\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner, oneStackOnly, contentsLookMode, removeContentsIfDestroyed)\n\t{\n\t}\n\n\tpublic override void ExposeData()\n\t{\n\t\tbase.ExposeData();\n\t\tScribe_Collections.Look(ref innerList, \"innerList\", true, contentsLookMode);\n\t\tif (Scribe.mode == LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\tint num = innerList.RemoveAll((T x) => x == null || (x is MinifiedThing minifiedThing && minifiedThing.InnerThing == null));\n\t\t\tif (num > 0)\n\t\t\t{\n\t\t\t\tLog.Warning($\"ThingOwner removed {num} invalid entries during PostLoadInit.\");\n\t\t\t}\n\t\t}\n\t\tif (Scribe.mode != LoadSaveMode.LoadingVars && Scribe.mode != LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] != null)\n\t\t\t{\n\t\t\t\tinnerList[i].holdingOwner = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic List.Enumerator GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tpublic override int GetCountCanAccept(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (!(item is T))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn base.GetCountCanAccept(item, canMergeWithExistingStacks);\n\t}\n\n\tpublic override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (count <= 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item?.ToString() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + count + \" of \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tint stackCount = item.stackCount;\n\t\tint num = Mathf.Min(stackCount, count);\n\t\tThing thing = item.SplitOff(num);\n\t\tif (!TryAdd((T)thing, canMergeWithExistingStacks))\n\t\t{\n\t\t\tif (thing != item)\n\t\t\t{\n\t\t\t\tint result = stackCount - item.stackCount - thing.stackCount;\n\t\t\t\titem.TryAbsorbStack(thing, respectStackLimit: false);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn stackCount - item.stackCount;\n\t\t}\n\t\tCompPushable compPushable = item.TryGetComp();\n\t\tif (compPushable != null && owner is Pawn pawn)\n\t\t{\n\t\t\tcompPushable.OnStartedCarrying(pawn);\n\t\t}\n\t\treturn num;\n\t}\n\n\tpublic override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (canMergeWithExistingStacks)\n\t\t{\n\t\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t\t{\n\t\t\t\tT val = innerList[i];\n\t\t\t\tif (!val.CanStackWith(item))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint num = Mathf.Min(item.stackCount, val.def.stackLimit - val.stackCount);\n\t\t\t\tif (num > 0)\n\t\t\t\t{\n\t\t\t\t\tThing other = item.SplitOff(num);\n\t\t\t\t\tint stackCount = val.stackCount;\n\t\t\t\t\tval.TryAbsorbStack(other, respectStackLimit: true);\n\t\t\t\t\tif (val.stackCount > stackCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tNotifyAddedAndMergedWith(val, val.stackCount - stackCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Destroyed || item.stackCount == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Count >= maxStacks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\titem.holdingOwner = this;\n\t\tinnerList.Add(item2);\n\t\tNotifyAdded(item2);\n\t\treturn true;\n\t}\n\n\tprotected override void NotifyAdded(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemAdded(item as T);\n\t\t}\n\t\tbase.NotifyAdded(item);\n\t}\n\n\tprotected override void NotifyRemoved(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemRemoved(item as T);\n\t\t}\n\t\tbase.NotifyRemoved(item);\n\t}\n\n\tpublic void TryAddRangeOrTransfer(IEnumerable things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)\n\t{\n\t\tif (things == this)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (things is ThingOwner thingOwner)\n\t\t{\n\t\t\tthingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);\n\t\t\tif (destroyLeftover)\n\t\t\t{\n\t\t\t\tthingOwner.ClearAndDestroyContents();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (things is IList list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t{\n\t\t\t\tif (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t\t{\n\t\t\t\t\tlist[i].Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tforeach (T thing in things)\n\t\t{\n\t\t\tif (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t{\n\t\t\t\tthing.Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override int IndexOf(Thing item)\n\t{\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t\treturn innerList.IndexOf(item2);\n\t}\n\n\tpublic override bool Remove(Thing item)\n\t{\n\t\tif (!Contains(item))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner == this)\n\t\t{\n\t\t\titem.holdingOwner = null;\n\t\t}\n\t\tint index = innerList.LastIndexOf((T)item);\n\t\tinnerList.RemoveAt(index);\n\t\tNotifyRemoved(item);\n\t\treturn true;\n\t}\n\n\tpublic int RemoveAll(Predicate predicate)\n\t{\n\t\tint num = 0;\n\t\tfor (int num2 = innerList.Count - 1; num2 >= 0; num2--)\n\t\t{\n\t\t\tif (predicate(innerList[num2]))\n\t\t\t{\n\t\t\t\tRemove(innerList[num2]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t\treturn num;\n\t}\n\n\tprotected override Thing GetAt(int index)\n\t{\n\t\treturn innerList[index];\n\t}\n\n\tpublic void GetThingsOfType(List list) where J : Thing\n\t{\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] is J item)\n\t\t\t{\n\t\t\t\tlist.Add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic int TryTransferToContainer(Thing item, ThingOwner otherContainer, int stackCount, out T resultingTransferredItem, bool canMergeWithExistingStacks = true)\n\t{\n\t\tThing resultingTransferredItem2;\n\t\tint result = TryTransferToContainer(item, otherContainer, stackCount, out resultingTransferredItem2, canMergeWithExistingStacks);\n\t\tresultingTransferredItem = (T)resultingTransferredItem2;\n\t\treturn result;\n\t}\n\n\tpublic new T Take(Thing thing, int count)\n\t{\n\t\treturn (T)base.Take(thing, count);\n\t}\n\n\tpublic new T Take(Thing thing)\n\t{\n\t\treturn (T)base.Take(thing);\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, int count, out T resultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing resultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, count, out resultingThing2, placedAction2, nearPlaceValidator);\n\t\tresultingThing = (T)resultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, mode, out lastResultingThing2, placedAction2, nearPlaceValidator);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, out lastResultingThing2, placedAction2, nearPlaceValidator, playDropSound: true);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tint IList.IndexOf(T item)\n\t{\n\t\treturn innerList.IndexOf(item);\n\t}\n\n\tvoid IList.Insert(int index, T item)\n\t{\n\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow inserting individual elements at any position.\");\n\t}\n\n\tvoid ICollection.Add(T item)\n\t{\n\t\tTryAdd(item);\n\t}\n\n\tvoid ICollection.CopyTo(T[] array, int arrayIndex)\n\t{\n\t\tinnerList.CopyTo(array, arrayIndex);\n\t}\n\n\tbool ICollection.Contains(T item)\n\t{\n\t\treturn innerList.Contains(item);\n\t}\n\n\tbool ICollection.Remove(T item)\n\t{\n\t\treturn Remove(item);\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n}\n\n", + "timestamp": "2025-08-24 20:52:47,868" + }, + "IThingHolder-ThingOwner-virtual methods": { + "keywords": [ + "ThingOwner", + "IThingHolder", + "virtual methods" + ], + "question": "public class ThingOwner : IThingHolder virtual methods", + "embedding": [ + 0.0014595270622521639, + 0.0027306692209094763, + 0.040208324790000916, + 0.010125240311026573, + -0.06315106898546219, + 0.01258339174091816, + 0.016694942489266396, + 0.05387447401881218, + 0.012312701903283596, + 0.09405353665351868, + -0.051387060433626175, + -0.04582695662975311, + -0.01600724458694458, + -0.02946854755282402, + 0.06917939335107803, + -0.017587484791874886, + 0.015012279152870178, + -0.08732288330793381, + -0.03616993501782417, + -0.011486003175377846, + 0.03924262523651123, + 0.06478983163833618, + -0.010205715894699097, + 0.04246162995696068, + 0.019665207713842392, + -0.02184535376727581, + 0.02374749444425106, + 0.061570826917886734, + -0.04240310192108154, + -0.016065772622823715, + 0.0027270112186670303, + 0.018231285735964775, + -0.01777769811451435, + 0.004466372542083263, + 0.006317301653325558, + 0.020148057490587234, + -0.06227315589785576, + -0.0003463633474893868, + -0.0028294341173022985, + -0.013132086023688316, + -0.021128391847014427, + -0.0050443303771317005, + -0.03991568833589554, + 0.025942271575331688, + -0.02516678348183632, + 0.00871326681226492, + 0.017953280359506607, + -0.04614885523915291, + -0.03254123404622078, + 0.08129455894231796, + -0.012927239760756493, + 0.012854080647230148, + 0.002642878098413348, + -0.007034262176603079, + 0.006178298965096474, + 0.02832726202905178, + 0.022035567089915276, + -0.020996706560254097, + -0.016621781513094902, + 0.02336706593632698, + 0.00079011992784217, + 0.019094565883278847, + -0.03570171445608139, + -0.029044223949313164, + 0.07450538128614426, + 0.022664736956357956, + 0.011412843130528927, + 0.006031980272382498, + 0.02172829769551754, + -0.019767630845308304, + -0.014375792816281319, + 0.026761654764413834, + -0.03482380509376526, + 0.021303974092006683, + -0.01650472730398178, + 0.04088139161467552, + -0.00806214939802885, + 0.013139401562511921, + -0.023191483691334724, + -0.014551375061273575, + -0.00603929627686739, + 0.009130274876952171, + 0.007443954236805439, + 0.009444859810173512, + 0.08738141506910324, + -0.0059844269417226315, + 0.019489625468850136, + -0.08199688792228699, + -0.003321430180221796, + 0.0681258961558342, + -0.020806491374969482, + 0.007103763520717621, + 0.01954815164208412, + -0.0027434718795120716, + -0.01270044595003128, + 0.1193959042429924, + -0.06683829426765442, + -0.005413784645497799, + -0.019723733887076378, + 0.018070336431264877, + -0.02364507131278515, + -0.042988378554582596, + -0.008976640179753304, + 0.05896635726094246, + 0.01840686798095703, + 0.030404984951019287, + -0.03327282890677452, + -0.0052089388482272625, + -0.015275652520358562, + 0.019870053976774216, + 0.012115172110497952, + -0.01894824579358101, + 0.025854479521512985, + 0.029644129797816277, + -0.05759096518158913, + 0.025854479521512985, + -0.018245916813611984, + -0.019123828038573265, + 0.014624535106122494, + 0.011105574667453766, + 0.04652928560972214, + -0.022313572466373444, + 0.016329145058989525, + -0.008245048113167286, + -0.033858101814985275, + 0.015275652520358562, + 0.016051139682531357, + 0.02412792108952999, + -0.01613893173635006, + -0.03163406252861023, + -0.06174641102552414, + 0.018743401393294334, + -0.020777227357029915, + -0.03795501962304115, + 0.016036508604884148, + -0.004499293863773346, + 0.04155445471405983, + 0.012971135787665844, + -0.09171243757009506, + 0.02250378578901291, + -0.019533520564436913, + 0.013878310099244118, + -0.030843941494822502, + -0.00794509518891573, + 0.06876970082521439, + -0.0012290754821151495, + -0.04664634168148041, + -0.046324439346790314, + -0.0130223473533988, + -0.0003241869271732867, + -0.020235849544405937, + 0.002410597400739789, + -0.0196798387914896, + 0.05103589594364166, + 0.023191483691334724, + -0.009474122896790504, + 0.028371158987283707, + -0.03596508875489235, + -0.011156786233186722, + -0.02095280960202217, + -0.002304516499862075, + 0.026088589802384377, + -0.0633266493678093, + 0.008215784095227718, + 0.015041542239487171, + -0.05530839413404465, + 0.004455398302525282, + 0.05261613428592682, + 0.01180790364742279, + 0.02311832457780838, + 0.021903879940509796, + -0.0009913078974932432, + 0.023454856127500534, + 0.034472640603780746, + 0.003268389729782939, + -0.010754410177469254, + 0.04635370150208473, + 0.07298366725444794, + 0.01751432567834854, + -0.029702655971050262, + 0.03611140698194504, + 0.010103292763233185, + 0.07228134572505951, + -0.00314584793522954, + 0.002401452511548996, + -0.021245447918772697, + -0.011376263573765755, + 0.014156315475702286, + 0.013402774930000305, + 0.017967913299798965, + -0.02161124348640442, + -0.0028495530132204294, + 0.01188837829977274, + 0.04310543090105057, + -0.00871326681226492, + -0.029058855026960373, + -0.03453116863965988, + 0.018977509811520576, + -0.08480620384216309, + -0.0002622301981318742, + 0.03403368592262268, + 0.04494904354214668, + -0.007520771119743586, + 3.7751316995127127e-05, + 0.052791718393564224, + -0.038569558411836624, + 0.0383647121489048, + -0.026205644011497498, + 0.0020265113562345505, + 0.010037449188530445, + 0.04813878983259201, + -0.01764601096510887, + 0.004707797896116972, + -0.04535873606801033, + -0.06356076151132584, + -0.01701684296131134, + -0.05873224884271622, + 0.020616278052330017, + 0.029761184006929398, + -0.033858101814985275, + -0.010352034121751785, + 0.028166312724351883, + 0.00972286518663168, + 0.04626591131091118, + 0.03160479664802551, + -0.011778639629483223, + 0.00654043722897768, + 0.028897905722260475, + 0.008874217048287392, + -0.023015901446342468, + -0.010117924772202969, + 0.011734744533896446, + -0.04252015799283981, + -0.0011156785767525434, + 0.031224370002746582, + -0.015787767246365547, + 0.004535873886197805, + -0.03192669898271561, + 0.012663866393268108, + 0.032102279365062714, + -0.029175909236073494, + 0.03979863226413727, + 0.0044151609763503075, + 0.03833544999361038, + -0.0014458097284659743, + 0.007059867959469557, + -0.07438832521438599, + 0.007217160426080227, + 0.05334772914648056, + -0.036023616790771484, + 0.01404657680541277, + 0.04114476218819618, + -0.04304690286517143, + -0.0039030462503433228, + -0.004129840061068535, + 0.03532128781080246, + -0.015041542239487171, + 0.0022331862710416317, + -0.002408768516033888, + -0.017719171941280365, + -0.039447467774152756, + -0.0038115971256047487, + 0.0035518817603588104, + -0.016592519357800484, + -0.03815986588597298, + 0.031165841966867447, + 0.04143740236759186, + 0.02513751946389675, + -0.07608561962842941, + -0.05665452405810356, + -0.017748434096574783, + 0.03760385513305664, + 0.026907972991466522, + -0.025122888386249542, + -0.05606925114989281, + 0.00048559452989138663, + 0.024844883009791374, + 0.030902467668056488, + -0.07907052338123322, + 0.011646953411400318, + -0.010183768346905708, + 0.01403926033526659, + -0.036667417734861374, + -0.021772194653749466, + -0.02363043837249279, + 0.008230416104197502, + 0.024347400292754173, + -0.03760385513305664, + 0.000373112183297053, + -0.02771272510290146, + 0.036404043436050415, + 0.021289343014359474, + 0.00037128321127966046, + -0.01932867430150509, + -0.018465396016836166, + 0.04992387443780899, + -0.016548622399568558, + -0.0061417194083333015, + -0.02032363973557949, + 0.017119266092777252, + -0.02121618390083313, + -0.002280739601701498, + 0.008420630358159542, + -0.018084967508912086, + 0.044539354741573334, + 0.007352504879236221, + -0.007630510255694389, + -0.10646134614944458, + -0.001123909023590386, + -0.09218066185712814, + -0.025503315031528473, + -0.0020027344580739737, + -0.0719301775097847, + -0.018860455602407455, + -0.0020301693584769964, + -0.007586614694446325, + -0.029892871156334877, + -0.01282481662929058, + 0.0004675333620980382, + 0.04688045009970665, + 0.0059771109372377396, + -0.0073890844359993935, + 0.038920722901821136, + 0.033331356942653656, + -0.02225504443049431, + 0.0021234473679214716, + 0.027771253138780594, + 0.010271559469401836, + -0.014631850644946098, + 0.022079462185502052, + -0.028941800817847252, + 0.0067343092523515224, + 0.029190542176365852, + 0.021157655864953995, + -0.03239491581916809, + 0.008413313888013363, + 0.02603006176650524, + -0.018275180831551552, + 0.02440592646598816, + 0.016621781513094902, + -0.010125240311026573, + -0.044012606143951416, + 0.010578827932476997, + 0.020426062867045403, + 0.007586614694446325, + -0.026205644011497498, + 0.0066648079082369804, + 0.03549686819314957, + 0.0497775562107563, + 0.016841260716319084, + 0.004660244565457106, + 0.004331027623265982, + -0.03371178358793259, + 0.024698564782738686, + -0.02109912782907486, + -0.01354177761822939, + 0.0028477238956838846, + 0.00818652007728815, + -0.05121147632598877, + 0.0066830976866185665, + -0.006174641195684671, + 0.015582920983433723, + 0.02857600338757038, + 0.02781514823436737, + 0.06385339796543121, + 0.005424758419394493, + -0.019094565883278847, + 0.06496541947126389, + -0.004060338716953993, + -0.005940531380474567, + 0.012993083335459232, + -0.04003274440765381, + 0.004927275702357292, + 0.006606280338019133, + -0.005808844696730375, + 0.018362972885370255, + 0.025356996804475784, + 0.004960197489708662, + 0.0028257761150598526, + 0.05928825959563255, + 0.08948840200901031, + -0.0021014995872974396, + -0.008640107698738575, + -0.0335654653608799, + -0.04404187202453613, + -0.012495600618422031, + 0.0006273405742831528, + -0.004290790297091007, + 0.019460361450910568, + -0.06279990077018738, + 0.003844518680125475, + 0.017485061660408974, + -0.0317511148750782, + -0.013907574117183685, + 0.043661441653966904, + 0.01880192756652832, + 0.006551411002874374, + 0.0454757921397686, + -0.010527616366744041, + 0.011193365789949894, + -0.012181015685200691, + -0.014148999936878681, + -0.02387917973101139, + -0.00894737709313631, + -0.005739343352615833, + -0.018714137375354767, + 0.040471699088811874, + 0.018728768453001976, + -0.022664736956357956, + 0.039681579917669296, + -0.06139524653553963, + 0.038452502340078354, + 0.07649531215429306, + -0.020235849544405937, + -0.04240310192108154, + -0.007681721355766058, + 0.006858679931610823, + -0.01981152594089508, + 0.031224370002746582, + -0.09305857121944427, + -0.006833074148744345, + 0.05311361700296402, + 0.0029464890249073505, + 0.013293036259710789, + 0.012971135787665844, + 0.0006108797388151288, + -0.014156315475702286, + -0.014273370616137981, + -0.0158755574375391, + -0.007085473742336035, + -0.03745753690600395, + -0.010747094638645649, + -0.016168195754289627, + 0.06139524653553963, + 0.0018820217810571194, + -0.030141612514853477, + 0.0151293333619833, + 0.00319340149872005, + -0.026015430688858032, + -0.003862808458507061, + -0.05961015820503235, + -0.022459890693426132, + 0.011610373854637146, + -0.014119735918939114, + -0.07438832521438599, + 0.0014622706221416593, + 0.03643330931663513, + -0.006745283026248217, + 0.02121618390083313, + 0.0001646083255764097, + -0.023410961031913757, + 0.02860526740550995, + 0.007385426666587591, + 0.02415718510746956, + 0.028107784688472748, + 0.02440592646598816, + -0.02935149148106575, + 0.0009163196664303541, + -0.038423240184783936, + -0.0008170974324457347, + 0.010600775480270386, + -0.05246981605887413, + 0.0044151609763503075, + -0.010520300827920437, + -0.013892942108213902, + -0.04307616874575615, + -0.026644600555300713, + 0.010827569290995598, + -0.022430626675486565, + -0.0472901426255703, + 0.00019318614795338362, + -0.021903879940509796, + -0.004316396079957485, + -0.031253632158041, + 0.0050187245942652225, + 0.00940096378326416, + -0.014119735918939114, + 0.0026794576551765203, + 0.016929050907492638, + 0.05606925114989281, + 0.0007073585293255746, + 0.010827569290995598, + -0.02275252714753151, + 0.021025968715548515, + -0.07187165319919586, + -0.009481439366936684, + -0.046061065047979355, + -0.018084967508912086, + 0.006306327413767576, + -0.0262934360653162, + 0.0011376263573765755, + -0.05399153009057045, + -0.007074499968439341, + 0.010205715894699097, + 0.002551428973674774, + 0.0065697007812559605, + 0.0018445276655256748, + 0.07550034672021866, + -0.009708233177661896, + -0.1126067191362381, + -0.010783674195408821, + 0.021552715450525284, + -0.01575850322842598, + -0.014463583938777447, + 0.04061801731586456, + -0.0001903283700812608, + -0.05943457782268524, + 0.014785485342144966, + -0.031107313930988312, + 0.03312651067972183, + 0.010469089262187481, + 0.024449821561574936, + 0.029058855026960373, + -0.034501902759075165, + -0.0232353787869215, + 0.0030269641429185867, + 0.0767294242978096, + -0.0036762524396181107, + 0.01586092635989189, + -0.003127558156847954, + 0.0003715118218678981, + -0.022459890693426132, + 0.0158755574375391, + -0.019635943695902824, + -0.02999529428780079, + 0.03470674902200699, + 0.005823476705700159, + 0.011595741845667362, + 0.023703597486019135, + -0.04079360142350197, + -0.020557750016450882, + -0.001602187636308372, + -0.005903951823711395, + -0.007974358275532722, + 0.020235849544405937, + 0.015831662341952324, + 0.037925757467746735, + 0.01212248858064413, + 0.02796146646142006, + 0.11336757987737656, + 0.08410387486219406, + 0.032716818153858185, + 0.010651987046003342, + 0.06127819046378136, + 0.03508717939257622, + 0.011251892894506454, + 0.041612982749938965, + -0.04240310192108154, + 0.005475969985127449, + -0.009935026988387108, + -0.010842201299965382, + 0.023030532523989677, + -0.021625874564051628, + 0.0030214772559702396, + 0.023937707766890526, + -0.03535054996609688, + -0.025225309655070305, + 0.011500634253025055, + 0.03063909523189068, + -0.06110261008143425, + 0.00908637885004282, + -0.00311292614787817, + -0.05794212967157364, + -0.053669627755880356, + -0.016329145058989525, + 0.010688566602766514, + 0.010044765658676624, + 0.008237731643021107, + 0.07315925508737564, + 0.018567819148302078, + -0.05206012353301048, + 0.0002437117655063048, + -0.03558466210961342, + 0.0459732748568058, + 0.02212335728108883, + 0.005249176640063524, + 0.007092789746820927, + 0.017177792266011238, + 0.08328449726104736, + -0.016168195754289627, + -0.021655138581991196, + 0.03318503871560097, + 0.0026812865398824215, + -0.012400493025779724, + 0.01187374722212553, + 0.04284206032752991, + 0.029892871156334877, + -0.010110609233379364, + 0.054693859070539474, + 0.019431097432971, + 0.027551773935556412, + -0.030551305040717125, + -0.050626203417778015, + 0.00244534807279706, + 0.005695447791367769, + 0.03696005418896675, + 0.008157256990671158, + 0.023688966408371925, + 0.01701684296131134, + 0.007842672057449818, + -0.014200211502611637, + -0.003892072243615985, + -0.010125240311026573, + 0.014997647143900394, + 0.043778497725725174, + 0.005636920686811209, + 0.015612185001373291, + 0.010388613678514957, + 0.00806214939802885, + 0.0022514760494232178, + 0.018758032470941544, + 0.03783796727657318, + -0.027990730479359627, + 0.006858679931610823, + 0.008149940520524979, + -0.005468653980642557, + 0.008786425925791264, + -0.02033827267587185, + -0.029410019516944885, + -0.0037201480008661747, + -0.011193365789949894, + -0.010637355037033558, + 0.008596212603151798, + -0.05033356696367264, + 0.006017348729074001, + 0.01022034790366888, + 0.019401833415031433, + -0.003034279914572835, + -0.01105436310172081, + -0.029146647080779076, + -0.01651936024427414, + 0.00616366695612669, + -0.03748680278658867, + 0.009093695320189, + -0.0012089567026123405, + -0.047582779079675674, + -0.01726558431982994, + 0.0303464587777853, + -0.0005683559575118124, + -0.06519952416419983, + -0.003892072243615985, + 0.023089060559868813, + 0.010198400355875492, + -0.016607150435447693, + -0.019782261922955513, + 0.0009364384459331632, + -0.05554250627756119, + -0.034004420042037964, + -0.007381768431514502, + 0.006935497280210257, + -0.046324439346790314, + 0.03693079203367233, + 0.006536779459565878, + 0.006309985648840666, + -0.0036396728828549385, + 0.005622288677841425, + -0.0051394375041127205, + -0.0018481856677681208, + 0.020367536693811417, + -0.016665678471326828, + -0.03669667989015579, + -0.030053820461034775, + -0.027112819254398346, + -0.010286190547049046, + 0.030814677476882935, + 0.0013497882755473256, + -0.007067183963954449, + -0.05121147632598877, + 0.024084025993943214, + -0.0005633262335322797, + 0.014083156362175941, + -0.020396800711750984, + 0.01855318620800972, + -0.0009803340071812272, + 0.024947306141257286, + 0.0661359652876854, + -0.06765767931938171, + -0.04073507338762283, + 0.018611714243888855, + 0.08398682624101639, + -0.0017594799865037203, + 0.023015901446342468, + -0.017455797642469406, + 0.005786897148936987, + 0.015451233834028244, + 0.01689978688955307, + -0.028415054082870483, + 0.04784615337848663, + -0.06601890921592712, + 0.009978922083973885, + 0.05580587685108185, + 0.010147188790142536, + 0.06490688771009445, + 0.018772663548588753, + -0.06256579607725143, + -0.02020658552646637, + -0.019855421036481857, + -0.03213154524564743, + -0.010037449188530445, + 0.06116113439202309, + 0.020250480622053146, + -0.01830444484949112, + 0.04951418191194534, + -0.0016561426455155015, + 0.02237210050225258, + -0.021303974092006683, + -0.03201448917388916, + -0.06063438951969147, + -0.010366666130721569, + 0.008274311199784279, + 0.020923545584082603, + 0.03192669898271561, + -0.017060738056898117, + -0.0005459509557113051, + -0.016299881041049957, + -0.0073890844359993935, + 0.020660173147916794, + -0.03646257147192955, + -0.06707240641117096, + -0.0009318660013377666, + -0.02057238109409809, + -0.04322248697280884, + -0.005706421565264463, + 0.015407338738441467, + 0.0013900258345529437, + -0.036901526153087616, + 0.015070806257426739, + -0.016431568190455437, + -0.02351338416337967, + 0.07983137667179108, + -0.0006396862445399165, + -0.022269677370786667, + 0.006178298965096474, + -0.00470414012670517, + -0.015729239210486412, + -0.04620738327503204, + 0.025503315031528473, + -0.04875332489609718, + -0.025474052876234055, + -0.001649741199798882, + -0.0020009055733680725, + -0.016826627776026726, + 0.03757459297776222, + -0.04079360142350197, + 0.016665678471326828, + -0.024449821561574936, + -0.006551411002874374, + 0.05814697593450546, + -0.006686755921691656, + -0.013688095845282078, + 0.006372170988470316, + 0.019913949072360992, + 0.010256927460432053, + -0.03295092657208443, + 0.028502844274044037, + -0.019109196960926056, + 0.03382883965969086, + 0.03160479664802551, + -0.004941907711327076, + 0.03549686819314957, + 0.0010095976758748293, + -0.01448553241789341, + 0.026351962238550186, + 0.04208120331168175, + 0.008537684567272663, + 0.0021380791440606117, + -0.0027398141101002693, + 0.0092180659994483, + -0.00650751544162631, + -0.011361631564795971, + -0.01891898363828659, + 0.0009240928338840604, + -0.026644600555300713, + 0.053933002054691315, + 0.028371158987283707, + 0.04374923184514046, + -0.01919698715209961, + -0.02921980619430542, + -0.014090471900999546, + -0.03060983121395111, + 0.004989461041986942, + -0.009335121139883995, + -0.07830966264009476, + -0.005805186927318573, + 0.020894283428788185, + 0.04916301742196083, + -0.016095034778118134, + 0.056449681520462036, + 0.03049277700483799, + 0.02642512135207653, + 0.006862338166683912, + -0.029029591009020805, + 0.025605738162994385, + 0.0005610400112345815, + 0.007864619605243206, + 0.007001340389251709, + -0.0019149434519931674, + 0.11886915564537048, + 0.030404984951019287, + -0.0011705480283126235, + 0.04889964312314987, + -0.027551773935556412, + 0.05323067307472229, + -0.03300945460796356, + 0.02742008864879608, + 0.03994495049118996, + -0.0018399552209302783, + -0.02806388959288597, + -0.030463512986898422, + -0.003965231589972973, + 0.012919924221932888, + -0.019153092056512833, + -0.01676810160279274, + -0.009057115763425827, + -0.001569265965372324, + -0.03350693732500076, + 0.0335654653608799, + -0.0029044223483651876, + 0.004404187202453613, + -0.013263772241771221, + 0.04260794818401337, + 0.09779928624629974, + 0.028429685160517693, + 0.022298939526081085, + 0.03751606494188309, + -0.028868641704320908, + 0.02986360713839531, + -0.03254123404622078, + -0.022547682747244835, + 0.009861866943538189, + 0.03415073826909065, + 0.007480533793568611, + 0.004660244565457106, + 0.020001739263534546, + -0.006913549266755581, + -0.013322300277650356, + -0.021025968715548515, + 0.008230416104197502, + 0.009020536206662655, + 0.023937707766890526, + -0.005651552230119705, + 0.01865560933947563, + -0.0006808383041061461, + 0.002410597400739789, + -0.02389381267130375, + 0.017865490168333054, + 0.009269277565181255, + -0.005307703744620085, + -0.007261055987328291, + -0.017104633152484894, + -0.010037449188530445, + 0.05337699130177498, + -0.005121147725731134, + -0.003983521368354559, + -0.0027379849925637245, + 0.031341422349214554, + -0.013768571428954601, + 0.001310465158894658, + -0.015904821455478668, + -0.003906704019755125, + -0.02453761361539364, + 0.011800587177276611, + -9.752185178513173e-06, + 0.01589019037783146, + -0.018889719620347023, + -0.0015299428487196565, + -0.029058855026960373, + 0.007151316851377487, + -0.0021472240332514048, + -0.041086237877607346, + 0.050509147346019745, + 0.07023288309574127, + -0.005805186927318573, + 0.031575534492731094, + 0.004122524056583643, + 0.029702655971050262, + -0.028546741232275963, + 0.013797835446894169, + 0.004898012150079012, + 0.014778168871998787, + 0.01969447173178196, + -0.02592763863503933, + 0.02667386457324028, + -0.009166854433715343, + -0.040354643017053604, + 0.007096447516232729, + 0.007747564930468798, + -0.026761654764413834, + -0.019533520564436913, + 0.06022469699382782, + 0.02007489837706089, + -0.010110609233379364, + 0.016065772622823715, + 0.033477675169706345, + -0.023849915713071823, + -0.019767630845308304, + -0.014346529729664326, + 0.007359820883721113, + 0.027595670893788338, + -0.010227663442492485, + -0.013944153673946857, + -0.06086849793791771, + 0.006145377177745104, + -0.029395388439297676, + -0.036521099507808685, + 0.02857600338757038, + -0.0534062534570694, + -0.0022587920539081097, + -0.031107313930988312, + 0.04129108414053917, + -0.017938649281859398, + 0.01701684296131134, + 0.0224891547113657, + 0.0028495530132204294, + -0.03795501962304115, + 0.034238532185554504, + -0.0269518680870533, + 0.054196376353502274, + 0.012034697458148003, + -0.016051139682531357, + 0.05144558846950531, + 0.00457611121237278, + 0.010761725716292858, + -0.03549686819314957, + 0.007283003535121679, + 0.009254645556211472, + 0.036140672862529755, + 0.020265113562345505, + -0.005805186927318573, + 0.019284779205918312, + 0.0643216148018837, + 0.028883272781968117, + 0.023732861503958702, + -0.01232733391225338, + 0.011749375611543655, + -0.009057115763425827, + -0.0009048884967342019, + -0.02225504443049431, + 0.011412843130528927, + -0.019489625468850136, + 0.022811055183410645, + -0.027039660140872, + 0.00775488093495369, + -0.006156350951641798, + 0.020031003281474113, + 0.012063960544764996, + 0.0002841779787559062, + -0.04383702576160431, + 0.02986360713839531, + 0.02490340918302536, + -0.010856833308935165, + 0.00852305255830288, + -0.03151700645685196, + 0.012685814872384071, + -0.03391662985086441, + -0.015904821455478668, + 0.02566426619887352, + -0.020001739263534546, + 0.009291225112974644, + -0.027478614822030067, + 0.038540296256542206, + 0.023469489067792892, + 0.007180580869317055, + -0.013563725166022778, + -0.014712326228618622, + -0.024362031370401382, + -0.025503315031528473, + -0.04064727947115898, + 0.0028422370087355375, + 0.015919454395771027, + -0.043778497725725174, + 0.025444788858294487, + -0.010395930148661137, + -0.03611140698194504, + 0.016358409076929092, + -0.014873276464641094, + 0.00012619970948435366, + -0.03432632237672806, + -0.11916179209947586, + -0.0255472119897604, + 0.05653747171163559, + 0.012210279703140259, + -0.05276245251297951, + 0.041993413120508194, + -0.05785433575510979, + -0.037018582224845886, + 0.012473653070628643, + -0.003734779777005315, + -0.015158597379922867, + -0.06707240641117096, + -0.026600703597068787, + -0.060809969902038574, + -0.01174206007272005, + 0.04638296738266945, + 0.016929050907492638, + -0.016680309548974037, + -0.02543015591800213, + 0.002213067375123501, + 0.023586543276906013, + -0.00952533446252346, + -0.0013945982791483402, + 0.04611959308385849, + -0.04658781364560127, + 0.014500164426863194, + 0.009620442055165768, + 0.014500164426863194, + -0.06988172233104706, + -0.011500634253025055, + -0.0002711464767344296, + 0.024303503334522247, + 0.09235624223947525, + -0.008698634803295135, + 0.00768903736025095, + -0.041612982749938965, + 0.04445156082510948, + 0.0017018670914694667, + -0.005318677518516779, + -0.005289413966238499, + 0.01739726960659027, + -0.012415125034749508, + -0.05580587685108185, + 0.055835142731666565, + 0.017836226150393486, + 0.00952533446252346 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingOwner.txt\n\npublic class ThingOwner : ThingOwner, IList, ICollection, IEnumerable, IEnumerable where T : Thing\n{\n\tprivate List innerList = new List();\n\n\tpublic List InnerListForReading => innerList;\n\n\tpublic new T this[int index] => innerList[index];\n\n\tpublic override int Count => innerList.Count;\n\n\tT IList.this[int index]\n\t{\n\t\tget\n\t\t{\n\t\t\treturn innerList[index];\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow setting individual elements.\");\n\t\t}\n\t}\n\n\tbool ICollection.IsReadOnly => true;\n\n\tpublic ThingOwner()\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner, oneStackOnly, contentsLookMode, removeContentsIfDestroyed)\n\t{\n\t}\n\n\tpublic override void ExposeData()\n\t{\n\t\tbase.ExposeData();\n\t\tScribe_Collections.Look(ref innerList, \"innerList\", true, contentsLookMode);\n\t\tif (Scribe.mode == LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\tint num = innerList.RemoveAll((T x) => x == null || (x is MinifiedThing minifiedThing && minifiedThing.InnerThing == null));\n\t\t\tif (num > 0)\n\t\t\t{\n\t\t\t\tLog.Warning($\"ThingOwner removed {num} invalid entries during PostLoadInit.\");\n\t\t\t}\n\t\t}\n\t\tif (Scribe.mode != LoadSaveMode.LoadingVars && Scribe.mode != LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] != null)\n\t\t\t{\n\t\t\t\tinnerList[i].holdingOwner = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic List.Enumerator GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tpublic override int GetCountCanAccept(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (!(item is T))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn base.GetCountCanAccept(item, canMergeWithExistingStacks);\n\t}\n\n\tpublic override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (count <= 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item?.ToString() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + count + \" of \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tint stackCount = item.stackCount;\n\t\tint num = Mathf.Min(stackCount, count);\n\t\tThing thing = item.SplitOff(num);\n\t\tif (!TryAdd((T)thing, canMergeWithExistingStacks))\n\t\t{\n\t\t\tif (thing != item)\n\t\t\t{\n\t\t\t\tint result = stackCount - item.stackCount - thing.stackCount;\n\t\t\t\titem.TryAbsorbStack(thing, respectStackLimit: false);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn stackCount - item.stackCount;\n\t\t}\n\t\tCompPushable compPushable = item.TryGetComp();\n\t\tif (compPushable != null && owner is Pawn pawn)\n\t\t{\n\t\t\tcompPushable.OnStartedCarrying(pawn);\n\t\t}\n\t\treturn num;\n\t}\n\n\tpublic override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (canMergeWithExistingStacks)\n\t\t{\n\t\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t\t{\n\t\t\t\tT val = innerList[i];\n\t\t\t\tif (!val.CanStackWith(item))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint num = Mathf.Min(item.stackCount, val.def.stackLimit - val.stackCount);\n\t\t\t\tif (num > 0)\n\t\t\t\t{\n\t\t\t\t\tThing other = item.SplitOff(num);\n\t\t\t\t\tint stackCount = val.stackCount;\n\t\t\t\t\tval.TryAbsorbStack(other, respectStackLimit: true);\n\t\t\t\t\tif (val.stackCount > stackCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tNotifyAddedAndMergedWith(val, val.stackCount - stackCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Destroyed || item.stackCount == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Count >= maxStacks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\titem.holdingOwner = this;\n\t\tinnerList.Add(item2);\n\t\tNotifyAdded(item2);\n\t\treturn true;\n\t}\n\n\tprotected override void NotifyAdded(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemAdded(item as T);\n\t\t}\n\t\tbase.NotifyAdded(item);\n\t}\n\n\tprotected override void NotifyRemoved(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemRemoved(item as T);\n\t\t}\n\t\tbase.NotifyRemoved(item);\n\t}\n\n\tpublic void TryAddRangeOrTransfer(IEnumerable things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)\n\t{\n\t\tif (things == this)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (things is ThingOwner thingOwner)\n\t\t{\n\t\t\tthingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);\n\t\t\tif (destroyLeftover)\n\t\t\t{\n\t\t\t\tthingOwner.ClearAndDestroyContents();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (things is IList list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t{\n\t\t\t\tif (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t\t{\n\t\t\t\t\tlist[i].Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tforeach (T thing in things)\n\t\t{\n\t\t\tif (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t{\n\t\t\t\tthing.Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override int IndexOf(Thing item)\n\t{\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t\treturn innerList.IndexOf(item2);\n\t}\n\n\tpublic override bool Remove(Thing item)\n\t{\n\t\tif (!Contains(item))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner == this)\n\t\t{\n\t\t\titem.holdingOwner = null;\n\t\t}\n\t\tint index = innerList.LastIndexOf((T)item);\n\t\tinnerList.RemoveAt(index);\n\t\tNotifyRemoved(item);\n\t\treturn true;\n\t}\n\n\tpublic int RemoveAll(Predicate predicate)\n\t{\n\t\tint num = 0;\n\t\tfor (int num2 = innerList.Count - 1; num2 >= 0; num2--)\n\t\t{\n\t\t\tif (predicate(innerList[num2]))\n\t\t\t{\n\t\t\t\tRemove(innerList[num2]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t\treturn num;\n\t}\n\n\tprotected override Thing GetAt(int index)\n\t{\n\t\treturn innerList[index];\n\t}\n\n\tpublic void GetThingsOfType(List list) where J : Thing\n\t{\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] is J item)\n\t\t\t{\n\t\t\t\tlist.Add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic int TryTransferToContainer(Thing item, ThingOwner otherContainer, int stackCount, out T resultingTransferredItem, bool canMergeWithExistingStacks = true)\n\t{\n\t\tThing resultingTransferredItem2;\n\t\tint result = TryTransferToContainer(item, otherContainer, stackCount, out resultingTransferredItem2, canMergeWithExistingStacks);\n\t\tresultingTransferredItem = (T)resultingTransferredItem2;\n\t\treturn result;\n\t}\n\n\tpublic new T Take(Thing thing, int count)\n\t{\n\t\treturn (T)base.Take(thing, count);\n\t}\n\n\tpublic new T Take(Thing thing)\n\t{\n\t\treturn (T)base.Take(thing);\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, int count, out T resultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing resultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, count, out resultingThing2, placedAction2, nearPlaceValidator);\n\t\tresultingThing = (T)resultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, mode, out lastResultingThing2, placedAction2, nearPlaceValidator);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, out lastResultingThing2, placedAction2, nearPlaceValidator, playDropSound: true);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tint IList.IndexOf(T item)\n\t{\n\t\treturn innerList.IndexOf(item);\n\t}\n\n\tvoid IList.Insert(int index, T item)\n\t{\n\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow inserting individual elements at any position.\");\n\t}\n\n\tvoid ICollection.Add(T item)\n\t{\n\t\tTryAdd(item);\n\t}\n\n\tvoid ICollection.CopyTo(T[] array, int arrayIndex)\n\t{\n\t\tinnerList.CopyTo(array, arrayIndex);\n\t}\n\n\tbool ICollection.Contains(T item)\n\t{\n\t\treturn innerList.Contains(item);\n\t}\n\n\tbool ICollection.Remove(T item)\n\t{\n\t\treturn Remove(item);\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n}\n\n", + "timestamp": "2025-08-24 20:53:10,931" + }, + "ThingOwner": { + "keywords": [ + "ThingOwner" + ], + "question": "public abstract class ThingOwner", + "embedding": [ + -0.010147521272301674, + 0.008173150010406971, + 0.036745648831129074, + 0.00934287253767252, + -0.07223962247371674, + 0.032156169414520264, + 0.004172255285084248, + 0.06139175966382027, + 0.051437947899103165, + 0.09852483123540878, + -0.02407987415790558, + -0.06705410778522491, + -0.01253166701644659, + -0.07605426013469696, + 0.061272550374269485, + -0.03811653330922127, + 0.02048875391483307, + -0.07551782578229904, + -0.030144546180963516, + -0.022112954407930374, + 0.02022053860127926, + 0.06878261268138885, + -0.003967368043959141, + 0.023245424032211304, + 0.023632846772670746, + -0.019639402627944946, + -0.016942337155342102, + 0.048576973378658295, + -0.02101028710603714, + -0.01197288278490305, + 0.002253762912005186, + 0.015131876803934574, + -0.03316942974925041, + -0.003548279870301485, + -0.010996873490512371, + 0.026940850540995598, + -0.05000746250152588, + 0.023588145151734352, + 0.011063927784562111, + 0.0006235100445337594, + -0.009126808494329453, + -0.008173150010406971, + -0.009581286460161209, + 0.001336425542831421, + -0.04184176027774811, + 0.019997024908661842, + 0.02627030946314335, + -0.030472366139292717, + -0.035136353224515915, + 0.026568327099084854, + -0.0013932352885603905, + -0.005956639535725117, + -0.03683505579829216, + 0.02266428805887699, + -0.005148265045136213, + -0.0006379453116096556, + 0.02913128398358822, + -0.023111315444111824, + -0.020637763664126396, + 0.03710327297449112, + 0.00791238434612751, + 0.0011613398091867566, + -0.02805841900408268, + -0.03644763305783272, + 0.0452093668282032, + -0.0007413203711621463, + 0.04553718864917755, + 0.025614667683839798, + 0.00575175229460001, + -0.037133075296878815, + -0.014178218320012093, + 0.028371337801218033, + -0.013157505542039871, + 0.011518405750393867, + -0.03930860757827759, + 0.032543592154979706, + 0.009007601998746395, + 0.017717184498906136, + -0.01922217756509781, + -0.023111315444111824, + -0.00934287253767252, + -0.03203696012496948, + -0.010318881832063198, + 0.02539115399122238, + 0.08159739524126053, + 0.003002533921971917, + 0.04860677570104599, + -0.07390852272510529, + -0.01306064985692501, + 0.10996873676776886, + -0.045984216034412384, + 0.0006505179335363209, + 0.014640146866440773, + 0.02333482913672924, + -0.014945615082979202, + 0.09131278842687607, + -0.05936523526906967, + 0.0036227842792868614, + -0.0176277793943882, + 0.028416039422154427, + -0.01153330598026514, + -0.07700791209936142, + -0.020831475034356117, + 0.03948741778731346, + 0.011808972805738449, + 0.04661005362868309, + -0.026046795770525932, + -0.008359411731362343, + -0.010840414091944695, + 0.010244376957416534, + -0.0012898602290078998, + -0.016107887029647827, + -0.0038630615454167128, + 0.04154374450445175, + -0.04357026889920235, + 0.047444503754377365, + -0.04208017513155937, + 0.017136048525571823, + -0.003904039040207863, + -0.0008572681108489633, + 0.04115632176399231, + -0.020116232335567474, + 0.007625542115420103, + -0.023707352578639984, + -0.024318289011716843, + 0.006474446505308151, + 0.0186112392693758, + -0.003257711883634329, + -0.006239756941795349, + -0.008016690611839294, + -0.05158695951104164, + -0.003412308869883418, + 0.0029503805562853813, + -0.035017143934965134, + -0.005889585707336664, + 0.013440622948110104, + 0.07617346197366714, + 0.007599465548992157, + -0.1050812378525734, + 0.00821040291339159, + -0.03954702243208885, + 0.006314261816442013, + -0.06282224506139755, + 0.00560274301096797, + 0.08946508169174194, + -0.0013625022256746888, + -0.042646411806344986, + -0.03158993273973465, + -0.02640441618859768, + 0.009804800152778625, + -0.014506038278341293, + -0.009655791334807873, + -0.003330353880301118, + 0.04622263088822365, + 0.01083296351134777, + -0.03153033182024956, + 0.016271796077489853, + -0.041454337537288666, + -0.005341976881027222, + -0.029235590249300003, + 0.008292357437312603, + 0.031679339706897736, + -0.060527507215738297, + 2.5378116333740763e-05, + -0.0019371185917407274, + -0.033407844603061676, + -0.011883477680385113, + 0.030040239915251732, + -0.005435107741504908, + 0.02539115399122238, + 0.047653116285800934, + 0.007223217282444239, + 0.020458953455090523, + 0.02632991224527359, + 0.026225605979561806, + -0.013418271206319332, + 0.04446432366967201, + 0.053613483905792236, + 0.02002682536840439, + -0.04568619653582573, + 0.04497095197439194, + 0.011324693448841572, + 0.11580988764762878, + 0.0018104608170688152, + 0.005021607503294945, + -0.02632991224527359, + -0.014118614606559277, + 0.03236478194594383, + 0.0033117278944700956, + 0.0372522808611393, + -0.02247057668864727, + 0.028907770290970802, + 0.0239308662712574, + 0.05206378921866417, + -0.05605723336338997, + -0.017597977072000504, + -0.016599616035819054, + 0.041931167244911194, + -0.04306363686919212, + -0.010683953762054443, + 0.006005067843943834, + 0.03078528493642807, + 0.002898227423429489, + 0.015184029936790466, + 0.057755935937166214, + -0.03376546874642372, + 0.021457314491271973, + -0.02706005610525608, + 0.027432579547166824, + 0.012256000190973282, + 0.03963642567396164, + -0.010356133803725243, + 0.01213679276406765, + -0.027179263532161713, + -0.06011028215289116, + -0.009223665110766888, + -0.03909999504685402, + 0.016137687489390373, + -0.003445836016908288, + -0.018000302836298943, + -0.01220384705811739, + 0.008597826585173607, + -0.0037792439106851816, + 0.0292653925716877, + 0.03749069571495056, + -0.010751008056104183, + 0.013693938963115215, + 0.04821935296058655, + 0.016644319519400597, + -0.03236478194594383, + 0.0037270907778292894, + 0.03936821222305298, + -0.0671137124300003, + 0.010147521272301674, + -0.0025368803180754185, + -0.01642080582678318, + 0.005368053913116455, + -0.04362986981868744, + 0.028892869129776955, + 0.035464171320199966, + -0.021859638392925262, + 0.029742220416665077, + -0.010654152370989323, + 0.03531516343355179, + -0.01601848006248474, + 0.030904492363333702, + -0.07164358347654343, + 0.011697215959429741, + 0.022857999429106712, + -0.032871413975954056, + 0.009767548181116581, + 0.0419013649225235, + -0.017523473128676414, + -0.011145882308483124, + -0.009037403389811516, + 0.059544045478105545, + -0.0111384317278862, + 0.018432429060339928, + -0.02327522449195385, + -0.02387126162648201, + -0.033944278955459595, + 0.029548509046435356, + 0.011630162596702576, + -0.02832663431763649, + -0.019788412377238274, + 0.023781856521964073, + 0.024959027767181396, + 0.02312621660530567, + -0.0651467889547348, + -0.061332155019044876, + -0.022843098267912865, + 0.02866935543715954, + 0.020980484783649445, + -0.02998063527047634, + -0.04109671711921692, + 0.011384297162294388, + 0.002916853642091155, + 0.024154379963874817, + -0.08821339905261993, + -0.013053199276328087, + -0.00920876394957304, + 0.020444052293896675, + -0.029548509046435356, + -0.029280293732881546, + -0.02148711495101452, + 0.02679184079170227, + 0.04342125728726387, + -0.03111310489475727, + -0.0005126845207996666, + -0.0018048729980364442, + 0.031083302572369576, + -0.012986144982278347, + -0.0259275883436203, + -0.02135300822556019, + -0.009246015921235085, + 0.03403368219733238, + -0.005394130479544401, + 0.01076590921729803, + -0.026419317349791527, + 0.019594699144363403, + -0.00011193146201549098, + 0.0025033531710505486, + -0.005144540220499039, + -0.023111315444111824, + 0.04753391072154045, + -0.0018700645305216312, + -0.013470425270497799, + -0.09018032252788544, + -0.007763375528156757, + -0.08964388817548752, + -0.007375951856374741, + -0.008754285983741283, + -0.03933840990066528, + 0.0015673896996304393, + -0.002305916277691722, + 0.0019650578033179045, + -0.020190736278891563, + -0.0037159151397645473, + -0.004261660855263472, + 0.03385487198829651, + 0.021785134449601173, + 0.015087174251675606, + 0.029816726222634315, + 0.01816421188414097, + -0.03695426136255264, + -0.015161678194999695, + 0.021621223539114, + 0.01676352694630623, + -0.016778428107500076, + 0.026881245896220207, + -0.00960363820195198, + 0.004984355065971613, + 0.01353002805262804, + 0.018790051341056824, + 0.007629266940057278, + -0.00455595413222909, + 0.021636124700307846, + -0.005215319339185953, + 0.04109671711921692, + 0.007070483174175024, + -0.01847713068127632, + -0.018402626737952232, + 0.03385487198829651, + 0.01306064985692501, + -0.008255105465650558, + 0.009335421957075596, + -0.01127254031598568, + 0.04899419844150543, + 0.03051706776022911, + 0.013701388612389565, + 0.018849654123187065, + -0.00218670885078609, + -0.03918939828872681, + 0.03263299912214279, + -0.015243633650243282, + -0.02120399847626686, + 0.017985401675105095, + -0.0003287513682153076, + -0.01901356503367424, + 0.013172406703233719, + -0.003952466882765293, + 0.04273581504821777, + 0.028013715520501137, + 0.03549397364258766, + 0.03430189937353134, + -0.009156610816717148, + -0.012710478156805038, + 0.041066914796829224, + -0.02413947880268097, + -0.0037643429823219776, + 0.011585459113121033, + -0.050692904740571976, + -0.01820891536772251, + 0.021919243037700653, + -0.00987930502742529, + 0.0020209362264722586, + 0.013850398361682892, + -0.04801074042916298, + 0.007204591296613216, + 0.04005365073680878, + 0.08010730147361755, + 0.01682312972843647, + -0.020235439762473106, + -0.052421409636735916, + -0.028967373073101044, + -0.023617945611476898, + 0.022843098267912865, + -0.01350022666156292, + 0.020861277356743813, + -0.07885562628507614, + 0.006012517958879471, + 0.016733724623918533, + -0.028147824108600616, + -0.00997616071254015, + 0.03176874667406082, + 0.016331400722265244, + 0.0004609969910234213, + 0.04747430607676506, + -0.01289673987776041, + 0.02805841900408268, + 0.0005448146257549524, + -0.022023549303412437, + -0.04240799695253372, + -0.00024353679327759892, + -0.0009955671848729253, + -0.0285799503326416, + 0.024437496438622475, + 0.015735363587737083, + -0.010326332412660122, + 0.03981523960828781, + -0.06669648736715317, + 0.023960666730999947, + 0.08892864733934402, + -0.035344965755939484, + -0.06538520008325577, + -0.002847936935722828, + 0.029429301619529724, + -0.016808228567242622, + 0.05906721577048302, + -0.07271645218133926, + 0.01734466291964054, + 0.06532560288906097, + 0.01636120118200779, + -0.0398748405277729, + 0.006597378756850958, + 0.07599465548992157, + -0.0332290343940258, + -0.021963944658637047, + -0.01353002805262804, + 0.023111315444111824, + -0.01807480677962303, + -0.01350022666156292, + -0.045119963586330414, + 0.0691402330994606, + 0.0018616827437654138, + -0.04440471902489662, + 0.0009601775673218071, + 0.010251827538013458, + -0.026210704818367958, + -0.001405342249199748, + -0.07742514461278915, + -0.023156017065048218, + -0.0013336316915228963, + 0.01655491441488266, + -0.07855761051177979, + -0.006504248362034559, + 0.011920729652047157, + -0.005118463188409805, + -0.0005443489644676447, + -0.0055021620355546474, + -0.006548950914293528, + 0.017702283337712288, + 0.018402626737952232, + 0.02632991224527359, + 0.015161678194999695, + 0.04082849994301796, + -0.02406497299671173, + 0.0020414250902831554, + -0.0139621552079916, + -0.002460513263940811, + 0.003315452951937914, + -0.045179568231105804, + -0.006884221453219652, + 0.011242737993597984, + -0.012151693925261497, + -0.03352705389261246, + -0.006921473890542984, + -0.0008307258831337094, + -0.01279988419264555, + -0.057547323405742645, + 0.0024810018949210644, + 0.00021711095178034157, + 0.01160036027431488, + -0.017538374289870262, + 0.018387725576758385, + 0.03468932583928108, + -0.01333631668239832, + 0.008188051171600819, + 0.012293253093957901, + 0.007822979241609573, + 0.010512594133615494, + -0.008314709179103374, + -0.02135300822556019, + 0.0285799503326416, + -0.08600806444883347, + -0.008024141192436218, + -0.05996127054095268, + -0.003941291477531195, + 0.023483838886022568, + -0.03558338060975075, + 0.00025867053773254156, + -0.04070929437875748, + -0.0019538821652531624, + 0.0008302602218464017, + -0.0031664439011365175, + -0.010713756084442139, + -0.014625245705246925, + 0.06687529385089874, + -0.010490242391824722, + -0.08761736750602722, + -0.024556703865528107, + 0.025823282077908516, + -0.02667263336479664, + 0.0069624511525034904, + -0.0013205934083089232, + 0.00807629432529211, + -0.06139175966382027, + -0.022649386897683144, + -0.0018039416754618287, + -0.010981972329318523, + 0.00781552866101265, + 0.017791690304875374, + 0.04792133346199989, + -0.04735510051250458, + -0.018983762711286545, + 0.013373568654060364, + 0.08392193913459778, + 0.002819997724145651, + 0.033080026507377625, + -0.0037326784804463387, + 0.00911190826445818, + -0.04488154873251915, + -0.030934294685721397, + -0.02068246714770794, + -0.040798697620630264, + 0.03671584650874138, + -0.0032204596791416407, + -0.0049433778040111065, + 0.05534198880195618, + -0.057487718760967255, + -0.013798245228827, + 0.00460438197478652, + 0.030397862195968628, + -0.045984216034412384, + 0.008165700361132622, + 0.020697366446256638, + 0.06508718430995941, + 0.003429072443395853, + 0.025242146104574203, + 0.08356431871652603, + 0.07814038544893265, + 0.04210997745394707, + 0.010877666063606739, + 0.045835208147764206, + 0.05480555444955826, + -0.019505294039845467, + 0.03471912443637848, + -0.02074206992983818, + 0.01701684109866619, + -0.013321415521204472, + 0.005755477584898472, + 0.015012669377028942, + -0.00830725859850645, + 0.00286656292155385, + 0.011153332889080048, + -0.0030137095600366592, + -0.026583228260278702, + 0.0305766724050045, + 0.019132772460579872, + -0.04818955063819885, + -0.020265240222215652, + -0.007986889220774174, + -0.0399046428501606, + -0.025108037516474724, + 0.007074207998812199, + 0.016987040638923645, + 0.02241097204387188, + -0.013112802989780903, + 0.06705410778522491, + 0.014140966348350048, + -0.029220689088106155, + 0.01774698682129383, + -0.016778428107500076, + 0.03868276998400688, + 0.03960662707686424, + -0.0012554018758237362, + -0.0071375370025634766, + 0.031083302572369576, + 0.08290867507457733, + -0.02421398274600506, + -0.01090001780539751, + 0.028445841744542122, + 0.024586506187915802, + -0.012263450771570206, + 0.008575474843382835, + 0.01701684109866619, + 0.017836391925811768, + -0.034599918872117996, + 0.05942483991384506, + -0.005025332793593407, + 0.030040239915251732, + -0.00218670885078609, + -0.04315304383635521, + -0.008337060920894146, + -0.007148712873458862, + 0.02354344166815281, + 0.008925646543502808, + 0.01981821283698082, + 0.005111013073474169, + 0.033407844603061676, + 0.005572941154241562, + -0.0007161751273088157, + -0.013917452655732632, + 0.012419910170137882, + 0.04643124341964722, + -0.01688273437321186, + 0.013939803466200829, + 0.01189837884157896, + 0.006623455788940191, + 0.0003471446980256587, + 0.039070192724466324, + 0.032483987510204315, + -0.018298320472240448, + 0.007681420538574457, + 0.018909258767962456, + 0.007618091534823179, + 0.02181493490934372, + 0.00042164925253018737, + -0.011548207141458988, + -0.011615261435508728, + -0.018790051341056824, + -0.01728505827486515, + 0.0004279355925973505, + -0.027834905311465263, + -0.0007329386426135898, + -0.000144818244734779, + 0.02758158929646015, + 0.007372226566076279, + -0.01935628615319729, + -0.0004281683941371739, + -0.0558486208319664, + 0.00884369108825922, + -0.030934294685721397, + 0.009953809902071953, + 0.00860527716577053, + -0.032603196799755096, + -0.012159144505858421, + 0.01603338122367859, + -0.0007497021579183638, + -0.05659366399049759, + 0.003632097505033016, + 0.018834752961993217, + 0.024020271375775337, + -0.011615261435508728, + -0.010937269777059555, + -0.007942186668515205, + -0.02732827328145504, + -0.02506333403289318, + 0.015973778441548347, + -0.0035799441393464804, + -0.04801074042916298, + 0.032603196799755096, + 0.016659220680594444, + 0.0004973179311491549, + 0.007115185726433992, + 0.02254508063197136, + -0.004459097981452942, + -0.012360306456685066, + 0.016256894916296005, + -0.01512442622333765, + -0.041513942182064056, + -0.0625242292881012, + -0.021978845819830894, + -0.015273435041308403, + 0.03915959969162941, + 0.01326926238834858, + -0.02300700917840004, + -0.03862316533923149, + 0.008120996877551079, + -0.017657581716775894, + 0.0242586862295866, + -0.0005462115514092147, + 0.008724484592676163, + -0.0014416632475331426, + 0.03032335638999939, + 0.05638505145907402, + -0.08678291738033295, + -0.04929221794009209, + -0.004544778261333704, + 0.06163017451763153, + -0.0011073240311816335, + 0.03609000891447067, + -0.023096414282917976, + 0.013887650333344936, + 0.026896147057414055, + 0.023617945611476898, + 0.0016065046656876802, + 0.043838486075401306, + -0.07831919938325882, + 0.007025780156254768, + 0.04440471902489662, + -0.008411564864218235, + 0.0531962588429451, + 0.021755332127213478, + -0.05638505145907402, + -0.018864555284380913, + -0.02168082818388939, + -0.02886306680738926, + -0.01621219329535961, + 0.03647743538022041, + 0.004839071538299322, + -0.02066756598651409, + 0.07086873799562454, + 0.0012498140567913651, + 0.009223665110766888, + -0.020846376195549965, + -0.016793327406048775, + -0.04333185404539108, + -0.011287441477179527, + -0.011026674881577492, + 0.007293996401131153, + 0.007234393153339624, + 0.0032372232526540756, + -0.0005285167135298252, + -0.02381165884435177, + -0.0037662056274712086, + 0.029935933649539948, + -0.04181196168065071, + -0.03662644326686859, + -0.005606468301266432, + -0.02840113826096058, + -0.012285802513360977, + 0.005543139297515154, + 0.02878856286406517, + 0.025301748886704445, + -0.0684845969080925, + 0.01749367080628872, + -0.023617945611476898, + 0.0159588772803545, + 0.0751006007194519, + -0.01273282989859581, + -0.045656394213438034, + -0.00475339125841856, + -0.01269557699561119, + 0.0020246615167707205, + -0.053613483905792236, + 0.008217853493988514, + -0.04294443130493164, + -0.026344813406467438, + 0.010922368615865707, + -0.002285427413880825, + -0.021695729345083237, + 0.05221279710531235, + -0.03150052949786186, + 0.03564298152923584, + -0.012069739401340485, + -0.018924158066511154, + 0.04362986981868744, + -0.010296530090272427, + -0.007644168101251125, + 0.011101179756224155, + 0.025614667683839798, + -0.04196096956729889, + -0.020369546487927437, + -0.003484950866550207, + -0.019982123747467995, + 0.021725529804825783, + 0.03519595414400101, + -0.023960666730999947, + 0.046848468482494354, + -0.002313366625458002, + 0.00967069249600172, + 0.014997768215835094, + 0.03445091098546982, + 0.007644168101251125, + 0.012263450771570206, + 0.030546870082616806, + -0.002363657345995307, + -0.014647596515715122, + -0.028341535478830338, + -0.013686488382518291, + -0.007621816825121641, + -0.029623012989759445, + 0.07277605682611465, + 0.02254508063197136, + 0.03078528493642807, + -0.006206229794770479, + -0.020369546487927437, + -0.024109676480293274, + -0.015318137593567371, + 0.02154671959578991, + 0.024690812453627586, + -0.04416630417108536, + -0.00037997326580807567, + 0.02014603279531002, + 0.024512000381946564, + -0.03701386600732803, + 0.04559679329395294, + 0.014342128299176693, + 0.019117871299386024, + 0.011630162596702576, + -0.03957682475447655, + 0.011637612245976925, + 0.015407543629407883, + 0.0007632061024196446, + -0.004131278023123741, + -0.014573092572391033, + 0.11390257626771927, + 0.02606169506907463, + -0.006466995924711227, + 0.03617941588163376, + -0.0531962588429451, + 0.06633885949850082, + -0.011287441477179527, + 0.024288486689329147, + 0.025093136355280876, + -0.0005713568534702063, + -0.0399046428501606, + -0.03495753929018974, + -0.027238868176937103, + 0.014699749648571014, + -0.0016037106979638338, + 0.0038630615454167128, + -0.005330801475793123, + 0.008828790858387947, + -0.03889138251543045, + 0.033020421862602234, + -0.0024381617549806833, + -0.011279990896582603, + 0.01289673987776041, + 0.029161086305975914, + 0.06878261268138885, + 0.028565049171447754, + 0.0018812401685863733, + 0.013537478633224964, + 0.020265240222215652, + 0.033676061779260635, + -0.03838475048542023, + -0.028311733156442642, + -0.0009611088316887617, + 0.03650723397731781, + -0.010840414091944695, + -0.019460592418909073, + 0.03293101489543915, + 0.0017750711413100362, + -0.0024251234717667103, + -0.0058448826894164085, + 0.017985401675105095, + 0.018536735326051712, + -0.006567577365785837, + -0.014774254523217678, + 0.016391003504395485, + -0.0001331769017269835, + -0.0013261812273412943, + -0.02074206992983818, + 0.03439130634069443, + 0.012069739401340485, + 0.0029969459865242243, + -0.02168082818388939, + -0.03164953738451004, + -0.020309943705797195, + 0.03111310489475727, + -0.010162422433495522, + -0.022232161834836006, + -0.012069739401340485, + 0.016718823462724686, + -0.012121892534196377, + -0.02101028710603714, + 0.005010431632399559, + 0.008798988536000252, + -0.024765316396951675, + 0.0166145171970129, + 0.00586723443120718, + 0.014066461473703384, + -0.0399046428501606, + 0.02671733684837818, + -0.02200864814221859, + 0.003483088221400976, + -0.0037811065558344126, + -0.03629862144589424, + 0.038593363016843796, + 0.06028909236192703, + -0.02233646810054779, + 0.027432579547166824, + -0.014111164025962353, + 0.008351961150765419, + -0.027149463072419167, + 0.00950678251683712, + 3.620456118369475e-05, + -0.011361945420503616, + 0.01203993707895279, + -0.014237822033464909, + 0.04488154873251915, + -0.00904485397040844, + -0.017240354791283607, + -0.0013317690463736653, + -0.0008060462423600256, + -0.018268518149852753, + -0.004492625128477812, + 0.045447781682014465, + 0.011011774651706219, + -0.014386830851435661, + 0.016048282384872437, + 0.03209656476974487, + -0.021129494532942772, + -0.037669505923986435, + -0.04127552732825279, + -0.0015115112764760852, + 0.0186112392693758, + -0.01782149076461792, + 0.02598719112575054, + -0.05844137817621231, + 0.035344965755939484, + -0.020175835117697716, + -0.027030255645513535, + 0.011913279071450233, + -0.047504108399152756, + 0.006128000095486641, + -0.04908360540866852, + 0.017657581716775894, + -0.01747876964509487, + 0.023379530757665634, + 0.02612129971385002, + 0.0006998772150836885, + -0.036596640944480896, + 0.025942487642169, + -0.045179568231105804, + 0.05963345244526863, + 0.01868574507534504, + -0.02354344166815281, + 0.0458948090672493, + 0.03358665481209755, + -0.004224408883601427, + -0.027238868176937103, + 0.004846521653234959, + 0.01655491441488266, + 0.00465280981734395, + 0.03704366832971573, + -0.0055692158639431, + 0.01456564199179411, + 0.04881538823246956, + 0.03129191696643829, + 0.04592461138963699, + 0.01399195659905672, + -0.004976904951035976, + -0.019505294039845467, + 0.006090748123824596, + -0.0159588772803545, + 0.002218373352661729, + -0.021770233288407326, + 0.015079723671078682, + -0.01622709445655346, + 0.0020749520044773817, + 0.0026542250998318195, + 0.007338699419051409, + 0.019862916320562363, + 0.0038220840506255627, + -0.0372224785387516, + 0.03814633563160896, + -0.0025927587412297726, + -0.02267918922007084, + 0.007215766701847315, + -0.02533155120909214, + -0.015251084230840206, + -0.049202810972929, + -0.027358075603842735, + 0.03072568215429783, + -0.03811653330922127, + 0.0012991733383387327, + -0.03871257230639458, + 0.04824915528297424, + 0.04249740391969681, + -0.010087917558848858, + -0.005151990335434675, + -0.005051409360021353, + -0.03489793837070465, + -0.03051706776022911, + -0.038742370903491974, + 1.307467755395919e-05, + 0.006884221453219652, + -0.017702283337712288, + 0.038742370903491974, + -0.018179113045334816, + -0.033825069665908813, + 0.004429296124726534, + -0.03847415745258331, + 0.010944720357656479, + -0.028758760541677475, + -0.14519448578357697, + -0.01603338122367859, + 0.057219505310058594, + 0.006943825166672468, + -0.03364625945687294, + 0.04148413985967636, + -0.028237229213118553, + -0.04911340773105621, + 0.018462231382727623, + -0.02320072054862976, + 0.00691402330994606, + -0.09661751985549927, + -0.01402920950204134, + -0.06082552298903465, + 0.006578752771019936, + 0.020905980840325356, + 0.0030230225529521704, + -0.04446432366967201, + -0.02446729876101017, + -0.004816719796508551, + 0.031232312321662903, + -0.023349730297923088, + -0.015809867531061172, + 0.04136493429541588, + -0.060676515102386475, + 0.005111013073474169, + 0.005114738363772631, + 0.0018654079176485538, + -0.05400090664625168, + 0.007986889220774174, + -0.0014099988620728254, + -8.89398215804249e-05, + 0.0745045617222786, + -0.0046751610934734344, + 0.02972732111811638, + -0.03954702243208885, + 0.041066914796829224, + -0.004582030698657036, + -0.0030993898399174213, + 0.0020954408682882786, + -0.012047387659549713, + -0.01528833620250225, + -0.03802713006734848, + 0.06770974397659302, + -0.01855163648724556, + 0.009849502705037594 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingOwner.txt\n\npublic class ThingOwner : ThingOwner, IList, ICollection, IEnumerable, IEnumerable where T : Thing\n{\n\tprivate List innerList = new List();\n\n\tpublic List InnerListForReading => innerList;\n\n\tpublic new T this[int index] => innerList[index];\n\n\tpublic override int Count => innerList.Count;\n\n\tT IList.this[int index]\n\t{\n\t\tget\n\t\t{\n\t\t\treturn innerList[index];\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow setting individual elements.\");\n\t\t}\n\t}\n\n\tbool ICollection.IsReadOnly => true;\n\n\tpublic ThingOwner()\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner, oneStackOnly, contentsLookMode, removeContentsIfDestroyed)\n\t{\n\t}\n\n\tpublic override void ExposeData()\n\t{\n\t\tbase.ExposeData();\n\t\tScribe_Collections.Look(ref innerList, \"innerList\", true, contentsLookMode);\n\t\tif (Scribe.mode == LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\tint num = innerList.RemoveAll((T x) => x == null || (x is MinifiedThing minifiedThing && minifiedThing.InnerThing == null));\n\t\t\tif (num > 0)\n\t\t\t{\n\t\t\t\tLog.Warning($\"ThingOwner removed {num} invalid entries during PostLoadInit.\");\n\t\t\t}\n\t\t}\n\t\tif (Scribe.mode != LoadSaveMode.LoadingVars && Scribe.mode != LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] != null)\n\t\t\t{\n\t\t\t\tinnerList[i].holdingOwner = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic List.Enumerator GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tpublic override int GetCountCanAccept(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (!(item is T))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn base.GetCountCanAccept(item, canMergeWithExistingStacks);\n\t}\n\n\tpublic override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (count <= 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item?.ToString() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + count + \" of \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tint stackCount = item.stackCount;\n\t\tint num = Mathf.Min(stackCount, count);\n\t\tThing thing = item.SplitOff(num);\n\t\tif (!TryAdd((T)thing, canMergeWithExistingStacks))\n\t\t{\n\t\t\tif (thing != item)\n\t\t\t{\n\t\t\t\tint result = stackCount - item.stackCount - thing.stackCount;\n\t\t\t\titem.TryAbsorbStack(thing, respectStackLimit: false);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn stackCount - item.stackCount;\n\t\t}\n\t\tCompPushable compPushable = item.TryGetComp();\n\t\tif (compPushable != null && owner is Pawn pawn)\n\t\t{\n\t\t\tcompPushable.OnStartedCarrying(pawn);\n\t\t}\n\t\treturn num;\n\t}\n\n\tpublic override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (canMergeWithExistingStacks)\n\t\t{\n\t\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t\t{\n\t\t\t\tT val = innerList[i];\n\t\t\t\tif (!val.CanStackWith(item))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint num = Mathf.Min(item.stackCount, val.def.stackLimit - val.stackCount);\n\t\t\t\tif (num > 0)\n\t\t\t\t{\n\t\t\t\t\tThing other = item.SplitOff(num);\n\t\t\t\t\tint stackCount = val.stackCount;\n\t\t\t\t\tval.TryAbsorbStack(other, respectStackLimit: true);\n\t\t\t\t\tif (val.stackCount > stackCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tNotifyAddedAndMergedWith(val, val.stackCount - stackCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Destroyed || item.stackCount == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Count >= maxStacks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\titem.holdingOwner = this;\n\t\tinnerList.Add(item2);\n\t\tNotifyAdded(item2);\n\t\treturn true;\n\t}\n\n\tprotected override void NotifyAdded(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemAdded(item as T);\n\t\t}\n\t\tbase.NotifyAdded(item);\n\t}\n\n\tprotected override void NotifyRemoved(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemRemoved(item as T);\n\t\t}\n\t\tbase.NotifyRemoved(item);\n\t}\n\n\tpublic void TryAddRangeOrTransfer(IEnumerable things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)\n\t{\n\t\tif (things == this)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (things is ThingOwner thingOwner)\n\t\t{\n\t\t\tthingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);\n\t\t\tif (destroyLeftover)\n\t\t\t{\n\t\t\t\tthingOwner.ClearAndDestroyContents();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (things is IList list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t{\n\t\t\t\tif (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t\t{\n\t\t\t\t\tlist[i].Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tforeach (T thing in things)\n\t\t{\n\t\t\tif (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t{\n\t\t\t\tthing.Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override int IndexOf(Thing item)\n\t{\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t\treturn innerList.IndexOf(item2);\n\t}\n\n\tpublic override bool Remove(Thing item)\n\t{\n\t\tif (!Contains(item))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner == this)\n\t\t{\n\t\t\titem.holdingOwner = null;\n\t\t}\n\t\tint index = innerList.LastIndexOf((T)item);\n\t\tinnerList.RemoveAt(index);\n\t\tNotifyRemoved(item);\n\t\treturn true;\n\t}\n\n\tpublic int RemoveAll(Predicate predicate)\n\t{\n\t\tint num = 0;\n\t\tfor (int num2 = innerList.Count - 1; num2 >= 0; num2--)\n\t\t{\n\t\t\tif (predicate(innerList[num2]))\n\t\t\t{\n\t\t\t\tRemove(innerList[num2]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t\treturn num;\n\t}\n\n\tprotected override Thing GetAt(int index)\n\t{\n\t\treturn innerList[index];\n\t}\n\n\tpublic void GetThingsOfType(List list) where J : Thing\n\t{\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] is J item)\n\t\t\t{\n\t\t\t\tlist.Add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic int TryTransferToContainer(Thing item, ThingOwner otherContainer, int stackCount, out T resultingTransferredItem, bool canMergeWithExistingStacks = true)\n\t{\n\t\tThing resultingTransferredItem2;\n\t\tint result = TryTransferToContainer(item, otherContainer, stackCount, out resultingTransferredItem2, canMergeWithExistingStacks);\n\t\tresultingTransferredItem = (T)resultingTransferredItem2;\n\t\treturn result;\n\t}\n\n\tpublic new T Take(Thing thing, int count)\n\t{\n\t\treturn (T)base.Take(thing, count);\n\t}\n\n\tpublic new T Take(Thing thing)\n\t{\n\t\treturn (T)base.Take(thing);\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, int count, out T resultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing resultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, count, out resultingThing2, placedAction2, nearPlaceValidator);\n\t\tresultingThing = (T)resultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, mode, out lastResultingThing2, placedAction2, nearPlaceValidator);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, out lastResultingThing2, placedAction2, nearPlaceValidator, playDropSound: true);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tint IList.IndexOf(T item)\n\t{\n\t\treturn innerList.IndexOf(item);\n\t}\n\n\tvoid IList.Insert(int index, T item)\n\t{\n\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow inserting individual elements at any position.\");\n\t}\n\n\tvoid ICollection.Add(T item)\n\t{\n\t\tTryAdd(item);\n\t}\n\n\tvoid ICollection.CopyTo(T[] array, int arrayIndex)\n\t{\n\t\tinnerList.CopyTo(array, arrayIndex);\n\t}\n\n\tbool ICollection.Contains(T item)\n\t{\n\t\treturn innerList.Contains(item);\n\t}\n\n\tbool ICollection.Remove(T item)\n\t{\n\t\treturn Remove(item);\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n}\n\n", + "timestamp": "2025-08-24 20:53:27,802" + }, + "ThingOwner-TryAdd-override-virtual": { + "keywords": [ + "ThingOwner", + "TryAdd", + "virtual", + "override" + ], + "question": "public abstract class ThingOwner virtual override TryAdd", + "embedding": [ + -0.0049171303398907185, + 0.0012670025462284684, + 0.019699471071362495, + -0.01261199451982975, + -0.08294514566659927, + 0.0006480089505203068, + 0.017130648717284203, + 0.04450564086437225, + 0.02870582789182663, + 0.07916928082704544, + -0.055399928241968155, + -0.0877113938331604, + -0.011567442677915096, + -0.05781400203704834, + 0.004495440982282162, + -0.0044722286984324455, + -0.01843053475022316, + -0.0782407894730568, + -0.03262096270918846, + 0.026926221325993538, + 0.01801271364092827, + 0.0709366649389267, + 0.013463110662996769, + 0.0554618276655674, + 0.04150352254509926, + -0.0018540793098509312, + -0.0014275539433583617, + 0.06069232150912285, + -0.01242629624903202, + -0.008774233981966972, + -0.03707771748304367, + 0.026260804384946823, + -0.005396850407123566, + -0.021680250763893127, + 0.02480616793036461, + 0.012735793367028236, + -0.056173671036958694, + 0.0025939701590687037, + 0.014600511640310287, + -0.012975653633475304, + -0.01609383337199688, + -0.01444576308131218, + -0.004356167279183865, + 0.0029382852371782064, + -0.026632199063897133, + 0.03546833246946335, + 0.01826031133532524, + -0.04462943971157074, + -0.007671651896089315, + 0.05902104079723358, + -0.008588536642491817, + 0.006039056461304426, + -0.024713318794965744, + -0.029170073568820953, + -0.01337799895554781, + 0.018291261047124863, + -0.003855169517919421, + -0.019668521359562874, + -0.019885169342160225, + 0.04370094835758209, + -0.014283277094364166, + 0.03136749938130379, + -0.02638460136950016, + -0.027870187535881996, + 0.049364738166332245, + 0.017362769693136215, + 0.003957690205425024, + 0.04193681478500366, + 0.011157359927892685, + -0.02989739179611206, + -0.004781725350767374, + -0.008457000367343426, + -0.06938917934894562, + 0.011497805826365948, + -0.05567847564816475, + 0.061187516897916794, + 0.021277904510498047, + 0.02735951729118824, + -0.007307993248105049, + 0.010252081789076328, + -0.011668029241263866, + -0.021695725619792938, + -0.028968900442123413, + 0.013849982060492039, + 0.07731229811906815, + 0.024187175557017326, + -0.003183948341757059, + -0.09049686789512634, + -0.04688876494765282, + 0.10262914001941681, + -0.007509165909141302, + 0.024109801277518272, + 0.015699224546551704, + -0.02189689874649048, + -0.01648070476949215, + 0.08690670132637024, + -0.06976057589054108, + 0.015629587695002556, + -0.017687741667032242, + 0.010669901967048645, + -0.012844117358326912, + -0.10300053656101227, + -0.02797851152718067, + 0.07564102113246918, + 0.0016954621532931924, + 0.05960908532142639, + -0.009818785823881626, + -0.00341993966139853, + -0.017409194260835648, + 0.01846148446202278, + -0.032682862132787704, + -0.018151987344026566, + 0.03395180031657219, + 0.028783202171325684, + -0.02231471985578537, + 0.03124370239675045, + -0.009223004803061485, + -0.03203291818499565, + -1.2973779121239204e-05, + -0.011296633630990982, + 0.05397624149918556, + -0.0009255888871848583, + 0.005304001271724701, + -0.013873194344341755, + -0.010724063962697983, + 0.03280666097998619, + -0.006990759167820215, + 0.013842244632542133, + -0.014724310487508774, + 0.015358778648078442, + -0.014995119534432888, + -0.015536739490926266, + -0.026137005537748337, + -0.03729436546564102, + -0.0056289732456207275, + -0.01917332597076893, + 0.021865949034690857, + 0.006588412914425135, + -0.09879137575626373, + 0.008395100943744183, + -0.02407885156571865, + 0.007133901119232178, + -0.00038348586531355977, + -0.0005628973012790084, + 0.08597820997238159, + -0.020906507968902588, + -0.05574037507176399, + -0.02327415905892849, + -0.015258192084729671, + 0.005950076039880514, + -0.009617612697184086, + -0.01114962249994278, + -0.005346557125449181, + 0.039275143295526505, + 0.020983882248401642, + 0.0028067491948604584, + 0.019065003842115402, + -0.035777829587459564, + -0.0038803161587566137, + -0.0349731370806694, + 0.005160859320312738, + 0.029541470110416412, + -0.03720151633024216, + 0.008836133405566216, + 0.014391601085662842, + -0.024001477286219597, + 0.023630080744624138, + 0.004746907390654087, + 0.04233916103839874, + 0.03317805752158165, + 0.039306093007326126, + -0.008820658549666405, + 0.034230347722768784, + 0.04274150729179382, + 0.020132767036557198, + -0.053821492940187454, + 0.04116307571530342, + 0.05515233054757118, + 0.02910817414522171, + -0.05834014713764191, + 0.060599472373723984, + 0.002671344205737114, + 0.018585283309221268, + 0.00245276209898293, + -0.007373761385679245, + -0.03751101344823837, + 0.010468728840351105, + 0.02307298593223095, + 0.022670641541481018, + 0.04942663758993149, + 0.015366516076028347, + 0.04964328557252884, + 0.02113863080739975, + 0.031909119337797165, + -0.02482164278626442, + -0.01114962249994278, + -0.03438509628176689, + 0.04948853701353073, + -0.11878487467765808, + 0.0068205357529222965, + 0.0029266790952533484, + 0.010375880636274815, + 0.01097939908504486, + -0.007725813891738653, + 0.03008308820426464, + -0.02233019471168518, + -0.0021471341606229544, + -0.032868560403585434, + 0.01590813510119915, + 0.006468483246862888, + 0.03608732670545578, + -0.008371888659894466, + 0.008905770257115364, + -0.048436250537633896, + -0.03299235925078392, + -0.023614605888724327, + -0.02889152616262436, + 0.005775983911007643, + 0.03413749858736992, + -0.004100832622498274, + 0.004356167279183865, + 0.018291261047124863, + -0.00843378808349371, + -0.0020136635284870863, + 0.017950814217329025, + -0.021633826196193695, + 0.025115665048360825, + 0.0538833923637867, + 0.03155319765210152, + -0.02290276251733303, + -0.013246462680399418, + 0.016449755057692528, + -0.05119077116250992, + 0.00597328832373023, + 0.016062883660197258, + -0.03881089761853218, + -0.007598146330565214, + -0.011551967822015285, + 0.043360501527786255, + 0.012256073765456676, + -0.03806810826063156, + 0.029727168381214142, + -0.008805183693766594, + 0.026090580970048904, + -0.004255581181496382, + 0.00941644050180912, + -0.035251684486866, + 0.01329288724809885, + 0.035623081028461456, + -0.008070128969848156, + 0.024388348683714867, + 0.034446995705366135, + -0.04602217301726341, + 0.025270413607358932, + -0.011497805826365948, + 0.03785146027803421, + -0.012929229065775871, + 0.011079985648393631, + -0.009989009238779545, + -0.039677489548921585, + -0.02718929387629032, + 0.024868067353963852, + 0.012372134253382683, + -0.017115173861384392, + -0.036768220365047455, + 0.008387363515794277, + 0.00979557354003191, + 0.007923117838799953, + -0.06784170120954514, + -0.0627659484744072, + -0.008309989236295223, + 0.040048886090517044, + 0.010623477399349213, + -0.0454341284930706, + -0.046826865524053574, + -0.013053027912974358, + 0.02636912651360035, + 0.038687098771333694, + -0.04933378845453262, + -0.002611379139125347, + -0.022825388237833977, + 0.011304371058940887, + -0.055214229971170425, + -0.007176456972956657, + -0.02559538558125496, + 0.017935339361429214, + 0.02986644208431244, + -0.06901778280735016, + -0.006793454755097628, + -0.027514265850186348, + 0.0036636684089899063, + 0.06425153464078903, + -0.03494218736886978, + 0.006743161473423243, + -0.027669014409184456, + 0.020999357104301453, + -0.01883288100361824, + 0.003584359772503376, + -0.018925730139017105, + 0.02347533218562603, + -0.013702970929443836, + -0.0049287364818155766, + 0.0015658603515475988, + 0.018523383885622025, + 0.03413749858736992, + 0.00030417731613852084, + -0.003491510869935155, + -0.12348922342061996, + 0.026276279240846634, + -0.09136345237493515, + -0.01649617962539196, + 0.01251140795648098, + -0.013122664764523506, + 0.005516780540347099, + -0.018538858741521835, + 0.016960425302386284, + -0.05942338705062866, + 0.0022960794158279896, + 0.010716326534748077, + 0.02172667533159256, + 0.009060518816113472, + 0.013339311815798283, + -0.0005063174176029861, + 0.019126901403069496, + -0.02561086043715477, + 0.0028995980974286795, + 0.021432653069496155, + 0.008201665244996548, + -0.00788829941302538, + 0.007690995465964079, + -0.03277571126818657, + -0.003688815049827099, + 0.040234584361314774, + 0.008178452961146832, + 0.005269182845950127, + -0.0011248274240642786, + 0.012534620240330696, + -0.033487554639577866, + 0.010453253984451294, + 0.019683996215462685, + -0.010321718640625477, + -0.05047892779111862, + 0.026817897334694862, + 0.018306735903024673, + 0.023336058482527733, + 0.010027696378529072, + -0.01903405413031578, + 0.041627321392297745, + 0.022221870720386505, + 0.008944457396864891, + 8.41444416437298e-05, + -0.008170715533196926, + -0.01784249022603035, + 0.03877994790673256, + 0.001028109691105783, + -0.019838744774460793, + 0.013819032348692417, + -0.005164728034287691, + -0.03602542728185654, + 0.00902956910431385, + -0.015575426630675793, + 0.013826769776642323, + 0.008565324358642101, + 0.021680250763893127, + 0.02929387241601944, + 0.023583656176924706, + -0.002363781910389662, + 0.05837109684944153, + -0.013153614476323128, + -0.007385367527604103, + 0.011141885071992874, + -0.0699462741613388, + -0.017579417675733566, + 0.005903651472181082, + 0.009679512120783329, + -0.033673252910375595, + 0.01706874929368496, + -0.02287181280553341, + 0.003205226268619299, + 0.07898358255624771, + 0.048436250537633896, + -0.0014643067261204123, + 0.0021355280186980963, + -0.03556118160486221, + -0.02752974070608616, + 0.010004484094679356, + -0.018693607300519943, + 0.025146614760160446, + 0.031135378405451775, + -0.062363605946302414, + 0.017734166234731674, + 0.025548961013555527, + -0.03342565521597862, + -0.011451381258666515, + 0.01357917208224535, + 0.013726183213293552, + 0.000961858022492379, + 0.04794105514883995, + 0.03146034851670265, + 0.0029537600930780172, + 0.010615739971399307, + -0.015057018958032131, + -0.020287515595555305, + 0.040853578597307205, + 0.006104824598878622, + -0.03983223810791969, + 0.022252820432186127, + 0.019838744774460793, + -0.008774233981966972, + 0.030315211042761803, + -0.04695066437125206, + 0.00044780317693948746, + 0.030005713924765587, + -0.0037255678325891495, + -0.03203291818499565, + -0.011768615804612637, + 0.02327415905892849, + -0.009927109815180302, + 0.08449262380599976, + -0.0768171027302742, + -0.01884835585951805, + 0.04326765239238739, + 0.01561411377042532, + 0.02889152616262436, + 0.013672021217644215, + 0.009385490790009499, + 0.0020600880961865187, + -0.028086835518479347, + -0.011056773364543915, + 0.0011693176347762346, + 0.008658172562718391, + -0.003127851989120245, + -0.022825388237833977, + 0.0695129781961441, + 0.00806239154189825, + -0.025966782122850418, + 0.02172667533159256, + 0.02660124935209751, + -0.05236686021089554, + -0.012828642502427101, + -0.032280515879392624, + -0.007013971451669931, + -0.019111426547169685, + -0.009772361256182194, + -0.037572912871837616, + -0.0388418473303318, + 0.024713318794965744, + 0.009509289637207985, + 0.021200530230998993, + 0.023336058482527733, + -0.0014497990487143397, + -0.0012225123355165124, + -0.0004782692703884095, + 0.018167462199926376, + 0.03664442151784897, + 0.042958155274391174, + -0.05292395129799843, + -0.025177564471960068, + -0.014871321618556976, + 0.01436065137386322, + -0.021448127925395966, + -0.032094817608594894, + 0.008542112074792385, + 0.004920999053865671, + -0.0016151864547282457, + 0.00490552419796586, + -0.02674052305519581, + 0.00645687710493803, + -0.015730174258351326, + -0.05601892247796059, + 0.01824483647942543, + -0.0252239890396595, + -0.0052459705621004105, + -0.018182937055826187, + 0.011157359927892685, + -0.023939577862620354, + -0.027313092723488808, + 0.023722929880023003, + 0.006433664821088314, + -0.00854984950274229, + 0.020504163578152657, + -0.004495440982282162, + -0.005880439188331366, + 0.012062638066709042, + -0.036582522094249725, + -0.06858449429273605, + -0.06815119832754135, + -0.03280666097998619, + 0.007311861962080002, + -0.04574362561106682, + -0.006077743601053953, + -0.05057177692651749, + -0.0050447979010641575, + 0.016805676743388176, + -0.010731801390647888, + 0.0016451689880341291, + -0.012735793367028236, + 0.06437533348798752, + -0.022469468414783478, + -0.13877835869789124, + -0.033394705504179, + 0.03376610204577446, + -0.023011086508631706, + 0.010623477399349213, + 0.033642303198575974, + 0.008936719968914986, + -0.04478418827056885, + 0.0021896897815167904, + -0.002996315946802497, + 0.008526637218892574, + -0.012449508532881737, + 0.007865087129175663, + 0.046672116965055466, + -0.04193681478500366, + -0.029371246695518494, + 0.01801271364092827, + 0.05821634829044342, + -0.017796065658330917, + 0.023630080744624138, + 0.026260804384946823, + 0.005745034199208021, + -0.03432319685816765, + -0.0050834850408136845, + -0.02850465476512909, + -0.04487703740596771, + 0.037170566618442535, + 0.010932974517345428, + -0.018337685614824295, + 0.043731898069381714, + -0.03311615809798241, + -0.04487703740596771, + -0.0016828888328745961, + -0.020519638434052467, + -0.024156225845217705, + 0.022593267261981964, + 0.05233591049909592, + 0.02113863080739975, + 0.0052575767040252686, + 0.03305425867438316, + 0.0676560029387474, + 0.0577521026134491, + 0.026322703808546066, + 0.005598023533821106, + -0.017238972708582878, + 0.06555142253637314, + -0.004824281204491854, + 0.044753238558769226, + -0.07489822804927826, + 0.011907889507710934, + -0.024976391345262527, + -0.0038029418792575598, + 0.04555792734026909, + -0.00015523198817390949, + 0.03221861645579338, + -0.0013027881504967809, + -0.008805183693766594, + 0.0029943815898150206, + 0.01651165448129177, + 0.016821151599287987, + -0.060444723814725876, + 0.0050061107613146305, + -0.01269710622727871, + -0.030887780711054802, + -0.05125267058610916, + 0.0014062761329114437, + 0.013819032348692417, + 0.025301363319158554, + 0.019065003842115402, + 0.051685966551303864, + -0.021045781672000885, + -0.027792813256382942, + 0.021633826196193695, + -0.03583972901105881, + 0.03933704271912575, + 0.042586758732795715, + 0.0017022324027493596, + 0.023119410499930382, + 0.03395180031657219, + 0.06381823867559433, + -0.009238479658961296, + 0.006244097836315632, + 0.03942989185452461, + 0.008665909990668297, + -0.02500734105706215, + 0.03648967295885086, + 0.01937449909746647, + 0.01242629624903202, + -0.003154932986944914, + -0.011521018110215664, + -0.0029614975210279226, + 0.02988191694021225, + -0.0009768492309376597, + -0.07167945802211761, + -0.005988763179630041, + -0.0262298546731472, + 0.03608732670545578, + 0.0013066567480564117, + 0.07130806148052216, + -0.008650435134768486, + 0.003787467023357749, + -0.01686757616698742, + 0.0034489550162106752, + -0.026075106114149094, + 0.020891033113002777, + 0.03416844829916954, + -0.006371765397489071, + -0.0031742765568196774, + 0.00891350768506527, + 0.017347294837236404, + -0.007586540188640356, + 0.04391759634017944, + 0.04639356955885887, + -0.018709082156419754, + 0.006538120098412037, + 0.015118918381631374, + -0.017393719404935837, + 0.019095951691269875, + -0.02189689874649048, + -0.0026191165670752525, + 0.0021800179965794086, + 0.006379502825438976, + -0.018678132444620132, + 0.02231471985578537, + -0.04283435642719269, + -0.006805060897022486, + 0.0013569500297307968, + 0.02000896818935871, + 0.014701098203659058, + -0.01436065137386322, + 0.0022612609900534153, + -0.017208022996783257, + 0.024883542209863663, + -0.06914158165454865, + 0.042555809020996094, + 0.021448127925395966, + -0.0147629976272583, + 0.02678694762289524, + 0.028999850153923035, + -0.005362031981348991, + -0.040079835802316666, + 0.01821388676762581, + 0.026910746470093727, + 0.022577792406082153, + -0.015730174258351326, + -0.0008685254142619669, + -0.02539421245455742, + -0.012766743078827858, + -0.04345335066318512, + 0.014167215675115585, + -0.015103443525731564, + 0.005481962114572525, + 0.02209807187318802, + 0.004131782334297895, + -0.029572419822216034, + -0.031940069049596786, + 0.01668187789618969, + 0.01844600960612297, + 0.018322210758924484, + 0.014724310487508774, + -0.020318465307354927, + -0.028071360662579536, + -0.024171700701117516, + -0.030423535034060478, + -0.014468975365161896, + 0.04794105514883995, + -0.006650312338024378, + -0.008573061786592007, + -0.01785796508193016, + 0.027715438976883888, + -0.01262746937572956, + 0.024310974404215813, + -0.0038609725888818502, + 0.017300870269536972, + -0.02757616527378559, + 0.024295499548316002, + 0.05184071511030197, + -0.008758759126067162, + -0.05100507289171219, + -0.0038396946620196104, + 0.05199546366930008, + 0.02195879817008972, + 0.018167462199926376, + -0.03243526443839073, + 0.002692622132599354, + 0.015761123970150948, + -0.003491510869935155, + -0.0195601973682642, + 0.051593117415905, + -0.03893469646573067, + -0.023227734491229057, + 0.06323019415140152, + -0.012333447113633156, + 0.02910817414522171, + 0.018786456435918808, + -0.05038607865571976, + -0.01577659882605076, + -0.009068256244063377, + -0.035963527858257294, + -0.00788829941302538, + 0.0520264133810997, + 0.0028086835518479347, + -0.009106943383812904, + 0.05722595751285553, + 0.010159232653677464, + -0.002539808163419366, + -0.016372380778193474, + -0.01349406037479639, + -0.03667537122964859, + -0.0017505913274362683, + -0.03141392394900322, + -0.011234734207391739, + 0.05063367635011673, + -0.024403823539614677, + -0.00902956910431385, + -0.0051221721805632114, + 0.018585283309221268, + 0.04636261984705925, + -0.0246514193713665, + -0.03995603695511818, + 0.007184194400906563, + -0.034632690250873566, + -0.019683996215462685, + -0.006518776528537273, + 0.015567689202725887, + -0.012658419087529182, + -0.016728302463889122, + 0.010329456068575382, + -0.014414813369512558, + -0.03515883535146713, + 0.0547499842941761, + -0.007246093824505806, + -0.022392094135284424, + -0.017146123573184013, + 0.02757616527378559, + 0.010608002543449402, + -0.02927839756011963, + 0.014708835631608963, + -0.03023783676326275, + -0.010128282941877842, + 0.028566554188728333, + -0.007687126751989126, + -0.014600511640310287, + 0.09606780856847763, + -0.0508812740445137, + 0.028396330773830414, + 0.004085357766598463, + -0.005818539764732122, + 0.03136749938130379, + 0.008820658549666405, + -0.0013492126017808914, + 0.024914491921663284, + 0.01524271722882986, + -0.025951307266950607, + 0.002990512875840068, + 0.029340296983718872, + -0.027050020173192024, + 0.04964328557252884, + 0.012774480506777763, + 0.0021896897815167904, + 0.0262298546731472, + 0.02112315595149994, + -0.012449508532881737, + 0.01329288724809885, + 0.01066216453909874, + 0.003195554483681917, + 0.02834990620613098, + 0.033394705504179, + 0.017409194260835648, + -0.02268611639738083, + -0.005126040894538164, + -0.018956679850816727, + 0.030980629846453667, + -0.04933378845453262, + 0.05601892247796059, + -0.005547730252146721, + 0.02542516216635704, + -0.013757132925093174, + -0.011172834783792496, + -0.05205736309289932, + -0.048621948808431625, + 0.0434224009513855, + 0.006843748036772013, + -0.05964003503322601, + -0.0042710560373961926, + 0.022639691829681396, + 0.03218766674399376, + -0.012851854786276817, + 0.055771324783563614, + 0.010468728840351105, + 0.06072327122092247, + 0.004909392911940813, + -0.020287515595555305, + 0.011637079529464245, + 0.021448127925395966, + -0.01940544880926609, + -0.015258192084729671, + -0.004031195770949125, + 0.11519470810890198, + 0.04484608769416809, + -0.0007732583908364177, + 0.03240431472659111, + -0.04035838320851326, + 0.017966289073228836, + -0.008356413803994656, + 0.033673252910375595, + 0.04561982676386833, + -0.007617489900439978, + -0.03062470816075802, + -0.03822285309433937, + 0.0004688392800744623, + -0.017718691378831863, + -0.0162640567868948, + 0.004526390694081783, + -0.00611643074080348, + 0.008387363515794277, + -0.01883288100361824, + 0.028009461238980293, + 0.0075942776165902615, + 0.00933132879436016, + -0.014801684767007828, + 0.03788240998983383, + 0.06784170120954514, + 0.0349731370806694, + -0.011977526359260082, + 0.04302005469799042, + 0.002655869349837303, + 0.033085208386182785, + -0.044319942593574524, + -0.012333447113633156, + 0.005748902913182974, + 0.025657285004854202, + -0.02019466646015644, + -0.018863830715417862, + 0.06462293118238449, + 0.021680250763893127, + 0.009532501921057701, + -0.031692471355199814, + 0.004619239829480648, + -0.008101078681647778, + -0.032280515879392624, + -0.031197277829051018, + 0.01162934210151434, + 0.004154994618147612, + -0.019730420783162117, + -0.008480212651193142, + 0.0161247830837965, + -0.013819032348692417, + -0.01940544880926609, + 0.0038222854491323233, + -0.030330685898661613, + -0.005930732470005751, + 0.028814151883125305, + 0.014414813369512558, + 0.010375880636274815, + 0.03240431472659111, + 0.05648316442966461, + 0.0018627839162945747, + -0.0027119657024741173, + 0.0030059877317398787, + -0.00572955934330821, + -0.008689122274518013, + 0.009339066222310066, + -0.01881740614771843, + 0.008379626087844372, + -0.03472553938627243, + 0.009772361256182194, + 0.011141885071992874, + 0.004127913620322943, + -0.002698425203561783, + -0.03155319765210152, + 0.02830348163843155, + 0.08573061227798462, + -0.003996377345174551, + 0.021401703357696533, + 0.02152550220489502, + -0.013145877048373222, + -0.025734659284353256, + 0.015196292661130428, + 0.0055013056844472885, + 0.024001477286219597, + -0.03262096270918846, + -0.024388348683714867, + 0.038501400500535965, + -0.015165342949330807, + -0.08430692553520203, + 0.0035437382757663727, + 0.03766576200723648, + -0.0007945363176986575, + -0.026461975648999214, + 0.04806485399603844, + 0.0006465581827796996, + -0.013919618912041187, + 0.02367650531232357, + 0.03028426133096218, + 0.0031375237740576267, + -0.0041433884762227535, + -0.03435414656996727, + 0.03064018301665783, + 0.024109801277518272, + -0.017579417675733566, + -0.006878566462546587, + -0.08053106814622879, + 0.004576683975756168, + -0.03673727065324783, + -0.03902754560112953, + -0.027653539553284645, + -0.027684489265084267, + -0.003826154163107276, + -0.026709573343396187, + 0.04286530613899231, + -0.002748718485236168, + 0.026461975648999214, + 0.02774638868868351, + 0.02191237360239029, + -0.013849982060492039, + 0.010747276246547699, + -0.024001477286219597, + 0.06610851734876633, + 0.00941644050180912, + -0.028458230197429657, + 0.029773592948913574, + 0.004414197988808155, + -0.0018318342044949532, + -0.038130007684230804, + 0.01094844937324524, + 0.035592131316661835, + 0.043762847781181335, + 0.023753879591822624, + -0.0180591382086277, + 0.05007658153772354, + 0.038872797042131424, + 0.02640007622539997, + 0.034632690250873566, + 0.008240352384746075, + 0.02500734105706215, + -0.0070255775935947895, + -0.00543166883289814, + -0.03843950107693672, + -0.035035036504268646, + -0.039863187819719315, + 0.02833443135023117, + -0.010174707509577274, + 0.003568884916603565, + 0.022392094135284424, + 0.0013956371694803238, + 0.027313092723488808, + 0.007350549101829529, + -0.018399585038423538, + 0.028860576450824738, + -0.006688999477773905, + -0.038903746753931046, + -0.006642574910074472, + -0.03924419358372688, + 0.01898762956261635, + -0.04908619076013565, + 0.029850967228412628, + 0.02796303667128086, + -0.0010571250459179282, + -0.009872947819530964, + -0.033487554639577866, + 0.07570292055606842, + 0.020844610407948494, + -0.011853727512061596, + 0.0017080354737117887, + -0.010174707509577274, + -0.028071360662579536, + -0.014724310487508774, + -0.04017268493771553, + -0.016542604193091393, + 0.01807461306452751, + -0.02754521556198597, + 0.02907722443342209, + -0.004418066702783108, + -0.047043513506650925, + 0.009153367951512337, + 0.018105562776327133, + -0.00790377426892519, + -0.03819190338253975, + -0.11965146660804749, + 0.003127851989120245, + -0.009145630523562431, + 0.021571926772594452, + -0.041410673409700394, + 0.013548222370445728, + -0.024202650412917137, + -0.050355128943920135, + 0.006309865973889828, + -0.022423043847084045, + 0.024202650412917137, + -0.043143853545188904, + -0.019885169342160225, + -0.05979478359222412, + -0.013718445785343647, + 0.05574037507176399, + 0.031909119337797165, + -0.029015325009822845, + -0.06425153464078903, + -0.0013772607780992985, + 0.003013725159689784, + -0.020999357104301453, + 0.027808288112282753, + 0.05744260549545288, + -0.01632595621049404, + -0.005358163267374039, + 0.01881740614771843, + 0.016186682507395744, + -0.09495361894369125, + 0.016604503616690636, + -0.007849612273275852, + 0.028458230197429657, + 0.06288974732160568, + 0.01094844937324524, + 0.023614605888724327, + -0.038903746753931046, + 0.05663791298866272, + -0.01866265758872032, + -0.01047646626830101, + 0.0017496241489425302, + 0.012875067070126534, + -0.002197427209466696, + -0.018740031868219376, + 0.07774559408426285, + 0.05725690722465515, + -0.0022631953470408916 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingOwner.txt\n\npublic class ThingOwner : ThingOwner, IList, ICollection, IEnumerable, IEnumerable where T : Thing\n{\n\tprivate List innerList = new List();\n\n\tpublic List InnerListForReading => innerList;\n\n\tpublic new T this[int index] => innerList[index];\n\n\tpublic override int Count => innerList.Count;\n\n\tT IList.this[int index]\n\t{\n\t\tget\n\t\t{\n\t\t\treturn innerList[index];\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow setting individual elements.\");\n\t\t}\n\t}\n\n\tbool ICollection.IsReadOnly => true;\n\n\tpublic ThingOwner()\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner, oneStackOnly, contentsLookMode, removeContentsIfDestroyed)\n\t{\n\t}\n\n\tpublic override void ExposeData()\n\t{\n\t\tbase.ExposeData();\n\t\tScribe_Collections.Look(ref innerList, \"innerList\", true, contentsLookMode);\n\t\tif (Scribe.mode == LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\tint num = innerList.RemoveAll((T x) => x == null || (x is MinifiedThing minifiedThing && minifiedThing.InnerThing == null));\n\t\t\tif (num > 0)\n\t\t\t{\n\t\t\t\tLog.Warning($\"ThingOwner removed {num} invalid entries during PostLoadInit.\");\n\t\t\t}\n\t\t}\n\t\tif (Scribe.mode != LoadSaveMode.LoadingVars && Scribe.mode != LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] != null)\n\t\t\t{\n\t\t\t\tinnerList[i].holdingOwner = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic List.Enumerator GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tpublic override int GetCountCanAccept(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (!(item is T))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn base.GetCountCanAccept(item, canMergeWithExistingStacks);\n\t}\n\n\tpublic override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (count <= 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item?.ToString() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + count + \" of \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tint stackCount = item.stackCount;\n\t\tint num = Mathf.Min(stackCount, count);\n\t\tThing thing = item.SplitOff(num);\n\t\tif (!TryAdd((T)thing, canMergeWithExistingStacks))\n\t\t{\n\t\t\tif (thing != item)\n\t\t\t{\n\t\t\t\tint result = stackCount - item.stackCount - thing.stackCount;\n\t\t\t\titem.TryAbsorbStack(thing, respectStackLimit: false);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn stackCount - item.stackCount;\n\t\t}\n\t\tCompPushable compPushable = item.TryGetComp();\n\t\tif (compPushable != null && owner is Pawn pawn)\n\t\t{\n\t\t\tcompPushable.OnStartedCarrying(pawn);\n\t\t}\n\t\treturn num;\n\t}\n\n\tpublic override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (canMergeWithExistingStacks)\n\t\t{\n\t\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t\t{\n\t\t\t\tT val = innerList[i];\n\t\t\t\tif (!val.CanStackWith(item))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint num = Mathf.Min(item.stackCount, val.def.stackLimit - val.stackCount);\n\t\t\t\tif (num > 0)\n\t\t\t\t{\n\t\t\t\t\tThing other = item.SplitOff(num);\n\t\t\t\t\tint stackCount = val.stackCount;\n\t\t\t\t\tval.TryAbsorbStack(other, respectStackLimit: true);\n\t\t\t\t\tif (val.stackCount > stackCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tNotifyAddedAndMergedWith(val, val.stackCount - stackCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Destroyed || item.stackCount == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Count >= maxStacks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\titem.holdingOwner = this;\n\t\tinnerList.Add(item2);\n\t\tNotifyAdded(item2);\n\t\treturn true;\n\t}\n\n\tprotected override void NotifyAdded(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemAdded(item as T);\n\t\t}\n\t\tbase.NotifyAdded(item);\n\t}\n\n\tprotected override void NotifyRemoved(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemRemoved(item as T);\n\t\t}\n\t\tbase.NotifyRemoved(item);\n\t}\n\n\tpublic void TryAddRangeOrTransfer(IEnumerable things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)\n\t{\n\t\tif (things == this)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (things is ThingOwner thingOwner)\n\t\t{\n\t\t\tthingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);\n\t\t\tif (destroyLeftover)\n\t\t\t{\n\t\t\t\tthingOwner.ClearAndDestroyContents();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (things is IList list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t{\n\t\t\t\tif (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t\t{\n\t\t\t\t\tlist[i].Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tforeach (T thing in things)\n\t\t{\n\t\t\tif (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t{\n\t\t\t\tthing.Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override int IndexOf(Thing item)\n\t{\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t\treturn innerList.IndexOf(item2);\n\t}\n\n\tpublic override bool Remove(Thing item)\n\t{\n\t\tif (!Contains(item))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner == this)\n\t\t{\n\t\t\titem.holdingOwner = null;\n\t\t}\n\t\tint index = innerList.LastIndexOf((T)item);\n\t\tinnerList.RemoveAt(index);\n\t\tNotifyRemoved(item);\n\t\treturn true;\n\t}\n\n\tpublic int RemoveAll(Predicate predicate)\n\t{\n\t\tint num = 0;\n\t\tfor (int num2 = innerList.Count - 1; num2 >= 0; num2--)\n\t\t{\n\t\t\tif (predicate(innerList[num2]))\n\t\t\t{\n\t\t\t\tRemove(innerList[num2]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t\treturn num;\n\t}\n\n\tprotected override Thing GetAt(int index)\n\t{\n\t\treturn innerList[index];\n\t}\n\n\tpublic void GetThingsOfType(List list) where J : Thing\n\t{\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] is J item)\n\t\t\t{\n\t\t\t\tlist.Add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic int TryTransferToContainer(Thing item, ThingOwner otherContainer, int stackCount, out T resultingTransferredItem, bool canMergeWithExistingStacks = true)\n\t{\n\t\tThing resultingTransferredItem2;\n\t\tint result = TryTransferToContainer(item, otherContainer, stackCount, out resultingTransferredItem2, canMergeWithExistingStacks);\n\t\tresultingTransferredItem = (T)resultingTransferredItem2;\n\t\treturn result;\n\t}\n\n\tpublic new T Take(Thing thing, int count)\n\t{\n\t\treturn (T)base.Take(thing, count);\n\t}\n\n\tpublic new T Take(Thing thing)\n\t{\n\t\treturn (T)base.Take(thing);\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, int count, out T resultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing resultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, count, out resultingThing2, placedAction2, nearPlaceValidator);\n\t\tresultingThing = (T)resultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, mode, out lastResultingThing2, placedAction2, nearPlaceValidator);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, out lastResultingThing2, placedAction2, nearPlaceValidator, playDropSound: true);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tint IList.IndexOf(T item)\n\t{\n\t\treturn innerList.IndexOf(item);\n\t}\n\n\tvoid IList.Insert(int index, T item)\n\t{\n\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow inserting individual elements at any position.\");\n\t}\n\n\tvoid ICollection.Add(T item)\n\t{\n\t\tTryAdd(item);\n\t}\n\n\tvoid ICollection.CopyTo(T[] array, int arrayIndex)\n\t{\n\t\tinnerList.CopyTo(array, arrayIndex);\n\t}\n\n\tbool ICollection.Contains(T item)\n\t{\n\t\treturn innerList.Contains(item);\n\t}\n\n\tbool ICollection.Remove(T item)\n\t{\n\t\treturn Remove(item);\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n}\n\n", + "timestamp": "2025-08-24 20:56:15,798" + }, + "ThingOwner-TryAdd-abstract-override-virtual": { + "keywords": [ + "ThingOwner", + "TryAdd", + "virtual", + "override", + "abstract" + ], + "question": "ThingOwner TryAdd virtual override abstract methods", + "embedding": [ + 0.006892177741974592, + -0.005672356579452753, + -0.007039462681859732, + 0.0001993302721530199, + -0.05933693051338196, + 0.038037266582250595, + 0.0027663125656545162, + 0.05111918970942497, + 0.029139749705791473, + 0.05743355676531792, + -0.020544353872537613, + -0.07142184674739838, + -0.019743729382753372, + -0.02217581868171692, + -0.0059593734331429005, + -0.008240400813519955, + -0.012371931225061417, + -0.08973048627376556, + -0.05160258337855339, + 0.0030741000082343817, + 0.06090796738862991, + 0.06441259384155273, + 0.0151363555341959, + 0.06284155696630478, + 0.06169348955154419, + 0.03513688966631889, + 0.011896087788045406, + 0.04601331055164337, + 0.008368803188204765, + 0.025302790105342865, + -0.01186587568372488, + 0.0035537201911211014, + 0.014645406045019627, + -0.03465349227190018, + 0.03900406137108803, + 0.014977741055190563, + -0.029804419726133347, + -0.020091170445084572, + 0.02022712491452694, + 0.034834764897823334, + -0.03087695688009262, + 0.0015691505977883935, + -0.002292357152327895, + -0.013066813349723816, + -0.031209291890263557, + 0.03205523639917374, + -0.003870949149131775, + -0.04296186938881874, + 0.0003927597135771066, + 0.03707047551870346, + -0.012032043188810349, + 0.019804153591394424, + -0.043535903096199036, + -0.014305517077445984, + 0.013444467447698116, + 0.010506322607398033, + -0.04084701091051102, + -0.005306032951921225, + -0.013716378249228, + 0.050333667546510696, + -0.008602948859333992, + 0.012296400032937527, + -0.006178412586450577, + -0.021360086277127266, + 0.05154215916991234, + 0.0006198239279910922, + 0.005464647430926561, + 0.01998542807996273, + 0.013942969962954521, + -0.040182340890169144, + -0.01148822158575058, + -0.02013648860156536, + -0.04640607163310051, + 0.031994812190532684, + -0.05124003812670708, + 0.05441232770681381, + 0.03136035427451134, + 0.0036141446325927973, + -0.022855594754219055, + 0.025589806959033012, + -0.009161875583231449, + -0.015921873971819878, + -0.0033120219595730305, + 0.04250868782401085, + 0.08308378607034683, + 0.034593068063259125, + 0.00490571977570653, + -0.1038094162940979, + -0.04021255299448967, + 0.042689960449934006, + 0.006548513192683458, + 0.022221136838197708, + 0.026148732751607895, + -0.017719505354762077, + -0.011254076845943928, + 0.07510774582624435, + -0.08247954398393631, + -0.008368803188204765, + -0.026390431448817253, + 0.02527257800102234, + -0.017462700605392456, + -0.0561344288289547, + -0.013837226666510105, + 0.09837120026350021, + -0.024743862450122833, + 0.10634724795818329, + -0.04196486622095108, + 0.012545651756227016, + -0.02782551571726799, + 0.004588490817695856, + 0.004728222731500864, + -0.015045718289911747, + 0.013625741004943848, + 0.02867146022617817, + -0.017115259543061256, + 0.011155886575579643, + 0.004327910020947456, + -0.051421310752630234, + -0.02432089112699032, + -0.00781742949038744, + 0.064714714884758, + 0.011306948028504848, + 0.008111998438835144, + -0.009743462316691875, + -0.027462968602776527, + 0.03945724666118622, + 0.01602761819958687, + 0.0044638654217123985, + -0.03016696684062481, + 0.0010026702657341957, + -0.009962501004338264, + 0.00486040161922574, + -0.010309942997992039, + -0.0424482636153698, + -0.025665337219834328, + -0.01799141615629196, + 0.030091436579823494, + -0.005143641494214535, + -0.07837066799402237, + 0.009501763619482517, + -0.02003074623644352, + 0.0037954184226691723, + 0.015846343711018562, + 0.0010602624388411641, + 0.07142184674739838, + -0.021692421287298203, + -0.07522859424352646, + -0.022311773151159286, + -0.001380323781631887, + -0.004562055226415396, + -0.027493180707097054, + 0.012122679501771927, + -0.00946399848908186, + 0.045227792114019394, + 0.014048713259398937, + 0.003578267525881529, + 0.00894283689558506, + -0.02158667892217636, + 0.004781094379723072, + -0.05299235135316849, + 0.010173987597227097, + 0.001458686892874539, + -0.029154855757951736, + 0.029789313673973083, + 0.022462835535407066, + -0.020302657037973404, + 0.0346837043762207, + -0.014970188029110432, + 0.04954814910888672, + -0.012273740954697132, + 0.05830971151590347, + 0.004475194960832596, + 0.01101237814873457, + 0.045288216322660446, + 0.022311773151159286, + -0.05788674205541611, + 0.016314635053277016, + 0.04776562377810478, + 0.025786185637116432, + -0.06229773536324501, + 0.04867199435830116, + 0.008300825953483582, + -0.001127295894548297, + -0.019048847258090973, + -0.001308569684624672, + -0.04704052954912186, + 0.03549943491816521, + 0.014992847107350826, + 0.015529114753007889, + 0.045832037925720215, + 0.01101237814873457, + 0.025453850626945496, + 0.014449025504291058, + 0.017719505354762077, + -0.04779583588242531, + -0.005404222756624222, + -0.031602051109075546, + 0.020514141768217087, + -0.08102934807538986, + 0.0032855861354619265, + 0.008806881494820118, + -0.01208491437137127, + 0.01888267882168293, + -0.0027776421047747135, + 0.032387569546699524, + -0.03208544850349426, + 0.010166434571146965, + -0.017613762989640236, + 0.019804153591394424, + 0.024532375857234, + 0.01848991960287094, + -0.0035914855543524027, + -0.00859539583325386, + -0.05504678562283516, + -0.0161786787211895, + -0.02347494661808014, + -0.004320356994867325, + -0.010883975774049759, + 0.029049113392829895, + 0.02581639774143696, + -0.007099887356162071, + -0.0023678878787904978, + -0.00989452376961708, + -0.03785599395632744, + 0.005128535442054272, + -0.027840621769428253, + 0.014584980905056, + 0.013746590353548527, + 0.0270248893648386, + 0.0006575892912223935, + -0.05698037147521973, + 0.015770813450217247, + -0.07831024378538132, + 0.022417515516281128, + 0.020650098100304604, + -0.02533300220966339, + -0.055167634040117264, + -0.029547614976763725, + 0.022870700806379318, + 0.016601651906967163, + -0.02537832036614418, + 0.031209291890263557, + -0.011986724101006985, + 0.03571092337369919, + 0.013791908510029316, + -0.014041160233318806, + -0.048581354320049286, + 0.02661702409386635, + 0.03401903435587883, + 0.025136621668934822, + 0.03492540121078491, + 0.025242365896701813, + -0.04404951259493828, + 0.030287817120552063, + -0.022447729483246803, + 0.04401930049061775, + -0.010022926144301891, + 0.0037765358574688435, + -0.00583097105845809, + -0.03395861014723778, + -0.02137519232928753, + 0.01983436569571495, + 0.0055326251313090324, + -0.015249651856720448, + -0.012417249381542206, + 0.030756106600165367, + 0.024804286658763885, + 0.013731484301388264, + -0.03682877868413925, + -0.027991682291030884, + -0.017810143530368805, + 0.053475745022296906, + -0.0072509488090872765, + -0.06072669476270676, + -0.025846611708402634, + 0.0176288690418005, + 0.032840754836797714, + 0.05755440518260002, + -0.023490052670240402, + -0.003221384948119521, + 0.009947394952178001, + 0.00989452376961708, + -0.02447195164859295, + -0.013452020473778248, + 0.006759998854249716, + 0.030242498964071274, + 0.020665204152464867, + -0.0382789671421051, + 0.012069808319211006, + -0.04489545896649361, + 0.016057830303907394, + 0.0661044791340828, + 0.018958209082484245, + 0.028354231268167496, + -0.028006788343191147, + 0.03441179543733597, + -0.007983596995472908, + 0.005521295126527548, + -0.017704399302601814, + 0.02663213014602661, + -4.767876453115605e-05, + 0.026601918041706085, + -0.01717568375170231, + 0.020060958340764046, + 0.04549970477819443, + 0.022100286558270454, + 0.00658250181004405, + -0.12447462230920792, + 0.024638120085000992, + -0.09891502559185028, + 0.00520784268155694, + -0.004973697476089001, + -0.015385606326162815, + 0.010000267066061497, + -0.011556199751794338, + 0.043143145740032196, + -0.055167634040117264, + -0.007107440382242203, + 0.02797657623887062, + 0.02403387427330017, + 0.01719079166650772, + 0.037040263414382935, + 0.015468690544366837, + 0.005245608277618885, + -0.028006788343191147, + 0.002432089066132903, + 0.04290144518017769, + -0.007254725322127342, + -0.00520784268155694, + -0.006608937401324511, + -0.03117907978594303, + 0.00859539583325386, + 0.03157183900475502, + 0.007945830933749676, + 0.02481939271092415, + -0.0172814279794693, + -0.00765503803268075, + -0.024653226137161255, + -0.002855061087757349, + 0.008142211474478245, + -0.0018901561852544546, + -0.05344553291797638, + 0.02787083387374878, + -0.0012415361125022173, + 0.027342118322849274, + 0.009547082707285881, + -0.018943103030323982, + 0.03498582914471626, + 0.025151727721095085, + 0.008912624791264534, + -0.008844646625220776, + -0.01574060134589672, + -0.0316624753177166, + 0.04951793700456619, + 0.00011701360199367628, + -0.010151328518986702, + 0.025650231167674065, + -0.009373362176120281, + -0.04562055319547653, + 0.007409563288092613, + 0.002520837588235736, + -0.02132987417280674, + 0.021344980224967003, + 0.03426073119044304, + 0.010498769581317902, + 0.01957756094634533, + 0.0016191897448152304, + 0.026964465156197548, + -0.012779797427356243, + -0.009501763619482517, + 0.005978255998343229, + -0.04885326698422432, + -0.013912757858633995, + -0.005037898663431406, + 0.005026569124311209, + -0.011926299892365932, + 0.041390832513570786, + -0.034744128584861755, + 0.014509450644254684, + 0.07299288362264633, + 0.01303660124540329, + 0.009796333499252796, + -0.016012512147426605, + -0.005445764400064945, + -0.026798298582434654, + 0.014018501155078411, + -0.012470121495425701, + 0.02028755098581314, + 0.051028549671173096, + -0.02403387427330017, + 0.0005830026930198073, + 0.03679856285452843, + -0.046526920050382614, + -0.009599953889846802, + 0.012077361345291138, + 0.016918880864977837, + 0.01838417537510395, + 0.0489439032971859, + 0.010951953940093517, + -0.009486657567322254, + -0.004630032926797867, + -0.018656086176633835, + 0.006510747596621513, + 0.02093711495399475, + -0.009229853749275208, + -0.02817295677959919, + 0.03250842168927193, + 0.027644241228699684, + -0.013074366375803947, + 0.025317896157503128, + -0.030892062932252884, + -0.01593698002398014, + 0.06302282959222794, + 0.013550210744142532, + -0.00988697074353695, + -0.027689559385180473, + 0.01139003224670887, + -0.014584980905056, + 0.06423132121562958, + -0.08604459464550018, + 0.00898815505206585, + 0.013912757858633995, + 0.0042561558075249195, + 0.04075637459754944, + 0.009645272046327591, + 0.028339125216007233, + -0.005521295126527548, + -0.04788647219538689, + -0.013807014562189579, + 0.018807148560881615, + 0.03891342505812645, + -0.027311906218528748, + 0.01563485898077488, + 0.06695042550563812, + 0.023203035816550255, + -0.04634564742445946, + 0.03725174814462662, + -0.0256351251155138, + -0.04380781576037407, + -0.026586811989545822, + -0.029305918142199516, + -0.00040102089405991137, + -0.012945964932441711, + 0.0007109328871592879, + -0.057614829391241074, + -0.02562001906335354, + 0.015272310934960842, + 0.013467126525938511, + 0.0284750796854496, + 0.02117881178855896, + 0.0028191839810460806, + -0.016949092969298363, + -0.03362627327442169, + 0.03136035427451134, + 0.03250842168927193, + 0.038581088185310364, + -0.0071980771608650684, + -0.030635258182883263, + -0.02726658806204796, + 0.00015448391786776483, + -0.035741135478019714, + -0.018746724352240562, + -0.008278165943920612, + 0.016511013731360435, + 0.008821987546980381, + -0.01788567379117012, + -0.07347627729177475, + 0.019502030685544014, + -0.0016588433645665646, + -0.02858082205057144, + 0.0019449159735813737, + -0.008897517807781696, + 0.014683171175420284, + -0.004275038372725248, + 0.013142344541847706, + -0.04936687648296356, + -0.02858082205057144, + 0.005842301063239574, + 0.00205443543381989, + -0.008829540573060513, + 0.018006522208452225, + 0.0008978713885881007, + -0.0010715919779613614, + -0.002056323690339923, + -0.026360219344496727, + -0.054925937205553055, + -0.04142104461789131, + -0.03220629692077637, + -0.003234602976590395, + -0.04649670794606209, + 0.007892959751188755, + -0.025212151929736137, + -0.002458524890244007, + -0.005124758929014206, + -0.009486657567322254, + 0.014970188029110432, + -0.02202475629746914, + 0.02492513693869114, + -0.017251215875148773, + -0.10930804908275604, + -0.034049246460199356, + 0.038097694516181946, + -0.037281960248947144, + 0.009275171905755997, + 0.03821854293346405, + 0.008036468178033829, + -0.0439588762819767, + -0.011760132387280464, + -0.03332415223121643, + 0.045137155801057816, + -0.01053653471171856, + -0.0015795361250638962, + 0.036738138645887375, + -0.04580182582139969, + -0.0067486693151295185, + 0.015589539892971516, + 0.05006175860762596, + -0.019154589623212814, + 0.003923820797353983, + 0.04710095375776291, + -0.005041675176471472, + -0.019502030685544014, + -0.002913597272709012, + -0.005423105321824551, + -0.037433020770549774, + 0.025045985355973244, + -0.012432355433702469, + -0.007447328418493271, + 0.03341478854417801, + -0.014509450644254684, + -0.005479753483086824, + 0.04867199435830116, + -0.006355909630656242, + -0.02518193982541561, + 0.013980735093355179, + 0.07226778566837311, + -0.0011707261437550187, + 0.01703972928225994, + 0.019698411226272583, + 0.07486604154109955, + 0.03175311163067818, + 0.022221136838197708, + 0.007779663894325495, + -0.012349272146821022, + 0.09299341589212418, + -0.03066547028720379, + 0.043838027864694595, + -0.07414095103740692, + 0.02022712491452694, + -0.037886206060647964, + 0.011299395002424717, + 0.04169295355677605, + 0.00976612139493227, + 0.04160231724381447, + 0.013580422848463058, + -0.021103281527757645, + 0.020242230966687202, + -0.0133387241512537, + 0.014267751947045326, + -0.0764370858669281, + 0.02642064355313778, + -0.026662342250347137, + -0.044683970510959625, + -0.03855087608098984, + 0.032991815358400345, + 0.024003662168979645, + 0.024849604815244675, + 0.0316624753177166, + 0.017462700605392456, + -0.028112532570958138, + -0.04474439471960068, + 0.012840221635997295, + -0.028157850727438927, + 0.04595288634300232, + 0.06652745604515076, + -0.018369069322943687, + 0.023067081347107887, + 0.047282226383686066, + 0.046677980571985245, + -0.018640980124473572, + -0.0010640389518812299, + 0.03142077848315239, + -0.016511013731360435, + -0.013489785604178905, + 0.018958209082484245, + 0.017598656937479973, + 0.009917182847857475, + 0.011714814230799675, + -0.015340288169682026, + 0.0061670830473303795, + 0.02423025295138359, + 0.008308378979563713, + -0.08719265460968018, + -0.006673138588666916, + -0.009607506915926933, + 0.03022739291191101, + 0.01842949539422989, + 0.04181380569934845, + -0.00946399848908186, + 0.05160258337855339, + -0.02003074623644352, + 0.026209158822894096, + -0.02288580685853958, + 0.023263460025191307, + 0.020468823611736298, + 0.029562722891569138, + 0.008648267015814781, + 0.009260065853595734, + 0.03102801740169525, + -0.0043958877213299274, + 0.018822254613041878, + 0.05145152285695076, + -0.008353697136044502, + 0.010075797326862812, + 0.0065447366796433926, + -0.0019637986551970243, + 0.018701404333114624, + 0.002409429755061865, + -0.007435998879373074, + 0.007269831374287605, + 0.011858322657644749, + -0.01428285799920559, + 0.030242498964071274, + -0.023505158722400665, + 0.01429041102528572, + -0.002298021921887994, + 0.05024303123354912, + 0.011971618048846722, + -0.004543172661215067, + 0.01213778555393219, + -0.0005126647301949561, + 0.013942969962954521, + -0.046829044818878174, + 0.025317896157503128, + 0.016873562708497047, + -0.02871677838265896, + 0.017553338780999184, + 0.026450855657458305, + 0.01732674613595009, + -0.023248353973031044, + 0.031994812190532684, + 0.015461137518286705, + 0.030484197661280632, + 0.007454881444573402, + -0.002607697853818536, + -0.025997672230005264, + -0.031541626900434494, + -0.026209158822894096, + 0.009411127306520939, + -0.021118387579917908, + 0.03133014217019081, + 0.014804020524024963, + 0.007772110402584076, + -0.026390431448817253, + -0.040544889867305756, + 0.004592267330735922, + 0.0017768600955605507, + 0.009199640713632107, + 0.006982814520597458, + 0.0058196415193378925, + -0.01613336056470871, + -0.0172814279794693, + -0.024018768221139908, + -0.014569874852895737, + 0.06272070854902267, + -0.02503087930381298, + 0.005513742100447416, + -0.029789313673973083, + 0.017115259543061256, + -0.007983596995472908, + 0.053173623979091644, + -0.012032043188810349, + 0.017462700605392456, + -0.01738717034459114, + 0.02661702409386635, + 0.0555603951215744, + 0.005929161328822374, + -0.05015239492058754, + 0.027039995416998863, + 0.04951793700456619, + 0.00765503803268075, + 0.02232687920331955, + -0.011352266184985638, + 0.02726658806204796, + -0.006552289705723524, + 0.032840754836797714, + 0.020151594653725624, + 0.018323751166462898, + -0.0482490211725235, + -0.015423372387886047, + 0.0720260888338089, + -0.032387569546699524, + 0.030333135277032852, + 0.03157183900475502, + -0.04664776846766472, + 0.011858322657644749, + -0.029789313673973083, + -0.03716111183166504, + 0.02817295677959919, + 0.046738408505916595, + -0.007024356629699469, + 0.000802513852249831, + 0.08380888402462006, + -8.851255552144721e-05, + 0.000924779218621552, + -0.024200040847063065, + -0.02492513693869114, + -0.023958342149853706, + -0.0045658317394554615, + -0.00911655742675066, + -0.020861582830548286, + 0.05281107500195503, + -0.007809875998646021, + -0.004482747986912727, + -0.005540178157389164, + 0.032145872712135315, + 0.032296933233737946, + -0.03401903435587883, + -0.04876263067126274, + 0.005211619194597006, + -0.026601918041706085, + 0.0011782791698351502, + -0.020952221006155014, + 0.02652638778090477, + -0.03549943491816521, + -0.008436781354248524, + 0.002339563798159361, + -0.012054702267050743, + -0.03471391648054123, + 0.05855141207575798, + -0.0027512062806636095, + -0.030846744775772095, + -0.00993984192609787, + 0.016918880864977837, + 0.007809875998646021, + -0.048430293798446655, + 0.02507619746029377, + -0.05429147928953171, + -0.006140646990388632, + 0.04849071800708771, + -0.0008582177688367665, + -0.019607773050665855, + 0.09595422446727753, + -0.05468423664569855, + 0.01703972928225994, + -0.014985294081270695, + -0.016359953209757805, + 0.061240304261446, + 0.02661702409386635, + -0.005910278297960758, + 0.016752712428569794, + 0.02483449876308441, + -0.02728169411420822, + 0.005460870917886496, + 0.03003101237118244, + 0.0012991282856091857, + 0.053626809269189835, + 0.004811306484043598, + 0.01987968385219574, + 0.004849072080105543, + 0.008202635683119297, + -0.033203303813934326, + 0.010740467347204685, + 0.02308218739926815, + -0.013799461536109447, + 0.02972888946533203, + 0.019517136737704277, + -0.017855461686849594, + -0.022840488702058792, + -0.003317686729133129, + -0.018505025655031204, + 0.03640580549836159, + -0.0317833237349987, + 0.04945751279592514, + -0.003587709041312337, + 0.02048392966389656, + -0.0008138434495776892, + 0.004380781669169664, + -0.05664803832769394, + -0.01743248850107193, + 0.02093711495399475, + 0.0016786701744422317, + -0.041995078325271606, + -0.0019232007907703519, + 0.018912890926003456, + 0.03755387291312218, + -0.011178545653820038, + 0.04205550253391266, + -0.008882411755621433, + 0.09287256747484207, + -0.002492513507604599, + -0.06087775528430939, + 0.014018501155078411, + 0.038641512393951416, + -0.021571572870016098, + -0.020770946517586708, + -0.022190924733877182, + 0.08115020394325256, + 0.02542363852262497, + 0.018157584592700005, + 0.0005900837131775916, + -0.05151194706559181, + -0.0012660835636779666, + 0.0048906137235462666, + 0.02587682381272316, + 0.017659081146121025, + 0.0011131339706480503, + -0.013044154271483421, + -0.05163279548287392, + 0.013482232578098774, + -0.028248487040400505, + -0.029049113392829895, + 0.02897358313202858, + 0.004120200406759977, + -0.0009818993275985122, + 0.012522992677986622, + 0.01311213243752718, + 0.011820556595921516, + -0.004799976944923401, + -0.014902209863066673, + 0.007938277907669544, + 0.05269022658467293, + 0.011284288950264454, + -0.02258368395268917, + 0.030741000548005104, + -0.023595795035362244, + 0.016662076115608215, + -0.023187929764389992, + -0.021103281527757645, + 0.025589806959033012, + 0.060424573719501495, + 0.008534970693290234, + -0.04577161371707916, + 0.054321691393852234, + 0.024245359003543854, + 0.03420030698180199, + -0.0131650036200881, + -0.005015239585191011, + -0.012447461485862732, + -0.0346837043762207, + -0.027402544394135475, + -0.002122413134202361, + -0.0015880332794040442, + -0.0003125083458144218, + -0.025786185637116432, + 0.005755440331995487, + 0.006087775807827711, + -0.021496040746569633, + 0.001679614302702248, + -0.002014781814068556, + 0.02342962846159935, + 0.009297830983996391, + -8.312804311572108e-06, + 0.0019326421897858381, + 0.022493047639727592, + 0.07692047953605652, + -0.006272825878113508, + -0.029502296820282936, + 0.034442007541656494, + 0.0017069941386580467, + -0.010657384060323238, + -0.0010999160585924983, + -0.036949627101421356, + 0.008376356214284897, + -0.020544353872537613, + -0.01833885721862316, + 0.05259959027171135, + -0.012666501104831696, + 0.00827061291784048, + -0.015574433840811253, + 0.04849071800708771, + 0.08096892386674881, + -0.011495774611830711, + 0.004546949174255133, + 0.017115259543061256, + -0.025937248021364212, + -0.02007606439292431, + 0.028052108362317085, + 0.007300043478608131, + 0.03957809507846832, + -0.039487458765506744, + -0.02836933732032776, + 0.013134791515767574, + -0.00717919459566474, + -0.055076997727155685, + 0.00042981698061339557, + 0.023248353973031044, + 0.011382479220628738, + -0.017900779843330383, + 0.03265948221087456, + 0.01808205246925354, + -0.01747780665755272, + 0.01018909364938736, + 0.01238703727722168, + 0.0038596196100115776, + -0.003646245226264, + -0.009932288900017738, + 0.03471391648054123, + -0.0022885806392878294, + 0.00021172204287722707, + -0.021450722590088844, + -0.08809902518987656, + 0.03220629692077637, + -0.03265948221087456, + -0.032840754836797714, + -0.020000534132122993, + -0.026450855657458305, + -0.016903774812817574, + -0.02648106962442398, + 0.020121382549405098, + 0.0060462336987257, + 0.031692687422037125, + 0.04495588317513466, + 0.016223996877670288, + -0.011284288950264454, + 0.0036235861480236053, + -0.02542363852262497, + 0.07885406911373138, + -0.009109004400670528, + -0.013784355483949184, + 0.012115126475691795, + -0.00829327292740345, + -0.012575863860547543, + -0.04625501111149788, + 0.031450990587472916, + 0.04296186938881874, + 0.03972915560007095, + 0.0031080888584256172, + -0.028701672330498695, + 0.04172316566109657, + 0.04275038465857506, + 0.028052108362317085, + 0.03586198389530182, + 0.025061091408133507, + 0.06296240538358688, + -0.01028728298842907, + -0.031148867681622505, + -0.022810276597738266, + -0.02483449876308441, + -0.07033420354127884, + 0.028490185737609863, + -0.013874992728233337, + 0.00646920595318079, + 0.027100421488285065, + 0.0, + 0.03957809507846832, + 0.013399149291217327, + 0.004278814885765314, + 0.023067081347107887, + 0.0012330389581620693, + -0.03087695688009262, + -0.038037266582250595, + -0.008285719901323318, + 0.0021167483646422625, + -0.06235815957188606, + 0.003432871075347066, + 0.00827061291784048, + -0.027236375957727432, + -0.005324915517121553, + -0.03223650902509689, + 0.06519811600446701, + 0.016359953209757805, + 0.022417515516281128, + -0.010022926144301891, + -0.019456712529063225, + -0.02886783890426159, + -0.021148599684238434, + -0.025997672230005264, + -0.009547082707285881, + 0.022190924733877182, + -0.016254210844635963, + 0.055771879851818085, + -0.010249517858028412, + -0.05537911877036095, + 0.0248798169195652, + 0.0359526202082634, + -0.005060557741671801, + -0.04087722301483154, + -0.1198219284415245, + 0.024910029023885727, + 0.007983596995472908, + 0.029985694214701653, + -0.028233380988240242, + -0.0013831562828272581, + -0.0176288690418005, + -0.07208651304244995, + 0.012877986766397953, + -0.012251081876456738, + 0.030786318704485893, + -0.04335463047027588, + -0.00899570807814598, + -0.07468476891517639, + -0.004180625081062317, + 0.05643654987215996, + 0.023051973432302475, + -0.01083865761756897, + -0.03462328016757965, + -0.022568577900528908, + 0.03915512189269066, + 0.008504758588969707, + 0.01555932778865099, + 0.024109404534101486, + -0.0035121783148497343, + -0.03102801740169525, + 0.020408399403095245, + 0.004969920963048935, + -0.11130206286907196, + 0.02352026477456093, + -0.015453584492206573, + 0.03323351591825485, + 0.06084754317998886, + -0.0007723015733063221, + 0.010853763669729233, + -0.021994544193148613, + 0.06713169813156128, + -0.040695950388908386, + -0.00619351863861084, + 0.005468423943966627, + 0.02258368395268917, + -0.0032723683398216963, + -0.026737872511148453, + 0.04281080886721611, + 0.05803780257701874, + -0.0013227316085249186 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingOwner.txt\n\npublic class ThingOwner : ThingOwner, IList, ICollection, IEnumerable, IEnumerable where T : Thing\n{\n\tprivate List innerList = new List();\n\n\tpublic List InnerListForReading => innerList;\n\n\tpublic new T this[int index] => innerList[index];\n\n\tpublic override int Count => innerList.Count;\n\n\tT IList.this[int index]\n\t{\n\t\tget\n\t\t{\n\t\t\treturn innerList[index];\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow setting individual elements.\");\n\t\t}\n\t}\n\n\tbool ICollection.IsReadOnly => true;\n\n\tpublic ThingOwner()\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner)\n\t{\n\t}\n\n\tpublic ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep, bool removeContentsIfDestroyed = true)\n\t\t: base(owner, oneStackOnly, contentsLookMode, removeContentsIfDestroyed)\n\t{\n\t}\n\n\tpublic override void ExposeData()\n\t{\n\t\tbase.ExposeData();\n\t\tScribe_Collections.Look(ref innerList, \"innerList\", true, contentsLookMode);\n\t\tif (Scribe.mode == LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\tint num = innerList.RemoveAll((T x) => x == null || (x is MinifiedThing minifiedThing && minifiedThing.InnerThing == null));\n\t\t\tif (num > 0)\n\t\t\t{\n\t\t\t\tLog.Warning($\"ThingOwner removed {num} invalid entries during PostLoadInit.\");\n\t\t\t}\n\t\t}\n\t\tif (Scribe.mode != LoadSaveMode.LoadingVars && Scribe.mode != LoadSaveMode.PostLoadInit)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] != null)\n\t\t\t{\n\t\t\t\tinnerList[i].holdingOwner = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic List.Enumerator GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tpublic override int GetCountCanAccept(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (!(item is T))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn base.GetCountCanAccept(item, canMergeWithExistingStacks);\n\t}\n\n\tpublic override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (count <= 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item?.ToString() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + count + \" of \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn 0;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tint stackCount = item.stackCount;\n\t\tint num = Mathf.Min(stackCount, count);\n\t\tThing thing = item.SplitOff(num);\n\t\tif (!TryAdd((T)thing, canMergeWithExistingStacks))\n\t\t{\n\t\t\tif (thing != item)\n\t\t\t{\n\t\t\t\tint result = stackCount - item.stackCount - thing.stackCount;\n\t\t\t\titem.TryAbsorbStack(thing, respectStackLimit: false);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn stackCount - item.stackCount;\n\t\t}\n\t\tCompPushable compPushable = item.TryGetComp();\n\t\tif (compPushable != null && owner is Pawn pawn)\n\t\t{\n\t\t\tcompPushable.OnStartedCarrying(pawn);\n\t\t}\n\t\treturn num;\n\t}\n\n\tpublic override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true)\n\t{\n\t\tif (item == null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add null item to ThingOwner.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (Contains(item))\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this item is already here.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner != null)\n\t\t{\n\t\t\tLog.Warning(\"Tried to add \" + item.ToStringSafe() + \" to ThingOwner but this thing is already in another container. owner=\" + owner.ToStringSafe() + \", current container owner=\" + item.holdingOwner.Owner.ToStringSafe() + \". Use TryAddOrTransfer, TryTransferToContainer, or remove the item before adding it.\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!CanAcceptAnyOf(item, canMergeWithExistingStacks))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (canMergeWithExistingStacks)\n\t\t{\n\t\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t\t{\n\t\t\t\tT val = innerList[i];\n\t\t\t\tif (!val.CanStackWith(item))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint num = Mathf.Min(item.stackCount, val.def.stackLimit - val.stackCount);\n\t\t\t\tif (num > 0)\n\t\t\t\t{\n\t\t\t\t\tThing other = item.SplitOff(num);\n\t\t\t\t\tint stackCount = val.stackCount;\n\t\t\t\t\tval.TryAbsorbStack(other, respectStackLimit: true);\n\t\t\t\t\tif (val.stackCount > stackCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tNotifyAddedAndMergedWith(val, val.stackCount - stackCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Destroyed || item.stackCount == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Count >= maxStacks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\titem.holdingOwner = this;\n\t\tinnerList.Add(item2);\n\t\tNotifyAdded(item2);\n\t\treturn true;\n\t}\n\n\tprotected override void NotifyAdded(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemAdded(item as T);\n\t\t}\n\t\tbase.NotifyAdded(item);\n\t}\n\n\tprotected override void NotifyRemoved(Thing item)\n\t{\n\t\tif (owner is IThingHolderEvents thingHolderEvents)\n\t\t{\n\t\t\tthingHolderEvents.Notify_ItemRemoved(item as T);\n\t\t}\n\t\tbase.NotifyRemoved(item);\n\t}\n\n\tpublic void TryAddRangeOrTransfer(IEnumerable things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)\n\t{\n\t\tif (things == this)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (things is ThingOwner thingOwner)\n\t\t{\n\t\t\tthingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);\n\t\t\tif (destroyLeftover)\n\t\t\t{\n\t\t\t\tthingOwner.ClearAndDestroyContents();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (things is IList list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t{\n\t\t\t\tif (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t\t{\n\t\t\t\t\tlist[i].Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tforeach (T thing in things)\n\t\t{\n\t\t\tif (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)\n\t\t\t{\n\t\t\t\tthing.Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override int IndexOf(Thing item)\n\t{\n\t\tif (!(item is T item2))\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t\treturn innerList.IndexOf(item2);\n\t}\n\n\tpublic override bool Remove(Thing item)\n\t{\n\t\tif (!Contains(item))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (item.holdingOwner == this)\n\t\t{\n\t\t\titem.holdingOwner = null;\n\t\t}\n\t\tint index = innerList.LastIndexOf((T)item);\n\t\tinnerList.RemoveAt(index);\n\t\tNotifyRemoved(item);\n\t\treturn true;\n\t}\n\n\tpublic int RemoveAll(Predicate predicate)\n\t{\n\t\tint num = 0;\n\t\tfor (int num2 = innerList.Count - 1; num2 >= 0; num2--)\n\t\t{\n\t\t\tif (predicate(innerList[num2]))\n\t\t\t{\n\t\t\t\tRemove(innerList[num2]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t\treturn num;\n\t}\n\n\tprotected override Thing GetAt(int index)\n\t{\n\t\treturn innerList[index];\n\t}\n\n\tpublic void GetThingsOfType(List list) where J : Thing\n\t{\n\t\tfor (int i = 0; i < innerList.Count; i++)\n\t\t{\n\t\t\tif (innerList[i] is J item)\n\t\t\t{\n\t\t\t\tlist.Add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic int TryTransferToContainer(Thing item, ThingOwner otherContainer, int stackCount, out T resultingTransferredItem, bool canMergeWithExistingStacks = true)\n\t{\n\t\tThing resultingTransferredItem2;\n\t\tint result = TryTransferToContainer(item, otherContainer, stackCount, out resultingTransferredItem2, canMergeWithExistingStacks);\n\t\tresultingTransferredItem = (T)resultingTransferredItem2;\n\t\treturn result;\n\t}\n\n\tpublic new T Take(Thing thing, int count)\n\t{\n\t\treturn (T)base.Take(thing, count);\n\t}\n\n\tpublic new T Take(Thing thing)\n\t{\n\t\treturn (T)base.Take(thing);\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, int count, out T resultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing resultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, count, out resultingThing2, placedAction2, nearPlaceValidator);\n\t\tresultingThing = (T)resultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, mode, out lastResultingThing2, placedAction2, nearPlaceValidator);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tpublic bool TryDrop(Thing thing, IntVec3 dropLoc, Map map, ThingPlaceMode mode, out T lastResultingThing, Action placedAction = null, Predicate nearPlaceValidator = null)\n\t{\n\t\tAction placedAction2 = null;\n\t\tif (placedAction != null)\n\t\t{\n\t\t\tplacedAction2 = delegate(Thing t, int c)\n\t\t\t{\n\t\t\t\tplacedAction((T)t, c);\n\t\t\t};\n\t\t}\n\t\tThing lastResultingThing2;\n\t\tbool result = TryDrop(thing, dropLoc, map, mode, out lastResultingThing2, placedAction2, nearPlaceValidator, playDropSound: true);\n\t\tlastResultingThing = (T)lastResultingThing2;\n\t\treturn result;\n\t}\n\n\tint IList.IndexOf(T item)\n\t{\n\t\treturn innerList.IndexOf(item);\n\t}\n\n\tvoid IList.Insert(int index, T item)\n\t{\n\t\tthrow new InvalidOperationException(\"ThingOwner doesn't allow inserting individual elements at any position.\");\n\t}\n\n\tvoid ICollection.Add(T item)\n\t{\n\t\tTryAdd(item);\n\t}\n\n\tvoid ICollection.CopyTo(T[] array, int arrayIndex)\n\t{\n\t\tinnerList.CopyTo(array, arrayIndex);\n\t}\n\n\tbool ICollection.Contains(T item)\n\t{\n\t\treturn innerList.Contains(item);\n\t}\n\n\tbool ICollection.Remove(T item)\n\t{\n\t\treturn Remove(item);\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n\n\tIEnumerator IEnumerable.GetEnumerator()\n\t{\n\t\treturn innerList.GetEnumerator();\n\t}\n}\n\n", + "timestamp": "2025-08-24 20:56:53,480" } } \ No newline at end of file diff --git a/MCP/web_api_server.py b/MCP/web_api_server.py new file mode 100644 index 00000000..5a29b922 --- /dev/null +++ b/MCP/web_api_server.py @@ -0,0 +1,249 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +RimWorld知识库Web API服务器 +提供HTTP接口,可以通过浏览器或HTTP客户端访问 +""" +import os +import sys +import json +from http.server import HTTPServer, BaseHTTPRequestHandler +from urllib.parse import urlparse, parse_qs +import threading +import webbrowser + +# 添加MCP路径 +MCP_DIR = os.path.dirname(os.path.abspath(__file__)) +SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src') +if SDK_PATH not in sys.path: + sys.path.insert(0, SDK_PATH) + +class RimWorldAPIHandler(BaseHTTPRequestHandler): + """HTTP请求处理器""" + + def do_GET(self): + """处理GET请求""" + parsed_url = urlparse(self.path) + + if parsed_url.path == '/': + self.serve_web_interface() + elif parsed_url.path == '/query': + self.handle_query_get(parsed_url) + elif parsed_url.path == '/api/query': + self.handle_api_query_get(parsed_url) + else: + self.send_error(404, "Not Found") + + def do_POST(self): + """处理POST请求""" + if self.path == '/api/query': + self.handle_api_query_post() + else: + self.send_error(404, "Not Found") + + def serve_web_interface(self): + """提供Web界面""" + html = """ + + + + + + RimWorld 知识库 + + + +

+

🎮 RimWorld 知识库

+

直接查询RimWorld游戏的C#源码和XML定义

+
+ +
+ + +
+ +
+

💡 查询示例:

+
• ThingDef的定义和用法
+
• 如何创建Building
+
• Pawn类的主要方法
+
• CompPower的使用
+
+ + + + + + + """ + + self.send_response(200) + self.send_header('Content-Type', 'text/html; charset=utf-8') + self.end_headers() + self.wfile.write(html.encode('utf-8')) + + def handle_query_get(self, parsed_url): + """处理GET查询请求""" + params = parse_qs(parsed_url.query) + question = params.get('q', [''])[0] + + if not question: + self.send_error(400, "Missing 'q' parameter") + return + + try: + from mcpserver_stdio import get_context + result = get_context(question) + + self.send_response(200) + self.send_header('Content-Type', 'text/plain; charset=utf-8') + self.end_headers() + self.wfile.write(result.encode('utf-8')) + except Exception as e: + self.send_error(500, f"Query failed: {e}") + + def handle_api_query_get(self, parsed_url): + """处理API GET查询""" + params = parse_qs(parsed_url.query) + question = params.get('q', [''])[0] + + if not question: + response = {"success": False, "error": "Missing 'q' parameter"} + else: + try: + from mcpserver_stdio import get_context + result = get_context(question) + response = {"success": True, "result": result} + except Exception as e: + response = {"success": False, "error": str(e)} + + self.send_response(200) + self.send_header('Content-Type', 'application/json; charset=utf-8') + self.end_headers() + self.wfile.write(json.dumps(response, ensure_ascii=False).encode('utf-8')) + + def handle_api_query_post(self): + """处理API POST查询""" + content_length = int(self.headers['Content-Length']) + post_data = self.rfile.read(content_length) + + try: + data = json.loads(post_data.decode('utf-8')) + question = data.get('question', '') + + if not question: + response = {"success": False, "error": "Missing 'question' field"} + else: + from mcpserver_stdio import get_context + result = get_context(question) + response = {"success": True, "result": result} + except Exception as e: + response = {"success": False, "error": str(e)} + + self.send_response(200) + self.send_header('Content-Type', 'application/json; charset=utf-8') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + self.wfile.write(json.dumps(response, ensure_ascii=False).encode('utf-8')) + + def log_message(self, format, *args): + """自定义日志输出""" + print(f"[{self.address_string()}] {format % args}") + +def start_server(port=8080, open_browser=True): + """启动Web服务器""" + server_address = ('', port) + httpd = HTTPServer(server_address, RimWorldAPIHandler) + + print(f"🌐 RimWorld知识库Web服务器启动") + print(f"📍 服务地址: http://localhost:{port}") + print(f"🔍 查询API: http://localhost:{port}/api/query?q=您的问题") + print(f"💻 Web界面: http://localhost:{port}") + print("按 Ctrl+C 停止服务器") + + if open_browser: + # 延迟打开浏览器 + def open_browser_delayed(): + import time + time.sleep(1) + webbrowser.open(f'http://localhost:{port}') + + thread = threading.Thread(target=open_browser_delayed) + thread.daemon = True + thread.start() + + try: + httpd.serve_forever() + except KeyboardInterrupt: + print("\n🛑 服务器已停止") + httpd.shutdown() + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='RimWorld知识库Web API服务器') + parser.add_argument('--port', '-p', type=int, default=8080, help='服务器端口 (默认: 8080)') + parser.add_argument('--no-browser', action='store_true', help='不自动打开浏览器') + + args = parser.parse_args() + + start_server(args.port, not args.no_browser) \ No newline at end of file diff --git a/MCP/使用指南.md b/MCP/使用指南.md new file mode 100644 index 00000000..9fd0dcb5 --- /dev/null +++ b/MCP/使用指南.md @@ -0,0 +1,102 @@ +# RimWorld 知识库 - 绕过 Qoder IDE 使用指南 + +由于 Qoder IDE 中的 MCP 连接可能存在问题,我们提供了多种直接访问 RimWorld 知识库的方法。 + +## 🚀 方法 1:直接 Python 调用 + +最简单直接的方法: + +```bash +# 直接查询 +python direct_mcp_client.py -q "ThingDef是什么" + +# 交互模式 +python direct_mcp_client.py -i + +# 查看帮助 +python direct_mcp_client.py -h +``` + +### 优点: +- ✅ 最快速,无需额外依赖 +- ✅ 支持交互模式 +- ✅ 直接在命令行使用 + +## 🛠️ 方法 2:命令行工具 + +专业的命令行查询工具: + +```bash +# 基本查询 +python rimworld_query.py "ThingDef的定义" + +# 保存结果到文件 +python rimworld_query.py "Building类的方法" --output building_info.txt + +# 显示原始结果(不格式化) +python rimworld_query.py "Pawn类" --raw + +# 查看示例 +python rimworld_query.py --list-examples +``` + +### 优点: +- ✅ 结果可保存到文件 +- ✅ 支持原始输出格式 +- ✅ 内置查询示例 + +## 📝 常用查询示例 + +```bash +# 查询类定义 +"ThingDef的定义和用法" +"Building类有哪些方法" +"Pawn类的构造函数" + +# 查询特定方法 +"GenConstruct.CanPlaceBlueprintAt 方法" +"Building_Door 的开关逻辑" +"CompPower 的电力管理" + +# 查询XML相关 +"XML中的defName规则" +"如何定义新的ThingDef" +"建筑物的XML结构" +``` + +## 🔧 故障排除 + +### 如果出现导入错误: +```bash +# 确保在正确的目录 +cd "C:\Steam\steamapps\common\RimWorld\Mods\3516260226\MCP" + +# 检查 Python 环境 +python -c "import mcp; print('MCP SDK 正常')" +``` + +### 如果查询结果为空: +- 尝试使用更具体的关键词 +- 检查关键词拼写 +- 使用英文类名或方法名 + +### 如果 Web 服务器无法启动: +- 检查端口是否被占用 +- 尝试使用不同的端口号 +- 确保没有其他程序占用该端口 + +## 💡 推荐使用场景 + +- **快速查询**: 使用方法 1 (direct_mcp_client.py) +- **批量处理**: 使用方法 2 (rimworld_query.py) +- **团队共享**: 使用方法 3 (web_api_server.py) +- **集成开发**: 使用 Web API 接口 + +## 🎯 性能优化 + +所有方法都已经过优化: +- 向量化处理限制在 10 个文件以内 +- API 调用超时设置为 12-15 秒 +- 支持本地缓存加速重复查询 + +现在您可以完全绕过 Qoder IDE,直接使用 RimWorld 知识库了! \ No newline at end of file diff --git a/Source/WulaFallenEmpire/3516260226.code-workspace b/Source/WulaFallenEmpire/3516260226.code-workspace index 28a1867a..2d26aeb1 100644 --- a/Source/WulaFallenEmpire/3516260226.code-workspace +++ b/Source/WulaFallenEmpire/3516260226.code-workspace @@ -3,6 +3,9 @@ { "name": "3516260226", "path": "../.." + }, + { + "path": "../../../../../../workshop/content/294100/3551234893/1.6/Assemblies/ShelterShuttle" } ], "settings": {} diff --git a/Source/WulaFallenEmpire/WULA_Shuttle/Building_ArmedShuttleWithPocket.cs b/Source/WulaFallenEmpire/WULA_Shuttle/Building_ArmedShuttleWithPocket.cs index e224447f..6bc8298b 100644 --- a/Source/WulaFallenEmpire/WULA_Shuttle/Building_ArmedShuttleWithPocket.cs +++ b/Source/WulaFallenEmpire/WULA_Shuttle/Building_ArmedShuttleWithPocket.cs @@ -106,20 +106,7 @@ namespace WulaFallenEmpire /// protected virtual Texture2D EnterTex => DefaultEnterTex; - /// - /// 获取进入按钮的文本 - 专门用于人员传送 - /// - public virtual string EnterString => "WULA.PocketSpace.EnterPawns".Translate(); - - /// - /// 获取取消进入按钮的文本 - /// - public virtual string CancelEnterString => "WULA.PocketSpace.CancelEnter".Translate(); - - /// - /// 获取进入中的文本 - /// - public virtual string EnteringString => "WULA.PocketSpace.Entering".Translate(); + // 人员传送相关属性已删除 - 不再使用Dialog_EnterPortal /// 加载是否正在进行(模仿原版 MapPortal.LoadInProgress) public bool LoadInProgress @@ -288,85 +275,7 @@ namespace WulaFallenEmpire #region 口袋空间核心方法 - /// - /// 检查是否可以进入口袋空间 - /// - public bool CanEnterPocketSpace() - { - if (!allowDirectAccess) - { - return false; // 需要特殊权限 - } - - if (!Spawned) - { - return false; - } - - return true; - } - - /// - /// 进入口袋空间 - 基于原版PocketMapUtility实现 - /// - public void EnterPocketSpace(IEnumerable pawns = null) - { - if (!CanEnterPocketSpace()) - { - Messages.Message("WULA.PocketSpace.CannotEnter".Translate(), this, MessageTypeDefOf.RejectInput); - return; - } - - // 创建或获取口袋地图 - if (pocketMap == null && !pocketMapGenerated) - { - CreatePocketMap(); - } - - if (pocketMap == null) - { - Messages.Message("WULA.PocketSpace.CreationFailed".Translate(), this, MessageTypeDefOf.RejectInput); - return; - } - - // 传送玩家到口袋空间 - List pawnsToTransfer = new List(); - - if (pawns != null) - { - pawnsToTransfer.AddRange(pawns.Where(p => p != null && p.Spawned && p.IsColonist)); - } - else - { - // 如果没有指定人员,传送选中的殖民者 - pawnsToTransfer.AddRange(Find.Selector.SelectedPawns.Where(p => p.IsColonist)); - } - - if (pawnsToTransfer.Count == 0) - { - Messages.Message("WULA.PocketSpace.NoPawnsSelected".Translate(), this, MessageTypeDefOf.RejectInput); - return; - } - - // 执行传送 - int transferredCount = 0; - foreach (Pawn pawn in pawnsToTransfer) - { - if (TransferPawnToPocketSpace(pawn)) - { - transferredCount++; - } - } - - if (transferredCount > 0) - { - Messages.Message("WULA.PocketSpace.TransferSuccess".Translate(transferredCount), MessageTypeDefOf.PositiveEvent); - - // 切换到口袋地图 - Current.Game.CurrentMap = pocketMap; - Find.CameraDriver.JumpToCurrentMapLoc(pocketMap.Center); - } - } + // 人员传送方法已删除 - 不再使用Dialog_EnterPortal进行人员传送 /// /// 切换到口袋空间视角 @@ -496,33 +405,7 @@ namespace WulaFallenEmpire } } - /// - /// 将单个Pawn传送到口袋空间 - /// - private bool TransferPawnToPocketSpace(Pawn pawn) - { - if (pawn == null || !pawn.Spawned || pocketMap == null) return false; - - try - { - // 找一个安全的位置 - IntVec3 spawnPos = CellFinder.RandomClosewalkCellNear(pocketMap.Center, pocketMap, 10, - p => p.Standable(pocketMap) && !p.GetThingList(pocketMap).Any(t => t is Pawn)); - - if (spawnPos.IsValid) - { - pawn.DeSpawn(); - GenPlace.TryPlaceThing(pawn, spawnPos, pocketMap, ThingPlaceMode.Near); - return true; - } - } - catch (Exception ex) - { - Log.Error($"[WULA] Error transferring pawn {pawn?.LabelShort} to pocket space: {ex}"); - } - - return false; - } + // TransferPawnToPocketSpace方法已删除 - 不再使用单个人员传送 /// /// 将所有物品和人员从口袋空间转移到主地图 @@ -627,40 +510,7 @@ namespace WulaFallenEmpire createCommand.disabledReason = reason; yield return createCommand; } - else - { - // 进入口袋空间按钮(直接复制原版MapPortal的逻辑) - Command_Action enterCommand = new Command_Action(); - enterCommand.action = delegate - { - try - { - Log.Message("[WULA] Creating MapPortalAdapter..."); - var adapter = new MapPortalAdapter(this); - Log.Message($"[WULA] Adapter created. Map: {adapter.Map?.uniqueID}, Spawned: {adapter.Spawned}"); - - Log.Message("[WULA] Creating Dialog_EnterPortal..."); - Dialog_EnterPortal window = new Dialog_EnterPortal(adapter); - Log.Message("[WULA] Dialog created, adding to WindowStack..."); - Find.WindowStack.Add(window); - Log.Message("[WULA] Dialog added to WindowStack successfully."); - } - catch (Exception ex) - { - Log.Error($"[WULA] Error opening Dialog_EnterPortal: {ex}"); - Messages.Message("WULA.PocketSpace.LoadingDialogError".Translate(), MessageTypeDefOf.RejectInput); - } - }; - enterCommand.icon = EnterTex; - enterCommand.defaultLabel = EnterString + "..."; - enterCommand.defaultDesc = "WULA.PocketSpace.EnterDesc".Translate(); - - // 检查是否可以进入(模仿原版MapPortal.IsEnterable) - string reason; - enterCommand.Disabled = !IsEnterable(out reason); - enterCommand.disabledReason = reason; - yield return enterCommand; - } + // 进入口袋空间按钮已删除 - 按钮无法正常工作 // 查看口袋地图按钮(模仿原版MapPortal) if (pocketMap != null) @@ -695,8 +545,18 @@ namespace WulaFallenEmpire public ThingOwner GetDirectlyHeldThings() { - // 返回containerProxy,与Dialog_EnterPortal兼容 - return containerProxy; + // 仅在第一次调用时记录日志 + if (containerProxy != null) + { + return containerProxy; + } + else + { + Log.Warning("[WULA] containerProxy is null! Creating new one..."); + containerProxy = new PortalContainerProxy { portal = this }; + Log.Message($"[WULA] Created new containerProxy - portal set: {containerProxy.portal != null}"); + return containerProxy; + } } public void GetChildHolders(List outChildren) @@ -706,7 +566,7 @@ namespace WulaFallenEmpire #endregion - #region MapPortal兼容接口(使Dialog_EnterPortal能正常工作) + #region MapPortal兼容接口(用于物品传送和地图管理) /// /// 检查是否可以进入(模仿原版MapPortal.IsEnterable) @@ -753,21 +613,7 @@ namespace WulaFallenEmpire return pocketMap?.Center ?? IntVec3.Invalid; } - /// - /// 处理进入事件(模仿原版MapPortal.OnEntered) - /// - public virtual void OnEntered(Pawn pawn) - { - // 通知物品被添加(用于统计和管理) - Notify_ThingAdded(pawn); - - // 播放传送音效(如果存在) - if (Find.CurrentMap == this.Map) - { - // 可以在这里添加音效播放 - // def.portal?.traverseSound?.PlayOneShot(this); - } - } + // OnEntered方法已删除 - 不再使用Dialog_EnterPortal机制 #endregion @@ -778,13 +624,23 @@ namespace WulaFallenEmpire /// public void Notify_ThingAdded(Thing t) { - Log.Message($"[WULA] Notify_ThingAdded called for: {t?.def?.defName} x{t?.stackCount}"); - Log.Message($"[WULA] leftToLoad count before: {leftToLoad?.Count ?? 0}"); - - int removedCount = SubtractFromToLoadList(t, t.stackCount); - - Log.Message($"[WULA] Removed {removedCount} items from leftToLoad list"); - Log.Message($"[WULA] leftToLoad count after: {leftToLoad?.Count ?? 0}"); + // 检查是否为Pawn类型 + if (t is Pawn pawn) + { + Log.Message($"[WULA] Notify_ThingAdded called for PAWN: {pawn.LabelShort} ({pawn.def.defName})"); + // 对于Pawn,我们不需要更新leftToLoad列表,因为原版也不这样做 + // 只需要通知CompTransporter + } + else + { + Log.Message($"[WULA] Notify_ThingAdded called for ITEM: {t?.def?.defName} x{t?.stackCount}"); + Log.Message($"[WULA] leftToLoad count before: {leftToLoad?.Count ?? 0}"); + + int removedCount = SubtractFromToLoadList(t, t.stackCount); + + Log.Message($"[WULA] Removed {removedCount} items from leftToLoad list"); + Log.Message($"[WULA] leftToLoad count after: {leftToLoad?.Count ?? 0}"); + } // 同时通知CompTransporter组件,确保原版装载系统也得到通知 var compTransporter = this.GetComp(); @@ -981,6 +837,28 @@ namespace WulaFallenEmpire portal = this }; + // 关键:替换CompTransporter的innerContainer字段,确保一切添加操作都经过我们的代理 + var compTransporter = this.GetComp(); + if (compTransporter != null) + { + try { + var field = typeof(CompTransporter).GetField("innerContainer", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + if (field != null) + { + field.SetValue(compTransporter, containerProxy); + } + else + { + Log.Error("[WULA] Failed to find innerContainer field in CompTransporter"); + } + } + catch (Exception ex) + { + Log.Error($"[WULA] Error replacing CompTransporter.innerContainer: {ex}"); + } + } + // 更新退出点目标(处理穿梭机重新部署的情况) UpdateExitPointTarget(); @@ -1045,175 +923,25 @@ namespace WulaFallenEmpire public bool allowDirectAccess = true; } - /// - /// MapPortal适配器类,使非MapPortal类型能够使用Dialog_EnterPortal - /// 直接继承MapPortal并委托给Building_ArmedShuttleWithPocket实现 - /// - public class MapPortalAdapter : MapPortal - { - private Building_ArmedShuttleWithPocket shuttleBuilding; - - public MapPortalAdapter(Building_ArmedShuttleWithPocket shuttle) - { - Log.Message($"[WULA] MapPortalAdapter constructor called for shuttle: {shuttle?.def?.defName}"); - shuttleBuilding = shuttle; - - // 确保基础属性正确设置 - this.def = shuttle.def ?? ThingDefOf.Wall; // 提供默认值避免null - this.HitPoints = shuttle.HitPoints; - - // 关键:手动设置Map和Position属性以避免null引用 - if (shuttle.Spawned && shuttle.Map != null) - { - // 手动调用父类的SpawnSetup,但要小心处理 - try - { - base.SpawnSetup(shuttle.Map, false); - Log.Message($"[WULA] SpawnSetup completed for map: {shuttle.Map.uniqueID}"); - } - catch (Exception ex) - { - Log.Warning($"[WULA] SpawnSetup failed, manually setting properties: {ex.Message}"); - // 如果SpawnSetup失败,手动设置关键属性 - } - } - - // 设置基础MapPortal属性 - this.pocketMap = shuttle.PocketMapForPortal; - this.leftToLoad = shuttle.leftToLoad ?? new List(); - - // 确保exit属性被正确设置 - // 注意:由于类型不兼容,暂时设为null,在GetDestinationLocation中处理 - this.exit = null; // 原版PocketMapExit类型与我们的Building_PocketMapExit不兼容 - - Log.Message($"[WULA] Synced pocketMap: {pocketMap?.uniqueID}, leftToLoad count: {leftToLoad?.Count}, exit: {exit != null}"); - - // 使用原版的PortalContainerProxy - try - { - this.containerProxy = new RimWorld.PortalContainerProxy - { - portal = this - }; - Log.Message("[WULA] Created RimWorld.PortalContainerProxy successfully"); - } - catch (Exception ex) - { - Log.Error($"[WULA] Failed to create RimWorld.PortalContainerProxy: {ex}"); - // 使用我们自己的实现作为回退 - Log.Message("[WULA] Using custom PortalContainerProxy as fallback"); - } - Log.Message("[WULA] MapPortalAdapter initialization complete"); - } - - // 委托给shuttleBuilding的关键属性(使用new隐藏基类属性) - // 委托给shuttleBuilding的关键属性(使用new隐藏基类属性) - public new Map Map - { - get - { - // 优先返回shuttleBuilding的Map - if (shuttleBuilding?.Map != null) - { - return shuttleBuilding.Map; - } - - // 如果shuttleBuilding的Map为null,返回基类的Map - if (base.Map != null) - { - return base.Map; - } - - // 最后的回退:返回当前游戏地图(避免null) - Log.Warning("[WULA] Both shuttleBuilding.Map and base.Map are null, using Current.Game.CurrentMap as fallback"); - return Find.CurrentMap ?? Current.Game.Maps?.FirstOrDefault(); - } - } - public new IntVec3 Position => shuttleBuilding?.Position ?? base.Position; - public new bool Spawned => shuttleBuilding?.Spawned ?? base.Spawned; - public new string Label => shuttleBuilding?.Label ?? base.Label; - - // 委托给shuttleBuilding的关键方法(重写虚拟方法) - public override bool IsEnterable(out string reason) - { - return shuttleBuilding.IsEnterable(out reason); - } - - public override Map GetOtherMap() - { - return shuttleBuilding.GetOtherMap(); - } - - public override IntVec3 GetDestinationLocation() - { - return shuttleBuilding.GetDestinationLocation(); - } - - public override void OnEntered(Pawn pawn) - { - shuttleBuilding.OnEntered(pawn); - } - - // 委托给shuttleBuilding的物品管理方法(使用new隐藏基类方法) - public new void Notify_ThingAdded(Thing t) - { - shuttleBuilding.Notify_ThingAdded(t); - } - - public new void AddToTheToLoadList(TransferableOneWay t, int count) - { - shuttleBuilding.AddToTheToLoadList(t, count); - } - - public new int SubtractFromToLoadList(Thing t, int count) - { - return shuttleBuilding.SubtractFromToLoadList(t, count); - } - - public new void CancelLoad() - { - // 调用shuttleBuilding的CancelLoad方法 - shuttleBuilding.CancelLoad(); - } - - // 重写原版MapPortal的关键属性 - public override string EnterString => shuttleBuilding.EnterString; - public override string CancelEnterString => shuttleBuilding.CancelEnterString; - public override string EnteringString => shuttleBuilding.EnteringString; - - // 隐藏LoadInProgress属性,确保Dialog_EnterPortal能正确读取 - public new bool LoadInProgress => shuttleBuilding?.LoadInProgress ?? false; - - // 确保SpawnSetup正确处理 - public override void SpawnSetup(Map map, bool respawningAfterLoad) - { - // 调用基类的SpawnSetup来正确初始化MapPortal的基础设施 - base.SpawnSetup(map, respawningAfterLoad); - - // 同步关键字段 - this.pocketMap = shuttleBuilding?.PocketMapForPortal; - this.leftToLoad = shuttleBuilding?.leftToLoad ?? new List(); - } - - // 重写AddItemsToTransferables,让Dialog_EnterPortal只处理人员 - // 因为物品已经通过装载按钮正确传送到内部空间了 - protected virtual void AddItemsToTransferables() - { - // 不添加任何物品,因为物品传送由装载按钮处理 - // 这样Dialog_EnterPortal只专注于人员传送 - Log.Message("[WULA] AddItemsToTransferables: Skipping items, handled by loading button"); - } - } + // MapPortalAdapter类已删除 - 不再使用Dialog_EnterPortal进行人员传送 /// /// 专为Building_ArmedShuttleWithPocket设计的PortalContainerProxy适配器 /// 模仿原版PortalContainerProxy的行为,但适配非-MapPortal类型 + /// 这个类拦截所有向容器添加物品和人员的操作 /// public class PortalContainerProxy : ThingOwner { public Building_ArmedShuttleWithPocket portal; - public override int Count => 0; + public override int Count + { + get + { + // 不记录日志,避免日志刷屏 + return 0; + } + } public override int TryAdd(Thing item, int count, bool canMergeWithExistingStacks = true) { @@ -1226,10 +954,34 @@ namespace WulaFallenEmpire public override bool TryAdd(Thing item, bool canMergeWithExistingStacks = true) { - if (portal == null) return false; + return ProcessItemOrPawn(item, canMergeWithExistingStacks); + } + + /// + /// 统一的物品和人员处理方法 + /// 动物当作物品处理,只有殖民者才当作Pawn处理 + /// + private bool ProcessItemOrPawn(Thing item, bool canMergeWithExistingStacks = true) + { + if (portal == null) + { + Log.Error("[WULA] PortalContainerProxy.ProcessItemOrPawn: portal is null!"); + return false; + } - Log.Message($"[WULA] PortalContainerProxy.TryAdd called for: {item?.def?.defName} x{item?.stackCount}"); + Log.Message($"[WULA] PortalContainerProxy.ProcessItemOrPawn called for: {item?.def?.defName} ({item?.GetType()?.Name}) x{item?.stackCount}"); + // 只有殖民者才当作Pawn处理,动物当作物品处理 + if (item is Pawn pawn && pawn.IsColonist) + { + Log.Message($"[WULA] INTERCEPTING COLONIST PAWN: {pawn.LabelShort} ({pawn.def.defName}) - Type: {pawn.GetType().Name}"); + + bool result = TransferPawnToPocketSpace(pawn); + Log.Message($"[WULA] Colonist transfer result: {result}"); + return result; + } + + // 动物和其他所有物品都当作物品处理 Map otherMap = portal.GetOtherMap(); IntVec3 destinationLocation = portal.GetDestinationLocation(); @@ -1245,11 +997,11 @@ namespace WulaFallenEmpire Log.Message($"[WULA] Calling portal.Notify_ThingAdded for: {item?.def?.defName} x{item?.stackCount}"); portal.Notify_ThingAdded(item); - // 传送物品到目标地图 - Log.Message($"[WULA] Transporting item to pocket map: {item?.def?.defName}"); + // 传送物品(包括动物)到目标地图 + Log.Message($"[WULA] Transporting item/animal to pocket map: {item?.def?.defName}"); GenDrop.TryDropSpawn(item, destinationLocation, otherMap, ThingPlaceMode.Near, out var _); - Log.Message($"[WULA] Item transport completed successfully"); + Log.Message($"[WULA] Item/animal transport completed successfully"); return true; } @@ -1267,6 +1019,187 @@ namespace WulaFallenEmpire { return null; } + + /// + /// 传送单个Pawn到口袋空间(使用直接传送机制) + /// + private bool TransferPawnToPocketSpace(Pawn pawn) + { + if (pawn == null) + { + Log.Warning("[WULA] TransferPawnToPocketSpace: Pawn is null"); + return false; + } + + if (portal == null) + { + Log.Warning("[WULA] TransferPawnToPocketSpace: Portal is null"); + return false; + } + + if (!pawn.Spawned && pawn.holdingOwner == null) + { + Log.Warning($"[WULA] TransferPawnToPocketSpace: Pawn {pawn.LabelShort} is not spawned and not in a container"); + + // 即使武装没有spawned或不在容器中,仍然尝试传送 + // 记录原始状态并继续 + Log.Message($"[WULA] Attempting to transfer pawn anyway: {pawn.LabelShort}"); + } + + // 创建口袋地图(如果需要) + Map targetMap = portal.GetOtherMap(); + if (targetMap == null) + { + Log.Warning("[WULA] TransferPawnToPocketSpace: Failed to get or create pocket map"); + return false; + } + + IntVec3 destinationLocation = portal.GetDestinationLocation(); + if (!destinationLocation.IsValid) + { + Log.Warning("[WULA] TransferPawnToPocketSpace: Invalid destination location"); + return false; + } + + try + { + // 保存重要状态 + bool wasDrafted = pawn.Drafted; + Map sourceMap = pawn.Map; // 可能为null如果pawn在容器中 + IntVec3 sourcePos = pawn.Position; + ThingOwner owner = pawn.holdingOwner; + + Log.Message($"[WULA] Starting transfer of pawn {pawn.LabelShort} to pocket space"); + + // 通知系统人员被添加,更新装载状态 + portal.Notify_ThingAdded(pawn); + + // 寻找安全的生成位置 + IntVec3 spawnPos = CellFinder.StandableCellNear(destinationLocation, targetMap, 5, + p => p.Standable(targetMap) && !p.GetThingList(targetMap).Any(t => t is Pawn)); + + if (!spawnPos.IsValid) + { + Log.Warning("[WULA] Could not find valid spawn position in pocket map, using center"); + spawnPos = CellFinder.RandomClosewalkCellNear(targetMap.Center, targetMap, 10, + p => p.Standable(targetMap)); + + if (!spawnPos.IsValid) + { + Log.Error("[WULA] All spawn position attempts failed, using map center"); + spawnPos = targetMap.Center; + } + } + + // 关键情况记录 + Log.Message($"[WULA] Found valid spawn position: {spawnPos}"); + Log.Message($"[WULA] Pawn state - Spawned: {pawn.Spawned}, In container: {owner != null}"); + + // 从Pawn当前位置安全移除 + if (owner != null) + { + Log.Message($"[WULA] Removing pawn from container"); + if (!owner.Remove(pawn)) + { + Log.Error($"[WULA] Failed to remove pawn from container!"); + return false; + } + } + else if (pawn.Spawned) + { + Log.Message($"[WULA] Despawning pawn from map {pawn.Map?.uniqueID ?? -1}"); + pawn.DeSpawn(DestroyMode.Vanish); + } + else + { + // Pawn既不在地图上也不在容器中,可能被CompTransporter直接持有 + Log.Message($"[WULA] Pawn in special state - ParentHolder: {pawn.ParentHolder?.ToString() ?? "None"}"); + + // 尝试从CompTransporter中直接提取 + if (pawn.ParentHolder != null) + { + Log.Message($"[WULA] Attempting to extract pawn from ParentHolder: {pawn.ParentHolder}"); + + // 检查是否在特殊容器中 + var parentHolder = pawn.ParentHolder; + if (parentHolder is ThingOwner thingOwner) + { + Log.Message($"[WULA] ParentHolder is a ThingOwner, attempting to remove pawn"); + if (thingOwner.Contains(pawn)) + { + bool removed = thingOwner.Remove(pawn); + Log.Message($"[WULA] Removed from ThingOwner: {removed}"); + } + } + else if (parentHolder.ToString().Contains("CompTransporter")) + { + // 尝试使用反射从CompTransporter中移除 + Log.Message($"[WULA] Attempting to extract from CompTransporter"); + var compTransporter = portal.GetComp(); + if (compTransporter != null) + { + var innerContainerField = typeof(CompTransporter).GetField("innerContainer", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + + if (innerContainerField != null) + { + var transporterContainer = innerContainerField.GetValue(compTransporter) as ThingOwner; + if (transporterContainer != null && transporterContainer.Contains(pawn)) + { + bool removed = transporterContainer.Remove(pawn); + Log.Message($"[WULA] Removed from CompTransporter: {removed}"); + } + } + } + } + } + } + + // 确认是否已从原位置移除 + if (pawn.Spawned) + { + Log.Error($"[WULA] Failed to despawn pawn! Still spawned after despawn attempt"); + return false; + } + + // 生成到目标位置 + Log.Message($"[WULA] Spawning pawn at {spawnPos} in map {targetMap.uniqueID}"); + GenSpawn.Spawn(pawn, spawnPos, targetMap); + + // 验证是否成功生成 + if (!pawn.Spawned || pawn.Map != targetMap) + { + Log.Error($"[WULA] Pawn failed to spawn correctly! Spawned: {pawn.Spawned}, Map: {pawn.Map?.uniqueID ?? -1}"); + + // 尝试恢复到原始位置 + if (sourceMap != null && sourceMap.IsPlayerHome) + { + Log.Message($"[WULA] Attempting emergency recovery to original position"); + GenSpawn.Spawn(pawn, sourcePos, sourceMap); + + if (!pawn.Spawned) + { + Log.Error($"[WULA] Emergency recovery failed! Pawn is lost"); + } + } + return false; + } + + // 恢复状态 + if (wasDrafted && pawn.drafter != null) + { + pawn.drafter.Drafted = true; + } + + Log.Message($"[WULA] Pawn {pawn.LabelShort} successfully transferred to pocket space"); + return true; + } + catch (Exception ex) + { + Log.Error($"[WULA] Exception during pawn transfer: {ex}"); + return false; + } + } }