From 4ba7caf792659d715a61cdf0ef6c0b616cb3b4ff Mon Sep 17 00:00:00 2001 From: hecomi Date: Mon, 7 Jan 2019 22:32:24 +0900 Subject: [PATCH] consider hotspot of cursor for better loupe movement. --- .../Examples/Scenes/Zoom.unity | 164 ++++++++++-------- .../Examples/Scripts/GazePointAnalyzer.cs | 1 - .../Examples/Scripts/Loupe.cs | 6 +- .../Plugins/x86/uDesktopDuplication.dll | Bin 90112 -> 90624 bytes .../Plugins/x86_64/uDesktopDuplication.dll | Bin 108544 -> 108544 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 10 +- Assets/uDesktopDuplication/Scripts/Monitor.cs | 4 +- Assets/uDesktopDuplication/Scripts/Texture.cs | 1 + .../uDesktopDuplication/Cursor.cpp | 12 ++ .../uDesktopDuplication/Cursor.h | 2 + .../uDesktopDuplication/main.cpp | 12 ++ ProjectSettings/QualitySettings.asset | 54 ++++-- ProjectSettings/UnityConnectSettings.asset | 4 +- 13 files changed, 172 insertions(+), 98 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity b/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity index 5652157..062e422 100644 --- a/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity +++ b/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity @@ -113,84 +113,32 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1001 &10684088 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalPosition.x - value: 7.1 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalPosition.y - value: -2.91 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalPosition.z - value: 9.52 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 1000012642892690, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_Name - value: Loupe - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalScale.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalScale.z - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012274256594, guid: de6f36e446e5e8a48bf61fe198985bb4, - type: 2} - propertyPath: useZoom - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalScale.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - m_IsPrefabAsset: 0 ---- !u!1 &106183784 stripped +--- !u!1 &284170807 GameObject: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1000012642892690, guid: de6f36e446e5e8a48bf61fe198985bb4, type: 2} - m_PrefabInternal: {fileID: 10684088} ---- !u!114 &106183785 + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284170812} + - component: {fileID: 284170811} + - component: {fileID: 284170810} + - component: {fileID: 284170809} + - component: {fileID: 284170808} + m_Layer: 0 + m_Name: Loupe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &284170808 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 106183784} + m_GameObject: {fileID: 284170807} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: efd9499cdb931b945947a2cd47909676, type: 3} @@ -198,6 +146,80 @@ MonoBehaviour: m_EditorClassIdentifier: zoom: 10 aspect: 1 +--- !u!114 &284170809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 284170807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb54a34570e4747429b1c5b66c69d356, type: 3} + m_Name: + m_EditorClassIdentifier: + invertX_: 0 + invertY_: 0 + useClip_: 0 + clipPos: {x: 0, y: 0} + clipScale: {x: 0.2, y: 0.2} +--- !u!23 &284170810 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23000011974915108, guid: de6f36e446e5e8a48bf61fe198985bb4, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 284170807} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: c181d333a7bee7a44b94c0f4e02c4bd4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &284170811 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33000012841683532, guid: de6f36e446e5e8a48bf61fe198985bb4, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 284170807} + m_Mesh: {fileID: 4300002, guid: d6b30b913257fee4d8246bf7a2620fcd, type: 3} +--- !u!4 &284170812 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4000011474108562, guid: de6f36e446e5e8a48bf61fe198985bb4, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 284170807} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.1, y: -2.91, z: 9.52} + m_LocalScale: {x: 0.5, y: 0.5, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &691659230 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/uDesktopDuplication/Examples/Scripts/GazePointAnalyzer.cs b/Assets/uDesktopDuplication/Examples/Scripts/GazePointAnalyzer.cs index 15c60a2..848fa30 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/GazePointAnalyzer.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/GazePointAnalyzer.cs @@ -1,5 +1,4 @@ using UnityEngine; -using MeshForwardDirection = uDesktopDuplication.Texture.MeshForwardDirection; [RequireComponent(typeof(uDesktopDuplication.Texture))] public class GazePointAnalyzer : MonoBehaviour diff --git a/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs b/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs index 933deaa..871307e 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs @@ -27,11 +27,13 @@ public class Loupe : MonoBehaviour } var monitor = uddTexture_.monitor; + var hotspotX = uDesktopDuplication.Lib.GetCursorHotSpotX(); + var hotspotY = uDesktopDuplication.Lib.GetCursorHotSpotY(); var x = monitor.isCursorVisible ? - (float)monitor.cursorX / monitor.width : + (float)(monitor.cursorX + hotspotX) / monitor.width : (float)monitor.systemCursorX / monitor.width; var y = monitor.isCursorVisible ? - (float)monitor.cursorY / monitor.height : + (float)(monitor.cursorY + hotspotY) / monitor.height : (float)monitor.systemCursorY / monitor.height; var w = 1f / zoom; var h = w / aspect * monitor.aspect; diff --git a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll index 12ed8395735c9c58c39c091fe71db92e172437cf..4641b84f27962cc30dc0e9a0fb2de87faa36e1cf 100644 GIT binary patch delta 11192 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 LV?!pA`z-zsG)M0_ delta 11112 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 diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index a363da107b21e5d7fefd8e1716c55e22b4395896..04d026db8de7a3713e5759531f8b08dd04bc9e70 100644 GIT binary patch delta 30172 zcmeIbdwfh+_dkC2kx3#%CO5edCJ{ss;~tkVi9`koBW|JSh+DL(gV0p96M~8n!fAVG zwM|tuy$VrOwT(-OQc{Z0))VS7E^R}#)mF{-z0TQ_nM9u7>-q2Z&*!{e`@Gj)d#$zi zTKjVL*=IstrDtBHXEBSio4QXF_*ElB>6(bm1mO=bcB#z8ccmycxu^C8CLH$=gddhN zp%X(<4HK#f%aPZrqUv1~(uhBh36^z{Etp06mh~3b{x125?Zj?2shc>Qbt+pTN-SjQ zO+l~+wh;tlp>NZBfc!%-H@?3pb@T`e$)K`>aY|X5v+RS5(qkU2B1bv%OD_t-@!AVk zHlpOl?2FQ?9{t4?Z%b7ku}vquEeM}d1MP>-OU*Q`T9y6=qXnU;O!wH0V?Qbupc+A{ z`+k&$YHo`QtIFa%gG90XtTfy^TI_qaEXO;DiP2}IRgLe7p;x3lpKS5a>9U(X*-V^p zs%&)Ay-a*qDQTPiE*?8s=H-_uiW@JMP4S=2#Ew5oCj$9GE{CW2h!;PV^lk5m|LiMk)9zR!@r#{h zH647JxUH4@c66=q6kpg~ zwm5z}6Mrp{y7V0+zF#8c^c^XVE0K=$9WHv6NFn_mi1|CDDgG_W^!=~0;6IB6!Ee{W zTVg3g1vO-9S+Nv5;FMVUX4%65fgVk5aSUFhMeFPfK9C{?wG@AQRq8h=TpagW*|0QZ~x=@__npB?pulVcBWnUUQGf}@$`ejJ0 z=&?}>AF3BmZIIH2b`;;)AU!+uXK~@Qvg~16QS7l!T9iIkY?>vVN`G8@uBfd0@EB1X zxkj2~+9G~XSk`D{YNLRFX9XdxFr{>e?JU||ZqHa$HgR-UCax`%){dDiZeJ<=JH{xU zTP>xI?d$*AYU-i1XuWay(HxC^^=fJT*tz~;b-6yP%Yw#D6U8kB(xUM_{humOb#$uE z$@aLq;nZ3m3&q?0dzliM?N%ynciN7o;)6Eh!Vt79(dd_Td zbxzs(IV~}~=SZbbmy7-9l+CluV`9bZvTJjFL~-8}Wq0QfXKc1~XMXE4^MW-VVyo#= z&9hm-FHEEHmWlE96UN&h8gEZdlV&dZPW*PNl(M8-#*)hn{34S6-e#z|Cx+XV5p z_ncJr`jRE^=5a}vA19u8Tr%bVF22}CN?q1Ja^qyOG?6;y`B z=WrNp-nO|0>4H43Rf+ebBKyvAk!0!pS1tbGsz}Z-)j;>NQpeY3hot|BSad&REJ%)y zH`*>F+xDZvm0r@vuZ4+i&qzmKlY&;_8RHaD%MW`>mQ9i3W8X>Art?9$zt=C{rIGSp zj}S+kmfn25ZA|V=LBM!#Y^!htF9uy?EL^(*J>>`(k!{dRL{>E;&V zh!fJAn_GFco{uNmDywv8b476GueCPfRqtML2+~_`w-md4BYpXHRY>|TE&;z?&hB_9 zeY_x?=|8BXAW3VqXtaPblSU?P>vCzrzT#hdcv^G8>T(!)Yl}+fF6_ zE|f-oFj!2PEN%QCGjb5-f-OdpVkL1nH!)aLf^V+E-G*hr6w17-#ku z7GQ1_Cd{O%QSkgWJiQ&k6R@l}N7H1`XjsHp%#HknkZZ7(6Nz{arnxfJ=#jrTOe-w# zGZqH#oK5XIX1_h#;jpJpa5!wfH?G3a(VR4+Ex5TNp9J|($hU;NHIFOogM!WX3&=w5 zS4f+>o|A*Nwop~)Zk{^xip)mALNHj zHMlwV4wt|5B#HiX1meW*rPp_P^_a$4G$QlRY4<2! z7#s{O`(hso1C7V5;jZ8;94=Mu8f1+m=L#014iX4-69@rK(et}S(X0I489fJHQ|d-< zlCm8+W`8FO(GyHG;xIHXX?Hhk2ej0PM?HKw;RtTwCeRu*d`SpF9r+1W7o5I$)%wzh zckT2kRNqPaM^oU7_XzUkeTbuB^U=n0H&Cjq4DoywN#yd+PjSqFtQE45D}@|X66?zD z7_ZvSfNh)aXjOE%D%#v7+Qb&9bVkQCtei*f$!Utq@Te~s&UJBknlv)1wbc64PS!ir zsDjziW~1#JNAOR>Tte4D!|k5`!E+!#q4>Ph?UVFeP}Y~O-0jY0YT60=0yEsMM38O1 z^B~T<@J&UYx=_#EZp`IV%nmbTQy~ktb0O#ILXxHRWfhG@*bawnjNbN`l{9*FX|`h+ zsd~!V&cRWi#>zN_4_Y@LqK8Sbdq-OLQxj^PEF0=_ayMvla@%!s(o*Gg@=fIHI{7cH zY-mWz<8ZPVVYT@tL7Y4Jv?A~B*<|eQfG!5Vv@c_(EFrITd`3&-^lghjFJ}`;Q9#Tbr zSD!=f1K6mHVEbzjgUdUO&H?QXre8bOFSiN{%fLeUv#5WYmd?uyhITPs>MrcXo=%7;*EvmnlUdaWYwz9Rkgm@40M zqGKpzdqWmM$cCJ&r=5>WQ3=8^yAN!u4}4v!b5UyU*4o%qsmH|L)=N}b?E-sxu$w!e z6?cA8-1)B79pvk|!<#q#F>(jtggX#-x}(U~ac2T|=P}hC$dWsdd(@o(r#rCC-5Ff# zj$3PE2dnN-WiEG8+}r`JxN})?=X9+*$k%g+H*Y#NY4&mi5AHzR>5d{_#~o$eJZA4X zL3IbRb?3q;Dn#$VHg_kb)*ZLj#->Qo<*C+hsWL1p24(F$nCx=r2xz#|^UF)* zPTnb}JKK;~-Epp+5lZt;*vDX7W-mqX@)JhZiswBdev>bU?I7Nc)ZDaX)~zK2k|pi_w#i3cbU66IpRr(KwD&mUlG}M`Rer*uZvjJW=ZDzt=d{M&_~&Xg zvC#J#AZ@D2BQbxm50+w${pC#Q+5M-j6_rkDgzwoj?0Nq~LCB%~M9-f<4^f_Qw0z@4 z;Do(s9QDw8XhHTM%AuCvk_okiK*|xEn21fk?~|(7CRMDtOH6sHK`dMkIin4=DcwVd z5Ak$_@%W7)Nwp3hKh94*3N?eqOaC0`J>~LA-sl?JUn$E^<%~=dhzaIB-f*1GUV677Y=q zWkQ3s{4h|dMWfcz>%Z6X{TQkHq5iR3PSowMZ?M%we;o$Y>8}N2q>YCTcHaGsOFRnQ zTm6F~ejeZ^?rjTj1TP;b6@0aG(7EFjtoyd}Dd;LhD)=F7v3L*P1?}nQ;FIq{iX30Z+8uG)1bNxw5cid?E|P&mmND?qitDqg=DS>mXeMx8lQQT;{DeU zTNUD+f%sWztAKc$F{9>#cEwwnQ95Oh90e`NjzT%q8kj17^_7CZerEj2ih9D#DZ_XZjxqx8|C#G(O;OPqHhz$e(R;v-_G%A zk2jp({Im%zhL;UHwM%SsFbN`qvH88#0>_)7MjLaOOn5o<#V9yOWwGf}^qHa7$yinF z=dpjphU@?)Ctg0QlpXsgU0lzPPeB)9v$7q7JwIXI=NOI3!Npt1*L@uNVXdb}R%$Yy zADg?<^J7r0_&i12{pIrq>mXG=6!O?lx9v+USQed!8t_8sO?zv4`COpz)tApb#H5!` zOFt4$rh%!cFsL-Wd@8T37*Conxd6RgL zx=O`W?}}Ithn$ZPuNkH6^MkDGFyUN#m;8>d#=HocI?IYllb>Mt6!j^c^)&KzJL^ZR z_0(Cx26UFCGtGqnh+`7aDbqkj-hJ=#9+$s5P}#d&-$Uxbp^$@0y;G(M6g1f0JJ7jz zsf=}o?r^NDwHIQQt=KxMtadAw?dtOb4-SRgqwaKbx-+2Goes6`bZ~R0gX#`d=5ohP;6>1iJBJl_P$zc> z`FidoaCcCp-O^EU2jWh56!|*taQUkVsyn+>cOdtuJK;`u5^CLvsdXpD&7Bx2=ZAgP zeVD?=0fN4LZxkewHhcv@Xc{oF|{HJrkn_wNcPlW2gJ~ z%ge1E-OF#892EtcHQ?B1{q1lVR^4BTFFpAQy}=Q4c;;qoEPBOXiy%f)YN^L^q&6cnU+=$u@9vG$$hWI}U$r1bi=mMuSM z2{~KYedu?0q~P!$AKJ{yJ3`l%(wS>LMX{yS^m-eyXQb5idMmMWq%`t+XiOW###oT( zji-sXLc;p~gRW>9Z3j@r8J)BaI=|~kr|&IYtxlyvsyZ;SglF^jd*7I)p-(&NI}?3M z#TmCwYGfbGMoB~MtwrfY=}CJBe=}lBF8gi92c;vL^!KHA?0WI~Zt0wTVBppF&^w9w z6&`JC20Hwb3p6k9mO9*s*FA>bPg(x`g0Ll*1iu=;C4UKiW?^0vl7vvgZfVJlZefif zl<2qjQqcT4M>Kj^qH2z4V&9XF-_XZBD8Z^$;eAAN3q&K7{E=eU6=<#^mlK#@p*x~E z1rja@1)9ndDfVWRSY9Fxzu8qZ?2?w;3>S}vO0VAx6-R_hyKfE@n}>q*>}5^5|+ z(c&8;a<+0~SE933x-ea*=1n2eAGiAWf3lSnCPo{Le^z3keY{mN+z#sVYYVh?fu|$* z&E^?C+|9~8OSw-|?lY8owsH?w?pu`mE6TlCxqq$P zk1O{R%Dqy#pHlAMDfhF=y-K-XQ0_Ti3QP_ztNPg!AEra3>R;lmIT5sut%`v!H?rO6 ziEgw>rS&A^L9|Vkzu!{P%_IH~L2j?XSodKwp7_gD8AUf&rIos7gNB$S{~F~hMZ-=( z3T^+M>>wTfwfmq^6li0DpcRC9{r}kCItO1b2P!<*r_L@)-u0=owUXzbIs=+Z{cHL+ zJJinQT}6bnqNaU^a{j+gL;YKv)Bd?6AX{5tPWTvX0NBU`@kLd3q{uS_{TS9b|N|zFSe7u?|rcAj? z>xkZ|(&a=~(YLe0Rf>Q6RK60*B9&Ge)B~YV8f@bY93!pzElSLrDt-K0xb@yVUdo#g zt!fsL_4`W{>qX*8rJeVJYfah7 zln1XLPlX#*C_@`diGN(BLy2GR#^0&ZF~l!XX+6=aGhBZ1rkXIHu}-Q&2BLF=r4@gy z8?V8m9WSL1@#v-Z1+0#Zu;m+C;DPOe#?HBg>oOeHRWuPaFMXvctrqSVv^lh- z?d2a)RrrORea1GtyNqm#TN-ZIVI@$xa1HbkO=r+_Q5`orq5SyqC|4EEon=G|ss_L4 z3a59wb`~k-e&=v`Gt9KRqL{RSrr&Q=lbwT7WTUy((v^rRu5ym2I0n3?^8a{M#j_h# ztl{Xv`8tjRIA(C1!Eq_aS2&h(JglNs_<=JHaKlP#aBF2#D>QR_gX2YxEmy1M7LGeP zp5Spl6@;yvv6tfmjzia|iYqu?Sf%Cz)~Yy}<4YWcB9%XyV+qHL z9K+YCt$8Xz|qOS$MbfM59^gzY*6*ScGhR*0y{Z+a)D5e-8hcsXyLe;;}(uPIPT*ZRIlRU zJpT&ERUEB(oLI;gBdAv`Y3Q6_y z=6ZRPzmP{k)IE@PJX~Sbn$(DrI=w~ZKF0(dWpL5Uled8>;-R-xHKhPIONq+YzNezz zsA5f5Rj!g_9@h{0y)Hj%$~4`S*|P(mo;oFG*3)xfF;O)T^n2OYj=}zYs(Ie>x2pKR zVzE5LpYWY(8{vs~ts*cMis#r5n#noJHJ;x0y z%6|s1k$qx@)(t`Skh*!N%f+KqV?`Y8@{&N-JD`Y*n{(7+?GX9vKsJY&4Yj(K9@^Z)-@WXk;3SGzGkdz{COZ>B1Z{3Bh(}>3Sn`54n5|ofGVs+p0>zzQOSSnxs~!IYDoQ_ zGpTG3H>(uNP+|urkin7(bt^1Ip7y|WIV+@wEFSNYqcCrfmxQwRBh6szkfqB#`sJA} zaZ-yW3*S!F|mSucMZfu4O3 z#)8A9J*q;rYfbXktyxqssqdRg9Q7izmGX@+%&a1Le;5my@e<9_uu*@^naAA zmZyX_(0?Tjvn>s?;~QoR4YMm`)}nzbiyCHUHq6!$J203+P-AulkOF#NzC-rQ-PqKv z6)L;_1SpadTO!;Rg1}%}6_Ou!*~94xX3n~nEW~P=>|*1ML?}gG2c(Niobx}%O^)i- zBOgOTxSVptFQ4SHM^m~A`T7%pBzS{;K&lVxm2%gJ24=EplDw)phN&KQbc(QRn9}0+ z;Y3$`v{qCr!&Di9*=|KNO>?Q}(Iu-wj%?Ln$2G{#BN3ue3X3J0Nu^Vyt1CC(92-?I6?t`aVL)PfS3>98c2=DFC^TV~|z z4=|E&uZG;#LQV&yi^>~n4#`!@BT-GA2NtncD(pV>ts3V3e-2wH3WEB?daJ%wVsDTe zWE&o3QycEfiIMf1rc5P;?d#sOMsh+VYf;Auk~BALK;JN1Xqa6oUuvio#SOD94YLgm zv$YMgtK}t8^&F>o6gSMyY?!TWm|Y>yZPS45yoTABJPk?L$om^&mo&^aH_Q%wluez6 zXH;|p4J>|?P14v*)t4r=p4frY8+u@yo_Ta)G$g0}ALXj#k!`ULtC7RnvNj1cMdKH` zrYx<+naJ0lvJKTJD3+$=EO4olxeDa#KPpJQzTC?HB3FM?5ij3CgCE(%3G!QD_tEFL zYNwr~3HgQ^zsF5ZX{CIr9iE$YW+l{X=06&3Z}6Lf@4WEsKrkV1;0!8hXt|<}t;Dic zKNuv>>s8N6NN|JO`bU$83^o+>c(<2fXT=T43ICHEYR2BOJp!R$*BCUEsbFwInFkhG;c(`emk(SM-1qmF!d|f2n7|a{oBi zv{CtB#c5p})39WDMjVSm7Zt>@)?vA5m-2IMX8<^EkoU)-ZMpId0=v>gQAn2Ky0CDs zY&eAD8?|5FgwZB>Z{wegK%h#U+_ha;V~rhcuaaNy!aA}%`Dho#-W@&lvj<)U}oF9Y(f_V|~>mq%kSmv&{LUINN+yyX^;_$`<( zs2GQE#0{34c4JL7dFa+mIiefuD8>(whjv3FP4e7scw4HJ3%e;pZhJS@T2pCcf>vJF zgNFf83N#IIwJs0Ec4u{%7L6O3hGGu%KsAQ$Osk29Y*Afx?NFC`G3XMf`kPSK?16%v z6au{}P>2YruKb4zv%!g>Rw{j>gbmw|ZhW9c6uDW3Rrd(OW?~O?dZj#zU=P*M!ryzC zOK2tN68ZBUtYb*28=H*isHnD;7-Nl#-ep1!YBS4idtyY@D3KG5!{j+VS$J#Guc&8( z>=?1|!49ojG~6213{#eiV4n(@^G2aAO}^HX#YPhCyfQ{5kNU(s=liohGX|HAd+p!- zO%A-{BX{k^q+aDW1tBhHdTvhiQ*=fuXdj@hKqoI+uNU;-(Q%Z@%N6t5^U z3+B9OQ*x##=eWW&EZu58dLC4S*>XfY3rVONp`K>N&C8h@JtQ%aimL1ICQKln-JLgD zl|xwKS)f(G5mR|5SkF~!D_@K?2o9?G=v-2F{<|=7(^VPz_hCXwW)|h6yOGSje5O2G zIIlbLyq6)Q*hO$&58}~Rx1|BKJh@RH)`xYH6Z){{nyvgBoBPg8z*kAf!oTIieOOeM z@DCocs4LQ26uf)H3Z>XqoJZ25k&$H2Eg#m#LkQ~8RPbCcS{6eu9=3);hU`(O3Hx(2 zavc3Y9@>|UwNgDrkX7pm5{mGk{1eH}>v7MAb=L?{Jq&_B8z6`#9B)Bai@GkOom7XJ zx)s-Kj=8)pLV9*Dgr6iwNKXc!+`1o|6h(&YotS`4jv`RR4Qv8}C6qjn-{{8%i!1+@ zuk~ZG;S{h9kT-;>@?n0W;F%%nQ6Af0m7CX}4Ht!f%?hdx zu=ty`*v~f=@S36UF6zN3^F&BcVx>m&sFY%bWo$yg8LsqKrDA=wCH%oBoyG z7{HpxQHRj3myqmJa<(^mOx^aD{3~A`z=pRifepGo0g~(~o_B9cr95{43sI^r;Z;}j zs&D@fReO)ETlM{a<--Hn(2V=MD$PT+>L?&x?p0HL{!!jS)U+l-#OTICXb*3}C&SZ1 zVaVfc(L+xik8+lQ^-|iI$;%9`vX2d{8x6h79GfSyzLd{MWJzNy#;HTdf>5tRqP%O! zV7_+2f{c}d>hW*sA++q#L}-@bqqM^tWyCk}_P+q6AyV{EzM04dhtu4QA-}>sg(ewZ z)f$V3xsgfKV^|MOV&MTaZL0Ba1}%jQ*(rV~FHB;w4CfL_ED-QX5^FCm{ztwDF16Ta z5DRZb5y*xXX_WGsFY=me9?D6B*kJ#1oIKOSz*ia}#(?uadE+3~g*}ju4#J-3fl`VA za|K6^IX(iu1qs)X9>^@2wPvH`$Yd56I~s@LVV%8&);WPfi)jHuNDqIZ$te#Lwc3FC zvv{iohdenM?SogVl3A3}3!%JyT1RaU9Y|Jt;g4k2i+qVoVSSYd6k`R-;I?!Qc~J_B zi=)U{zzd7e2u)ak;9+TGM%)DAuLSsqdSFB}<|9Hro5Fg9Q@i$bcUw78H(mW5a=XDS zt{26v2;~$v6E8CZsmClpnlyPpnhX+l~&=K1(5iJ z)GnIflqXbIV0o;O&7;_VZDg&o$X+h&iM$>?x6>a;ej0HnKSu+}o|)%ob962sxyaKA z*)onrwdL~AA?)KQZ$7@tF$lU(#S;_xupoMhdDB9U*&&AyWvwV)eTT9*KZ?D8c2V1l z1tvc;ltn7cs;+z>gZb`I7C{<^hpG{N$g$TjH9v>r)?w=Wy*x}EQO(oT^5Gm;aQuSf zA89N}X-PV3r;L(H%v4s@+}bERN)_rL!nPpW$qPl_I;LC-e|LlCOat zT@Qdnc{4S#K^&ct)FDqj)rq5%ACEkCP(m_C6Oej_%H1#RLZv?W$Z&Q(sdho>;v?v$ zX@!=f{V)xh2~F2~*LYTYD4Pch8kqzO)JQXo(lr}MR4$V*k5Helu_o4zoXaq=I3*}L z=%F_iy&|r+iOH{;*Z^9BE|}O*l5aOs?bg8~*<@wolh=dyAd`2DRBc`usRr)hNVQ{n zWvGFjm%){+`HEQ1KQ1{JE6ywUu2Zg>6DCP6o|<$(gy_F|OzJzN*&*NLMP)t9IlQo8V@*l*{$`P_;7(2(wnlc+PlPWjHqS{288a$Z!=7$|z9E^^w}Z5sy>-1`lT>B6b4LOpbAJ=&^A>e97xw#o^PmOE8QAq;c|Dl zUguKPPB$Q3b0}{`3>q?Ib~9AO74LCH{dUz*FCbm>c)tE{isv?pc{$sm$|nF(tz#h2 zO04HNLmlw0@kIk(3nL_4&6m`Fft6*d0dc2lFa}6Ny+4p-!<32B*zIYGbqPOQu<-JI zT<_jaLH_447N*R^A_&lB_(V0*W4DqO=ue{*qx#0!Oh*Z=dPE8VtfioAM@{NWU^aA5 zL7e310Ys?99)hqX#~2`O8G3Lu0O`S&CgLZ7RN#DamGcUN_JD~i4oHS}07-5ikoHzT z@qADGAsHEZ97x|MX7l`FpcnF=07*Y^uNtMVfOLHiB>wMv4eI8t_%nqs>;h7Of1M2p zBEuu3-KUnP0O@*spPVs?MJZFcroU@DZswlP22yNud43r%kK5?-xne??2&6if0!el? zkRIn{Jb!_g-vLq(%D&)jjPw!0SX;rjrirz>aiv$e@{XVvO*D2w(O@!K#4Dx<*Koxj z52zJiJ*Zar50GT*?u@bE!XdhJht%>3K)QYbQi;b`TrZ-Frw}pC$8B4Ug%rwKE|3AF z%lELV*haoHnYB=cUM|F_?qauglBfZq#9sxZtM?IAH62KN_5IEl?{`g5t&iX{Pkp~L z@itqy++HAEGb>d6=YfiTgs1h9Hpf7@mZckvqnsM@ zDwpeeOtq6LCz@H{WNJ^TQxrvtD3GqM$GIp_@ukkI5MGa*dc6EqprZE;*ZW3ZWM<** zs1CDJ7G-4XeIQ*CCsf()C*-}5wVF=~!V)CshOADWHdUiN1w*AEJb_e=*TzWLsFUY1 z)hPG*)+OVfXLP>PLo4{4^0X)$wP~J$=`>d7(?YM>iaEoz6NFGTgv9S$jjPSe1yfiX zYvox%xPxTGmndqNdtR-xi8AoiI(>xVbAqrRDVNLF$&(+`yaiJgHl#=!rm8mG^DICk z1Y|X{_?nxVn&<_&V;1voN6*K~0j>?Ut`SZZ&Z|Lhd4WQX@pnPa%3`s~GE_pc7%J2$ zddLzw7v}!R(||N`91W!P)XejL43kepJWlTp*3pcX<9ZkZe@{D2z}R z_re0R_C= z?btGqz)c7$iZ{3-koaLOy@i&v4CBm;-ln}XJd};IK3Hw=7B2S{kS=yp)uYnJ9vBHx z*dW6}%AfvO5GMbE<5vWk5GV9F_mzF7v#0>4%xAx1B-Nn98p#8uv*xw@%isxj1mRpG zdB$`W+uSKX9X!9gct3(ozq|6*>1<9D;djX5s$Q&q%F^6lOy67j%)sfD;oiE)KyNO9 z-<{0BcNO}W*Vz0#KG-U93a@kq3k@s2ry6qJX=If{&Q5wQ7=G_b>e`uX^yKUOpN8+0 zr!LdoAWA9z1$d6X5vV|-ceK(?INjNXf_L$*M(JhjP~SmYkt|zbehUUp2_AKCV^Dym zeYWtCymuxGZ$|F}w4X1QX;&*>o{87mqEgv2o3*nR?|?jP(Yr>?de9PNUqT+6#bmT8 z9cdiW6r}k`%aJx9eT1|h={qDl(qBj(OAt$>NTe=Ey^#hY4M7@#G!AJdQZCYRq{1a^ zsvv`SAE^xKOQZ^cb&M3>%IhjK0^qfHp=FNY49_NhTy=fN96s`2x#CcWY zbBUm3!k!f_o=|}ArvZ36yUF!<88t($h~)V-7QB@~kaOcLBsuW%+;}g6mkVBnT8FX~ z7nZ()en%x{H^H+T@L3XqF)z9*`2##%AokR5ywHvK`VOAmjn@~vYVhLScoV?WgJ*K9 zBX46Eeo=u+Om2dkA!rPw&$0jaS6l!0S6l!0S6jmW{ngh0Pk*)5=70FBt=)U)vdMwF zRxocLD;=xi-xU-lArWl`uHbYrFu@z22FqY zyCg^urh#_Detw4z2F&V$@DdH2smGRz zXrS}+DWPXqLHG`Q!Vn}o=px`@B#IXPXiwXAG2pWXQUz$j zzma|bEhGxUOG(fHUHkDBG<}2}oQ!&{c!?$=I|U;fG~ruF{Xv%kjf2&}XaX)nqNo%R zaz0`ERF$s>nvv*xF5!=q2TfRmlmnV@fKjC_Kx@)agboEJApIlH6`%>%BGDUu5pZl8 z41hKRN2Fux{TSqd1BasvKpTLwN1&mgEkOK*qS9rRz}HL|6W|vE4AFnScmPhBv^)6A^mQdB7%uKc5mFM2a^v;h+^n>NFg#B4Yw>L7E7< z6xe?{-t9pffOe!3&^5rxGtf1l&A<^eF^Hx>7nqcdWteDS(k$o_4NQ6hT|zW4=}Fik z8kjsA{jbYH21L?RnCnCXljdNq6Ac{rG&}%p0CuyW&!&O~c9{zgK(KA|%TUbQ$nVqz$0Ufu4Ej2GCmI*d-V%GZ8u9OGq1N{VxXb z&r)>?3HgE`Bbgyo4D7cYvjemNn1@8ICcKM815j9jk&ILUnM&Zm7gfFi=)V%HD)>6! z4kSD1a^RH$$Yi4{f&a0tLZ2a14LoIomqY`{tVW-KwgBm4DOFti(G-08psFdvDh8S` z9LXDBGzr@vg@PvR#QA#Q&^5?|@BWq5N}pSQLNcO&@FCJf(85|l=!irW>w%AP+Wqq@ zeU|+UX*T2u=`}nLbnPco(C(j8-9NR`C)Y9S(ErCF1VVTksTwrlYe+Sq3HPtZpnC%0 z0(O!x6+zQGcn+uYfL&jL$Kca@`Kw4uw1BN%hGV1)EPMs)2k0W;Ycd)Nx>&~ipS}V8 zN6Nt5jTlg%^MK1pMEFb+T$12=EN5g%weaMFd&k&)^N{ zYM{qHwO{F@4t_-eh$J5^gjd{(DV(&?3NYgsLQOO<<2Xh+(ZGyv;2F_C;|UxLJp&r} z*hwrzL<5~?>4d)_Ee4;^s}d_LXss1QKO`El2B7m`op3KwF@y-KkamKu209Pc2`3;O z0-rD!sS0!+aLy^U5f&GID58y}F z(1=A?|LJ6S^K}e56qEut+u<3}z|A)>4xVEI9maOPiGc%J55zyRpmbR&@LQxJ@V^6U zZ>fCzlNQ1tPA3DON22FN9&jh836ENN<~Z;krwJS1Ru!58pF(Ph15^vJnDYsDa+>g8 zBpO4)&oGL#4-GmFoc;@*bfB|=tC2{Ca5tx|dq8;osup+yTO%o3a$p{(2|uX80tG`K z0^{zWv7q(9ws$e|(YP4kVkBxP;ipLSs&xo>ABid^Jo+0}Nyr=rCfq~+XCq^{MRDBGFGR>FdTnNLyf3_W*A&NX4M(_rJdq zjn^*1HUDBffu`Ty(hq4jjDhz+`XOuXSPW_){fIQ%nu!*Hpx0>2*$RwJubt9FgF9GF9JJC&q=Qy8`PV`Bha8L&igccs?f$NdT v<6__ePFDk?H7Z{Z%tE5RoCaL0@^`Z}>ffDz;T`v&)U&WqEB<;tlaOpx}t8;~lSoSL#(m!(KFNFtisPDfC!} z%!;mBS)uf*Ss7juQd2Z5tt>3FAcy_S$Rj zwf5!gv(KOfHQog^-eoM>Z({FRlDHgFw4t@!R+4T(utyWlx~@dCIsLO9X3`cfNxHd) zNj({|989VutYlKKUQ^ZXvXlXN`7kEsZi?!_49aOXP`>}B;wyKR(>Evy@;DY;u|`%{ z`?+)!a9TR_pj zAg#VY&)lIqnJEg!kM}GNC#ZSID zOinsoF}cltCVz8E(YO6ge&b|COaDw+UU{J+J76)BTYs&b3Op)LJ653vz0c%9)ykBR zQF3s#@?1!`TwkT^4_PE1uTnaDO;m?Cw+T zEzj9gu{v=VlTU3|dMAyLH*8n(k|xLlw<}diC?-d_^v2sK7y{=0C5*4Lc*3JXi7eupqBCU-e?}A|u9NpYpmAIU+*-^l4@Ah;Vt} z){1E(dNA4d>58=@`!V^fTCqPhm&tE!S9*>LmyNF~=1~vI!?r4wqyCalZK?Rs+>6Qj zQsvs{IQf#Qgr^(j-Kvt2-a}reDl5}}mZ#3E$Qh%T<=_%!)!3=>)hy-A*n8xePgL|B z7c0wsij~=xmu1_=iWU<_wFtcNPf5xsPAwm8`yB1Av?r{rm^HZ%lkeZCJTYalyy;)c zUsKHTUYjy%YEr;MHtL~_7^8XJ$9X#YVwau{_8yZP}+E5WZZN4n8EmBrZ?;kL> zNXs>7Wrh_gmD4B7+X^e%%^2LeeZ^|Ztv9c$%6UFDN`6^46do&3ij zC1&YjdGP}ko0mplcrQ`P@2`|2mQ*ayUC!hk|ERdU%vWaHl;jniD)f0qCTHYSq^#KK zCI3B7ajcvhGG`tdRh)_O_C3bi2pVr=<|&I-ot1aZRfaw^C8XoryA)c_RklC$ynJ7_ zVqU#NuFR^qvHF1)eShrQFwISq%!OACX4`qQZM2Br%4~9e43CVjHmetAE2RaFkXS5i zjV6eXJ!DqJvuoDCn>mW1FkXIZj$$eNObastGp1i?YRAmOHSwh zL@XYZm@!*(jsaZO-nXH?r6g<&hDYNa72TZ8Q+}MV(SY_Gc9h8D% z2a8awPjpgB9=|5H9amBCL|Z2Rol#Lz(w4Dn%C60wlmnY?u&Men~xC=zGMxeq>Cd+4ki~+d-)A@KH`~3zJhnSL(JY!8?9;t7!R`TPh{bM#&F- zrc^w8KDZQ*4wnfn|8sAp?72w!{XUI12CFbHMN)cdZ$Wo7- zM{|@m&sPR#{?^pkQ#z&g`6#)^r%H>mF0qprxs7FlcN>fI$Qiasv6P(%_PN>ASeln& zd?8Z)_Ovqog)Xr^3*E-rfOi}FW`R5B#sX#A3)PX8^bpY^WlpwTPsZeP#p^d&S@U9~ z{CJI0_Ttsx((4V1i6S0MDSHX=IHi2}Qpc9V^YCPPy+FD2Qnj-2rFP1pmpjPgPb%NO ze6IbHU))9g_qck)shoTzQcnIv`T3PS^69^oS6(fY=VvQ%+rxXCF%wRhZOQfK!3USO zbcQ7IbdPFt;ccG>kdEc)!rR>*M505s^1ybZ-}yVJWPOU>Y}4(zqm*xdSoZ&{qW6w% zY(T($XxaO#oX)x`2AyK11l?36oB3?874bg1fElx{azy~1pW&olyh>rOj|nv2L*kWf zApY%Mh>fe1Ij<+i4};2;K7~$sMJsc$&P1ush0Yc{l|rcy6qo=8xpVKUIP!WFOB;@T z01tHPK(p<(*|zH()nEL$HfC1Nbob1|;L&FyXS_$wyqQXmon4}CVu0BP=EI@P7O-I( zM+=D7c4}l~zOrm*n!Mm1<=vf`QS&erY{|w!qkR0=Z9$cNEAd3G0-Z7!PpPsmKB^?V zx!3wBhME1j2c1rH@z8(K%vk^M+j!Pvc2mT0ac~OY>LYgY` z%wC17!}QV$e{*rj*(KDj2PHCoObx&o=DjYfsEzq2^(bR3^-0j6$1Nxu=_Kh>B!SPTh z=Q3=%nb03S&*b6UM?#-*-&#NwYW<)_zGQU}cXZ2A;wLRv2JeoN9Tm!)-D6tLBhfd@l=9vGYPpVh z%d(1L6>C~pKe&eWuYb6P2e#beZst4SY3%I$na0kNZ(QNshIHfb`eKoy{!Lkc@IE`y z=`0*NtU-MVSGOR#;UZ#Rpn6gdg1XsStSd(cn%A$5DL@V8;?z1*K1wJUp&*%+5B9d~w^oQ~ zL>8daf@e@mLi(eWeYG!zfyU#buZCv6Vi>N_b_c%5RQ-LA$o=hG&m1IUCg{+u8_WKHqp$RF7%(A=NtuH6}p&t)zG_p z=Dm)kh-}{n+kHQ_7mjl}HD6YabNf;}PGRpRSVvRK*5{EgC!HaKJrst6hc811qK?9$ z^BieetH>bHwd-hKg^m9wbKy&@g?u>%bu{b&wDI?!kjs5Z6st(K(0_KWb18J6 zhc5JLpob#KjdjmZr@;1d*tYrQX{xVis_opWt!+WPGscX?%K5Q<{#foZJemQ4YYHwM zt4xUQqzvER(;7fdtX~|HWww3d3~Aw^)Dk@0?(f8Npm1pAmoB$|q2~f$U-}5Q$KvTm zFF;Rb!)*tGZ1dX;bI~kcpRh_gi$byrV2&>I+F4TpSPjG!tCvVeA2>t$9+{uB^g_AkZyW7bP zG^?TO3)^tAiyBycc}>t1Ne<}x07#!rvbbjPqf0J zIpEhJrnd$ zr0D?0vQDD1as zp)Pv*ZLaURB83V4DYKpF(47Wd1fd9e?w)o%E~9x6j@#p4TYKP}%&tXgfJbZ7%}UJt zL@OS>9^Q=d@CH2h<`Vbjvj%UFZsN@>Y7V@aMcyEq@CNEGZ@7LVZ-o97=#Pds&?Rr6 zceghQE^nYKycyNtjYn(KM{#c`a_+uK^Y8{d_vU-<&DjQTkZ$75OyLc-X!cr!4&FfB z16W z`4K$a>HqC_Pfcv}8`IVm#DkO8c&S2+05^G0A)b_|*-%1jdMXOwjIP=4i(Fa<4M;On zC2WY&|M)+r@A$Zh^;7hOhII?99|qsVdM@9yE=MU?e@T1tH)DPDU`2Og+VuMBCe}L% z>n2zay4!l?cv=k(p%kqDiVXl<_Ox!ceM*bQ)8mzYpBN^eKd1b5B18UlurlJ4LGq3& z<&jTj%gaiY3!fy(AFWlwP7ZGwjE#-G_f+MclaF>AaTK1>xlpQQES(A6$go{E+mc2X zCQAII;SFpb?2k=Rd`>+epMI+1;Zwgb*|J7idU}a`u|Tr8aZuZaIM4aS)QpVzn)p@I|}bNzxwNk4jy0ek5Bi=oxdLem4(>)Ug>}%$xyS6 zIV~2vn)+cB{7!l4RB>`ltFskP_Vj%yje`Xgw7>9^>jAvIw>v)X^;SOp zV)pQx??X{L3CuLx{-C4j!X&M;qbSTnuz#&9gKM^XXZ5((lG@jqf!zmMnh|5Nzui~4 z|6Gmy!+T2d`JOEoQDxy{l)Url@|*;v^89ug>*2j$M#|plO3{}ith+Gb+`nqJk zuWSij=p{lAMVg#3t)ig8_LnBt-o??w6}rnk+^zkihthA>KSOgF8q!aRo;;o=<7_HJJ2O}pm(=B6J72MZ*V8B!JRk{ zcj7d6s4}-Z9tzvRb9bt^JNp{kLAr@Mc))OXP^G=3CwB+xE_b+oBX@+pZn)+Sbjcm) z-R(}2%bj5j?sRW(r@Mzc-IXmD-nV{@DQsS^H?PmcjMSZ^6m~f?4?DYr$6|@<62b2s z`Q5KFcg(CNIfLcVd> zeDGs^T{j=))Hf65nLU)w-;S2geNeIV+d!s2L352h5|3_+nbI*wDXHxh_#uSrK7NnE zr2ojnMY^}&S5DPV?;ZoO{b@h$mRCaMl~q^+V@bA-%lx-gURi`teO94NxR?~{0>5X!(Ttv;UA#;fb#)Lj9OQJaSZSW8%L9X@qEC?W z^Tj8F577kSfzoz>1w((_uRQf#kGAu6Bg1yycFf#2#JXQO^<78#p8d)%-<=G3gpY6E zcU!^*`>VKD>2lsx&U`HgfO48Js1zPV3%{8GZON{olTU#+XOdiAZmVsTcl*S!Ua{oX&EPSb|^B7Ej496AjW zIZxDX^+xuCs9=4hX`k}vfYcI7rh3J`lWQg4IE;hdnZz5xT zhL^!5#aCv(hh0LHJRPlk@MA>8@kr>|D(X?buQL@#|M*Cj#orMoL@K}i*k6v0RC?Mw z%TuD23HFZi*l1;$Jv4SiG+9sf!P6v`v#@^fusd32+aXl(Ta>a3WkPtFq}J{-jwmXw zm4S&DM6&RpPu;yb`mm$DGtuYIVqIaB(zz~;9aiqE>m;`*QfzhI0}9?iN21C8FXBT} zm2Sx!%13oZx#hdc?{&k2bjWlj7gl?9aSV6*k6f?&_daFxPl<+y(EF+DzFHBs=Az{9 z@LzLV^3Rf%w1ORwUcK6X z@aP@LAAESl{pRAaq0W%qq;5+M#Rg1|4~$6JD$RX}FVgtpu?8)j8>+PXc~HP-+o`}T zoK*i_gMoH(yOQ;D@F0H-0BMD{Gvvee7(z7CXxTY@0{!>!zmafuc@7yTD7^&fx_Z(m z)-C(D^5)OcvTmPp`sa{VN2ijo|A$kRUw$6ZYJ-+4oT?1IHqg2%jF!;V{Qd~P7x4R| z{JxgoALI8Teox}}BmBOH-z)k3Cw{-m@7MUGB>f zbARU?&(rSjoWprqeCJGPugtnWr0u0{Ztv_Jl~=EK>;8KXe=6%f!ybi}s@c@Pnm=1S zv`e{mukAv6CiWO^Z3~Y?gyu0yn=OeD8$prS~9 z2fI8-SxDE#L@2M{h_jYKs8!OqXf4TYbWlr0A9WQqQPCqE8d|~QI=^2-+N|mC4-{4L z{CB4Ci15Ct2Jd=8!@iXisI_(ag;3Hu8EHdZO}J+|wk~&?JH6&$5w+vtsh*-z5{08F zE-Pye+DY_J6cjbO21p*+F5X~}@LjPkM@#UQ&I0dh9igTq)r}N#r1_{?OJ&4}%-6~n zP+g0|?kc~JqW%()a1Fun>4ev}OzV!88*e&RMgtT~5 zrqk(6SwETG!DHzUJbmpSBvJePZh?1(Sg>bCVhyR|VTSeNvY%2?-`=`pCsd`uTs0fK z$lZf|vS$PN)9y9OcXmnQc?cw4o&6q$MSJC&R31NSvoCxbuP)2{a9fNUHdwPMU%Cvw zN;eifT~tS12J%mwh;~=v+E_*orfTpbtZ;f4N?WFwZ}$q{`x4A_#SgMz@(u9xVF}wxXuauNnqSoP2N`EwNfqZ^R$K$0uu#J6?mV(M+9ya_?EzGf!}Co zm2L{bm!bmR8r%kK&??FoxJTeEf&FY+ev!Zv0xt`cH){C<1ZD_)MBu9&t&(&=2+jx$ zF4hXp75JRM8|yWB+~XQPC~&91&?hwcVu6(cZwX8&(ejrIe1{PAOMeJK(k4yeQGv$< zhHlp6nF3!GSSzrNqUFa4Oca@q;0b}X0v!VH2=v{eRrtDy z$Wnnl1$GqZBk)d+ojzYmGFkRqcfkgse7WlrvV*<|#?AfGY3q|@ZfiDWQmI~%^folb>5_m~q zjKFY#dVxLyT@g6fBz;VHx>MkR#*rK>m5RP`8JN)|o!=yF36KhSkpEP6|NWS?a=eH* z%F}C9^(rPAge`h|+BckW_4+zdOyuS6(B%5pG^`z^p`(wcS0m79(&RUPZ7iRgJ>QVM zcyZAE^Rn~qy?-fwyWgN#am<+(FsLM1D`>f`75uMJ9UZ_1j@~EQ^Zt0Pcw*}Ro4Hc; z;{et>da`i8W{_r1KTyLgAzxUhh6l3v03WkfO}VHxOPwCbI$4WE?X_uIF|#N(PM~Fk zCYJ=dsw+#;tttf6DLhKq&Xa)J38s=o)a34_j!ZXANpCTUlM%O+{YN(7dw zYl7IoK$B3<%G0td&FZlrwv_4BLBXsW%U835*|g-EF@ zHq|};ypYaRqe58wfTm(Y^J2StFoXq#G-s&Xoi({h9XXWMeo)>NCQ;=t16u=YfCeC4 zB&R0gWJ)TTtm#z(Nzb7Mv_qxT+AWh9KbCk0=!3MLvbuFQA!$I8E}BGSi7YmqY=~Jq zINMZgByo_stsM(ypB)kqtF zbh)e&W_svR?O90EhM6vx9?5%7r<8V42bk40p{$!#53#{R?CO`?Ot(4}wks zP4)7d(WCNbr@8G>^$w&BlB9MEVSehJFc#c>pC&<`dxSJMifbu8LA(sZxC=+8k?E$r zQ%PCv0~XI~TyKGzjS^aElcsWa2SDZSeyLV>H771i9CqT^EIahkBiwmg^y={>&$FsJ_Xg(xfIwVBs?m1clJb zaC45^9F9pamo`OUp)q)f+d!O!v;jz$XKT*Qb{D5=Yt=rHENCdPxgJ?GuZxgwI`FA* z(}9slChlHgBy|le^A)Ch?JRd|T#FSgd$S;SU9@JDsLR6OCxt20Ba5bMta`e+TJqJX zj?Hwmsd=#viM8RqbCJ7hs;^cJ==2}5_PMh>eJ4jO>cNhf^hOvnAW4_YKQg*;p}P{2 z+mVhXC0vx_TFIK~l{KSB`kvKOml>gFz@%T)i3LnNvA|s!^`9MSWb%u0s4^NFljpnj z!jY~-I)`hy8$}wGb$=zbA%zU?)IzZpNxK>>g-NZI& zmp3miXkKh-UTkPy>`c`>Fh~h*Y55)`p8J_y?4(pn(}4p#V)LKv)jci zHMuLA)AYd++q~GJUWE3bq809`Lrdlkq?=ALUT>2PsD+AaOX-n3w+Wi1q3R}Bwl)=? zgId$|zB$W9&@;dcU1Zp`h&A=g(u^KeU+@5LP6CyeXggR2L31wo+|}+r-O%o)Jz+v| z1KGmmYL5^2S<87nTpoaX8PX=6a_f;sQ+o#JHI0LZo^~8UL%@#J&L9lZ0QygXC|c## zBSZg5&+=dCq5jbSpjfby%xf1ls03-VNPAY?RPS6fdKAIZe78M4(zQs}H|;4>F?%Rd zWGqNyHy+P|p6brLrn&wUpGMOPP(%ikA_i!-U3v6m!uKO-3-Y!!$-|+n^fe0aK;8~_ zo;tHT`=Dj*a7HHxo1((hvL4LKuO4aF<)e;{W8LK1;p&(1EWC9|8Iv+i=v@<6FOOqh zfw@S#t|IV`6!mBvi({GU^*Gk4`lDbRTRa%j20&9>rAuJ}gAt7|+_Y$W7xlQm@O^Bh)?dEE?T*KAv?7i$x<# zn>axgo7I5c*iXl*g9u6~1Rdn^5$YqoS$NA(6u=pd)>prvy4D3RF^OWA<&u8eo3+xF zjzGVwKlf%mm{AQga(l^u7Sc%GpxmBJr$+-^ml1YNPw2t`lZWa# zRMyZjd_1?U^l+nQr0Uy;b!E9~pFXTx5bAT)!O^UB0T0N&G_`Fn)=u5lhqVcd9o1OT zfhygt3d)5;cZWZc*RQroU~P2hTxp-y55@$h*U-LDFb<>x{@NHM{3aE1i^%38P-@hj5kj zMb&m_m?*79Gmhy3J<404o#`t7OJDR>4suI*`Ih;}M2xf!?%fZWp^%(wFjmup>8Qa$ z-1A5iGF=yJx>$~->ZX3^_yYA^f*dl@Az+_Jfy6Ori0ap$^=O|3*7K@?n!Ak{XRS)M zGpP(xy}AMgFrz4Ha(%jbpg#-mMCJ3F*dTlLRE0Z^Ey~95WhBJ68s_#Pvu2DsU;vAY zBHndPoHTOMzq6Kp^||lDwDM`s{B^MPp;ua|YX&f7Kv|t6#pf-^&x=`t!%`e6{2@sO zpi35GG)nqEA;7ailjTeL7JJhNGMPmc#X-1yes*3qKhTxtV?o!_G0Razicps%vi3uZ z@PbQ^miXm)^I}FPCsS5QBiW1@BrEllP1f`fmP8h0Ek{;XPngKpYSXXAY6=InbWA=K zcm1m_@e4E^`qy1TN#|Zl$MC&Jn?n2xFVGdTzEsWt*$!+{gsdOQ==0m7fekWs(jYd7 z1*^q_*h6h|ZlkVVOu`3B=hWM3yCfDpw-z#b3PkzHl25-lsT`Y+^PpO^I|}wZ(_x*x zq~LySB=5~~?kt2m5w_ByL-r`tgb@N`1@`+>-I~OvTB)8A=xX%@OC@mTcTg#ULG^g1 z!}{u^=zbsPeom%M@WwgpnCscHanUO z*?TgH_FANnD-5g#LL?Rasa_k*(&U`m>VP3EE}Q~Z3Vlu<419Jni^w{-5_nV8hq;=ibR-;~BxpSz>BGqLoE=R{RMh^pnkcuN|E zf$9s0_K~9Jx0WI&w~|8p`AEJKy>lrH1)?o_l+(tey4%DC@OEa3JcB#$Zxc(Pp_h=X z;lgB=MClikS<2LWoR89Q$VI3(fhg@BGB{l6jdcbq1=SM};Uz`%Yb~{%=*!#TgFKQO zMf>LfX^7olv^Q&oZ;!YPAXV&lRn%{Y!moB-#hBz8uM-c`t;D_BqflYA063 zz*H^zX{l@g`SM6AOX3kI!wNJ}*pmKMkEOEsc#2#uWMPpysWl6fymDJ)$><%D7eO8n z>V*-}N{k4#YZ@C6PVL&)*JI`U8;ZCh{#GAMWAOthZrD3$Jtp!@KlC zq*wE|8gFI;QmD;kke@*rlGloIR|VDsNlr-Zq6toELTv?BUp2Gk6#MYetm9m=mk)cg zs7LRl)*uEz@-r4le)a>BJ(Eah2y`tVnMl()*nEMx4f*QU(d@10eVN+$s>C4ZI}dS3 zIxLu;Vm`ExV|J+brL&F{uMO!e-k)MGp63kRj%ChNl0Vz|RG?9jnRH#jA^ zcD={3c+wv*jztsB7{`WLDYB*gQ4ZlF{Th^`>uVrI)-ED+Q=lu7luJF;MxaX`iZpG3 zVgwq2)H9UtdFdbI^{MU0v-2qp3rcTa$uM6pMNIa`G-xZe+3e%+uJz)Zhg>u=1s150 zCK#nF14vw^q$XIj=j$p9>q^eOXkqa@Cz(FWn=Ow^(lQWF>tspS&r8ymU~L9fPt?qLro%dTNq(37CBMzy7R-$2Cb4$Y zO*pBG;$_=NU!mNupvf-Td_SJP16dBq5C+QkOgAcn{7U4L%%u8FX6?Occ-WKFxXCPm z^OZ^J+{r9n$A^vj1`k2)4CH&L6YJ~a*IX#VX>RKJaOhWfF>S0O|Tsq_2o{ zH}&*%91>EwSdVfR{8FFh#b-deei7+kMY=crln_@xAYHj4-CTPl54$BUy*IRSeSt6& z?i?fpD>Q*~rAYrC_p3bh40wX_vT?RiY34~cY@NVmWrcTj$q!AtVl ztUV;j=W^IghY6#|-v^}Yrbz#xrPHMWZwUj<1iZ+jVHTlx8c3Jl+giCmAYJ3s?3u!! zERSNjLhY{OG${2j zLcysNi`fNW`EJd?cR;#)Dzw!*0>}f&4Yl%kj$uU@iZ@Gn8m!URJRFb=rX*c*$v*qlTrbY*JEsjoo%$#v0s!F$RZ@ZH?(MPWT7bQ+7Hmv zfb<<`JK-IHK8*3_cd$SMke)I<8Gfke+9*(!Wun5Hq5*C9Y6dq0NpBmFHadqzI%J== zu^0}d4-FY2Jqy?p=_i5IkY9o1;w$gshU+~b$v=D7r0p;Y_H()P6p%6k8to3SGaaHu z$RYB(yr=08e@~U?uxLJY%b@cp#8ln{4+%4XR5DYf=L54)mh$}H*K7;{QhF|sbQc5h zfRPlD-Y@b`11Si~2cnHpzET+LBKbL5TWed@w5;SCcB5>eF0Dpm$Y`#pn7XD$6#U?z zR`ExNvY!}a zx+?`l?CQ@O~Es8;#OJ zrxN);dFXhi86Cv*(@VZ*ymR@EYQDE*#DX>Pj5MI3Vj*yE*`QPjrSCwl#xF9$ujaCVuJrUQz(4Lh7lEO^pf@SgIgP&qq$}dQ8aR)|@g*vgbTN)d zR}Wo6*P-Kt_7G zqH(K%4(O6>)b~^pJr1O@t3~<l_)PSbt_PNT5{9`~~?nhA$sFhQHn$LXs zx>w>VBl3;`c^SJX1Eexx5k67`E!8-rqSs%aiC%n9Yz!fnBx$YCdj&|>MUkf5R$dqp z(by+ric`Acsw55j8U0p-Xb<~Y-MxUt1-deyxrU+i3wlgeuPtEh8svu{s|D?q)piS6 zTsxP3sskHb(5JBVi$k5dkS%Rp`ztj88^hI1eLjwb=*+9>8*SY})~%C4U9AP!JsL?F1|6HhE2v}((&ZpDWIad$ zJqs!aeFQoWx(cG-7zcnNK;1xtK%+q8LDN9lphckjK~_)+=vmM!ptnJX3fN5PIG8U$ zwV)qCw?JNNnB)hF0QCh81C0aC0xbkB13dz=fl5KIfXYD!Kqo=9pdZ($NAG2G)t>jU zVS69H59e1_`lR8y>hUQ<(&NL>I=3ve2xbED!N@}|V+*Q)-VV|i*HXxef}!Ujdz|zj zEA^1=ge)JjTCEN|NpWp`61|H`@;wxpd1gy{iW))C0OwO_jgtQ`@5?D{aw}n{;ul()8AEf{xANn zYVV87*_a`ZMXm|`%^!j4p+h*<8iVKOBqogo&IB32X90^rM)01Wmgy7o#x7_aNmi@}!x^0UiZWwD7leQr`p-UEouo9ndKUM)yVk z^KkXWpy`J_88Y<1ED-Mw;7cGfR1R#_Uw8n-8=_>$gqOfJ1K|yL{DqrzauE6(d=0Qg zlBQ4C2~+|(;Xu&K;7v(ZN$NOQ`{-l(mqB*$4&b3_=)T#|0dAg-{418)M_L7Ctkz&Q)iHQ=*=;}>BNfwurta?sDj15@rr*=+DY z`X3{*hzF+p1KmM9aO7h2e+?zTq%6T)p9>zCvJ`Wjc;N8+;Q@FPFd-LxMm(_hGBgUj z5x5m(z_CazFm^c>F7QU+QV<=Nwg)TKOfbmkW`32egWwhK@J?e4zmNi30MH4RukR;(EyYl!$=0@L#GBf z{9l^f1Pmy`stUOQxEoXoz7lw8J#@f3fZtj-pwEz~1)j0NOMKF-1y0$BJ_DZ%q)(Yt zal4~q4-i#s1kMz^=f_d{X!;%~0{VpXx@`pC@Ie#2=f_UZ525rybjl|5|7s|Kk?seT zfG2zgR0f{#;ARXu@bp^UQ$Z!*>Ge8K@CCp=Ti`L|^vb;z#G?i5_#_;ovcTe}uzuW! zaRYotMMJ@tshIx@O3{Bv|1CYcsfQ|@-_w_XVVmjEB!tu5j7i7cT4vjB4X>=pbDRz~pjDQn9flwFSXpFS(?-w$t= z!%N^L5cMB@&7rR`u@7Lr0zdfxM#0mElIw>MM)36U;}=k39`u1hAHf;$^erOgD540S zJ~k|`g7@I*1Hwzy&|iV>0}l8Y{hx~j9o#1zL#T-dCLBj!J_sI|Z~_e?9vJ%x`kr{; z;FB1P!~8<3gK3e14@MZKwkeuB!I3{bHbz= zgb#AUOi(QNEa14)S|cpL_%rYfa?b;EoTN)Hf<{74SOLle?>aEI($k4f(i1+#AVLP= z2+(Tq7GTG-no$GrB4{Jz4&V!)X}ssrIvu%3e2zs4I)rqLz7M?TaXKBdUj?0o9BAd| z>UJbN&(rCgeH*AAa>6Q5n|usR;DB?e1Uwz3|LZ)~1n_j!eeF9q0G>{k|M(tbXC=nR zCCvLD&kSv1ZJTnr)|LRIjkz#j!~2RcDy->SccP=P2xX!`}* zBN*KXZ0o?l0j~$@uA@=leSot-)KJ2wLG()XGVmOTDkgmG29|B;>;y*siY@?8$HMo3 zNQX{(Kl~N_PYL`(8`6NA+9Nm-mEbKUO&FE_#ODr>13di- z_Y}x7nQ>ft2hjshzksEmvzqa$ML$WUpOeN;#h?bx0flCwLBInp-igm7pinDiNKD!T zBBe?o{knh`V2ppIB%Z!f(icqP37vwc)BQ4#7c~yJ7eqRQbXre5VXGE6e1(o4xEw?d y7XW*_C=!)GFMLCw3_UOfWClMHc)up6e?97Fw&z8LzwpU_yX5Uswbgd^`~Lwq=#cUN diff --git a/Assets/uDesktopDuplication/Scripts/Lib.cs b/Assets/uDesktopDuplication/Scripts/Lib.cs index a9f6a1f..6ad47ef 100644 --- a/Assets/uDesktopDuplication/Scripts/Lib.cs +++ b/Assets/uDesktopDuplication/Scripts/Lib.cs @@ -141,7 +141,7 @@ public static class Lib [DllImport("uDesktopDuplication")] public static extern bool IsPrimary(int id); [DllImport("uDesktopDuplication")] - public static extern bool IsCursorVisible(int id); + public static extern bool IsCursorVisible(); [DllImport("uDesktopDuplication")] public static extern int GetCursorX(); [DllImport("uDesktopDuplication")] @@ -155,7 +155,11 @@ public static class Lib [DllImport("uDesktopDuplication")] public static extern CursorShapeType GetCursorShapeType(); [DllImport("uDesktopDuplication")] - public static extern void GetCursorTexture(int id, System.IntPtr ptr); + public static extern void GetCursorTexture(IntPtr ptr); + [DllImport("uDesktopDuplication")] + public static extern int GetCursorHotSpotX(); + [DllImport("uDesktopDuplication")] + public static extern int GetCursorHotSpotY(); [DllImport("uDesktopDuplication")] public static extern int SetTexturePtr(int id, IntPtr ptr); [DllImport("uDesktopDuplication")] @@ -167,7 +171,7 @@ public static class Lib [DllImport("uDesktopDuplication", EntryPoint = "GetDirtyRects")] private static extern IntPtr GetDirtyRects_Internal(int id); [DllImport("uDesktopDuplication", EntryPoint = "GetPixels")] - private static extern bool GetPixels_Internal(int id, System.IntPtr ptr, int x, int y, int width, int height); + private static extern bool GetPixels_Internal(int id, IntPtr ptr, int x, int y, int width, int height); [DllImport("uDesktopDuplication")] public static extern IntPtr GetBuffer(int id); [DllImport("uDesktopDuplication")] diff --git a/Assets/uDesktopDuplication/Scripts/Monitor.cs b/Assets/uDesktopDuplication/Scripts/Monitor.cs index 99d0f58..ae70650 100644 --- a/Assets/uDesktopDuplication/Scripts/Monitor.cs +++ b/Assets/uDesktopDuplication/Scripts/Monitor.cs @@ -172,7 +172,7 @@ public class Monitor public bool isCursorVisible { - get { return Lib.IsCursorVisible(id); } + get { return Lib.IsCursorVisible(); } } public int cursorX @@ -301,7 +301,7 @@ public class Monitor public void GetCursorTexture(System.IntPtr ptr) { - Lib.GetCursorTexture(id, ptr); + Lib.GetCursorTexture(ptr); } public void CreateTextureIfNeeded() diff --git a/Assets/uDesktopDuplication/Scripts/Texture.cs b/Assets/uDesktopDuplication/Scripts/Texture.cs index e28ed1c..ad592dd 100644 --- a/Assets/uDesktopDuplication/Scripts/Texture.cs +++ b/Assets/uDesktopDuplication/Scripts/Texture.cs @@ -3,6 +3,7 @@ namespace uDesktopDuplication { +[RequireComponent(typeof(Renderer))] [AddComponentMenu("uDesktopDuplication/Texture")] public class Texture : MonoBehaviour { diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index c00f1b0..e05e748 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -464,4 +464,16 @@ int Cursor::GetPitch() const int Cursor::GetType() const { return shapeInfo_.Type; +} + + +int Cursor::GetHotSpotX() const +{ + return shapeInfo_.HotSpot.x; +} + + +int Cursor::GetHotSpotY() const +{ + return shapeInfo_.HotSpot.y; } \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h index 1640152..3857b9c 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h @@ -30,6 +30,8 @@ public: int GetHeight() const; int GetPitch() const; int GetType() const; + int GetHotSpotX() const; + int GetHotSpotY() const; private: bool isVisible_ = false; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index c7cd400..06f7b6d 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -340,6 +340,18 @@ extern "C" return g_manager->GetCursor()->GetType(); } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetCursorHotSpotX() + { + if (!g_manager) return -1; + return g_manager->GetCursor()->GetHotSpotX(); + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetCursorHotSpotY() + { + if (!g_manager) return -1; + return g_manager->GetCursor()->GetHotSpotY(); + } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API GetCursorTexture(ID3D11Texture2D* texture) { if (!g_manager) return; diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 86c047f..6a5b726 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -29,6 +29,12 @@ QualitySettings: vSyncCount: 0 lodBias: 0.3 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -57,6 +63,12 @@ QualitySettings: vSyncCount: 0 lodBias: 0.4 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 16 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -85,6 +97,12 @@ QualitySettings: vSyncCount: 1 lodBias: 0.7 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 64 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -113,6 +131,12 @@ QualitySettings: vSyncCount: 1 lodBias: 1 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 256 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -141,6 +165,12 @@ QualitySettings: vSyncCount: 1 lodBias: 1.5 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 1024 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -169,25 +199,15 @@ QualitySettings: vSyncCount: 1 lodBias: 2 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4096 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSM: 5 - PSP2: 2 - Samsung TV: 2 - Standalone: 5 - Tizen: 2 - Web: 5 - WebGL: 3 - WiiU: 5 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 + m_PerPlatformDefaultQuality: {} diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index 1cc5485..1be4600 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/ProjectSettings/UnityConnectSettings.asset @@ -3,13 +3,14 @@ --- !u!310 &1 UnityConnectSettings: m_ObjectHideFlags: 0 - m_Enabled: 0 + m_Enabled: 1 m_TestMode: 0 m_TestEventUrl: m_TestConfigUrl: m_TestInitMode: 0 CrashReportingSettings: m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes + m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate m_Enabled: 0 m_CaptureEditorExceptions: 1 UnityPurchasingSettings: @@ -25,7 +26,6 @@ UnityConnectSettings: m_Enabled: 0 m_InitializeOnStartup: 1 m_TestMode: 0 - m_EnabledPlatforms: 4294967295 m_IosGameId: m_AndroidGameId: m_GameIds: {}