aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs31
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs27
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs24
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs4618
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs373
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs320
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs24
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs10
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs5
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs45
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs218
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs239
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs108
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs196
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs124
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs163
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs141
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs385
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs166
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs4575
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs159
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs62
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs222
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs2701
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs6382
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs8
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs239
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/Tests/CompilerTest.cs124
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs117
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.lexer.cs3433
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.parser.cs18352
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs560
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/Tests/CoopTerminationTests.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs186
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiAvatarTests.cs158
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs131
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiLinkingTests.cs53
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs5
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiNotecardTests.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiObjectTests.cs13
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs3
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiUserTests.cs157
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAttachmentTests.cs27
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs19
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs5
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/Resources/XEngine.addin.xml13
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineBasicTests.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineCrossingTests.cs195
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs152
-rwxr-xr-x[-rw-r--r--]OpenSim/Region/ScriptEngine/XEngine/XEngine.cs529
61 files changed, 18157 insertions, 27728 deletions
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs
index e4ca635..a7fa502 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs
@@ -34,7 +34,36 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
34{ 34{
35 public interface ICompiler 35 public interface ICompiler
36 { 36 {
37 void PerformScriptCompile(string source, string asset, UUID ownerID, out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap); 37 /// <summary>
38 /// Performs the script compile.
39 /// </summary>
40 /// <param name="Script"></param>
41 /// <param name="asset"></param>
42 /// <param name="ownerUUID"></param>
43 /// <param name="alwaysRecompile">
44 /// If set to true then always recompile the script, even if we have a DLL already cached.
45 /// </param>
46 /// <param name="assembly"></param>
47 /// <param name="linemap"></param>
48 void PerformScriptCompile(
49 string source, string asset, UUID ownerID,
50 out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap);
51
52 /// <summary>
53 /// Performs the script compile.
54 /// </summary>
55 /// <param name="Script"></param>
56 /// <param name="asset"></param>
57 /// <param name="ownerUUID"></param>
58 /// <param name="alwaysRecompile">
59 /// If set to true then always recompile the script, even if we have a DLL already cached.
60 /// </param>
61 /// <param name="assembly"></param>
62 /// <param name="linemap"></param>
63 void PerformScriptCompile(
64 string source, string asset, UUID ownerID, bool alwaysRecompile,
65 out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap);
66
38 string[] GetWarnings(); 67 string[] GetWarnings();
39 } 68 }
40} 69}
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs
index 30e99b0..b9970bf 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs
@@ -46,6 +46,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
46 /// <param name='item'>/param> 46 /// <param name='item'>/param>
47 /// <param name='coopSleepHandle'>/param> 47 /// <param name='coopSleepHandle'>/param>
48 void Initialize( 48 void Initialize(
49 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle); 49 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item);
50 } 50 }
51} \ No newline at end of file 51}
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
index b8fdd01..6355669 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
@@ -110,5 +110,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
110 ParameterInfo[] ScriptBaseClassParameters { get; } 110 ParameterInfo[] ScriptBaseClassParameters { get; }
111 111
112 IScriptApi GetApi(UUID itemID, string name); 112 IScriptApi GetApi(UUID itemID, string name);
113
114 void SleepScript(UUID itemID, int delay);
113 } 115 }
114} 116}
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index b9a217b..e4297c4 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -29,6 +29,7 @@ using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Threading; 31using System.Threading;
32using System.Diagnostics;
32using OpenMetaverse; 33using OpenMetaverse;
33using log4net; 34using log4net;
34using OpenSim.Framework; 35using OpenSim.Framework;
@@ -93,24 +94,30 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
93 bool ShuttingDown { get; set; } 94 bool ShuttingDown { get; set; }
94 95
95 /// <summary> 96 /// <summary>
97 /// When stopping the script: should it remain stopped permanently (i.e., save !Running in its state)?
98 /// </summary>
99 bool StayStopped { get; set; }
100
101 /// <summary>
96 /// Script state 102 /// Script state
97 /// </summary> 103 /// </summary>
98 string State { get; set; } 104 string State { get; set; }
99 105
100 /// <summary> 106 /// <summary>
101 /// Time the script was last started 107 /// If true then the engine is responsible for persisted state. If false then some other component may
108 /// persist state (e.g. attachments persisting in assets).
102 /// </summary> 109 /// </summary>
103 DateTime TimeStarted { get; } 110 bool StatePersistedHere { get; }
104 111
105 /// <summary> 112 /// <summary>
106 /// Tick the last measurement period was started. 113 /// Time the script was last started
107 /// </summary> 114 /// </summary>
108 long MeasurementPeriodTickStart { get; } 115 DateTime TimeStarted { get; }
109 116
110 /// <summary> 117 /// <summary>
111 /// Ticks spent executing in the last measurement period. 118 /// Collects information about how long the script was executed.
112 /// </summary> 119 /// </summary>
113 long MeasurementPeriodExecutionTime { get; } 120 MetricsCollectorTime ExecutionTime { get; }
114 121
115 /// <summary> 122 /// <summary>
116 /// Scene part in which this script instance is contained. 123 /// Scene part in which this script instance is contained.
@@ -157,6 +164,9 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
157 void ClearQueue(); 164 void ClearQueue();
158 int StartParam { get; set; } 165 int StartParam { get; set; }
159 166
167 WaitHandle CoopWaitHandle { get; }
168 Stopwatch ExecutionTimer { get; }
169
160 void RemoveState(); 170 void RemoveState();
161 171
162 void Init(); 172 void Init();
@@ -172,8 +182,9 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
172 /// <param name="timeout"></param> 182 /// <param name="timeout"></param>
173 /// How many milliseconds we will wait for an existing script event to finish before 183 /// How many milliseconds we will wait for an existing script event to finish before
174 /// forcibly aborting that event. 184 /// forcibly aborting that event.
185 /// <param name="clearEventQueue">If true then the event queue is also cleared</param>
175 /// <returns>true if the script was successfully stopped, false otherwise</returns> 186 /// <returns>true if the script was successfully stopped, false otherwise</returns>
176 bool Stop(int timeout); 187 bool Stop(int timeout, bool clearEventQueue = false);
177 188
178 void SetState(string state); 189 void SetState(string state);
179 190
@@ -222,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
222 void SetVars(Dictionary<string, object> vars); 233 void SetVars(Dictionary<string, object> vars);
223 DetectParams GetDetectParams(int idx); 234 DetectParams GetDetectParams(int idx);
224 UUID GetDetectID(int idx); 235 UUID GetDetectID(int idx);
225 void SaveState(string assembly); 236 void SaveState();
226 void DestroyScriptInstance(); 237 void DestroyScriptInstance();
227 238
228 IScriptApi GetApi(string name); 239 IScriptApi GetApi(string name);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
index 1e19032..df1bd8b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
@@ -182,7 +182,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
182 { 182 {
183 // Start the thread that will be doing the work 183 // Start the thread that will be doing the work
184 cmdHandlerThread 184 cmdHandlerThread
185 = Watchdog.StartThread( 185 = WorkManager.StartThread(
186 CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true); 186 CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true);
187 } 187 }
188 } 188 }
@@ -301,6 +301,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
301 } 301 }
302 } 302 }
303 303
304 public static void StateChange(IScriptEngine engine, uint localID, UUID itemID)
305 {
306 // Remove a specific script
307
308 // Remove dataserver events
309 m_Dataserver[engine].RemoveEvents(localID, itemID);
310
311 IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>();
312 if (comms != null)
313 comms.DeleteListener(itemID);
314
315 IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>();
316 if (xmlrpc != null)
317 {
318 xmlrpc.DeleteChannels(itemID);
319 xmlrpc.CancelSRDRequests(itemID);
320 }
321 // Remove Sensors
322 m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
323
324 }
325
304 /// <summary> 326 /// <summary>
305 /// Get the sensor repeat plugin for this script engine. 327 /// Get the sensor repeat plugin for this script engine.
306 /// </summary> 328 /// </summary>
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index b5ba4a0..f637a1d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -28,7 +28,13 @@
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31<<<<<<< HEAD
32using System.Diagnostics;
33using System.Drawing;
34using System.Drawing.Imaging;
35=======
31using System.Diagnostics; //for [DebuggerNonUserCode] 36using System.Diagnostics; //for [DebuggerNonUserCode]
37>>>>>>> avn/ubitvar
32using System.Runtime.Remoting.Lifetime; 38using System.Runtime.Remoting.Lifetime;
33using System.Text; 39using System.Text;
34using System.Threading; 40using System.Threading;
@@ -37,8 +43,13 @@ using System.Timers;
37using Nini.Config; 43using Nini.Config;
38using log4net; 44using log4net;
39using OpenMetaverse; 45using OpenMetaverse;
46<<<<<<< HEAD
47using OpenMetaverse.Assets;
48=======
40using OpenMetaverse.StructuredData; 49using OpenMetaverse.StructuredData;
50>>>>>>> avn/ubitvar
41using OpenMetaverse.Packets; 51using OpenMetaverse.Packets;
52using OpenMetaverse.Rendering;
42using OpenSim; 53using OpenSim;
43using OpenSim.Framework; 54using OpenSim.Framework;
44 55
@@ -92,6 +103,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
92 { 103 {
93 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 104 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
94 105
106 public int LlRequestAgentDataCacheTimeoutMs { get; set; }
107
95 protected IScriptEngine m_ScriptEngine; 108 protected IScriptEngine m_ScriptEngine;
96 protected SceneObjectPart m_host; 109 protected SceneObjectPart m_host;
97 110
@@ -99,14 +112,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
99 /// Used for script sleeps when we are using co-operative script termination. 112 /// Used for script sleeps when we are using co-operative script termination.
100 /// </summary> 113 /// </summary>
101 /// <remarks>null if co-operative script termination is not active</remarks> 114 /// <remarks>null if co-operative script termination is not active</remarks>
102 WaitHandle m_coopSleepHandle;
103
104 /// <summary> 115 /// <summary>
105 /// The item that hosts this script 116 /// The item that hosts this script
106 /// </summary> 117 /// </summary>
107 protected TaskInventoryItem m_item; 118 protected TaskInventoryItem m_item;
108 119
109 protected bool throwErrorOnNotImplemented = true; 120 protected bool throwErrorOnNotImplemented = false;
110 protected AsyncCommandManager AsyncCommands = null; 121 protected AsyncCommandManager AsyncCommands = null;
111 protected float m_ScriptDelayFactor = 1.0f; 122 protected float m_ScriptDelayFactor = 1.0f;
112 protected float m_ScriptDistanceFactor = 1.0f; 123 protected float m_ScriptDistanceFactor = 1.0f;
@@ -122,6 +133,128 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
122 protected bool m_scriptConsoleChannelEnabled = false; 133 protected bool m_scriptConsoleChannelEnabled = false;
123 protected bool m_debuggerSafe = false; 134 protected bool m_debuggerSafe = false;
124 protected IUrlModule m_UrlModule = null; 135 protected IUrlModule m_UrlModule = null;
136<<<<<<< HEAD
137 protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>();
138 protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp.
139 protected int m_sleepMsOnSetTexture = 200;
140 protected int m_sleepMsOnSetLinkTexture = 200;
141 protected int m_sleepMsOnScaleTexture = 200;
142 protected int m_sleepMsOnOffsetTexture = 200;
143 protected int m_sleepMsOnRotateTexture = 200;
144 protected int m_sleepMsOnSetPos = 200;
145 protected int m_sleepMsOnSetRot = 200;
146 protected int m_sleepMsOnSetLocalRot = 200;
147 protected int m_sleepMsOnPreloadSound = 1000;
148 protected int m_sleepMsOnMakeExplosion = 100;
149 protected int m_sleepMsOnMakeFountain = 100;
150 protected int m_sleepMsOnMakeSmoke = 100;
151 protected int m_sleepMsOnMakeFire = 100;
152 protected int m_sleepMsOnRezAtRoot = 100;
153 protected int m_sleepMsOnInstantMessage = 2000;
154 protected int m_sleepMsOnEmail = 20000;
155 protected int m_sleepMsOnCreateLink = 1000;
156 protected int m_sleepMsOnGiveInventory = 3000;
157 protected int m_sleepMsOnRequestAgentData = 100;
158 protected int m_sleepMsOnRequestInventoryData = 1000;
159 protected int m_sleepMsOnSetDamage = 5000;
160 protected int m_sleepMsOnTextBox = 1000;
161 protected int m_sleepMsOnAdjustSoundVolume = 100;
162 protected int m_sleepMsOnEjectFromLand = 5000;
163 protected int m_sleepMsOnAddToLandPassList = 100;
164 protected int m_sleepMsOnDialog = 1000;
165 protected int m_sleepMsOnRemoteLoadScript = 3000;
166 protected int m_sleepMsOnRemoteLoadScriptPin = 3000;
167 protected int m_sleepMsOnOpenRemoteDataChannel = 1000;
168 protected int m_sleepMsOnSendRemoteData = 3000;
169 protected int m_sleepMsOnRemoteDataReply = 3000;
170 protected int m_sleepMsOnCloseRemoteDataChannel = 1000;
171 protected int m_sleepMsOnSetPrimitiveParams = 200;
172 protected int m_sleepMsOnSetLinkPrimitiveParams = 200;
173 protected int m_sleepMsOnXorBase64Strings = 300;
174 protected int m_sleepMsOnSetParcelMusicURL = 2000;
175 protected int m_sleepMsOnGetPrimMediaParams = 1000;
176 protected int m_sleepMsOnGetLinkMedia = 1000;
177 protected int m_sleepMsOnSetPrimMediaParams = 1000;
178 protected int m_sleepMsOnSetLinkMedia = 1000;
179 protected int m_sleepMsOnClearPrimMedia = 1000;
180 protected int m_sleepMsOnClearLinkMedia = 1000;
181 protected int m_sleepMsOnRequestSimulatorData = 1000;
182 protected int m_sleepMsOnLoadURL = 10000;
183 protected int m_sleepMsOnParcelMediaCommandList = 2000;
184 protected int m_sleepMsOnParcelMediaQuery = 2000;
185 protected int m_sleepMsOnModPow = 1000;
186 protected int m_sleepMsOnSetPrimURL = 2000;
187 protected int m_sleepMsOnRefreshPrimURL = 20000;
188 protected int m_sleepMsOnMapDestination = 1000;
189 protected int m_sleepMsOnAddToLandBanList = 100;
190 protected int m_sleepMsOnRemoveFromLandPassList = 100;
191 protected int m_sleepMsOnRemoveFromLandBanList = 100;
192 protected int m_sleepMsOnResetLandBanList = 100;
193 protected int m_sleepMsOnResetLandPassList = 100;
194 protected int m_sleepMsOnGetParcelPrimOwners = 2000;
195 protected int m_sleepMsOnGetNumberOfNotecardLines = 100;
196 protected int m_sleepMsOnGetNotecardLine = 100;
197 protected string m_internalObjectHost = "lsl.opensim.local";
198 protected bool m_restrictEmail = false;
199 protected ISoundModule m_SoundModule = null;
200
201 protected float m_avatarHeightCorrection = 0.2f;
202 protected bool m_useSimpleBoxesInGetBoundingBox = false;
203 protected bool m_addStatsInGetBoundingBox = false;
204
205 //LSL Avatar Bounding Box (lABB), lower (1) and upper (2),
206 //standing (Std), Groundsitting (Grs), Sitting (Sit),
207 //along X, Y and Z axes, constants (0) and coefficients (1)
208 protected float m_lABB1StdX0 = -0.275f;
209 protected float m_lABB2StdX0 = 0.275f;
210 protected float m_lABB1StdY0 = -0.35f;
211 protected float m_lABB2StdY0 = 0.35f;
212 protected float m_lABB1StdZ0 = -0.1f;
213 protected float m_lABB1StdZ1 = -0.5f;
214 protected float m_lABB2StdZ0 = 0.1f;
215 protected float m_lABB2StdZ1 = 0.5f;
216 protected float m_lABB1GrsX0 = -0.3875f;
217 protected float m_lABB2GrsX0 = 0.3875f;
218 protected float m_lABB1GrsY0 = -0.5f;
219 protected float m_lABB2GrsY0 = 0.5f;
220 protected float m_lABB1GrsZ0 = -0.05f;
221 protected float m_lABB1GrsZ1 = -0.375f;
222 protected float m_lABB2GrsZ0 = 0.5f;
223 protected float m_lABB2GrsZ1 = 0.0f;
224 protected float m_lABB1SitX0 = -0.5875f;
225 protected float m_lABB2SitX0 = 0.1875f;
226 protected float m_lABB1SitY0 = -0.35f;
227 protected float m_lABB2SitY0 = 0.35f;
228 protected float m_lABB1SitZ0 = -0.35f;
229 protected float m_lABB1SitZ1 = -0.375f;
230 protected float m_lABB2SitZ0 = -0.25f;
231 protected float m_lABB2SitZ1 = 0.25f;
232
233 protected float m_primSafetyCoeffX = 2.414214f;
234 protected float m_primSafetyCoeffY = 2.414214f;
235 protected float m_primSafetyCoeffZ = 1.618034f;
236 protected bool m_useCastRayV3 = false;
237 protected float m_floatToleranceInCastRay = 0.00001f;
238 protected float m_floatTolerance2InCastRay = 0.001f;
239 protected DetailLevel m_primLodInCastRay = DetailLevel.Medium;
240 protected DetailLevel m_sculptLodInCastRay = DetailLevel.Medium;
241 protected DetailLevel m_meshLodInCastRay = DetailLevel.Highest;
242 protected DetailLevel m_avatarLodInCastRay = DetailLevel.Medium;
243 protected int m_maxHitsInCastRay = 16;
244 protected int m_maxHitsPerPrimInCastRay = 16;
245 protected int m_maxHitsPerObjectInCastRay = 16;
246 protected bool m_detectExitsInCastRay = false;
247 protected bool m_filterPartsInCastRay = false;
248 protected bool m_doAttachmentsInCastRay = false;
249 protected int m_msThrottleInCastRay = 200;
250 protected int m_msPerRegionInCastRay = 40;
251 protected int m_msPerAvatarInCastRay = 10;
252 protected int m_msMinInCastRay = 2;
253 protected int m_msMaxInCastRay = 40;
254 protected static List<CastRayCall> m_castRayCalls = new List<CastRayCall>();
255 protected bool m_useMeshCacheInCastRay = true;
256 protected static Dictionary<ulong, FacetedMesh> m_cachedMeshes = new Dictionary<ulong, FacetedMesh>();
257=======
125 protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = 258 protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache =
126 new Dictionary<UUID, UserInfoCacheEntry>(); 259 new Dictionary<UUID, UserInfoCacheEntry>();
127 protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. 260 protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp.
@@ -155,6 +288,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
155 {"TURNRIGHT", "Turning Right"}, 288 {"TURNRIGHT", "Turning Right"},
156 {"WALK", "Walking"} 289 {"WALK", "Walking"}
157 }; 290 };
291>>>>>>> avn/ubitvar
158 292
159 //An array of HTTP/1.1 headers that are not allowed to be used 293 //An array of HTTP/1.1 headers that are not allowed to be used
160 //as custom headers by llHTTPRequest. 294 //as custom headers by llHTTPRequest.
@@ -174,15 +308,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
174 }; 308 };
175 309
176 public void Initialize( 310 public void Initialize(
177 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle) 311 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
178 { 312 {
179 m_lastSayShoutCheck = DateTime.UtcNow; 313 m_lastSayShoutCheck = DateTime.UtcNow;
180 314
181 m_ScriptEngine = scriptEngine; 315 m_ScriptEngine = scriptEngine;
182 m_host = host; 316 m_host = host;
183 m_item = item; 317 m_item = item;
318<<<<<<< HEAD
319=======
184 m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false); 320 m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false);
185 m_coopSleepHandle = coopSleepHandle; 321 m_coopSleepHandle = coopSleepHandle;
322>>>>>>> avn/ubitvar
186 323
187 LoadConfig(); 324 LoadConfig();
188 325
@@ -199,30 +336,102 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
199 /// </summary> 336 /// </summary>
200 private void LoadConfig() 337 private void LoadConfig()
201 { 338 {
202 m_ScriptDelayFactor = 339 LlRequestAgentDataCacheTimeoutMs = 20000;
203 m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f); 340
204 m_ScriptDistanceFactor = 341 IConfig seConfig = m_ScriptEngine.Config;
205 m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f); 342
206 m_MinTimerInterval = 343 if (seConfig != null)
207 m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.5f); 344 {
208 m_automaticLinkPermission = 345 m_ScriptDelayFactor =
209 m_ScriptEngine.Config.GetBoolean("AutomaticLinkPermission", false); 346 seConfig.GetFloat("ScriptDelayFactor", m_ScriptDelayFactor);
210 m_notecardLineReadCharsMax = 347 m_ScriptDistanceFactor =
211 m_ScriptEngine.Config.GetInt("NotecardLineReadCharsMax", 255); 348 seConfig.GetFloat("ScriptDistanceLimitFactor", m_ScriptDistanceFactor);
349 m_MinTimerInterval =
350 seConfig.GetFloat("MinTimerInterval", m_MinTimerInterval);
351 m_automaticLinkPermission =
352 seConfig.GetBoolean("AutomaticLinkPermission", m_automaticLinkPermission);
353 m_notecardLineReadCharsMax =
354 seConfig.GetInt("NotecardLineReadCharsMax", m_notecardLineReadCharsMax);
355
356 // Rezzing an object with a velocity can create recoil. This feature seems to have been
357 // removed from recent versions of SL. The code computes recoil (vel*mass) and scales
358 // it by this factor. May be zero to turn off recoil all together.
359 m_recoilScaleFactor = m_ScriptEngine.Config.GetFloat("RecoilScaleFactor", m_recoilScaleFactor);
360 }
361
212 if (m_notecardLineReadCharsMax > 65535) 362 if (m_notecardLineReadCharsMax > 65535)
213 m_notecardLineReadCharsMax = 65535; 363 m_notecardLineReadCharsMax = 65535;
214 364
215 // load limits for particular subsystems. 365 // load limits for particular subsystems.
216 IConfig SMTPConfig; 366 IConfigSource seConfigSource = m_ScriptEngine.ConfigSource;
217 if ((SMTPConfig = m_ScriptEngine.ConfigSource.Configs["SMTP"]) != null) {
218 // there's an smtp config, so load in the snooze time.
219 EMAIL_PAUSE_TIME = SMTPConfig.GetInt("email_pause_time", EMAIL_PAUSE_TIME);
220 }
221 367
222 // Rezzing an object with a velocity can create recoil. This feature seems to have been 368 if (seConfigSource != null)
223 // removed from recent versions of SL. The code computes recoil (vel*mass) and scales 369 {
224 // it by this factor. May be zero to turn off recoil all together. 370 IConfig lslConfig = seConfigSource.Configs["LL-Functions"];
225 m_recoilScaleFactor = m_ScriptEngine.Config.GetFloat("RecoilScaleFactor", m_recoilScaleFactor); 371 if (lslConfig != null)
372 {
373 m_restrictEmail = lslConfig.GetBoolean("RestrictEmail", m_restrictEmail);
374 m_avatarHeightCorrection = lslConfig.GetFloat("AvatarHeightCorrection", m_avatarHeightCorrection);
375 m_useSimpleBoxesInGetBoundingBox = lslConfig.GetBoolean("UseSimpleBoxesInGetBoundingBox", m_useSimpleBoxesInGetBoundingBox);
376 m_addStatsInGetBoundingBox = lslConfig.GetBoolean("AddStatsInGetBoundingBox", m_addStatsInGetBoundingBox);
377 m_lABB1StdX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingXconst", m_lABB1StdX0);
378 m_lABB2StdX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingXconst", m_lABB2StdX0);
379 m_lABB1StdY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingYconst", m_lABB1StdY0);
380 m_lABB2StdY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingYconst", m_lABB2StdY0);
381 m_lABB1StdZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZconst", m_lABB1StdZ0);
382 m_lABB1StdZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZcoeff", m_lABB1StdZ1);
383 m_lABB2StdZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZconst", m_lABB2StdZ0);
384 m_lABB2StdZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZcoeff", m_lABB2StdZ1);
385 m_lABB1GrsX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingXconst", m_lABB1GrsX0);
386 m_lABB2GrsX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingXconst", m_lABB2GrsX0);
387 m_lABB1GrsY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingYconst", m_lABB1GrsY0);
388 m_lABB2GrsY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingYconst", m_lABB2GrsY0);
389 m_lABB1GrsZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZconst", m_lABB1GrsZ0);
390 m_lABB1GrsZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZcoeff", m_lABB1GrsZ1);
391 m_lABB2GrsZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZconst", m_lABB2GrsZ0);
392 m_lABB2GrsZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZcoeff", m_lABB2GrsZ1);
393 m_lABB1SitX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingXconst", m_lABB1SitX0);
394 m_lABB2SitX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingXconst", m_lABB2SitX0);
395 m_lABB1SitY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingYconst", m_lABB1SitY0);
396 m_lABB2SitY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingYconst", m_lABB2SitY0);
397 m_lABB1SitZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZconst", m_lABB1SitZ0);
398 m_lABB1SitZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZcoeff", m_lABB1SitZ1);
399 m_lABB2SitZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZconst", m_lABB2SitZ0);
400 m_lABB2SitZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZcoeff", m_lABB2SitZ1);
401 m_primSafetyCoeffX = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientX", m_primSafetyCoeffX);
402 m_primSafetyCoeffY = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientY", m_primSafetyCoeffY);
403 m_primSafetyCoeffZ = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientZ", m_primSafetyCoeffZ);
404 m_useCastRayV3 = lslConfig.GetBoolean("UseLlCastRayV3", m_useCastRayV3);
405 m_floatToleranceInCastRay = lslConfig.GetFloat("FloatToleranceInLlCastRay", m_floatToleranceInCastRay);
406 m_floatTolerance2InCastRay = lslConfig.GetFloat("FloatTolerance2InLlCastRay", m_floatTolerance2InCastRay);
407 m_primLodInCastRay = (DetailLevel)lslConfig.GetInt("PrimDetailLevelInLlCastRay", (int)m_primLodInCastRay);
408 m_sculptLodInCastRay = (DetailLevel)lslConfig.GetInt("SculptDetailLevelInLlCastRay", (int)m_sculptLodInCastRay);
409 m_meshLodInCastRay = (DetailLevel)lslConfig.GetInt("MeshDetailLevelInLlCastRay", (int)m_meshLodInCastRay);
410 m_avatarLodInCastRay = (DetailLevel)lslConfig.GetInt("AvatarDetailLevelInLlCastRay", (int)m_avatarLodInCastRay);
411 m_maxHitsInCastRay = lslConfig.GetInt("MaxHitsInLlCastRay", m_maxHitsInCastRay);
412 m_maxHitsPerPrimInCastRay = lslConfig.GetInt("MaxHitsPerPrimInLlCastRay", m_maxHitsPerPrimInCastRay);
413 m_maxHitsPerObjectInCastRay = lslConfig.GetInt("MaxHitsPerObjectInLlCastRay", m_maxHitsPerObjectInCastRay);
414 m_detectExitsInCastRay = lslConfig.GetBoolean("DetectExitHitsInLlCastRay", m_detectExitsInCastRay);
415 m_filterPartsInCastRay = lslConfig.GetBoolean("FilterPartsInLlCastRay", m_filterPartsInCastRay);
416 m_doAttachmentsInCastRay = lslConfig.GetBoolean("DoAttachmentsInLlCastRay", m_doAttachmentsInCastRay);
417 m_msThrottleInCastRay = lslConfig.GetInt("ThrottleTimeInMsInLlCastRay", m_msThrottleInCastRay);
418 m_msPerRegionInCastRay = lslConfig.GetInt("AvailableTimeInMsPerRegionInLlCastRay", m_msPerRegionInCastRay);
419 m_msPerAvatarInCastRay = lslConfig.GetInt("AvailableTimeInMsPerAvatarInLlCastRay", m_msPerAvatarInCastRay);
420 m_msMinInCastRay = lslConfig.GetInt("RequiredAvailableTimeInMsInLlCastRay", m_msMinInCastRay);
421 m_msMaxInCastRay = lslConfig.GetInt("MaximumAvailableTimeInMsInLlCastRay", m_msMaxInCastRay);
422 m_useMeshCacheInCastRay = lslConfig.GetBoolean("UseMeshCacheInLlCastRay", m_useMeshCacheInCastRay);
423 }
424
425 IConfig smtpConfig = seConfigSource.Configs["SMTP"];
426 if (smtpConfig != null)
427 {
428 // there's an smtp config, so load in the snooze time.
429 EMAIL_PAUSE_TIME = smtpConfig.GetInt("email_pause_time", EMAIL_PAUSE_TIME);
430
431 m_internalObjectHost = smtpConfig.GetString("internal_object_host", m_internalObjectHost);
432 }
433 }
434 m_sleepMsOnEmail = EMAIL_PAUSE_TIME * 1000;
226 } 435 }
227 436
228 public override Object InitializeLifetimeService() 437 public override Object InitializeLifetimeService()
@@ -249,21 +458,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
249 458
250 protected virtual void Sleep(int delay) 459 protected virtual void Sleep(int delay)
251 { 460 {
252 if (m_coopSleepHandle == null) 461 if (m_item == null) // Some unit tests don't set this
253 System.Threading.Thread.Sleep(delay); 462 {
254 else 463 Thread.Sleep(delay);
255 CheckForCoopTermination(delay); 464 return;
465 }
466
467 m_ScriptEngine.SleepScript(m_item.ItemID, delay);
256 } 468 }
257 469
258 /// <summary> 470 /// <summary>
259 /// Check for co-operative termination. 471 /// Check for co-operative termination.
260 /// </summary> 472 /// </summary>
261 /// <param name='delay'>If called with 0, then just the check is performed with no wait.</param> 473 /// <param name='delay'>If called with 0, then just the check is performed with no wait.</param>
262 protected virtual void CheckForCoopTermination(int delay)
263 {
264 if (m_coopSleepHandle.WaitOne(delay))
265 throw new ScriptCoopStopException();
266 }
267 474
268 public Scene World 475 public Scene World
269 { 476 {
@@ -302,7 +509,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
302 if ((item = GetScriptByName(name)) != UUID.Zero) 509 if ((item = GetScriptByName(name)) != UUID.Zero)
303 m_ScriptEngine.ResetScript(item); 510 m_ScriptEngine.ResetScript(item);
304 else 511 else
305 ShoutError("llResetOtherScript: script "+name+" not found"); 512 Error("llResetOtherScript", "Can't find script '" + name + "'");
306 } 513 }
307 514
308 public LSL_Integer llGetScriptState(string name) 515 public LSL_Integer llGetScriptState(string name)
@@ -316,7 +523,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
316 return m_ScriptEngine.GetScriptState(item) ?1:0; 523 return m_ScriptEngine.GetScriptState(item) ?1:0;
317 } 524 }
318 525
319 ShoutError("llGetScriptState: script "+name+" not found"); 526 Error("llGetScriptState", "Can't find script '" + name + "'");
320 527
321 // If we didn't find it, then it's safe to 528 // If we didn't find it, then it's safe to
322 // assume it is not running. 529 // assume it is not running.
@@ -339,7 +546,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
339 } 546 }
340 else 547 else
341 { 548 {
342 ShoutError("llSetScriptState: script "+name+" not found"); 549 Error("llSetScriptState", "Can't find script '" + name + "'");
343 } 550 }
344 } 551 }
345 552
@@ -405,6 +612,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
405 /// <returns> 612 /// <returns>
406 /// The link entity. null if not found. 613 /// The link entity. null if not found.
407 /// </returns> 614 /// </returns>
615 /// <param name='part'></param>
408 /// <param name='linknum'> 616 /// <param name='linknum'>
409 /// Can be either a non-negative integer or ScriptBaseClass.LINK_THIS (-4). 617 /// Can be either a non-negative integer or ScriptBaseClass.LINK_THIS (-4).
410 /// If ScriptBaseClass.LINK_THIS then the entity containing the script is returned. 618 /// If ScriptBaseClass.LINK_THIS then the entity containing the script is returned.
@@ -415,26 +623,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
415 /// Otherwise, if a positive linknum is given which is greater than the number of entities in the linkset, then 623 /// Otherwise, if a positive linknum is given which is greater than the number of entities in the linkset, then
416 /// null is returned. 624 /// null is returned.
417 /// </param> 625 /// </param>
418 public ISceneEntity GetLinkEntity(int linknum) 626 public ISceneEntity GetLinkEntity(SceneObjectPart part, int linknum)
419 { 627 {
420 if (linknum < 0) 628 if (linknum < 0)
421 { 629 {
422 if (linknum == ScriptBaseClass.LINK_THIS) 630 if (linknum == ScriptBaseClass.LINK_THIS)
423 return m_host; 631 return part;
424 else 632 else
425 return null; 633 return null;
426 } 634 }
427 635
428 int actualPrimCount = m_host.ParentGroup.PrimCount; 636 int actualPrimCount = part.ParentGroup.PrimCount;
429 List<UUID> sittingAvatarIds = m_host.ParentGroup.GetSittingAvatars(); 637 List<ScenePresence> sittingAvatars = part.ParentGroup.GetSittingAvatars();
430 int adjustedPrimCount = actualPrimCount + sittingAvatarIds.Count; 638 int adjustedPrimCount = actualPrimCount + sittingAvatars.Count;
431 639
432 // Special case for a single prim. In this case the linknum is zero. However, this will not match a single 640 // Special case for a single prim. In this case the linknum is zero. However, this will not match a single
433 // prim that has any avatars sat upon it (in which case the root prim is link 1). 641 // prim that has any avatars sat upon it (in which case the root prim is link 1).
434 if (linknum == 0) 642 if (linknum == 0)
435 { 643 {
436 if (actualPrimCount == 1 && sittingAvatarIds.Count == 0) 644 if (actualPrimCount == 1 && sittingAvatars.Count == 0)
437 return m_host; 645 return part;
438 646
439 return null; 647 return null;
440 } 648 }
@@ -442,8 +650,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
442 // here we must match 1 (ScriptBaseClass.LINK_ROOT). 650 // here we must match 1 (ScriptBaseClass.LINK_ROOT).
443 else if (linknum == ScriptBaseClass.LINK_ROOT && actualPrimCount == 1) 651 else if (linknum == ScriptBaseClass.LINK_ROOT && actualPrimCount == 1)
444 { 652 {
445 if (sittingAvatarIds.Count > 0) 653 if (sittingAvatars.Count > 0)
446 return m_host.ParentGroup.RootPart; 654 return part.ParentGroup.RootPart;
447 else 655 else
448 return null; 656 return null;
449 } 657 }
@@ -451,15 +659,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
451 { 659 {
452 if (linknum <= actualPrimCount) 660 if (linknum <= actualPrimCount)
453 { 661 {
454 return m_host.ParentGroup.GetLinkNumPart(linknum); 662 return part.ParentGroup.GetLinkNumPart(linknum);
455 } 663 }
456 else 664 else
457 { 665 {
458 ScenePresence sp = World.GetScenePresence(sittingAvatarIds[linknum - actualPrimCount - 1]); 666 return sittingAvatars[linknum - actualPrimCount - 1];
459 if (sp != null)
460 return sp;
461 else
462 return null;
463 } 667 }
464 } 668 }
465 else 669 else
@@ -521,6 +725,54 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
521 } 725 }
522 } 726 }
523 727
728 public List<ISceneEntity> GetLinkEntities(int linkType)
729 {
730 return GetLinkEntities(m_host, linkType);
731 }
732
733 public List<ISceneEntity> GetLinkEntities(SceneObjectPart part, int linkType)
734 {
735 List<ISceneEntity> ret;
736
737 switch (linkType)
738 {
739 case ScriptBaseClass.LINK_SET:
740 return new List<ISceneEntity>(part.ParentGroup.Parts);
741
742 case ScriptBaseClass.LINK_ROOT:
743 return new List<ISceneEntity>() { part.ParentGroup.RootPart };
744
745 case ScriptBaseClass.LINK_ALL_OTHERS:
746 ret = new List<ISceneEntity>(part.ParentGroup.Parts);
747
748 if (ret.Contains(part))
749 ret.Remove(part);
750
751 return ret;
752
753 case ScriptBaseClass.LINK_ALL_CHILDREN:
754 ret = new List<ISceneEntity>(part.ParentGroup.Parts);
755
756 if (ret.Contains(part.ParentGroup.RootPart))
757 ret.Remove(part.ParentGroup.RootPart);
758
759 return ret;
760
761 case ScriptBaseClass.LINK_THIS:
762 return new List<ISceneEntity>() { part };
763
764 default:
765 if (linkType < 0)
766 return new List<ISceneEntity>();
767
768 ISceneEntity target = GetLinkEntity(part, linkType);
769 if (target == null)
770 return new List<ISceneEntity>();
771
772 return new List<ISceneEntity>() { target };
773 }
774 }
775
524 //These are the implementations of the various ll-functions used by the LSL scripts. 776 //These are the implementations of the various ll-functions used by the LSL scripts.
525 public LSL_Float llSin(double f) 777 public LSL_Float llSin(double f)
526 { 778 {
@@ -577,10 +829,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
577 public LSL_Float llFrand(double mag) 829 public LSL_Float llFrand(double mag)
578 { 830 {
579 m_host.AddScriptLPS(1); 831 m_host.AddScriptLPS(1);
580 lock (Util.RandomClass) 832
581 { 833 return Util.RandomClass.NextDouble() * mag;
582 return Util.RandomClass.NextDouble() * mag;
583 }
584 } 834 }
585 835
586 public LSL_Integer llFloor(double f) 836 public LSL_Integer llFloor(double f)
@@ -1032,7 +1282,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1032 { 1282 {
1033 if (channelID == 0) 1283 if (channelID == 0)
1034 { 1284 {
1035 LSLError("Cannot use llRegionSay() on channel 0"); 1285 Error("llRegionSay", "Cannot use on channel 0");
1036 return; 1286 return;
1037 } 1287 }
1038 1288
@@ -1041,6 +1291,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1041 1291
1042 m_host.AddScriptLPS(1); 1292 m_host.AddScriptLPS(1);
1043 1293
1294 World.SimChat(Utils.StringToBytes(text),
1295 ChatTypeEnum.Region, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false);
1296
1044 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 1297 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
1045 if (wComm != null) 1298 if (wComm != null)
1046 wComm.DeliverMessage(ChatTypeEnum.Region, channelID, m_host.Name, m_host.UUID, text); 1299 wComm.DeliverMessage(ChatTypeEnum.Region, channelID, m_host.Name, m_host.UUID, text);
@@ -1058,6 +1311,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1058 UUID TargetID; 1311 UUID TargetID;
1059 UUID.TryParse(target, out TargetID); 1312 UUID.TryParse(target, out TargetID);
1060 1313
1314 World.SimChatToAgent(TargetID, Utils.StringToBytes(msg),
1315 channel, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true);
1316
1061 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 1317 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
1062 if (wComm != null) 1318 if (wComm != null)
1063 if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error)) 1319 if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error))
@@ -1466,12 +1722,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1466 } 1722 }
1467 1723
1468 if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) 1724 if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB)
1469 { 1725 m_host.BlockGrab = value != 0;
1470 if (value != 0) 1726
1471 m_host.SetBlockGrab(true); 1727 if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT) == ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT)
1472 else 1728 m_host.ParentGroup.BlockGrabOverride = value != 0;
1473 m_host.SetBlockGrab(false);
1474 }
1475 1729
1476 if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) 1730 if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE)
1477 { 1731 {
@@ -1532,10 +1786,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1532 return 0; 1786 return 0;
1533 1787
1534 case ScriptBaseClass.STATUS_BLOCK_GRAB: 1788 case ScriptBaseClass.STATUS_BLOCK_GRAB:
1535 if (m_host.GetBlockGrab()) 1789 return m_host.BlockGrab ? 1 : 0;
1536 return 1; 1790
1537 else 1791 case ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT:
1538 return 0; 1792 return m_host.ParentGroup.BlockGrabOverride ? 1 : 0;
1539 1793
1540 case ScriptBaseClass.STATUS_DIE_AT_EDGE: 1794 case ScriptBaseClass.STATUS_DIE_AT_EDGE:
1541 if (m_host.GetDieAtEdge()) 1795 if (m_host.GetDieAtEdge())
@@ -2047,9 +2301,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2047 part.Shape.LightColorR = Util.Clip((float)color.x, 0.0f, 1.0f); 2301 part.Shape.LightColorR = Util.Clip((float)color.x, 0.0f, 1.0f);
2048 part.Shape.LightColorG = Util.Clip((float)color.y, 0.0f, 1.0f); 2302 part.Shape.LightColorG = Util.Clip((float)color.y, 0.0f, 1.0f);
2049 part.Shape.LightColorB = Util.Clip((float)color.z, 0.0f, 1.0f); 2303 part.Shape.LightColorB = Util.Clip((float)color.z, 0.0f, 1.0f);
2050 part.Shape.LightIntensity = intensity; 2304 part.Shape.LightIntensity = Util.Clip((float)intensity, 0.0f, 1.0f);
2051 part.Shape.LightRadius = radius; 2305 part.Shape.LightRadius = Util.Clip((float)radius, 0.1f, 20.0f);
2052 part.Shape.LightFalloff = falloff; 2306 part.Shape.LightFalloff = Util.Clip((float)falloff, 0.01f, 2.0f);
2053 } 2307 }
2054 else 2308 else
2055 { 2309 {
@@ -2111,7 +2365,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2111 { 2365 {
2112 m_host.AddScriptLPS(1); 2366 m_host.AddScriptLPS(1);
2113 SetTexture(m_host, texture, face); 2367 SetTexture(m_host, texture, face);
2114 ScriptSleep(200); 2368 ScriptSleep(m_sleepMsOnSetTexture);
2115 } 2369 }
2116 2370
2117 public void llSetLinkTexture(int linknumber, string texture, int face) 2371 public void llSetLinkTexture(int linknumber, string texture, int face)
@@ -2119,6 +2373,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2119 m_host.AddScriptLPS(1); 2373 m_host.AddScriptLPS(1);
2120 2374
2121 List<SceneObjectPart> parts = GetLinkParts(linknumber); 2375 List<SceneObjectPart> parts = GetLinkParts(linknumber);
2376<<<<<<< HEAD
2377
2378 foreach (SceneObjectPart part in parts)
2379 SetTexture(part, texture, face);
2380
2381 ScriptSleep(m_sleepMsOnSetLinkTexture);
2382=======
2122 if (parts.Count > 0) 2383 if (parts.Count > 0)
2123 { 2384 {
2124 try 2385 try
@@ -2131,6 +2392,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2131 } 2392 }
2132 } 2393 }
2133 ScriptSleep(200); 2394 ScriptSleep(200);
2395>>>>>>> avn/ubitvar
2134 } 2396 }
2135 2397
2136 protected void SetTexture(SceneObjectPart part, string texture, int face) 2398 protected void SetTexture(SceneObjectPart part, string texture, int face)
@@ -2177,7 +2439,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2177 m_host.AddScriptLPS(1); 2439 m_host.AddScriptLPS(1);
2178 2440
2179 ScaleTexture(m_host, u, v, face); 2441 ScaleTexture(m_host, u, v, face);
2180 ScriptSleep(200); 2442 ScriptSleep(m_sleepMsOnScaleTexture);
2181 } 2443 }
2182 2444
2183 protected void ScaleTexture(SceneObjectPart part, double u, double v, int face) 2445 protected void ScaleTexture(SceneObjectPart part, double u, double v, int face)
@@ -2216,7 +2478,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2216 { 2478 {
2217 m_host.AddScriptLPS(1); 2479 m_host.AddScriptLPS(1);
2218 OffsetTexture(m_host, u, v, face); 2480 OffsetTexture(m_host, u, v, face);
2219 ScriptSleep(200); 2481 ScriptSleep(m_sleepMsOnOffsetTexture);
2220 } 2482 }
2221 2483
2222 protected void OffsetTexture(SceneObjectPart part, double u, double v, int face) 2484 protected void OffsetTexture(SceneObjectPart part, double u, double v, int face)
@@ -2255,7 +2517,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2255 { 2517 {
2256 m_host.AddScriptLPS(1); 2518 m_host.AddScriptLPS(1);
2257 RotateTexture(m_host, rotation, face); 2519 RotateTexture(m_host, rotation, face);
2258 ScriptSleep(200); 2520 ScriptSleep(m_sleepMsOnRotateTexture);
2259 } 2521 }
2260 2522
2261 protected void RotateTexture(SceneObjectPart part, double rotation, int face) 2523 protected void RotateTexture(SceneObjectPart part, double rotation, int face)
@@ -2333,7 +2595,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2333 2595
2334 SetPos(m_host, pos, true); 2596 SetPos(m_host, pos, true);
2335 2597
2336 ScriptSleep(200); 2598 ScriptSleep(m_sleepMsOnSetPos);
2337 } 2599 }
2338 2600
2339 /// <summary> 2601 /// <summary>
@@ -2521,14 +2783,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2521 } 2783 }
2522 } 2784 }
2523 2785
2524 ScriptSleep(200); 2786 ScriptSleep(m_sleepMsOnSetRot);
2525 } 2787 }
2526 2788
2527 public void llSetLocalRot(LSL_Rotation rot) 2789 public void llSetLocalRot(LSL_Rotation rot)
2528 { 2790 {
2529 m_host.AddScriptLPS(1); 2791 m_host.AddScriptLPS(1);
2530 SetRot(m_host, rot); 2792 SetRot(m_host, rot);
2531 ScriptSleep(200); 2793 ScriptSleep(m_sleepMsOnSetLocalRot);
2532 } 2794 }
2533 2795
2534 protected void SetRot(SceneObjectPart part, Quaternion rot) 2796 protected void SetRot(SceneObjectPart part, Quaternion rot)
@@ -2776,8 +3038,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2776 if (m_host.ParentGroup.IsAttachment) 3038 if (m_host.ParentGroup.IsAttachment)
2777 { 3039 {
2778 ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); 3040 ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar);
3041<<<<<<< HEAD
3042 vel = avatar.GetWorldVelocity();
3043=======
2779 if (avatar != null) 3044 if (avatar != null)
2780 vel = avatar.Velocity; 3045 vel = avatar.Velocity;
3046>>>>>>> avn/ubitvar
2781 } 3047 }
2782 else 3048 else
2783 { 3049 {
@@ -2843,9 +3109,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2843 public void llSound(string sound, double volume, int queue, int loop) 3109 public void llSound(string sound, double volume, int queue, int loop)
2844 { 3110 {
2845 m_host.AddScriptLPS(1); 3111 m_host.AddScriptLPS(1);
2846 // This function has been deprecated 3112 Deprecated("llSound", "Use llPlaySound instead");
2847 // see http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSound
2848 Deprecated("llSound");
2849 } 3113 }
2850 3114
2851 // Xantor 20080528 PlaySound updated so it accepts an objectinventory name -or- a key to a sound 3115 // Xantor 20080528 PlaySound updated so it accepts an objectinventory name -or- a key to a sound
@@ -2933,7 +3197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2933 m_host.AddScriptLPS(1); 3197 m_host.AddScriptLPS(1);
2934 if (m_SoundModule != null) 3198 if (m_SoundModule != null)
2935 m_SoundModule.PreloadSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), 0); 3199 m_SoundModule.PreloadSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), 0);
2936 ScriptSleep(1000); 3200 ScriptSleep(m_sleepMsOnPreloadSound);
2937 } 3201 }
2938 3202
2939 /// <summary> 3203 /// <summary>
@@ -3177,7 +3441,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3177 3441
3178 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) 3442 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0)
3179 { 3443 {
3180 LSLError("No permissions to give money"); 3444 Error("llGiveMoney", "No permissions to give money");
3181 return; 3445 return;
3182 } 3446 }
3183 3447
@@ -3185,7 +3449,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3185 3449
3186 if (!UUID.TryParse(destination, out toID)) 3450 if (!UUID.TryParse(destination, out toID))
3187 { 3451 {
3188 LSLError("Bad key in llGiveMoney"); 3452 Error("llGiveMoney", "Bad key in llGiveMoney");
3189 return; 3453 return;
3190 } 3454 }
3191 3455
@@ -3199,38 +3463,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3199 3463
3200 string reason; 3464 string reason;
3201 money.ObjectGiveMoney( 3465 money.ObjectGiveMoney(
3466<<<<<<< HEAD
3467 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount);
3468 }, null, "LSL_Api.llGiveMoney");
3469=======
3202 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason); 3470 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason);
3203 }); 3471 });
3204 3472
3205 return 0; 3473 return 0;
3474>>>>>>> avn/ubitvar
3206 } 3475 }
3207 3476
3208 public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) 3477 public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset)
3209 { 3478 {
3210 m_host.AddScriptLPS(1); 3479 m_host.AddScriptLPS(1);
3211 Deprecated("llMakeExplosion"); 3480 Deprecated("llMakeExplosion", "Use llParticleSystem instead");
3212 ScriptSleep(100); 3481 ScriptSleep(m_sleepMsOnMakeExplosion);
3213 } 3482 }
3214 3483
3215 public void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset) 3484 public void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset)
3216 { 3485 {
3217 m_host.AddScriptLPS(1); 3486 m_host.AddScriptLPS(1);
3218 Deprecated("llMakeFountain"); 3487 Deprecated("llMakeFountain", "Use llParticleSystem instead");
3219 ScriptSleep(100); 3488 ScriptSleep(m_sleepMsOnMakeFountain);
3220 } 3489 }
3221 3490
3222 public void llMakeSmoke(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) 3491 public void llMakeSmoke(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset)
3223 { 3492 {
3224 m_host.AddScriptLPS(1); 3493 m_host.AddScriptLPS(1);
3225 Deprecated("llMakeSmoke"); 3494 Deprecated("llMakeSmoke", "Use llParticleSystem instead");
3226 ScriptSleep(100); 3495 ScriptSleep(m_sleepMsOnMakeSmoke);
3227 } 3496 }
3228 3497
3229 public void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) 3498 public void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset)
3230 { 3499 {
3231 m_host.AddScriptLPS(1); 3500 m_host.AddScriptLPS(1);
3232 Deprecated("llMakeFire"); 3501 Deprecated("llMakeFire", "Use llParticleSystem instead");
3233 ScriptSleep(100); 3502 ScriptSleep(m_sleepMsOnMakeFire);
3234 } 3503 }
3235 3504
3236 public void llRezAtRoot(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) 3505 public void llRezAtRoot(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param)
@@ -3256,13 +3525,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3256 3525
3257 if (item == null) 3526 if (item == null)
3258 { 3527 {
3259 llSay(0, "Could not find object " + inventory); 3528 Error("llRezAtRoot", "Can't find object '" + inventory + "'");
3260 return; 3529 return;
3261 } 3530 }
3262 3531
3263 if (item.InvType != (int)InventoryType.Object) 3532 if (item.InvType != (int)InventoryType.Object)
3264 { 3533 {
3265 llSay(0, "Unable to create requested object. Object is missing from database."); 3534 Error("llRezAtRoot", "Can't create requested object; object is missing from database");
3266 return; 3535 return;
3267 } 3536 }
3268 3537
@@ -3305,11 +3574,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3305 } 3574 }
3306 // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) 3575 // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay)
3307 } 3576 }
3577<<<<<<< HEAD
3578 }, null, "LSL_Api.llRezAtRoot");
3579=======
3308 return; 3580 return;
3309 }); 3581 });
3582>>>>>>> avn/ubitvar
3310 3583
3311 //ScriptSleep((int)((groupmass * velmag) / 10)); 3584 //ScriptSleep((int)((groupmass * velmag) / 10));
3312 ScriptSleep(100); 3585 ScriptSleep(m_sleepMsOnRezAtRoot);
3313 } 3586 }
3314 3587
3315 public void llRezObject(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) 3588 public void llRezObject(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param)
@@ -3321,6 +3594,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3321 { 3594 {
3322 m_host.AddScriptLPS(1); 3595 m_host.AddScriptLPS(1);
3323 3596
3597<<<<<<< HEAD
3598 // normalized direction to target
3599 LSL_Vector dir = llVecNorm(target - from);
3600 // use vertical to help compute left axis
3601 LSL_Vector up = new LSL_Vector(0.0, 0.0, 1.0);
3602 // find normalized left axis parallel to horizon
3603 LSL_Vector left = llVecNorm(LSL_Vector.Cross(up, dir));
3604 // make up orthogonal to left and dir
3605 up = LSL_Vector.Cross(dir, left);
3606
3607 // compute rotation based on orthogonal axes
3608 LSL_Rotation rot = new LSL_Rotation(0.0, 0.707107, 0.0, 0.707107) * llAxes2Rot(dir, left, up);
3609
3610 // Per discussion with Melanie, for non-physical objects llLookAt appears to simply
3611 // set the rotation of the object, copy that behavior
3612 PhysicsActor pa = m_host.PhysActor;
3613
3614 if (m_host.ParentGroup.IsAttachment || strength == 0 || pa == null || !pa.IsPhysical)
3615=======
3324 // Get the normalized vector to the target 3616 // Get the normalized vector to the target
3325 LSL_Vector d1 = llVecNorm(target - llGetPos()); 3617 LSL_Vector d1 = llVecNorm(target - llGetPos());
3326 3618
@@ -3337,6 +3629,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3337 LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107); 3629 LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107);
3338 3630
3339 if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical) 3631 if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical)
3632>>>>>>> avn/ubitvar
3340 { 3633 {
3341 // Do nothing if either value is 0 (this has been checked in SL) 3634 // Do nothing if either value is 0 (this has been checked in SL)
3342 if (strength <= 0.0 || damping <= 0.0) 3635 if (strength <= 0.0 || damping <= 0.0)
@@ -3359,7 +3652,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3359 public void llStopLookAt() 3652 public void llStopLookAt()
3360 { 3653 {
3361 m_host.AddScriptLPS(1); 3654 m_host.AddScriptLPS(1);
3362// NotImplemented("llStopLookAt");
3363 m_host.StopLookAt(); 3655 m_host.StopLookAt();
3364 } 3656 }
3365 3657
@@ -3411,10 +3703,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3411 } 3703 }
3412 } 3704 }
3413 3705
3706<<<<<<< HEAD
3707 public LSL_Float llGetMassMKS()
3708 {
3709 // this is what the wiki says it does!
3710 // http://wiki.secondlife.com/wiki/LlGetMassMKS
3711 return llGetMass() * 100.0;
3712=======
3414 3713
3415 public LSL_Float llGetMassMKS() 3714 public LSL_Float llGetMassMKS()
3416 { 3715 {
3417 return 100f * llGetMass(); 3716 return 100f * llGetMass();
3717>>>>>>> avn/ubitvar
3418 } 3718 }
3419 3719
3420 public void llCollisionFilter(string name, string id, int accept) 3720 public void llCollisionFilter(string name, string id, int accept)
@@ -3504,7 +3804,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3504 /// </remarks> 3804 /// </remarks>
3505 public void DetachFromAvatar() 3805 public void DetachFromAvatar()
3506 { 3806 {
3507 Util.FireAndForget(DetachWrapper, m_host); 3807 Util.FireAndForget(DetachWrapper, m_host, "LSL_Api.DetachFromAvatar");
3508 } 3808 }
3509 3809
3510 private void DetachWrapper(object o) 3810 private void DetachWrapper(object o)
@@ -3545,13 +3845,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3545 public void llTakeCamera(string avatar) 3845 public void llTakeCamera(string avatar)
3546 { 3846 {
3547 m_host.AddScriptLPS(1); 3847 m_host.AddScriptLPS(1);
3548 Deprecated("llTakeCamera"); 3848 Deprecated("llTakeCamera", "Use llSetCameraParams instead");
3549 } 3849 }
3550 3850
3551 public void llReleaseCamera(string avatar) 3851 public void llReleaseCamera(string avatar)
3552 { 3852 {
3553 m_host.AddScriptLPS(1); 3853 m_host.AddScriptLPS(1);
3554 Deprecated("llReleaseCamera"); 3854 Deprecated("llReleaseCamera", "Use llClearCameraParams instead");
3555 } 3855 }
3556 3856
3557 public LSL_String llGetOwner() 3857 public LSL_String llGetOwner()
@@ -3583,14 +3883,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3583 3883
3584 // TODO: figure out values for client, fromSession, and imSessionID 3884 // TODO: figure out values for client, fromSession, and imSessionID
3585 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); 3885 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch());
3886<<<<<<< HEAD
3887
3888=======
3586 UUID friendTransactionID = UUID.Random(); 3889 UUID friendTransactionID = UUID.Random();
3587 3890
3588 //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); 3891 //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
3589 3892
3893>>>>>>> avn/ubitvar
3590 GridInstantMessage msg = new GridInstantMessage(); 3894 GridInstantMessage msg = new GridInstantMessage();
3591 msg.fromAgentID = new Guid(m_host.UUID.ToString()); // fromAgentID.Guid; 3895 msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid;
3592 msg.toAgentID = new Guid(user); // toAgentID.Guid; 3896 msg.toAgentID = new Guid(user); // toAgentID.Guid;
3593 msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here 3897 msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here
3594// m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); 3898// m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message);
3595// m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); 3899// m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString());
3596// DateTime dt = DateTime.UtcNow; 3900// DateTime dt = DateTime.UtcNow;
@@ -3648,7 +3952,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3648 m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); 3952 m_TransferModule.SendInstantMessage(msg, delegate(bool success) {});
3649 } 3953 }
3650 3954
3651 ScriptSleep(2000); 3955 ScriptSleep(m_sleepMsOnInstantMessage);
3652 } 3956 }
3653 3957
3654 public void llEmail(string address, string subject, string message) 3958 public void llEmail(string address, string subject, string message)
@@ -3657,12 +3961,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3657 IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>(); 3961 IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>();
3658 if (emailModule == null) 3962 if (emailModule == null)
3659 { 3963 {
3660 ShoutError("llEmail: email module not configured"); 3964 Error("llEmail", "Email module not configured");
3661 return; 3965 return;
3662 } 3966 }
3663 3967
3968 //Restrict email destination to the avatars registered email address?
3969 //The restriction only applies if the destination address is not local.
3970 if (m_restrictEmail == true && address.Contains(m_internalObjectHost) == false)
3971 {
3972 UserAccount account =
3973 World.UserAccountService.GetUserAccount(
3974 World.RegionInfo.ScopeID,
3975 m_host.OwnerID);
3976
3977 if (account == null)
3978 {
3979 Error("llEmail", "Can't find user account for '" + m_host.OwnerID.ToString() + "'");
3980 return;
3981 }
3982
3983 if (String.IsNullOrEmpty(account.Email))
3984 {
3985 Error("llEmail", "User account has not registered an email address.");
3986 return;
3987 }
3988
3989 address = account.Email;
3990 }
3991
3664 emailModule.SendEmail(m_host.UUID, address, subject, message); 3992 emailModule.SendEmail(m_host.UUID, address, subject, message);
3665 ScriptSleep(EMAIL_PAUSE_TIME * 1000); 3993 ScriptSleep(m_sleepMsOnEmail);
3666 } 3994 }
3667 3995
3668 public void llGetNextEmail(string address, string subject) 3996 public void llGetNextEmail(string address, string subject)
@@ -3671,7 +3999,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3671 IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>(); 3999 IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>();
3672 if (emailModule == null) 4000 if (emailModule == null)
3673 { 4001 {
3674 ShoutError("llGetNextEmail: email module not configured"); 4002 Error("llGetNextEmail", "Email module not configured");
3675 return; 4003 return;
3676 } 4004 }
3677 Email email; 4005 Email email;
@@ -3756,17 +4084,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3756 catch (NotImplementedException) 4084 catch (NotImplementedException)
3757 { 4085 {
3758 // Currently not implemented in DotNetEngine only XEngine 4086 // Currently not implemented in DotNetEngine only XEngine
3759 NotImplemented("llMinEventDelay in DotNetEngine"); 4087 NotImplemented("llMinEventDelay", "In DotNetEngine");
3760 } 4088 }
3761 } 4089 }
3762 4090
3763 /// <summary>
3764 /// llSoundPreload is deprecated. In SL this appears to do absolutely nothing
3765 /// and is documented to have no delay.
3766 /// </summary>
3767 public void llSoundPreload(string sound) 4091 public void llSoundPreload(string sound)
3768 { 4092 {
3769 m_host.AddScriptLPS(1); 4093 m_host.AddScriptLPS(1);
4094 Deprecated("llSoundPreload", "Use llPreloadSound instead");
3770 } 4095 }
3771 4096
3772 public void llRotLookAt(LSL_Rotation target, double strength, double damping) 4097 public void llRotLookAt(LSL_Rotation target, double strength, double damping)
@@ -3864,6 +4189,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3864 4189
3865 protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain) 4190 protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain)
3866 { 4191 {
4192 PhysicsActor pa = part.PhysActor;
4193 if ( ( pa == null || !pa.IsPhysical ) && gain == 0.0d )
4194 spinrate = 0.0d;
3867 part.UpdateAngularVelocity(axis * spinrate); 4195 part.UpdateAngularVelocity(axis * spinrate);
3868 } 4196 }
3869 4197
@@ -3909,13 +4237,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3909 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 4237 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3910 ScriptBaseClass.PERMISSION_CONTROL_CAMERA | 4238 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3911 ScriptBaseClass.PERMISSION_TRACK_CAMERA | 4239 ScriptBaseClass.PERMISSION_TRACK_CAMERA |
4240<<<<<<< HEAD
4241 ScriptBaseClass.PERMISSION_ATTACH;
4242=======
3912 ScriptBaseClass.PERMISSION_ATTACH | 4243 ScriptBaseClass.PERMISSION_ATTACH |
3913 ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS; 4244 ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS;
3914 4245
4246>>>>>>> avn/ubitvar
3915 } 4247 }
3916 else 4248 else
3917 { 4249 {
3918 if (m_host.ParentGroup.GetSittingAvatars().Contains(agentID)) 4250 if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null)
3919 { 4251 {
3920 // When agent is sitting, certain permissions are implicit if requested from sitting agent 4252 // When agent is sitting, certain permissions are implicit if requested from sitting agent
3921 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 4253 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
@@ -3950,10 +4282,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3950 } 4282 }
3951 4283
3952 ScenePresence presence = World.GetScenePresence(agentID); 4284 ScenePresence presence = World.GetScenePresence(agentID);
4285
3953 if (presence != null) 4286 if (presence != null)
3954 { 4287 {
3955 // If permissions are being requested from an NPC and were not implicitly granted above then 4288 // If permissions are being requested from an NPC and were not implicitly granted above then
3956 // auto grant all reuqested permissions if the script is owned by the NPC or the NPCs owner 4289 // auto grant all requested permissions if the script is owned by the NPC or the NPCs owner
3957 INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); 4290 INPCModule npcModule = World.RequestModuleInterface<INPCModule>();
3958 if (npcModule != null && npcModule.IsNPC(agentID, World)) 4291 if (npcModule != null && npcModule.IsNPC(agentID, World))
3959 { 4292 {
@@ -4076,23 +4409,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4076 public void llCreateLink(string target, int parent) 4409 public void llCreateLink(string target, int parent)
4077 { 4410 {
4078 m_host.AddScriptLPS(1); 4411 m_host.AddScriptLPS(1);
4412<<<<<<< HEAD
4413=======
4079 4414
4080 UUID targetID; 4415 UUID targetID;
4081 4416
4082 if (!UUID.TryParse(target, out targetID)) 4417 if (!UUID.TryParse(target, out targetID))
4083 return; 4418 return;
4419>>>>>>> avn/ubitvar
4084 4420
4085 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 4421 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
4086 && !m_automaticLinkPermission) 4422 && !m_automaticLinkPermission)
4087 { 4423 {
4088 ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); 4424 Error("llCreateLink", "PERMISSION_CHANGE_LINKS permission not set");
4089 return; 4425 return;
4090 } 4426 }
4091 4427
4092 IClientAPI client = null; 4428 CreateLink(target, parent);
4093 ScenePresence sp = World.GetScenePresence(m_item.PermsGranter); 4429 }
4094 if (sp != null) 4430
4095 client = sp.ControllingClient; 4431 public void CreateLink(string target, int parent)
4432 {
4433 UUID targetID;
4434
4435 if (!UUID.TryParse(target, out targetID))
4436 return;
4096 4437
4097 SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)targetID); 4438 SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)targetID);
4098 4439
@@ -4127,10 +4468,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4127 parentPrim.HasGroupChanged = true; 4468 parentPrim.HasGroupChanged = true;
4128 parentPrim.ScheduleGroupForFullUpdate(); 4469 parentPrim.ScheduleGroupForFullUpdate();
4129 4470
4471 IClientAPI client = null;
4472 ScenePresence sp = World.GetScenePresence(m_host.OwnerID);
4473 if (sp != null)
4474 client = sp.ControllingClient;
4475
4130 if (client != null) 4476 if (client != null)
4131 parentPrim.SendPropertiesToClient(client); 4477 parentPrim.SendPropertiesToClient(client);
4132 4478
4133 ScriptSleep(1000); 4479 ScriptSleep(m_sleepMsOnCreateLink);
4134 } 4480 }
4135 4481
4136 public void llBreakLink(int linknum) 4482 public void llBreakLink(int linknum)
@@ -4140,10 +4486,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4140 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 4486 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
4141 && !m_automaticLinkPermission) 4487 && !m_automaticLinkPermission)
4142 { 4488 {
4143 ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); 4489 Error("llBreakLink", "PERMISSION_CHANGE_LINKS permission not set");
4144 return; 4490 return;
4145 } 4491 }
4146 4492
4493 BreakLink(linknum);
4494 }
4495
4496 public void BreakLink(int linknum)
4497 {
4147 if (linknum < ScriptBaseClass.LINK_THIS) 4498 if (linknum < ScriptBaseClass.LINK_THIS)
4148 return; 4499 return;
4149 4500
@@ -4238,6 +4589,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4238 { 4589 {
4239 m_host.AddScriptLPS(1); 4590 m_host.AddScriptLPS(1);
4240 4591
4592<<<<<<< HEAD
4593 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
4594 && !m_automaticLinkPermission)
4595 {
4596 Error("llBreakAllLinks", "PERMISSION_CHANGE_LINKS permission not set");
4597 return;
4598 }
4599
4600 BreakAllLinks();
4601 }
4602
4603 public void BreakAllLinks()
4604 {
4605=======
4241 TaskInventoryItem item = m_item; 4606 TaskInventoryItem item = m_item;
4242 4607
4243 if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 4608 if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
@@ -4247,6 +4612,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4247 return; 4612 return;
4248 } 4613 }
4249 4614
4615>>>>>>> avn/ubitvar
4250 SceneObjectGroup parentPrim = m_host.ParentGroup; 4616 SceneObjectGroup parentPrim = m_host.ParentGroup;
4251 if (parentPrim.AttachmentPoint != 0) 4617 if (parentPrim.AttachmentPoint != 0)
4252 return; // Fail silently if attached 4618 return; // Fail silently if attached
@@ -4277,8 +4643,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4277 { 4643 {
4278 linknum -= (m_host.ParentGroup.PrimCount) + 1; 4644 linknum -= (m_host.ParentGroup.PrimCount) + 1;
4279 4645
4646<<<<<<< HEAD
4647 ISceneEntity entity = GetLinkEntity(m_host, linknum);
4648=======
4280 if (linknum < 0) 4649 if (linknum < 0)
4281 return UUID.Zero.ToString(); 4650 return UUID.Zero.ToString();
4651>>>>>>> avn/ubitvar
4282 4652
4283 List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET); 4653 List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET);
4284 if (avatars.Count > linknum) 4654 if (avatars.Count > linknum)
@@ -4333,7 +4703,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4333 { 4703 {
4334 m_host.AddScriptLPS(1); 4704 m_host.AddScriptLPS(1);
4335 4705
4336 ISceneEntity entity = GetLinkEntity(linknum); 4706 ISceneEntity entity = GetLinkEntity(m_host, linknum);
4337 4707
4338 if (entity != null) 4708 if (entity != null)
4339 return entity.Name; 4709 return entity.Name;
@@ -4401,7 +4771,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4401 4771
4402 if (!UUID.TryParse(destination, out destId)) 4772 if (!UUID.TryParse(destination, out destId))
4403 { 4773 {
4404 llSay(0, "Could not parse key " + destination); 4774 Error("llGiveInventory", "Can't parse destination key '" + destination + "'");
4405 return; 4775 return;
4406 } 4776 }
4407 4777
@@ -4409,9 +4779,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4409 4779
4410 if (item == null) 4780 if (item == null)
4411 { 4781 {
4782<<<<<<< HEAD
4783 Error("llGiveInventory", "Can't find inventory object '" + inventory + "'");
4784 return;
4785=======
4412 llSay(0, String.Format("Could not find object '{0}'", inventory)); 4786 llSay(0, String.Format("Could not find object '{0}'", inventory));
4413 return; 4787 return;
4414// throw new Exception(String.Format("The inventory object '{0}' could not be found", inventory)); 4788// throw new Exception(String.Format("The inventory object '{0}' could not be found", inventory));
4789>>>>>>> avn/ubitvar
4415 } 4790 }
4416 4791
4417 UUID objId = item.ItemID; 4792 UUID objId = item.ItemID;
@@ -4435,16 +4810,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4435 4810
4436 if (account == null) 4811 if (account == null)
4437 { 4812 {
4438 llSay(0, "Can't find destination "+destId.ToString()); 4813 GridUserInfo info = World.GridUserService.GetGridUserInfo(destId.ToString());
4439 return; 4814 if(info == null || info.Online == false)
4815 {
4816 Error("llGiveInventory", "Can't find destination '" + destId.ToString() + "'");
4817 return;
4818 }
4440 } 4819 }
4441 } 4820 }
4442 4821
4443 // destination is an avatar 4822 // destination is an avatar
4444 InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId); 4823 string message;
4824 InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId, out message);
4445 4825
4446 if (agentItem == null) 4826 if (agentItem == null)
4827 {
4828 llSay(0, message);
4447 return; 4829 return;
4830 }
4448 4831
4449 byte[] bucket = new byte[1]; 4832 byte[] bucket = new byte[1];
4450 bucket[0] = (byte)item.Type; 4833 bucket[0] = (byte)item.Type;
@@ -4462,6 +4845,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4462 4845
4463 ScenePresence sp; 4846 ScenePresence sp;
4464 4847
4848<<<<<<< HEAD
4849 ScriptSleep(m_sleepMsOnGiveInventory);
4850=======
4465 if (World.TryGetScenePresence(destId, out sp)) 4851 if (World.TryGetScenePresence(destId, out sp))
4466 { 4852 {
4467 sp.ControllingClient.SendInstantMessage(msg); 4853 sp.ControllingClient.SendInstantMessage(msg);
@@ -4474,6 +4860,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4474 4860
4475 //This delay should only occur when giving inventory to avatars. 4861 //This delay should only occur when giving inventory to avatars.
4476 ScriptSleep(3000); 4862 ScriptSleep(3000);
4863>>>>>>> avn/ubitvar
4477 } 4864 }
4478 } 4865 }
4479 4866
@@ -4532,6 +4919,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4532 { 4919 {
4533 m_host.AddScriptLPS(1); 4920 m_host.AddScriptLPS(1);
4534 4921
4922<<<<<<< HEAD
4923 UUID uuid = (UUID)id;
4924 PresenceInfo pinfo = null;
4925 UserAccount account;
4926
4927 UserInfoCacheEntry ce;
4928
4929 lock (m_userInfoCache)
4930 {
4931=======
4535 UUID uuid; 4932 UUID uuid;
4536 if (UUID.TryParse(id, out uuid)) 4933 if (UUID.TryParse(id, out uuid))
4537 { 4934 {
@@ -4539,6 +4936,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4539 UserAccount account; 4936 UserAccount account;
4540 4937
4541 UserInfoCacheEntry ce; 4938 UserInfoCacheEntry ce;
4939>>>>>>> avn/ubitvar
4542 if (!m_userInfoCache.TryGetValue(uuid, out ce)) 4940 if (!m_userInfoCache.TryGetValue(uuid, out ce))
4543 { 4941 {
4544 account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); 4942 account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid);
@@ -4547,7 +4945,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4547 m_userInfoCache[uuid] = null; // Cache negative 4945 m_userInfoCache[uuid] = null; // Cache negative
4548 return UUID.Zero.ToString(); 4946 return UUID.Zero.ToString();
4549 } 4947 }
4948<<<<<<< HEAD
4949=======
4550 4950
4951>>>>>>> avn/ubitvar
4551 4952
4552 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); 4953 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
4553 if (pinfos != null && pinfos.Length > 0) 4954 if (pinfos != null && pinfos.Length > 0)
@@ -4560,6 +4961,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4560 } 4961 }
4561 } 4962 }
4562 } 4963 }
4964<<<<<<< HEAD
4965
4966 ce = new UserInfoCacheEntry();
4967 ce.time = Util.EnvironmentTickCount();
4968 ce.account = account;
4969 ce.pinfo = pinfo;
4970
4971 m_userInfoCache[uuid] = ce;
4972 }
4973 else
4974 {
4975 if (ce == null)
4976 return UUID.Zero.ToString();
4977
4978 account = ce.account;
4979
4980 if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time)
4981 >= LlRequestAgentDataCacheTimeoutMs)
4982 {
4983 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
4984 if (pinfos != null && pinfos.Length > 0)
4985 {
4986 foreach (PresenceInfo p in pinfos)
4987 {
4988 if (p.RegionID != UUID.Zero)
4989 {
4990 pinfo = p;
4991 }
4992 }
4993 }
4994 else
4995 {
4996 pinfo = null;
4997=======
4563 4998
4564 ce = new UserInfoCacheEntry(); 4999 ce = new UserInfoCacheEntry();
4565 ce.time = Util.EnvironmentTickCount(); 5000 ce.time = Util.EnvironmentTickCount();
@@ -4587,17 +5022,60 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4587 { 5022 {
4588 pinfo = p; 5023 pinfo = p;
4589 } 5024 }
5025>>>>>>> avn/ubitvar
4590 } 5026 }
5027
5028 ce.time = Util.EnvironmentTickCount();
5029 ce.pinfo = pinfo;
4591 } 5030 }
4592 else 5031 else
5032 {
5033 pinfo = ce.pinfo;
5034 }
5035<<<<<<< HEAD
5036 }
5037 }
5038=======
5039 else
4593 pinfo = null; 5040 pinfo = null;
4594 5041
4595 ce.time = Util.EnvironmentTickCount(); 5042 ce.time = Util.EnvironmentTickCount();
4596 ce.pinfo = pinfo; 5043 ce.pinfo = pinfo;
4597 } 5044 }
5045>>>>>>> avn/ubitvar
4598 5046
4599 string reply = String.Empty; 5047 string reply = String.Empty;
4600 5048
5049<<<<<<< HEAD
5050 switch (data)
5051 {
5052 case ScriptBaseClass.DATA_ONLINE:
5053 if (pinfo != null && pinfo.RegionID != UUID.Zero)
5054 reply = "1";
5055 else
5056 reply = "0";
5057 break;
5058 case ScriptBaseClass.DATA_NAME: // (First Last)
5059 reply = account.FirstName + " " + account.LastName;
5060 break;
5061 case ScriptBaseClass.DATA_BORN: // (YYYY-MM-DD)
5062 DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
5063 born = born.AddSeconds(account.Created);
5064 reply = born.ToString("yyyy-MM-dd");
5065 break;
5066 case ScriptBaseClass.DATA_RATING: // (0,0,0,0,0,0)
5067 reply = "0,0,0,0,0,0";
5068 break;
5069 case 7: // DATA_USERLEVEL (integer). This is not available in LL and so has no constant.
5070 reply = account.UserLevel.ToString();
5071 break;
5072 case ScriptBaseClass.DATA_PAYINFO: // (0|1|2|3)
5073 reply = "0";
5074 break;
5075 default:
5076 return UUID.Zero.ToString(); // Raise no event
5077 }
5078=======
4601 switch (data) 5079 switch (data)
4602 { 5080 {
4603 case 1: // DATA_ONLINE (0|1) 5081 case 1: // DATA_ONLINE (0|1)
@@ -4623,6 +5101,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4623 default: 5101 default:
4624 return UUID.Zero.ToString(); // Raise no event 5102 return UUID.Zero.ToString(); // Raise no event
4625 } 5103 }
5104>>>>>>> avn/ubitvar
4626 5105
4627 UUID rq = UUID.Random(); 5106 UUID rq = UUID.Random();
4628 5107
@@ -4633,6 +5112,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4633 AsyncCommands. 5112 AsyncCommands.
4634 DataserverPlugin.DataserverReply(rq.ToString(), reply); 5113 DataserverPlugin.DataserverReply(rq.ToString(), reply);
4635 5114
5115<<<<<<< HEAD
5116 ScriptSleep(m_sleepMsOnRequestAgentData);
5117 return tid.ToString();
5118=======
4636 ScriptSleep(100); 5119 ScriptSleep(100);
4637 return tid.ToString(); 5120 return tid.ToString();
4638 } 5121 }
@@ -4641,6 +5124,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4641 ShoutError("Invalid UUID passed to llRequestAgentData."); 5124 ShoutError("Invalid UUID passed to llRequestAgentData.");
4642 } 5125 }
4643 return ""; 5126 return "";
5127>>>>>>> avn/ubitvar
4644 } 5128 }
4645 5129
4646 public LSL_String llRequestInventoryData(string name) 5130 public LSL_String llRequestInventoryData(string name)
@@ -4672,12 +5156,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4672 reply); 5156 reply);
4673 }); 5157 });
4674 5158
4675 ScriptSleep(1000); 5159 ScriptSleep(m_sleepMsOnRequestInventoryData);
4676 return tid.ToString(); 5160 return tid.ToString();
4677 } 5161 }
4678 } 5162 }
4679 5163
4680 ScriptSleep(1000); 5164 ScriptSleep(m_sleepMsOnRequestInventoryData);
4681 return String.Empty; 5165 return String.Empty;
4682 } 5166 }
4683 5167
@@ -4717,7 +5201,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4717 } 5201 }
4718 } 5202 }
4719 5203
4720 ScriptSleep(5000); 5204 ScriptSleep(m_sleepMsOnSetDamage);
4721 } 5205 }
4722 5206
4723 public void llTeleportAgent(string agent, string destination, LSL_Vector targetPos, LSL_Vector targetLookAt) 5207 public void llTeleportAgent(string agent, string destination, LSL_Vector targetPos, LSL_Vector targetLookAt)
@@ -4768,7 +5252,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4768 m_host.AddScriptLPS(1); 5252 m_host.AddScriptLPS(1);
4769 UUID agentId = new UUID(); 5253 UUID agentId = new UUID();
4770 5254
5255<<<<<<< HEAD
5256 ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y);
5257=======
4771 ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256); 5258 ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256);
5259>>>>>>> avn/ubitvar
4772 5260
4773 if (UUID.TryParse(agent, out agentId)) 5261 if (UUID.TryParse(agent, out agentId))
4774 { 5262 {
@@ -4834,22 +5322,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4834 UUID av = new UUID(); 5322 UUID av = new UUID();
4835 if (!UUID.TryParse(agent,out av)) 5323 if (!UUID.TryParse(agent,out av))
4836 { 5324 {
4837 LSLError("First parameter to llTextBox needs to be a key"); 5325 Error("llTextBox", "First parameter must be a key");
4838 return; 5326 return;
4839 } 5327 }
4840 5328
4841 if (message == string.Empty) 5329 if (message == string.Empty)
4842 { 5330 {
4843 ShoutError("Trying to use llTextBox with empty message."); 5331 Error("llTextBox", "Empty message");
4844 } 5332 }
4845 else if (message.Length > 512) 5333 else if (message.Length > 512)
4846 { 5334 {
4847 ShoutError("Trying to use llTextBox with message over 512 characters."); 5335 Error("llTextBox", "Message more than 512 characters");
4848 } 5336 }
4849 else 5337 else
4850 { 5338 {
4851 dm.SendTextBoxToUser(av, message, chatChannel, m_host.Name, m_host.UUID, m_host.OwnerID); 5339 dm.SendTextBoxToUser(av, message, chatChannel, m_host.Name, m_host.UUID, m_host.OwnerID);
4852 ScriptSleep(1000); 5340 ScriptSleep(m_sleepMsOnTextBox);
4853 } 5341 }
4854 } 5342 }
4855 5343
@@ -5566,9 +6054,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5566 // so the OR check may be a little redundant, but it's being done 6054 // so the OR check may be a little redundant, but it's being done
5567 // for completion and should LSL_Key ever be implemented 6055 // for completion and should LSL_Key ever be implemented
5568 // as it's own struct 6056 // as it's own struct
6057 // NOTE: 3rd case is needed because a NULL_KEY comes through as
6058 // type 'obj' and wrongly returns ""
5569 else if (!(src.Data[index] is LSL_String || 6059 else if (!(src.Data[index] is LSL_String ||
6060<<<<<<< HEAD
6061 src.Data[index] is LSL_Key ||
6062 src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000"))
6063=======
5570 src.Data[index] is LSL_Key || 6064 src.Data[index] is LSL_Key ||
5571 src.Data[index] is String)) 6065 src.Data[index] is String))
6066>>>>>>> avn/ubitvar
5572 { 6067 {
5573 return ""; 6068 return "";
5574 } 6069 }
@@ -5776,7 +6271,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5776 public LSL_List llListRandomize(LSL_List src, int stride) 6271 public LSL_List llListRandomize(LSL_List src, int stride)
5777 { 6272 {
5778 LSL_List result; 6273 LSL_List result;
5779 Random rand = new Random(); 6274 BetterRandom rand = new BetterRandom();
5780 6275
5781 int chunkk; 6276 int chunkk;
5782 int[] chunks; 6277 int[] chunks;
@@ -5792,24 +6287,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5792 // If not, then return the src list. This also 6287 // If not, then return the src list. This also
5793 // traps those cases where stride > length. 6288 // traps those cases where stride > length.
5794 6289
5795 if (src.Length != stride && src.Length%stride == 0) 6290 if (src.Length != stride && src.Length % stride == 0)
5796 { 6291 {
5797 chunkk = src.Length/stride; 6292 chunkk = src.Length/stride;
5798 6293
5799 chunks = new int[chunkk]; 6294 chunks = new int[chunkk];
5800 6295
5801 for (int i = 0; i < chunkk; i++) 6296 for (int i = 0; i < chunkk; i++)
6297 {
5802 chunks[i] = i; 6298 chunks[i] = i;
6299 }
5803 6300
5804 // Knuth shuffle the chunkk index 6301 // Knuth shuffle the chunkk index
5805 for (int i = chunkk - 1; i >= 1; i--) 6302 for (int i = chunkk - 1; i > 0; i--)
5806 { 6303 {
5807 // Elect an unrandomized chunk to swap 6304 // Elect an unrandomized chunk to swap
5808 int index = rand.Next(i + 1); 6305 int index = rand.Next(i + 1);
5809 int tmp;
5810 6306
5811 // and swap position with first unrandomized chunk 6307 // and swap position with first unrandomized chunk
5812 tmp = chunks[i]; 6308 int tmp = chunks[i];
5813 chunks[i] = chunks[index]; 6309 chunks[i] = chunks[index];
5814 chunks[index] = tmp; 6310 chunks[index] = tmp;
5815 } 6311 }
@@ -5822,7 +6318,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5822 { 6318 {
5823 for (int j = 0; j < stride; j++) 6319 for (int j = 0; j < stride; j++)
5824 { 6320 {
5825 result.Add(src.Data[chunks[i]*stride+j]); 6321 result.Add(src.Data[chunks[i] * stride + j]);
5826 } 6322 }
5827 } 6323 }
5828 } 6324 }
@@ -5947,6 +6443,74 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5947 { 6443 {
5948 m_host.AddScriptLPS(1); 6444 m_host.AddScriptLPS(1);
5949 return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); 6445 return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0);
6446<<<<<<< HEAD
6447 }
6448
6449 public LSL_String llGetEnv(LSL_String name)
6450 {
6451 m_host.AddScriptLPS(1);
6452 if (name == "agent_limit")
6453 {
6454 return World.RegionInfo.RegionSettings.AgentLimit.ToString();
6455 }
6456 else if (name == "dynamic_pathfinding")
6457 {
6458 return "0";
6459 }
6460 else if (name == "estate_id")
6461 {
6462 return World.RegionInfo.EstateSettings.EstateID.ToString();
6463 }
6464 else if (name == "estate_name")
6465 {
6466 return World.RegionInfo.EstateSettings.EstateName;
6467 }
6468 else if (name == "frame_number")
6469 {
6470 return World.Frame.ToString();
6471 }
6472 else if (name == "region_cpu_ratio")
6473 {
6474 return "1";
6475 }
6476 else if (name == "region_idle")
6477 {
6478 return "0";
6479 }
6480 else if (name == "region_product_name")
6481 {
6482 if (World.RegionInfo.RegionType != String.Empty)
6483 return World.RegionInfo.RegionType;
6484 else
6485 return "";
6486 }
6487 else if (name == "region_product_sku")
6488 {
6489 return "OpenSim";
6490 }
6491 else if (name == "region_start_time")
6492 {
6493 return World.UnixStartTime.ToString();
6494 }
6495 else if (name == "sim_channel")
6496 {
6497 return "OpenSim";
6498 }
6499 else if (name == "sim_version")
6500 {
6501 return World.GetSimulatorVersion();
6502 }
6503 else if (name == "simulator_hostname")
6504 {
6505 IUrlModule UrlModule = World.RequestModuleInterface<IUrlModule>();
6506 return UrlModule.ExternalHostNameForLSL;
6507 }
6508 else
6509 {
6510 return "";
6511 }
6512=======
6513>>>>>>> avn/ubitvar
5950 } 6514 }
5951 6515
5952 /// <summary> 6516 /// <summary>
@@ -5958,8 +6522,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5958 public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) 6522 public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index)
5959 { 6523 {
5960 6524
5961 LSL_List pref = null; 6525 LSL_List pref;
5962 LSL_List suff = null; 6526 LSL_List suff;
5963 6527
5964 m_host.AddScriptLPS(1); 6528 m_host.AddScriptLPS(1);
5965 6529
@@ -6253,12 +6817,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6253 6817
6254 public LSL_String llGetAgentLanguage(string id) 6818 public LSL_String llGetAgentLanguage(string id)
6255 { 6819 {
6256 // This should only return a value if the avatar is in the same region 6820 // This should only return a value if the avatar is in the same region, but eh. idc.
6257 //ckrinke 1-30-09 : This needs to parse the XMLRPC language field supplied
6258 //by the client at login. Currently returning only en-us until our I18N
6259 //effort gains momentum
6260 m_host.AddScriptLPS(1); 6821 m_host.AddScriptLPS(1);
6261 return "en-us"; 6822 if (World.AgentPreferencesService == null)
6823 {
6824 Error("llGetAgentLanguage", "No AgentPreferencesService present");
6825 }
6826 else
6827 {
6828 UUID key = new UUID();
6829 if (UUID.TryParse(id, out key))
6830 {
6831 return new LSL_String(World.AgentPreferencesService.GetLang(key));
6832 }
6833 }
6834 return new LSL_String("en-us");
6262 } 6835 }
6263 /// <summary> 6836 /// <summary>
6264 /// http://wiki.secondlife.com/wiki/LlGetAgentList 6837 /// http://wiki.secondlife.com/wiki/LlGetAgentList
@@ -6347,7 +6920,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6347 { 6920 {
6348 m_host.AddScriptLPS(1); 6921 m_host.AddScriptLPS(1);
6349 m_host.AdjustSoundGain(volume); 6922 m_host.AdjustSoundGain(volume);
6350 ScriptSleep(100); 6923 ScriptSleep(m_sleepMsOnAdjustSoundVolume);
6351 } 6924 }
6352 6925
6353 public void llSetSoundRadius(double radius) 6926 public void llSetSoundRadius(double radius)
@@ -6461,7 +7034,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6461 } 7034 }
6462 } 7035 }
6463 } 7036 }
6464 ScriptSleep(5000); 7037 ScriptSleep(m_sleepMsOnEjectFromLand);
6465 } 7038 }
6466 7039
6467 public LSL_List llParseString2List(string str, LSL_List separators, LSL_List in_spacers) 7040 public LSL_List llParseString2List(string str, LSL_List separators, LSL_List in_spacers)
@@ -6580,10 +7153,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6580 if (UUID.TryParse(id, out key)) 7153 if (UUID.TryParse(id, out key))
6581 { 7154 {
6582 ScenePresence av = World.GetScenePresence(key); 7155 ScenePresence av = World.GetScenePresence(key);
7156 List<ScenePresence> sittingAvatars = m_host.ParentGroup.GetSittingAvatars();
6583 7157
6584 if (av != null) 7158 if (av != null)
6585 { 7159 {
6586 if (llAvatarOnSitTarget() == id) 7160 if (sittingAvatars.Contains(av))
6587 { 7161 {
6588 // if the avatar is sitting on this object, then 7162 // if the avatar is sitting on this object, then
6589 // we can unsit them. We don't want random scripts unsitting random people 7163 // we can unsit them. We don't want random scripts unsitting random people
@@ -6699,8 +7273,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6699 public virtual LSL_Integer llGetFreeMemory() 7273 public virtual LSL_Integer llGetFreeMemory()
6700 { 7274 {
6701 m_host.AddScriptLPS(1); 7275 m_host.AddScriptLPS(1);
6702 // Make scripts designed for LSO happy 7276 // Make scripts designed for Mono happy
6703 return 16384; 7277 return 65536;
6704 } 7278 }
6705 7279
6706 public LSL_Integer llGetFreeURLs() 7280 public LSL_Integer llGetFreeURLs()
@@ -6813,17 +7387,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6813 7387
6814 foreach (SceneObjectPart part in parts) 7388 foreach (SceneObjectPart part in parts)
6815 { 7389 {
6816 SetParticleSystem(part, rules); 7390 SetParticleSystem(part, rules, "llLinkParticleSystem");
6817 } 7391 }
6818 } 7392 }
6819 7393
6820 public void llParticleSystem(LSL_List rules) 7394 public void llParticleSystem(LSL_List rules)
6821 { 7395 {
6822 m_host.AddScriptLPS(1); 7396 m_host.AddScriptLPS(1);
6823 SetParticleSystem(m_host, rules); 7397 SetParticleSystem(m_host, rules, "llParticleSystem");
6824 } 7398 }
6825 7399
6826 private void SetParticleSystem(SceneObjectPart part, LSL_List rules) 7400 private void SetParticleSystem(SceneObjectPart part, LSL_List rules, string originFunc)
6827 { 7401 {
6828 if (rules.Length == 0) 7402 if (rules.Length == 0)
6829 { 7403 {
@@ -6840,62 +7414,152 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6840 7414
6841 for (int i = 0; i < rules.Length; i += 2) 7415 for (int i = 0; i < rules.Length; i += 2)
6842 { 7416 {
6843 switch (rules.GetLSLIntegerItem(i)) 7417 int psystype;
7418 try
7419 {
7420 psystype = rules.GetLSLIntegerItem(i);
7421 }
7422 catch (InvalidCastException)
7423 {
7424 Error(originFunc, string.Format("Error running particle system params index #{0}: particle system parameter type must be integer", i));
7425 return;
7426 }
7427 switch (psystype)
6844 { 7428 {
6845 case (int)ScriptBaseClass.PSYS_PART_FLAGS: 7429 case (int)ScriptBaseClass.PSYS_PART_FLAGS:
6846 prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)(uint)rules.GetLSLIntegerItem(i + 1); 7430 try
7431 {
7432 prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)(uint)rules.GetLSLIntegerItem(i + 1);
7433 }
7434 catch(InvalidCastException)
7435 {
7436 Error(originFunc, string.Format("Error running rule PSYS_PART_FLAGS: arg #{0} - parameter 1 must be integer", i + 1));
7437 return;
7438 }
6847 break; 7439 break;
6848 7440
6849 case (int)ScriptBaseClass.PSYS_PART_START_COLOR: 7441 case (int)ScriptBaseClass.PSYS_PART_START_COLOR:
6850 tempv = rules.GetVector3Item(i + 1); 7442 try
7443 {
7444 tempv = rules.GetVector3Item(i + 1);
7445 }
7446 catch(InvalidCastException)
7447 {
7448 Error(originFunc, string.Format("Error running rule PSYS_PART_START_COLOR: arg #{0} - parameter 1 must be vector", i + 1));
7449 return;
7450 }
6851 prules.PartStartColor.R = (float)tempv.x; 7451 prules.PartStartColor.R = (float)tempv.x;
6852 prules.PartStartColor.G = (float)tempv.y; 7452 prules.PartStartColor.G = (float)tempv.y;
6853 prules.PartStartColor.B = (float)tempv.z; 7453 prules.PartStartColor.B = (float)tempv.z;
6854 break; 7454 break;
6855 7455
6856 case (int)ScriptBaseClass.PSYS_PART_START_ALPHA: 7456 case (int)ScriptBaseClass.PSYS_PART_START_ALPHA:
6857 tempf = (float)rules.GetLSLFloatItem(i + 1); 7457 try
7458 {
7459 tempf = (float)rules.GetLSLFloatItem(i + 1);
7460 }
7461 catch(InvalidCastException)
7462 {
7463 Error(originFunc, string.Format("Error running rule PSYS_PART_START_ALPHA: arg #{0} - parameter 1 must be float", i + 1));
7464 return;
7465 }
6858 prules.PartStartColor.A = tempf; 7466 prules.PartStartColor.A = tempf;
6859 break; 7467 break;
6860 7468
6861 case (int)ScriptBaseClass.PSYS_PART_END_COLOR: 7469 case (int)ScriptBaseClass.PSYS_PART_END_COLOR:
6862 tempv = rules.GetVector3Item(i + 1); 7470 try
7471 {
7472 tempv = rules.GetVector3Item(i + 1);
7473 }
7474 catch(InvalidCastException)
7475 {
7476 Error(originFunc, string.Format("Error running rule PSYS_PART_END_COLOR: arg #{0} - parameter 1 must be vector", i + 1));
7477 return;
7478 }
6863 prules.PartEndColor.R = (float)tempv.x; 7479 prules.PartEndColor.R = (float)tempv.x;
6864 prules.PartEndColor.G = (float)tempv.y; 7480 prules.PartEndColor.G = (float)tempv.y;
6865 prules.PartEndColor.B = (float)tempv.z; 7481 prules.PartEndColor.B = (float)tempv.z;
6866 break; 7482 break;
6867 7483
6868 case (int)ScriptBaseClass.PSYS_PART_END_ALPHA: 7484 case (int)ScriptBaseClass.PSYS_PART_END_ALPHA:
6869 tempf = (float)rules.GetLSLFloatItem(i + 1); 7485 try
7486 {
7487 tempf = (float)rules.GetLSLFloatItem(i + 1);
7488 }
7489 catch(InvalidCastException)
7490 {
7491 Error(originFunc, string.Format("Error running rule PSYS_PART_END_ALPHA: arg #{0} - parameter 1 must be float", i + 1));
7492 return;
7493 }
6870 prules.PartEndColor.A = tempf; 7494 prules.PartEndColor.A = tempf;
6871 break; 7495 break;
6872 7496
6873 case (int)ScriptBaseClass.PSYS_PART_START_SCALE: 7497 case (int)ScriptBaseClass.PSYS_PART_START_SCALE:
6874 tempv = rules.GetVector3Item(i + 1); 7498 try
6875 prules.PartStartScaleX = (float)tempv.x; 7499 {
6876 prules.PartStartScaleY = (float)tempv.y; 7500 tempv = rules.GetVector3Item(i + 1);
7501 }
7502 catch(InvalidCastException)
7503 {
7504 Error(originFunc, string.Format("Error running rule PSYS_PART_START_SCALE: arg #{0} - parameter 1 must be vector", i + 1));
7505 return;
7506 }
7507 prules.PartStartScaleX = validParticleScale((float)tempv.x);
7508 prules.PartStartScaleY = validParticleScale((float)tempv.y);
6877 break; 7509 break;
6878 7510
6879 case (int)ScriptBaseClass.PSYS_PART_END_SCALE: 7511 case (int)ScriptBaseClass.PSYS_PART_END_SCALE:
6880 tempv = rules.GetVector3Item(i + 1); 7512 try
6881 prules.PartEndScaleX = (float)tempv.x; 7513 {
6882 prules.PartEndScaleY = (float)tempv.y; 7514 tempv = rules.GetVector3Item(i + 1);
7515 }
7516 catch(InvalidCastException)
7517 {
7518 Error(originFunc, string.Format("Error running rule PSYS_PART_END_SCALE: arg #{0} - parameter 1 must be vector", i + 1));
7519 return;
7520 }
7521 prules.PartEndScaleX = validParticleScale((float)tempv.x);
7522 prules.PartEndScaleY = validParticleScale((float)tempv.y);
6883 break; 7523 break;
6884 7524
6885 case (int)ScriptBaseClass.PSYS_PART_MAX_AGE: 7525 case (int)ScriptBaseClass.PSYS_PART_MAX_AGE:
6886 tempf = (float)rules.GetLSLFloatItem(i + 1); 7526 try
7527 {
7528 tempf = (float)rules.GetLSLFloatItem(i + 1);
7529 }
7530 catch(InvalidCastException)
7531 {
7532 Error(originFunc, string.Format("Error running rule PSYS_PART_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1));
7533 return;
7534 }
6887 prules.PartMaxAge = tempf; 7535 prules.PartMaxAge = tempf;
6888 break; 7536 break;
6889 7537
6890 case (int)ScriptBaseClass.PSYS_SRC_ACCEL: 7538 case (int)ScriptBaseClass.PSYS_SRC_ACCEL:
6891 tempv = rules.GetVector3Item(i + 1); 7539 try
7540 {
7541 tempv = rules.GetVector3Item(i + 1);
7542 }
7543 catch(InvalidCastException)
7544 {
7545 Error(originFunc, string.Format("Error running rule PSYS_SRC_ACCEL: arg #{0} - parameter 1 must be vector", i + 1));
7546 return;
7547 }
6892 prules.PartAcceleration.X = (float)tempv.x; 7548 prules.PartAcceleration.X = (float)tempv.x;
6893 prules.PartAcceleration.Y = (float)tempv.y; 7549 prules.PartAcceleration.Y = (float)tempv.y;
6894 prules.PartAcceleration.Z = (float)tempv.z; 7550 prules.PartAcceleration.Z = (float)tempv.z;
6895 break; 7551 break;
6896 7552
6897 case (int)ScriptBaseClass.PSYS_SRC_PATTERN: 7553 case (int)ScriptBaseClass.PSYS_SRC_PATTERN:
6898 tmpi = (int)rules.GetLSLIntegerItem(i + 1); 7554 try
7555 {
7556 tmpi = (int)rules.GetLSLIntegerItem(i + 1);
7557 }
7558 catch(InvalidCastException)
7559 {
7560 Error(originFunc, string.Format("Error running rule PSYS_SRC_PATTERN: arg #{0} - parameter 1 must be integer", i + 1));
7561 return;
7562 }
6899 prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; 7563 prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi;
6900 break; 7564 break;
6901 7565
@@ -6904,67 +7568,171 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6904 // client tells the difference between the two by looking at the 0x02 bit in 7568 // client tells the difference between the two by looking at the 0x02 bit in
6905 // the PartFlags variable. 7569 // the PartFlags variable.
6906 case (int)ScriptBaseClass.PSYS_SRC_INNERANGLE: 7570 case (int)ScriptBaseClass.PSYS_SRC_INNERANGLE:
6907 tempf = (float)rules.GetLSLFloatItem(i + 1); 7571 try
7572 {
7573 tempf = (float)rules.GetLSLFloatItem(i + 1);
7574 }
7575 catch(InvalidCastException)
7576 {
7577 Error(originFunc, string.Format("Error running rule PSYS_SRC_INNERANGLE: arg #{0} - parameter 1 must be float", i + 1));
7578 return;
7579 }
6908 prules.InnerAngle = (float)tempf; 7580 prules.InnerAngle = (float)tempf;
6909 prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. 7581 prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off.
6910 break; 7582 break;
6911 7583
6912 case (int)ScriptBaseClass.PSYS_SRC_OUTERANGLE: 7584 case (int)ScriptBaseClass.PSYS_SRC_OUTERANGLE:
6913 tempf = (float)rules.GetLSLFloatItem(i + 1); 7585 try
7586 {
7587 tempf = (float)rules.GetLSLFloatItem(i + 1);
7588 }
7589 catch(InvalidCastException)
7590 {
7591 Error(originFunc, string.Format("Error running rule PSYS_SRC_OUTERANGLE: arg #{0} - parameter 1 must be float", i + 1));
7592 return;
7593 }
6914 prules.OuterAngle = (float)tempf; 7594 prules.OuterAngle = (float)tempf;
6915 prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. 7595 prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off.
6916 break; 7596 break;
6917 7597
6918 case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_SOURCE: 7598 case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_SOURCE:
6919 tmpi = (int)rules.GetLSLIntegerItem(i + 1); 7599 try
7600 {
7601 tmpi = (int)rules.GetLSLIntegerItem(i + 1);
7602 }
7603 catch(InvalidCastException)
7604 {
7605 Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_SOURCE: arg #{0} - parameter 1 must be integer", i + 1));
7606 return;
7607 }
6920 prules.BlendFuncSource = (byte)tmpi; 7608 prules.BlendFuncSource = (byte)tmpi;
6921 break; 7609 break;
6922 7610
6923 case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_DEST: 7611 case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_DEST:
6924 tmpi = (int)rules.GetLSLIntegerItem(i + 1); 7612 try
7613 {
7614 tmpi = (int)rules.GetLSLIntegerItem(i + 1);
7615 }
7616 catch(InvalidCastException)
7617 {
7618 Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_DEST: arg #{0} - parameter 1 must be integer", i + 1));
7619 return;
7620 }
6925 prules.BlendFuncDest = (byte)tmpi; 7621 prules.BlendFuncDest = (byte)tmpi;
6926 break; 7622 break;
6927 7623
6928 case (int)ScriptBaseClass.PSYS_PART_START_GLOW: 7624 case (int)ScriptBaseClass.PSYS_PART_START_GLOW:
6929 tempf = (float)rules.GetLSLFloatItem(i + 1); 7625 try
7626 {
7627 tempf = (float)rules.GetLSLFloatItem(i + 1);
7628 }
7629 catch(InvalidCastException)
7630 {
7631 Error(originFunc, string.Format("Error running rule PSYS_PART_START_GLOW: arg #{0} - parameter 1 must be float", i + 1));
7632 return;
7633 }
6930 prules.PartStartGlow = (float)tempf; 7634 prules.PartStartGlow = (float)tempf;
6931 break; 7635 break;
6932 7636
6933 case (int)ScriptBaseClass.PSYS_PART_END_GLOW: 7637 case (int)ScriptBaseClass.PSYS_PART_END_GLOW:
6934 tempf = (float)rules.GetLSLFloatItem(i + 1); 7638 try
7639 {
7640 tempf = (float)rules.GetLSLFloatItem(i + 1);
7641 }
7642 catch(InvalidCastException)
7643 {
7644 Error(originFunc, string.Format("Error running rule PSYS_PART_END_GLOW: arg #{0} - parameter 1 must be float", i + 1));
7645 return;
7646 }
6935 prules.PartEndGlow = (float)tempf; 7647 prules.PartEndGlow = (float)tempf;
6936 break; 7648 break;
6937 7649
6938 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: 7650 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE:
6939 prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1)); 7651 try
7652 {
7653 prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1));
7654 }
7655 catch(InvalidCastException)
7656 {
7657 Error(originFunc, string.Format("Error running rule PSYS_SRC_TEXTURE: arg #{0} - parameter 1 must be string or key", i + 1));
7658 return;
7659 }
6940 break; 7660 break;
6941 7661
6942 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: 7662 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE:
6943 tempf = (float)rules.GetLSLFloatItem(i + 1); 7663 try
7664 {
7665 tempf = (float)rules.GetLSLFloatItem(i + 1);
7666 }
7667 catch(InvalidCastException)
7668 {
7669 Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RATE: arg #{0} - parameter 1 must be float", i + 1));
7670 return;
7671 }
6944 prules.BurstRate = (float)tempf; 7672 prules.BurstRate = (float)tempf;
6945 break; 7673 break;
6946 7674
6947 case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT: 7675 case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT:
6948 prules.BurstPartCount = (byte)(int)rules.GetLSLIntegerItem(i + 1); 7676 try
7677 {
7678 prules.BurstPartCount = (byte)(int)rules.GetLSLIntegerItem(i + 1);
7679 }
7680 catch(InvalidCastException)
7681 {
7682 Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_PART_COUNT: arg #{0} - parameter 1 must be integer", i + 1));
7683 return;
7684 }
6949 break; 7685 break;
6950 7686
6951 case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS: 7687 case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS:
6952 tempf = (float)rules.GetLSLFloatItem(i + 1); 7688 try
7689 {
7690 tempf = (float)rules.GetLSLFloatItem(i + 1);
7691 }
7692 catch(InvalidCastException)
7693 {
7694 Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RADIUS: arg #{0} - parameter 1 must be float", i + 1));
7695 return;
7696 }
6953 prules.BurstRadius = (float)tempf; 7697 prules.BurstRadius = (float)tempf;
6954 break; 7698 break;
6955 7699
6956 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN: 7700 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN:
6957 tempf = (float)rules.GetLSLFloatItem(i + 1); 7701 try
7702 {
7703 tempf = (float)rules.GetLSLFloatItem(i + 1);
7704 }
7705 catch(InvalidCastException)
7706 {
7707 Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MIN: arg #{0} - parameter 1 must be float", i + 1));
7708 return;
7709 }
6958 prules.BurstSpeedMin = (float)tempf; 7710 prules.BurstSpeedMin = (float)tempf;
6959 break; 7711 break;
6960 7712
6961 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX: 7713 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX:
6962 tempf = (float)rules.GetLSLFloatItem(i + 1); 7714 try
7715 {
7716 tempf = (float)rules.GetLSLFloatItem(i + 1);
7717 }
7718 catch(InvalidCastException)
7719 {
7720 Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MAX: arg #{0} - parameter 1 must be float", i + 1));
7721 return;
7722 }
6963 prules.BurstSpeedMax = (float)tempf; 7723 prules.BurstSpeedMax = (float)tempf;
6964 break; 7724 break;
6965 7725
6966 case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE: 7726 case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE:
6967 tempf = (float)rules.GetLSLFloatItem(i + 1); 7727 try
7728 {
7729 tempf = (float)rules.GetLSLFloatItem(i + 1);
7730 }
7731 catch(InvalidCastException)
7732 {
7733 Error(originFunc, string.Format("Error running rule PSYS_SRC_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1));
7734 return;
7735 }
6968 prules.MaxAge = (float)tempf; 7736 prules.MaxAge = (float)tempf;
6969 break; 7737 break;
6970 7738
@@ -6982,20 +7750,44 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6982 7750
6983 case (int)ScriptBaseClass.PSYS_SRC_OMEGA: 7751 case (int)ScriptBaseClass.PSYS_SRC_OMEGA:
6984 // AL: This is an assumption, since it is the only thing that would match. 7752 // AL: This is an assumption, since it is the only thing that would match.
6985 tempv = rules.GetVector3Item(i + 1); 7753 try
7754 {
7755 tempv = rules.GetVector3Item(i + 1);
7756 }
7757 catch(InvalidCastException)
7758 {
7759 Error(originFunc, string.Format("Error running rule PSYS_SRC_OMEGA: arg #{0} - parameter 1 must be vector", i + 1));
7760 return;
7761 }
6986 prules.AngularVelocity.X = (float)tempv.x; 7762 prules.AngularVelocity.X = (float)tempv.x;
6987 prules.AngularVelocity.Y = (float)tempv.y; 7763 prules.AngularVelocity.Y = (float)tempv.y;
6988 prules.AngularVelocity.Z = (float)tempv.z; 7764 prules.AngularVelocity.Z = (float)tempv.z;
6989 break; 7765 break;
6990 7766
6991 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN: 7767 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN:
6992 tempf = (float)rules.GetLSLFloatItem(i + 1); 7768 try
7769 {
7770 tempf = (float)rules.GetLSLFloatItem(i + 1);
7771 }
7772 catch(InvalidCastException)
7773 {
7774 Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_BEGIN: arg #{0} - parameter 1 must be float", i + 1));
7775 return;
7776 }
6993 prules.InnerAngle = (float)tempf; 7777 prules.InnerAngle = (float)tempf;
6994 prules.PartFlags |= 0x02; // Set new angle format. 7778 prules.PartFlags |= 0x02; // Set new angle format.
6995 break; 7779 break;
6996 7780
6997 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END: 7781 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END:
6998 tempf = (float)rules.GetLSLFloatItem(i + 1); 7782 try
7783 {
7784 tempf = (float)rules.GetLSLFloatItem(i + 1);
7785 }
7786 catch (InvalidCastException)
7787 {
7788 Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_END: arg #{0} - parameter 1 must be float", i + 1));
7789 return;
7790 }
6999 prules.OuterAngle = (float)tempf; 7791 prules.OuterAngle = (float)tempf;
7000 prules.PartFlags |= 0x02; // Set new angle format. 7792 prules.PartFlags |= 0x02; // Set new angle format.
7001 break; 7793 break;
@@ -7010,6 +7802,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7010 part.SendFullUpdateToAllClients(); 7802 part.SendFullUpdateToAllClients();
7011 } 7803 }
7012 7804
7805 private float validParticleScale(float value)
7806 {
7807 if (value > 4.0f) return 4.0f;
7808 return value;
7809 }
7810
7013 public void llGroundRepel(double height, int water, double tau) 7811 public void llGroundRepel(double height, int water, double tau)
7014 { 7812 {
7015 m_host.AddScriptLPS(1); 7813 m_host.AddScriptLPS(1);
@@ -7249,7 +8047,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7249 World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); 8047 World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
7250 } 8048 }
7251 } 8049 }
7252 ScriptSleep(100); 8050 ScriptSleep(m_sleepMsOnAddToLandPassList);
7253 } 8051 }
7254 8052
7255 public void llSetTouchText(string text) 8053 public void llSetTouchText(string text)
@@ -7268,12 +8066,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7268 { 8066 {
7269 m_host.AddScriptLPS(1); 8067 m_host.AddScriptLPS(1);
7270 m_host.SetCameraEyeOffset(offset); 8068 m_host.SetCameraEyeOffset(offset);
8069
8070 if (m_host.ParentGroup.RootPart.GetCameraEyeOffset() == Vector3.Zero)
8071 m_host.ParentGroup.RootPart.SetCameraEyeOffset(offset);
7271 } 8072 }
7272 8073
7273 public void llSetCameraAtOffset(LSL_Vector offset) 8074 public void llSetCameraAtOffset(LSL_Vector offset)
7274 { 8075 {
7275 m_host.AddScriptLPS(1); 8076 m_host.AddScriptLPS(1);
7276 m_host.SetCameraAtOffset(offset); 8077 m_host.SetCameraAtOffset(offset);
8078
8079 if (m_host.ParentGroup.RootPart.GetCameraAtOffset() == Vector3.Zero)
8080 m_host.ParentGroup.RootPart.SetCameraAtOffset(offset);
7277 } 8081 }
7278 8082
7279 public void llSetLinkCamera(LSL_Integer link, LSL_Vector eye, LSL_Vector at) 8083 public void llSetLinkCamera(LSL_Integer link, LSL_Vector eye, LSL_Vector at)
@@ -7348,16 +8152,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7348 UUID av = new UUID(); 8152 UUID av = new UUID();
7349 if (!UUID.TryParse(avatar,out av)) 8153 if (!UUID.TryParse(avatar,out av))
7350 { 8154 {
8155<<<<<<< HEAD
8156 Error("llDialog", "First parameter must be a key");
8157=======
7351 //LSLError("First parameter to llDialog needs to be a key"); 8158 //LSLError("First parameter to llDialog needs to be a key");
8159>>>>>>> avn/ubitvar
7352 return; 8160 return;
7353 } 8161 }
7354 if (buttons.Length < 1) 8162 if (buttons.Length < 1)
7355 { 8163 {
8164<<<<<<< HEAD
8165 Error("llDialog", "At least 1 button must be shown");
8166 return;
8167 }
8168 if (buttons.Length > 12)
8169 {
8170 Error("llDialog", "No more than 12 buttons can be shown");
8171 return;
8172=======
7356 buttons.Add("OK"); 8173 buttons.Add("OK");
7357 } 8174 }
7358 if (buttons.Length > 12) 8175 if (buttons.Length > 12)
7359 { 8176 {
7360 ShoutError("button list too long, must be 12 or fewer entries"); 8177 ShoutError("button list too long, must be 12 or fewer entries");
8178>>>>>>> avn/ubitvar
7361 } 8179 }
7362 int length = buttons.Length; 8180 int length = buttons.Length;
7363 if (length > 12) 8181 if (length > 12)
@@ -7368,12 +8186,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7368 { 8186 {
7369 if (buttons.Data[i].ToString() == String.Empty) 8187 if (buttons.Data[i].ToString() == String.Empty)
7370 { 8188 {
8189<<<<<<< HEAD
8190 Error("llDialog", "Button label cannot be blank");
8191=======
7371 ShoutError("button label cannot be blank"); 8192 ShoutError("button label cannot be blank");
8193>>>>>>> avn/ubitvar
7372 return; 8194 return;
7373 } 8195 }
7374 if (buttons.Data[i].ToString().Length > 24) 8196 if (buttons.Data[i].ToString().Length > 24)
7375 { 8197 {
8198<<<<<<< HEAD
8199 Error("llDialog", "Button label cannot be longer than 24 characters");
8200=======
7376 ShoutError("button label cannot be longer than 24 characters"); 8201 ShoutError("button label cannot be longer than 24 characters");
8202>>>>>>> avn/ubitvar
7377 return; 8203 return;
7378 } 8204 }
7379 buts[i] = buttons.Data[i].ToString(); 8205 buts[i] = buttons.Data[i].ToString();
@@ -7383,7 +8209,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7383 av, m_host.Name, m_host.UUID, m_host.OwnerID, 8209 av, m_host.Name, m_host.UUID, m_host.OwnerID,
7384 message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); 8210 message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts);
7385 8211
7386 ScriptSleep(1000); 8212 ScriptSleep(m_sleepMsOnDialog);
7387 } 8213 }
7388 8214
7389 public void llVolumeDetect(int detect) 8215 public void llVolumeDetect(int detect)
@@ -7394,16 +8220,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7394 m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); 8220 m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0);
7395 } 8221 }
7396 8222
7397 /// <summary>
7398 /// This is a depecated function so this just replicates the result of
7399 /// invoking it in SL
7400 /// </summary>
7401 public void llRemoteLoadScript(string target, string name, int running, int start_param) 8223 public void llRemoteLoadScript(string target, string name, int running, int start_param)
7402 { 8224 {
7403 m_host.AddScriptLPS(1); 8225 m_host.AddScriptLPS(1);
7404 // Report an error as it does in SL 8226 Deprecated("llRemoteLoadScript", "Use llRemoteLoadScriptPin instead");
7405 ShoutError("Deprecated. Please use llRemoteLoadScriptPin instead."); 8227 ScriptSleep(m_sleepMsOnRemoteLoadScript);
7406 ScriptSleep(3000);
7407 } 8228 }
7408 8229
7409 public void llSetRemoteScriptAccessPin(int pin) 8230 public void llSetRemoteScriptAccessPin(int pin)
@@ -7420,7 +8241,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7420 8241
7421 if (!UUID.TryParse(target, out destId)) 8242 if (!UUID.TryParse(target, out destId))
7422 { 8243 {
7423 llSay(0, "Could not parse key " + target); 8244 Error("llRemoteLoadScriptPin", "Can't parse key '" + target + "'");
7424 return; 8245 return;
7425 } 8246 }
7426 8247
@@ -7436,7 +8257,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7436 // make sure the object is a script 8257 // make sure the object is a script
7437 if (item == null || item.Type != 10) 8258 if (item == null || item.Type != 10)
7438 { 8259 {
7439 llSay(0, "Could not find script " + name); 8260 Error("llRemoteLoadScriptPin", "Can't find script '" + name + "'");
7440 return; 8261 return;
7441 } 8262 }
7442 8263
@@ -7453,7 +8274,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7453 } 8274 }
7454 } 8275 }
7455 // this will cause the delay even if the script pin or permissions were wrong - seems ok 8276 // this will cause the delay even if the script pin or permissions were wrong - seems ok
7456 ScriptSleep(3000); 8277 ScriptSleep(m_sleepMsOnRemoteLoadScriptPin);
7457 } 8278 }
7458 8279
7459 public void llOpenRemoteDataChannel() 8280 public void llOpenRemoteDataChannel()
@@ -7484,14 +8305,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7484 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams("remote_data", resobj, 8305 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams("remote_data", resobj,
7485 new DetectParams[0])); 8306 new DetectParams[0]));
7486 } 8307 }
7487 ScriptSleep(1000); 8308 ScriptSleep(m_sleepMsOnOpenRemoteDataChannel);
7488 } 8309 }
7489 8310
7490 public LSL_String llSendRemoteData(string channel, string dest, int idata, string sdata) 8311 public LSL_String llSendRemoteData(string channel, string dest, int idata, string sdata)
7491 { 8312 {
7492 m_host.AddScriptLPS(1); 8313 m_host.AddScriptLPS(1);
7493 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 8314 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
7494 ScriptSleep(3000); 8315 ScriptSleep(m_sleepMsOnSendRemoteData);
7495 if (xmlrpcMod == null) 8316 if (xmlrpcMod == null)
7496 return ""; 8317 return "";
7497 return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString(); 8318 return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString();
@@ -7503,7 +8324,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7503 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 8324 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
7504 if (xmlrpcMod != null) 8325 if (xmlrpcMod != null)
7505 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); 8326 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata);
7506 ScriptSleep(3000); 8327 ScriptSleep(m_sleepMsOnRemoteDataReply);
7507 } 8328 }
7508 8329
7509 public void llCloseRemoteDataChannel(string channel) 8330 public void llCloseRemoteDataChannel(string channel)
@@ -7519,7 +8340,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7519 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 8340 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
7520 if (xmlrpcMod != null) 8341 if (xmlrpcMod != null)
7521 xmlrpcMod.CloseXMLRPCChannel((UUID)channel); 8342 xmlrpcMod.CloseXMLRPCChannel((UUID)channel);
7522 ScriptSleep(1000); 8343 ScriptSleep(m_sleepMsOnCloseRemoteDataChannel);
7523 } 8344 }
7524 8345
7525 public LSL_String llMD5String(string src, int nonce) 8346 public LSL_String llMD5String(string src, int nonce)
@@ -7567,13 +8388,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7567 { 8388 {
7568 cut.y = 1f; 8389 cut.y = 1f;
7569 } 8390 }
7570 if (cut.y - cut.x < 0.05f) 8391 if (cut.y - cut.x < 0.02f)
7571 { 8392 {
7572 cut.x = cut.y - 0.05f; 8393 cut.x = cut.y - 0.02f;
7573 if (cut.x < 0.0f) 8394 if (cut.x < 0.0f)
7574 { 8395 {
7575 cut.x = 0.0f; 8396 cut.x = 0.0f;
7576 cut.y = 0.05f; 8397 cut.y = 0.02f;
7577 } 8398 }
7578 } 8399 }
7579 shapeBlock.ProfileBegin = (ushort)(50000 * cut.x); 8400 shapeBlock.ProfileBegin = (ushort)(50000 * cut.x);
@@ -7595,12 +8416,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7595 hollow = 0.70f; 8416 hollow = 0.70f;
7596 } 8417 }
7597 } 8418 }
7598 // Otherwise, hollow is limited to 95%. 8419 // Otherwise, hollow is limited to 99%.
7599 else 8420 else
7600 { 8421 {
7601 if (hollow > 0.95f) 8422 if (hollow > 0.99f)
7602 { 8423 {
7603 hollow = 0.95f; 8424 hollow = 0.99f;
7604 } 8425 }
7605 } 8426 }
7606 shapeBlock.ProfileHollow = (ushort)(50000 * hollow); 8427 shapeBlock.ProfileHollow = (ushort)(50000 * hollow);
@@ -7730,9 +8551,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7730 { 8551 {
7731 dimple.y = 1f; 8552 dimple.y = 1f;
7732 } 8553 }
7733 if (dimple.y - cut.x < 0.05f) 8554 if (dimple.y - dimple.x < 0.02f)
7734 { 8555 {
7735 dimple.x = cut.y - 0.05f; 8556 dimple.x = dimple.y - 0.02f;
8557 if (dimple.x < 0.0f)
8558 {
8559 dimple.x = 0.0f;
8560 dimple.y = 0.02f;
8561 }
7736 } 8562 }
7737 shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); 8563 shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
7738 shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); 8564 shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y));
@@ -7756,17 +8582,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7756 shapeBlock.PathBegin = shapeBlock.ProfileBegin; 8582 shapeBlock.PathBegin = shapeBlock.ProfileBegin;
7757 shapeBlock.PathEnd = shapeBlock.ProfileEnd; 8583 shapeBlock.PathEnd = shapeBlock.ProfileEnd;
7758 8584
7759 if (holesize.x < 0.05f) 8585 if (holesize.x < 0.01f)
7760 { 8586 {
7761 holesize.x = 0.05f; 8587 holesize.x = 0.01f;
7762 } 8588 }
7763 if (holesize.x > 1f) 8589 if (holesize.x > 1f)
7764 { 8590 {
7765 holesize.x = 1f; 8591 holesize.x = 1f;
7766 } 8592 }
7767 if (holesize.y < 0.05f) 8593 if (holesize.y < 0.01f)
7768 { 8594 {
7769 holesize.y = 0.05f; 8595 holesize.y = 0.01f;
7770 } 8596 }
7771 if (holesize.y > 0.5f) 8597 if (holesize.y > 0.5f)
7772 { 8598 {
@@ -7812,13 +8638,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7812 { 8638 {
7813 profilecut.y = 1f; 8639 profilecut.y = 1f;
7814 } 8640 }
7815 if (profilecut.y - profilecut.x < 0.05f) 8641 if (profilecut.y - profilecut.x < 0.02f)
7816 { 8642 {
7817 profilecut.x = profilecut.y - 0.05f; 8643 profilecut.x = profilecut.y - 0.02f;
7818 if (profilecut.x < 0.0f) 8644 if (profilecut.x < 0.0f)
7819 { 8645 {
7820 profilecut.x = 0.0f; 8646 profilecut.x = 0.0f;
7821 profilecut.y = 0.05f; 8647 profilecut.y = 0.02f;
7822 } 8648 }
7823 } 8649 }
7824 shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x); 8650 shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x);
@@ -7919,18 +8745,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7919 { 8745 {
7920 m_host.AddScriptLPS(1); 8746 m_host.AddScriptLPS(1);
7921 8747
7922 setLinkPrimParams(ScriptBaseClass.LINK_THIS, rules, "llSetPrimitiveParams"); 8748 SetLinkPrimParams(ScriptBaseClass.LINK_THIS, rules, "llSetPrimitiveParams");
7923 8749
7924 ScriptSleep(200); 8750 ScriptSleep(m_sleepMsOnSetPrimitiveParams);
7925 } 8751 }
7926 8752
8753<<<<<<< HEAD
8754 public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules)
8755 {
8756 m_host.AddScriptLPS(1);
8757
8758 SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams");
8759
8760 ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams);
8761 }
8762
8763=======
8764>>>>>>> avn/ubitvar
7927 public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) 8765 public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules)
7928 { 8766 {
7929 m_host.AddScriptLPS(1); 8767 m_host.AddScriptLPS(1);
7930 8768
7931 setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); 8769 SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast");
7932 } 8770 }
7933 8771
8772<<<<<<< HEAD
8773 protected void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
8774 {
8775 SetEntityParams(GetLinkEntities(linknumber), rules, originFunc);
8776 }
8777=======
7934 private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc) 8778 private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
7935 { 8779 {
7936 List<object> parts = new List<object>(); 8780 List<object> parts = new List<object>();
@@ -7940,11 +8784,61 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7940 parts.Add(p); 8784 parts.Add(p);
7941 foreach (ScenePresence p in avatars) 8785 foreach (ScenePresence p in avatars)
7942 parts.Add(p); 8786 parts.Add(p);
8787>>>>>>> avn/ubitvar
7943 8788
7944 LSL_List remaining = null; 8789 protected void SetEntityParams(List<ISceneEntity> entities, LSL_List rules, string originFunc)
8790 {
8791 LSL_List remaining = new LSL_List();
7945 uint rulesParsed = 0; 8792 uint rulesParsed = 0;
7946 8793
8794<<<<<<< HEAD
8795 foreach (ISceneEntity entity in entities)
8796 {
8797 if (entity is SceneObjectPart)
8798 remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed);
8799 else
8800 remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed);
8801 }
8802
8803 while (remaining.Length > 2)
8804 {
8805 int linknumber;
8806 try
8807 {
8808 linknumber = remaining.GetLSLIntegerItem(0);
8809 }
8810 catch(InvalidCastException)
8811 {
8812 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_LINK_TARGET: parameter 2 must be integer", rulesParsed));
8813 return;
8814 }
8815
8816 rules = remaining.GetSublist(1, -1);
8817 entities = GetLinkEntities(linknumber);
8818
8819 foreach (ISceneEntity entity in entities)
8820 {
8821 if (entity is SceneObjectPart)
8822 remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed);
8823 else
8824 remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed);
8825 }
8826 }
8827 }
8828
8829 public void llSetKeyframedMotion(LSL_List frames, LSL_List options)
8830 {
8831 SceneObjectGroup group = m_host.ParentGroup;
8832
8833 if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical)
8834 return;
8835 if (group.IsAttachment)
8836 return;
8837
8838 if (frames.Data.Length > 0) // We are getting a new motion
8839=======
7947 if (parts.Count > 0) 8840 if (parts.Count > 0)
8841>>>>>>> avn/ubitvar
7948 { 8842 {
7949 foreach (object part in parts) 8843 foreach (object part in parts)
7950 { 8844 {
@@ -8078,32 +8972,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8078 8972
8079 switch (code) 8973 switch (code)
8080 { 8974 {
8081 case (int)ScriptBaseClass.PRIM_POSITION: 8975 case ScriptBaseClass.PRIM_POSITION:
8082 case (int)ScriptBaseClass.PRIM_POS_LOCAL: 8976 case ScriptBaseClass.PRIM_POS_LOCAL:
8083 if (remain < 1) 8977 if (remain < 1)
8084 return null; 8978 return new LSL_List();
8085 8979
8980<<<<<<< HEAD
8981 try
8982 {
8983 v = rules.GetVector3Item(idx++);
8984 }
8985 catch(InvalidCastException)
8986 {
8987 if(code == ScriptBaseClass.PRIM_POSITION)
8988 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1));
8989 else
8990 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1));
8991 return new LSL_List();
8992 }
8993=======
8086 v=rules.GetVector3Item(idx++); 8994 v=rules.GetVector3Item(idx++);
8087 if (part.IsRoot && !part.ParentGroup.IsAttachment) 8995 if (part.IsRoot && !part.ParentGroup.IsAttachment)
8088 currentPosition = GetSetPosTarget(part, v, currentPosition, true); 8996 currentPosition = GetSetPosTarget(part, v, currentPosition, true);
8089 else 8997 else
8090 currentPosition = GetSetPosTarget(part, v, currentPosition, false); 8998 currentPosition = GetSetPosTarget(part, v, currentPosition, false);
8999>>>>>>> avn/ubitvar
8091 positionChanged = true; 9000 positionChanged = true;
8092 9001
8093 break; 9002 break;
8094 case (int)ScriptBaseClass.PRIM_SIZE: 9003 case ScriptBaseClass.PRIM_SIZE:
8095 if (remain < 1) 9004 if (remain < 1)
8096 return null; 9005 return new LSL_List();
8097 9006
8098 v=rules.GetVector3Item(idx++); 9007 v=rules.GetVector3Item(idx++);
8099 SetScale(part, v); 9008 SetScale(part, v);
8100 9009
8101 break; 9010 break;
8102 case (int)ScriptBaseClass.PRIM_ROTATION: 9011 case ScriptBaseClass.PRIM_ROTATION:
8103 if (remain < 1) 9012 if (remain < 1)
8104 return null; 9013 return new LSL_List();
8105 9014 LSL_Rotation q;
8106 LSL_Rotation q = rules.GetQuaternionItem(idx++); 9015 try
9016 {
9017 q = rules.GetQuaternionItem(idx++);
9018 }
9019 catch(InvalidCastException)
9020 {
9021 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 1 must be rotation", rulesParsed, idx - idxStart - 1));
9022 return new LSL_List();
9023 }
8107 // try to let this work as in SL... 9024 // try to let this work as in SL...
8108 if (part.ParentID == 0 || (part.ParentGroup != null && part == part.ParentGroup.RootPart)) 9025 if (part.ParentID == 0 || (part.ParentGroup != null && part == part.ParentGroup.RootPart))
8109 { 9026 {
@@ -8119,11 +9036,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8119 9036
8120 break; 9037 break;
8121 9038
8122 case (int)ScriptBaseClass.PRIM_TYPE: 9039 case ScriptBaseClass.PRIM_TYPE:
8123 if (remain < 3) 9040 if (remain < 3)
8124 return null; 9041 return new LSL_List();
8125 9042
8126 code = (int)rules.GetLSLIntegerItem(idx++); 9043 try
9044 {
9045 code = (int)rules.GetLSLIntegerItem(idx++);
9046 }
9047 catch(InvalidCastException)
9048 {
9049 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE: arg #{1} - parameter 1 must be integer", rulesParsed, idx - idxStart - 1));
9050 return new LSL_List();
9051 }
8127 9052
8128 remain = rules.Length - idx; 9053 remain = rules.Length - idx;
8129 float hollow; 9054 float hollow;
@@ -8138,140 +9063,625 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8138 9063
8139 switch (code) 9064 switch (code)
8140 { 9065 {
8141 case (int)ScriptBaseClass.PRIM_TYPE_BOX: 9066 case ScriptBaseClass.PRIM_TYPE_BOX:
8142 if (remain < 6) 9067 if (remain < 6)
8143 return null; 9068 return new LSL_List();
8144 9069
8145 face = (int)rules.GetLSLIntegerItem(idx++); 9070 try
8146 v = rules.GetVector3Item(idx++); // cut 9071 {
8147 hollow = (float)rules.GetLSLFloatItem(idx++); 9072 face = (int)rules.GetLSLIntegerItem(idx++);
8148 twist = rules.GetVector3Item(idx++); 9073 }
8149 taper_b = rules.GetVector3Item(idx++); 9074 catch(InvalidCastException)
8150 topshear = rules.GetVector3Item(idx++); 9075 {
9076 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9077 return new LSL_List();
9078 }
9079 try
9080 {
9081 v = rules.GetVector3Item(idx++); // cut
9082 }
9083 catch(InvalidCastException)
9084 {
9085 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1));
9086 return new LSL_List();
9087 }
9088 try
9089 {
9090 hollow = (float)rules.GetLSLFloatItem(idx++);
9091 }
9092 catch(InvalidCastException)
9093 {
9094 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
9095 return new LSL_List();
9096 }
9097 try
9098 {
9099 twist = rules.GetVector3Item(idx++);
9100 }
9101 catch(InvalidCastException)
9102 {
9103 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 5 must be vector", rulesParsed, idx - idxStart - 1));
9104 return new LSL_List();
9105 }
9106 try
9107 {
9108 taper_b = rules.GetVector3Item(idx++);
9109 }
9110 catch(InvalidCastException)
9111 {
9112 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9113 return new LSL_List();
9114 }
9115 try
9116 {
9117 topshear = rules.GetVector3Item(idx++);
9118 }
9119 catch(InvalidCastException)
9120 {
9121 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9122 return new LSL_List();
9123 }
8151 9124
8152 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 9125 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear,
8153 (byte)ProfileShape.Square, (byte)Extrusion.Straight); 9126 (byte)ProfileShape.Square, (byte)Extrusion.Straight);
8154 break; 9127 break;
8155 9128
8156 case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: 9129 case ScriptBaseClass.PRIM_TYPE_CYLINDER:
8157 if (remain < 6) 9130 if (remain < 6)
8158 return null; 9131 return new LSL_List();
8159 9132
8160 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9133 try
8161 v = rules.GetVector3Item(idx++); // cut 9134 {
8162 hollow = (float)rules.GetLSLFloatItem(idx++); 9135 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8163 twist = rules.GetVector3Item(idx++); 9136 }
8164 taper_b = rules.GetVector3Item(idx++); 9137 catch(InvalidCastException)
8165 topshear = rules.GetVector3Item(idx++); 9138 {
9139 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
9140 return new LSL_List();
9141 }
9142 try
9143 {
9144 v = rules.GetVector3Item(idx++); // cut
9145 }
9146 catch(InvalidCastException)
9147 {
9148 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9149 return new LSL_List();
9150 }
9151 try
9152 {
9153 hollow = (float)rules.GetLSLFloatItem(idx++);
9154 }
9155 catch(InvalidCastException)
9156 {
9157 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9158 return new LSL_List();
9159 }
9160 try
9161 {
9162 twist = rules.GetVector3Item(idx++);
9163 }
9164 catch(InvalidCastException)
9165 {
9166 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9167 return new LSL_List();
9168 }
9169 try
9170 {
9171 taper_b = rules.GetVector3Item(idx++);
9172 }
9173 catch(InvalidCastException)
9174 {
9175 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9176 return new LSL_List();
9177 }
9178 try
9179 {
9180 topshear = rules.GetVector3Item(idx++);
9181 }
9182 catch(InvalidCastException)
9183 {
9184 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9185 return new LSL_List();
9186 }
8166 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 9187 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear,
8167 (byte)ProfileShape.Circle, (byte)Extrusion.Straight); 9188 (byte)ProfileShape.Circle, (byte)Extrusion.Straight);
8168 break; 9189 break;
8169 9190
8170 case (int)ScriptBaseClass.PRIM_TYPE_PRISM: 9191 case ScriptBaseClass.PRIM_TYPE_PRISM:
8171 if (remain < 6) 9192 if (remain < 6)
8172 return null; 9193 return new LSL_List();
8173 9194
8174 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9195 try
8175 v = rules.GetVector3Item(idx++); //cut 9196 {
8176 hollow = (float)rules.GetLSLFloatItem(idx++); 9197 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8177 twist = rules.GetVector3Item(idx++); 9198 }
8178 taper_b = rules.GetVector3Item(idx++); 9199 catch(InvalidCastException)
8179 topshear = rules.GetVector3Item(idx++); 9200 {
9201 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
9202 return new LSL_List();
9203 }
9204 try
9205 {
9206 v = rules.GetVector3Item(idx++); //cut
9207 }
9208 catch(InvalidCastException)
9209 {
9210 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9211 return new LSL_List();
9212 }
9213 try
9214 {
9215 hollow = (float)rules.GetLSLFloatItem(idx++);
9216 }
9217 catch(InvalidCastException)
9218 {
9219 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9220 return new LSL_List();
9221 }
9222 try
9223 {
9224 twist = rules.GetVector3Item(idx++);
9225 }
9226 catch(InvalidCastException)
9227 {
9228 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9229 return new LSL_List();
9230 }
9231 try
9232 {
9233 taper_b = rules.GetVector3Item(idx++);
9234 }
9235 catch(InvalidCastException)
9236 {
9237 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9238 return new LSL_List();
9239 }
9240 try
9241 {
9242 topshear = rules.GetVector3Item(idx++);
9243 }
9244 catch(InvalidCastException)
9245 {
9246 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9247 return new LSL_List();
9248 }
8180 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 9249 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear,
8181 (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Straight); 9250 (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Straight);
8182 break; 9251 break;
8183 9252
8184 case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: 9253 case ScriptBaseClass.PRIM_TYPE_SPHERE:
8185 if (remain < 5) 9254 if (remain < 5)
8186 return null; 9255 return new LSL_List();
8187 9256
8188 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9257 try
8189 v = rules.GetVector3Item(idx++); // cut 9258 {
8190 hollow = (float)rules.GetLSLFloatItem(idx++); 9259 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8191 twist = rules.GetVector3Item(idx++); 9260 }
8192 taper_b = rules.GetVector3Item(idx++); // dimple 9261 catch(InvalidCastException)
9262 {
9263 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
9264 return new LSL_List();
9265 }
9266 try
9267 {
9268 v = rules.GetVector3Item(idx++); // cut
9269 }
9270 catch(InvalidCastException)
9271 {
9272 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9273 return new LSL_List();
9274 }
9275 try
9276 {
9277 hollow = (float)rules.GetLSLFloatItem(idx++);
9278 }
9279 catch(InvalidCastException)
9280 {
9281 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9282 return new LSL_List();
9283 }
9284 try
9285 {
9286 twist = rules.GetVector3Item(idx++);
9287 }
9288 catch(InvalidCastException)
9289 {
9290 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9291 return new LSL_List();
9292 }
9293 try
9294 {
9295 taper_b = rules.GetVector3Item(idx++); // dimple
9296 }
9297 catch(InvalidCastException)
9298 {
9299 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9300 return new LSL_List();
9301 }
8193 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, 9302 SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b,
8194 (byte)ProfileShape.HalfCircle, (byte)Extrusion.Curve1); 9303 (byte)ProfileShape.HalfCircle, (byte)Extrusion.Curve1);
8195 break; 9304 break;
8196 9305
8197 case (int)ScriptBaseClass.PRIM_TYPE_TORUS: 9306 case ScriptBaseClass.PRIM_TYPE_TORUS:
8198 if (remain < 11) 9307 if (remain < 11)
8199 return null; 9308 return new LSL_List();
8200 9309
8201 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9310 try
8202 v = rules.GetVector3Item(idx++); //cut 9311 {
8203 hollow = (float)rules.GetLSLFloatItem(idx++); 9312 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8204 twist = rules.GetVector3Item(idx++); 9313 }
8205 holesize = rules.GetVector3Item(idx++); 9314 catch(InvalidCastException)
8206 topshear = rules.GetVector3Item(idx++); 9315 {
8207 profilecut = rules.GetVector3Item(idx++); 9316 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
8208 taper_b = rules.GetVector3Item(idx++); // taper_a 9317 return new LSL_List();
8209 revolutions = (float)rules.GetLSLFloatItem(idx++); 9318 }
8210 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 9319 try
8211 skew = (float)rules.GetLSLFloatItem(idx++); 9320 {
9321 v = rules.GetVector3Item(idx++); //cut
9322 }
9323 catch(InvalidCastException)
9324 {
9325 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9326 return new LSL_List();
9327 }
9328 try
9329 {
9330 hollow = (float)rules.GetLSLFloatItem(idx++);
9331 }
9332 catch(InvalidCastException)
9333 {
9334 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9335 return new LSL_List();
9336 }
9337 try
9338 {
9339 twist = rules.GetVector3Item(idx++);
9340 }
9341 catch(InvalidCastException)
9342 {
9343 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9344 return new LSL_List();
9345 }
9346 try
9347 {
9348 holesize = rules.GetVector3Item(idx++);
9349 }
9350 catch(InvalidCastException)
9351 {
9352 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9353 return new LSL_List();
9354 }
9355 try
9356 {
9357 topshear = rules.GetVector3Item(idx++);
9358 }
9359 catch(InvalidCastException)
9360 {
9361 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9362 return new LSL_List();
9363 }
9364 try
9365 {
9366 profilecut = rules.GetVector3Item(idx++);
9367 }
9368 catch(InvalidCastException)
9369 {
9370 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1));
9371 return new LSL_List();
9372 }
9373 try
9374 {
9375 taper_b = rules.GetVector3Item(idx++); // taper_a
9376 }
9377 catch(InvalidCastException)
9378 {
9379 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1));
9380 return new LSL_List();
9381 }
9382 try
9383 {
9384 revolutions = (float)rules.GetLSLFloatItem(idx++);
9385 }
9386 catch(InvalidCastException)
9387 {
9388 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1));
9389 return new LSL_List();
9390 }
9391 try
9392 {
9393 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
9394 }
9395 catch(InvalidCastException)
9396 {
9397 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1));
9398 return new LSL_List();
9399 }
9400 try
9401 {
9402 skew = (float)rules.GetLSLFloatItem(idx++);
9403 }
9404 catch(InvalidCastException)
9405 {
9406 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 13 must be vector", rulesParsed, idx - idxStart - 1));
9407 return new LSL_List();
9408 }
8212 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, 9409 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
8213 revolutions, radiusoffset, skew, (byte)ProfileShape.Circle, (byte)Extrusion.Curve1); 9410 revolutions, radiusoffset, skew, (byte)ProfileShape.Circle, (byte)Extrusion.Curve1);
8214 break; 9411 break;
8215 9412
8216 case (int)ScriptBaseClass.PRIM_TYPE_TUBE: 9413 case ScriptBaseClass.PRIM_TYPE_TUBE:
8217 if (remain < 11) 9414 if (remain < 11)
8218 return null; 9415 return new LSL_List();
8219 9416
8220 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9417 try
8221 v = rules.GetVector3Item(idx++); //cut 9418 {
8222 hollow = (float)rules.GetLSLFloatItem(idx++); 9419 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8223 twist = rules.GetVector3Item(idx++); 9420 }
8224 holesize = rules.GetVector3Item(idx++); 9421 catch(InvalidCastException)
8225 topshear = rules.GetVector3Item(idx++); 9422 {
8226 profilecut = rules.GetVector3Item(idx++); 9423 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
8227 taper_b = rules.GetVector3Item(idx++); // taper_a 9424 return new LSL_List();
8228 revolutions = (float)rules.GetLSLFloatItem(idx++); 9425 }
8229 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 9426 try
8230 skew = (float)rules.GetLSLFloatItem(idx++); 9427 {
9428 v = rules.GetVector3Item(idx++); //cut
9429 }
9430 catch(InvalidCastException)
9431 {
9432 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9433 return new LSL_List();
9434 }
9435 try
9436 {
9437 hollow = (float)rules.GetLSLFloatItem(idx++);
9438 }
9439 catch(InvalidCastException)
9440 {
9441 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9442 return new LSL_List();
9443 }
9444 try
9445 {
9446 twist = rules.GetVector3Item(idx++);
9447 }
9448 catch(InvalidCastException)
9449 {
9450 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9451 return new LSL_List();
9452 }
9453 try
9454 {
9455 holesize = rules.GetVector3Item(idx++);
9456 }
9457 catch(InvalidCastException)
9458 {
9459 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9460 return new LSL_List();
9461 }
9462 try
9463 {
9464 topshear = rules.GetVector3Item(idx++);
9465 }
9466 catch(InvalidCastException)
9467 {
9468 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9469 return new LSL_List();
9470 }
9471 try
9472 {
9473 profilecut = rules.GetVector3Item(idx++);
9474 }
9475 catch(InvalidCastException)
9476 {
9477 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1));
9478 return new LSL_List();
9479 }
9480 try
9481 {
9482 taper_b = rules.GetVector3Item(idx++); // taper_a
9483 }
9484 catch(InvalidCastException)
9485 {
9486 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1));
9487 return new LSL_List();
9488 }
9489 try
9490 {
9491 revolutions = (float)rules.GetLSLFloatItem(idx++);
9492 }
9493 catch(InvalidCastException)
9494 {
9495 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1));
9496 return new LSL_List();
9497 }
9498 try
9499 {
9500 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
9501 }
9502 catch(InvalidCastException)
9503 {
9504 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1));
9505 return new LSL_List();
9506 }
9507 try
9508 {
9509 skew = (float)rules.GetLSLFloatItem(idx++);
9510 }
9511 catch(InvalidCastException)
9512 {
9513 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1));
9514 return new LSL_List();
9515 }
8231 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, 9516 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
8232 revolutions, radiusoffset, skew, (byte)ProfileShape.Square, (byte)Extrusion.Curve1); 9517 revolutions, radiusoffset, skew, (byte)ProfileShape.Square, (byte)Extrusion.Curve1);
8233 break; 9518 break;
8234 9519
8235 case (int)ScriptBaseClass.PRIM_TYPE_RING: 9520 case ScriptBaseClass.PRIM_TYPE_RING:
8236 if (remain < 11) 9521 if (remain < 11)
8237 return null; 9522 return new LSL_List();
8238 9523
8239 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape 9524 try
8240 v = rules.GetVector3Item(idx++); //cut 9525 {
8241 hollow = (float)rules.GetLSLFloatItem(idx++); 9526 face = (int)rules.GetLSLIntegerItem(idx++); // holeshape
8242 twist = rules.GetVector3Item(idx++); 9527 }
8243 holesize = rules.GetVector3Item(idx++); 9528 catch(InvalidCastException)
8244 topshear = rules.GetVector3Item(idx++); 9529 {
8245 profilecut = rules.GetVector3Item(idx++); 9530 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
8246 taper_b = rules.GetVector3Item(idx++); // taper_a 9531 return new LSL_List();
8247 revolutions = (float)rules.GetLSLFloatItem(idx++); 9532 }
8248 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 9533 try
8249 skew = (float)rules.GetLSLFloatItem(idx++); 9534 {
9535 v = rules.GetVector3Item(idx++); //cut
9536 }
9537 catch(InvalidCastException)
9538 {
9539 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9540 return new LSL_List();
9541 }
9542 try
9543 {
9544 hollow = (float)rules.GetLSLFloatItem(idx++);
9545 }
9546 catch(InvalidCastException)
9547 {
9548 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9549 return new LSL_List();
9550 }
9551 try
9552 {
9553 twist = rules.GetVector3Item(idx++);
9554 }
9555 catch(InvalidCastException)
9556 {
9557 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1));
9558 return new LSL_List();
9559 }
9560 try
9561 {
9562 holesize = rules.GetVector3Item(idx++);
9563 }
9564 catch(InvalidCastException)
9565 {
9566 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1));
9567 return new LSL_List();
9568 }
9569 try
9570 {
9571 topshear = rules.GetVector3Item(idx++);
9572 }
9573 catch(InvalidCastException)
9574 {
9575 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9576 return new LSL_List();
9577 }
9578 try
9579 {
9580 profilecut = rules.GetVector3Item(idx++);
9581 }
9582 catch(InvalidCastException)
9583 {
9584 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1));
9585 return new LSL_List();
9586 }
9587 try
9588 {
9589 taper_b = rules.GetVector3Item(idx++); // taper_a
9590 }
9591 catch(InvalidCastException)
9592 {
9593 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1));
9594 return new LSL_List();
9595 }
9596 try
9597 {
9598 revolutions = (float)rules.GetLSLFloatItem(idx++);
9599 }
9600 catch(InvalidCastException)
9601 {
9602 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1));
9603 return new LSL_List();
9604 }
9605 try
9606 {
9607 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
9608 }
9609 catch(InvalidCastException)
9610 {
9611 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1));
9612 return new LSL_List();
9613 }
9614 try
9615 {
9616 skew = (float)rules.GetLSLFloatItem(idx++);
9617 }
9618 catch(InvalidCastException)
9619 {
9620 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1));
9621 return new LSL_List();
9622 }
8250 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, 9623 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
8251 revolutions, radiusoffset, skew, (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Curve1); 9624 revolutions, radiusoffset, skew, (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Curve1);
8252 break; 9625 break;
8253 9626
8254 case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: 9627 case ScriptBaseClass.PRIM_TYPE_SCULPT:
8255 if (remain < 2) 9628 if (remain < 2)
8256 return null; 9629 return new LSL_List();
8257 9630
8258 string map = rules.Data[idx++].ToString(); 9631 string map = rules.Data[idx++].ToString();
8259 face = (int)rules.GetLSLIntegerItem(idx++); // type 9632 try
9633 {
9634 face = (int)rules.GetLSLIntegerItem(idx++); // type
9635 }
9636 catch(InvalidCastException)
9637 {
9638 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SCULPT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1));
9639 return new LSL_List();
9640 }
8260 SetPrimitiveShapeParams(part, map, face, (byte)Extrusion.Curve1); 9641 SetPrimitiveShapeParams(part, map, face, (byte)Extrusion.Curve1);
8261 break; 9642 break;
8262 } 9643 }
8263 9644
8264 break; 9645 break;
8265 9646
8266 case (int)ScriptBaseClass.PRIM_TEXTURE: 9647 case ScriptBaseClass.PRIM_TEXTURE:
8267 if (remain < 5) 9648 if (remain < 5)
8268 return null; 9649 return new LSL_List();
8269 9650
8270 face=(int)rules.GetLSLIntegerItem(idx++); 9651 face=(int)rules.GetLSLIntegerItem(idx++);
8271 string tex=rules.Data[idx++].ToString(); 9652 string tex;
8272 LSL_Vector repeats=rules.GetVector3Item(idx++); 9653 LSL_Vector repeats;
8273 LSL_Vector offsets=rules.GetVector3Item(idx++); 9654 LSL_Vector offsets;
8274 double rotation=(double)rules.GetLSLFloatItem(idx++); 9655 double rotation;
9656
9657 tex = rules.Data[idx++].ToString();
9658 try
9659 {
9660 repeats = rules.GetVector3Item(idx++);
9661 }
9662 catch(InvalidCastException)
9663 {
9664 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1));
9665 return new LSL_List();
9666 }
9667 try
9668 {
9669 offsets = rules.GetVector3Item(idx++);
9670 }
9671 catch(InvalidCastException)
9672 {
9673 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1));
9674 return new LSL_List();
9675 }
9676 try
9677 {
9678 rotation = (double)rules.GetLSLFloatItem(idx++);
9679 }
9680 catch(InvalidCastException)
9681 {
9682 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9683 return new LSL_List();
9684 }
8275 9685
8276 SetTexture(part, tex, face); 9686 SetTexture(part, tex, face);
8277 ScaleTexture(part, repeats.x, repeats.y, face); 9687 ScaleTexture(part, repeats.x, repeats.y, face);
@@ -8280,114 +9690,328 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8280 9690
8281 break; 9691 break;
8282 9692
8283 case (int)ScriptBaseClass.PRIM_COLOR: 9693 case ScriptBaseClass.PRIM_COLOR:
8284 if (remain < 3) 9694 if (remain < 3)
8285 return null; 9695 return new LSL_List();
8286 9696
8287 face=(int)rules.GetLSLIntegerItem(idx++); 9697 LSL_Vector color;
8288 LSL_Vector color=rules.GetVector3Item(idx++); 9698 double alpha;
8289 double alpha=(double)rules.GetLSLFloatItem(idx++); 9699
9700 try
9701 {
9702 face = (int)rules.GetLSLIntegerItem(idx++);
9703 }
9704 catch(InvalidCastException)
9705 {
9706 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9707 return new LSL_List();
9708 }
9709 try
9710 {
9711 color = rules.GetVector3Item(idx++);
9712 }
9713 catch(InvalidCastException)
9714 {
9715 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1));
9716 return new LSL_List();
9717 }
9718 try
9719 {
9720 alpha = (double)rules.GetLSLFloatItem(idx++);
9721 }
9722 catch(InvalidCastException)
9723 {
9724 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
9725 return new LSL_List();
9726 }
8290 9727
8291 part.SetFaceColorAlpha(face, color, alpha); 9728 part.SetFaceColorAlpha(face, color, alpha);
8292 9729
8293 break; 9730 break;
8294 9731
8295 case (int)ScriptBaseClass.PRIM_FLEXIBLE: 9732 case ScriptBaseClass.PRIM_FLEXIBLE:
8296 if (remain < 7) 9733 if (remain < 7)
8297 return null; 9734 return new LSL_List();
8298 9735 bool flexi;
8299 bool flexi = rules.GetLSLIntegerItem(idx++); 9736 int softness;
8300 int softness = rules.GetLSLIntegerItem(idx++); 9737 float gravity;
8301 float gravity = (float)rules.GetLSLFloatItem(idx++); 9738 float friction;
8302 float friction = (float)rules.GetLSLFloatItem(idx++); 9739 float wind;
8303 float wind = (float)rules.GetLSLFloatItem(idx++); 9740 float tension;
8304 float tension = (float)rules.GetLSLFloatItem(idx++); 9741 LSL_Vector force;
8305 LSL_Vector force = rules.GetVector3Item(idx++); 9742
9743 try
9744 {
9745 flexi = rules.GetLSLIntegerItem(idx++);
9746 }
9747 catch(InvalidCastException)
9748 {
9749 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9750 return new LSL_List();
9751 }
9752 try
9753 {
9754 softness = rules.GetLSLIntegerItem(idx++);
9755 }
9756 catch(InvalidCastException)
9757 {
9758 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
9759 return new LSL_List();
9760 }
9761 try
9762 {
9763 gravity = (float)rules.GetLSLFloatItem(idx++);
9764 }
9765 catch(InvalidCastException)
9766 {
9767 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
9768 return new LSL_List();
9769 }
9770 try
9771 {
9772 friction = (float)rules.GetLSLFloatItem(idx++);
9773 }
9774 catch(InvalidCastException)
9775 {
9776 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9777 return new LSL_List();
9778 }
9779 try
9780 {
9781 wind = (float)rules.GetLSLFloatItem(idx++);
9782 }
9783 catch(InvalidCastException)
9784 {
9785 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1));
9786 return new LSL_List();
9787 }
9788 try
9789 {
9790 tension = (float)rules.GetLSLFloatItem(idx++);
9791 }
9792 catch(InvalidCastException)
9793 {
9794 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 7 must be float", rulesParsed, idx - idxStart - 1));
9795 return new LSL_List();
9796 }
9797 try
9798 {
9799 force = rules.GetVector3Item(idx++);
9800 }
9801 catch(InvalidCastException)
9802 {
9803 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1));
9804 return new LSL_List();
9805 }
8306 9806
8307 SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); 9807 SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force);
8308 9808
8309 break; 9809 break;
8310 9810
8311 case (int)ScriptBaseClass.PRIM_POINT_LIGHT: 9811 case ScriptBaseClass.PRIM_POINT_LIGHT:
8312 if (remain < 5) 9812 if (remain < 5)
8313 return null; 9813 return new LSL_List();
8314 bool light = rules.GetLSLIntegerItem(idx++); 9814 bool light;
8315 LSL_Vector lightcolor = rules.GetVector3Item(idx++); 9815 LSL_Vector lightcolor;
8316 float intensity = (float)rules.GetLSLFloatItem(idx++); 9816 float intensity;
8317 float radius = (float)rules.GetLSLFloatItem(idx++); 9817 float radius;
8318 float falloff = (float)rules.GetLSLFloatItem(idx++); 9818 float falloff;
9819
9820 try
9821 {
9822 light = rules.GetLSLIntegerItem(idx++);
9823 }
9824 catch(InvalidCastException)
9825 {
9826 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9827 return new LSL_List();
9828 }
9829 try
9830 {
9831 lightcolor = rules.GetVector3Item(idx++);
9832 }
9833 catch(InvalidCastException)
9834 {
9835 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1));
9836 return new LSL_List();
9837 }
9838 try
9839 {
9840 intensity = (float)rules.GetLSLFloatItem(idx++);
9841 }
9842 catch(InvalidCastException)
9843 {
9844 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
9845 return new LSL_List();
9846 }
9847 try
9848 {
9849 radius = (float)rules.GetLSLFloatItem(idx++);
9850 }
9851 catch(InvalidCastException)
9852 {
9853 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1));
9854 return new LSL_List();
9855 }
9856 try
9857 {
9858 falloff = (float)rules.GetLSLFloatItem(idx++);
9859 }
9860 catch(InvalidCastException)
9861 {
9862 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1));
9863 return new LSL_List();
9864 }
8319 9865
8320 SetPointLight(part, light, lightcolor, intensity, radius, falloff); 9866 SetPointLight(part, light, lightcolor, intensity, radius, falloff);
8321 9867
8322 break; 9868 break;
8323 9869
8324 case (int)ScriptBaseClass.PRIM_GLOW: 9870 case ScriptBaseClass.PRIM_GLOW:
8325 if (remain < 2) 9871 if (remain < 2)
8326 return null; 9872 return new LSL_List();
8327 face = rules.GetLSLIntegerItem(idx++); 9873
8328 float glow = (float)rules.GetLSLFloatItem(idx++); 9874 float glow;
9875
9876 try
9877 {
9878 face = rules.GetLSLIntegerItem(idx++);
9879 }
9880 catch(InvalidCastException)
9881 {
9882 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9883 return new LSL_List();
9884 }
9885 try
9886 {
9887 glow = (float)rules.GetLSLFloatItem(idx++);
9888 }
9889 catch(InvalidCastException)
9890 {
9891 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1));
9892 return new LSL_List();
9893 }
8329 9894
8330 SetGlow(part, face, glow); 9895 SetGlow(part, face, glow);
8331 9896
8332 break; 9897 break;
8333 9898
8334 case (int)ScriptBaseClass.PRIM_BUMP_SHINY: 9899 case ScriptBaseClass.PRIM_BUMP_SHINY:
8335 if (remain < 3) 9900 if (remain < 3)
8336 return null; 9901 return new LSL_List();
8337 face = (int)rules.GetLSLIntegerItem(idx++); 9902
8338 int shiny = (int)rules.GetLSLIntegerItem(idx++); 9903 int shiny;
8339 Bumpiness bump = (Bumpiness)(int)rules.GetLSLIntegerItem(idx++); 9904 Bumpiness bump;
9905
9906 try
9907 {
9908 face = (int)rules.GetLSLIntegerItem(idx++);
9909 }
9910 catch(InvalidCastException)
9911 {
9912 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9913 return new LSL_List();
9914 }
9915 try
9916 {
9917 shiny = (int)rules.GetLSLIntegerItem(idx++);
9918 }
9919 catch(InvalidCastException)
9920 {
9921 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
9922 return new LSL_List();
9923 }
9924 try
9925 {
9926 bump = (Bumpiness)(int)rules.GetLSLIntegerItem(idx++);
9927 }
9928 catch(InvalidCastException)
9929 {
9930 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1));
9931 return new LSL_List();
9932 }
8340 9933
8341 SetShiny(part, face, shiny, bump); 9934 SetShiny(part, face, shiny, bump);
8342 9935
8343 break; 9936 break;
8344 9937
8345 case (int)ScriptBaseClass.PRIM_FULLBRIGHT: 9938 case ScriptBaseClass.PRIM_FULLBRIGHT:
8346 if (remain < 2) 9939 if (remain < 2)
8347 return null; 9940 return new LSL_List();
8348 face = rules.GetLSLIntegerItem(idx++); 9941 bool st;
8349 bool st = rules.GetLSLIntegerItem(idx++);
8350 SetFullBright(part, face , st);
8351 break;
8352
8353 case (int)ScriptBaseClass.PRIM_MATERIAL:
8354 if (remain < 1)
8355 return null;
8356 int mat = rules.GetLSLIntegerItem(idx++);
8357 if (mat < 0 || mat > 7)
8358 return null;
8359 9942
8360 part.Material = Convert.ToByte(mat); 9943 try
8361 break; 9944 {
9945 face = rules.GetLSLIntegerItem(idx++);
9946 }
9947 catch(InvalidCastException)
9948 {
9949 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9950 return new LSL_List();
9951 }
9952 try
9953 {
9954 st = rules.GetLSLIntegerItem(idx++);
9955 }
9956 catch(InvalidCastException)
9957 {
9958 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1));
9959 return new LSL_List();
9960 }
9961 SetFullBright(part, face , st);
9962 break;
8362 9963
8363 case (int)ScriptBaseClass.PRIM_PHANTOM: 9964 case ScriptBaseClass.PRIM_MATERIAL:
8364 if (remain < 1) 9965 if (remain < 1)
8365 return null; 9966 return new LSL_List();
9967 int mat;
8366 9968
8367 string ph = rules.Data[idx++].ToString(); 9969 try
8368 part.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1")); 9970 {
9971 mat = rules.GetLSLIntegerItem(idx++);
9972 }
9973 catch(InvalidCastException)
9974 {
9975 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_MATERIAL: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
9976 return new LSL_List();
9977 }
9978 if (mat < 0 || mat > 7)
9979 return new LSL_List();
8369 9980
8370 break; 9981 part.Material = Convert.ToByte(mat);
9982 break;
8371 9983
8372 case (int)ScriptBaseClass.PRIM_PHYSICS: 9984 case ScriptBaseClass.PRIM_PHANTOM:
8373 if (remain < 1) 9985 if (remain < 1)
8374 return null; 9986 return new LSL_List();
8375 string phy = rules.Data[idx++].ToString(); 9987
8376 bool physics; 9988 string ph = rules.Data[idx++].ToString();
9989 part.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1"));
8377 9990
8378 if (phy.Equals("1")) 9991 break;
8379 physics = true;
8380 else
8381 physics = false;
8382 9992
8383 part.ScriptSetPhysicsStatus(physics); 9993 case ScriptBaseClass.PRIM_PHYSICS:
8384 break; 9994 if (remain < 1)
9995 return new LSL_List();
9996 string phy = rules.Data[idx++].ToString();
9997 part.ScriptSetPhysicsStatus(phy.Equals("1"));
9998 break;
8385 9999
8386 case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: 10000 case ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE:
8387 if (remain < 1) 10001 if (remain < 1)
8388 return null; 10002 return new LSL_List();
8389 10003
8390 int shape_type = rules.GetLSLIntegerItem(idx++); 10004 int shape_type;
10005
10006 try
10007 {
10008 shape_type = rules.GetLSLIntegerItem(idx++);
10009 }
10010 catch(InvalidCastException)
10011 {
10012 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_PHYSICS_SHAPE_TYPE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
10013 return new LSL_List();
10014 }
8391 10015
8392 ExtraPhysicsData physdata = new ExtraPhysicsData(); 10016 ExtraPhysicsData physdata = new ExtraPhysicsData();
8393 physdata.Density = part.Density; 10017 physdata.Density = part.Density;
@@ -8399,6 +10023,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8399 10023
8400 break; 10024 break;
8401 10025
10026<<<<<<< HEAD
10027 case ScriptBaseClass.PRIM_TEMP_ON_REZ:
10028=======
8402 case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: 10029 case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL:
8403 if (remain < 5) 10030 if (remain < 5)
8404 return null; 10031 return null;
@@ -8414,76 +10041,192 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8414 break; 10041 break;
8415 10042
8416 case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: 10043 case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ:
10044>>>>>>> avn/ubitvar
8417 if (remain < 1) 10045 if (remain < 1)
8418 return null; 10046 return new LSL_List();
8419 string temp = rules.Data[idx++].ToString(); 10047 string temp = rules.Data[idx++].ToString();
8420 10048
8421 part.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1")); 10049 part.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1"));
8422 10050
8423 break; 10051 break;
8424 10052
8425 case (int)ScriptBaseClass.PRIM_TEXGEN: 10053 case ScriptBaseClass.PRIM_TEXGEN:
8426 if (remain < 2) 10054 if (remain < 2)
8427 return null; 10055 return new LSL_List();
8428 //face,type 10056 //face,type
8429 face = rules.GetLSLIntegerItem(idx++); 10057 int style;
8430 int style = rules.GetLSLIntegerItem(idx++); 10058
10059 try
10060 {
10061 face = rules.GetLSLIntegerItem(idx++);
10062 }
10063 catch(InvalidCastException)
10064 {
10065 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1));
10066 return new LSL_List();
10067 }
10068 try
10069 {
10070 style = rules.GetLSLIntegerItem(idx++);
10071 }
10072 catch(InvalidCastException)
10073 {
10074 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1));
10075 return new LSL_List();
10076 }
8431 SetTexGen(part, face, style); 10077 SetTexGen(part, face, style);
8432 break; 10078 break;
8433 case (int)ScriptBaseClass.PRIM_TEXT: 10079 case ScriptBaseClass.PRIM_TEXT:
8434 if (remain < 3) 10080 if (remain < 3)
8435 return null; 10081 return new LSL_List();
8436 string primText = rules.GetLSLStringItem(idx++); 10082 string primText;
8437 LSL_Vector primTextColor = rules.GetVector3Item(idx++); 10083 LSL_Vector primTextColor;
8438 LSL_Float primTextAlpha = rules.GetLSLFloatItem(idx++); 10084 LSL_Float primTextAlpha;
10085
10086 try
10087 {
10088 primText = rules.GetLSLStringItem(idx++);
10089 }
10090 catch(InvalidCastException)
10091 {
10092 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1));
10093 return new LSL_List();
10094 }
10095 try
10096 {
10097 primTextColor = rules.GetVector3Item(idx++);
10098 }
10099 catch(InvalidCastException)
10100 {
10101 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1));
10102 return new LSL_List();
10103 }
10104 try
10105 {
10106 primTextAlpha = rules.GetLSLFloatItem(idx++);
10107 }
10108 catch(InvalidCastException)
10109 {
10110 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
10111 return new LSL_List();
10112 }
8439 Vector3 av3 = Util.Clip(primTextColor, 0.0f, 1.0f); 10113 Vector3 av3 = Util.Clip(primTextColor, 0.0f, 1.0f);
8440 part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f)); 10114 part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f));
8441 10115
8442 break; 10116 break;
8443 case (int)ScriptBaseClass.PRIM_NAME: 10117
10118 case ScriptBaseClass.PRIM_NAME:
8444 if (remain < 1) 10119 if (remain < 1)
8445 return null; 10120 return new LSL_List();
8446 string primName = rules.GetLSLStringItem(idx++); 10121 try
8447 part.Name = primName; 10122 {
10123 string primName = rules.GetLSLStringItem(idx++);
10124 part.Name = primName;
10125 }
10126 catch(InvalidCastException)
10127 {
10128 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_NAME: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1));
10129 return new LSL_List();
10130 }
8448 break; 10131 break;
8449 case (int)ScriptBaseClass.PRIM_DESC: 10132 case ScriptBaseClass.PRIM_DESC:
8450 if (remain < 1) 10133 if (remain < 1)
8451 return null; 10134 return new LSL_List();
8452 string primDesc = rules.GetLSLStringItem(idx++); 10135 try
8453 part.Description = primDesc; 10136 {
10137 string primDesc = rules.GetLSLStringItem(idx++);
10138 part.Description = primDesc;
10139 }
10140 catch(InvalidCastException)
10141 {
10142 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_DESC: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1));
10143 return new LSL_List();
10144 }
8454 break; 10145 break;
8455 case (int)ScriptBaseClass.PRIM_ROT_LOCAL: 10146 case ScriptBaseClass.PRIM_ROT_LOCAL:
8456 if (remain < 1) 10147 if (remain < 1)
8457 return null; 10148 return new LSL_List();
8458 SetRot(part, rules.GetQuaternionItem(idx++)); 10149 LSL_Rotation rot;
10150 try
10151 {
10152 rot = rules.GetQuaternionItem(idx++);
10153 }
10154 catch(InvalidCastException)
10155 {
10156 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1));
10157 return new LSL_List();
10158 }
10159 SetRot(part, rot);
8459 break; 10160 break;
8460 case (int)ScriptBaseClass.PRIM_OMEGA: 10161
10162 case ScriptBaseClass.PRIM_OMEGA:
8461 if (remain < 3) 10163 if (remain < 3)
8462 return null; 10164 return new LSL_List();
8463 LSL_Vector axis = rules.GetVector3Item(idx++); 10165 LSL_Vector axis;
8464 LSL_Float spinrate = rules.GetLSLFloatItem(idx++); 10166 LSL_Float spinrate;
8465 LSL_Float gain = rules.GetLSLFloatItem(idx++); 10167 LSL_Float gain;
10168
10169 try
10170 {
10171 axis = rules.GetVector3Item(idx++);
10172 }
10173 catch(InvalidCastException)
10174 {
10175 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
10176 return new LSL_List();
10177 }
10178 try
10179 {
10180 spinrate = rules.GetLSLFloatItem(idx++);
10181 }
10182 catch(InvalidCastException)
10183 {
10184 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1));
10185 return new LSL_List();
10186 }
10187 try
10188 {
10189 gain = rules.GetLSLFloatItem(idx++);
10190 }
10191 catch(InvalidCastException)
10192 {
10193 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
10194 return new LSL_List();
10195 }
8466 TargetOmega(part, axis, (double)spinrate, (double)gain); 10196 TargetOmega(part, axis, (double)spinrate, (double)gain);
8467 break; 10197 break;
8468 case (int)ScriptBaseClass.PRIM_SLICE: 10198
10199 case ScriptBaseClass.PRIM_SLICE:
8469 if (remain < 1) 10200 if (remain < 1)
8470 return null; 10201 return new LSL_List();
8471 LSL_Vector slice = rules.GetVector3Item(idx++); 10202 LSL_Vector slice;
10203 try
10204 {
10205 slice = rules.GetVector3Item(idx++);
10206 }
10207 catch(InvalidCastException)
10208 {
10209 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SLICE: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
10210 return new LSL_List();
10211 }
8472 part.UpdateSlice((float)slice.x, (float)slice.y); 10212 part.UpdateSlice((float)slice.x, (float)slice.y);
8473 break; 10213 break;
8474 case (int)ScriptBaseClass.PRIM_LINK_TARGET: 10214
10215 case ScriptBaseClass.PRIM_LINK_TARGET:
8475 if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. 10216 if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless.
8476 return null; 10217 return new LSL_List();
8477 10218
8478 return rules.GetSublist(idx, -1); 10219 return rules.GetSublist(idx, -1);
10220
10221 default:
10222 Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - unsupported parameter", rulesParsed, idx - idxStart));
10223 return new LSL_List();
8479 } 10224 }
8480 } 10225 }
8481 } 10226 }
8482 catch (InvalidCastException e) 10227 catch (InvalidCastException e)
8483 { 10228 {
8484 ShoutError(string.Format( 10229 Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message);
8485 "{0} error running rule #{1}: arg #{2} ",
8486 originFunc, rulesParsed, idx - idxStart) + e.Message);
8487 } 10230 }
8488 finally 10231 finally
8489 { 10232 {
@@ -8506,7 +10249,118 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8506 } 10249 }
8507 } 10250 }
8508 } 10251 }
8509 return null; 10252
10253 return new LSL_List();
10254 }
10255
10256 protected LSL_List SetAgentParams(ScenePresence sp, LSL_List rules, string originFunc, ref uint rulesParsed)
10257 {
10258 int idx = 0;
10259 int idxStart = 0;
10260
10261 try
10262 {
10263 while (idx < rules.Length)
10264 {
10265 ++rulesParsed;
10266 int code = rules.GetLSLIntegerItem(idx++);
10267
10268 int remain = rules.Length - idx;
10269 idxStart = idx;
10270
10271 switch (code)
10272 {
10273 case ScriptBaseClass.PRIM_POSITION:
10274 case ScriptBaseClass.PRIM_POS_LOCAL:
10275 if (remain < 1)
10276 return new LSL_List();
10277
10278 try
10279 {
10280 sp.OffsetPosition = rules.GetVector3Item(idx++);
10281 }
10282 catch(InvalidCastException)
10283 {
10284 if (code == ScriptBaseClass.PRIM_POSITION)
10285 {
10286 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
10287 }
10288 else
10289 {
10290 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
10291 }
10292 return new LSL_List();
10293 }
10294 break;
10295
10296 case ScriptBaseClass.PRIM_ROTATION:
10297 if (remain < 1)
10298 return new LSL_List();
10299
10300 Quaternion inRot;
10301
10302 try
10303 {
10304 inRot = rules.GetQuaternionItem(idx++);
10305 }
10306 catch(InvalidCastException)
10307 {
10308 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1));
10309 return new LSL_List();
10310 }
10311
10312 SceneObjectPart parentPart = sp.ParentPart;
10313
10314 if (parentPart != null)
10315 sp.Rotation = m_host.GetWorldRotation() * inRot;
10316
10317 break;
10318
10319 case ScriptBaseClass.PRIM_ROT_LOCAL:
10320 if (remain < 1)
10321 return new LSL_List();
10322
10323 try
10324 {
10325 sp.Rotation = rules.GetQuaternionItem(idx++);
10326 }
10327 catch(InvalidCastException)
10328 {
10329 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1));
10330 return new LSL_List();
10331 }
10332
10333 break;
10334
10335 case ScriptBaseClass.PRIM_TYPE:
10336 Error(originFunc, "PRIM_TYPE disallowed on agent");
10337 return new LSL_List();
10338
10339 case ScriptBaseClass.PRIM_OMEGA:
10340 Error(originFunc, "PRIM_OMEGA disallowed on agent");
10341 return new LSL_List();
10342
10343 case ScriptBaseClass.PRIM_LINK_TARGET:
10344 if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless.
10345 return new LSL_List();
10346
10347 return rules.GetSublist(idx, -1);
10348
10349 default:
10350 Error(originFunc,
10351 string.Format("Error running rule #{0} on agent: arg #{1} - disallowed on agent", rulesParsed, idx - idxStart));
10352 return new LSL_List();
10353 }
10354 }
10355 }
10356 catch (InvalidCastException e)
10357 {
10358 Error(
10359 originFunc,
10360 string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message);
10361 }
10362
10363 return new LSL_List();
8510 } 10364 }
8511 10365
8512 public LSL_String llStringToBase64(string str) 10366 public LSL_String llStringToBase64(string str)
@@ -8514,14 +10368,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8514 m_host.AddScriptLPS(1); 10368 m_host.AddScriptLPS(1);
8515 try 10369 try
8516 { 10370 {
8517 byte[] encData_byte = new byte[str.Length]; 10371 byte[] encData_byte;
8518 encData_byte = Util.UTF8.GetBytes(str); 10372 encData_byte = Util.UTF8.GetBytes(str);
8519 string encodedData = Convert.ToBase64String(encData_byte); 10373 string encodedData = Convert.ToBase64String(encData_byte);
8520 return encodedData; 10374 return encodedData;
8521 } 10375 }
8522 catch (Exception e) 10376 catch
8523 { 10377 {
8524 throw new Exception("Error in base64Encode" + e.Message); 10378 Error("llBase64ToString", "Error encoding string");
10379 return String.Empty;
8525 } 10380 }
8526 } 10381 }
8527 10382
@@ -8530,16 +10385,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8530 m_host.AddScriptLPS(1); 10385 m_host.AddScriptLPS(1);
8531 try 10386 try
8532 { 10387 {
8533 return Util.Base64ToString(str); 10388 byte[] b = Convert.FromBase64String(str);
10389 return Encoding.UTF8.GetString(b);
8534 } 10390 }
8535 catch (Exception e) 10391 catch
8536 { 10392 {
8537 throw new Exception("Error in base64Decode" + e.Message); 10393 Error("llBase64ToString", "Error decoding string");
10394 return String.Empty;
8538 } 10395 }
8539 } 10396 }
8540 10397
8541 public LSL_String llXorBase64Strings(string str1, string str2) 10398 public LSL_String llXorBase64Strings(string str1, string str2)
8542 { 10399 {
10400<<<<<<< HEAD
10401 m_host.AddScriptLPS(1);
10402 Deprecated("llXorBase64Strings", "Use llXorBase64 instead");
10403 ScriptSleep(m_sleepMsOnXorBase64Strings);
10404 return String.Empty;
10405=======
8543 int padding = 0; 10406 int padding = 0;
8544 10407
8545 string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 10408 string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@@ -8638,12 +10501,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8638 output += "="; 10501 output += "=";
8639 10502
8640 return output; 10503 return output;
10504>>>>>>> avn/ubitvar
8641 } 10505 }
8642 10506
8643 public void llRemoteDataSetRegion() 10507 public void llRemoteDataSetRegion()
8644 { 10508 {
8645 m_host.AddScriptLPS(1); 10509 m_host.AddScriptLPS(1);
8646 Deprecated("llRemoteDataSetRegion"); 10510 Deprecated("llRemoteDataSetRegion", "Use llOpenRemoteDataChannel instead");
8647 } 10511 }
8648 10512
8649 public LSL_Float llLog10(double val) 10513 public LSL_Float llLog10(double val)
@@ -8684,7 +10548,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8684 10548
8685 land.SetMusicUrl(url); 10549 land.SetMusicUrl(url);
8686 10550
8687 ScriptSleep(2000); 10551 ScriptSleep(m_sleepMsOnSetParcelMusicURL);
8688 } 10552 }
8689 10553
8690 public LSL_String llGetParcelMusicURL() 10554 public LSL_String llGetParcelMusicURL()
@@ -8768,25 +10632,186 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8768 } 10632 }
8769 10633
8770 /// <summary> 10634 /// <summary>
8771 /// A partial implementation. 10635 /// Full implementation of llGetBoundingBox according to SL 2015-04-15.
10636 /// http://wiki.secondlife.com/wiki/LlGetBoundingBox
8772 /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetBoundingBox 10637 /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetBoundingBox
8773 /// So far only valid for standing/flying/ground sitting avatars and single prim objects. 10638 /// Returns local bounding box of avatar without attachments
8774 /// If the object has multiple prims and/or a sitting avatar then the bounding 10639 /// if target is non-seated avatar or prim/mesh in avatar attachment.
8775 /// box is for the root prim only. 10640 /// Returns local bounding box of object including seated avatars
10641 /// if target is seated avatar or prim/mesh in object.
10642 /// Uses meshing of prims for high accuracy
10643 /// or less accurate box models for speed.
8776 /// </summary> 10644 /// </summary>
8777 public LSL_List llGetBoundingBox(string obj) 10645 public LSL_List llGetBoundingBox(string obj)
8778 { 10646 {
8779 m_host.AddScriptLPS(1); 10647 m_host.AddScriptLPS(1);
10648
10649 // Get target avatar if non-seated avatar or attachment, or prim and object
8780 UUID objID = UUID.Zero; 10650 UUID objID = UUID.Zero;
10651 UUID.TryParse(obj, out objID);
10652 ScenePresence agent = World.GetScenePresence(objID);
10653 if (agent != null)
10654 {
10655 if (agent.ParentPart != null)
10656 {
10657 objID = agent.ParentPart.UUID;
10658 agent = null;
10659 }
10660 }
10661 SceneObjectGroup group = null;
10662 SceneObjectPart target = World.GetSceneObjectPart(objID);
10663 if (target != null)
10664 {
10665 group = target.ParentGroup;
10666 if (group.IsAttachment) {
10667 objID = group.AttachedAvatar;
10668 agent = World.GetScenePresence(objID);
10669 group = null;
10670 target = null;
10671 }
10672 }
10673
10674 // Initialize but break if no target
8781 LSL_List result = new LSL_List(); 10675 LSL_List result = new LSL_List();
10676<<<<<<< HEAD
10677 int groupCount = 0;
10678 int partCount = 0;
10679 int vertexCount = 0;
10680 if (target == null && agent == null)
10681=======
8782 10682
8783 // If the ID is not valid, return null result 10683 // If the ID is not valid, return null result
8784 if (!UUID.TryParse(obj, out objID)) 10684 if (!UUID.TryParse(obj, out objID))
10685>>>>>>> avn/ubitvar
8785 { 10686 {
8786 result.Add(new LSL_Vector()); 10687 result.Add(new LSL_Vector());
8787 result.Add(new LSL_Vector()); 10688 result.Add(new LSL_Vector());
10689 if (m_addStatsInGetBoundingBox)
10690 result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount));
10691 return result;
10692 }
10693<<<<<<< HEAD
10694 Vector3 minPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
10695 Vector3 maxPosition = new Vector3(float.MinValue, float.MinValue, float.MinValue);
10696
10697 // Try to get a mesher
10698 IRendering primMesher = null;
10699 List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory());
10700 if (renderers.Count > 0)
10701 primMesher = RenderingLoader.LoadRenderer(renderers[0]);
10702
10703 // Get bounding box of just avatar, seated or not
10704 if (agent != null)
10705 {
10706 bool hasParent = false;
10707 Vector3 lower;
10708 Vector3 upper;
10709 BoundingBoxOfScenePresence(agent, out lower, out upper);
10710 Vector3 offset = Vector3.Zero;
10711
10712 // Since local bounding box unrotated and untilted, keep it simple
10713 AddBoundingBoxOfSimpleBox(lower, upper, offset, agent.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10714 partCount++;
10715 groupCount++;
10716
10717 // Return lower and upper bounding box corners
10718 result.Add(new LSL_Vector(minPosition));
10719 result.Add(new LSL_Vector(maxPosition));
10720 if (m_addStatsInGetBoundingBox)
10721 result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount));
8788 return result; 10722 return result;
8789 } 10723 }
10724 // Get bounding box of object including seated avatars
10725 else if (group != null)
10726 {
10727 // Merge bounding boxes of all parts (prims and mesh)
10728 foreach (SceneObjectPart part in group.Parts)
10729 {
10730 bool hasParent = (!part.IsRoot);
10731 // When requested or if no mesher, keep it simple
10732 if (m_useSimpleBoxesInGetBoundingBox || primMesher == null)
10733 {
10734 AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10735 }
10736 // Do the full mounty
10737 else
10738 {
10739 Primitive omvPrim = part.Shape.ToOmvPrimitive(part.OffsetPosition, part.RotationOffset);
10740 byte[] sculptAsset = null;
10741 if (omvPrim.Sculpt != null)
10742 sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString());
10743
10744 // When part is mesh
10745 // Quirk: Only imports as incompletely populated faceted mesh object, so needs an own handler.
10746 if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null)
10747 {
10748 AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset);
10749 FacetedMesh mesh = null;
10750 FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, DetailLevel.Highest, out mesh);
10751 meshAsset = null;
10752 if (mesh != null)
10753 {
10754 AddBoundingBoxOfFacetedMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10755 mesh = null;
10756 }
10757 }
10758
10759 // When part is sculpt
10760 // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt.
10761 else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null)
10762 {
10763 IJ2KDecoder imgDecoder = World.RequestModuleInterface<IJ2KDecoder>();
10764 if (imgDecoder != null)
10765 {
10766 Image sculpt = imgDecoder.DecodeToImage(sculptAsset);
10767 if (sculpt != null)
10768 {
10769 SimpleMesh mesh = primMesher.GenerateSimpleSculptMesh(omvPrim, (Bitmap)sculpt, DetailLevel.Medium);
10770 sculpt.Dispose();
10771 if (mesh != null)
10772 {
10773 AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10774 mesh = null;
10775 }
10776 }
10777 }
10778 }
10779
10780 // When part is prim
10781 else if (omvPrim.Sculpt == null)
10782 {
10783 SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium);
10784 if (mesh != null)
10785 {
10786 AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10787 mesh = null;
10788 }
10789 }
10790
10791 // When all else fails, try fallback to simple box
10792 else
10793 {
10794 AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10795 }
10796 }
10797 partCount++;
10798 }
10799 }
10800
10801 // Merge bounding boxes of seated avatars
10802 foreach (ScenePresence sp in group.GetSittingAvatars())
10803 {
10804 Vector3 lower;
10805 Vector3 upper;
10806 BoundingBoxOfScenePresence(sp, out lower, out upper);
10807 Vector3 offset = sp.OffsetPosition;
10808
10809 bool hasParent = true;
10810 // When requested or if no mesher, keep it simple
10811 if (m_useSimpleBoxesInGetBoundingBox || primMesher == null)
10812 {
10813 AddBoundingBoxOfSimpleBox(lower, upper, offset, sp.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10814=======
8790 10815
8791 // Check if this is an attached prim. If so, replace 10816 // Check if this is an attached prim. If so, replace
8792 // the UUID with the avatar UUID and report it's bounding box 10817 // the UUID with the avatar UUID and report it's bounding box
@@ -8830,9 +10855,68 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8830 // This is for ground sitting avatars TODO! 10855 // This is for ground sitting avatars TODO!
8831 lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f); 10856 lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f);
8832 upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f); 10857 upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f);
10858>>>>>>> avn/ubitvar
8833 } 10859 }
10860 // Do the full mounty
8834 else 10861 else
8835 { 10862 {
10863<<<<<<< HEAD
10864 // Prim shapes don't do center offsets, so add it here.
10865 offset = offset + (lower + upper) * 0.5f * sp.Rotation;
10866 Primitive omvPrim = MakeOpenMetaversePrim(upper - lower, offset, sp.Rotation, ScriptBaseClass.PRIM_TYPE_SPHERE);
10867 SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium);
10868 AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount);
10869 mesh = null;
10870 }
10871 partCount++;
10872 }
10873
10874 groupCount++;
10875
10876 // Return lower and upper bounding box corners
10877 result.Add(new LSL_Vector(minPosition));
10878 result.Add(new LSL_Vector(maxPosition));
10879 if (m_addStatsInGetBoundingBox)
10880 result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount));
10881
10882 primMesher = null;
10883 return result;
10884 }
10885
10886 /// <summary>
10887 /// Helper to calculate bounding box of an avatar.
10888 /// </summary>
10889 private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper)
10890 {
10891 // Adjust from OS model
10892 // avatar height = visual height - 0.2, bounding box height = visual height
10893 // to SL model
10894 // avatar height = visual height, bounding box height = visual height + 0.2
10895 float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection;
10896
10897 // According to avatar bounding box in SL 2015-04-18:
10898 // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h>
10899 // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5>
10900 // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h>
10901
10902 // When avatar is sitting
10903 if (sp.ParentPart != null)
10904 {
10905 lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height);
10906 upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height);
10907 }
10908 // When avatar is groundsitting
10909 else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"])
10910 {
10911 lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height);
10912 upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height);
10913 }
10914 // When avatar is standing or flying
10915 else
10916 {
10917 lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height);
10918 upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height);
10919=======
8836 // This is for standing/flying avatars 10920 // This is for standing/flying avatars
8837 lower = new LSL_Vector(-box.X, -box.Y, -box.Z); 10921 lower = new LSL_Vector(-box.X, -box.Y, -box.Z);
8838 upper = new LSL_Vector(box.X, box.Y, box.Z); 10922 upper = new LSL_Vector(box.X, box.Y, box.Z);
@@ -8890,22 +10974,230 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8890 result.Add(lower); 10974 result.Add(lower);
8891 result.Add(upper); 10975 result.Add(upper);
8892 return result; 10976 return result;
10977>>>>>>> avn/ubitvar
8893 } 10978 }
10979 }
8894 10980
8895 // Not found so return empty values 10981 /// <summary>
8896 result.Add(new LSL_Vector()); 10982 /// Helper to approximate a part with a simple box.
8897 result.Add(new LSL_Vector()); 10983 /// </summary>
8898 return result; 10984 private void AddBoundingBoxOfSimpleBox(Vector3 corner1, Vector3 corner2, Vector3 offset, Quaternion rotation, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count)
10985 {
10986 // Parse the 8 box corners
10987 for (int i = 0; i < 8; i++)
10988 {
10989 // Calculate each box corner
10990 Vector3 position = corner1;
10991 if ((i & 1) != 0)
10992 position.X = corner2.X;
10993 if ((i & 2) != 0)
10994 position.Y = corner2.Y;
10995 if ((i & 4) != 0)
10996 position.Z = corner2.Z;
10997 // Rotate part unless part is root
10998 if (hasParent)
10999 position = position * rotation;
11000 position = position + offset;
11001 // Adjust lower and upper bounding box corners if needed
11002 lower = Vector3.Min(lower, position);
11003 upper = Vector3.Max(upper, position);
11004 count++;
11005 }
11006 }
11007
11008 /// <summary>
11009 /// Helper to parse a meshed prim and needed especially
11010 /// for accuracy with tortured prims and sculpts.
11011 /// </summary>
11012 private void AddBoundingBoxOfSimpleMesh(SimpleMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count)
11013 {
11014 // Quirk: A meshed box contains 10 instead of the 8 necessary vertices.
11015 if (mesh != null)
11016 {
11017 // Parse each vertex in mesh
11018 foreach (Vertex vertex in mesh.Vertices)
11019 {
11020 Vector3 position = vertex.Position;
11021 position = position * prim.Scale;
11022 // Rotate part unless part is root
11023 if (hasParent)
11024 position = position * prim.Rotation;
11025 position = position + prim.Position;
11026 // Adjust lower and upper bounding box corners if needed
11027 lower = Vector3.Min(lower, position);
11028 upper = Vector3.Max(upper, position);
11029 count++;
11030 }
11031 }
8899 } 11032 }
8900 11033
11034 /// <summary>
11035 /// Helper to parse mesh because no method exists
11036 /// to parse mesh assets to SimpleMesh.
11037 /// </summary>
11038 private void AddBoundingBoxOfFacetedMesh(FacetedMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count)
11039 {
11040 if (mesh != null)
11041 {
11042 // Parse each face in mesh
11043 // since vertex array isn't populated.
11044 // This parses each unique vertex 3-6 times.
11045 foreach (Face face in mesh.Faces)
11046 {
11047 // Parse each vertex in face
11048 foreach (Vertex vertex in face.Vertices)
11049 {
11050 Vector3 position = vertex.Position;
11051 position = position * prim.Scale;
11052 // Rotate part unless part is root
11053 if (hasParent)
11054 position = position * prim.Rotation;
11055 position = position + prim.Position;
11056 // Adjust lower and upper bounding box corners if needed
11057 lower = Vector3.Min(lower, position);
11058 upper = Vector3.Max(upper, position);
11059 count++;
11060 }
11061 }
11062 }
11063 }
11064
11065 /// <summary>
11066 /// Helper to make up an OpenMetaverse prim
11067 /// needed to create mesh from parts.
11068 /// </summary>
11069 private Primitive MakeOpenMetaversePrim(Vector3 scale, Vector3 position, Quaternion rotation, int primType)
11070 {
11071 // Initialize and set common parameters
11072 Primitive prim = new OpenMetaverse.Primitive();
11073 prim.Scale = scale;
11074 prim.Position = position;
11075 prim.Rotation = rotation;
11076 prim.PrimData.PathShearX = 0.0f;
11077 prim.PrimData.PathShearY = 0.0f;
11078 prim.PrimData.PathBegin = 0.0f;
11079 prim.PrimData.PathEnd = 1.0f;
11080 prim.PrimData.PathScaleX = 1.0f;
11081 prim.PrimData.PathScaleY = 1.0f;
11082 prim.PrimData.PathTaperX = 0.0f;
11083 prim.PrimData.PathTaperY = 0.0f;
11084 prim.PrimData.PathTwistBegin = 0.0f;
11085 prim.PrimData.PathTwist = 0.0f;
11086 prim.PrimData.ProfileBegin = 0.0f;
11087 prim.PrimData.ProfileEnd = 1.0f;
11088 prim.PrimData.ProfileHollow = 0.0f;
11089 prim.PrimData.ProfileCurve = (ProfileCurve)1;
11090 prim.PrimData.ProfileHole = (HoleType)0;
11091 prim.PrimData.PathCurve = (PathCurve)16;
11092 prim.PrimData.PathRadiusOffset = 0.0f;
11093 prim.PrimData.PathRevolutions = 1.0f;
11094 prim.PrimData.PathSkew = 0.0f;
11095 prim.PrimData.PCode = OpenMetaverse.PCode.Prim;
11096 prim.PrimData.State = (byte)0;
11097
11098 // Set type specific parameters
11099 switch (primType)
11100 {
11101 // Set specific parameters for box
11102 case ScriptBaseClass.PRIM_TYPE_BOX:
11103 prim.PrimData.PathScaleY = 1.0f;
11104 prim.PrimData.ProfileCurve = (ProfileCurve)1;
11105 prim.PrimData.PathCurve = (PathCurve)16;
11106 break;
11107 // Set specific parameters for cylinder
11108 case ScriptBaseClass.PRIM_TYPE_CYLINDER:
11109 prim.PrimData.PathScaleY = 1.0f;
11110 prim.PrimData.ProfileCurve = (ProfileCurve)0;
11111 prim.PrimData.PathCurve = (PathCurve)16;
11112 break;
11113 // Set specific parameters for prism
11114 case ScriptBaseClass.PRIM_TYPE_PRISM:
11115 prim.PrimData.PathScaleY = 1.0f;
11116 prim.PrimData.ProfileCurve = (ProfileCurve)3;
11117 prim.PrimData.PathCurve = (PathCurve)16;
11118 break;
11119 // Set specific parameters for sphere
11120 case ScriptBaseClass.PRIM_TYPE_SPHERE:
11121 prim.PrimData.PathScaleY = 1.0f;
11122 prim.PrimData.ProfileCurve = (ProfileCurve)5;
11123 prim.PrimData.PathCurve = (PathCurve)32;
11124 break;
11125 // Set specific parameters for torus
11126 case ScriptBaseClass.PRIM_TYPE_TORUS:
11127 prim.PrimData.PathScaleY = 0.5f;
11128 prim.PrimData.ProfileCurve = (ProfileCurve)0;
11129 prim.PrimData.PathCurve = (PathCurve)32;
11130 break;
11131 // Set specific parameters for tube
11132 case ScriptBaseClass.PRIM_TYPE_TUBE:
11133 prim.PrimData.PathScaleY = 0.5f;
11134 prim.PrimData.ProfileCurve = (ProfileCurve)1;
11135 prim.PrimData.PathCurve = (PathCurve)32;
11136 break;
11137 // Set specific parameters for ring
11138 case ScriptBaseClass.PRIM_TYPE_RING:
11139 prim.PrimData.PathScaleY = 0.5f;
11140 prim.PrimData.ProfileCurve = (ProfileCurve)3;
11141 prim.PrimData.PathCurve = (PathCurve)32;
11142 break;
11143 // Set specific parameters for sculpt
11144 case ScriptBaseClass.PRIM_TYPE_SCULPT:
11145 prim.PrimData.PathScaleY = 1.0f;
11146 prim.PrimData.ProfileCurve = (ProfileCurve)5;
11147 prim.PrimData.PathCurve = (PathCurve)32;
11148 break;
11149 // Default to specific parameters for box
11150 default:
11151 prim.PrimData.PathScaleY = 1.0f;
11152 prim.PrimData.ProfileCurve = (ProfileCurve)1;
11153 prim.PrimData.PathCurve = (PathCurve)16;
11154 break;
11155 }
11156
11157 return prim;
11158 }
11159
11160 /// <summary>
11161 /// Implementation of llGetGeometricCenter according to SL 2015-04-30.
11162 /// http://wiki.secondlife.com/wiki/LlGetGeometricCenter
11163 /// Returns the average position offset of all linked parts,
11164 /// including the root prim and seated avatars,
11165 /// relative to the root prim in local coordinates.
11166 /// </summary>
8901 public LSL_Vector llGetGeometricCenter() 11167 public LSL_Vector llGetGeometricCenter()
8902 { 11168 {
8903 return new LSL_Vector(m_host.GetGeometricCenter()); 11169 // Subtract whatever position the root prim has to make it zero
11170 Vector3 offset = m_host.ParentGroup.RootPart.OffsetPosition * -1.0f;
11171
11172 // Add all prim/part position offsets
11173 foreach (SceneObjectPart part in m_host.ParentGroup.Parts)
11174 offset = offset + part.OffsetPosition;
11175 // Add all avatar/scene presence position offsets
11176 foreach (ScenePresence sp in m_host.ParentGroup.GetSittingAvatars())
11177 offset = offset + sp.OffsetPosition;
11178
11179 // Calculate and return the average offset
11180 offset = offset / (float)(m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount());
11181 return new LSL_Vector(offset);
8904 } 11182 }
8905 11183
8906 public LSL_List llGetPrimitiveParams(LSL_List rules) 11184 public LSL_List llGetPrimitiveParams(LSL_List rules)
8907 { 11185 {
11186<<<<<<< HEAD
11187 LSL_List result = new LSL_List();
11188 LSL_List remaining;
11189
11190 while (true)
11191 {
11192// m_log.DebugFormat(
11193// "[LSL API]: GetEntityParams has {0} rules with scene entity named {1}",
11194// rules.Length, entity != null ? entity.Name : "NULL");
11195
11196 if (entity == null)
11197 return result;
11198=======
8908 m_host.AddScriptLPS(1); 11199 m_host.AddScriptLPS(1);
11200>>>>>>> avn/ubitvar
8909 11201
8910 LSL_List result = new LSL_List(); 11202 LSL_List result = new LSL_List();
8911 11203
@@ -8915,7 +11207,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8915 { 11207 {
8916 int linknumber = remaining.GetLSLIntegerItem(0); 11208 int linknumber = remaining.GetLSLIntegerItem(0);
8917 rules = remaining.GetSublist(1, -1); 11209 rules = remaining.GetSublist(1, -1);
11210<<<<<<< HEAD
11211 entity = GetLinkEntity(m_host, linknumber);
11212 }
11213 }
11214=======
8918 List<SceneObjectPart> parts = GetLinkParts(linknumber); 11215 List<SceneObjectPart> parts = GetLinkParts(linknumber);
11216>>>>>>> avn/ubitvar
8919 11217
8920 foreach (SceneObjectPart part in parts) 11218 foreach (SceneObjectPart part in parts)
8921 remaining = GetPrimParams(part, rules, ref result); 11219 remaining = GetPrimParams(part, rules, ref result);
@@ -8928,8 +11226,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8928 { 11226 {
8929 m_host.AddScriptLPS(1); 11227 m_host.AddScriptLPS(1);
8930 11228
11229<<<<<<< HEAD
11230 return GetEntityParams(GetLinkEntity(m_host, linknumber), rules);
11231 }
11232=======
8931 // acording to SL wiki this must indicate a single link number or link_root or link_this. 11233 // acording to SL wiki this must indicate a single link number or link_root or link_this.
8932 // keep other options as before 11234 // keep other options as before
11235>>>>>>> avn/ubitvar
8933 11236
8934 List<SceneObjectPart> parts; 11237 List<SceneObjectPart> parts;
8935 List<ScenePresence> avatars; 11238 List<ScenePresence> avatars;
@@ -8945,12 +11248,161 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8945 remaining = null; 11248 remaining = null;
8946 foreach (SceneObjectPart part in parts) 11249 foreach (SceneObjectPart part in parts)
8947 { 11250 {
11251<<<<<<< HEAD
11252 case (int)ScriptBaseClass.PRIM_MATERIAL:
11253 res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MATERIAL_FLESH));
11254 break;
11255
11256 case (int)ScriptBaseClass.PRIM_PHYSICS:
11257 res.Add(ScriptBaseClass.FALSE);
11258 break;
11259
11260 case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ:
11261 res.Add(ScriptBaseClass.FALSE);
11262 break;
11263
11264 case (int)ScriptBaseClass.PRIM_PHANTOM:
11265 res.Add(ScriptBaseClass.FALSE);
11266 break;
11267
11268 case (int)ScriptBaseClass.PRIM_POSITION:
11269 res.Add(new LSL_Vector(sp.AbsolutePosition));
11270 break;
11271
11272 case (int)ScriptBaseClass.PRIM_SIZE:
11273 res.Add(GetAgentSize(sp));
11274 break;
11275
11276 case (int)ScriptBaseClass.PRIM_ROTATION:
11277 res.Add(sp.GetWorldRotation());
11278 break;
11279
11280 case (int)ScriptBaseClass.PRIM_TYPE:
11281 res.Add(new LSL_Integer(ScriptBaseClass.PRIM_TYPE_BOX));
11282 res.Add(new LSL_Integer(ScriptBaseClass.PRIM_HOLE_DEFAULT));
11283 res.Add(new LSL_Vector(0, 1, 0));
11284 res.Add(new LSL_Float(0));
11285 res.Add(new LSL_Vector(0, 0, 0));
11286 res.Add(new LSL_Vector(1, 1, 0));
11287 res.Add(new LSL_Vector(0, 0, 0));
11288 break;
11289
11290 case (int)ScriptBaseClass.PRIM_TEXTURE:
11291 if (remain < 1)
11292 return new LSL_List();
11293
11294 int face = (int)rules.GetLSLIntegerItem(idx++);
11295 if (face > 21)
11296 break;
11297
11298 res.Add(new LSL_String(""));
11299 res.Add(ScriptBaseClass.ZERO_VECTOR);
11300 res.Add(ScriptBaseClass.ZERO_VECTOR);
11301 res.Add(new LSL_Float(0));
11302 break;
11303
11304 case (int)ScriptBaseClass.PRIM_COLOR:
11305 if (remain < 1)
11306 return new LSL_List();
11307
11308 face = (int)rules.GetLSLIntegerItem(idx++);
11309 if (face > 21)
11310 break;
11311
11312 res.Add(ScriptBaseClass.ZERO_VECTOR);
11313 res.Add(new LSL_Float(0));
11314 break;
11315
11316 case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
11317 if (remain < 1)
11318 return new LSL_List();
11319
11320 face = (int)rules.GetLSLIntegerItem(idx++);
11321 if (face > 21)
11322 break;
11323
11324 res.Add(ScriptBaseClass.PRIM_SHINY_NONE);
11325 res.Add(ScriptBaseClass.PRIM_BUMP_NONE);
11326 break;
11327
11328 case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
11329 if (remain < 1)
11330 return new LSL_List();
11331
11332 face = (int)rules.GetLSLIntegerItem(idx++);
11333 if (face > 21)
11334 break;
11335
11336 res.Add(ScriptBaseClass.FALSE);
11337 break;
11338
11339 case (int)ScriptBaseClass.PRIM_FLEXIBLE:
11340 res.Add(ScriptBaseClass.FALSE);
11341 res.Add(new LSL_Integer(0));
11342 res.Add(new LSL_Float(0));
11343 res.Add(new LSL_Float(0));
11344 res.Add(new LSL_Float(0));
11345 res.Add(new LSL_Float(0));
11346 res.Add(ScriptBaseClass.ZERO_VECTOR);
11347 break;
11348
11349 case (int)ScriptBaseClass.PRIM_TEXGEN:
11350 if (remain < 1)
11351 return new LSL_List();
11352
11353 face = (int)rules.GetLSLIntegerItem(idx++);
11354 if (face > 21)
11355 break;
11356
11357 res.Add(ScriptBaseClass.PRIM_TEXGEN_DEFAULT);
11358 break;
11359
11360 case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
11361 res.Add(ScriptBaseClass.FALSE);
11362 res.Add(ScriptBaseClass.ZERO_VECTOR);
11363 res.Add(ScriptBaseClass.ZERO_VECTOR);
11364 break;
11365
11366 case (int)ScriptBaseClass.PRIM_GLOW:
11367 if (remain < 1)
11368 return new LSL_List();
11369
11370 face = (int)rules.GetLSLIntegerItem(idx++);
11371 if (face > 21)
11372 break;
11373
11374 res.Add(new LSL_Float(0));
11375 break;
11376
11377 case (int)ScriptBaseClass.PRIM_TEXT:
11378 res.Add(new LSL_String(""));
11379 res.Add(ScriptBaseClass.ZERO_VECTOR);
11380 res.Add(new LSL_Float(1));
11381 break;
11382
11383 case (int)ScriptBaseClass.PRIM_ROT_LOCAL:
11384 res.Add(new LSL_Rotation(sp.Rotation));
11385 break;
11386
11387 case (int)ScriptBaseClass.PRIM_POS_LOCAL:
11388 res.Add(new LSL_Vector(sp.OffsetPosition));
11389 break;
11390
11391 case (int)ScriptBaseClass.PRIM_SLICE:
11392 res.Add(new LSL_Vector(0, 1, 0));
11393 break;
11394
11395 case (int)ScriptBaseClass.PRIM_LINK_TARGET:
11396 if(remain < 3)
11397 return new LSL_List();
11398=======
8948 remaining = GetPrimParams(part, rules, ref res); 11399 remaining = GetPrimParams(part, rules, ref res);
8949 } 11400 }
8950 foreach (ScenePresence avatar in avatars) 11401 foreach (ScenePresence avatar in avatars)
8951 { 11402 {
8952 remaining = GetPrimParams(avatar, rules, ref res); 11403 remaining = GetPrimParams(avatar, rules, ref res);
8953 } 11404 }
11405>>>>>>> avn/ubitvar
8954 11406
8955 if ((object)remaining != null && remaining.Length > 0) 11407 if ((object)remaining != null && remaining.Length > 0)
8956 { 11408 {
@@ -8961,7 +11413,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8961 break; 11413 break;
8962 } 11414 }
8963 11415
11416<<<<<<< HEAD
11417 return new LSL_List();
11418=======
8964 return res; 11419 return res;
11420>>>>>>> avn/ubitvar
8965 } 11421 }
8966 11422
8967 public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) 11423 public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res)
@@ -9014,6 +11470,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9014 res.Add(GetPartRot(part)); 11470 res.Add(GetPartRot(part));
9015 break; 11471 break;
9016 11472
11473 case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE:
11474 res.Add(new LSL_Integer((int)part.PhysicsShapeType));
11475 break;
11476
9017 case (int)ScriptBaseClass.PRIM_TYPE: 11477 case (int)ScriptBaseClass.PRIM_TYPE:
9018 // implementing box 11478 // implementing box
9019 PrimitiveBaseShape Shape = part.Shape; 11479 PrimitiveBaseShape Shape = part.Shape;
@@ -9101,7 +11561,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9101 11561
9102 case (int)ScriptBaseClass.PRIM_TEXTURE: 11562 case (int)ScriptBaseClass.PRIM_TEXTURE:
9103 if (remain < 1) 11563 if (remain < 1)
9104 return null; 11564 return new LSL_List();
9105 11565
9106 int face = (int)rules.GetLSLIntegerItem(idx++); 11566 int face = (int)rules.GetLSLIntegerItem(idx++);
9107 Primitive.TextureEntry tex = part.Shape.Textures; 11567 Primitive.TextureEntry tex = part.Shape.Textures;
@@ -9141,7 +11601,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9141 11601
9142 case (int)ScriptBaseClass.PRIM_COLOR: 11602 case (int)ScriptBaseClass.PRIM_COLOR:
9143 if (remain < 1) 11603 if (remain < 1)
9144 return null; 11604 return new LSL_List();
9145 11605
9146 face=(int)rules.GetLSLIntegerItem(idx++); 11606 face=(int)rules.GetLSLIntegerItem(idx++);
9147 11607
@@ -9170,7 +11630,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9170 11630
9171 case (int)ScriptBaseClass.PRIM_BUMP_SHINY: 11631 case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
9172 if (remain < 1) 11632 if (remain < 1)
9173 return null; 11633 return new LSL_List();
9174 11634
9175 face = (int)rules.GetLSLIntegerItem(idx++); 11635 face = (int)rules.GetLSLIntegerItem(idx++);
9176 11636
@@ -9227,7 +11687,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9227 11687
9228 case (int)ScriptBaseClass.PRIM_FULLBRIGHT: 11688 case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
9229 if (remain < 1) 11689 if (remain < 1)
9230 return null; 11690 return new LSL_List();
9231 11691
9232 face = (int)rules.GetLSLIntegerItem(idx++); 11692 face = (int)rules.GetLSLIntegerItem(idx++);
9233 11693
@@ -9282,7 +11742,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9282 case (int)ScriptBaseClass.PRIM_TEXGEN: 11742 case (int)ScriptBaseClass.PRIM_TEXGEN:
9283 // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) 11743 // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR)
9284 if (remain < 1) 11744 if (remain < 1)
9285 return null; 11745 return new LSL_List();
9286 11746
9287 face = (int)rules.GetLSLIntegerItem(idx++); 11747 face = (int)rules.GetLSLIntegerItem(idx++);
9288 11748
@@ -9331,7 +11791,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9331 11791
9332 case (int)ScriptBaseClass.PRIM_GLOW: 11792 case (int)ScriptBaseClass.PRIM_GLOW:
9333 if (remain < 1) 11793 if (remain < 1)
9334 return null; 11794 return new LSL_List();
9335 11795
9336 face = (int)rules.GetLSLIntegerItem(idx++); 11796 face = (int)rules.GetLSLIntegerItem(idx++);
9337 11797
@@ -9358,7 +11818,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9358 res.Add(new LSL_Vector(textColor.R, 11818 res.Add(new LSL_Vector(textColor.R,
9359 textColor.G, 11819 textColor.G,
9360 textColor.B)); 11820 textColor.B));
9361 res.Add(new LSL_Float(textColor.A)); 11821 res.Add(new LSL_Float(1.0 - textColor.A));
9362 break; 11822 break;
9363 11823
9364 case (int)ScriptBaseClass.PRIM_NAME: 11824 case (int)ScriptBaseClass.PRIM_NAME:
@@ -9388,26 +11848,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9388 11848
9389 // TODO: Should be issuing a runtime script warning in this case. 11849 // TODO: Should be issuing a runtime script warning in this case.
9390 if (remain < 2) 11850 if (remain < 2)
9391 return null; 11851 return new LSL_List();
9392 11852
9393 return rules.GetSublist(idx, -1); 11853 return rules.GetSublist(idx, -1);
9394 } 11854 }
9395 } 11855 }
9396 11856
9397 return null; 11857 return new LSL_List();
9398 } 11858 }
9399 11859
9400 public LSL_List llGetPrimMediaParams(int face, LSL_List rules) 11860 public LSL_List llGetPrimMediaParams(int face, LSL_List rules)
9401 { 11861 {
9402 m_host.AddScriptLPS(1); 11862 m_host.AddScriptLPS(1);
9403 ScriptSleep(1000); 11863 ScriptSleep(m_sleepMsOnGetPrimMediaParams);
9404 return GetPrimMediaParams(m_host, face, rules); 11864 return GetPrimMediaParams(m_host, face, rules);
9405 } 11865 }
9406 11866
9407 public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) 11867 public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
9408 { 11868 {
9409 m_host.AddScriptLPS(1); 11869 m_host.AddScriptLPS(1);
9410 ScriptSleep(1000); 11870 ScriptSleep(m_sleepMsOnGetLinkMedia);
9411 if (link == ScriptBaseClass.LINK_ROOT) 11871 if (link == ScriptBaseClass.LINK_ROOT)
9412 return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); 11872 return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
9413 else if (link == ScriptBaseClass.LINK_THIS) 11873 else if (link == ScriptBaseClass.LINK_THIS)
@@ -9527,14 +11987,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9527 public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules) 11987 public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules)
9528 { 11988 {
9529 m_host.AddScriptLPS(1); 11989 m_host.AddScriptLPS(1);
9530 ScriptSleep(1000); 11990 ScriptSleep(m_sleepMsOnSetPrimMediaParams);
9531 return SetPrimMediaParams(m_host, face, rules); 11991 return SetPrimMediaParams(m_host, face, rules);
9532 } 11992 }
9533 11993
9534 public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) 11994 public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
9535 { 11995 {
9536 m_host.AddScriptLPS(1); 11996 m_host.AddScriptLPS(1);
9537 ScriptSleep(1000); 11997 ScriptSleep(m_sleepMsOnSetLinkMedia);
9538 if (link == ScriptBaseClass.LINK_ROOT) 11998 if (link == ScriptBaseClass.LINK_ROOT)
9539 return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); 11999 return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
9540 else if (link == ScriptBaseClass.LINK_THIS) 12000 else if (link == ScriptBaseClass.LINK_THIS)
@@ -9653,14 +12113,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9653 public LSL_Integer llClearPrimMedia(LSL_Integer face) 12113 public LSL_Integer llClearPrimMedia(LSL_Integer face)
9654 { 12114 {
9655 m_host.AddScriptLPS(1); 12115 m_host.AddScriptLPS(1);
9656 ScriptSleep(1000); 12116 ScriptSleep(m_sleepMsOnClearPrimMedia);
9657 return ClearPrimMedia(m_host, face); 12117 return ClearPrimMedia(m_host, face);
9658 } 12118 }
9659 12119
9660 public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face) 12120 public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face)
9661 { 12121 {
9662 m_host.AddScriptLPS(1); 12122 m_host.AddScriptLPS(1);
9663 ScriptSleep(1000); 12123 ScriptSleep(m_sleepMsOnClearLinkMedia);
9664 if (link == ScriptBaseClass.LINK_ROOT) 12124 if (link == ScriptBaseClass.LINK_ROOT)
9665 return ClearPrimMedia(m_host.ParentGroup.RootPart, face); 12125 return ClearPrimMedia(m_host.ParentGroup.RootPart, face);
9666 else if (link == ScriptBaseClass.LINK_THIS) 12126 else if (link == ScriptBaseClass.LINK_THIS)
@@ -10268,7 +12728,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10268 12728
10269 if (item == null) 12729 if (item == null)
10270 { 12730 {
10271 llSay(0, "No item name '" + item + "'"); 12731 Error("llGetInventoryCreator", "Can't find item '" + item + "'");
10272 12732
10273 return String.Empty; 12733 return String.Empty;
10274 } 12734 }
@@ -10316,7 +12776,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10316 case ScriptBaseClass.DATA_SIM_POS: 12776 case ScriptBaseClass.DATA_SIM_POS:
10317 if (info == null) 12777 if (info == null)
10318 { 12778 {
10319 ScriptSleep(1000); 12779 ScriptSleep(m_sleepMsOnRequestSimulatorData);
10320 return UUID.Zero.ToString(); 12780 return UUID.Zero.ToString();
10321 } 12781 }
10322 12782
@@ -10363,7 +12823,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10363 case ScriptBaseClass.DATA_SIM_RATING: 12823 case ScriptBaseClass.DATA_SIM_RATING:
10364 if (info == null) 12824 if (info == null)
10365 { 12825 {
10366 ScriptSleep(1000); 12826 ScriptSleep(m_sleepMsOnRequestSimulatorData);
10367 return UUID.Zero.ToString(); 12827 return UUID.Zero.ToString();
10368 } 12828 }
10369 int access = info.Maturity; 12829 int access = info.Maturity;
@@ -10382,7 +12842,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10382 reply = "OpenSim"; 12842 reply = "OpenSim";
10383 break; 12843 break;
10384 default: 12844 default:
10385 ScriptSleep(1000); 12845 ScriptSleep(m_sleepMsOnRequestSimulatorData);
10386 return UUID.Zero.ToString(); // Raise no event 12846 return UUID.Zero.ToString(); // Raise no event
10387 } 12847 }
10388 UUID rq = UUID.Random(); 12848 UUID rq = UUID.Random();
@@ -10393,7 +12853,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10393 AsyncCommands. 12853 AsyncCommands.
10394 DataserverPlugin.DataserverReply(rq.ToString(), reply); 12854 DataserverPlugin.DataserverReply(rq.ToString(), reply);
10395 12855
10396 ScriptSleep(1000); 12856 ScriptSleep(m_sleepMsOnRequestSimulatorData);
10397 return tid.ToString(); 12857 return tid.ToString();
10398 } 12858 }
10399 catch(Exception) 12859 catch(Exception)
@@ -10462,7 +12922,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10462 12922
10463 public LSL_List llListReplaceList(LSL_List dest, LSL_List src, int start, int end) 12923 public LSL_List llListReplaceList(LSL_List dest, LSL_List src, int start, int end)
10464 { 12924 {
10465 LSL_List pref = null; 12925 LSL_List pref;
10466 12926
10467 m_host.AddScriptLPS(1); 12927 m_host.AddScriptLPS(1);
10468 12928
@@ -10542,7 +13002,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10542 dm.SendUrlToUser( 13002 dm.SendUrlToUser(
10543 new UUID(avatar_id), m_host.Name, m_host.UUID, m_host.OwnerID, false, message, url); 13003 new UUID(avatar_id), m_host.Name, m_host.UUID, m_host.OwnerID, false, message, url);
10544 13004
10545 ScriptSleep(10000); 13005 ScriptSleep(m_sleepMsOnLoadURL);
10546 } 13006 }
10547 13007
10548 public void llParcelMediaCommandList(LSL_List commandList) 13008 public void llParcelMediaCommandList(LSL_List commandList)
@@ -10591,7 +13051,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10591 presence = World.GetScenePresence(agentID); 13051 presence = World.GetScenePresence(agentID);
10592 } 13052 }
10593 } 13053 }
10594 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_AGENT must be a key"); 13054 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AGENT must be a key");
10595 ++i; 13055 ++i;
10596 } 13056 }
10597 break; 13057 break;
@@ -10622,7 +13082,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10622 url = (LSL_String)commandList.Data[i + 1]; 13082 url = (LSL_String)commandList.Data[i + 1];
10623 update = true; 13083 update = true;
10624 } 13084 }
10625 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_URL must be a string."); 13085 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_URL must be a string");
10626 ++i; 13086 ++i;
10627 } 13087 }
10628 break; 13088 break;
@@ -10635,7 +13095,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10635 texture = (LSL_String)commandList.Data[i + 1]; 13095 texture = (LSL_String)commandList.Data[i + 1];
10636 update = true; 13096 update = true;
10637 } 13097 }
10638 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_TEXTURE must be a string or key."); 13098 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TEXTURE must be a string or a key");
10639 ++i; 13099 ++i;
10640 } 13100 }
10641 break; 13101 break;
@@ -10647,7 +13107,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10647 { 13107 {
10648 time = (float)(LSL_Float)commandList.Data[i + 1]; 13108 time = (float)(LSL_Float)commandList.Data[i + 1];
10649 } 13109 }
10650 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_TIME must be a float."); 13110 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TIME must be a float");
10651 ++i; 13111 ++i;
10652 } 13112 }
10653 break; 13113 break;
@@ -10661,7 +13121,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10661 update = true; 13121 update = true;
10662 } 13122 }
10663 13123
10664 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_AUTO_ALIGN must be an integer."); 13124 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AUTO_ALIGN must be an integer");
10665 ++i; 13125 ++i;
10666 } 13126 }
10667 break; 13127 break;
@@ -10674,7 +13134,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10674 mediaType = (LSL_String)commandList.Data[i + 1]; 13134 mediaType = (LSL_String)commandList.Data[i + 1];
10675 update = true; 13135 update = true;
10676 } 13136 }
10677 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_TYPE must be a string."); 13137 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TYPE must be a string");
10678 ++i; 13138 ++i;
10679 } 13139 }
10680 break; 13140 break;
@@ -10687,7 +13147,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10687 description = (LSL_String)commandList.Data[i + 1]; 13147 description = (LSL_String)commandList.Data[i + 1];
10688 update = true; 13148 update = true;
10689 } 13149 }
10690 else ShoutError("The argument of PARCEL_MEDIA_COMMAND_DESC must be a string."); 13150 else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_DESC must be a string");
10691 ++i; 13151 ++i;
10692 } 13152 }
10693 break; 13153 break;
@@ -10703,15 +13163,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10703 height = (LSL_Integer)commandList.Data[i + 2]; 13163 height = (LSL_Integer)commandList.Data[i + 2];
10704 update = true; 13164 update = true;
10705 } 13165 }
10706 else ShoutError("The second argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer."); 13166 else Error("llParcelMediaCommandList", "The second argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer");
10707 } 13167 }
10708 else ShoutError("The first argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer."); 13168 else Error("llParcelMediaCommandList", "The first argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer");
10709 i += 2; 13169 i += 2;
10710 } 13170 }
10711 break; 13171 break;
10712 13172
10713 default: 13173 default:
10714 NotImplemented("llParcelMediaCommandList parameter not supported yet: " + Enum.Parse(typeof(ParcelMediaCommandEnum), commandList.Data[i].ToString()).ToString()); 13174 NotImplemented("llParcelMediaCommandList", "Parameter not supported yet: " + Enum.Parse(typeof(ParcelMediaCommandEnum), commandList.Data[i].ToString()).ToString());
10715 break; 13175 break;
10716 }//end switch 13176 }//end switch
10717 }//end for 13177 }//end for
@@ -10785,7 +13245,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10785 time); 13245 time);
10786 } 13246 }
10787 } 13247 }
10788 ScriptSleep(2000); 13248 ScriptSleep(m_sleepMsOnParcelMediaCommandList);
10789 } 13249 }
10790 13250
10791 public LSL_List llParcelMediaQuery(LSL_List aList) 13251 public LSL_List llParcelMediaQuery(LSL_List aList)
@@ -10819,13 +13279,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10819 break; 13279 break;
10820 default: 13280 default:
10821 ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; 13281 ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
10822 NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString()); 13282 NotImplemented("llParcelMediaQuery", "Parameter not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString());
10823 break; 13283 break;
10824 } 13284 }
10825 13285
10826 } 13286 }
10827 } 13287 }
10828 ScriptSleep(2000); 13288 ScriptSleep(m_sleepMsOnParcelMediaQuery);
10829 return list; 13289 return list;
10830 } 13290 }
10831 13291
@@ -10834,7 +13294,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10834 m_host.AddScriptLPS(1); 13294 m_host.AddScriptLPS(1);
10835 Int64 tmp = 0; 13295 Int64 tmp = 0;
10836 Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp); 13296 Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp);
10837 ScriptSleep(1000); 13297 ScriptSleep(m_sleepMsOnModPow);
10838 return Convert.ToInt32(tmp); 13298 return Convert.ToInt32(tmp);
10839 } 13299 }
10840 13300
@@ -10856,11 +13316,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10856 13316
10857 if (quick_pay_buttons.Data.Length < 4) 13317 if (quick_pay_buttons.Data.Length < 4)
10858 { 13318 {
13319<<<<<<< HEAD
13320 Error("llSetPayPrice", "List must have at least 4 elements");
13321 return;
13322=======
10859 int x; 13323 int x;
10860 for (x=quick_pay_buttons.Data.Length; x<= 4; x++) 13324 for (x=quick_pay_buttons.Data.Length; x<= 4; x++)
10861 { 13325 {
10862 quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE); 13326 quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE);
10863 } 13327 }
13328>>>>>>> avn/ubitvar
10864 } 13329 }
10865 int[] nPrice = new int[5]; 13330 int[] nPrice = new int[5];
10866 nPrice[0] = price; 13331 nPrice[0] = price;
@@ -10881,7 +13346,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10881 13346
10882 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) 13347 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
10883 { 13348 {
10884 ShoutError("No permissions to track the camera"); 13349 Error("llGetCameraPos", "No permissions to track the camera");
10885 return Vector3.Zero; 13350 return Vector3.Zero;
10886 } 13351 }
10887 13352
@@ -10905,7 +13370,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10905 13370
10906 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) 13371 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
10907 { 13372 {
10908 ShoutError("No permissions to track the camera"); 13373 Error("llGetCameraRot", "No permissions to track the camera");
10909 return Quaternion.Identity; 13374 return Quaternion.Identity;
10910 } 13375 }
10911 13376
@@ -10919,25 +13384,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10919 return Quaternion.Identity; 13384 return Quaternion.Identity;
10920 } 13385 }
10921 13386
10922 /// <summary>
10923 /// The SL implementation does nothing, it is deprecated
10924 /// This duplicates SL
10925 /// </summary>
10926 public void llSetPrimURL(string url) 13387 public void llSetPrimURL(string url)
10927 { 13388 {
10928 m_host.AddScriptLPS(1); 13389 m_host.AddScriptLPS(1);
10929 ScriptSleep(2000); 13390 Deprecated("llSetPrimURL", "Use llSetPrimMediaParams instead");
13391 ScriptSleep(m_sleepMsOnSetPrimURL);
10930 } 13392 }
10931 13393
10932 /// <summary>
10933 /// The SL implementation shouts an error, it is deprecated
10934 /// This duplicates SL
10935 /// </summary>
10936 public void llRefreshPrimURL() 13394 public void llRefreshPrimURL()
10937 { 13395 {
10938 m_host.AddScriptLPS(1); 13396 m_host.AddScriptLPS(1);
10939 ShoutError("llRefreshPrimURL - not yet supported"); 13397 Deprecated("llRefreshPrimURL");
10940 ScriptSleep(20000); 13398 ScriptSleep(m_sleepMsOnRefreshPrimURL);
10941 } 13399 }
10942 13400
10943 public LSL_String llEscapeURL(string url) 13401 public LSL_String llEscapeURL(string url)
@@ -10989,8 +13447,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10989 avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, 13447 avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name,
10990 simname, pos, lookAt); 13448 simname, pos, lookAt);
10991 } 13449 }
13450<<<<<<< HEAD
13451 ScriptSleep(m_sleepMsOnMapDestination);
13452=======
10992 13453
10993 ScriptSleep(1000); 13454 ScriptSleep(1000);
13455>>>>>>> avn/ubitvar
10994 } 13456 }
10995 13457
10996 public void llAddToLandBanList(string avatar, double hours) 13458 public void llAddToLandBanList(string avatar, double hours)
@@ -11031,7 +13493,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11031 World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); 13493 World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
11032 } 13494 }
11033 } 13495 }
11034 ScriptSleep(100); 13496 ScriptSleep(m_sleepMsOnAddToLandBanList);
11035 } 13497 }
11036 13498
11037 public void llRemoveFromLandPassList(string avatar) 13499 public void llRemoveFromLandPassList(string avatar)
@@ -11058,7 +13520,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11058 } 13520 }
11059 } 13521 }
11060 } 13522 }
11061 ScriptSleep(100); 13523 ScriptSleep(m_sleepMsOnRemoveFromLandPassList);
11062 } 13524 }
11063 13525
11064 public void llRemoveFromLandBanList(string avatar) 13526 public void llRemoveFromLandBanList(string avatar)
@@ -11085,7 +13547,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11085 } 13547 }
11086 } 13548 }
11087 } 13549 }
11088 ScriptSleep(100); 13550 ScriptSleep(m_sleepMsOnRemoveFromLandBanList);
11089 } 13551 }
11090 13552
11091 public void llSetCameraParams(LSL_List rules) 13553 public void llSetCameraParams(LSL_List rules)
@@ -11115,7 +13577,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11115 object[] data = rules.Data; 13577 object[] data = rules.Data;
11116 for (int i = 0; i < data.Length; ++i) 13578 for (int i = 0; i < data.Length; ++i)
11117 { 13579 {
13580<<<<<<< HEAD
13581 int type;
13582 try
13583 {
13584 type = Convert.ToInt32(data[i++].ToString());
13585 }
13586 catch
13587 {
13588 Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1]));
13589 return;
13590 }
13591=======
11118 int type = Convert.ToInt32(data[i++].ToString()); 13592 int type = Convert.ToInt32(data[i++].ToString());
13593>>>>>>> avn/ubitvar
11119 if (i >= data.Length) break; // odd number of entries => ignore the last 13594 if (i >= data.Length) break; // odd number of entries => ignore the last
11120 13595
11121 // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) 13596 // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3)
@@ -11125,9 +13600,63 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11125 case ScriptBaseClass.CAMERA_FOCUS_OFFSET: 13600 case ScriptBaseClass.CAMERA_FOCUS_OFFSET:
11126 case ScriptBaseClass.CAMERA_POSITION: 13601 case ScriptBaseClass.CAMERA_POSITION:
11127 LSL_Vector v = (LSL_Vector)data[i]; 13602 LSL_Vector v = (LSL_Vector)data[i];
11128 parameters.Add(type + 1, (float)v.x); 13603 try
11129 parameters.Add(type + 2, (float)v.y); 13604 {
11130 parameters.Add(type + 3, (float)v.z); 13605 parameters.Add(type + 1, (float)v.x);
13606 }
13607 catch
13608 {
13609 switch(type)
13610 {
13611 case ScriptBaseClass.CAMERA_FOCUS:
13612 Error("llSetCameraParams", "CAMERA_FOCUS: Parameter x is invalid");
13613 return;
13614 case ScriptBaseClass.CAMERA_FOCUS_OFFSET:
13615 Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter x is invalid");
13616 return;
13617 case ScriptBaseClass.CAMERA_POSITION:
13618 Error("llSetCameraParams", "CAMERA_POSITION: Parameter x is invalid");
13619 return;
13620 }
13621 }
13622 try
13623 {
13624 parameters.Add(type + 2, (float)v.y);
13625 }
13626 catch
13627 {
13628 switch(type)
13629 {
13630 case ScriptBaseClass.CAMERA_FOCUS:
13631 Error("llSetCameraParams", "CAMERA_FOCUS: Parameter y is invalid");
13632 return;
13633 case ScriptBaseClass.CAMERA_FOCUS_OFFSET:
13634 Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter y is invalid");
13635 return;
13636 case ScriptBaseClass.CAMERA_POSITION:
13637 Error("llSetCameraParams", "CAMERA_POSITION: Parameter y is invalid");
13638 return;
13639 }
13640 }
13641 try
13642 {
13643 parameters.Add(type + 3, (float)v.z);
13644 }
13645 catch
13646 {
13647 switch(type)
13648 {
13649 case ScriptBaseClass.CAMERA_FOCUS:
13650 Error("llSetCameraParams", "CAMERA_FOCUS: Parameter z is invalid");
13651 return;
13652 case ScriptBaseClass.CAMERA_FOCUS_OFFSET:
13653 Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter z is invalid");
13654 return;
13655 case ScriptBaseClass.CAMERA_POSITION:
13656 Error("llSetCameraParams", "CAMERA_POSITION: Parameter z is invalid");
13657 return;
13658 }
13659 }
11131 break; 13660 break;
11132 default: 13661 default:
11133 // TODO: clean that up as soon as the implicit casts are in 13662 // TODO: clean that up as soon as the implicit casts are in
@@ -11135,7 +13664,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11135 parameters.Add(type, (float)((LSL_Float)data[i]).value); 13664 parameters.Add(type, (float)((LSL_Float)data[i]).value);
11136 else if (data[i] is LSL_Integer) 13665 else if (data[i] is LSL_Integer)
11137 parameters.Add(type, (float)((LSL_Integer)data[i]).value); 13666 parameters.Add(type, (float)((LSL_Integer)data[i]).value);
11138 else parameters.Add(type, Convert.ToSingle(data[i])); 13667 else
13668 {
13669 try
13670 {
13671 parameters.Add(type, Convert.ToSingle(data[i]));
13672 }
13673 catch
13674 {
13675 Error("llSetCameraParams", string.Format("{0}: Parameter is invalid", type));
13676 }
13677 }
11139 break; 13678 break;
11140 } 13679 }
11141 } 13680 }
@@ -11306,7 +13845,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11306 if (!ok || flag < 0 || 13845 if (!ok || flag < 0 ||
11307 flag > (int)HttpRequestConstants.HTTP_PRAGMA_NO_CACHE) 13846 flag > (int)HttpRequestConstants.HTTP_PRAGMA_NO_CACHE)
11308 { 13847 {
11309 throw new ScriptException("Parameter " + i.ToString() + " is an invalid flag"); 13848 Error("llHTTPRequest", "Parameter " + i.ToString() + " is an invalid flag");
11310 } 13849 }
11311 13850
11312 param.Add(parameters.Data[i].ToString()); //Add parameter flag 13851 param.Add(parameters.Data[i].ToString()); //Add parameter flag
@@ -11330,12 +13869,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11330 { 13869 {
11331 //There must be at least one name/value pair for custom header 13870 //There must be at least one name/value pair for custom header
11332 if (count == 1) 13871 if (count == 1)
11333 throw new ScriptException("Missing name/value for custom header at parameter " + i.ToString()); 13872 Error("llHTTPRequest", "Missing name/value for custom header at parameter " + i.ToString());
11334 break; 13873 break;
11335 } 13874 }
11336 13875
11337 if (HttpStandardHeaders.Contains(parameters.Data[i].ToString(), StringComparer.OrdinalIgnoreCase)) 13876 if (HttpStandardHeaders.Contains(parameters.Data[i].ToString(), StringComparer.OrdinalIgnoreCase))
11338 throw new ScriptException("Name is invalid as a custom header at parameter " + i.ToString()); 13877 Error("llHTTPRequest", "Name is invalid as a custom header at parameter " + i.ToString());
11339 13878
11340 param.Add(parameters.Data[i].ToString()); 13879 param.Add(parameters.Data[i].ToString());
11341 param.Add(parameters.Data[i+1].ToString()); 13880 param.Add(parameters.Data[i+1].ToString());
@@ -11458,8 +13997,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11458 } 13997 }
11459 } 13998 }
11460 13999
14000 HttpInitialRequestStatus status;
11461 UUID reqID 14001 UUID reqID
11462 = httpScriptMod.StartHttpRequest(m_host.LocalId, m_item.ItemID, url, param, httpHeaders, body); 14002 = httpScriptMod.StartHttpRequest(m_host.LocalId, m_item.ItemID, url, param, httpHeaders, body, out status);
14003
14004 if (status == HttpInitialRequestStatus.DISALLOWED_BY_FILTER)
14005 Error("llHttpRequest", string.Format("Request to {0} disallowed by filter", url));
11463 14006
11464 if (reqID != UUID.Zero) 14007 if (reqID != UUID.Zero)
11465 return reqID.ToString(); 14008 return reqID.ToString();
@@ -11493,7 +14036,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11493 } 14036 }
11494 } 14037 }
11495 } 14038 }
11496 ScriptSleep(100); 14039 ScriptSleep(m_sleepMsOnResetLandBanList);
11497 } 14040 }
11498 14041
11499 public void llResetLandPassList() 14042 public void llResetLandPassList()
@@ -11510,7 +14053,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11510 } 14053 }
11511 } 14054 }
11512 } 14055 }
11513 ScriptSleep(100); 14056 ScriptSleep(m_sleepMsOnResetLandPassList);
11514 } 14057 }
11515 14058
11516 public LSL_Integer llGetParcelPrimCount(LSL_Vector pos, int category, int sim_wide) 14059 public LSL_Integer llGetParcelPrimCount(LSL_Vector pos, int category, int sim_wide)
@@ -11568,7 +14111,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11568 ret.Add(new LSL_Integer(detectedParams.Value)); 14111 ret.Add(new LSL_Integer(detectedParams.Value));
11569 } 14112 }
11570 } 14113 }
11571 ScriptSleep(2000); 14114 ScriptSleep(m_sleepMsOnGetParcelPrimOwners);
11572 return ret; 14115 return ret;
11573 } 14116 }
11574 14117
@@ -11699,8 +14242,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11699 ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W)); 14242 ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W));
11700 break; 14243 break;
11701 case ScriptBaseClass.OBJECT_VELOCITY: 14244 case ScriptBaseClass.OBJECT_VELOCITY:
14245<<<<<<< HEAD
14246 ret.Add(new LSL_Vector(av.GetWorldVelocity()));
14247=======
11702 Vector3 avvel = av.Velocity; 14248 Vector3 avvel = av.Velocity;
11703 ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); 14249 ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z));
14250>>>>>>> avn/ubitvar
11704 break; 14251 break;
11705 case ScriptBaseClass.OBJECT_OWNER: 14252 case ScriptBaseClass.OBJECT_OWNER:
11706 ret.Add(new LSL_String(id)); 14253 ret.Add(new LSL_String(id));
@@ -11765,6 +14312,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11765 case ScriptBaseClass.OBJECT_TEMP_ON_REZ: 14312 case ScriptBaseClass.OBJECT_TEMP_ON_REZ:
11766 ret.Add(new LSL_Integer(0)); 14313 ret.Add(new LSL_Integer(0));
11767 break; 14314 break;
14315 case ScriptBaseClass.OBJECT_RENDER_WEIGHT:
14316 ret.Add(new LSL_Integer(-1));
14317 break;
14318 case ScriptBaseClass.OBJECT_HOVER_HEIGHT:
14319 ret.Add(new LSL_Float(0));
14320 break;
14321 case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE:
14322 LSL_Float shapeType;
14323 if (av.Appearance.VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MALE] != 0)
14324 shapeType = new LSL_Float(1);
14325 else
14326 shapeType = new LSL_Float(0);
14327 ret.Add(shapeType);
14328 break;
14329 case ScriptBaseClass.OBJECT_LAST_OWNER_ID:
14330 ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY));
14331 break;
11768 default: 14332 default:
11769 // Invalid or unhandled constant. 14333 // Invalid or unhandled constant.
11770 ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); 14334 ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL));
@@ -11793,20 +14357,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11793 ret.Add(new LSL_Vector(opos.X, opos.Y, opos.Z)); 14357 ret.Add(new LSL_Vector(opos.X, opos.Y, opos.Z));
11794 break; 14358 break;
11795 case ScriptBaseClass.OBJECT_ROT: 14359 case ScriptBaseClass.OBJECT_ROT:
14360 Quaternion rot = Quaternion.Identity;
14361
14362 if (obj.ParentGroup.IsAttachment)
11796 { 14363 {
11797 Quaternion rot = Quaternion.Identity; 14364 ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar);
11798 14365
14366 if (sp != null)
14367 rot = sp.GetWorldRotation();
14368 }
14369 else
14370 {
11799 if (obj.ParentGroup.RootPart == obj) 14371 if (obj.ParentGroup.RootPart == obj)
11800 rot = obj.ParentGroup.GroupRotation; 14372 rot = obj.ParentGroup.GroupRotation;
11801 else 14373 else
11802 rot = obj.GetWorldRotation(); 14374 rot = obj.GetWorldRotation();
11803
11804 LSL_Rotation objrot = new LSL_Rotation(rot);
11805 ret.Add(objrot);
11806 } 14375 }
14376
14377 LSL_Rotation objrot = new LSL_Rotation(rot);
14378 ret.Add(objrot);
14379
11807 break; 14380 break;
11808 case ScriptBaseClass.OBJECT_VELOCITY: 14381 case ScriptBaseClass.OBJECT_VELOCITY:
11809 ret.Add(new LSL_Vector(obj.Velocity)); 14382 Vector3 vel = Vector3.Zero;
14383
14384 if (obj.ParentGroup.IsAttachment)
14385 {
14386 ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar);
14387
14388 if (sp != null)
14389 vel = sp.GetWorldVelocity();
14390 }
14391 else
14392 {
14393 vel = obj.Velocity;
14394 }
14395
14396 ret.Add(vel);
11810 break; 14397 break;
11811 case ScriptBaseClass.OBJECT_OWNER: 14398 case ScriptBaseClass.OBJECT_OWNER:
11812 ret.Add(new LSL_String(obj.OwnerID.ToString())); 14399 ret.Add(new LSL_String(obj.OwnerID.ToString()));
@@ -11902,6 +14489,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11902 case ScriptBaseClass.OBJECT_TEMP_ON_REZ: 14489 case ScriptBaseClass.OBJECT_TEMP_ON_REZ:
11903 ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0)); 14490 ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0));
11904 break; 14491 break;
14492 case ScriptBaseClass.OBJECT_RENDER_WEIGHT:
14493 ret.Add(new LSL_Integer(0));
14494 break;
14495 case ScriptBaseClass.OBJECT_HOVER_HEIGHT:
14496 ret.Add(new LSL_Float(0));
14497 break;
14498 case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE:
14499 ret.Add(new LSL_Float(-1));
14500 break;
14501 case ScriptBaseClass.OBJECT_LAST_OWNER_ID:
14502 ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString()));
14503 break;
11905 default: 14504 default:
11906 // Invalid or unhandled constant. 14505 // Invalid or unhandled constant.
11907 ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); 14506 ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL));
@@ -11926,25 +14525,71 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11926 return item.ItemID; 14525 return item.ItemID;
11927 } 14526 }
11928 14527
11929 internal void ShoutError(string msg) 14528 /// <summary>
14529 /// Reports the script error in the viewer's Script Warning/Error dialog and shouts it on the debug channel.
14530 /// </summary>
14531 /// <param name="command">The name of the command that generated the error.</param>
14532 /// <param name="message">The error message to report to the user.</param>
14533 internal void Error(string command, string message)
11930 { 14534 {
11931 llShout(ScriptBaseClass.DEBUG_CHANNEL, msg); 14535 string text = command + ": " + message;
14536 if (text.Length > 1023)
14537 {
14538 text = text.Substring(0, 1023);
14539 }
14540
14541 World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, ScriptBaseClass.DEBUG_CHANNEL,
14542 m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false);
14543
14544 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
14545 if (wComm != null)
14546 {
14547 wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, text);
14548 }
11932 } 14549 }
11933 14550
11934 internal void NotImplemented(string command) 14551 /// <summary>
14552 /// Reports that the command is not implemented as a script error.
14553 /// </summary>
14554 /// <param name="command">The name of the command that is not implemented.</param>
14555 /// <param name="message">Additional information to report to the user. (Optional)</param>
14556 internal void NotImplemented(string command, string message = "")
11935 { 14557 {
11936 if (throwErrorOnNotImplemented) 14558 if (throwErrorOnNotImplemented)
11937 throw new NotImplementedException("Command not implemented: " + command); 14559 {
11938 } 14560 if (message != "")
14561 {
14562 message = " - " + message;
14563 }
11939 14564
11940 internal void Deprecated(string command) 14565 throw new NotImplementedException("Command not implemented: " + command + message);
11941 { 14566 }
11942 throw new ScriptException("Command deprecated: " + command); 14567 else
14568 {
14569 string text = "Command not implemented";
14570 if (message != "")
14571 {
14572 text = text + " - " + message;
14573 }
14574
14575 Error(command, text);
14576 }
11943 } 14577 }
11944 14578
11945 internal void LSLError(string msg) 14579 /// <summary>
14580 /// Reports that the command is deprecated as a script error.
14581 /// </summary>
14582 /// <param name="command">The name of the command that is deprecated.</param>
14583 /// <param name="message">Additional information to report to the user. (Optional)</param>
14584 internal void Deprecated(string command, string message = "")
11946 { 14585 {
11947 throw new ScriptException("LSL Runtime Error: " + msg); 14586 string text = "Command deprecated";
14587 if (message != "")
14588 {
14589 text = text + " - " + message;
14590 }
14591
14592 Error(command, text);
11948 } 14593 }
11949 14594
11950 public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); 14595 public delegate void AssetRequestCallback(UUID assetID, AssetBase asset);
@@ -11976,7 +14621,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11976 if (assetID == UUID.Zero) 14621 if (assetID == UUID.Zero)
11977 { 14622 {
11978 // => complain loudly, as specified by the LSL docs 14623 // => complain loudly, as specified by the LSL docs
11979 ShoutError("Notecard '" + name + "' could not be found."); 14624 Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'");
11980 14625
11981 return UUID.Zero.ToString(); 14626 return UUID.Zero.ToString();
11982 } 14627 }
@@ -11990,7 +14635,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11990 { 14635 {
11991 AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString()); 14636 AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString());
11992 14637
11993 ScriptSleep(100); 14638 ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines);
11994 return tid.ToString(); 14639 return tid.ToString();
11995 } 14640 }
11996 14641
@@ -11998,17 +14643,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11998 { 14643 {
11999 if (a == null || a.Type != 7) 14644 if (a == null || a.Type != 7)
12000 { 14645 {
12001 ShoutError("Notecard '" + name + "' could not be found."); 14646 Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'");
12002 return; 14647 return;
12003 } 14648 }
12004 14649
12005 string data = Encoding.UTF8.GetString(a.Data); 14650 NotecardCache.Cache(id, a.Data);
12006 //m_log.Debug(data);
12007 NotecardCache.Cache(id, data);
12008 AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString()); 14651 AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString());
12009 }); 14652 });
12010 14653
12011 ScriptSleep(100); 14654 ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines);
12012 return tid.ToString(); 14655 return tid.ToString();
12013 } 14656 }
12014 14657
@@ -12029,7 +14672,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12029 if (assetID == UUID.Zero) 14672 if (assetID == UUID.Zero)
12030 { 14673 {
12031 // => complain loudly, as specified by the LSL docs 14674 // => complain loudly, as specified by the LSL docs
12032 ShoutError("Notecard '" + name + "' could not be found."); 14675 Error("llGetNotecardLine", "Can't find notecard '" + name + "'");
12033 14676
12034 return UUID.Zero.ToString(); 14677 return UUID.Zero.ToString();
12035 } 14678 }
@@ -12044,7 +14687,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12044 AsyncCommands.DataserverPlugin.DataserverReply( 14687 AsyncCommands.DataserverPlugin.DataserverReply(
12045 reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); 14688 reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
12046 14689
12047 ScriptSleep(100); 14690 ScriptSleep(m_sleepMsOnGetNotecardLine);
12048 return tid.ToString(); 14691 return tid.ToString();
12049 } 14692 }
12050 14693
@@ -12052,18 +14695,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12052 { 14695 {
12053 if (a == null || a.Type != 7) 14696 if (a == null || a.Type != 7)
12054 { 14697 {
12055 ShoutError("Notecard '" + name + "' could not be found."); 14698 Error("llGetNotecardLine", "Can't find notecard '" + name + "'");
12056 return; 14699 return;
12057 } 14700 }
12058 14701
12059 string data = Encoding.UTF8.GetString(a.Data); 14702 string data = Encoding.UTF8.GetString(a.Data);
12060 //m_log.Debug(data); 14703 //m_log.Debug(data);
12061 NotecardCache.Cache(id, data); 14704 NotecardCache.Cache(id, a.Data);
12062 AsyncCommands.DataserverPlugin.DataserverReply( 14705 AsyncCommands.DataserverPlugin.DataserverReply(
12063 reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); 14706 reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
12064 }); 14707 });
12065 14708
12066 ScriptSleep(100); 14709 ScriptSleep(m_sleepMsOnGetNotecardLine);
12067 return tid.ToString(); 14710 return tid.ToString();
12068 } 14711 }
12069 14712
@@ -12076,41 +14719,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12076 if (obj.OwnerID != m_host.OwnerID) 14719 if (obj.OwnerID != m_host.OwnerID)
12077 return; 14720 return;
12078 14721
12079 uint rulesParsed = 0; 14722 SetEntityParams(new List<ISceneEntity>() { obj }, rules, originFunc);
12080 LSL_List remaining = SetPrimParams(obj, rules, originFunc, ref rulesParsed);
12081
12082 while ((object)remaining != null && remaining.Length > 2)
12083 {
12084 LSL_Integer newLink = remaining.GetLSLIntegerItem(0);
12085 LSL_List newrules = remaining.GetSublist(1, -1);
12086 foreach(SceneObjectPart part in GetLinkParts(obj, newLink)){
12087 remaining = SetPrimParams(part, newrules, originFunc, ref rulesParsed);
12088 }
12089 }
12090 } 14723 }
12091 14724
12092 public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) 14725 public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules)
12093 { 14726 {
12094 SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); 14727 SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim));
12095 14728
12096 LSL_List result = new LSL_List();
12097
12098 if (obj != null && obj.OwnerID == m_host.OwnerID) 14729 if (obj != null && obj.OwnerID == m_host.OwnerID)
12099 { 14730 return GetEntityParams(obj, rules);
12100 LSL_List remaining = GetPrimParams(obj, rules, ref result);
12101
12102 while (remaining != null && remaining.Length > 2)
12103 {
12104 int linknumber = remaining.GetLSLIntegerItem(0);
12105 rules = remaining.GetSublist(1, -1);
12106 List<SceneObjectPart> parts = GetLinkParts(linknumber);
12107
12108 foreach (SceneObjectPart part in parts)
12109 remaining = GetPrimParams(part, rules, ref result);
12110 }
12111 }
12112 14731
12113 return result; 14732 return new LSL_List();
12114 } 14733 }
12115 14734
12116 public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) 14735 public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link)
@@ -12478,6 +15097,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12478 15097
12479 public LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options) 15098 public LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options)
12480 { 15099 {
15100 // Use llCastRay V3 if configured
15101 if (m_useCastRayV3)
15102 return llCastRayV3(start, end, options);
15103
12481 LSL_List list = new LSL_List(); 15104 LSL_List list = new LSL_List();
12482 15105
12483 m_host.AddScriptLPS(1); 15106 m_host.AddScriptLPS(1);
@@ -12679,6 +15302,872 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12679 return list; 15302 return list;
12680 } 15303 }
12681 15304
15305 /// <summary>
15306 /// Implementation of llCastRay similar to SL 2015-04-21.
15307 /// http://wiki.secondlife.com/wiki/LlCastRay
15308 /// Uses pure geometry, bounding shapes, meshing and no physics
15309 /// for prims, sculpts, meshes, avatars and terrain.
15310 /// Implements all flags, reject types and data flags.
15311 /// Can handle both objects/groups and prims/parts, by config.
15312 /// May sometimes be inaccurate owing to calculation precision,
15313 /// meshing detail level and a bug in libopenmetaverse PrimMesher.
15314 /// </summary>
15315 public LSL_List llCastRayV3(LSL_Vector start, LSL_Vector end, LSL_List options)
15316 {
15317 m_host.AddScriptLPS(1);
15318 LSL_List result = new LSL_List();
15319
15320 // Prepare throttle data
15321 int calledMs = Environment.TickCount;
15322 Stopwatch stopWatch = new Stopwatch();
15323 stopWatch.Start();
15324 UUID regionId = World.RegionInfo.RegionID;
15325 UUID userId = UUID.Zero;
15326 int msAvailable = 0;
15327 // Throttle per owner when attachment or "vehicle" (sat upon)
15328 if (m_host.ParentGroup.IsAttachment || m_host.ParentGroup.GetSittingAvatars().Count > 0)
15329 {
15330 userId = m_host.OwnerID;
15331 msAvailable = m_msPerAvatarInCastRay;
15332 }
15333 // Throttle per parcel when not attachment or vehicle
15334 else
15335 {
15336 LandData land = World.GetLandData(m_host.GetWorldPosition());
15337 if (land != null)
15338 msAvailable = m_msPerRegionInCastRay * land.Area / 65536;
15339 }
15340 // Clamp for "oversized" parcels on varregions
15341 if (msAvailable > m_msMaxInCastRay)
15342 msAvailable = m_msMaxInCastRay;
15343
15344 // Check throttle data
15345 int fromCalledMs = calledMs - m_msThrottleInCastRay;
15346 lock (m_castRayCalls)
15347 {
15348 for (int i = m_castRayCalls.Count - 1; i >= 0; i--)
15349 {
15350 // Delete old calls from throttle data
15351 if (m_castRayCalls[i].CalledMs < fromCalledMs)
15352 m_castRayCalls.RemoveAt(i);
15353 // Use current region (in multi-region sims)
15354 else if (m_castRayCalls[i].RegionId == regionId)
15355 {
15356 // Reduce available time with recent calls
15357 if (m_castRayCalls[i].UserId == userId)
15358 msAvailable -= m_castRayCalls[i].UsedMs;
15359 }
15360 }
15361 }
15362
15363 // Return failure if not enough available time
15364 if (msAvailable < m_msMinInCastRay)
15365 {
15366 result.Add(new LSL_Integer(ScriptBaseClass.RCERR_CAST_TIME_EXCEEDED));
15367 return result;
15368 }
15369
15370 // Initialize
15371 List<RayHit> rayHits = new List<RayHit>();
15372 float tol = m_floatToleranceInCastRay;
15373 Vector3 pos1Ray = start;
15374 Vector3 pos2Ray = end;
15375
15376 // Get input options
15377 int rejectTypes = 0;
15378 int dataFlags = 0;
15379 int maxHits = 1;
15380 bool detectPhantom = false;
15381 for (int i = 0; i < options.Length; i += 2)
15382 {
15383 if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_REJECT_TYPES)
15384 rejectTypes = options.GetLSLIntegerItem(i + 1);
15385 else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DATA_FLAGS)
15386 dataFlags = options.GetLSLIntegerItem(i + 1);
15387 else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_MAX_HITS)
15388 maxHits = options.GetLSLIntegerItem(i + 1);
15389 else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DETECT_PHANTOM)
15390 detectPhantom = (options.GetLSLIntegerItem(i + 1) != 0);
15391 }
15392 if (maxHits > m_maxHitsInCastRay)
15393 maxHits = m_maxHitsInCastRay;
15394 bool rejectAgents = ((rejectTypes & ScriptBaseClass.RC_REJECT_AGENTS) != 0);
15395 bool rejectPhysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) != 0);
15396 bool rejectNonphysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_NONPHYSICAL) != 0);
15397 bool rejectLand = ((rejectTypes & ScriptBaseClass.RC_REJECT_LAND) != 0);
15398 bool getNormal = ((dataFlags & ScriptBaseClass.RC_GET_NORMAL) != 0);
15399 bool getRootKey = ((dataFlags & ScriptBaseClass.RC_GET_ROOT_KEY) != 0);
15400 bool getLinkNum = ((dataFlags & ScriptBaseClass.RC_GET_LINK_NUM) != 0);
15401
15402 // Calculate some basic parameters
15403 Vector3 vecRay = pos2Ray - pos1Ray;
15404 float rayLength = vecRay.Length();
15405
15406 // Try to get a mesher and return failure if none, degenerate ray, or max 0 hits
15407 IRendering primMesher = null;
15408 List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory());
15409 if (renderers.Count < 1 || rayLength < tol || m_maxHitsInCastRay < 1)
15410 {
15411 result.Add(new LSL_Integer(ScriptBaseClass.RCERR_UNKNOWN));
15412 return result;
15413 }
15414 primMesher = RenderingLoader.LoadRenderer(renderers[0]);
15415
15416 // Iterate over all objects/groups and prims/parts in region
15417 World.ForEachSOG(
15418 delegate(SceneObjectGroup group)
15419 {
15420 // Check group filters unless part filters are configured
15421 bool isPhysical = (group.RootPart != null && group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical);
15422 bool isNonphysical = !isPhysical;
15423 bool isPhantom = group.IsPhantom || group.IsVolumeDetect;
15424 bool isAttachment = group.IsAttachment;
15425 bool doGroup = true;
15426 if (isPhysical && rejectPhysical)
15427 doGroup = false;
15428 if (isNonphysical && rejectNonphysical)
15429 doGroup = false;
15430 if (isPhantom && detectPhantom)
15431 doGroup = true;
15432 if (m_filterPartsInCastRay)
15433 doGroup = true;
15434 if (isAttachment && !m_doAttachmentsInCastRay)
15435 doGroup = false;
15436 // Parse object/group if passed filters
15437 if (doGroup)
15438 {
15439 // Iterate over all prims/parts in object/group
15440 foreach(SceneObjectPart part in group.Parts)
15441 {
15442 // Check part filters if configured
15443 if (m_filterPartsInCastRay)
15444 {
15445 isPhysical = (part.PhysActor != null && part.PhysActor.IsPhysical);
15446 isNonphysical = !isPhysical;
15447 isPhantom = ((part.Flags & PrimFlags.Phantom) != 0) || (part.VolumeDetectActive);
15448 bool doPart = true;
15449 if (isPhysical && rejectPhysical)
15450 doPart = false;
15451 if (isNonphysical && rejectNonphysical)
15452 doPart = false;
15453 if (isPhantom && detectPhantom)
15454 doPart = true;
15455 if (!doPart)
15456 continue;
15457 }
15458
15459 // Parse prim/part and project ray if passed filters
15460 Vector3 scalePart = part.Scale;
15461 Vector3 posPart = part.GetWorldPosition();
15462 Quaternion rotPart = part.GetWorldRotation();
15463 Quaternion rotPartInv = Quaternion.Inverse(rotPart);
15464 Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart;
15465 Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart;
15466
15467 // Filter parts by shape bounding boxes
15468 Vector3 shapeBoxMax = new Vector3(0.5f, 0.5f, 0.5f);
15469 if (!part.Shape.SculptEntry)
15470 shapeBoxMax = shapeBoxMax * (new Vector3(m_primSafetyCoeffX, m_primSafetyCoeffY, m_primSafetyCoeffZ));
15471 shapeBoxMax = shapeBoxMax + (new Vector3(tol, tol, tol));
15472 if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax))
15473 {
15474 // Prepare data needed to check for ray hits
15475 RayTrans rayTrans = new RayTrans();
15476 rayTrans.PartId = part.UUID;
15477 rayTrans.GroupId = part.ParentGroup.UUID;
15478 rayTrans.Link = group.PrimCount > 1 ? part.LinkNum : 0;
15479 rayTrans.ScalePart = scalePart;
15480 rayTrans.PositionPart = posPart;
15481 rayTrans.RotationPart = rotPart;
15482 rayTrans.ShapeNeedsEnds = true;
15483 rayTrans.Position1Ray = pos1Ray;
15484 rayTrans.Position1RayProj = pos1RayProj;
15485 rayTrans.VectorRayProj = pos2RayProj - pos1RayProj;
15486
15487 // Get detail level depending on type
15488 int lod = 0;
15489 // Mesh detail level
15490 if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh)
15491 lod = (int)m_meshLodInCastRay;
15492 // Sculpt detail level
15493 else if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh)
15494 lod = (int)m_sculptLodInCastRay;
15495 // Shape detail level
15496 else if (!part.Shape.SculptEntry)
15497 lod = (int)m_primLodInCastRay;
15498
15499 // Try to get cached mesh if configured
15500 ulong meshKey = 0;
15501 FacetedMesh mesh = null;
15502 if (m_useMeshCacheInCastRay)
15503 {
15504 meshKey = part.Shape.GetMeshKey(Vector3.One, (float)(4 << lod));
15505 lock (m_cachedMeshes)
15506 {
15507 m_cachedMeshes.TryGetValue(meshKey, out mesh);
15508 }
15509 }
15510
15511 // Create mesh if no cached mesh
15512 if (mesh == null)
15513 {
15514 // Make an OMV prim to be able to mesh part
15515 Primitive omvPrim = part.Shape.ToOmvPrimitive(posPart, rotPart);
15516 byte[] sculptAsset = null;
15517 if (omvPrim.Sculpt != null)
15518 sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString());
15519
15520 // When part is mesh, get mesh
15521 if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null)
15522 {
15523 AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset);
15524 FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, m_meshLodInCastRay, out mesh);
15525 meshAsset = null;
15526 }
15527
15528 // When part is sculpt, create mesh
15529 // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt.
15530 else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null)
15531 {
15532 IJ2KDecoder imgDecoder = World.RequestModuleInterface<IJ2KDecoder>();
15533 if (imgDecoder != null)
15534 {
15535 Image sculpt = imgDecoder.DecodeToImage(sculptAsset);
15536 if (sculpt != null)
15537 {
15538 mesh = primMesher.GenerateFacetedSculptMesh(omvPrim, (Bitmap)sculpt, m_sculptLodInCastRay);
15539 sculpt.Dispose();
15540 }
15541 }
15542 }
15543
15544 // When part is shape, create mesh
15545 else if (omvPrim.Sculpt == null)
15546 {
15547 if (
15548 omvPrim.PrimData.PathBegin == 0.0 && omvPrim.PrimData.PathEnd == 1.0 &&
15549 omvPrim.PrimData.PathTaperX == 0.0 && omvPrim.PrimData.PathTaperY == 0.0 &&
15550 omvPrim.PrimData.PathSkew == 0.0 &&
15551 omvPrim.PrimData.PathTwist - omvPrim.PrimData.PathTwistBegin == 0.0
15552 )
15553 rayTrans.ShapeNeedsEnds = false;
15554 mesh = primMesher.GenerateFacetedMesh(omvPrim, m_primLodInCastRay);
15555 }
15556
15557 // Cache mesh if configured
15558 if (m_useMeshCacheInCastRay && mesh != null)
15559 {
15560 lock(m_cachedMeshes)
15561 {
15562 if (!m_cachedMeshes.ContainsKey(meshKey))
15563 m_cachedMeshes.Add(meshKey, mesh);
15564 }
15565 }
15566 }
15567 // Check mesh for ray hits
15568 AddRayInFacetedMesh(mesh, rayTrans, ref rayHits);
15569 mesh = null;
15570 }
15571 }
15572 }
15573 }
15574 );
15575
15576 // Check avatar filter
15577 if (!rejectAgents)
15578 {
15579 // Iterate over all avatars in region
15580 World.ForEachRootScenePresence(
15581 delegate (ScenePresence sp)
15582 {
15583 // Get bounding box
15584 Vector3 lower;
15585 Vector3 upper;
15586 BoundingBoxOfScenePresence(sp, out lower, out upper);
15587 // Parse avatar
15588 Vector3 scalePart = upper - lower;
15589 Vector3 posPart = sp.AbsolutePosition;
15590 Quaternion rotPart = sp.GetWorldRotation();
15591 Quaternion rotPartInv = Quaternion.Inverse(rotPart);
15592 posPart = posPart + (lower + upper) * 0.5f * rotPart;
15593 // Project ray
15594 Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart;
15595 Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart;
15596
15597 // Filter avatars by shape bounding boxes
15598 Vector3 shapeBoxMax = new Vector3(0.5f + tol, 0.5f + tol, 0.5f + tol);
15599 if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax))
15600 {
15601 // Prepare data needed to check for ray hits
15602 RayTrans rayTrans = new RayTrans();
15603 rayTrans.PartId = sp.UUID;
15604 rayTrans.GroupId = sp.ParentPart != null ? sp.ParentPart.ParentGroup.UUID : sp.UUID;
15605 rayTrans.Link = sp.ParentPart != null ? UUID2LinkNumber(sp.ParentPart, sp.UUID) : 0;
15606 rayTrans.ScalePart = scalePart;
15607 rayTrans.PositionPart = posPart;
15608 rayTrans.RotationPart = rotPart;
15609 rayTrans.ShapeNeedsEnds = false;
15610 rayTrans.Position1Ray = pos1Ray;
15611 rayTrans.Position1RayProj = pos1RayProj;
15612 rayTrans.VectorRayProj = pos2RayProj - pos1RayProj;
15613
15614 // Try to get cached mesh if configured
15615 PrimitiveBaseShape prim = PrimitiveBaseShape.CreateSphere();
15616 int lod = (int)m_avatarLodInCastRay;
15617 ulong meshKey = prim.GetMeshKey(Vector3.One, (float)(4 << lod));
15618 FacetedMesh mesh = null;
15619 if (m_useMeshCacheInCastRay)
15620 {
15621 lock (m_cachedMeshes)
15622 {
15623 m_cachedMeshes.TryGetValue(meshKey, out mesh);
15624 }
15625 }
15626
15627 // Create mesh if no cached mesh
15628 if (mesh == null)
15629 {
15630 // Make OMV prim and create mesh
15631 prim.Scale = scalePart;
15632 Primitive omvPrim = prim.ToOmvPrimitive(posPart, rotPart);
15633 mesh = primMesher.GenerateFacetedMesh(omvPrim, m_avatarLodInCastRay);
15634
15635 // Cache mesh if configured
15636 if (m_useMeshCacheInCastRay && mesh != null)
15637 {
15638 lock(m_cachedMeshes)
15639 {
15640 if (!m_cachedMeshes.ContainsKey(meshKey))
15641 m_cachedMeshes.Add(meshKey, mesh);
15642 }
15643 }
15644 }
15645
15646 // Check mesh for ray hits
15647 AddRayInFacetedMesh(mesh, rayTrans, ref rayHits);
15648 mesh = null;
15649 }
15650 }
15651 );
15652 }
15653
15654 // Check terrain filter
15655 if (!rejectLand)
15656 {
15657 // Parse terrain
15658
15659 // Mesh terrain and check bounding box
15660 Vector3 lower;
15661 Vector3 upper;
15662 List<Tri> triangles = TrisFromHeightmapUnderRay(pos1Ray, pos2Ray, out lower, out upper);
15663 lower.Z -= tol;
15664 upper.Z += tol;
15665 if ((pos1Ray.Z >= lower.Z || pos2Ray.Z >= lower.Z) && (pos1Ray.Z <= upper.Z || pos2Ray.Z <= upper.Z))
15666 {
15667 // Prepare data needed to check for ray hits
15668 RayTrans rayTrans = new RayTrans();
15669 rayTrans.PartId = UUID.Zero;
15670 rayTrans.GroupId = UUID.Zero;
15671 rayTrans.Link = 0;
15672 rayTrans.ScalePart = new Vector3 (1.0f, 1.0f, 1.0f);
15673 rayTrans.PositionPart = Vector3.Zero;
15674 rayTrans.RotationPart = Quaternion.Identity;
15675 rayTrans.ShapeNeedsEnds = true;
15676 rayTrans.Position1Ray = pos1Ray;
15677 rayTrans.Position1RayProj = pos1Ray;
15678 rayTrans.VectorRayProj = vecRay;
15679
15680 // Check mesh
15681 AddRayInTris(triangles, rayTrans, ref rayHits);
15682 triangles = null;
15683 }
15684 }
15685
15686 // Sort hits by ascending distance
15687 rayHits.Sort((s1, s2) => s1.Distance.CompareTo(s2.Distance));
15688
15689 // Check excess hits per part and group
15690 for (int t = 0; t < 2; t++)
15691 {
15692 int maxHitsPerType = 0;
15693 UUID id = UUID.Zero;
15694 if (t == 0)
15695 maxHitsPerType = m_maxHitsPerPrimInCastRay;
15696 else
15697 maxHitsPerType = m_maxHitsPerObjectInCastRay;
15698
15699 // Handle excess hits only when needed
15700 if (maxHitsPerType < m_maxHitsInCastRay)
15701 {
15702 // Find excess hits
15703 Hashtable hits = new Hashtable();
15704 for (int i = rayHits.Count - 1; i >= 0; i--)
15705 {
15706 if (t == 0)
15707 id = rayHits[i].PartId;
15708 else
15709 id = rayHits[i].GroupId;
15710 if (hits.ContainsKey(id))
15711 hits[id] = (int)hits[id] + 1;
15712 else
15713 hits[id] = 1;
15714 }
15715
15716 // Remove excess hits
15717 for (int i = rayHits.Count - 1; i >= 0; i--)
15718 {
15719 if (t == 0)
15720 id = rayHits[i].PartId;
15721 else
15722 id = rayHits[i].GroupId;
15723 int hit = (int)hits[id];
15724 if (hit > m_maxHitsPerPrimInCastRay)
15725 {
15726 rayHits.RemoveAt(i);
15727 hit--;
15728 hits[id] = hit;
15729 }
15730 }
15731 }
15732 }
15733
15734 // Parse hits into result list according to data flags
15735 int hitCount = rayHits.Count;
15736 if (hitCount > maxHits)
15737 hitCount = maxHits;
15738 for (int i = 0; i < hitCount; i++)
15739 {
15740 RayHit rayHit = rayHits[i];
15741 if (getRootKey)
15742 result.Add(new LSL_Key(rayHit.GroupId.ToString()));
15743 else
15744 result.Add(new LSL_Key(rayHit.PartId.ToString()));
15745 result.Add(new LSL_Vector(rayHit.Position));
15746 if (getLinkNum)
15747 result.Add(new LSL_Integer(rayHit.Link));
15748 if (getNormal)
15749 result.Add(new LSL_Vector(rayHit.Normal));
15750 }
15751 result.Add(new LSL_Integer(hitCount));
15752
15753 // Add to throttle data
15754 stopWatch.Stop();
15755 CastRayCall castRayCall = new CastRayCall();
15756 castRayCall.RegionId = regionId;
15757 castRayCall.UserId = userId;
15758 castRayCall.CalledMs = calledMs;
15759 castRayCall.UsedMs = (int)stopWatch.ElapsedMilliseconds;
15760 lock (m_castRayCalls)
15761 {
15762 m_castRayCalls.Add(castRayCall);
15763 }
15764
15765 // Return hits
15766 return result;
15767 }
15768
15769 /// <summary>
15770 /// Struct for transmitting parameters required for finding llCastRay ray hits.
15771 /// </summary>
15772 public struct RayTrans
15773 {
15774 public UUID PartId;
15775 public UUID GroupId;
15776 public int Link;
15777 public Vector3 ScalePart;
15778 public Vector3 PositionPart;
15779 public Quaternion RotationPart;
15780 public bool ShapeNeedsEnds;
15781 public Vector3 Position1Ray;
15782 public Vector3 Position1RayProj;
15783 public Vector3 VectorRayProj;
15784 }
15785
15786 /// <summary>
15787 /// Struct for llCastRay ray hits.
15788 /// </summary>
15789 public struct RayHit
15790 {
15791 public UUID PartId;
15792 public UUID GroupId;
15793 public int Link;
15794 public Vector3 Position;
15795 public Vector3 Normal;
15796 public float Distance;
15797 }
15798
15799 /// <summary>
15800 /// Struct for llCastRay throttle data.
15801 /// </summary>
15802 public struct CastRayCall
15803 {
15804 public UUID RegionId;
15805 public UUID UserId;
15806 public int CalledMs;
15807 public int UsedMs;
15808 }
15809
15810 /// <summary>
15811 /// Helper to check if a ray intersects a shape bounding box.
15812 /// </summary>
15813 private bool RayIntersectsShapeBox(Vector3 pos1RayProj, Vector3 pos2RayProj, Vector3 shapeBoxMax)
15814 {
15815 // Skip if ray can't intersect bounding box;
15816 Vector3 rayBoxProjMin = Vector3.Min(pos1RayProj, pos2RayProj);
15817 Vector3 rayBoxProjMax = Vector3.Max(pos1RayProj, pos2RayProj);
15818 if (
15819 rayBoxProjMin.X > shapeBoxMax.X || rayBoxProjMin.Y > shapeBoxMax.Y || rayBoxProjMin.Z > shapeBoxMax.Z ||
15820 rayBoxProjMax.X < -shapeBoxMax.X || rayBoxProjMax.Y < -shapeBoxMax.Y || rayBoxProjMax.Z < -shapeBoxMax.Z
15821 )
15822 return false;
15823
15824 // Check if ray intersect any bounding box side
15825 int sign = 0;
15826 float dist = 0.0f;
15827 Vector3 posProj = Vector3.Zero;
15828 Vector3 vecRayProj = pos2RayProj - pos1RayProj;
15829
15830 // Check both X sides unless ray is parallell to them
15831 if (Math.Abs(vecRayProj.X) > m_floatToleranceInCastRay)
15832 {
15833 for (sign = -1; sign <= 1; sign += 2)
15834 {
15835 dist = ((float)sign * shapeBoxMax.X - pos1RayProj.X) / vecRayProj.X;
15836 posProj = pos1RayProj + vecRayProj * dist;
15837 if (Math.Abs(posProj.Y) <= shapeBoxMax.Y && Math.Abs(posProj.Z) <= shapeBoxMax.Z)
15838 return true;
15839 }
15840 }
15841
15842 // Check both Y sides unless ray is parallell to them
15843 if (Math.Abs(vecRayProj.Y) > m_floatToleranceInCastRay)
15844 {
15845 for (sign = -1; sign <= 1; sign += 2)
15846 {
15847 dist = ((float)sign * shapeBoxMax.Y - pos1RayProj.Y) / vecRayProj.Y;
15848 posProj = pos1RayProj + vecRayProj * dist;
15849 if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Z) <= shapeBoxMax.Z)
15850 return true;
15851 }
15852 }
15853
15854 // Check both Z sides unless ray is parallell to them
15855 if (Math.Abs(vecRayProj.Z) > m_floatToleranceInCastRay)
15856 {
15857 for (sign = -1; sign <= 1; sign += 2)
15858 {
15859 dist = ((float)sign * shapeBoxMax.Z - pos1RayProj.Z) / vecRayProj.Z;
15860 posProj = pos1RayProj + vecRayProj * dist;
15861 if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Y) <= shapeBoxMax.Y)
15862 return true;
15863 }
15864 }
15865
15866 // No hits on bounding box so return false
15867 return false;
15868 }
15869
15870 /// <summary>
15871 /// Helper to parse FacetedMesh for ray hits.
15872 /// </summary>
15873 private void AddRayInFacetedMesh(FacetedMesh mesh, RayTrans rayTrans, ref List<RayHit> rayHits)
15874 {
15875 if (mesh != null)
15876 {
15877 foreach (Face face in mesh.Faces)
15878 {
15879 for (int i = 0; i < face.Indices.Count; i += 3)
15880 {
15881 Tri triangle = new Tri();
15882 triangle.p1 = face.Vertices[face.Indices[i]].Position;
15883 triangle.p2 = face.Vertices[face.Indices[i + 1]].Position;
15884 triangle.p3 = face.Vertices[face.Indices[i + 2]].Position;
15885 AddRayInTri(triangle, rayTrans, ref rayHits);
15886 }
15887 }
15888 }
15889 }
15890
15891 /// <summary>
15892 /// Helper to parse Tri (triangle) List for ray hits.
15893 /// </summary>
15894 private void AddRayInTris(List<Tri> triangles, RayTrans rayTrans, ref List<RayHit> rayHits)
15895 {
15896 foreach (Tri triangle in triangles)
15897 {
15898 AddRayInTri(triangle, rayTrans, ref rayHits);
15899 }
15900 }
15901
15902 /// <summary>
15903 /// Helper to add ray hit in a Tri (triangle).
15904 /// </summary>
15905 private void AddRayInTri(Tri triProj, RayTrans rayTrans, ref List<RayHit> rayHits)
15906 {
15907 // Check for hit in triangle
15908 Vector3 posHitProj;
15909 Vector3 normalProj;
15910 if (HitRayInTri(triProj, rayTrans.Position1RayProj, rayTrans.VectorRayProj, out posHitProj, out normalProj))
15911 {
15912 // Hack to circumvent ghost face bug in PrimMesher by removing hits in (ghost) face plane through shape center
15913 if (Math.Abs(Vector3.Dot(posHitProj, normalProj)) < m_floatToleranceInCastRay && !rayTrans.ShapeNeedsEnds)
15914 return;
15915
15916 // Transform hit and normal to region coordinate system
15917 Vector3 posHit = rayTrans.PositionPart + (posHitProj * rayTrans.ScalePart) * rayTrans.RotationPart;
15918 Vector3 normal = Vector3.Normalize((normalProj * rayTrans.ScalePart) * rayTrans.RotationPart);
15919
15920 // Remove duplicate hits at triangle intersections
15921 float distance = Vector3.Distance(rayTrans.Position1Ray, posHit);
15922 for (int i = rayHits.Count - 1; i >= 0; i--)
15923 {
15924 if (rayHits[i].PartId != rayTrans.PartId)
15925 break;
15926 if (Math.Abs(rayHits[i].Distance - distance) < m_floatTolerance2InCastRay)
15927 return;
15928 }
15929
15930 // Build result data set
15931 RayHit rayHit = new RayHit();
15932 rayHit.PartId = rayTrans.PartId;
15933 rayHit.GroupId = rayTrans.GroupId;
15934 rayHit.Link = rayTrans.Link;
15935 rayHit.Position = posHit;
15936 rayHit.Normal = normal;
15937 rayHit.Distance = distance;
15938 rayHits.Add(rayHit);
15939 }
15940 }
15941
15942 /// <summary>
15943 /// Helper to find ray hit in triangle
15944 /// </summary>
15945 bool HitRayInTri(Tri triProj, Vector3 pos1RayProj, Vector3 vecRayProj, out Vector3 posHitProj, out Vector3 normalProj)
15946 {
15947 float tol = m_floatToleranceInCastRay;
15948 posHitProj = Vector3.Zero;
15949
15950 // Calculate triangle edge vectors
15951 Vector3 vec1Proj = triProj.p2 - triProj.p1;
15952 Vector3 vec2Proj = triProj.p3 - triProj.p2;
15953 Vector3 vec3Proj = triProj.p1 - triProj.p3;
15954
15955 // Calculate triangle normal
15956 normalProj = Vector3.Cross(vec1Proj, vec2Proj);
15957
15958 // Skip if degenerate triangle or ray parallell with triangle plane
15959 float divisor = Vector3.Dot(vecRayProj, normalProj);
15960 if (Math.Abs(divisor) < tol)
15961 return false;
15962
15963 // Skip if exit and not configured to detect
15964 if (divisor > tol && !m_detectExitsInCastRay)
15965 return false;
15966
15967 // Skip if outside ray ends
15968 float distanceProj = Vector3.Dot(triProj.p1 - pos1RayProj, normalProj) / divisor;
15969 if (distanceProj < -tol || distanceProj > 1 + tol)
15970 return false;
15971
15972 // Calculate hit position in triangle
15973 posHitProj = pos1RayProj + vecRayProj * distanceProj;
15974
15975 // Skip if outside triangle bounding box
15976 Vector3 triProjMin = Vector3.Min(Vector3.Min(triProj.p1, triProj.p2), triProj.p3);
15977 Vector3 triProjMax = Vector3.Max(Vector3.Max(triProj.p1, triProj.p2), triProj.p3);
15978 if (
15979 posHitProj.X < triProjMin.X - tol || posHitProj.Y < triProjMin.Y - tol || posHitProj.Z < triProjMin.Z - tol ||
15980 posHitProj.X > triProjMax.X + tol || posHitProj.Y > triProjMax.Y + tol || posHitProj.Z > triProjMax.Z + tol
15981 )
15982 return false;
15983
15984 // Skip if outside triangle
15985 if (
15986 Vector3.Dot(Vector3.Cross(vec1Proj, normalProj), posHitProj - triProj.p1) > tol ||
15987 Vector3.Dot(Vector3.Cross(vec2Proj, normalProj), posHitProj - triProj.p2) > tol ||
15988 Vector3.Dot(Vector3.Cross(vec3Proj, normalProj), posHitProj - triProj.p3) > tol
15989 )
15990 return false;
15991
15992 // Return hit
15993 return true;
15994 }
15995
15996 /// <summary>
15997 /// Helper to parse selected parts of HeightMap into a Tri (triangle) List and calculate bounding box.
15998 /// </summary>
15999 private List<Tri> TrisFromHeightmapUnderRay(Vector3 posStart, Vector3 posEnd, out Vector3 lower, out Vector3 upper)
16000 {
16001 // Get bounding X-Y rectangle of terrain under ray
16002 lower = Vector3.Min(posStart, posEnd);
16003 upper = Vector3.Max(posStart, posEnd);
16004 lower.X = (float)Math.Floor(lower.X);
16005 lower.Y = (float)Math.Floor(lower.Y);
16006 float zLower = float.MaxValue;
16007 upper.X = (float)Math.Ceiling(upper.X);
16008 upper.Y = (float)Math.Ceiling(upper.Y);
16009 float zUpper = float.MinValue;
16010
16011 // Initialize Tri (triangle) List
16012 List<Tri> triangles = new List<Tri>();
16013
16014 // Set parsing lane direction to major ray X-Y axis
16015 Vector3 vec = posEnd - posStart;
16016 float xAbs = Math.Abs(vec.X);
16017 float yAbs = Math.Abs(vec.Y);
16018 bool bigX = true;
16019 if (yAbs > xAbs)
16020 {
16021 bigX = false;
16022 vec = vec / yAbs;
16023 }
16024 else if (xAbs > yAbs || xAbs > 0.0f)
16025 vec = vec / xAbs;
16026 else
16027 vec = new Vector3(1.0f, 1.0f, 0.0f);
16028
16029 // Simplify by start parsing in lower end of lane
16030 if ((bigX && vec.X < 0.0f) || (!bigX && vec.Y < 0.0f))
16031 {
16032 Vector3 posTemp = posStart;
16033 posStart = posEnd;
16034 posEnd = posTemp;
16035 vec = vec * -1.0f;
16036 }
16037
16038 // First 1x1 rectangle under ray
16039 float xFloorOld = 0.0f;
16040 float yFloorOld = 0.0f;
16041 Vector3 pos = posStart;
16042 float xFloor = (float)Math.Floor(pos.X);
16043 float yFloor = (float)Math.Floor(pos.Y);
16044 AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper);
16045
16046 // Parse every remaining 1x1 rectangle under ray
16047 while (pos != posEnd)
16048 {
16049 // Next 1x1 rectangle under ray
16050 xFloorOld = xFloor;
16051 yFloorOld = yFloor;
16052 pos = pos + vec;
16053
16054 // Clip position to 1x1 rectangle border
16055 xFloor = (float)Math.Floor(pos.X);
16056 yFloor = (float)Math.Floor(pos.Y);
16057 if (bigX && pos.X > xFloor)
16058 {
16059 pos.Y -= vec.Y * (pos.X - xFloor);
16060 pos.X = xFloor;
16061 }
16062 else if (!bigX && pos.Y > yFloor)
16063 {
16064 pos.X -= vec.X * (pos.Y - yFloor);
16065 pos.Y = yFloor;
16066 }
16067
16068 // Last 1x1 rectangle under ray
16069 if ((bigX && pos.X >= posEnd.X) || (!bigX && pos.Y >= posEnd.Y))
16070 {
16071 pos = posEnd;
16072 xFloor = (float)Math.Floor(pos.X);
16073 yFloor = (float)Math.Floor(pos.Y);
16074 }
16075
16076 // Add new 1x1 rectangle in lane
16077 if ((bigX && xFloor != xFloorOld) || (!bigX && yFloor != yFloorOld))
16078 AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper);
16079 // Add last 1x1 rectangle in old lane at lane shift
16080 if (bigX && yFloor != yFloorOld)
16081 AddTrisFromHeightmap(xFloor, yFloorOld, ref triangles, ref zLower, ref zUpper);
16082 if (!bigX && xFloor != xFloorOld)
16083 AddTrisFromHeightmap(xFloorOld, yFloor, ref triangles, ref zLower, ref zUpper);
16084 }
16085
16086 // Finalize bounding box Z
16087 lower.Z = zLower;
16088 upper.Z = zUpper;
16089
16090 // Done and returning Tri (triangle)List
16091 return triangles;
16092 }
16093
16094 /// <summary>
16095 /// Helper to add HeightMap squares into Tri (triangle) List and adjust bounding box.
16096 /// </summary>
16097 private void AddTrisFromHeightmap(float xPos, float yPos, ref List<Tri> triangles, ref float zLower, ref float zUpper)
16098 {
16099 int xInt = (int)xPos;
16100 int yInt = (int)yPos;
16101
16102 // Corner 1 of 1x1 rectangle
16103 int x = Util.Clamp<int>(xInt+1, 0, World.Heightmap.Width - 1);
16104 int y = Util.Clamp<int>(yInt+1, 0, World.Heightmap.Height - 1);
16105 Vector3 pos1 = new Vector3(x, y, (float)World.Heightmap[x, y]);
16106 // Adjust bounding box
16107 zLower = Math.Min(zLower, pos1.Z);
16108 zUpper = Math.Max(zUpper, pos1.Z);
16109
16110 // Corner 2 of 1x1 rectangle
16111 x = Util.Clamp<int>(xInt, 0, World.Heightmap.Width - 1);
16112 y = Util.Clamp<int>(yInt+1, 0, World.Heightmap.Height - 1);
16113 Vector3 pos2 = new Vector3(x, y, (float)World.Heightmap[x, y]);
16114 // Adjust bounding box
16115 zLower = Math.Min(zLower, pos2.Z);
16116 zUpper = Math.Max(zUpper, pos2.Z);
16117
16118 // Corner 3 of 1x1 rectangle
16119 x = Util.Clamp<int>(xInt, 0, World.Heightmap.Width - 1);
16120 y = Util.Clamp<int>(yInt, 0, World.Heightmap.Height - 1);
16121 Vector3 pos3 = new Vector3(x, y, (float)World.Heightmap[x, y]);
16122 // Adjust bounding box
16123 zLower = Math.Min(zLower, pos3.Z);
16124 zUpper = Math.Max(zUpper, pos3.Z);
16125
16126 // Corner 4 of 1x1 rectangle
16127 x = Util.Clamp<int>(xInt+1, 0, World.Heightmap.Width - 1);
16128 y = Util.Clamp<int>(yInt, 0, World.Heightmap.Height - 1);
16129 Vector3 pos4 = new Vector3(x, y, (float)World.Heightmap[x, y]);
16130 // Adjust bounding box
16131 zLower = Math.Min(zLower, pos4.Z);
16132 zUpper = Math.Max(zUpper, pos4.Z);
16133
16134 // Add triangle 1
16135 Tri triangle1 = new Tri();
16136 triangle1.p1 = pos1;
16137 triangle1.p2 = pos2;
16138 triangle1.p3 = pos3;
16139 triangles.Add(triangle1);
16140
16141 // Add triangle 2
16142 Tri triangle2 = new Tri();
16143 triangle2.p1 = pos3;
16144 triangle2.p2 = pos4;
16145 triangle2.p3 = pos1;
16146 triangles.Add(triangle2);
16147 }
16148
16149 /// <summary>
16150 /// Helper to get link number for a UUID.
16151 /// </summary>
16152 private int UUID2LinkNumber(SceneObjectPart part, UUID id)
16153 {
16154 SceneObjectGroup group = part.ParentGroup;
16155 if (group != null)
16156 {
16157 // Parse every link for UUID
16158 int linkCount = group.PrimCount + group.GetSittingAvatarsCount();
16159 for (int link = linkCount; link > 0; link--)
16160 {
16161 ISceneEntity entity = GetLinkEntity(part, link);
16162 // Return link number if UUID match
16163 if (entity != null && entity.UUID == id)
16164 return link;
16165 }
16166 }
16167 // Return link number 0 if no links or UUID matches
16168 return 0;
16169 }
16170
12682 public LSL_Integer llManageEstateAccess(int action, string avatar) 16171 public LSL_Integer llManageEstateAccess(int action, string avatar)
12683 { 16172 {
12684 m_host.AddScriptLPS(1); 16173 m_host.AddScriptLPS(1);
@@ -12751,8 +16240,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12751 public LSL_Integer llGetMemoryLimit() 16240 public LSL_Integer llGetMemoryLimit()
12752 { 16241 {
12753 m_host.AddScriptLPS(1); 16242 m_host.AddScriptLPS(1);
12754 // The value returned for LSO scripts in SL 16243 // The value returned for Mono scripts in SL
12755 return 16384; 16244 return 65536;
12756 } 16245 }
12757 16246
12758 public LSL_Integer llSetMemoryLimit(LSL_Integer limit) 16247 public LSL_Integer llSetMemoryLimit(LSL_Integer limit)
@@ -12765,15 +16254,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12765 public LSL_Integer llGetSPMaxMemory() 16254 public LSL_Integer llGetSPMaxMemory()
12766 { 16255 {
12767 m_host.AddScriptLPS(1); 16256 m_host.AddScriptLPS(1);
12768 // The value returned for LSO scripts in SL 16257 // The value returned for Mono scripts in SL
12769 return 16384; 16258 return 65536;
12770 } 16259 }
12771 16260
12772 public virtual LSL_Integer llGetUsedMemory() 16261 public virtual LSL_Integer llGetUsedMemory()
12773 { 16262 {
12774 m_host.AddScriptLPS(1); 16263 m_host.AddScriptLPS(1);
12775 // The value returned for LSO scripts in SL 16264 // The value returned for Mono scripts in SL
12776 return 16384; 16265 return 65536;
12777 } 16266 }
12778 16267
12779 public void llScriptProfiler(LSL_Integer flags) 16268 public void llScriptProfiler(LSL_Integer flags)
@@ -12788,12 +16277,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12788 // them from this region as they are completed 16277 // them from this region as they are completed
12789 // 16278 //
12790 16279
12791 public void llGetEnv(LSL_String name)
12792 {
12793 m_host.AddScriptLPS(1);
12794 NotImplemented("llGetEnv");
12795 }
12796
12797 public void llSetSoundQueueing(int queue) 16280 public void llSetSoundQueueing(int queue)
12798 { 16281 {
12799 m_host.AddScriptLPS(1); 16282 m_host.AddScriptLPS(1);
@@ -12933,7 +16416,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12933 new LSL_String(replydata) }, 16416 new LSL_String(replydata) },
12934 new DetectParams[0])); 16417 new DetectParams[0]));
12935 } 16418 }
12936 }); 16419 }, null, "LSL_Api.llTransferLindenDollars");
12937 16420
12938 return txn.ToString(); 16421 return txn.ToString();
12939 } 16422 }
@@ -13907,10 +17390,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
13907 public DateTime lastRef; 17390 public DateTime lastRef;
13908 } 17391 }
13909 17392
13910 protected static Dictionary<UUID, Notecard> m_Notecards = 17393 private static Dictionary<UUID, Notecard> m_Notecards =
13911 new Dictionary<UUID, Notecard>(); 17394 new Dictionary<UUID, Notecard>();
13912 17395
13913 public static void Cache(UUID assetID, string text) 17396 public static void Cache(UUID assetID, byte[] text)
13914 { 17397 {
13915 CheckCache(); 17398 CheckCache();
13916 17399
@@ -13921,7 +17404,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
13921 17404
13922 Notecard nc = new Notecard(); 17405 Notecard nc = new Notecard();
13923 nc.lastRef = DateTime.Now; 17406 nc.lastRef = DateTime.Now;
13924 nc.text = SLUtil.ParseNotecardToList(text).ToArray(); 17407 try
17408 {
17409 nc.text = SLUtil.ParseNotecardToArray(text);
17410 }
17411 catch(SLUtil.NotANotecardFormatException)
17412 {
17413 nc.text = new string[0];
17414 }
13925 m_Notecards[assetID] = nc; 17415 m_Notecards[assetID] = nc;
13926 } 17416 }
13927 } 17417 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
index b13a5ae..e5e43f8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
@@ -63,7 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
63 internal IScriptModuleComms m_comms = null; 63 internal IScriptModuleComms m_comms = null;
64 64
65 public void Initialize( 65 public void Initialize(
66 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle) 66 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
67 { 67 {
68 m_ScriptEngine = scriptEngine; 68 m_ScriptEngine = scriptEngine;
69 m_host = host; 69 m_host = host;
@@ -265,169 +265,438 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
265 int idx = 0; 265 int idx = 0;
266 while (idx < rules.Length) 266 while (idx < rules.Length)
267 { 267 {
268 uint rule = (uint)rules.GetLSLIntegerItem(idx); 268 uint rule;
269
270 try
271 {
272 rule = (uint)rules.GetLSLIntegerItem(idx);
273 }
274 catch (InvalidCastException)
275 {
276 throw new InvalidCastException(string.Format("Error running rule type: arg #{0} - parameter type must be integer", idx));
277 }
278
269 LSL_Types.Quaternion iQ; 279 LSL_Types.Quaternion iQ;
270 LSL_Types.Vector3 iV; 280 LSL_Types.Vector3 iV;
271 switch (rule) 281 switch (rule)
272 { 282 {
273 case (int)ScriptBaseClass.WL_SUN_MOON_POSITION: 283 case (int)ScriptBaseClass.WL_SUN_MOON_POSITION:
274 idx++; 284 idx++;
275 wl.sunMoonPosition = (float)rules.GetLSLFloatItem(idx); 285 try
286 {
287 wl.sunMoonPosition = (float)rules.GetLSLFloatItem(idx);
288 }
289 catch (InvalidCastException)
290 {
291 throw new InvalidCastException(string.Format("Error running rule WL_SUN_MOON_POSITION: arg #{0} - parameter 1 must be float", idx));
292 }
276 break; 293 break;
277 case (int)ScriptBaseClass.WL_AMBIENT: 294 case (int)ScriptBaseClass.WL_AMBIENT:
278 idx++; 295 idx++;
279 iQ = rules.GetQuaternionItem(idx); 296 try
297 {
298 iQ = rules.GetQuaternionItem(idx);
299 }
300 catch (InvalidCastException)
301 {
302 throw new InvalidCastException(string.Format("Error running rule WL_AMBIENT: arg #{0} - parameter 1 must be rotation", idx));
303 }
280 wl.ambient = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); 304 wl.ambient = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
281 break; 305 break;
282 case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION: 306 case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION:
283 idx++; 307 idx++;
284 iV = rules.GetVector3Item(idx); 308 try
309 {
310 iV = rules.GetVector3Item(idx);
311 }
312 catch (InvalidCastException)
313 {
314 throw new InvalidCastException(string.Format("Error running rule WL_BIG_WAVE_DIRECTION: arg #{0} - parameter 1 must be vector", idx));
315 }
285 wl.bigWaveDirection = new Vector2((float)iV.x, (float)iV.y); 316 wl.bigWaveDirection = new Vector2((float)iV.x, (float)iV.y);
286 break; 317 break;
287 case (int)ScriptBaseClass.WL_BLUE_DENSITY: 318 case (int)ScriptBaseClass.WL_BLUE_DENSITY:
288 idx++; 319 idx++;
289 iQ = rules.GetQuaternionItem(idx); 320 try
321 {
322 iQ = rules.GetQuaternionItem(idx);
323 }
324 catch (InvalidCastException)
325 {
326 throw new InvalidCastException(string.Format("Error running rule WL_BLUE_DENSITY: arg #{0} - parameter 1 must be rotation", idx));
327 }
290 wl.blueDensity = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); 328 wl.blueDensity = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
291 break; 329 break;
292 case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER: 330 case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER:
293 idx++; 331 idx++;
294 wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx); 332 try
333 {
334 wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx);
335 }
336 catch (InvalidCastException)
337 {
338 throw new InvalidCastException(string.Format("Error running rule WL_BLUR_MULTIPLIER: arg #{0} - parameter 1 must be float", idx));
339 }
295 break; 340 break;
296 case (int)ScriptBaseClass.WL_CLOUD_COLOR: 341 case (int)ScriptBaseClass.WL_CLOUD_COLOR:
297 idx++; 342 idx++;
298 iQ = rules.GetQuaternionItem(idx); 343 try
344 {
345 iQ = rules.GetQuaternionItem(idx);
346 }
347 catch (InvalidCastException)
348 {
349 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_COLOR: arg #{0} - parameter 1 must be rotation", idx));
350 }
299 wl.cloudColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); 351 wl.cloudColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
300 break; 352 break;
301 case (int)ScriptBaseClass.WL_CLOUD_COVERAGE: 353 case (int)ScriptBaseClass.WL_CLOUD_COVERAGE:
302 idx++; 354 idx++;
303 wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx); 355 try
356 {
357 wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx);
358 }
359 catch (InvalidCastException)
360 {
361 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_COVERAGE: arg #{0} - parameter 1 must be float", idx));
362 }
304 break; 363 break;
305 case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY: 364 case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY:
306 idx++; 365 idx++;
307 iV = rules.GetVector3Item(idx); 366 try
367 {
368 iV = rules.GetVector3Item(idx);
369 }
370 catch (InvalidCastException)
371 {
372 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_DETAIL_XY_DENSITY: arg #{0} - parameter 1 must be vector", idx));
373 }
308 wl.cloudDetailXYDensity = iV; 374 wl.cloudDetailXYDensity = iV;
309 break; 375 break;
310 case (int)ScriptBaseClass.WL_CLOUD_SCALE: 376 case (int)ScriptBaseClass.WL_CLOUD_SCALE:
311 idx++; 377 idx++;
312 wl.cloudScale = (float)rules.GetLSLFloatItem(idx); 378 try
379 {
380 wl.cloudScale = (float)rules.GetLSLFloatItem(idx);
381 }
382 catch (InvalidCastException)
383 {
384 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_SCALE: arg #{0} - parameter 1 must be float", idx));
385 }
313 break; 386 break;
314 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X: 387 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X:
315 idx++; 388 idx++;
316 wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx); 389 try
390 {
391 wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx);
392 }
393 catch (InvalidCastException)
394 {
395 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_SCROLL_X: arg #{0} - parameter 1 must be float", idx));
396 }
317 break; 397 break;
318 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK: 398 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK:
319 idx++; 399 idx++;
320 wl.cloudScrollXLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; 400 try
401 {
402 wl.cloudScrollXLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
403 }
404 catch (InvalidCastException)
405 {
406 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_SCROLL_Y_LOCK: arg #{0} - parameter 1 must be integer", idx));
407 }
321 break; 408 break;
322 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y: 409 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y:
323 idx++; 410 idx++;
324 wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx); 411 try
412 {
413 wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx);
414 }
415 catch (InvalidCastException)
416 {
417 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_SCROLL_Y: arg #{0} - parameter 1 must be float", idx));
418 }
325 break; 419 break;
326 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK: 420 case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK:
327 idx++; 421 idx++;
328 wl.cloudScrollYLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; 422 try
423 {
424 wl.cloudScrollYLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
425 }
426 catch (InvalidCastException)
427 {
428 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_SCROLL_Y_LOCK: arg #{0} - parameter 1 must be integer", idx));
429 }
329 break; 430 break;
330 case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY: 431 case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY:
331 idx++; 432 idx++;
332 iV = rules.GetVector3Item(idx); 433 try
434 {
435 iV = rules.GetVector3Item(idx);
436 }
437 catch (InvalidCastException)
438 {
439 throw new InvalidCastException(string.Format("Error running rule WL_CLOUD_XY_DENSITY: arg #{0} - parameter 1 must be vector", idx));
440 }
333 wl.cloudXYDensity = iV; 441 wl.cloudXYDensity = iV;
334 break; 442 break;
335 case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER: 443 case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER:
336 idx++; 444 idx++;
337 wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx); 445 try
446 {
447 wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx);
448 }
449 catch (InvalidCastException)
450 {
451 throw new InvalidCastException(string.Format("Error running rule WL_DENSITY_MULTIPLIER: arg #{0} - parameter 1 must be float", idx));
452 }
338 break; 453 break;
339 case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER: 454 case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER:
340 idx++; 455 idx++;
341 wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx); 456 try
457 {
458 wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx);
459 }
460 catch (InvalidCastException)
461 {
462 throw new InvalidCastException(string.Format("Error running rule WL_DISTANCE_MULTIPLIER: arg #{0} - parameter 1 must be float", idx));
463 }
342 break; 464 break;
343 case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS: 465 case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS:
344 idx++; 466 idx++;
345 wl.drawClassicClouds = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; 467 try
468 {
469 wl.drawClassicClouds = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
470 }
471 catch (InvalidCastException)
472 {
473 throw new InvalidCastException(string.Format("Error running rule WL_DRAW_CLASSIC_CLOUDS: arg #{0} - parameter 1 must be integer", idx));
474 }
346 break; 475 break;
347 case (int)ScriptBaseClass.WL_EAST_ANGLE: 476 case (int)ScriptBaseClass.WL_EAST_ANGLE:
348 idx++; 477 idx++;
349 wl.eastAngle = (float)rules.GetLSLFloatItem(idx); 478 try
479 {
480 wl.eastAngle = (float)rules.GetLSLFloatItem(idx);
481 }
482 catch (InvalidCastException)
483 {
484 throw new InvalidCastException(string.Format("Error running rule WL_EAST_ANGLE: arg #{0} - parameter 1 must be float", idx));
485 }
350 break; 486 break;
351 case (int)ScriptBaseClass.WL_FRESNEL_OFFSET: 487 case (int)ScriptBaseClass.WL_FRESNEL_OFFSET:
352 idx++; 488 idx++;
353 wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx); 489 try
490 {
491 wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx);
492 }
493 catch (InvalidCastException)
494 {
495 throw new InvalidCastException(string.Format("Error running rule WL_FRESNEL_OFFSET: arg #{0} - parameter 1 must be float", idx));
496 }
354 break; 497 break;
355 case (int)ScriptBaseClass.WL_FRESNEL_SCALE: 498 case (int)ScriptBaseClass.WL_FRESNEL_SCALE:
356 idx++; 499 idx++;
357 wl.fresnelScale = (float)rules.GetLSLFloatItem(idx); 500 try
501 {
502 wl.fresnelScale = (float)rules.GetLSLFloatItem(idx);
503 }
504 catch (InvalidCastException)
505 {
506 throw new InvalidCastException(string.Format("Error running rule WL_FRESNEL_SCALE: arg #{0} - parameter 1 must be float", idx));
507 }
358 break; 508 break;
359 case (int)ScriptBaseClass.WL_HAZE_DENSITY: 509 case (int)ScriptBaseClass.WL_HAZE_DENSITY:
360 idx++; 510 idx++;
361 wl.hazeDensity = (float)rules.GetLSLFloatItem(idx); 511 try
512 {
513 wl.hazeDensity = (float)rules.GetLSLFloatItem(idx);
514 }
515 catch (InvalidCastException)
516 {
517 throw new InvalidCastException(string.Format("Error running rule WL_HAZE_DENSITY: arg #{0} - parameter 1 must be float", idx));
518 }
362 break; 519 break;
363 case (int)ScriptBaseClass.WL_HAZE_HORIZON: 520 case (int)ScriptBaseClass.WL_HAZE_HORIZON:
364 idx++; 521 idx++;
365 wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx); 522 try
523 {
524 wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx);
525 }
526 catch (InvalidCastException)
527 {
528 throw new InvalidCastException(string.Format("Error running rule WL_HAZE_HORIZON: arg #{0} - parameter 1 must be float", idx));
529 }
366 break; 530 break;
367 case (int)ScriptBaseClass.WL_HORIZON: 531 case (int)ScriptBaseClass.WL_HORIZON:
368 idx++; 532 idx++;
369 iQ = rules.GetQuaternionItem(idx); 533 try
534 {
535 iQ = rules.GetQuaternionItem(idx);
536 }
537 catch (InvalidCastException)
538 {
539 throw new InvalidCastException(string.Format("Error running rule WL_HORIZON: arg #{0} - parameter 1 must be rotation", idx));
540 }
370 wl.horizon = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); 541 wl.horizon = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
371 break; 542 break;
372 case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION: 543 case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION:
373 idx++; 544 idx++;
374 iV = rules.GetVector3Item(idx); 545 try
546 {
547 iV = rules.GetVector3Item(idx);
548 }
549 catch (InvalidCastException)
550 {
551 throw new InvalidCastException(string.Format("Error running rule WL_LITTLE_WAVE_DIRECTION: arg #{0} - parameter 1 must be vector", idx));
552 }
375 wl.littleWaveDirection = new Vector2((float)iV.x, (float)iV.y); 553 wl.littleWaveDirection = new Vector2((float)iV.x, (float)iV.y);
376 break; 554 break;
377 case (int)ScriptBaseClass.WL_MAX_ALTITUDE: 555 case (int)ScriptBaseClass.WL_MAX_ALTITUDE:
378 idx++; 556 idx++;
379 wl.maxAltitude = (ushort)rules.GetLSLIntegerItem(idx).value; 557 try
558 {
559 wl.maxAltitude = (ushort)rules.GetLSLIntegerItem(idx).value;
560 }
561 catch (InvalidCastException)
562 {
563 throw new InvalidCastException(string.Format("Error running rule WL_MAX_ALTITUDE: arg #{0} - parameter 1 must be integer", idx));
564 }
380 break; 565 break;
381 case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE: 566 case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE:
382 idx++; 567 idx++;
383 wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string); 568 try
569 {
570 wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string);
571 }
572 catch (ArgumentException)
573 {
574 throw new InvalidCastException(string.Format("Error running rule WL_NORMAL_MAP_TEXTURE: arg #{0} - parameter 1 must be key", idx));
575 }
384 break; 576 break;
385 case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE: 577 case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE:
386 idx++; 578 idx++;
387 iV = rules.GetVector3Item(idx); 579 try
580 {
581 iV = rules.GetVector3Item(idx);
582 }
583 catch (InvalidCastException)
584 {
585 throw new InvalidCastException(string.Format("Error running rule WL_REFLECTION_WAVELET_SCALE: arg #{0} - parameter 1 must be vector", idx));
586 }
388 wl.reflectionWaveletScale = iV; 587 wl.reflectionWaveletScale = iV;
389 break; 588 break;
390 case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE: 589 case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE:
391 idx++; 590 idx++;
392 wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx); 591 try
592 {
593 wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx);
594 }
595 catch (InvalidCastException)
596 {
597 throw new InvalidCastException(string.Format("Error running rule WL_REFRACT_SCALE_ABOVE: arg #{0} - parameter 1 must be float", idx));
598 }
393 break; 599 break;
394 case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW: 600 case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW:
395 idx++; 601 idx++;
396 wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx); 602 try
603 {
604 wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx);
605 }
606 catch (InvalidCastException)
607 {
608 throw new InvalidCastException(string.Format("Error running rule WL_REFRACT_SCALE_BELOW: arg #{0} - parameter 1 must be float", idx));
609 }
397 break; 610 break;
398 case (int)ScriptBaseClass.WL_SCENE_GAMMA: 611 case (int)ScriptBaseClass.WL_SCENE_GAMMA:
399 idx++; 612 idx++;
400 wl.sceneGamma = (float)rules.GetLSLFloatItem(idx); 613 try
614 {
615 wl.sceneGamma = (float)rules.GetLSLFloatItem(idx);
616 }
617 catch (InvalidCastException)
618 {
619 throw new InvalidCastException(string.Format("Error running rule WL_SCENE_GAMMA: arg #{0} - parameter 1 must be float", idx));
620 }
401 break; 621 break;
402 case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS: 622 case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS:
403 idx++; 623 idx++;
404 wl.starBrightness = (float)rules.GetLSLFloatItem(idx); 624 try
625 {
626 wl.starBrightness = (float)rules.GetLSLFloatItem(idx);
627 }
628 catch (InvalidCastException)
629 {
630 throw new InvalidCastException(string.Format("Error running rule WL_STAR_BRIGHTNESS: arg #{0} - parameter 1 must be float", idx));
631 }
405 break; 632 break;
406 case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS: 633 case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS:
407 idx++; 634 idx++;
408 wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx); 635 try
636 {
637 wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx);
638 }
639 catch (InvalidCastException)
640 {
641 throw new InvalidCastException(string.Format("Error running rule WL_SUN_GLOW_FOCUS: arg #{0} - parameter 1 must be float", idx));
642 }
409 break; 643 break;
410 case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE: 644 case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE:
411 idx++; 645 idx++;
412 wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx); 646 try
647 {
648 wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx);
649 }
650 catch (InvalidCastException)
651 {
652 throw new InvalidCastException(string.Format("Error running rule WL_SUN_GLOW_SIZE: arg #{0} - parameter 1 must be float", idx));
653 }
413 break; 654 break;
414 case (int)ScriptBaseClass.WL_SUN_MOON_COLOR: 655 case (int)ScriptBaseClass.WL_SUN_MOON_COLOR:
415 idx++; 656 idx++;
416 iQ = rules.GetQuaternionItem(idx); 657 iQ = rules.GetQuaternionItem(idx);
417 wl.sunMoonColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); 658 try
659 {
660 wl.sunMoonColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
661 }
662 catch (InvalidCastException)
663 {
664 throw new InvalidCastException(string.Format("Error running rule WL_SUN_MOON_COLOR: arg #{0} - parameter 1 must be rotation", idx));
665 }
418 break; 666 break;
419 case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER: 667 case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER:
420 idx++; 668 idx++;
421 wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx); 669 try
670 {
671 wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx);
672 }
673 catch (InvalidCastException)
674 {
675 throw new InvalidCastException(string.Format("Error running rule WL_UNDERWATER_FOG_MODIFIER: arg #{0} - parameter 1 must be float", idx));
676 }
422 break; 677 break;
423 case (int)ScriptBaseClass.WL_WATER_COLOR: 678 case (int)ScriptBaseClass.WL_WATER_COLOR:
424 idx++; 679 idx++;
425 iV = rules.GetVector3Item(idx); 680 try
681 {
682 iV = rules.GetVector3Item(idx);
683 }
684 catch (InvalidCastException)
685 {
686 throw new InvalidCastException(string.Format("Error running rule WL_WATER_COLOR: arg #{0} - parameter 1 must be vector", idx));
687 }
426 wl.waterColor = iV; 688 wl.waterColor = iV;
427 break; 689 break;
428 case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT: 690 case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT:
429 idx++; 691 idx++;
430 wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx); 692 try
693 {
694 wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx);
695 }
696 catch (InvalidCastException)
697 {
698 throw new InvalidCastException(string.Format("Error running rule WL_WATER_FOG_DENSITY_EXPONENT: arg #{0} - parameter 1 must be float", idx));
699 }
431 break; 700 break;
432 } 701 }
433 idx++; 702 idx++;
@@ -464,7 +733,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
464 733
465 if (LightShareModule.EnableWindlight) 734 if (LightShareModule.EnableWindlight)
466 { 735 {
467 RegionLightShareData wl = getWindlightProfileFromRules(rules); 736 RegionLightShareData wl;
737 try
738 {
739 wl = getWindlightProfileFromRules(rules);
740 }
741 catch(InvalidCastException e)
742 {
743 LSShoutError(e.Message);
744 return 0;
745 }
468 wl.valid = true; 746 wl.valid = true;
469 m_host.ParentGroup.Scene.StoreWindlightProfile(wl); 747 m_host.ParentGroup.Scene.StoreWindlightProfile(wl);
470 success = 1; 748 success = 1;
@@ -532,8 +810,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
532 m_host.AddScriptLPS(1); 810 m_host.AddScriptLPS(1);
533 811
534 if (LightShareModule.EnableWindlight) 812 if (LightShareModule.EnableWindlight)
535 { 813 {
536 RegionLightShareData wl = getWindlightProfileFromRules(rules); 814 RegionLightShareData wl;
815 try
816 {
817 wl = getWindlightProfileFromRules(rules);
818 }
819 catch(InvalidCastException e)
820 {
821 LSShoutError(e.Message);
822 return 0;
823 }
537 World.EventManager.TriggerOnSendNewWindlightProfileTargeted(wl, new UUID(target.m_string)); 824 World.EventManager.TriggerOnSendNewWindlightProfileTargeted(wl, new UUID(target.m_string));
538 success = 1; 825 success = 1;
539 } 826 }
@@ -546,4 +833,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
546 return success; 833 return success;
547 } 834 }
548 } 835 }
549} \ No newline at end of file 836}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index edcdfbc..7bd4fa7 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
66 internal IScriptModuleComms m_comms = null; 66 internal IScriptModuleComms m_comms = null;
67 67
68 public void Initialize( 68 public void Initialize(
69 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle) 69 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
70 { 70 {
71 m_ScriptEngine = scriptEngine; 71 m_ScriptEngine = scriptEngine;
72 m_host = host; 72 m_host = host;
@@ -420,7 +420,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
420 { 420 {
421 if (type == typeof(object[])) 421 if (type == typeof(object[]))
422 { 422 {
423 object[] plist = (lslparm as LSL_List).Data; 423 object[] plist = ((LSL_List)lslparm).Data;
424 object[] result = new object[plist.Length]; 424 object[] result = new object[plist.Length];
425 for (int i = 0; i < plist.Length; i++) 425 for (int i = 0; i < plist.Length; i++)
426 { 426 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 01d90e7..5d8f0f6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -63,6 +63,7 @@ using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
63using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; 63using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
64using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; 64using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
65using PermissionMask = OpenSim.Framework.PermissionMask; 65using PermissionMask = OpenSim.Framework.PermissionMask;
66using OpenSim.Services.Connectors.Hypergrid;
66 67
67namespace OpenSim.Region.ScriptEngine.Shared.Api 68namespace OpenSim.Region.ScriptEngine.Shared.Api
68{ 69{
@@ -145,7 +146,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
145 protected IUrlModule m_UrlModule = null; 146 protected IUrlModule m_UrlModule = null;
146 147
147 public void Initialize( 148 public void Initialize(
148 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle) 149 IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
149 { 150 {
150 m_ScriptEngine = scriptEngine; 151 m_ScriptEngine = scriptEngine;
151 m_host = host; 152 m_host = host;
@@ -155,7 +156,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
155 m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>(); 156 m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>();
156 157
157 if (m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) 158 if (m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
159 {
158 m_OSFunctionsEnabled = true; 160 m_OSFunctionsEnabled = true;
161 // m_log.Warn("[OSSL] OSSL FUNCTIONS ENABLED");
162 }
159 163
160 m_ScriptDelayFactor = 164 m_ScriptDelayFactor =
161 m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f); 165 m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f);
@@ -799,9 +803,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
799 803
800 // We will launch the teleport on a new thread so that when the script threads are terminated 804 // We will launch the teleport on a new thread so that when the script threads are terminated
801 // before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting. 805 // before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting.
802 Util.FireAndForget(o => World.RequestTeleportLocation( 806 Util.FireAndForget(
803 presence.ControllingClient, regionName, position, 807 o => World.RequestTeleportLocation(
804 lookat, (uint)TPFlags.ViaLocation)); 808 presence.ControllingClient, regionName, position,
809 lookat, (uint)TPFlags.ViaLocation),
810 null, "OSSL_Api.TeleportAgentByRegionCoords");
805 811
806 ScriptSleep(5000); 812 ScriptSleep(5000);
807 813
@@ -823,6 +829,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
823 private void TeleportAgent(string agent, int regionX, int regionY, 829 private void TeleportAgent(string agent, int regionX, int regionY,
824 LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions) 830 LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions)
825 { 831 {
832<<<<<<< HEAD
833 // ulong regionHandle = Util.UIntsToLong(((uint)regionX * (uint)Constants.RegionSize), ((uint)regionY * (uint)Constants.RegionSize));
834=======
835>>>>>>> avn/ubitvar
826 ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY); 836 ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY);
827 837
828 m_host.AddScriptLPS(1); 838 m_host.AddScriptLPS(1);
@@ -844,9 +854,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
844 854
845 // We will launch the teleport on a new thread so that when the script threads are terminated 855 // We will launch the teleport on a new thread so that when the script threads are terminated
846 // before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting. 856 // before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting.
847 Util.FireAndForget(o => World.RequestTeleportLocation( 857 Util.FireAndForget(
848 presence.ControllingClient, regionHandle, 858 o => World.RequestTeleportLocation(
849 position, lookat, (uint)TPFlags.ViaLocation)); 859 presence.ControllingClient, regionHandle,
860 position, lookat, (uint)TPFlags.ViaLocation),
861 null, "OSSL_Api.TeleportAgentByRegionName");
850 862
851 ScriptSleep(5000); 863 ScriptSleep(5000);
852 864
@@ -881,6 +893,59 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
881 TeleportAgent(m_host.OwnerID.ToString(), regionX, regionY, position, lookat, true); 893 TeleportAgent(m_host.OwnerID.ToString(), regionX, regionY, position, lookat, true);
882 } 894 }
883 895
896 ///<summary>
897 /// Allows a script IN the target prim to force an avatar to sit on it using normal methods
898 /// as if called by the client.
899 /// Silent fail if agent (or target if overloaded) not found.
900 /// Does work if passed key (or keys if overloaded).
901 /// </summary>
902 /// <param name="avatar"></param>
903 public void osForceOtherSit(string avatar)
904 {
905 CheckThreatLevel(ThreatLevel.VeryHigh, "osForceOtherSit");
906
907 m_host.AddScriptLPS(1);
908
909 ForceSit(avatar, m_host.UUID);
910 }
911
912 /// <summary>
913 /// Overload method of osForceOtherSit(string avatar) to allow a script NOT in the target prim to force
914 /// an avatar to sit on the target prim using normal methods as if called by the client.
915 /// </summary>
916 /// <param name="avatar"></param>
917 /// <param name="target"></param>
918 public void osForceOtherSit(string avatar, string target)
919 {
920 CheckThreatLevel(ThreatLevel.VeryHigh, "osForceOtherSit");
921
922 m_host.AddScriptLPS(1);
923
924 UUID targetID = new UUID(target);
925
926 ForceSit(avatar, targetID);
927 }
928
929 public void ForceSit(string avatar, UUID targetID)
930 {
931 UUID agentID;
932
933 if (!UUID.TryParse(avatar, out agentID))
934 return;
935
936 ScenePresence presence = World.GetScenePresence(agentID);
937
938 SceneObjectPart part = World.GetSceneObjectPart(targetID);
939
940 if (presence != null &&
941 part != null &&
942 part.SitTargetAvatar == UUID.Zero)
943 presence.HandleAgentRequestSit(presence.ControllingClient,
944 agentID,
945 targetID,
946 part.SitTargetPosition);
947 }
948
884 // Functions that get information from the agent itself. 949 // Functions that get information from the agent itself.
885 // 950 //
886 // osGetAgentIP - this is used to determine the IP address of 951 // osGetAgentIP - this is used to determine the IP address of
@@ -1254,7 +1319,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1254 World.RegionInfo.EstateSettings.UseGlobalTime = !sunFixed; 1319 World.RegionInfo.EstateSettings.UseGlobalTime = !sunFixed;
1255 World.RegionInfo.EstateSettings.SunPosition = sunHour; 1320 World.RegionInfo.EstateSettings.SunPosition = sunHour;
1256 World.RegionInfo.EstateSettings.FixedSun = sunFixed; 1321 World.RegionInfo.EstateSettings.FixedSun = sunFixed;
1257 World.RegionInfo.EstateSettings.Save(); 1322 World.EstateDataService.StoreEstateSettings(World.RegionInfo.EstateSettings);
1258 1323
1259 World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle); 1324 World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle);
1260 } 1325 }
@@ -1578,6 +1643,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1578 } 1643 }
1579 } 1644 }
1580 1645
1646 public LSL_Integer osCheckODE()
1647 {
1648 m_host.AddScriptLPS(1);
1649 LSL_Integer ret = 0; // false
1650 if (m_ScriptEngine.World.PhysicsScene != null)
1651 {
1652 string physEngine = m_ScriptEngine.World.PhysicsScene.EngineType;
1653 if (physEngine == "OpenDynamicsEngine")
1654 {
1655 ret = 1; // true
1656 }
1657 }
1658 return ret;
1659 }
1660
1581 public string osGetPhysicsEngineType() 1661 public string osGetPhysicsEngineType()
1582 { 1662 {
1583 // High because it can be used to target attacks to known weaknesses 1663 // High because it can be used to target attacks to known weaknesses
@@ -1776,13 +1856,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1776 // Create new asset 1856 // Create new asset
1777 AssetBase asset = new AssetBase(UUID.Random(), name, (sbyte)AssetType.Notecard, m_host.OwnerID.ToString()); 1857 AssetBase asset = new AssetBase(UUID.Random(), name, (sbyte)AssetType.Notecard, m_host.OwnerID.ToString());
1778 asset.Description = description; 1858 asset.Description = description;
1859 byte[] a;
1860 byte[] b;
1861 byte[] c;
1862
1863 b = Util.UTF8.GetBytes(data);
1864
1865 a = Util.UTF8.GetBytes(
1866 "Linden text version 2\n{\nLLEmbeddedItems version 1\n{\ncount 0\n}\nText length " + b.Length.ToString() + "\n");
1779 1867
1780 int textLength = data.Length; 1868 c = Util.UTF8.GetBytes("}");
1781 data
1782 = "Linden text version 2\n{\nLLEmbeddedItems version 1\n{\ncount 0\n}\nText length "
1783 + textLength.ToString() + "\n" + data + "}\n";
1784 1869
1785 asset.Data = Util.UTF8.GetBytes(data); 1870 byte[] d = new byte[a.Length + b.Length + c.Length];
1871 Buffer.BlockCopy(a, 0, d, 0, a.Length);
1872 Buffer.BlockCopy(b, 0, d, a.Length, b.Length);
1873 Buffer.BlockCopy(c, 0, d, a.Length + b.Length, c.Length);
1874
1875 asset.Data = d;
1786 World.AssetService.Store(asset); 1876 World.AssetService.Store(asset);
1787 1877
1788 // Create Task Entry 1878 // Create Task Entry
@@ -1889,8 +1979,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1889 } 1979 }
1890 } 1980 }
1891 1981
1892 string data = Encoding.UTF8.GetString(a.Data); 1982 NotecardCache.Cache(assetID, a.Data);
1893 NotecardCache.Cache(assetID, data);
1894 }; 1983 };
1895 1984
1896 return assetID; 1985 return assetID;
@@ -2002,15 +2091,51 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2002 CheckThreatLevel(ThreatLevel.Low, "osAvatarName2Key"); 2091 CheckThreatLevel(ThreatLevel.Low, "osAvatarName2Key");
2003 m_host.AddScriptLPS(1); 2092 m_host.AddScriptLPS(1);
2004 2093
2005 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, firstname, lastname); 2094 IUserManagement userManager = World.RequestModuleInterface<IUserManagement>();
2006 if (null == account) 2095 if (userManager == null)
2007 { 2096 {
2008 return UUID.Zero.ToString(); 2097 OSSLShoutError("osAvatarName2Key: UserManagement module not available");
2098 return string.Empty;
2099 }
2100
2101 // Check if the user is already cached
2102
2103 UUID userID = userManager.GetUserIdByName(firstname, lastname);
2104 if (userID != UUID.Zero)
2105 return userID.ToString();
2106
2107 // Query for the user
2108
2109 String realFirstName; String realLastName; String serverURI;
2110 if (Util.ParseForeignAvatarName(firstname, lastname, out realFirstName, out realLastName, out serverURI))
2111 {
2112 try
2113 {
2114 UserAgentServiceConnector userConnection = new UserAgentServiceConnector(serverURI, true);
2115
2116 if (userConnection != null)
2117 {
2118 userID = userConnection.GetUUID(realFirstName, realLastName);
2119 if (userID != UUID.Zero)
2120 {
2121 userManager.AddUser(userID, realFirstName, realLastName, serverURI);
2122 return userID.ToString();
2123 }
2124 }
2125 }
2126 catch (Exception /*e*/)
2127 {
2128 // m_log.Warn("[osAvatarName2Key] UserAgentServiceConnector - Unable to connect to destination grid ", e);
2129 }
2009 } 2130 }
2010 else 2131 else
2011 { 2132 {
2012 return account.PrincipalID.ToString(); 2133 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, firstname, lastname);
2134 if (account != null)
2135 return account.PrincipalID.ToString();
2013 } 2136 }
2137
2138 return UUID.Zero.ToString();
2014 } 2139 }
2015 2140
2016 public string osKey2Name(string id) 2141 public string osKey2Name(string id)
@@ -2023,19 +2148,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2023 if (UUID.TryParse(id, out key)) 2148 if (UUID.TryParse(id, out key))
2024 { 2149 {
2025 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, key); 2150 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, key);
2026 if (null == account) 2151 if (account != null)
2027 {
2028 return "";
2029 }
2030 else
2031 {
2032 return account.Name; 2152 return account.Name;
2153
2154 if (m_ScriptEngine.World.GridUserService != null)
2155 {
2156 GridUserInfo uInfo = m_ScriptEngine.World.GridUserService.GetGridUserInfo(key.ToString());
2157
2158 if (uInfo != null)
2159 {
2160 UUID userUUID; String gridURL; String firstName; String lastName; String tmp;
2161
2162 if (Util.ParseUniversalUserIdentifier(uInfo.UserID, out userUUID, out gridURL, out firstName, out lastName, out tmp))
2163 {
2164 string grid = new Uri(gridURL).Authority;
2165 return firstName + "." + lastName + " @" + grid;
2166 }
2167 }
2033 } 2168 }
2034 } 2169 }
2035 else 2170
2036 { 2171 return "";
2037 return "";
2038 }
2039 } 2172 }
2040 2173
2041 private enum InfoType 2174 private enum InfoType
@@ -2224,6 +2357,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2224 return retval; 2357 return retval;
2225 } 2358 }
2226 2359
2360 public string osGetAvatarHomeURI(string uuid)
2361 {
2362 CheckThreatLevel(ThreatLevel.Low, "osGetAvatarHomeURI");
2363 m_host.AddScriptLPS(1);
2364
2365 IUserManagement userManager = m_ScriptEngine.World.RequestModuleInterface<IUserManagement>();
2366 string returnValue = "";
2367
2368 if (userManager != null)
2369 {
2370 returnValue = userManager.GetUserServerURL(new UUID(uuid), "HomeURI");
2371 }
2372
2373 if (returnValue == "")
2374 {
2375 IConfigSource config = m_ScriptEngine.ConfigSource;
2376 returnValue = Util.GetConfigVarFromSections<string>(config, "HomeURI",
2377 new string[] { "Startup", "Hypergrid" }, String.Empty);
2378
2379 if (!string.IsNullOrEmpty(returnValue))
2380 return returnValue;
2381
2382 // Legacy. Remove soon!
2383 if (config.Configs["LoginService"] != null)
2384 returnValue = config.Configs["LoginService"].GetString("SRV_HomeURI", returnValue);
2385
2386 if (String.IsNullOrEmpty(returnValue))
2387 returnValue = GridUserInfo(InfoType.Home);
2388 }
2389
2390 return returnValue;
2391 }
2392
2227 public LSL_String osFormatString(string str, LSL_List strings) 2393 public LSL_String osFormatString(string str, LSL_List strings)
2228 { 2394 {
2229 CheckThreatLevel(ThreatLevel.VeryLow, "osFormatString"); 2395 CheckThreatLevel(ThreatLevel.VeryLow, "osFormatString");
@@ -2345,14 +2511,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2345 // on the ILSL_Api interface. 2511 // on the ILSL_Api interface.
2346 LSL_Api LSL_Api = (LSL_Api)m_LSL_Api; 2512 LSL_Api LSL_Api = (LSL_Api)m_LSL_Api;
2347 LSL_List retVal = new LSL_List(); 2513 LSL_List retVal = new LSL_List();
2348 LSL_List remaining = null; 2514 LSL_List remaining = new LSL_List();
2349 List<SceneObjectPart> parts = LSL_Api.GetLinkParts(linknumber); 2515 List<SceneObjectPart> parts = LSL_Api.GetLinkParts(linknumber);
2350 foreach (SceneObjectPart part in parts) 2516 foreach (SceneObjectPart part in parts)
2351 { 2517 {
2352 remaining = LSL_Api.GetPrimParams(part, rules, ref retVal); 2518 remaining = LSL_Api.GetPrimParams(part, rules, ref retVal);
2353 } 2519 }
2354 2520
2355 while (remaining != null && remaining.Length > 2) 2521 while (remaining.Length > 2)
2356 { 2522 {
2357 linknumber = remaining.GetLSLIntegerItem(0); 2523 linknumber = remaining.GetLSLIntegerItem(0);
2358 rules = remaining.GetSublist(1, -1); 2524 rules = remaining.GetSublist(1, -1);
@@ -2364,6 +2530,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2364 return retVal; 2530 return retVal;
2365 } 2531 }
2366 2532
2533 public void osForceCreateLink(string target, int parent)
2534 {
2535 CheckThreatLevel(ThreatLevel.VeryLow, "osForceCreateLink");
2536
2537 m_host.AddScriptLPS(1);
2538
2539 InitLSL();
2540 ((LSL_Api)m_LSL_Api).CreateLink(target, parent);
2541 }
2542
2543 public void osForceBreakLink(int linknum)
2544 {
2545 CheckThreatLevel(ThreatLevel.VeryLow, "osForceBreakLink");
2546
2547 m_host.AddScriptLPS(1);
2548
2549 InitLSL();
2550 ((LSL_Api)m_LSL_Api).BreakLink(linknum);
2551 }
2552
2553 public void osForceBreakAllLinks()
2554 {
2555 CheckThreatLevel(ThreatLevel.VeryLow, "osForceBreakAllLinks");
2556
2557 m_host.AddScriptLPS(1);
2558
2559 InitLSL();
2560 ((LSL_Api)m_LSL_Api).BreakAllLinks();
2561 }
2562
2367 public LSL_Integer osIsNpc(LSL_Key npc) 2563 public LSL_Integer osIsNpc(LSL_Key npc)
2368 { 2564 {
2369 CheckThreatLevel(ThreatLevel.None, "osIsNpc"); 2565 CheckThreatLevel(ThreatLevel.None, "osIsNpc");
@@ -2942,6 +3138,51 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2942 3138
2943 return SaveAppearanceToNotecard(avatarId, notecard); 3139 return SaveAppearanceToNotecard(avatarId, notecard);
2944 } 3140 }
3141
3142 /// <summary>
3143 /// Get the gender as specified in avatar appearance for a given avatar key
3144 /// </summary>
3145 /// <param name="rawAvatarId"></param>
3146 /// <returns>"male" or "female" or "unknown"</returns>
3147 public LSL_String osGetGender(LSL_Key rawAvatarId)
3148 {
3149 CheckThreatLevel(ThreatLevel.None, "osGetGender");
3150 m_host.AddScriptLPS(1);
3151
3152 UUID avatarId;
3153 if (!UUID.TryParse(rawAvatarId, out avatarId))
3154 return new LSL_String("unknown");
3155
3156 ScenePresence sp = World.GetScenePresence(avatarId);
3157
3158 if (sp == null || sp.IsChildAgent || sp.Appearance == null || sp.Appearance.VisualParams == null)
3159 return new LSL_String("unknown");
3160
3161 // find the index of "shape" parameter "male"
3162 int vpShapeMaleIndex = 0;
3163 bool indexFound = false;
3164 VisualParam param = new VisualParam();
3165 foreach(var vpEntry in VisualParams.Params)
3166 {
3167 param = vpEntry.Value;
3168 if (param.Name == "male" && param.Wearable == "shape")
3169 {
3170 indexFound = true;
3171 break;
3172 }
3173
3174 if (param.Group == 0)
3175 vpShapeMaleIndex++;
3176 }
3177
3178 if (!indexFound)
3179 return new LSL_String("unknown");
3180
3181 float vpShapeMale = Utils.ByteToFloat(sp.Appearance.VisualParams[vpShapeMaleIndex], param.MinValue, param.MaxValue);
3182
3183 bool isMale = vpShapeMale > 0.5f;
3184 return new LSL_String(isMale ? "male" : "female");
3185 }
2945 3186
2946 /// <summary> 3187 /// <summary>
2947 /// Get current region's map texture UUID 3188 /// Get current region's map texture UUID
@@ -3024,9 +3265,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3024 } 3265 }
3025 else 3266 else
3026 { 3267 {
3268<<<<<<< HEAD
3269 Scene scene = m_ScriptEngine.World;
3270 GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID);
3271 return new LSL_Vector((float)region.RegionSizeX, (float)region.RegionSizeX, Constants.RegionHeight);
3272=======
3027 return new LSL_Vector((float)World.RegionInfo.RegionSizeX, 3273 return new LSL_Vector((float)World.RegionInfo.RegionSizeX,
3028 (float)World.RegionInfo.RegionSizeY, 3274 (float)World.RegionInfo.RegionSizeY,
3029 (float)World.RegionInfo.RegionSizeZ ); 3275 (float)World.RegionInfo.RegionSizeZ );
3276>>>>>>> avn/ubitvar
3030 } 3277 }
3031 } 3278 }
3032 3279
@@ -3401,7 +3648,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3401 3648
3402 public void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, int attachmentPoint) 3649 public void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, int attachmentPoint)
3403 { 3650 {
3404 CheckThreatLevel(ThreatLevel.Severe, "osForceAttachToOtherAvatarFromInventory"); 3651 CheckThreatLevel(ThreatLevel.VeryHigh, "osForceAttachToOtherAvatarFromInventory");
3405 3652
3406 m_host.AddScriptLPS(1); 3653 m_host.AddScriptLPS(1);
3407 3654
@@ -3445,14 +3692,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3445 if (sp == null) 3692 if (sp == null)
3446 return; 3693 return;
3447 3694
3448 InventoryItemBase newItem = World.MoveTaskInventoryItem(sp.UUID, UUID.Zero, m_host, item.ItemID); 3695 string message;
3696 InventoryItemBase newItem = World.MoveTaskInventoryItem(sp.UUID, UUID.Zero, m_host, item.ItemID, out message);
3449 3697
3450 if (newItem == null) 3698 if (newItem == null)
3451 { 3699 {
3452 m_log.ErrorFormat( 3700 m_log.ErrorFormat(
3453 "[OSSL API]: Could not create user inventory item {0} for {1}, attach point {2} in {3}", 3701 "[OSSL API]: Could not create user inventory item {0} for {1}, attach point {2} in {3}: {4}",
3454 itemName, m_host.Name, attachmentPoint, World.Name); 3702 itemName, m_host.Name, attachmentPoint, World.Name, message);
3455 3703 ((LSL_Api)m_LSL_Api).llSay(0, message);
3456 return; 3704 return;
3457 } 3705 }
3458 3706
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs
index 9137c69..4708473 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.8.0.*")] 32[assembly: AssemblyVersion("0.8.2.*")]
33 33
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index b642a9c..a3bb7d6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -124,6 +124,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
124 LSL_String llGetCreator(); 124 LSL_String llGetCreator();
125 LSL_String llGetDate(); 125 LSL_String llGetDate();
126 LSL_Float llGetEnergy(); 126 LSL_Float llGetEnergy();
127 LSL_String llGetEnv(LSL_String name);
127 LSL_Vector llGetForce(); 128 LSL_Vector llGetForce();
128 LSL_Integer llGetFreeMemory(); 129 LSL_Integer llGetFreeMemory();
129 LSL_Integer llGetUsedMemory(); 130 LSL_Integer llGetUsedMemory();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index d80d389..ddd7630 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -259,6 +259,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
259 259
260 string osGetScriptEngineName(); 260 string osGetScriptEngineName();
261 string osGetSimulatorVersion(); 261 string osGetSimulatorVersion();
262 LSL_Integer osCheckODE();
262 string osGetPhysicsEngineType(); 263 string osGetPhysicsEngineType();
263 Hashtable osParseJSON(string JSON); 264 Hashtable osParseJSON(string JSON);
264 265
@@ -281,6 +282,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
281 string osGetGridGatekeeperURI(); 282 string osGetGridGatekeeperURI();
282 string osGetGridCustom(string key); 283 string osGetGridCustom(string key);
283 284
285 string osGetAvatarHomeURI(string uuid);
286
284 LSL_String osFormatString(string str, LSL_List strings); 287 LSL_String osFormatString(string str, LSL_List strings);
285 LSL_List osMatchString(string src, string pattern, int start); 288 LSL_List osMatchString(string src, string pattern, int start);
286 LSL_String osReplaceString(string src, string pattern, string replace, int count, int start); 289 LSL_String osReplaceString(string src, string pattern, string replace, int count, int start);
@@ -293,6 +296,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
293 LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules); 296 LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules);
294 297
295 /// <summary> 298 /// <summary>
299 /// Identical to llCreateLink() but does not require permission from the owner.
300 /// </summary>
301 /// <param name='target'></param>
302 /// <param name='parent'></param>
303 void osForceCreateLink(string target, int parent);
304
305 /// <summary>
306 /// Identical to llBreakLink() but does not require permission from the owner.
307 /// </summary>
308 /// <param name='linknum'></param>
309 void osForceBreakLink(int linknum);
310
311 /// <summary>
312 /// Identical to llBreakAllLinks() but does not require permission from the owner.
313 /// </summary>
314 void osForceBreakAllLinks();
315
316 /// <summary>
296 /// Check if the given key is an npc 317 /// Check if the given key is an npc
297 /// </summary> 318 /// </summary>
298 /// <param name="npc"></param> 319 /// <param name="npc"></param>
@@ -333,6 +354,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
333 LSL_Key osOwnerSaveAppearance(string notecard); 354 LSL_Key osOwnerSaveAppearance(string notecard);
334 LSL_Key osAgentSaveAppearance(key agentId, string notecard); 355 LSL_Key osAgentSaveAppearance(key agentId, string notecard);
335 356
357 key osGetGender(LSL_Key rawAvatarId);
336 key osGetMapTexture(); 358 key osGetMapTexture();
337 key osGetRegionMapTexture(string regionName); 359 key osGetRegionMapTexture(string regionName);
338 LSL_List osGetRegionStats(); 360 LSL_List osGetRegionStats();
@@ -344,6 +366,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
344 LSL_Float osGetHealth(string avatar); 366 LSL_Float osGetHealth(string avatar);
345 void osCauseHealing(string avatar, double healing); 367 void osCauseHealing(string avatar, double healing);
346 void osCauseDamage(string avatar, double damage); 368 void osCauseDamage(string avatar, double damage);
369 void osForceOtherSit(string avatar);
370 void osForceOtherSit(string avatar, string target);
347 LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules); 371 LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules);
348 void osSetPrimitiveParams(LSL_Key prim, LSL_List rules); 372 void osSetPrimitiveParams(LSL_Key prim, LSL_List rules);
349 void osSetProjectionParams(bool projection, LSL_Key texture, double fov, double focus, double amb); 373 void osSetProjectionParams(bool projection, LSL_Key texture, double fov, double focus, double amb);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs
index 943d7a2..1cc2cfb 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs
@@ -78,6 +78,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
78 touch = 8, 78 touch = 8,
79 touch_end = 536870912, 79 touch_end = 536870912,
80 touch_start = 2097152, 80 touch_start = 2097152,
81 transaction_result = 33554432,
81 object_rez = 4194304 82 object_rez = 4194304
82 } 83 }
83 84
@@ -237,6 +238,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
237 m_eventFlagsMap.Add("touch", scriptEvents.touch); 238 m_eventFlagsMap.Add("touch", scriptEvents.touch);
238 m_eventFlagsMap.Add("touch_end", scriptEvents.touch_end); 239 m_eventFlagsMap.Add("touch_end", scriptEvents.touch_end);
239 m_eventFlagsMap.Add("touch_start", scriptEvents.touch_start); 240 m_eventFlagsMap.Add("touch_start", scriptEvents.touch_start);
241 m_eventFlagsMap.Add("transaction_result", scriptEvents.transaction_result);
240 m_eventFlagsMap.Add("object_rez", scriptEvents.object_rez); 242 m_eventFlagsMap.Add("object_rez", scriptEvents.object_rez);
241 } 243 }
242 } 244 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index 0e22ff3..158acc6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -48,6 +48,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
48 public const int STATUS_DIE_AT_EDGE = 128; 48 public const int STATUS_DIE_AT_EDGE = 128;
49 public const int STATUS_RETURN_AT_EDGE = 256; 49 public const int STATUS_RETURN_AT_EDGE = 256;
50 public const int STATUS_CAST_SHADOWS = 512; 50 public const int STATUS_CAST_SHADOWS = 512;
51 public const int STATUS_BLOCK_GRAB_OBJECT = 1024;
51 52
52 public const int AGENT = 1; 53 public const int AGENT = 1;
53 public const int AGENT_BY_LEGACY_NAME = 1; 54 public const int AGENT_BY_LEGACY_NAME = 1;
@@ -251,6 +252,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
251 public const int ATTACH_HUD_BOTTOM_LEFT = 36; 252 public const int ATTACH_HUD_BOTTOM_LEFT = 36;
252 public const int ATTACH_HUD_BOTTOM = 37; 253 public const int ATTACH_HUD_BOTTOM = 37;
253 public const int ATTACH_HUD_BOTTOM_RIGHT = 38; 254 public const int ATTACH_HUD_BOTTOM_RIGHT = 38;
255 public const int ATTACH_NECK = 39;
256 public const int ATTACH_AVATAR_CENTER = 40;
254 257
255 #region osMessageAttachments constants 258 #region osMessageAttachments constants
256 259
@@ -411,6 +414,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
411 public const int PRIM_POS_LOCAL = 33; 414 public const int PRIM_POS_LOCAL = 33;
412 public const int PRIM_LINK_TARGET = 34; 415 public const int PRIM_LINK_TARGET = 34;
413 public const int PRIM_SLICE = 35; 416 public const int PRIM_SLICE = 35;
417 public const int PRIM_SPECULAR = 36;
418 public const int PRIM_NORMAL = 37;
419 public const int PRIM_ALPHA_MODE = 38;
414 public const int PRIM_TEXGEN_DEFAULT = 0; 420 public const int PRIM_TEXGEN_DEFAULT = 0;
415 public const int PRIM_TEXGEN_PLANAR = 1; 421 public const int PRIM_TEXGEN_PLANAR = 1;
416 422
@@ -593,6 +599,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
593 public const int OBJECT_PHYSICS = 21; 599 public const int OBJECT_PHYSICS = 21;
594 public const int OBJECT_PHANTOM = 22; 600 public const int OBJECT_PHANTOM = 22;
595 public const int OBJECT_TEMP_ON_REZ = 23; 601 public const int OBJECT_TEMP_ON_REZ = 23;
602 public const int OBJECT_RENDER_WEIGHT = 24;
603 public const int OBJECT_HOVER_HEIGHT = 25;
604 public const int OBJECT_BODY_SHAPE_TYPE = 26;
605 public const int OBJECT_LAST_OWNER_ID = 27;
596 606
597 // Pathfinding types 607 // Pathfinding types
598 public const int OPT_OTHER = -1; 608 public const int OPT_OTHER = -1;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index 5047162..2745637 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -466,6 +466,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
466 return m_LSL_Functions.llGetEnergy(); 466 return m_LSL_Functions.llGetEnergy();
467 } 467 }
468 468
469 public LSL_String llGetEnv(LSL_String name)
470 {
471 return m_LSL_Functions.llGetEnv(name);
472 }
473
469 public LSL_Vector llGetForce() 474 public LSL_Vector llGetForce()
470 { 475 {
471 return m_LSL_Functions.llGetForce(); 476 return m_LSL_Functions.llGetForce();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 8666421..5fdbf9d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -420,6 +420,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
420 return m_OSSL_Functions.osGetScriptEngineName(); 420 return m_OSSL_Functions.osGetScriptEngineName();
421 } 421 }
422 422
423 public LSL_Integer osCheckODE()
424 {
425 return m_OSSL_Functions.osCheckODE();
426 }
427
423 public string osGetPhysicsEngineType() 428 public string osGetPhysicsEngineType()
424 { 429 {
425 return m_OSSL_Functions.osGetPhysicsEngineType(); 430 return m_OSSL_Functions.osGetPhysicsEngineType();
@@ -500,6 +505,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
500 return m_OSSL_Functions.osGetGridCustom(key); 505 return m_OSSL_Functions.osGetGridCustom(key);
501 } 506 }
502 507
508 public string osGetAvatarHomeURI(string uuid)
509 {
510 return m_OSSL_Functions.osGetAvatarHomeURI(uuid);
511 }
512
503 public LSL_String osFormatString(string str, LSL_List strings) 513 public LSL_String osFormatString(string str, LSL_List strings)
504 { 514 {
505 return m_OSSL_Functions.osFormatString(str, strings); 515 return m_OSSL_Functions.osFormatString(str, strings);
@@ -537,6 +547,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
537 return m_OSSL_Functions.osGetLinkPrimitiveParams(linknumber, rules); 547 return m_OSSL_Functions.osGetLinkPrimitiveParams(linknumber, rules);
538 } 548 }
539 549
550 public void osForceCreateLink(string target, int parent)
551 {
552 m_OSSL_Functions.osForceCreateLink(target, parent);
553 }
554
555 public void osForceBreakLink(int linknum)
556 {
557 m_OSSL_Functions.osForceBreakLink(linknum);
558 }
559
560 public void osForceBreakAllLinks()
561 {
562 m_OSSL_Functions.osForceBreakAllLinks();
563 }
564
540 public LSL_Integer osIsNpc(LSL_Key npc) 565 public LSL_Integer osIsNpc(LSL_Key npc)
541 { 566 {
542 return m_OSSL_Functions.osIsNpc(npc); 567 return m_OSSL_Functions.osIsNpc(npc);
@@ -714,6 +739,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
714 if (Position.y > ((int)Constants.RegionSize - 1)) 739 if (Position.y > ((int)Constants.RegionSize - 1))
715 Position.y = ((int)Constants.RegionSize - 1); 740 Position.y = ((int)Constants.RegionSize - 1);
716 */ 741 */
742<<<<<<< HEAD
743 if (Position.z > Constants.RegionHeight)
744 Position.z = Constants.RegionHeight;
745=======
746>>>>>>> avn/ubitvar
717 if (Position.x < 0) 747 if (Position.x < 0)
718 Position.x = 0; 748 Position.x = 0;
719 if (Position.y < 0) 749 if (Position.y < 0)
@@ -845,6 +875,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
845 } 875 }
846 } 876 }
847 877
878 public string osGetGender(LSL_Key rawAvatarId)
879 {
880 return m_OSSL_Functions.osGetGender(rawAvatarId);
881 }
882
848 public key osGetMapTexture() 883 public key osGetMapTexture()
849 { 884 {
850 return m_OSSL_Functions.osGetMapTexture(); 885 return m_OSSL_Functions.osGetMapTexture();
@@ -899,6 +934,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
899 { 934 {
900 m_OSSL_Functions.osCauseHealing(avatar, healing); 935 m_OSSL_Functions.osCauseHealing(avatar, healing);
901 } 936 }
937
938 public void osForceOtherSit(string avatar)
939 {
940 m_OSSL_Functions.osForceOtherSit(avatar);
941 }
942
943 public void osForceOtherSit(string avatar, string target)
944 {
945 m_OSSL_Functions.osForceOtherSit(avatar, target);
946 }
902 947
903 public LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules) 948 public LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules)
904 { 949 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs
deleted file mode 100644
index 27ab04e..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs
+++ /dev/null
@@ -1,218 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33using System.Text;
34
35namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
36{
37 public class Atom : IUnifiable
38 {
39 private static Dictionary<string, Atom> _atomStore = new Dictionary<string, Atom>();
40 public readonly string _name;
41 public readonly Atom _module;
42
43 /// <summary>
44 /// You should not call this constructor, but use Atom.a instead.
45 /// </summary>
46 /// <param name="name"></param>
47 /// <param name="module"></param>
48 private Atom(string name, Atom module)
49 {
50 _name = name;
51 _module = module;
52 }
53
54 /// <summary>
55 /// Return the unique Atom object for name where module is null. You should use this to create
56 /// an Atom instead of calling the Atom constructor.
57 /// </summary>
58 /// <param name="name"></param>
59 /// <returns></returns>
60 public static Atom a(string name)
61 {
62 Atom atom;
63 if (!_atomStore.TryGetValue(name, out atom))
64 {
65 atom = new Atom(name, null);
66 _atomStore[name] = atom;
67 }
68 return atom;
69 }
70
71 /// <summary>
72 /// Return an Atom object with the name and module. If module is null or Atom.NIL,
73 /// this behaves like Atom.a(name) and returns the unique object where the module is null.
74 /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom
75 /// with the same name and module.
76 /// </summary>
77 /// <param name="name"></param>
78 /// <param name="module"></param>
79 /// <returns></returns>
80 public static Atom a(string name, Atom module)
81 {
82 if (module == null || module == Atom.NIL)
83 return a(name);
84 return new Atom(name, module);
85 }
86
87 /// <summary>
88 /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL.
89 /// </summary>
90 /// <param name="Atom"></param>
91 /// <param name="Module"></param>
92 /// <returns></returns>
93 public static IEnumerable<bool> module(object Obj, object Module)
94 {
95 Obj = YP.getValue(Obj);
96 if (Obj is Atom)
97 {
98 if (((Atom)Obj)._module == null)
99 return YP.unify(Module, Atom.NIL);
100 else
101 return YP.unify(Module, ((Atom)Obj)._module);
102 }
103 return YP.fail();
104 }
105
106 public static readonly Atom NIL = Atom.a("[]");
107 public static readonly Atom DOT = Atom.a(".");
108 public static readonly Atom F = Atom.a("f");
109 public static readonly Atom SLASH = Atom.a("/");
110 public static readonly Atom HAT = Atom.a("^");
111 public static readonly Atom RULE = Atom.a(":-");
112
113 public IEnumerable<bool> unify(object arg)
114 {
115 arg = YP.getValue(arg);
116 if (arg is Atom)
117 return Equals(arg) ? YP.succeed() : YP.fail();
118 else if (arg is Variable)
119 return ((Variable)arg).unify(this);
120 else
121 return YP.fail();
122 }
123
124 public void addUniqueVariables(List<Variable> variableSet)
125 {
126 // Atom does not contain variables.
127 }
128
129 public object makeCopy(Variable.CopyStore copyStore)
130 {
131 // Atom does not contain variables that need to be copied.
132 return this;
133 }
134
135 public bool termEqual(object term)
136 {
137 return Equals(YP.getValue(term));
138 }
139
140 public bool ground()
141 {
142 // Atom is always ground.
143 return true;
144 }
145
146 public override bool Equals(object obj)
147 {
148 if (obj is Atom)
149 {
150 if (_module == null && ((Atom)obj)._module == null)
151 // When _declaringClass is null, we always use an identical object from _atomStore.
152 return this == obj;
153 // Otherwise, ignore _declaringClass and do a normal string compare on the _name.
154 return _name == ((Atom)obj)._name;
155 }
156 return false;
157 }
158
159 public override string ToString()
160 {
161 return _name;
162 }
163
164 public override int GetHashCode()
165 {
166 // Debug: need to check _declaringClass.
167 return _name.GetHashCode();
168 }
169
170 public string toQuotedString()
171 {
172 if (_name.Length == 0)
173 return "''";
174 else if (this == Atom.NIL)
175 return "[]";
176
177 StringBuilder result = new StringBuilder(_name.Length);
178 bool useQuotes = false;
179 foreach (char c in _name)
180 {
181 int cInt = (int)c;
182 if (c == '\'')
183 {
184 result.Append("''");
185 useQuotes = true;
186 }
187 else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' ||
188 cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9')
189 result.Append(c);
190 else
191 {
192 // Debug: Need to handle non-printable chars.
193 result.Append(c);
194 useQuotes = true;
195 }
196 }
197
198 if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z')
199 return result.ToString();
200 else
201 {
202 // Surround in single quotes.
203 result.Append('\'');
204 return "'" + result;
205 }
206 }
207
208 /// <summary>
209 /// Return true if _name is lexicographically less than atom._name.
210 /// </summary>
211 /// <param name="atom"></param>
212 /// <returns></returns>
213 public bool lessThan(Atom atom)
214 {
215 return _name.CompareTo(atom._name) < 0;
216 }
217 }
218}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs
deleted file mode 100644
index bbf1a5b..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs
+++ /dev/null
@@ -1,239 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
36{
37 /// <summary>
38 /// A BagofAnswers holds answers for bagof and setof.
39 /// </summary>
40 public class BagofAnswers
41 {
42 private object _template;
43 private Variable[] _freeVariables;
44 private Dictionary<object[], List<object>> _bagForFreeVariables;
45 private List<object> _findallBagArray;
46 private static TermArrayEqualityComparer _termArrayEqualityComparer =
47 new TermArrayEqualityComparer();
48
49 /// <summary>
50 /// To get the free variables, split off any existential qualifiers from Goal such as the X in
51 /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove
52 /// the unbound variables that are qualifiers as well as the unbound variables in Template.
53 /// </summary>
54 /// <param name="Template"></param>
55 /// <param name="Goal"></param>
56 public BagofAnswers(object Template, object Goal)
57 {
58 _template = Template;
59
60 // First get the set of variables that are not free variables.
61 List<Variable> variableSet = new List<Variable>();
62 YP.addUniqueVariables(Template, variableSet);
63 object UnqualifiedGoal = YP.getValue(Goal);
64 while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT)
65 {
66 YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet);
67 UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2);
68 }
69
70 // Remember how many non-free variables there are so we can find the unique free variables
71 // that are added.
72 int nNonFreeVariables = variableSet.Count;
73 YP.addUniqueVariables(UnqualifiedGoal, variableSet);
74 int nFreeVariables = variableSet.Count - nNonFreeVariables;
75 if (nFreeVariables == 0)
76 {
77 // There were no free variables added, so we won't waste time with _bagForFreeVariables.
78 _freeVariables = null;
79 _findallBagArray = new List<object>();
80 }
81 else
82 {
83 // Copy the free variables.
84 _freeVariables = new Variable[nFreeVariables];
85 for (int i = 0; i < nFreeVariables; ++i)
86 _freeVariables[i] = variableSet[i + nNonFreeVariables];
87
88 _bagForFreeVariables = new Dictionary<object[], List<object>>(_termArrayEqualityComparer);
89 }
90 }
91
92 public void add()
93 {
94 if (_freeVariables == null)
95 // The goal has bound the values in _template but we don't bother with _freeVariables.
96 _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
97 else
98 {
99 // The goal has bound the values in _template and _freeVariables.
100 // Find the entry for this set of _freeVariables values.
101 object[] freeVariableValues = new object[_freeVariables.Length];
102 for (int i = 0; i < _freeVariables.Length; ++i)
103 freeVariableValues[i] = YP.getValue(_freeVariables[i]);
104 List<object> bagArray;
105 if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray))
106 {
107 bagArray = new List<object>();
108 _bagForFreeVariables[freeVariableValues] = bagArray;
109 }
110
111 // Now copy the template and add to the bag for the freeVariables values.
112 bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
113 }
114 }
115
116 // disable warning on l1, don't see how we can
117 // code this differently
118 #pragma warning disable 0168, 0219
119
120 /// <summary>
121 /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag.
122 /// </summary>
123 /// <param name="bagArrayVariable">this is unified with the List<object> of matches for template that
124 /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog
125 /// list.</param>
126 /// <returns></returns>
127 public IEnumerable<bool> resultArray(Variable bagArrayVariable)
128 {
129 if (_freeVariables == null)
130 {
131 // No unbound free variables, so we only filled one bag. If empty, bagof fails.
132 if (_findallBagArray.Count > 0)
133 {
134 foreach (bool l1 in bagArrayVariable.unify(_findallBagArray))
135 yield return false;
136 }
137 }
138 else
139 {
140 foreach (KeyValuePair<object[], List<object>> valuesAndBag in _bagForFreeVariables)
141 {
142 foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key))
143 {
144 foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value))
145 yield return false;
146 }
147 // Debug: Should we free memory of the answers already returned?
148 }
149 }
150 }
151
152 /// <summary>
153 /// For each result, unify the _freeVariables and unify Bag with the associated bag.
154 /// </summary>
155 /// <param name="Bag"></param>
156 /// <returns></returns>
157 public IEnumerable<bool> result(object Bag)
158 {
159 Variable bagArrayVariable = new Variable();
160 foreach (bool l1 in resultArray(bagArrayVariable))
161 {
162 foreach (bool l2 in YP.unify(Bag, ListPair.make((List<object>)bagArrayVariable.getValue())))
163 yield return false;
164 }
165 }
166
167 /// <summary>
168 /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted
169 /// with duplicates removed, as in setof.
170 /// </summary>
171 /// <param name="Bag"></param>
172 /// <returns></returns>
173 public IEnumerable<bool> resultSet(object Bag)
174 {
175 Variable bagArrayVariable = new Variable();
176 foreach (bool l1 in resultArray(bagArrayVariable))
177 {
178 List<object> bagArray = (List<object>)bagArrayVariable.getValue();
179 YP.sortArray(bagArray);
180 foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray)))
181 yield return false;
182 }
183 }
184
185 public static IEnumerable<bool> bagofArray
186 (object Template, object Goal, IEnumerable<bool> goalIterator, Variable bagArrayVariable)
187 {
188 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
189 foreach (bool l1 in goalIterator)
190 bagOfAnswers.add();
191 return bagOfAnswers.resultArray(bagArrayVariable);
192 }
193
194 public static IEnumerable<bool> bagof
195 (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
196 {
197 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
198 foreach (bool l1 in goalIterator)
199 bagOfAnswers.add();
200 return bagOfAnswers.result(Bag);
201 }
202
203 public static IEnumerable<bool> setof
204 (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
205 {
206 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
207 foreach (bool l1 in goalIterator)
208 bagOfAnswers.add();
209 return bagOfAnswers.resultSet(Bag);
210 }
211 #pragma warning restore 0168, 0219
212
213 /// <summary>
214 /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual.
215 /// </summary>
216 private class TermArrayEqualityComparer : IEqualityComparer<object[]>
217 {
218 public bool Equals(object[] array1, object[] array2)
219 {
220 if (array1.Length != array2.Length)
221 return false;
222 for (int i = 0; i < array1.Length; ++i)
223 {
224 if (!YP.termEqual(array1[i], array2[i]))
225 return false;
226 }
227 return true;
228 }
229
230 public int GetHashCode(object[] array)
231 {
232 int hashCode = 0;
233 for (int i = 0; i < array.Length; ++i)
234 hashCode ^= array[i].GetHashCode();
235 return hashCode;
236 }
237 }
238 }
239}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs
deleted file mode 100644
index fb9569e..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs
+++ /dev/null
@@ -1,108 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
36{
37 /// <summary>
38 /// A FindallAnswers holds answers for findall.
39 /// </summary>
40 public class FindallAnswers
41 {
42 private object _template;
43 private List<object> _bagArray;
44
45 public FindallAnswers(object Template)
46 {
47 _template = Template;
48 _bagArray = new List<object>();
49 }
50
51 public void add()
52 {
53 _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
54 }
55
56 public List<object> resultArray()
57 {
58 return _bagArray;
59 }
60
61 /// <summary>
62 /// Unify Bag with the result. This frees the internal answers, so you can only call this once.
63 /// </summary>
64 /// <param name="Bag"></param>
65 /// <returns></returns>
66 public IEnumerable<bool> result(object Bag)
67 {
68 object result = ListPair.make(_bagArray);
69 // Try to free the memory.
70 _bagArray = null;
71 return YP.unify(Bag, result);
72 }
73
74 // disable warning on l1, don't see how we can
75 // code this differently
76 #pragma warning disable 0168, 0219
77
78 /// <summary>
79 /// This is a simplified findall when the goal is a single call.
80 /// </summary>
81 /// <param name="Template"></param>
82 /// <param name="goal"></param>
83 /// <param name="Bag"></param>
84 /// <returns></returns>
85 public static IEnumerable<bool> findall(object Template, IEnumerable<bool> goal, object Bag)
86 {
87 FindallAnswers findallAnswers = new FindallAnswers(Template);
88 foreach (bool l1 in goal)
89 findallAnswers.add();
90 return findallAnswers.result(Bag);
91 }
92
93 /// <summary>
94 /// Like findall, except return an array of the results.
95 /// </summary>
96 /// <param name="template"></param>
97 /// <param name="goal"></param>
98 /// <returns></returns>
99 public static List<object> findallArray(object Template, IEnumerable<bool> goal)
100 {
101 FindallAnswers findallAnswers = new FindallAnswers(Template);
102 foreach (bool l1 in goal)
103 findallAnswers.add();
104 return findallAnswers.resultArray();
105 }
106 #pragma warning restore 0168, 0219
107 }
108}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs
deleted file mode 100644
index 4d65f5b..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs
+++ /dev/null
@@ -1,196 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
35{
36 public class Functor : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object[] _args;
40
41 public Functor(Atom name, object[] args)
42 {
43 if (args.Length <= 3)
44 {
45 if (args.Length == 0)
46 throw new Exception("For arity 0 functor, just use name as an Atom");
47 else if (args.Length == 1)
48 throw new Exception("For arity 1 functor, use Functor1");
49 else if (args.Length == 2)
50 throw new Exception("For arity 2 functor, use Functor2");
51 else if (args.Length == 3)
52 throw new Exception("For arity 3 functor, use Functor3");
53 else
54 // (This shouldn't happen, but include it for completeness.
55 throw new Exception("Cannot create a Functor of arity " + args.Length);
56 }
57
58 _name = name;
59 _args = args;
60 }
61
62 public Functor(string name, object[] args)
63 : this(Atom.a(name), args)
64 {
65 }
66
67 /// <summary>
68 /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the
69 /// length of args.
70 /// Note that this is different than the Functor constructor which requires
71 /// the length of args to be greater than 3.
72 /// </summary>
73 /// <param name="name"></param>
74 /// <param name="args"></param>
75 /// <returns></returns>
76 public static object make(Atom name, object[] args)
77 {
78 if (args.Length <= 0)
79 return name;
80 else if (args.Length == 1)
81 return new Functor1(name, args[0]);
82 else if (args.Length == 2)
83 return new Functor2(name, args[0], args[1]);
84 else if (args.Length == 3)
85 return new Functor3(name, args[0], args[1], args[2]);
86 else
87 return new Functor(name, args);
88 }
89
90 /// <summary>
91 /// Call the main make, first converting name to an Atom.
92 /// </summary>
93 /// <param name="name"></param>
94 /// <param name="args"></param>
95 /// <returns></returns>
96 public static object make(string name, object[] args)
97 {
98 return make(Atom.a(name), args);
99 }
100
101 /// <summary>
102 /// If arg is another Functor, then succeed (yield once) if this and arg have the
103 /// same name and all functor args unify, otherwise fail (don't yield).
104 /// If arg is a Variable, then call its unify to unify with this.
105 /// Otherwise fail (don't yield).
106 /// </summary>
107 /// <param name="arg"></param>
108 /// <returns></returns>
109 public IEnumerable<bool> unify(object arg)
110 {
111 arg = YP.getValue(arg);
112 if (arg is Functor)
113 {
114 Functor argFunctor = (Functor)arg;
115 if (_name.Equals(argFunctor._name))
116 return YP.unifyArrays(_args, argFunctor._args);
117 else
118 return YP.fail();
119 }
120 else if (arg is Variable)
121 return ((Variable)arg).unify(this);
122 else
123 return YP.fail();
124 }
125
126 public override string ToString()
127 {
128 string result = _name + "(" + YP.getValue(_args[0]);
129 for (int i = 1; i < _args.Length; ++i)
130 result += ", " + YP.getValue(_args[i]);
131 result += ")";
132 return result;
133 }
134
135 public bool termEqual(object term)
136 {
137 term = YP.getValue(term);
138 if (term is Functor)
139 {
140 Functor termFunctor = (Functor)term;
141 if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length)
142 {
143 for (int i = 0; i < _args.Length; ++i)
144 {
145 if (!YP.termEqual(_args[i], termFunctor._args[i]))
146 return false;
147 }
148 return true;
149 }
150 }
151 return false;
152 }
153
154 public bool lessThan(Functor functor)
155 {
156 // Do the equal check first since it is faster.
157 if (!_name.Equals(functor._name))
158 return _name.lessThan(functor._name);
159
160 if (_args.Length != functor._args.Length)
161 return _args.Length < functor._args.Length;
162
163 for (int i = 0; i < _args.Length; ++i)
164 {
165 if (!YP.termEqual(_args[i], functor._args[i]))
166 return YP.termLessThan(_args[i], functor._args[i]);
167 }
168
169 return false;
170 }
171
172 public bool ground()
173 {
174 for (int i = 0; i < _args.Length; ++i)
175 {
176 if (!YP.ground(_args[i]))
177 return false;
178 }
179 return true;
180 }
181
182 public void addUniqueVariables(List<Variable> variableSet)
183 {
184 for (int i = 0; i < _args.Length; ++i)
185 YP.addUniqueVariables(_args[i], variableSet);
186 }
187
188 public object makeCopy(Variable.CopyStore copyStore)
189 {
190 object[] argsCopy = new object[_args.Length];
191 for (int i = 0; i < _args.Length; ++i)
192 argsCopy[i] = YP.makeCopy(_args[i], copyStore);
193 return new Functor(_name, argsCopy);
194 }
195 }
196}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs
deleted file mode 100644
index 80d98b1..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs
+++ /dev/null
@@ -1,124 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
35{
36 public class Functor1 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40
41 public Functor1(Atom name, object arg1)
42 {
43 _name = name;
44 _arg1 = arg1;
45 }
46
47 public Functor1(string name, object arg1)
48 : this(Atom.a(name), arg1)
49 {
50 }
51
52 // disable warning on l1, don't see how we can
53 // code this differently
54 #pragma warning disable 0168, 0219
55 /// <summary>
56 /// If arg is another Functor1, then succeed (yield once) if this and arg have the
57 /// same name and the functor args unify, otherwise fail (don't yield).
58 /// If arg is a Variable, then call its unify to unify with this.
59 /// Otherwise fail (don't yield).
60 /// </summary>
61 /// <param name="arg"></param>
62 /// <returns></returns>
63 public IEnumerable<bool> unify(object arg)
64 {
65 arg = YP.getValue(arg);
66 if (arg is Functor1)
67 {
68 Functor1 argFunctor = (Functor1)arg;
69 if (_name.Equals(argFunctor._name))
70 {
71 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
72 yield return false;
73 }
74 }
75 else if (arg is Variable)
76 {
77 foreach (bool l1 in ((Variable)arg).unify(this))
78 yield return false;
79 }
80 }
81 #pragma warning restore 0168, 0219
82
83
84 public override string ToString()
85 {
86 return _name + "(" + YP.getValue(_arg1) + ")";
87 }
88
89 public bool termEqual(object term)
90 {
91 term = YP.getValue(term);
92 if (term is Functor1)
93 {
94 Functor1 termFunctor = (Functor1)term;
95 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1);
96 }
97 return false;
98 }
99
100 public bool lessThan(Functor1 functor)
101 {
102 // Do the equal check first since it is faster.
103 if (!_name.Equals(functor._name))
104 return _name.lessThan(functor._name);
105
106 return YP.termLessThan(_arg1, functor._arg1);
107 }
108
109 public bool ground()
110 {
111 return YP.ground(_arg1);
112 }
113
114 public void addUniqueVariables(List<Variable> variableSet)
115 {
116 YP.addUniqueVariables(_arg1, variableSet);
117 }
118
119 public object makeCopy(Variable.CopyStore copyStore)
120 {
121 return new Functor1(_name, YP.makeCopy(_arg1, copyStore));
122 }
123 }
124}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs
deleted file mode 100644
index 4c501d6..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs
+++ /dev/null
@@ -1,163 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
35{
36 public class Functor2 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40 public readonly object _arg2;
41
42 public Functor2(Atom name, object arg1, object arg2)
43 {
44 _name = name;
45 _arg1 = arg1;
46 _arg2 = arg2;
47 }
48
49 public Functor2(string name, object arg1, object arg2)
50 : this(Atom.a(name), arg1, arg2)
51 {
52 }
53
54 // disable warning on l1, don't see how we can
55 // code this differently
56 #pragma warning disable 0168, 0219
57 /// If arg is another Functor2, then succeed (yield once) if this and arg have the
58 /// same name and all functor args unify, otherwise fail (don't yield).
59 /// If arg is a Variable, then call its unify to unify with this.
60 /// Otherwise fail (don't yield).
61 public IEnumerable<bool> unify(object arg)
62 {
63 arg = YP.getValue(arg);
64 if (arg is Functor2)
65 {
66 Functor2 argFunctor = (Functor2)arg;
67 if (_name.Equals(argFunctor._name))
68 {
69 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
70 {
71 foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
72 yield return false;
73 }
74 }
75 }
76 else if (arg is Variable)
77 {
78 foreach (bool l1 in ((Variable)arg).unify(this))
79 yield return false;
80 }
81 }
82 #pragma warning restore 0168, 0219
83
84
85 public override string ToString()
86 {
87 if (_name == Atom.DOT)
88 return listPairToString(this);
89 else
90 return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")";
91 }
92
93 public bool termEqual(object term)
94 {
95 term = YP.getValue(term);
96 if (term is Functor2)
97 {
98 Functor2 termFunctor = (Functor2)term;
99 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
100 && YP.termEqual(_arg2, termFunctor._arg2);
101 }
102 return false;
103 }
104
105 public bool lessThan(Functor2 functor)
106 {
107 // Do the equal check first since it is faster.
108 if (!_name.Equals(functor._name))
109 return _name.lessThan(functor._name);
110
111 if (!YP.termEqual(_arg1, functor._arg1))
112 return YP.termLessThan(_arg1, functor._arg1);
113
114 return YP.termLessThan(_arg2, functor._arg2);
115 }
116
117 public bool ground()
118 {
119 return YP.ground(_arg1) && YP.ground(_arg2);
120 }
121
122 public void addUniqueVariables(List<Variable> variableSet)
123 {
124 YP.addUniqueVariables(_arg1, variableSet);
125 YP.addUniqueVariables(_arg2, variableSet);
126 }
127
128 public object makeCopy(Variable.CopyStore copyStore)
129 {
130 return new Functor2(_name, YP.makeCopy(_arg1, copyStore),
131 YP.makeCopy(_arg2, copyStore));
132 }
133
134 private static string listPairToString(Functor2 listPair)
135 {
136 string result = "[";
137 while (true)
138 {
139 object head = YP.getValue(listPair._arg1);
140 object tail = YP.getValue(listPair._arg2);
141 if (tail == (object)Atom.NIL)
142 {
143 result += head;
144 break;
145 }
146 else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT)
147 {
148 result += head + ", ";
149 listPair = (Functor2)tail;
150 // Loop again.
151 }
152 else
153 {
154 // The list is not terminated with NIL.
155 result += head + "|" + tail;
156 break;
157 }
158 }
159 result += "]";
160 return result;
161 }
162 }
163}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs
deleted file mode 100644
index 94e39c4..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs
+++ /dev/null
@@ -1,141 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
35{
36 public class Functor3 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40 public readonly object _arg2;
41 public readonly object _arg3;
42
43 public Functor3(Atom name, object arg1, object arg2, object arg3)
44 {
45 _name = name;
46 _arg1 = arg1;
47 _arg2 = arg2;
48 _arg3 = arg3;
49 }
50
51 public Functor3(string name, object arg1, object arg2, object arg3)
52 : this(Atom.a(name), arg1, arg2, arg3)
53 {
54 }
55
56 // disable warning on l1, don't see how we can
57 // code this differently
58 #pragma warning disable 0168, 0219
59 /// If arg is another Functor3, then succeed (yield once) if this and arg have the
60 /// same name and all functor args unify, otherwise fail (don't yield).
61 /// If arg is a Variable, then call its unify to unify with this.
62 /// Otherwise fail (don't yield).
63 public IEnumerable<bool> unify(object arg)
64 {
65 arg = YP.getValue(arg);
66 if (arg is Functor3)
67 {
68 Functor3 argFunctor = (Functor3)arg;
69 if (_name.Equals(argFunctor._name))
70 {
71 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
72 {
73 foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
74 {
75 foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3))
76 yield return false;
77 }
78 }
79 }
80 }
81 else if (arg is Variable)
82 {
83 foreach (bool l1 in ((Variable)arg).unify(this))
84 yield return false;
85 }
86 }
87 #pragma warning restore 0168, 0219
88
89 public override string ToString()
90 {
91 return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " +
92 YP.getValue(_arg3) + ")";
93 }
94
95 public bool termEqual(object term)
96 {
97 term = YP.getValue(term);
98 if (term is Functor3)
99 {
100 Functor3 termFunctor = (Functor3)term;
101 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
102 && YP.termEqual(_arg2, termFunctor._arg2)
103 && YP.termEqual(_arg3, termFunctor._arg3);
104 }
105 return false;
106 }
107
108 public bool lessThan(Functor3 functor)
109 {
110 // Do the equal check first since it is faster.
111 if (!_name.Equals(functor._name))
112 return _name.lessThan(functor._name);
113
114 if (!YP.termEqual(_arg1, functor._arg1))
115 return YP.termLessThan(_arg1, functor._arg1);
116
117 if (!YP.termEqual(_arg2, functor._arg2))
118 return YP.termLessThan(_arg2, functor._arg2);
119
120 return YP.termLessThan(_arg3, functor._arg3);
121 }
122
123 public bool ground()
124 {
125 return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3);
126 }
127
128 public void addUniqueVariables(List<Variable> variableSet)
129 {
130 YP.addUniqueVariables(_arg1, variableSet);
131 YP.addUniqueVariables(_arg2, variableSet);
132 YP.addUniqueVariables(_arg3, variableSet);
133 }
134
135 public object makeCopy(Variable.CopyStore copyStore)
136 {
137 return new Functor3(_name, YP.makeCopy(_arg1, copyStore),
138 YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore));
139 }
140 }
141}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs
deleted file mode 100644
index 09a9a08..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs
+++ /dev/null
@@ -1,385 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
36{
37 /// <summary>
38 /// An IndexedAnswers holds answers to a query based on the values of index arguments.
39 /// </summary>
40 public class IndexedAnswers : YP.IClause
41 {
42 private int _arity;
43 // addAnswer adds the answer here and indexes it later.
44 private List<object[]> _allAnswers = new List<object[]>();
45 // The key has the arity of answers with non-null values for each indexed arg. The value
46 // is a list of the matching answers. The signature is implicit in the pattern on non-null index args.
47 private Dictionary<HashedList, List<object[]>> _indexedAnswers =
48 new Dictionary<HashedList, List<object[]>>();
49 // Keeps track of whether we have started adding entries to _indexedAnswers for the signature.
50 private Dictionary<int, object> _gotAnswersForSignature = new Dictionary<int, object>();
51 private const int MAX_INDEX_ARGS = 31;
52
53 public IndexedAnswers(int arity)
54 {
55 _arity = arity;
56 }
57
58 /// <summary>
59 /// Append the answer to the list and update the indexes, if any.
60 /// Elements of answer must be ground, since arguments with unbound variables make this
61 /// into a dynamic rule which we don't index.
62 /// </summary>
63 /// <param name="answer"></param>
64 public void addAnswer(object[] answer)
65 {
66 addOrPrependAnswer(answer, false);
67 }
68
69 /// <summary>
70 /// Prepend the answer to the list and clear the indexes so that they must be re-computed
71 /// on the next call to match. (Only addAnswer will maintain the indexes while adding answers.)
72 /// Elements of answer must be ground, since arguments with unbound variables make this
73 /// into a dynamic rule which we don't index.
74 /// </summary>
75 /// <param name="answer"></param>
76 public void prependAnswer(object[] answer)
77 {
78 addOrPrependAnswer(answer, true);
79 }
80
81 /// <summary>
82 /// Do the work of addAnswer or prependAnswer.
83 /// </summary>
84 /// <param name="answer"></param>
85 private void addOrPrependAnswer(object[] answer, bool prepend)
86 {
87 if (answer.Length != _arity)
88 return;
89
90 // Store a copy of the answer array.
91 object[] answerCopy = new object[answer.Length];
92 Variable.CopyStore copyStore = new Variable.CopyStore();
93 for (int i = 0; i < answer.Length; ++i)
94 answerCopy[i] = YP.makeCopy(answer[i], copyStore);
95 if (copyStore.getNUniqueVariables() > 0)
96 throw new InvalidOperationException
97 ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() +
98 " unbound variables");
99
100 if (prepend)
101 {
102 _allAnswers.Insert(0, answerCopy);
103 clearIndexes();
104 }
105 else
106 {
107 _allAnswers.Add(answerCopy);
108 // If match has already indexed answers for a signature, we need to add
109 // this to the existing indexed answers.
110 foreach (int signature in _gotAnswersForSignature.Keys)
111 indexAnswerForSignature(answerCopy, signature);
112 }
113 }
114
115 private void indexAnswerForSignature(object[] answer, int signature)
116 {
117 // First find out which of the answer values can be used as an index.
118 object[] indexValues = new object[answer.Length];
119 for (int i = 0; i < answer.Length; ++i)
120 {
121 // We limit the number of indexed args in a 32-bit signature.
122 if (i >= MAX_INDEX_ARGS)
123 indexValues[i] = null;
124 else
125 indexValues[i] = getIndexValue(YP.getValue(answer[i]));
126 }
127
128 // We need an entry in indexArgs from indexValues for each 1 bit in signature.
129 HashedList indexArgs = new HashedList(indexValues.Length);
130 for (int i = 0; i < indexValues.Length; ++i)
131 {
132 if ((signature & (1 << i)) == 0)
133 indexArgs.Add(null);
134 else
135 {
136 if (indexValues[i] == null)
137 // The signature wants an index value here, but we don't have one so
138 // we can't add it as an answer for this signature.
139 return;
140 else
141 indexArgs.Add(indexValues[i]);
142 }
143 }
144
145 // Add the answer to the answers list for indexArgs, creating the entry if needed.
146 List<object[]> answers;
147 if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
148 {
149 answers = new List<object[]>();
150 _indexedAnswers[indexArgs] = answers;
151 }
152 answers.Add(answer);
153 }
154
155 public IEnumerable<bool> match(object[] arguments)
156 {
157 if (arguments.Length != _arity)
158 yield break;
159
160 // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for
161 // each non-null index arg.
162 HashedList indexArgs = new HashedList(arguments.Length);
163 bool gotAllIndexArgs = true;
164 int signature = 0;
165 for (int i = 0; i < arguments.Length; ++i)
166 {
167 object indexValue = null;
168 if (i < MAX_INDEX_ARGS)
169 {
170 // We limit the number of args in a 32-bit signature.
171 indexValue = getIndexValue(YP.getValue(arguments[i]));
172 if (indexValue != null)
173 signature += (1 << i);
174 }
175 if (indexValue == null)
176 gotAllIndexArgs = false;
177 indexArgs.Add(indexValue);
178 }
179
180 List<object[]> answers;
181 if (signature == 0)
182 // No index args, so we have to match from _allAnswers.
183 answers = _allAnswers;
184 else
185 {
186 if (!_gotAnswersForSignature.ContainsKey(signature))
187 {
188 // We need to create the entry in _indexedAnswers.
189 foreach (object[] answer in _allAnswers)
190 indexAnswerForSignature(answer, signature);
191 // Mark that we did this signature.
192 _gotAnswersForSignature[signature] = null;
193 }
194 if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
195 yield break;
196 }
197
198 if (gotAllIndexArgs)
199 {
200 // All the arguments were already bound, so we don't need to do bindings.
201 yield return false;
202 yield break;
203 }
204
205 // Find matches in answers.
206 IEnumerator<bool>[] iterators = new IEnumerator<bool>[arguments.Length];
207 // Debug: If the caller asserts another answer into this same predicate during yield, the iterator
208 // over clauses will be corrupted. Should we take the time to copy answers?
209 foreach (object[] answer in answers)
210 {
211 bool gotMatch = true;
212 int nIterators = 0;
213 // Try to bind all the arguments.
214 for (int i = 0; i < arguments.Length; ++i)
215 {
216 if (indexArgs[i] != null)
217 // We already matched this argument by looking up _indexedAnswers.
218 continue;
219
220 IEnumerator<bool> iterator = YP.unify(arguments[i], answer[i]).GetEnumerator();
221 iterators[nIterators++] = iterator;
222 // MoveNext() is true if YP.unify succeeds.
223 if (!iterator.MoveNext())
224 {
225 gotMatch = false;
226 break;
227 }
228 }
229 int z = 0;
230 try
231 {
232 if (gotMatch)
233 yield return false;
234 }
235 finally
236 {
237 // Manually finalize all the iterators.
238 for (z = 0; z < nIterators; ++z)
239 iterators[z].Dispose();
240 }
241 }
242 }
243
244 public IEnumerable<bool> clause(object Head, object Body)
245 {
246 Head = YP.getValue(Head);
247 if (Head is Variable)
248 throw new PrologException("instantiation_error", "Head is an unbound variable");
249 object[] arguments = YP.getFunctorArgs(Head);
250
251 // We always match Head from _allAnswers, and the Body is Atom.a("true").
252 #pragma warning disable 0168, 0219
253 foreach (bool l1 in YP.unify(Body, Atom.a("true")))
254 {
255 // The caller can assert another answer into this same predicate during yield, so we have to
256 // make a copy of the answers.
257 foreach (object[] answer in _allAnswers.ToArray())
258 {
259 foreach (bool l2 in YP.unifyArrays(arguments, answer))
260 yield return false;
261 }
262 }
263 #pragma warning restore 0168, 0219
264 }
265
266 public IEnumerable<bool> retract(object Head, object Body)
267 {
268 Head = YP.getValue(Head);
269 if (Head is Variable)
270 throw new PrologException("instantiation_error", "Head is an unbound variable");
271 object[] arguments = YP.getFunctorArgs(Head);
272
273 // We always match Head from _allAnswers, and the Body is Atom.a("true").
274 #pragma warning disable 0168, 0219
275 foreach (bool l1 in YP.unify(Body, Atom.a("true")))
276 {
277 // The caller can assert another answer into this same predicate during yield, so we have to
278 // make a copy of the answers.
279 foreach (object[] answer in _allAnswers.ToArray())
280 {
281 foreach (bool l2 in YP.unifyArrays(arguments, answer))
282 {
283 _allAnswers.Remove(answer);
284 clearIndexes();
285 yield return false;
286 }
287 }
288 }
289 #pragma warning restore 0168, 0219
290 }
291
292 /// <summary>
293 /// After retracting or prepending an answer in _allAnswers, the indexes are invalid, so clear them.
294 /// </summary>
295 private void clearIndexes()
296 {
297 _indexedAnswers.Clear();
298 _gotAnswersForSignature.Clear();
299 }
300
301 /// <summary>
302 /// A HashedList extends an ArrayList with methods to get a hash and to check equality
303 /// based on the elements of the list.
304 /// </summary>
305 public class HashedList : ArrayList
306 {
307 private bool _gotHashCode = false;
308 private int _hashCode;
309
310 public HashedList()
311 : base()
312 {
313 }
314
315 public HashedList(int capacity)
316 : base(capacity)
317 {
318 }
319
320 public HashedList(ICollection c)
321 : base(c)
322 {
323 }
324
325 // Debug: Should override all the other methods that change this.
326 public override int Add(object value)
327 {
328 _gotHashCode = false;
329 return base.Add(value);
330 }
331
332 public override int GetHashCode()
333 {
334 if (!_gotHashCode)
335 {
336 int hashCode = 1;
337 foreach (object obj in this)
338 hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode());
339 _hashCode = hashCode;
340 _gotHashCode = true;
341 }
342 return _hashCode;
343 }
344
345 public override bool Equals(object obj)
346 {
347 if (!(obj is ArrayList))
348 return false;
349
350 ArrayList objList = (ArrayList)obj;
351 if (objList.Count != Count)
352 return false;
353
354 for (int i = 0; i < Count; ++i)
355 {
356 object value = objList[i];
357 if (value == null)
358 {
359 if (this[i] != null)
360 return false;
361 }
362 else
363 {
364 if (!value.Equals(this[i]))
365 return false;
366 }
367 }
368 return true;
369 }
370 }
371
372 /// <summary>
373 /// If we keep an index on value, return the value, or null if we don't index it.
374 /// </summary>
375 /// <param name="value">the term to examine. Assume you already called YP.getValue(value)</param>
376 /// <returns></returns>
377 public static object getIndexValue(object value)
378 {
379 if (value is Atom || value is string || value is Int32 || value is DateTime)
380 return value;
381 else
382 return null;
383 }
384 }
385}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs
deleted file mode 100644
index daac0ba..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs
+++ /dev/null
@@ -1,166 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
35{
36 public class ListPair : Functor2
37 {
38 public ListPair(object head, object tail) : base(Atom.DOT, head, tail)
39 {
40 }
41
42 public static object make(List<object> list)
43 {
44 if (list.Count <= 0)
45 return Atom.NIL;
46
47 object result = Atom.NIL;
48 // Start from the end.
49 for (int i = list.Count - 1; i >= 0; --i)
50 result = new ListPair(list[i], result);
51 return result;
52 }
53
54 public static object make(object[] array)
55 {
56 if (array.Length <= 0)
57 return Atom.NIL;
58
59 object result = Atom.NIL;
60 // Start from the end.
61 for (int i = array.Length - 1; i >= 0; --i)
62 result = new ListPair(array[i], result);
63 return result;
64 }
65
66 /// <summary>
67 /// Return a ListPair version of array, where repeated elements
68 /// (according to YP.termEqual) are removed.
69 /// </summary>
70 /// <param name="array"></param>
71 /// <returns></returns>
72 public static object makeWithoutRepeatedTerms(object[] array)
73 {
74 if (array.Length <= 0)
75 return Atom.NIL;
76
77 // Start from the end.
78 object previousTerm = array[array.Length - 1];
79 object result = new ListPair(previousTerm, Atom.NIL);
80 for (int i = array.Length - 2; i >= 0; --i)
81 {
82 object term = array[i];
83 if (YP.termEqual(term, previousTerm))
84 continue;
85 result = new ListPair(term, result);
86 previousTerm = term;
87 }
88 return result;
89 }
90
91 /// <summary>
92 /// Return a ListPair version of array, where repeated elements
93 /// (according to YP.termEqual) are removed.
94 /// </summary>
95 /// <param name="array"></param>
96 /// <returns></returns>
97 public static object makeWithoutRepeatedTerms(List<object> array)
98 {
99 if (array.Count <= 0)
100 return Atom.NIL;
101
102 // Start from the end.
103 object previousTerm = array[array.Count - 1];
104 object result = new ListPair(previousTerm, Atom.NIL);
105 for (int i = array.Count - 2; i >= 0; --i)
106 {
107 object term = array[i];
108 if (YP.termEqual(term, previousTerm))
109 continue;
110 result = new ListPair(term, result);
111 previousTerm = term;
112 }
113 return result;
114 }
115
116 public static object make(object element1)
117 {
118 return new ListPair(element1, Atom.NIL);
119 }
120
121 public static object make(object element1, object element2)
122 {
123 return new ListPair(element1, new ListPair(element2, Atom.NIL));
124 }
125
126 public static object make(object element1, object element2, object element3)
127 {
128 return new ListPair(element1,
129 new ListPair(element2, new ListPair(element3, Atom.NIL)));
130 }
131
132 /// <summary>
133 /// Return an array of the elements in list or null if it is not
134 /// a proper list. If list is Atom.NIL, return an array of zero elements.
135 /// If the list or one of the tails of the list is Variable, raise an instantiation_error.
136 /// This does not call YP.getValue on each element.
137 /// </summary>
138 /// <param name="list"></param>
139 /// <returns></returns>
140 public static object[] toArray(object list)
141 {
142 list = YP.getValue(list);
143 if (list.Equals(Atom.NIL))
144 return new object[0];
145
146 List<object> result = new List<object>();
147 object element = list;
148 while (true) {
149 if (element == Atom.NIL)
150 break;
151 if (element is Variable)
152 throw new PrologException(Atom.a("instantiation_error"),
153 "List tail is an unbound variable");
154 if (!(element is Functor2 && ((Functor2)element)._name == Atom.DOT))
155 // Not a proper list.
156 return null;
157 result.Add(((Functor2)element)._arg1);
158 element = YP.getValue(((Functor2)element)._arg2);
159 }
160
161 if (result.Count <= 0)
162 return null;
163 return result.ToArray();
164 }
165 }
166}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs
deleted file mode 100644
index 34010e7..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs
+++ /dev/null
@@ -1,4575 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34 // disable warning on l1, don't see how we can
35 // code this differently
36 #pragma warning disable 0168, 0219, 0162
37
38namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
39{
40 public class Parser
41 {
42 public static IEnumerable<bool> read_term2(object Term, object Options)
43 {
44 Variable Answer = new Variable();
45 Variable Variables = new Variable();
46 foreach (bool l1 in read_termOptions(Options, Variables))
47 {
48 foreach (bool l2 in portable_read3(Answer, Variables, new Variable()))
49 {
50 foreach (bool l3 in remove_pos(Answer, Term))
51 yield return false;
52 }
53 }
54 }
55
56 public static IEnumerable<bool> read_term3(object Input, object Term, object Options)
57 {
58 Variable SaveInput = new Variable();
59 Variable Answer = new Variable();
60 Variable Variables = new Variable();
61 foreach (bool l1 in read_termOptions(Options, Variables))
62 {
63 foreach (bool l2 in YP.current_input(SaveInput))
64 {
65 try
66 {
67 YP.see(Input);
68 foreach (bool l3 in portable_read3(Answer, Variables, new Variable()))
69 {
70 foreach (bool l4 in remove_pos(Answer, Term))
71 yield return false;
72 }
73 }
74 finally
75 {
76 YP.see(SaveInput);
77 }
78 }
79 }
80 }
81
82 /// <summary>
83 /// For read_term, check if Options has variable_names(Variables).
84 /// Otherwise, ignore Options.
85 /// </summary>
86 /// <param name="Options"></param>
87 /// <param name="Variables"></param>
88 /// <returns></returns>
89 private static IEnumerable<bool> read_termOptions(object Options, object Variables)
90 {
91 Options = YP.getValue(Options);
92 if (Options is Variable)
93 throw new PrologException(Atom.a("instantiation_error"), "Options is an unbound variable");
94 // First try to match Options = [variable_names(Variables)]
95 foreach (bool l1 in YP.unify(Options, ListPair.make(new Functor1("variable_names", Variables))))
96 {
97 yield return false;
98 yield break;
99 }
100 // Default: Ignore Options.
101 yield return false;
102 }
103
104 public static IEnumerable<bool> read1(object Term)
105 {
106 return read_term2(Term, Atom.NIL);
107 }
108
109 public static IEnumerable<bool> read2(object Input, object Term)
110 {
111 return read_term3(Input, Term, Atom.NIL);
112 }
113
114 public static IEnumerable<bool> formatError(object Output, object Format, object Arguments)
115 {
116 // Debug: Simple implementation for now.
117 YP.write(Format);
118 YP.write(Arguments);
119 YP.nl();
120 yield return false;
121 }
122
123
124 // Debug: Hand-modify this central predicate to do tail recursion.
125 public static IEnumerable<bool> read_tokens(object arg1, object arg2, object arg3)
126 {
127 bool repeat = true;
128 while (repeat)
129 {
130 repeat = false;
131 {
132 object C1 = arg1;
133 object Dict = arg2;
134 object Tokens = arg3;
135 Variable C2 = new Variable();
136 if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
137 {
138 if (YP.greaterThanOrEqual(C1, 0))
139 {
140 foreach (bool l4 in YP.get_code(C2))
141 {
142#if false
143 foreach (bool l5 in read_tokens(C2, Dict, Tokens))
144 {
145 yield return false;
146 }
147#endif
148 arg1 = YP.getValue(C2);
149 arg2 = YP.getValue(Dict);
150 arg3 = YP.getValue(Tokens);
151 repeat = true;
152 }
153 }
154 goto cutIf1;
155 }
156 if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
157 {
158 if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
159 {
160 foreach (bool l4 in read_identifier(C1, Dict, Tokens))
161 {
162 yield return false;
163 }
164 goto cutIf2;
165 }
166 }
167 if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
168 {
169 if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
170 {
171 foreach (bool l4 in read_variable(C1, Dict, Tokens))
172 {
173 yield return false;
174 }
175 goto cutIf3;
176 }
177 }
178 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
179 {
180 if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
181 {
182 foreach (bool l4 in read_number(C1, Dict, Tokens))
183 {
184 yield return false;
185 }
186 goto cutIf4;
187 }
188 }
189 if (YP.lessThan(C1, 127))
190 {
191 foreach (bool l3 in read_special(C1, Dict, Tokens))
192 {
193 yield return false;
194 }
195 goto cutIf5;
196 }
197 if (YP.lessThanOrEqual(C1, 160))
198 {
199 foreach (bool l3 in YP.get_code(C2))
200 {
201#if false
202 foreach (bool l4 in read_tokens(C2, Dict, Tokens))
203 {
204 yield return false;
205 }
206#endif
207 arg1 = YP.getValue(C2);
208 arg2 = YP.getValue(Dict);
209 arg3 = YP.getValue(Tokens);
210 repeat = true;
211 }
212 goto cutIf6;
213 }
214 if (YP.greaterThanOrEqual(C1, 223))
215 {
216 if (YP.notEqual(C1, 247))
217 {
218 foreach (bool l4 in read_identifier(C1, Dict, Tokens))
219 {
220 yield return false;
221 }
222 goto cutIf7;
223 }
224 }
225 if (YP.greaterThanOrEqual(C1, 192))
226 {
227 if (YP.notEqual(C1, 215))
228 {
229 foreach (bool l4 in read_variable(C1, Dict, Tokens))
230 {
231 yield return false;
232 }
233 goto cutIf8;
234 }
235 }
236 if (YP.notEqual(C1, 170))
237 {
238 if (YP.notEqual(C1, 186))
239 {
240 foreach (bool l4 in read_symbol(C1, Dict, Tokens))
241 {
242 yield return false;
243 }
244 goto cutIf9;
245 }
246 }
247 foreach (bool l2 in read_identifier(C1, Dict, Tokens))
248 {
249 yield return false;
250 }
251 cutIf9:
252 cutIf8:
253 cutIf7:
254 cutIf6:
255 cutIf5:
256 cutIf4:
257 cutIf3:
258 cutIf2:
259 cutIf1:
260 { }
261 }
262 }
263 }
264
265 // Compiler output follows.
266
267 class YPInnerClass { }
268 // static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
269
270 public static IEnumerable<bool> parseInput(object TermList)
271 {
272 {
273 Variable TermAndVariables = new Variable();
274 FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables);
275 foreach (bool l2 in parseInputHelper(TermAndVariables))
276 {
277 findallAnswers1.add();
278 }
279 foreach (bool l2 in findallAnswers1.result(TermList))
280 {
281 yield return false;
282 }
283 }
284 }
285
286 public static IEnumerable<bool> parseInputHelper(object arg1)
287 {
288 {
289 Variable Term = new Variable();
290 Variable Variables = new Variable();
291 Variable Answer = new Variable();
292 Variable x4 = new Variable();
293 foreach (bool l2 in YP.unify(arg1, new Functor2("f", Term, Variables)))
294 {
295 foreach (bool l3 in YP.repeat())
296 {
297 foreach (bool l4 in portable_read3(Answer, Variables, x4))
298 {
299 foreach (bool l5 in remove_pos(Answer, Term))
300 {
301 if (YP.termEqual(Term, Atom.a("end_of_file")))
302 {
303 yield break;
304 goto cutIf1;
305 }
306 yield return false;
307 cutIf1:
308 { }
309 }
310 }
311 }
312 }
313 }
314 }
315
316 public static IEnumerable<bool> clear_errors()
317 {
318 {
319 yield return false;
320 }
321 }
322
323 public static IEnumerable<bool> remove_pos(object arg1, object arg2)
324 {
325 {
326 Variable X = new Variable();
327 foreach (bool l2 in YP.unify(arg1, X))
328 {
329 foreach (bool l3 in YP.unify(arg2, X))
330 {
331 if (YP.var(X))
332 {
333 yield return true;
334 yield break;
335 }
336 }
337 }
338 }
339 {
340 object X = arg2;
341 Variable _Pos = new Variable();
342 Variable _Name = new Variable();
343 foreach (bool l2 in YP.unify(arg1, new Functor3("$VAR", _Pos, _Name, X)))
344 {
345 if (YP.var(X))
346 {
347 yield return true;
348 yield break;
349 }
350 }
351 }
352 {
353 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
354 {
355 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
356 {
357 yield return true;
358 yield break;
359 }
360 }
361 }
362 {
363 Variable H = new Variable();
364 Variable T = new Variable();
365 Variable NH = new Variable();
366 Variable NT = new Variable();
367 foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
368 {
369 foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT)))
370 {
371 foreach (bool l4 in remove_pos(H, NH))
372 {
373 foreach (bool l5 in remove_pos(T, NT))
374 {
375 yield return false;
376 }
377 }
378 yield break;
379 }
380 }
381 }
382 {
383 Variable A = new Variable();
384 Variable B = new Variable();
385 Variable NA = new Variable();
386 Variable NB = new Variable();
387 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
388 {
389 foreach (bool l3 in YP.unify(arg2, new Functor2(",", NA, NB)))
390 {
391 foreach (bool l4 in remove_pos(A, NA))
392 {
393 foreach (bool l5 in remove_pos(B, NB))
394 {
395 yield return false;
396 }
397 }
398 yield break;
399 }
400 }
401 }
402 {
403 Variable Atom_1 = new Variable();
404 Variable _F = new Variable();
405 foreach (bool l2 in YP.unify(arg1, Atom_1))
406 {
407 foreach (bool l3 in YP.unify(arg2, Atom_1))
408 {
409 foreach (bool l4 in YP.functor(Atom_1, _F, 0))
410 {
411 yield return false;
412 }
413 }
414 }
415 }
416 {
417 object Term = arg1;
418 object NewTerm = arg2;
419 Variable Func = new Variable();
420 Variable _Pos = new Variable();
421 Variable Args = new Variable();
422 Variable NArgs = new Variable();
423 if (YP.nonvar(Term))
424 {
425 foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args))))
426 {
427 foreach (bool l4 in remove_pos(Args, NArgs))
428 {
429 foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs)))
430 {
431 yield return false;
432 }
433 }
434 }
435 }
436 }
437 }
438
439 public static IEnumerable<bool> portable_read_position(object Term, object PosTerm, object Syntax)
440 {
441 {
442 foreach (bool l2 in portable_read(PosTerm, Syntax))
443 {
444 foreach (bool l3 in remove_pos(PosTerm, Term))
445 {
446 yield return false;
447 }
448 }
449 }
450 }
451
452 public static IEnumerable<bool> portable_read(object Answer, object Syntax)
453 {
454 {
455 Variable Tokens = new Variable();
456 Variable ParseTokens = new Variable();
457 foreach (bool l2 in read_tokens1(Tokens))
458 {
459 foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
460 {
461 foreach (bool l4 in parse2(ParseTokens, Answer))
462 {
463 yield return false;
464 }
465 }
466 }
467 }
468 }
469
470 public static IEnumerable<bool> portable_read3(object Answer, object Variables, object Syntax)
471 {
472 {
473 Variable Tokens = new Variable();
474 Variable ParseTokens = new Variable();
475 foreach (bool l2 in read_tokens2(Tokens, Variables))
476 {
477 foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
478 {
479 foreach (bool l4 in parse2(ParseTokens, Answer))
480 {
481 yield return false;
482 }
483 }
484 }
485 }
486 }
487
488 public static IEnumerable<bool> remove_comments(object arg1, object arg2, object arg3)
489 {
490 {
491 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
492 {
493 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
494 {
495 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
496 {
497 yield return false;
498 }
499 }
500 }
501 }
502 {
503 object Ys = arg2;
504 Variable S = new Variable();
505 Variable E = new Variable();
506 Variable Xs = new Variable();
507 Variable Zs = new Variable();
508 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("comment", S, E), Xs)))
509 {
510 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", S, E), Zs)))
511 {
512 foreach (bool l4 in remove_comments(Xs, Ys, Zs))
513 {
514 yield return false;
515 }
516 yield break;
517 }
518 }
519 }
520 {
521 Variable Pos = new Variable();
522 Variable Xs = new Variable();
523 Variable Ys = new Variable();
524 Variable Pos2 = new Variable();
525 Variable Zs = new Variable();
526 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("["), Pos), Xs)))
527 {
528 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("["), Ys)))
529 {
530 foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs)))
531 {
532 foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
533 {
534 foreach (bool l6 in remove_comments(Xs, Ys, Zs))
535 {
536 yield return false;
537 }
538 }
539 yield break;
540 }
541 }
542 }
543 }
544 {
545 Variable Pos = new Variable();
546 Variable Xs = new Variable();
547 Variable Ys = new Variable();
548 Variable Pos2 = new Variable();
549 Variable Zs = new Variable();
550 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("]"), Pos), Xs)))
551 {
552 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), Ys)))
553 {
554 foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs)))
555 {
556 foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
557 {
558 foreach (bool l6 in remove_comments(Xs, Ys, Zs))
559 {
560 yield return false;
561 }
562 }
563 yield break;
564 }
565 }
566 }
567 }
568 {
569 object Zs = arg3;
570 Variable Token = new Variable();
571 Variable Xs = new Variable();
572 Variable Ys = new Variable();
573 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs)))
574 {
575 foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys)))
576 {
577 foreach (bool l4 in remove_comments(Xs, Ys, Zs))
578 {
579 yield return false;
580 }
581 }
582 }
583 }
584 }
585
586 public static IEnumerable<bool> expect(object Token, object arg2, object arg3)
587 {
588 {
589 object Rest = arg3;
590 foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest)))
591 {
592 yield return true;
593 yield break;
594 }
595 }
596 {
597 object S0 = arg2;
598 object x3 = arg3;
599 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("or"), Atom.a("operator"), Atom.a("expected") }), S0))
600 {
601 yield return false;
602 }
603 }
604 }
605
606 public static IEnumerable<bool> parse2(object Tokens, object Answer)
607 {
608 {
609 Variable Term = new Variable();
610 Variable LeftOver = new Variable();
611 foreach (bool l2 in clear_errors())
612 {
613 foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver))
614 {
615 foreach (bool l4 in all_read(LeftOver))
616 {
617 foreach (bool l5 in YP.unify(Answer, Term))
618 {
619 yield return false;
620 }
621 yield break;
622 }
623 }
624 foreach (bool l3 in syntax_error(Tokens))
625 {
626 yield return false;
627 }
628 }
629 }
630 }
631
632 public static IEnumerable<bool> all_read(object arg1)
633 {
634 {
635 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
636 {
637 yield return false;
638 }
639 }
640 {
641 Variable Token = new Variable();
642 Variable S = new Variable();
643 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S)))
644 {
645 foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a("operator"), Atom.a("expected"), Atom.a("after"), Atom.a("expression") }), new ListPair(Token, S)))
646 {
647 yield return false;
648 }
649 }
650 }
651 }
652
653 public static IEnumerable<bool> parse(object arg1, object arg2, object arg3, object arg4)
654 {
655 {
656 object x1 = arg2;
657 object x2 = arg3;
658 object x3 = arg4;
659 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
660 {
661 foreach (bool l3 in syntax_error(new ListPair(Atom.a("expression"), new ListPair(Atom.a("expected"), Atom.NIL)), Atom.NIL))
662 {
663 yield return false;
664 }
665 }
666 }
667 {
668 object Precedence = arg2;
669 object Term = arg3;
670 object LeftOver = arg4;
671 Variable Token = new Variable();
672 Variable RestTokens = new Variable();
673 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens)))
674 {
675 foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver))
676 {
677 yield return false;
678 }
679 }
680 }
681 }
682
683 public static IEnumerable<bool> parse5(object arg1, object arg2, object arg3, object arg4, object arg5)
684 {
685 {
686 object S0 = arg2;
687 object x2 = arg3;
688 object x3 = arg4;
689 object x4 = arg5;
690 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
691 {
692 foreach (bool l3 in cannot_start(Atom.a("}"), S0))
693 {
694 yield return false;
695 }
696 }
697 }
698 {
699 object S0 = arg2;
700 object x2 = arg3;
701 object x3 = arg4;
702 object x4 = arg5;
703 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
704 {
705 foreach (bool l3 in cannot_start(Atom.a("]"), S0))
706 {
707 yield return false;
708 }
709 }
710 }
711 {
712 object S0 = arg2;
713 object x2 = arg3;
714 object x3 = arg4;
715 object x4 = arg5;
716 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
717 {
718 foreach (bool l3 in cannot_start(Atom.a(")"), S0))
719 {
720 yield return false;
721 }
722 }
723 }
724 {
725 object S0 = arg2;
726 object x2 = arg3;
727 object x3 = arg4;
728 object x4 = arg5;
729 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
730 {
731 foreach (bool l3 in cannot_start(Atom.a(","), S0))
732 {
733 yield return false;
734 }
735 }
736 }
737 {
738 object S0 = arg2;
739 object x2 = arg3;
740 object x3 = arg4;
741 object x4 = arg5;
742 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
743 {
744 foreach (bool l3 in cannot_start(Atom.a("|"), S0))
745 {
746 yield return false;
747 }
748 }
749 }
750 {
751 object S0 = arg2;
752 object Precedence = arg3;
753 object Answer = arg4;
754 object S = arg5;
755 Variable Codes = new Variable();
756 Variable Term = new Variable();
757 Variable A = new Variable();
758 foreach (bool l2 in YP.unify(arg1, new Functor1("string", Codes)))
759 {
760 foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("atom")))
761 {
762 foreach (bool l4 in YP.atom_codes(Term, Codes))
763 {
764 foreach (bool l5 in exprtl0(S0, Term, Precedence, Answer, S))
765 {
766 yield return false;
767 }
768 }
769 goto cutIf1;
770 }
771 foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("chars")))
772 {
773 foreach (bool l4 in YP.atom_codes(A, Codes))
774 {
775 foreach (bool l5 in YP.atom_chars(A, Term))
776 {
777 foreach (bool l6 in exprtl0(S0, Term, Precedence, Answer, S))
778 {
779 yield return false;
780 }
781 }
782 }
783 goto cutIf2;
784 }
785 foreach (bool l3 in YP.unify(Term, Codes))
786 {
787 foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
788 {
789 yield return false;
790 }
791 }
792 cutIf2:
793 cutIf1:
794 { }
795 }
796 }
797 {
798 object S0 = arg2;
799 object Precedence = arg3;
800 object Answer = arg4;
801 object S = arg5;
802 Variable Number = new Variable();
803 foreach (bool l2 in YP.unify(arg1, new Functor1("number", Number)))
804 {
805 foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S))
806 {
807 yield return false;
808 }
809 }
810 }
811 {
812 object Precedence = arg3;
813 object Answer = arg4;
814 object S = arg5;
815 Variable S1 = new Variable();
816 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
817 {
818 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), S1)))
819 {
820 foreach (bool l4 in read_atom(new Functor2("/", Atom.NIL, 0), S1, Precedence, Answer, S))
821 {
822 yield return false;
823 }
824 yield break;
825 }
826 }
827 }
828 {
829 object S1 = arg2;
830 object Precedence = arg3;
831 object Answer = arg4;
832 object S = arg5;
833 Variable Arg1 = new Variable();
834 Variable S2 = new Variable();
835 Variable RestArgs = new Variable();
836 Variable S3 = new Variable();
837 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
838 {
839 foreach (bool l3 in parse(S1, 999, Arg1, S2))
840 {
841 foreach (bool l4 in read_list(S2, RestArgs, S3))
842 {
843 foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S))
844 {
845 yield return false;
846 }
847 yield break;
848 }
849 }
850 }
851 }
852 {
853 object S1 = arg2;
854 object Precedence = arg3;
855 object Answer = arg4;
856 object S = arg5;
857 Variable Term = new Variable();
858 Variable S2 = new Variable();
859 Variable S3 = new Variable();
860 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
861 {
862 foreach (bool l3 in parse(S1, 1200, Term, S2))
863 {
864 foreach (bool l4 in expect(Atom.a(")"), S2, S3))
865 {
866 foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
867 {
868 yield return false;
869 }
870 yield break;
871 }
872 }
873 }
874 }
875 {
876 object S1 = arg2;
877 object Precedence = arg3;
878 object Answer = arg4;
879 object S = arg5;
880 Variable Term = new Variable();
881 Variable S2 = new Variable();
882 Variable S3 = new Variable();
883 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
884 {
885 foreach (bool l3 in parse(S1, 1200, Term, S2))
886 {
887 foreach (bool l4 in expect(Atom.a(")"), S2, S3))
888 {
889 foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
890 {
891 yield return false;
892 }
893 yield break;
894 }
895 }
896 }
897 }
898 {
899 object Precedence = arg3;
900 object Answer = arg4;
901 object S = arg5;
902 Variable _Pos = new Variable();
903 Variable S1 = new Variable();
904 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), _Pos)))
905 {
906 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("}"), S1)))
907 {
908 foreach (bool l4 in read_atom(Atom.a("{}"), S1, Precedence, Answer, S))
909 {
910 yield return false;
911 }
912 yield break;
913 }
914 }
915 }
916 {
917 object S1 = arg2;
918 object Precedence = arg3;
919 object Answer = arg4;
920 object S = arg5;
921 Variable Pos = new Variable();
922 Variable Term = new Variable();
923 Variable S2 = new Variable();
924 Variable S3 = new Variable();
925 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), Pos)))
926 {
927 foreach (bool l3 in parse(S1, 1200, Term, S2))
928 {
929 foreach (bool l4 in expect(Atom.a("}"), S2, S3))
930 {
931 foreach (bool l5 in exprtl0(S3, new Functor2("{}", Pos, Term), Precedence, Answer, S))
932 {
933 yield return false;
934 }
935 yield break;
936 }
937 }
938 }
939 }
940 {
941 object Precedence = arg3;
942 object Answer = arg4;
943 object S = arg5;
944 Variable Variable_1 = new Variable();
945 Variable Name = new Variable();
946 Variable Pos = new Variable();
947 Variable S1 = new Variable();
948 Variable Arg1 = new Variable();
949 Variable S2 = new Variable();
950 Variable RestArgs = new Variable();
951 Variable S3 = new Variable();
952 Variable Term = new Variable();
953 foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos)))
954 {
955 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1)))
956 {
957 foreach (bool l4 in parse(S1, 999, Arg1, S2))
958 {
959 foreach (bool l5 in read_args(S2, RestArgs, S3))
960 {
961 foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a("call"), new ListPair(new Functor3("$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs)))))
962 {
963 foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
964 {
965 yield return false;
966 }
967 }
968 yield break;
969 }
970 }
971 yield break;
972 }
973 }
974 }
975 {
976 object S0 = arg2;
977 object Precedence = arg3;
978 object Answer = arg4;
979 object S = arg5;
980 Variable Variable_1 = new Variable();
981 Variable Name = new Variable();
982 Variable Pos = new Variable();
983 foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos)))
984 {
985 foreach (bool l3 in exprtl0(S0, new Functor3("$VAR", Pos, Name, Variable_1), Precedence, Answer, S))
986 {
987 yield return false;
988 }
989 }
990 }
991 {
992 object S0 = arg2;
993 object Precedence = arg3;
994 object Answer = arg4;
995 object S = arg5;
996 Variable Atom_1 = new Variable();
997 Variable P = new Variable();
998 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", Atom_1, P)))
999 {
1000 foreach (bool l3 in read_atom(new Functor2("/", Atom_1, P), S0, Precedence, Answer, S))
1001 {
1002 yield return false;
1003 }
1004 }
1005 }
1006 }
1007
1008 public static IEnumerable<bool> read_atom(object arg1, object arg2, object Precedence, object Answer, object S)
1009 {
1010 {
1011 Variable _Pos = new Variable();
1012 Variable Number = new Variable();
1013 Variable S1 = new Variable();
1014 Variable Negative = new Variable();
1015 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("-"), _Pos)))
1016 {
1017 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("number", Number), S1)))
1018 {
1019 foreach (bool l4 in YP.unify(Negative, YP.negate(Number)))
1020 {
1021 foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S))
1022 {
1023 yield return false;
1024 }
1025 }
1026 yield break;
1027 }
1028 }
1029 }
1030 {
1031 Variable Functor_1 = new Variable();
1032 Variable Pos = new Variable();
1033 Variable S1 = new Variable();
1034 Variable Arg1 = new Variable();
1035 Variable S2 = new Variable();
1036 Variable RestArgs = new Variable();
1037 Variable S3 = new Variable();
1038 Variable Term = new Variable();
1039 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Functor_1, Pos)))
1040 {
1041 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1)))
1042 {
1043 foreach (bool l4 in parse(S1, 999, Arg1, S2))
1044 {
1045 foreach (bool l5 in read_args(S2, RestArgs, S3))
1046 {
1047 foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs)))))
1048 {
1049 foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
1050 {
1051 yield return false;
1052 }
1053 }
1054 yield break;
1055 }
1056 }
1057 yield break;
1058 }
1059 }
1060 }
1061 {
1062 object S0 = arg2;
1063 Variable Op = new Variable();
1064 Variable Pos = new Variable();
1065 Variable Oprec = new Variable();
1066 Variable Aprec = new Variable();
1067 Variable Flag = new Variable();
1068 Variable Term = new Variable();
1069 Variable Arg = new Variable();
1070 Variable S1 = new Variable();
1071 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Op, Pos)))
1072 {
1073 foreach (bool l3 in prefixop(Op, Oprec, Aprec))
1074 {
1075 foreach (bool l4 in possible_right_operand(S0, Flag))
1076 {
1077 if (YP.lessThan(Flag, 0))
1078 {
1079 foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL))))
1080 {
1081 foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S))
1082 {
1083 yield return false;
1084 }
1085 }
1086 goto cutIf1;
1087 }
1088 if (YP.greaterThan(Oprec, Precedence))
1089 {
1090 foreach (bool l6 in syntax_error(ListPair.make(new object[] { Atom.a("prefix"), Atom.a("operator"), Op, Atom.a("in"), Atom.a("context"), Atom.a("with"), Atom.a("precedence"), Precedence }), S0))
1091 {
1092 yield return false;
1093 }
1094 goto cutIf2;
1095 }
1096 if (YP.greaterThan(Flag, 0))
1097 {
1098 foreach (bool l6 in parse(S0, Aprec, Arg, S1))
1099 {
1100 foreach (bool l7 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg })))
1101 {
1102 foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
1103 {
1104 yield return false;
1105 }
1106 }
1107 yield break;
1108 }
1109 goto cutIf3;
1110 }
1111 foreach (bool l5 in peepop(S0, S1))
1112 {
1113 foreach (bool l6 in prefix_is_atom(S1, Oprec))
1114 {
1115 foreach (bool l7 in exprtl(S1, Oprec, new Functor2("/", Op, Pos), Precedence, Answer, S))
1116 {
1117 yield return false;
1118 }
1119 }
1120 }
1121 foreach (bool l5 in parse(S0, Aprec, Arg, S1))
1122 {
1123 foreach (bool l6 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg })))
1124 {
1125 foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
1126 {
1127 yield return false;
1128 }
1129 }
1130 yield break;
1131 }
1132 cutIf3:
1133 cutIf2:
1134 cutIf1:
1135 { }
1136 }
1137 yield break;
1138 }
1139 }
1140 }
1141 {
1142 object S0 = arg2;
1143 Variable Atom_1 = new Variable();
1144 Variable Pos = new Variable();
1145 Variable Term = new Variable();
1146 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom_1, Pos)))
1147 {
1148 foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL))))
1149 {
1150 foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
1151 {
1152 yield return false;
1153 }
1154 }
1155 }
1156 }
1157 }
1158
1159 public static IEnumerable<bool> cannot_start(object Token, object S0)
1160 {
1161 {
1162 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("cannot"), Atom.a("start"), Atom.a("an"), Atom.a("expression") }), S0))
1163 {
1164 yield return false;
1165 }
1166 }
1167 }
1168
1169 public static IEnumerable<bool> read_args(object arg1, object arg2, object arg3)
1170 {
1171 {
1172 object S = arg3;
1173 Variable S1 = new Variable();
1174 Variable Term = new Variable();
1175 Variable Rest = new Variable();
1176 Variable S2 = new Variable();
1177 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(","), S1)))
1178 {
1179 foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest)))
1180 {
1181 foreach (bool l4 in parse(S1, 999, Term, S2))
1182 {
1183 foreach (bool l5 in read_args(S2, Rest, S))
1184 {
1185 yield return false;
1186 }
1187 yield break;
1188 }
1189 yield break;
1190 }
1191 }
1192 }
1193 {
1194 object S = arg3;
1195 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(")"), S)))
1196 {
1197 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1198 {
1199 yield return true;
1200 yield break;
1201 }
1202 }
1203 }
1204 {
1205 object S = arg1;
1206 object x2 = arg2;
1207 object x3 = arg3;
1208 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", or )"), Atom.a("expected"), Atom.a("in"), Atom.a("arguments") }), S))
1209 {
1210 yield return false;
1211 }
1212 }
1213 }
1214
1215 public static IEnumerable<bool> read_list(object arg1, object arg2, object arg3)
1216 {
1217 {
1218 object x1 = arg2;
1219 object x2 = arg3;
1220 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1221 {
1222 foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), Atom.NIL))
1223 {
1224 yield return false;
1225 }
1226 }
1227 }
1228 {
1229 object Rest = arg2;
1230 object S = arg3;
1231 Variable Token = new Variable();
1232 Variable S1 = new Variable();
1233 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
1234 {
1235 foreach (bool l3 in read_list4(Token, S1, Rest, S))
1236 {
1237 yield return false;
1238 }
1239 }
1240 }
1241 }
1242
1243 public static IEnumerable<bool> read_list4(object arg1, object arg2, object arg3, object arg4)
1244 {
1245 {
1246 object S1 = arg2;
1247 object S = arg4;
1248 Variable Term = new Variable();
1249 Variable Rest = new Variable();
1250 Variable S2 = new Variable();
1251 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1252 {
1253 foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest)))
1254 {
1255 foreach (bool l4 in parse(S1, 999, Term, S2))
1256 {
1257 foreach (bool l5 in read_list(S2, Rest, S))
1258 {
1259 yield return false;
1260 }
1261 yield break;
1262 }
1263 yield break;
1264 }
1265 }
1266 }
1267 {
1268 object S1 = arg2;
1269 object Rest = arg3;
1270 object S = arg4;
1271 Variable S2 = new Variable();
1272 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1273 {
1274 foreach (bool l3 in parse(S1, 999, Rest, S2))
1275 {
1276 foreach (bool l4 in expect(Atom.a("]"), S2, S))
1277 {
1278 yield return false;
1279 }
1280 yield break;
1281 }
1282 yield break;
1283 }
1284 }
1285 {
1286 Variable S1 = new Variable();
1287 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1288 {
1289 foreach (bool l3 in YP.unify(arg2, S1))
1290 {
1291 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1292 {
1293 foreach (bool l5 in YP.unify(arg4, S1))
1294 {
1295 yield return true;
1296 yield break;
1297 }
1298 }
1299 }
1300 }
1301 }
1302 {
1303 object Token = arg1;
1304 object S1 = arg2;
1305 object x3 = arg3;
1306 object x4 = arg4;
1307 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), new ListPair(Token, S1)))
1308 {
1309 yield return false;
1310 }
1311 }
1312 }
1313
1314 public static IEnumerable<bool> possible_right_operand(object arg1, object arg2)
1315 {
1316 {
1317 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1318 {
1319 foreach (bool l3 in YP.unify(arg2, -1))
1320 {
1321 yield return false;
1322 }
1323 }
1324 }
1325 {
1326 object Flag = arg2;
1327 Variable H = new Variable();
1328 Variable T = new Variable();
1329 foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
1330 {
1331 foreach (bool l3 in possible_right_operand3(H, Flag, T))
1332 {
1333 yield return false;
1334 }
1335 }
1336 }
1337 }
1338
1339 public static IEnumerable<bool> possible_right_operand3(object arg1, object arg2, object arg3)
1340 {
1341 {
1342 object x4 = arg3;
1343 Variable x1 = new Variable();
1344 Variable x2 = new Variable();
1345 Variable x3 = new Variable();
1346 foreach (bool l2 in YP.unify(arg1, new Functor3("var", x1, x2, x3)))
1347 {
1348 foreach (bool l3 in YP.unify(arg2, 1))
1349 {
1350 yield return false;
1351 }
1352 }
1353 }
1354 {
1355 object x2 = arg3;
1356 Variable x1 = new Variable();
1357 foreach (bool l2 in YP.unify(arg1, new Functor1("number", x1)))
1358 {
1359 foreach (bool l3 in YP.unify(arg2, 1))
1360 {
1361 yield return false;
1362 }
1363 }
1364 }
1365 {
1366 object x2 = arg3;
1367 Variable x1 = new Variable();
1368 foreach (bool l2 in YP.unify(arg1, new Functor1("string", x1)))
1369 {
1370 foreach (bool l3 in YP.unify(arg2, 1))
1371 {
1372 yield return false;
1373 }
1374 }
1375 }
1376 {
1377 object x1 = arg3;
1378 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
1379 {
1380 foreach (bool l3 in YP.unify(arg2, 1))
1381 {
1382 yield return false;
1383 }
1384 }
1385 }
1386 {
1387 object x1 = arg3;
1388 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
1389 {
1390 foreach (bool l3 in YP.unify(arg2, 0))
1391 {
1392 yield return false;
1393 }
1394 }
1395 }
1396 {
1397 object x1 = arg3;
1398 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1399 {
1400 foreach (bool l3 in YP.unify(arg2, -1))
1401 {
1402 yield return false;
1403 }
1404 }
1405 }
1406 {
1407 Variable x1 = new Variable();
1408 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1409 {
1410 foreach (bool l3 in YP.unify(arg2, 0))
1411 {
1412 foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("]"), x1)))
1413 {
1414 yield return true;
1415 yield break;
1416 }
1417 }
1418 }
1419 }
1420 {
1421 object x1 = arg3;
1422 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1423 {
1424 foreach (bool l3 in YP.unify(arg2, 1))
1425 {
1426 yield return false;
1427 }
1428 }
1429 }
1430 {
1431 object x1 = arg3;
1432 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1433 {
1434 foreach (bool l3 in YP.unify(arg2, -1))
1435 {
1436 yield return false;
1437 }
1438 }
1439 }
1440 {
1441 Variable x1 = new Variable();
1442 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1443 {
1444 foreach (bool l3 in YP.unify(arg2, 0))
1445 {
1446 foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("}"), x1)))
1447 {
1448 yield return true;
1449 yield break;
1450 }
1451 }
1452 }
1453 }
1454 {
1455 object x1 = arg3;
1456 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1457 {
1458 foreach (bool l3 in YP.unify(arg2, 1))
1459 {
1460 yield return false;
1461 }
1462 }
1463 }
1464 {
1465 object x1 = arg3;
1466 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1467 {
1468 foreach (bool l3 in YP.unify(arg2, -1))
1469 {
1470 yield return false;
1471 }
1472 }
1473 }
1474 {
1475 object x1 = arg3;
1476 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1477 {
1478 foreach (bool l3 in YP.unify(arg2, -1))
1479 {
1480 yield return false;
1481 }
1482 }
1483 }
1484 {
1485 object x1 = arg3;
1486 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1487 {
1488 foreach (bool l3 in YP.unify(arg2, -1))
1489 {
1490 yield return false;
1491 }
1492 }
1493 }
1494 {
1495 object x3 = arg3;
1496 Variable x1 = new Variable();
1497 Variable x2 = new Variable();
1498 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", x1, x2)))
1499 {
1500 foreach (bool l3 in YP.unify(arg2, 0))
1501 {
1502 yield return false;
1503 }
1504 }
1505 }
1506 }
1507
1508 public static IEnumerable<bool> peepop(object arg1, object arg2)
1509 {
1510 {
1511 Variable F = new Variable();
1512 Variable Pos = new Variable();
1513 Variable S1 = new Variable();
1514 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1))))
1515 {
1516 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1))))
1517 {
1518 yield return true;
1519 yield break;
1520 }
1521 }
1522 }
1523 {
1524 Variable F = new Variable();
1525 Variable Pos = new Variable();
1526 Variable S1 = new Variable();
1527 Variable L = new Variable();
1528 Variable P = new Variable();
1529 Variable R = new Variable();
1530 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1)))
1531 {
1532 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, P, R }), S1)))
1533 {
1534 foreach (bool l4 in infixop(F, L, P, R))
1535 {
1536 yield return false;
1537 }
1538 }
1539 }
1540 }
1541 {
1542 Variable F = new Variable();
1543 Variable Pos = new Variable();
1544 Variable S1 = new Variable();
1545 Variable L = new Variable();
1546 Variable P = new Variable();
1547 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1)))
1548 {
1549 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, P), S1)))
1550 {
1551 foreach (bool l4 in postfixop(F, L, P))
1552 {
1553 yield return false;
1554 }
1555 }
1556 }
1557 }
1558 {
1559 Variable S0 = new Variable();
1560 foreach (bool l2 in YP.unify(arg1, S0))
1561 {
1562 foreach (bool l3 in YP.unify(arg2, S0))
1563 {
1564 yield return false;
1565 }
1566 }
1567 }
1568 }
1569
1570 public static IEnumerable<bool> prefix_is_atom(object arg1, object arg2)
1571 {
1572 {
1573 object Precedence = arg2;
1574 Variable Token = new Variable();
1575 Variable x2 = new Variable();
1576 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2)))
1577 {
1578 foreach (bool l3 in prefix_is_atom(Token, Precedence))
1579 {
1580 yield return false;
1581 }
1582 }
1583 }
1584 {
1585 object P = arg2;
1586 Variable x1 = new Variable();
1587 Variable L = new Variable();
1588 Variable x3 = new Variable();
1589 Variable x4 = new Variable();
1590 foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { x1, L, x3, x4 })))
1591 {
1592 if (YP.greaterThanOrEqual(L, P))
1593 {
1594 yield return false;
1595 }
1596 }
1597 }
1598 {
1599 object P = arg2;
1600 Variable x1 = new Variable();
1601 Variable L = new Variable();
1602 Variable x3 = new Variable();
1603 foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), x1, L, x3)))
1604 {
1605 if (YP.greaterThanOrEqual(L, P))
1606 {
1607 yield return false;
1608 }
1609 }
1610 }
1611 {
1612 object x1 = arg2;
1613 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1614 {
1615 yield return false;
1616 }
1617 }
1618 {
1619 object x1 = arg2;
1620 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1621 {
1622 yield return false;
1623 }
1624 }
1625 {
1626 object x1 = arg2;
1627 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1628 {
1629 yield return false;
1630 }
1631 }
1632 {
1633 object P = arg2;
1634 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1635 {
1636 if (YP.greaterThanOrEqual(1100, P))
1637 {
1638 yield return false;
1639 }
1640 }
1641 }
1642 {
1643 object P = arg2;
1644 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1645 {
1646 if (YP.greaterThanOrEqual(1000, P))
1647 {
1648 yield return false;
1649 }
1650 }
1651 }
1652 {
1653 object x1 = arg2;
1654 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1655 {
1656 yield return false;
1657 }
1658 }
1659 }
1660
1661 public static IEnumerable<bool> exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5)
1662 {
1663 {
1664 object x2 = arg3;
1665 Variable Term = new Variable();
1666 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1667 {
1668 foreach (bool l3 in YP.unify(arg2, Term))
1669 {
1670 foreach (bool l4 in YP.unify(arg4, Term))
1671 {
1672 foreach (bool l5 in YP.unify(arg5, Atom.NIL))
1673 {
1674 yield return false;
1675 }
1676 }
1677 }
1678 }
1679 }
1680 {
1681 object Term = arg2;
1682 object Precedence = arg3;
1683 object Answer = arg4;
1684 object S = arg5;
1685 Variable Token = new Variable();
1686 Variable S1 = new Variable();
1687 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
1688 {
1689 foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1))
1690 {
1691 yield return false;
1692 }
1693 }
1694 }
1695 }
1696
1697 public static IEnumerable<bool> exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1698 {
1699 {
1700 object x2 = arg3;
1701 object S1 = arg6;
1702 Variable Term = new Variable();
1703 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1704 {
1705 foreach (bool l3 in YP.unify(arg2, Term))
1706 {
1707 foreach (bool l4 in YP.unify(arg4, Term))
1708 {
1709 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("}"), S1)))
1710 {
1711 yield return false;
1712 }
1713 }
1714 }
1715 }
1716 }
1717 {
1718 object x2 = arg3;
1719 object S1 = arg6;
1720 Variable Term = new Variable();
1721 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1722 {
1723 foreach (bool l3 in YP.unify(arg2, Term))
1724 {
1725 foreach (bool l4 in YP.unify(arg4, Term))
1726 {
1727 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("]"), S1)))
1728 {
1729 yield return false;
1730 }
1731 }
1732 }
1733 }
1734 }
1735 {
1736 object x2 = arg3;
1737 object S1 = arg6;
1738 Variable Term = new Variable();
1739 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1740 {
1741 foreach (bool l3 in YP.unify(arg2, Term))
1742 {
1743 foreach (bool l4 in YP.unify(arg4, Term))
1744 {
1745 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(")"), S1)))
1746 {
1747 yield return false;
1748 }
1749 }
1750 }
1751 }
1752 }
1753 {
1754 object Term = arg2;
1755 object Precedence = arg3;
1756 object Answer = arg4;
1757 object S = arg5;
1758 object S1 = arg6;
1759 Variable Next = new Variable();
1760 Variable S2 = new Variable();
1761 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1762 {
1763 if (YP.greaterThanOrEqual(Precedence, 1000))
1764 {
1765 foreach (bool l4 in parse(S1, 1000, Next, S2))
1766 {
1767 foreach (bool l5 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S))
1768 {
1769 yield return false;
1770 }
1771 yield break;
1772 }
1773 goto cutIf1;
1774 }
1775 foreach (bool l3 in YP.unify(Answer, Term))
1776 {
1777 foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(","), S1)))
1778 {
1779 yield return false;
1780 }
1781 }
1782 cutIf1:
1783 { }
1784 }
1785 }
1786 {
1787 object Term = arg2;
1788 object Precedence = arg3;
1789 object Answer = arg4;
1790 object S = arg5;
1791 object S1 = arg6;
1792 Variable Next = new Variable();
1793 Variable S2 = new Variable();
1794 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1795 {
1796 if (YP.greaterThanOrEqual(Precedence, 1100))
1797 {
1798 foreach (bool l4 in parse(S1, 1100, Next, S2))
1799 {
1800 foreach (bool l5 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S))
1801 {
1802 yield return false;
1803 }
1804 yield break;
1805 }
1806 goto cutIf2;
1807 }
1808 foreach (bool l3 in YP.unify(Answer, Term))
1809 {
1810 foreach (bool l4 in YP.unify(S, new ListPair(Atom.a("|"), S1)))
1811 {
1812 yield return false;
1813 }
1814 }
1815 cutIf2:
1816 { }
1817 }
1818 }
1819 {
1820 object x2 = arg2;
1821 object x3 = arg3;
1822 object x4 = arg4;
1823 object x5 = arg5;
1824 object S1 = arg6;
1825 Variable S = new Variable();
1826 foreach (bool l2 in YP.unify(arg1, new Functor1("string", S)))
1827 {
1828 foreach (bool l3 in cannot_follow(Atom.a("chars"), new Functor1("string", S), S1))
1829 {
1830 yield return false;
1831 }
1832 }
1833 }
1834 {
1835 object x2 = arg2;
1836 object x3 = arg3;
1837 object x4 = arg4;
1838 object x5 = arg5;
1839 object S1 = arg6;
1840 Variable N = new Variable();
1841 foreach (bool l2 in YP.unify(arg1, new Functor1("number", N)))
1842 {
1843 foreach (bool l3 in cannot_follow(Atom.a("number"), new Functor1("number", N), S1))
1844 {
1845 yield return false;
1846 }
1847 }
1848 }
1849 {
1850 object Term = arg2;
1851 object Precedence = arg3;
1852 object Answer = arg4;
1853 object S = arg5;
1854 Variable S1 = new Variable();
1855 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1856 {
1857 foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("}"), S1)))
1858 {
1859 foreach (bool l4 in exprtl0_atom(Atom.a("{}"), Term, Precedence, Answer, S, S1))
1860 {
1861 yield return false;
1862 }
1863 yield break;
1864 }
1865 }
1866 }
1867 {
1868 object x1 = arg2;
1869 object x2 = arg3;
1870 object x3 = arg4;
1871 object x4 = arg5;
1872 object S1 = arg6;
1873 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1874 {
1875 foreach (bool l3 in cannot_follow(Atom.a("brace"), Atom.a("{"), S1))
1876 {
1877 yield return false;
1878 }
1879 }
1880 }
1881 {
1882 object Term = arg2;
1883 object Precedence = arg3;
1884 object Answer = arg4;
1885 object S = arg5;
1886 Variable S1 = new Variable();
1887 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1888 {
1889 foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("]"), S1)))
1890 {
1891 foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1))
1892 {
1893 yield return false;
1894 }
1895 yield break;
1896 }
1897 }
1898 }
1899 {
1900 object x1 = arg2;
1901 object x2 = arg3;
1902 object x3 = arg4;
1903 object x4 = arg5;
1904 object S1 = arg6;
1905 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1906 {
1907 foreach (bool l3 in cannot_follow(Atom.a("bracket"), Atom.a("["), S1))
1908 {
1909 yield return false;
1910 }
1911 }
1912 }
1913 {
1914 object x1 = arg2;
1915 object x2 = arg3;
1916 object x3 = arg4;
1917 object x4 = arg5;
1918 object S1 = arg6;
1919 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
1920 {
1921 foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1))
1922 {
1923 yield return false;
1924 }
1925 }
1926 }
1927 {
1928 object x1 = arg2;
1929 object x2 = arg3;
1930 object x3 = arg4;
1931 object x4 = arg5;
1932 object S1 = arg6;
1933 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
1934 {
1935 foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1))
1936 {
1937 yield return false;
1938 }
1939 }
1940 }
1941 {
1942 object x4 = arg2;
1943 object x5 = arg3;
1944 object x6 = arg4;
1945 object x7 = arg5;
1946 object S1 = arg6;
1947 Variable A = new Variable();
1948 Variable B = new Variable();
1949 Variable P = new Variable();
1950 foreach (bool l2 in YP.unify(arg1, new Functor3("var", A, B, P)))
1951 {
1952 foreach (bool l3 in cannot_follow(Atom.a("variable"), new Functor3("var", A, B, P), S1))
1953 {
1954 yield return false;
1955 }
1956 }
1957 }
1958 {
1959 object Term = arg2;
1960 object Precedence = arg3;
1961 object Answer = arg4;
1962 object S = arg5;
1963 object S1 = arg6;
1964 Variable F = new Variable();
1965 Variable P = new Variable();
1966 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", F, P)))
1967 {
1968 foreach (bool l3 in exprtl0_atom(new Functor2("/", F, P), Term, Precedence, Answer, S, S1))
1969 {
1970 yield return false;
1971 }
1972 }
1973 }
1974 }
1975
1976 public static IEnumerable<bool> exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1)
1977 {
1978 {
1979 object Term = arg2;
1980 object Precedence = arg3;
1981 object Answer = arg4;
1982 object S = arg5;
1983 Variable F = new Variable();
1984 Variable Pos = new Variable();
1985 Variable L1 = new Variable();
1986 Variable O1 = new Variable();
1987 Variable R1 = new Variable();
1988 Variable L2 = new Variable();
1989 Variable O2 = new Variable();
1990 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
1991 {
1992 foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2))
1993 {
1994 foreach (bool l4 in prefix_is_atom(S1, Precedence))
1995 {
1996 foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
1997 {
1998 yield return false;
1999 }
2000 yield break;
2001 }
2002 foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
2003 {
2004 yield return false;
2005 }
2006 foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
2007 {
2008 yield return false;
2009 }
2010 yield break;
2011 }
2012 }
2013 }
2014 {
2015 object Term = arg2;
2016 object Precedence = arg3;
2017 object Answer = arg4;
2018 object S = arg5;
2019 Variable F = new Variable();
2020 Variable Pos = new Variable();
2021 Variable L1 = new Variable();
2022 Variable O1 = new Variable();
2023 Variable R1 = new Variable();
2024 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
2025 {
2026 foreach (bool l3 in infixop(F, L1, O1, R1))
2027 {
2028 foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
2029 {
2030 yield return false;
2031 }
2032 yield break;
2033 }
2034 }
2035 }
2036 {
2037 object Term = arg2;
2038 object Precedence = arg3;
2039 object Answer = arg4;
2040 object S = arg5;
2041 Variable F = new Variable();
2042 Variable Pos = new Variable();
2043 Variable L2 = new Variable();
2044 Variable O2 = new Variable();
2045 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
2046 {
2047 foreach (bool l3 in postfixop(F, L2, O2))
2048 {
2049 foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
2050 {
2051 yield return false;
2052 }
2053 yield break;
2054 }
2055 }
2056 }
2057 {
2058 object X = arg1;
2059 object x2 = arg2;
2060 object x3 = arg3;
2061 object x4 = arg4;
2062 object x5 = arg5;
2063 Variable x7 = new Variable();
2064 foreach (bool l2 in syntax_error(ListPair.make(new object[] { new Functor2("-", Atom.a("non"), Atom.a("operator")), X, Atom.a("follows"), Atom.a("expression") }), new ListPair(new Functor2("atom", X, x7), S1)))
2065 {
2066 yield return false;
2067 }
2068 yield break;
2069 }
2070 }
2071
2072 public static IEnumerable<bool> cannot_follow(object Type, object Token, object Tokens)
2073 {
2074 {
2075 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Type, Atom.a("follows"), Atom.a("expression") }), new ListPair(Token, Tokens)))
2076 {
2077 yield return false;
2078 }
2079 }
2080 }
2081
2082 public static IEnumerable<bool> exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
2083 {
2084 {
2085 object x1 = arg2;
2086 object x3 = arg4;
2087 Variable Term = new Variable();
2088 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
2089 {
2090 foreach (bool l3 in YP.unify(arg3, Term))
2091 {
2092 foreach (bool l4 in YP.unify(arg5, Term))
2093 {
2094 foreach (bool l5 in YP.unify(arg6, Atom.NIL))
2095 {
2096 yield return false;
2097 }
2098 }
2099 }
2100 }
2101 }
2102 {
2103 object C = arg2;
2104 object Term = arg3;
2105 object Precedence = arg4;
2106 object Answer = arg5;
2107 object S = arg6;
2108 Variable Token = new Variable();
2109 Variable Tokens = new Variable();
2110 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens)))
2111 {
2112 foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens))
2113 {
2114 yield return false;
2115 }
2116 }
2117 }
2118 }
2119
2120 public static IEnumerable<bool> exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7)
2121 {
2122 {
2123 object C = arg2;
2124 object Term = arg3;
2125 object Precedence = arg4;
2126 object Answer = arg5;
2127 object S = arg6;
2128 object S1 = arg7;
2129 Variable F = new Variable();
2130 Variable Pos = new Variable();
2131 Variable L = new Variable();
2132 Variable O = new Variable();
2133 Variable R = new Variable();
2134 Variable Other = new Variable();
2135 Variable S2 = new Variable();
2136 Variable Expr = new Variable();
2137 foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, O, R })))
2138 {
2139 if (YP.greaterThanOrEqual(Precedence, O))
2140 {
2141 if (YP.lessThanOrEqual(C, L))
2142 {
2143 foreach (bool l5 in parse(S1, R, Other, S2))
2144 {
2145 foreach (bool l6 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term, Other })))
2146 {
2147 foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
2148 {
2149 yield return false;
2150 }
2151 }
2152 }
2153 yield break;
2154 }
2155 }
2156 }
2157 }
2158 {
2159 object C = arg2;
2160 object Term = arg3;
2161 object Precedence = arg4;
2162 object Answer = arg5;
2163 object S = arg6;
2164 object S1 = arg7;
2165 Variable F = new Variable();
2166 Variable Pos = new Variable();
2167 Variable L = new Variable();
2168 Variable O = new Variable();
2169 Variable Expr = new Variable();
2170 Variable S2 = new Variable();
2171 foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, O)))
2172 {
2173 if (YP.greaterThanOrEqual(Precedence, O))
2174 {
2175 if (YP.lessThanOrEqual(C, L))
2176 {
2177 foreach (bool l5 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term })))
2178 {
2179 foreach (bool l6 in peepop(S1, S2))
2180 {
2181 foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
2182 {
2183 yield return false;
2184 }
2185 }
2186 }
2187 yield break;
2188 }
2189 }
2190 }
2191 }
2192 {
2193 object C = arg2;
2194 object Term = arg3;
2195 object Precedence = arg4;
2196 object Answer = arg5;
2197 object S = arg6;
2198 object S1 = arg7;
2199 Variable Next = new Variable();
2200 Variable S2 = new Variable();
2201 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
2202 {
2203 if (YP.greaterThanOrEqual(Precedence, 1000))
2204 {
2205 if (YP.lessThan(C, 1000))
2206 {
2207 foreach (bool l5 in parse(S1, 1000, Next, S2))
2208 {
2209 foreach (bool l6 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S))
2210 {
2211 yield return false;
2212 }
2213 }
2214 yield break;
2215 }
2216 }
2217 }
2218 }
2219 {
2220 object C = arg2;
2221 object Term = arg3;
2222 object Precedence = arg4;
2223 object Answer = arg5;
2224 object S = arg6;
2225 object S1 = arg7;
2226 Variable Next = new Variable();
2227 Variable S2 = new Variable();
2228 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
2229 {
2230 if (YP.greaterThanOrEqual(Precedence, 1100))
2231 {
2232 if (YP.lessThan(C, 1100))
2233 {
2234 foreach (bool l5 in parse(S1, 1100, Next, S2))
2235 {
2236 foreach (bool l6 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S))
2237 {
2238 yield return false;
2239 }
2240 }
2241 yield break;
2242 }
2243 }
2244 }
2245 }
2246 {
2247 object Token = arg1;
2248 object x2 = arg2;
2249 object x4 = arg4;
2250 object Tokens = arg7;
2251 Variable Term = new Variable();
2252 foreach (bool l2 in YP.unify(arg3, Term))
2253 {
2254 foreach (bool l3 in YP.unify(arg5, Term))
2255 {
2256 foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens)))
2257 {
2258 yield return false;
2259 }
2260 }
2261 }
2262 }
2263 }
2264
2265 public static IEnumerable<bool> syntax_error(object _Message, object _List)
2266 {
2267 {
2268 yield break;
2269 }
2270 foreach (bool l1 in YP.fail())
2271 {
2272 yield return false;
2273 }
2274 }
2275
2276 public static IEnumerable<bool> syntax_error(object _List)
2277 {
2278 {
2279 yield break;
2280 }
2281 foreach (bool l1 in YP.fail())
2282 {
2283 yield return false;
2284 }
2285 }
2286
2287 public static IEnumerable<bool> prefixop(object F, object O, object Q)
2288 {
2289 {
2290 foreach (bool l2 in YP.current_op(O, Atom.a("fx"), F))
2291 {
2292 foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
2293 {
2294 yield return false;
2295 }
2296 goto cutIf1;
2297 }
2298 foreach (bool l2 in YP.current_op(O, Atom.a("fy"), F))
2299 {
2300 foreach (bool l3 in YP.unify(Q, O))
2301 {
2302 yield return false;
2303 }
2304 goto cutIf2;
2305 }
2306 cutIf2:
2307 cutIf1:
2308 { }
2309 }
2310 }
2311
2312 public static IEnumerable<bool> postfixop(object F, object P, object O)
2313 {
2314 {
2315 foreach (bool l2 in YP.current_op(O, Atom.a("xf"), F))
2316 {
2317 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2318 {
2319 yield return false;
2320 }
2321 goto cutIf1;
2322 }
2323 foreach (bool l2 in YP.current_op(O, Atom.a("yf"), F))
2324 {
2325 foreach (bool l3 in YP.unify(P, O))
2326 {
2327 yield return false;
2328 }
2329 goto cutIf2;
2330 }
2331 cutIf2:
2332 cutIf1:
2333 { }
2334 }
2335 }
2336
2337 public static IEnumerable<bool> infixop(object F, object P, object O, object Q)
2338 {
2339 {
2340 foreach (bool l2 in YP.current_op(O, Atom.a("xfy"), F))
2341 {
2342 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2343 {
2344 foreach (bool l4 in YP.unify(Q, O))
2345 {
2346 yield return false;
2347 }
2348 }
2349 goto cutIf1;
2350 }
2351 foreach (bool l2 in YP.current_op(O, Atom.a("xfx"), F))
2352 {
2353 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2354 {
2355 foreach (bool l4 in YP.unify(Q, P))
2356 {
2357 yield return false;
2358 }
2359 }
2360 goto cutIf2;
2361 }
2362 foreach (bool l2 in YP.current_op(O, Atom.a("yfx"), F))
2363 {
2364 foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
2365 {
2366 foreach (bool l4 in YP.unify(P, O))
2367 {
2368 yield return false;
2369 }
2370 }
2371 goto cutIf3;
2372 }
2373 cutIf3:
2374 cutIf2:
2375 cutIf1:
2376 { }
2377 }
2378 }
2379
2380 public static IEnumerable<bool> ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2)
2381 {
2382 {
2383 foreach (bool l2 in postfixop(F, L2, O2))
2384 {
2385 if (YP.lessThanOrEqual(O2, Precedence))
2386 {
2387 foreach (bool l4 in infixop(F, L1, O1, R1))
2388 {
2389 if (YP.lessThanOrEqual(O1, Precedence))
2390 {
2391 yield return false;
2392 }
2393 }
2394 }
2395 }
2396 }
2397 }
2398
2399 public static IEnumerable<bool> read_tokens1(object arg1)
2400 {
2401 {
2402 object TokenList = arg1;
2403 Variable C1 = new Variable();
2404 Variable _X = new Variable();
2405 Variable ListOfTokens = new Variable();
2406 foreach (bool l2 in YP.get_code(C1))
2407 {
2408 foreach (bool l3 in read_tokens(C1, _X, ListOfTokens))
2409 {
2410 foreach (bool l4 in YP.unify(TokenList, ListOfTokens))
2411 {
2412 yield return false;
2413 }
2414 yield break;
2415 }
2416 }
2417 }
2418 {
2419 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL)))
2420 {
2421 yield return false;
2422 }
2423 }
2424 }
2425
2426 public static IEnumerable<bool> read_tokens2(object arg1, object arg2)
2427 {
2428 {
2429 object TokenList = arg1;
2430 object Dictionary = arg2;
2431 Variable C1 = new Variable();
2432 Variable Dict = new Variable();
2433 Variable ListOfTokens = new Variable();
2434 foreach (bool l2 in YP.get_code(C1))
2435 {
2436 foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens))
2437 {
2438 foreach (bool l4 in terminate_list(Dict))
2439 {
2440 foreach (bool l5 in YP.unify(Dictionary, Dict))
2441 {
2442 foreach (bool l6 in YP.unify(TokenList, ListOfTokens))
2443 {
2444 yield return false;
2445 }
2446 }
2447 yield break;
2448 }
2449 }
2450 }
2451 }
2452 {
2453 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL)))
2454 {
2455 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
2456 {
2457 yield return false;
2458 }
2459 }
2460 }
2461 }
2462
2463 public static IEnumerable<bool> terminate_list(object arg1)
2464 {
2465 {
2466 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
2467 {
2468 yield return false;
2469 }
2470 }
2471 {
2472 Variable x1 = new Variable();
2473 Variable Tail = new Variable();
2474 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail)))
2475 {
2476 foreach (bool l3 in terminate_list(Tail))
2477 {
2478 yield return false;
2479 }
2480 }
2481 }
2482 }
2483
2484 public static IEnumerable<bool> read_special(object arg1, object Dict, object arg3)
2485 {
2486 {
2487 object Tokens = arg3;
2488 foreach (bool l2 in YP.unify(arg1, 95))
2489 {
2490 foreach (bool l3 in read_variable(95, Dict, Tokens))
2491 {
2492 yield return false;
2493 }
2494 }
2495 }
2496 {
2497 object Tokens = arg3;
2498 foreach (bool l2 in YP.unify(arg1, 247))
2499 {
2500 foreach (bool l3 in read_symbol(247, Dict, Tokens))
2501 {
2502 yield return false;
2503 }
2504 }
2505 }
2506 {
2507 object Tokens = arg3;
2508 foreach (bool l2 in YP.unify(arg1, 215))
2509 {
2510 foreach (bool l3 in read_symbol(215, Dict, Tokens))
2511 {
2512 yield return false;
2513 }
2514 }
2515 }
2516 {
2517 Variable StartPos = new Variable();
2518 Variable EndPos = new Variable();
2519 Variable Tokens = new Variable();
2520 Variable Ch = new Variable();
2521 Variable NextCh = new Variable();
2522 foreach (bool l2 in YP.unify(arg1, 37))
2523 {
2524 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens)))
2525 {
2526 foreach (bool l4 in get_current_position(StartPos))
2527 {
2528 foreach (bool l5 in YP.repeat())
2529 {
2530 foreach (bool l6 in YP.get_code(Ch))
2531 {
2532 if (YP.lessThan(Ch, new ListPair(32, Atom.NIL)))
2533 {
2534 if (YP.notEqual(Ch, 9))
2535 {
2536 if (YP.termNotEqual(Ch, -1))
2537 {
2538 foreach (bool l10 in get_current_position(EndPos))
2539 {
2540 foreach (bool l11 in YP.get_code(NextCh))
2541 {
2542 foreach (bool l12 in read_tokens(NextCh, Dict, Tokens))
2543 {
2544 yield return false;
2545 }
2546 }
2547 }
2548 }
2549 yield break;
2550 }
2551 }
2552 }
2553 }
2554 }
2555 }
2556 }
2557 }
2558 {
2559 object T = arg3;
2560 Variable C2 = new Variable();
2561 Variable StartPos = new Variable();
2562 Variable EndPos = new Variable();
2563 Variable Tokens = new Variable();
2564 Variable StartPos1 = new Variable();
2565 Variable NextCh = new Variable();
2566 Variable Chars = new Variable();
2567 foreach (bool l2 in YP.unify(arg1, 47))
2568 {
2569 foreach (bool l3 in YP.get_code(C2))
2570 {
2571 if (YP.equal(C2, new ListPair(42, Atom.NIL)))
2572 {
2573 foreach (bool l5 in YP.unify(T, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens)))
2574 {
2575 foreach (bool l6 in get_current_position(StartPos1))
2576 {
2577 foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1)))
2578 {
2579 foreach (bool l8 in read_solidus(32, NextCh))
2580 {
2581 foreach (bool l9 in get_current_position(EndPos))
2582 {
2583 foreach (bool l10 in read_tokens(NextCh, Dict, Tokens))
2584 {
2585 yield return false;
2586 }
2587 }
2588 }
2589 }
2590 }
2591 }
2592 goto cutIf1;
2593 }
2594 foreach (bool l4 in YP.unify(T, Tokens))
2595 {
2596 foreach (bool l5 in rest_symbol(C2, Chars, NextCh))
2597 {
2598 foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars)))
2599 {
2600 yield return false;
2601 }
2602 }
2603 }
2604 cutIf1:
2605 { }
2606 }
2607 }
2608 }
2609 {
2610 Variable Pos = new Variable();
2611 Variable Tokens = new Variable();
2612 Variable NextCh = new Variable();
2613 foreach (bool l2 in YP.unify(arg1, 33))
2614 {
2615 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a("!"), Pos), Tokens)))
2616 {
2617 foreach (bool l4 in get_current_position(Pos))
2618 {
2619 foreach (bool l5 in YP.get_code(NextCh))
2620 {
2621 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2622 {
2623 yield return false;
2624 }
2625 }
2626 }
2627 }
2628 }
2629 }
2630 {
2631 Variable Tokens = new Variable();
2632 Variable NextCh = new Variable();
2633 foreach (bool l2 in YP.unify(arg1, 40))
2634 {
2635 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(" ("), Tokens)))
2636 {
2637 foreach (bool l4 in YP.get_code(NextCh))
2638 {
2639 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2640 {
2641 yield return false;
2642 }
2643 }
2644 }
2645 }
2646 }
2647 {
2648 Variable Tokens = new Variable();
2649 Variable NextCh = new Variable();
2650 foreach (bool l2 in YP.unify(arg1, 41))
2651 {
2652 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(")"), Tokens)))
2653 {
2654 foreach (bool l4 in YP.get_code(NextCh))
2655 {
2656 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2657 {
2658 yield return false;
2659 }
2660 }
2661 }
2662 }
2663 }
2664 {
2665 Variable Tokens = new Variable();
2666 Variable NextCh = new Variable();
2667 foreach (bool l2 in YP.unify(arg1, 44))
2668 {
2669 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(","), Tokens)))
2670 {
2671 foreach (bool l4 in YP.get_code(NextCh))
2672 {
2673 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2674 {
2675 yield return false;
2676 }
2677 }
2678 }
2679 }
2680 }
2681 {
2682 Variable Pos = new Variable();
2683 Variable Tokens = new Variable();
2684 Variable NextCh = new Variable();
2685 foreach (bool l2 in YP.unify(arg1, 59))
2686 {
2687 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a(";"), Pos), Tokens)))
2688 {
2689 foreach (bool l4 in get_current_position(Pos))
2690 {
2691 foreach (bool l5 in YP.get_code(NextCh))
2692 {
2693 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2694 {
2695 yield return false;
2696 }
2697 }
2698 }
2699 }
2700 }
2701 }
2702 {
2703 Variable Pos = new Variable();
2704 Variable Tokens = new Variable();
2705 Variable NextCh = new Variable();
2706 foreach (bool l2 in YP.unify(arg1, 91))
2707 {
2708 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("["), Pos), Tokens)))
2709 {
2710 foreach (bool l4 in get_current_position(Pos))
2711 {
2712 foreach (bool l5 in YP.get_code(NextCh))
2713 {
2714 foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
2715 {
2716 yield return false;
2717 }
2718 }
2719 }
2720 }
2721 }
2722 }
2723 {
2724 Variable Pos = new Variable();
2725 Variable Tokens = new Variable();
2726 Variable NextCh = new Variable();
2727 foreach (bool l2 in YP.unify(arg1, 93))
2728 {
2729 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("]"), Pos), Tokens)))
2730 {
2731 foreach (bool l4 in get_current_position(Pos))
2732 {
2733 foreach (bool l5 in YP.get_code(NextCh))
2734 {
2735 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2736 {
2737 yield return false;
2738 }
2739 }
2740 }
2741 }
2742 }
2743 }
2744 {
2745 Variable Pos = new Variable();
2746 Variable Tokens = new Variable();
2747 Variable NextCh = new Variable();
2748 foreach (bool l2 in YP.unify(arg1, 123))
2749 {
2750 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("{"), Pos), Tokens)))
2751 {
2752 foreach (bool l4 in get_current_position(Pos))
2753 {
2754 foreach (bool l5 in YP.get_code(NextCh))
2755 {
2756 foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
2757 {
2758 yield return false;
2759 }
2760 }
2761 }
2762 }
2763 }
2764 }
2765 {
2766 Variable Tokens = new Variable();
2767 Variable NextCh = new Variable();
2768 foreach (bool l2 in YP.unify(arg1, 124))
2769 {
2770 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("|"), Tokens)))
2771 {
2772 foreach (bool l4 in YP.get_code(NextCh))
2773 {
2774 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2775 {
2776 yield return false;
2777 }
2778 }
2779 }
2780 }
2781 }
2782 {
2783 Variable Tokens = new Variable();
2784 Variable NextCh = new Variable();
2785 foreach (bool l2 in YP.unify(arg1, 125))
2786 {
2787 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("}"), Tokens)))
2788 {
2789 foreach (bool l4 in YP.get_code(NextCh))
2790 {
2791 foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens))
2792 {
2793 yield return false;
2794 }
2795 }
2796 }
2797 }
2798 }
2799 {
2800 object Tokens = arg3;
2801 Variable NextCh = new Variable();
2802 foreach (bool l2 in YP.unify(arg1, 46))
2803 {
2804 foreach (bool l3 in YP.get_code(NextCh))
2805 {
2806 foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens))
2807 {
2808 yield return false;
2809 }
2810 }
2811 }
2812 }
2813 {
2814 Variable Chars = new Variable();
2815 Variable Tokens = new Variable();
2816 Variable NextCh = new Variable();
2817 foreach (bool l2 in YP.unify(arg1, 34))
2818 {
2819 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("string", Chars), Tokens)))
2820 {
2821 foreach (bool l4 in read_string(Chars, 34, NextCh))
2822 {
2823 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2824 {
2825 yield return false;
2826 }
2827 }
2828 }
2829 }
2830 }
2831 {
2832 object Tokens = arg3;
2833 Variable Chars = new Variable();
2834 Variable NextCh = new Variable();
2835 foreach (bool l2 in YP.unify(arg1, 39))
2836 {
2837 foreach (bool l3 in read_string(Chars, 39, NextCh))
2838 {
2839 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars))
2840 {
2841 yield return false;
2842 }
2843 }
2844 }
2845 }
2846 {
2847 object Tokens = arg3;
2848 foreach (bool l2 in YP.unify(arg1, 35))
2849 {
2850 foreach (bool l3 in read_symbol(35, Dict, Tokens))
2851 {
2852 yield return false;
2853 }
2854 }
2855 }
2856 {
2857 object Tokens = arg3;
2858 foreach (bool l2 in YP.unify(arg1, 36))
2859 {
2860 foreach (bool l3 in read_symbol(36, Dict, Tokens))
2861 {
2862 yield return false;
2863 }
2864 }
2865 }
2866 {
2867 object Tokens = arg3;
2868 foreach (bool l2 in YP.unify(arg1, 38))
2869 {
2870 foreach (bool l3 in read_symbol(38, Dict, Tokens))
2871 {
2872 yield return false;
2873 }
2874 }
2875 }
2876 {
2877 object Tokens = arg3;
2878 foreach (bool l2 in YP.unify(arg1, 42))
2879 {
2880 foreach (bool l3 in read_symbol(42, Dict, Tokens))
2881 {
2882 yield return false;
2883 }
2884 }
2885 }
2886 {
2887 object Tokens = arg3;
2888 foreach (bool l2 in YP.unify(arg1, 43))
2889 {
2890 foreach (bool l3 in read_symbol(43, Dict, Tokens))
2891 {
2892 yield return false;
2893 }
2894 }
2895 }
2896 {
2897 object Tokens = arg3;
2898 foreach (bool l2 in YP.unify(arg1, 45))
2899 {
2900 foreach (bool l3 in read_symbol(45, Dict, Tokens))
2901 {
2902 yield return false;
2903 }
2904 }
2905 }
2906 {
2907 object Tokens = arg3;
2908 foreach (bool l2 in YP.unify(arg1, 58))
2909 {
2910 foreach (bool l3 in read_symbol(58, Dict, Tokens))
2911 {
2912 yield return false;
2913 }
2914 }
2915 }
2916 {
2917 object Tokens = arg3;
2918 foreach (bool l2 in YP.unify(arg1, 60))
2919 {
2920 foreach (bool l3 in read_symbol(60, Dict, Tokens))
2921 {
2922 yield return false;
2923 }
2924 }
2925 }
2926 {
2927 object Tokens = arg3;
2928 foreach (bool l2 in YP.unify(arg1, 61))
2929 {
2930 foreach (bool l3 in read_symbol(61, Dict, Tokens))
2931 {
2932 yield return false;
2933 }
2934 }
2935 }
2936 {
2937 object Tokens = arg3;
2938 foreach (bool l2 in YP.unify(arg1, 62))
2939 {
2940 foreach (bool l3 in read_symbol(62, Dict, Tokens))
2941 {
2942 yield return false;
2943 }
2944 }
2945 }
2946 {
2947 object Tokens = arg3;
2948 foreach (bool l2 in YP.unify(arg1, 63))
2949 {
2950 foreach (bool l3 in read_symbol(63, Dict, Tokens))
2951 {
2952 yield return false;
2953 }
2954 }
2955 }
2956 {
2957 object Tokens = arg3;
2958 foreach (bool l2 in YP.unify(arg1, 64))
2959 {
2960 foreach (bool l3 in read_symbol(64, Dict, Tokens))
2961 {
2962 yield return false;
2963 }
2964 }
2965 }
2966 {
2967 object Tokens = arg3;
2968 foreach (bool l2 in YP.unify(arg1, 92))
2969 {
2970 foreach (bool l3 in read_symbol(92, Dict, Tokens))
2971 {
2972 yield return false;
2973 }
2974 }
2975 }
2976 {
2977 object Tokens = arg3;
2978 foreach (bool l2 in YP.unify(arg1, 94))
2979 {
2980 foreach (bool l3 in read_symbol(94, Dict, Tokens))
2981 {
2982 yield return false;
2983 }
2984 }
2985 }
2986 {
2987 object Tokens = arg3;
2988 foreach (bool l2 in YP.unify(arg1, 96))
2989 {
2990 foreach (bool l3 in read_symbol(96, Dict, Tokens))
2991 {
2992 yield return false;
2993 }
2994 }
2995 }
2996 {
2997 object Tokens = arg3;
2998 foreach (bool l2 in YP.unify(arg1, 126))
2999 {
3000 foreach (bool l3 in read_symbol(126, Dict, Tokens))
3001 {
3002 yield return false;
3003 }
3004 }
3005 }
3006 }
3007
3008 public static IEnumerable<bool> read_symbol(object C1, object Dict, object Tokens)
3009 {
3010 {
3011 Variable C2 = new Variable();
3012 Variable Chars = new Variable();
3013 Variable NextCh = new Variable();
3014 foreach (bool l2 in YP.get_code(C2))
3015 {
3016 foreach (bool l3 in rest_symbol(C2, Chars, NextCh))
3017 {
3018 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars)))
3019 {
3020 yield return false;
3021 }
3022 }
3023 }
3024 }
3025 }
3026
3027 public static IEnumerable<bool> rest_symbol(object arg1, object arg2, object arg3)
3028 {
3029 {
3030 object C2 = arg1;
3031 object LastCh = arg3;
3032 Variable Chars = new Variable();
3033 Variable NextCh = new Variable();
3034 foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars)))
3035 {
3036 if (YP.greaterThan(C2, 160))
3037 {
3038 if (YP.lessThan(C2, 192))
3039 {
3040 if (YP.notEqual(C2, 186))
3041 {
3042 if (YP.notEqual(C2, 170))
3043 {
3044 foreach (bool l7 in YP.get_code(NextCh))
3045 {
3046 foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh))
3047 {
3048 yield return false;
3049 }
3050 }
3051 yield break;
3052 }
3053 }
3054 }
3055 goto cutIf1;
3056 }
3057 foreach (bool l3 in symbol_char(C2))
3058 {
3059 foreach (bool l4 in YP.get_code(NextCh))
3060 {
3061 foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh))
3062 {
3063 yield return false;
3064 }
3065 }
3066 yield break;
3067 }
3068 cutIf1:
3069 { }
3070 }
3071 }
3072 {
3073 Variable C2 = new Variable();
3074 foreach (bool l2 in YP.unify(arg1, C2))
3075 {
3076 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
3077 {
3078 foreach (bool l4 in YP.unify(arg3, C2))
3079 {
3080 yield return false;
3081 }
3082 }
3083 }
3084 }
3085 }
3086
3087 public static IEnumerable<bool> symbol_char(object arg1)
3088 {
3089 {
3090 foreach (bool l2 in YP.unify(arg1, 35))
3091 {
3092 yield return false;
3093 }
3094 }
3095 {
3096 foreach (bool l2 in YP.unify(arg1, 36))
3097 {
3098 yield return false;
3099 }
3100 }
3101 {
3102 foreach (bool l2 in YP.unify(arg1, 38))
3103 {
3104 yield return false;
3105 }
3106 }
3107 {
3108 foreach (bool l2 in YP.unify(arg1, 42))
3109 {
3110 yield return false;
3111 }
3112 }
3113 {
3114 foreach (bool l2 in YP.unify(arg1, 43))
3115 {
3116 yield return false;
3117 }
3118 }
3119 {
3120 foreach (bool l2 in YP.unify(arg1, 45))
3121 {
3122 yield return false;
3123 }
3124 }
3125 {
3126 foreach (bool l2 in YP.unify(arg1, 46))
3127 {
3128 yield return false;
3129 }
3130 }
3131 {
3132 foreach (bool l2 in YP.unify(arg1, 47))
3133 {
3134 yield return false;
3135 }
3136 }
3137 {
3138 foreach (bool l2 in YP.unify(arg1, 58))
3139 {
3140 yield return false;
3141 }
3142 }
3143 {
3144 foreach (bool l2 in YP.unify(arg1, 60))
3145 {
3146 yield return false;
3147 }
3148 }
3149 {
3150 foreach (bool l2 in YP.unify(arg1, 61))
3151 {
3152 yield return false;
3153 }
3154 }
3155 {
3156 foreach (bool l2 in YP.unify(arg1, 62))
3157 {
3158 yield return false;
3159 }
3160 }
3161 {
3162 foreach (bool l2 in YP.unify(arg1, 63))
3163 {
3164 yield return false;
3165 }
3166 }
3167 {
3168 foreach (bool l2 in YP.unify(arg1, 64))
3169 {
3170 yield return false;
3171 }
3172 }
3173 {
3174 foreach (bool l2 in YP.unify(arg1, 92))
3175 {
3176 yield return false;
3177 }
3178 }
3179 {
3180 foreach (bool l2 in YP.unify(arg1, 94))
3181 {
3182 yield return false;
3183 }
3184 }
3185 {
3186 foreach (bool l2 in YP.unify(arg1, 96))
3187 {
3188 yield return false;
3189 }
3190 }
3191 {
3192 foreach (bool l2 in YP.unify(arg1, 126))
3193 {
3194 yield return false;
3195 }
3196 }
3197 }
3198
3199 public static IEnumerable<bool> get_current_position(object Pos)
3200 {
3201 {
3202 foreach (bool l2 in YP.unify(Pos, 0))
3203 {
3204 yield return false;
3205 }
3206 }
3207 }
3208
3209 public static IEnumerable<bool> read_after_atom4(object Ch, object Dict, object arg3, object Chars)
3210 {
3211 {
3212 Variable Atom_1 = new Variable();
3213 Variable Pos = new Variable();
3214 Variable Tokens = new Variable();
3215 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom_1, Pos), Tokens)))
3216 {
3217 foreach (bool l3 in YP.unify(Pos, 0))
3218 {
3219 foreach (bool l4 in YP.atom_codes(Atom_1, Chars))
3220 {
3221 foreach (bool l5 in read_after_atom(Ch, Dict, Tokens))
3222 {
3223 yield return false;
3224 }
3225 }
3226 }
3227 }
3228 }
3229 }
3230
3231 public static IEnumerable<bool> read_after_atom(object arg1, object Dict, object arg3)
3232 {
3233 {
3234 Variable Tokens = new Variable();
3235 Variable NextCh = new Variable();
3236 foreach (bool l2 in YP.unify(arg1, 40))
3237 {
3238 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("("), Tokens)))
3239 {
3240 foreach (bool l4 in YP.get_code(NextCh))
3241 {
3242 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
3243 {
3244 yield return false;
3245 }
3246 }
3247 yield break;
3248 }
3249 }
3250 }
3251 {
3252 object Ch = arg1;
3253 object Tokens = arg3;
3254 foreach (bool l2 in read_tokens(Ch, Dict, Tokens))
3255 {
3256 yield return false;
3257 }
3258 }
3259 }
3260
3261 public static IEnumerable<bool> read_string(object Chars, object Quote, object NextCh)
3262 {
3263 {
3264 Variable Ch = new Variable();
3265 Variable Char = new Variable();
3266 Variable Next = new Variable();
3267 foreach (bool l2 in YP.get_code(Ch))
3268 {
3269 foreach (bool l3 in read_char(Ch, Quote, Char, Next))
3270 {
3271 foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh))
3272 {
3273 yield return false;
3274 }
3275 }
3276 }
3277 }
3278 }
3279
3280 public static IEnumerable<bool> rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5)
3281 {
3282 {
3283 object _X = arg4;
3284 Variable NextCh = new Variable();
3285 foreach (bool l2 in YP.unify(arg1, -1))
3286 {
3287 foreach (bool l3 in YP.unify(arg2, NextCh))
3288 {
3289 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
3290 {
3291 foreach (bool l5 in YP.unify(arg5, NextCh))
3292 {
3293 yield return true;
3294 yield break;
3295 }
3296 }
3297 }
3298 }
3299 }
3300 {
3301 object Char = arg1;
3302 object Next = arg2;
3303 object Quote = arg4;
3304 object NextCh = arg5;
3305 Variable Chars = new Variable();
3306 Variable Char2 = new Variable();
3307 Variable Next2 = new Variable();
3308 foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars)))
3309 {
3310 foreach (bool l3 in read_char(Next, Quote, Char2, Next2))
3311 {
3312 foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh))
3313 {
3314 yield return false;
3315 }
3316 }
3317 }
3318 }
3319 }
3320
3321 public static IEnumerable<bool> escape_char(object arg1, object arg2)
3322 {
3323 {
3324 foreach (bool l2 in YP.unify(arg1, 110))
3325 {
3326 foreach (bool l3 in YP.unify(arg2, 10))
3327 {
3328 yield return false;
3329 }
3330 }
3331 }
3332 {
3333 foreach (bool l2 in YP.unify(arg1, 78))
3334 {
3335 foreach (bool l3 in YP.unify(arg2, 10))
3336 {
3337 yield return false;
3338 }
3339 }
3340 }
3341 {
3342 foreach (bool l2 in YP.unify(arg1, 116))
3343 {
3344 foreach (bool l3 in YP.unify(arg2, 9))
3345 {
3346 yield return false;
3347 }
3348 }
3349 }
3350 {
3351 foreach (bool l2 in YP.unify(arg1, 84))
3352 {
3353 foreach (bool l3 in YP.unify(arg2, 9))
3354 {
3355 yield return false;
3356 }
3357 }
3358 }
3359 {
3360 foreach (bool l2 in YP.unify(arg1, 114))
3361 {
3362 foreach (bool l3 in YP.unify(arg2, 13))
3363 {
3364 yield return false;
3365 }
3366 }
3367 }
3368 {
3369 foreach (bool l2 in YP.unify(arg1, 82))
3370 {
3371 foreach (bool l3 in YP.unify(arg2, 13))
3372 {
3373 yield return false;
3374 }
3375 }
3376 }
3377 {
3378 foreach (bool l2 in YP.unify(arg1, 118))
3379 {
3380 foreach (bool l3 in YP.unify(arg2, 11))
3381 {
3382 yield return false;
3383 }
3384 }
3385 }
3386 {
3387 foreach (bool l2 in YP.unify(arg1, 86))
3388 {
3389 foreach (bool l3 in YP.unify(arg2, 11))
3390 {
3391 yield return false;
3392 }
3393 }
3394 }
3395 {
3396 foreach (bool l2 in YP.unify(arg1, 98))
3397 {
3398 foreach (bool l3 in YP.unify(arg2, 8))
3399 {
3400 yield return false;
3401 }
3402 }
3403 }
3404 {
3405 foreach (bool l2 in YP.unify(arg1, 66))
3406 {
3407 foreach (bool l3 in YP.unify(arg2, 8))
3408 {
3409 yield return false;
3410 }
3411 }
3412 }
3413 {
3414 foreach (bool l2 in YP.unify(arg1, 102))
3415 {
3416 foreach (bool l3 in YP.unify(arg2, 12))
3417 {
3418 yield return false;
3419 }
3420 }
3421 }
3422 {
3423 foreach (bool l2 in YP.unify(arg1, 70))
3424 {
3425 foreach (bool l3 in YP.unify(arg2, 12))
3426 {
3427 yield return false;
3428 }
3429 }
3430 }
3431 {
3432 foreach (bool l2 in YP.unify(arg1, 101))
3433 {
3434 foreach (bool l3 in YP.unify(arg2, 27))
3435 {
3436 yield return false;
3437 }
3438 }
3439 }
3440 {
3441 foreach (bool l2 in YP.unify(arg1, 69))
3442 {
3443 foreach (bool l3 in YP.unify(arg2, 27))
3444 {
3445 yield return false;
3446 }
3447 }
3448 }
3449 {
3450 foreach (bool l2 in YP.unify(arg1, 100))
3451 {
3452 foreach (bool l3 in YP.unify(arg2, 127))
3453 {
3454 yield return false;
3455 }
3456 }
3457 }
3458 {
3459 foreach (bool l2 in YP.unify(arg1, 68))
3460 {
3461 foreach (bool l3 in YP.unify(arg2, 127))
3462 {
3463 yield return false;
3464 }
3465 }
3466 }
3467 {
3468 foreach (bool l2 in YP.unify(arg1, 115))
3469 {
3470 foreach (bool l3 in YP.unify(arg2, 32))
3471 {
3472 yield return false;
3473 }
3474 }
3475 }
3476 {
3477 foreach (bool l2 in YP.unify(arg1, 83))
3478 {
3479 foreach (bool l3 in YP.unify(arg2, 32))
3480 {
3481 yield return false;
3482 }
3483 }
3484 }
3485 {
3486 foreach (bool l2 in YP.unify(arg1, 122))
3487 {
3488 foreach (bool l3 in YP.unify(arg2, -1))
3489 {
3490 yield return false;
3491 }
3492 }
3493 }
3494 {
3495 foreach (bool l2 in YP.unify(arg1, 90))
3496 {
3497 foreach (bool l3 in YP.unify(arg2, -1))
3498 {
3499 yield return false;
3500 }
3501 }
3502 }
3503 }
3504
3505 public static IEnumerable<bool> read_variable(object C1, object Dict, object arg3)
3506 {
3507 {
3508 Variable Var = new Variable();
3509 Variable Name = new Variable();
3510 Variable StartPos = new Variable();
3511 Variable Tokens = new Variable();
3512 Variable Chars = new Variable();
3513 Variable NextCh = new Variable();
3514 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3("var", Var, Name, StartPos), Tokens)))
3515 {
3516 foreach (bool l3 in get_current_position(StartPos))
3517 {
3518 foreach (bool l4 in read_name(C1, Chars, NextCh))
3519 {
3520 foreach (bool l5 in YP.atom_codes(Name, Chars))
3521 {
3522 if (YP.termEqual(Name, Atom.a("_")))
3523 {
3524 foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
3525 {
3526 yield return false;
3527 }
3528 goto cutIf1;
3529 }
3530 foreach (bool l6 in read_lookup(Dict, Name, Var))
3531 {
3532 foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
3533 {
3534 yield return false;
3535 }
3536 }
3537 cutIf1:
3538 { }
3539 }
3540 }
3541 }
3542 }
3543 }
3544 }
3545
3546 public static IEnumerable<bool> read_lookup(object arg1, object Name, object Var)
3547 {
3548 {
3549 Variable N = new Variable();
3550 Variable V = new Variable();
3551 Variable L = new Variable();
3552 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", N, V), L)))
3553 {
3554 foreach (bool l3 in YP.unify(N, Name))
3555 {
3556 foreach (bool l4 in YP.unify(V, Var))
3557 {
3558 yield return false;
3559 }
3560 goto cutIf1;
3561 }
3562 foreach (bool l3 in read_lookup(L, Name, Var))
3563 {
3564 yield return false;
3565 }
3566 cutIf1:
3567 { }
3568 }
3569 }
3570 }
3571
3572 public static IEnumerable<bool> read_solidus(object Ch, object LastCh)
3573 {
3574 {
3575 Variable NextCh = new Variable();
3576 if (YP.equal(Ch, 42))
3577 {
3578 foreach (bool l3 in YP.get_code(NextCh))
3579 {
3580 if (YP.equal(NextCh, 47))
3581 {
3582 foreach (bool l5 in YP.get_code(LastCh))
3583 {
3584 yield return false;
3585 }
3586 goto cutIf2;
3587 }
3588 foreach (bool l4 in read_solidus(NextCh, LastCh))
3589 {
3590 yield return false;
3591 }
3592 cutIf2:
3593 { }
3594 }
3595 goto cutIf1;
3596 }
3597 if (YP.notEqual(Ch, -1))
3598 {
3599 foreach (bool l3 in YP.get_code(NextCh))
3600 {
3601 foreach (bool l4 in read_solidus(NextCh, LastCh))
3602 {
3603 yield return false;
3604 }
3605 }
3606 goto cutIf3;
3607 }
3608 foreach (bool l2 in YP.unify(LastCh, Ch))
3609 {
3610 foreach (bool l3 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in /*comment~n"), Atom.NIL))
3611 {
3612 yield return false;
3613 }
3614 }
3615 cutIf3:
3616 cutIf1:
3617 { }
3618 }
3619 }
3620
3621 public static IEnumerable<bool> read_identifier(object C1, object Dict, object Tokens)
3622 {
3623 {
3624 Variable Chars = new Variable();
3625 Variable NextCh = new Variable();
3626 foreach (bool l2 in read_name(C1, Chars, NextCh))
3627 {
3628 foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars))
3629 {
3630 yield return false;
3631 }
3632 }
3633 }
3634 }
3635
3636 public static IEnumerable<bool> read_name(object C1, object arg2, object LastCh)
3637 {
3638 {
3639 Variable Chars = new Variable();
3640 Variable C2 = new Variable();
3641 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3642 {
3643 foreach (bool l3 in YP.get_code(C2))
3644 {
3645 if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL)))
3646 {
3647 if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL)))
3648 {
3649 foreach (bool l6 in read_name(C2, Chars, LastCh))
3650 {
3651 yield return false;
3652 }
3653 goto cutIf2;
3654 }
3655 if (YP.lessThan(C2, 192))
3656 {
3657 if (YP.notEqual(YP.bitwiseOr(C2, 16), 186))
3658 {
3659 foreach (bool l7 in YP.unify(Chars, Atom.NIL))
3660 {
3661 foreach (bool l8 in YP.unify(LastCh, C2))
3662 {
3663 yield return false;
3664 }
3665 }
3666 goto cutIf3;
3667 }
3668 }
3669 if (YP.equal(YP.bitwiseOr(C2, 32), 247))
3670 {
3671 foreach (bool l6 in YP.unify(Chars, Atom.NIL))
3672 {
3673 foreach (bool l7 in YP.unify(LastCh, C2))
3674 {
3675 yield return false;
3676 }
3677 }
3678 goto cutIf4;
3679 }
3680 foreach (bool l5 in read_name(C2, Chars, LastCh))
3681 {
3682 yield return false;
3683 }
3684 cutIf4:
3685 cutIf3:
3686 cutIf2:
3687 goto cutIf1;
3688 }
3689 if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL)))
3690 {
3691 if (YP.greaterThan(C2, new ListPair(90, Atom.NIL)))
3692 {
3693 if (YP.notEqual(C2, new ListPair(95, Atom.NIL)))
3694 {
3695 foreach (bool l7 in YP.unify(Chars, Atom.NIL))
3696 {
3697 foreach (bool l8 in YP.unify(LastCh, C2))
3698 {
3699 yield return false;
3700 }
3701 }
3702 goto cutIf6;
3703 }
3704 }
3705 foreach (bool l5 in read_name(C2, Chars, LastCh))
3706 {
3707 yield return false;
3708 }
3709 cutIf6:
3710 goto cutIf5;
3711 }
3712 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
3713 {
3714 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
3715 {
3716 foreach (bool l6 in read_name(C2, Chars, LastCh))
3717 {
3718 yield return false;
3719 }
3720 goto cutIf7;
3721 }
3722 }
3723 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
3724 {
3725 foreach (bool l5 in YP.unify(LastCh, C2))
3726 {
3727 yield return false;
3728 }
3729 }
3730 cutIf7:
3731 cutIf5:
3732 cutIf1:
3733 { }
3734 }
3735 }
3736 }
3737 }
3738
3739 public static IEnumerable<bool> read_fullstop(object Ch, object Dict, object Tokens)
3740 {
3741 {
3742 Variable Number = new Variable();
3743 Variable Tokens1 = new Variable();
3744 Variable Chars = new Variable();
3745 Variable NextCh = new Variable();
3746 if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL)))
3747 {
3748 if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL)))
3749 {
3750 foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1("number", Number), Tokens1)))
3751 {
3752 foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch))
3753 {
3754 yield return false;
3755 }
3756 }
3757 goto cutIf1;
3758 }
3759 }
3760 if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL)))
3761 {
3762 foreach (bool l3 in rest_symbol(Ch, Chars, NextCh))
3763 {
3764 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars)))
3765 {
3766 yield return false;
3767 }
3768 }
3769 goto cutIf2;
3770 }
3771 if (YP.greaterThanOrEqual(Ch, 0))
3772 {
3773 foreach (bool l3 in YP.unify(Tokens, Atom.NIL))
3774 {
3775 yield return false;
3776 }
3777 goto cutIf3;
3778 }
3779 foreach (bool l2 in formatError(Atom.a("user_error"), Atom.a("~N** end of file just after full stop~n"), Atom.NIL))
3780 {
3781 }
3782 cutIf3:
3783 cutIf2:
3784 cutIf1:
3785 { }
3786 }
3787 }
3788
3789 public static IEnumerable<bool> read_float(object Number, object Dict, object Tokens, object Digits, object Digit)
3790 {
3791 {
3792 Variable Chars = new Variable();
3793 Variable Rest = new Variable();
3794 Variable NextCh = new Variable();
3795 foreach (bool l2 in prepend(Digits, Chars, Rest))
3796 {
3797 foreach (bool l3 in read_float4(Digit, Rest, NextCh, Chars))
3798 {
3799 foreach (bool l4 in YP.number_codes(Number, Chars))
3800 {
3801 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
3802 {
3803 yield return false;
3804 }
3805 }
3806 }
3807 }
3808 }
3809 }
3810
3811 public static IEnumerable<bool> prepend(object arg1, object arg2, object arg3)
3812 {
3813 {
3814 object X = arg3;
3815 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3816 {
3817 foreach (bool l3 in YP.unify(arg2, new ListPair(46, X)))
3818 {
3819 yield return false;
3820 }
3821 }
3822 }
3823 {
3824 object Y = arg3;
3825 Variable C = new Variable();
3826 Variable Cs = new Variable();
3827 Variable X = new Variable();
3828 foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs)))
3829 {
3830 foreach (bool l3 in YP.unify(arg2, new ListPair(C, X)))
3831 {
3832 foreach (bool l4 in prepend(Cs, X, Y))
3833 {
3834 yield return false;
3835 }
3836 }
3837 }
3838 }
3839 }
3840
3841 public static IEnumerable<bool> read_float4(object C1, object arg2, object NextCh, object Total)
3842 {
3843 {
3844 Variable Chars = new Variable();
3845 Variable C2 = new Variable();
3846 Variable C3 = new Variable();
3847 Variable C4 = new Variable();
3848 Variable More = new Variable();
3849 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3850 {
3851 foreach (bool l3 in YP.get_code(C2))
3852 {
3853 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
3854 {
3855 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
3856 {
3857 foreach (bool l6 in read_float4(C2, Chars, NextCh, Total))
3858 {
3859 yield return false;
3860 }
3861 goto cutIf1;
3862 }
3863 }
3864 if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL)))
3865 {
3866 foreach (bool l5 in YP.get_code(C3))
3867 {
3868 if (YP.equal(C3, new ListPair(45, Atom.NIL)))
3869 {
3870 foreach (bool l7 in YP.get_code(C4))
3871 {
3872 foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More))))
3873 {
3874 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3875 {
3876 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3877 {
3878 foreach (bool l11 in read_exponent(C4, More, NextCh))
3879 {
3880 yield return false;
3881 }
3882 goto cutIf4;
3883 }
3884 }
3885 foreach (bool l9 in YP.unify(More, Atom.NIL))
3886 {
3887 foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3888 {
3889 }
3890 }
3891 foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
3892 {
3893 foreach (bool l10 in YP.unify(NextCh, C4))
3894 {
3895 yield return false;
3896 }
3897 }
3898 cutIf4:
3899 { }
3900 }
3901 }
3902 goto cutIf3;
3903 }
3904 if (YP.equal(C3, new ListPair(43, Atom.NIL)))
3905 {
3906 foreach (bool l7 in YP.get_code(C4))
3907 {
3908 foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More)))
3909 {
3910 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3911 {
3912 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3913 {
3914 foreach (bool l11 in read_exponent(C4, More, NextCh))
3915 {
3916 yield return false;
3917 }
3918 goto cutIf6;
3919 }
3920 }
3921 foreach (bool l9 in YP.unify(More, Atom.NIL))
3922 {
3923 foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3924 {
3925 }
3926 }
3927 foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
3928 {
3929 foreach (bool l10 in YP.unify(NextCh, C4))
3930 {
3931 yield return false;
3932 }
3933 }
3934 cutIf6:
3935 { }
3936 }
3937 }
3938 goto cutIf5;
3939 }
3940 foreach (bool l6 in YP.unify(C4, C3))
3941 {
3942 foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More)))
3943 {
3944 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3945 {
3946 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3947 {
3948 foreach (bool l10 in read_exponent(C4, More, NextCh))
3949 {
3950 yield return false;
3951 }
3952 goto cutIf7;
3953 }
3954 }
3955 foreach (bool l8 in YP.unify(More, Atom.NIL))
3956 {
3957 foreach (bool l9 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3958 {
3959 }
3960 }
3961 foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL)))
3962 {
3963 foreach (bool l9 in YP.unify(NextCh, C4))
3964 {
3965 yield return false;
3966 }
3967 }
3968 cutIf7:
3969 { }
3970 }
3971 }
3972 cutIf5:
3973 cutIf3:
3974 { }
3975 }
3976 goto cutIf2;
3977 }
3978 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
3979 {
3980 foreach (bool l5 in YP.unify(NextCh, C2))
3981 {
3982 yield return false;
3983 }
3984 }
3985 cutIf2:
3986 cutIf1:
3987 { }
3988 }
3989 }
3990 }
3991 }
3992
3993 public static IEnumerable<bool> read_exponent(object C1, object arg2, object NextCh)
3994 {
3995 {
3996 Variable Chars = new Variable();
3997 Variable C2 = new Variable();
3998 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3999 {
4000 foreach (bool l3 in YP.get_code(C2))
4001 {
4002 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
4003 {
4004 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
4005 {
4006 foreach (bool l6 in read_exponent(C2, Chars, NextCh))
4007 {
4008 yield return false;
4009 }
4010 goto cutIf1;
4011 }
4012 }
4013 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
4014 {
4015 foreach (bool l5 in YP.unify(NextCh, C2))
4016 {
4017 yield return false;
4018 }
4019 }
4020 cutIf1:
4021 { }
4022 }
4023 }
4024 }
4025 }
4026
4027 public static IEnumerable<bool> read_number(object C1, object Dict, object arg3)
4028 {
4029 {
4030 Variable Number = new Variable();
4031 Variable Tokens = new Variable();
4032 Variable C2 = new Variable();
4033 Variable N = new Variable();
4034 Variable C = new Variable();
4035 Variable C3 = new Variable();
4036 Variable Digits = new Variable();
4037 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1("number", Number), Tokens)))
4038 {
4039 foreach (bool l3 in read_number4(C1, C2, 0, N))
4040 {
4041 if (YP.equal(C2, 39))
4042 {
4043 if (YP.greaterThanOrEqual(N, 2))
4044 {
4045 if (YP.lessThanOrEqual(N, 36))
4046 {
4047 foreach (bool l7 in read_based(N, 0, Number, C))
4048 {
4049 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4050 {
4051 yield return false;
4052 }
4053 }
4054 goto cutIf2;
4055 }
4056 }
4057 if (YP.equal(N, 0))
4058 {
4059 foreach (bool l6 in YP.get_code(C3))
4060 {
4061 foreach (bool l7 in read_char(C3, -1, Number, C))
4062 {
4063 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4064 {
4065 yield return false;
4066 }
4067 }
4068 }
4069 goto cutIf3;
4070 }
4071 foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL))))
4072 {
4073 foreach (bool l6 in YP.unify(Number, N))
4074 {
4075 foreach (bool l7 in YP.unify(C, C2))
4076 {
4077 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4078 {
4079 yield return false;
4080 }
4081 }
4082 }
4083 }
4084 cutIf3:
4085 cutIf2:
4086 goto cutIf1;
4087 }
4088 if (YP.equal(C2, 46))
4089 {
4090 foreach (bool l5 in YP.get_code(C3))
4091 {
4092 if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
4093 {
4094 if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL)))
4095 {
4096 foreach (bool l8 in YP.number_codes(N, Digits))
4097 {
4098 foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3))
4099 {
4100 yield return false;
4101 }
4102 }
4103 goto cutIf5;
4104 }
4105 }
4106 foreach (bool l6 in YP.unify(Number, N))
4107 {
4108 foreach (bool l7 in read_fullstop(C3, Dict, Tokens))
4109 {
4110 yield return false;
4111 }
4112 }
4113 cutIf5:
4114 { }
4115 }
4116 goto cutIf4;
4117 }
4118 foreach (bool l4 in YP.unify(Number, N))
4119 {
4120 foreach (bool l5 in read_tokens(C2, Dict, Tokens))
4121 {
4122 yield return false;
4123 }
4124 }
4125 cutIf4:
4126 cutIf1:
4127 { }
4128 }
4129 }
4130 }
4131 }
4132
4133 public static IEnumerable<bool> read_number4(object C0, object C, object N0, object N)
4134 {
4135 {
4136 Variable N1 = new Variable();
4137 Variable C1 = new Variable();
4138 if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL)))
4139 {
4140 if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL)))
4141 {
4142 foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0)))
4143 {
4144 foreach (bool l5 in YP.get_code(C1))
4145 {
4146 foreach (bool l6 in read_number4(C1, C, N1, N))
4147 {
4148 yield return false;
4149 }
4150 }
4151 }
4152 goto cutIf1;
4153 }
4154 }
4155 if (YP.equal(C0, 95))
4156 {
4157 foreach (bool l3 in YP.get_code(C1))
4158 {
4159 foreach (bool l4 in read_number4(C1, C, N0, N))
4160 {
4161 yield return false;
4162 }
4163 }
4164 goto cutIf2;
4165 }
4166 foreach (bool l2 in YP.unify(C, C0))
4167 {
4168 foreach (bool l3 in YP.unify(N, N0))
4169 {
4170 yield return false;
4171 }
4172 }
4173 cutIf2:
4174 cutIf1:
4175 { }
4176 }
4177 }
4178
4179 public static IEnumerable<bool> read_based(object Base, object N0, object N, object C)
4180 {
4181 {
4182 Variable C1 = new Variable();
4183 Variable Digit = new Variable();
4184 Variable N1 = new Variable();
4185 foreach (bool l2 in YP.get_code(C1))
4186 {
4187 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
4188 {
4189 if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
4190 {
4191 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL))))
4192 {
4193 if (YP.lessThan(Digit, Base))
4194 {
4195 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4196 {
4197 foreach (bool l8 in read_based(Base, N1, N, C))
4198 {
4199 yield return false;
4200 }
4201 }
4202 goto cutIf2;
4203 }
4204 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4205 {
4206 foreach (bool l7 in read_based(Base, N0, N, C))
4207 {
4208 yield return false;
4209 }
4210 goto cutIf3;
4211 }
4212 foreach (bool l6 in YP.unify(N, N0))
4213 {
4214 foreach (bool l7 in YP.unify(C, C1))
4215 {
4216 yield return false;
4217 }
4218 }
4219 cutIf3:
4220 cutIf2:
4221 { }
4222 }
4223 goto cutIf1;
4224 }
4225 }
4226 if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
4227 {
4228 if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
4229 {
4230 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10))))
4231 {
4232 if (YP.lessThan(Digit, Base))
4233 {
4234 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4235 {
4236 foreach (bool l8 in read_based(Base, N1, N, C))
4237 {
4238 yield return false;
4239 }
4240 }
4241 goto cutIf5;
4242 }
4243 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4244 {
4245 foreach (bool l7 in read_based(Base, N0, N, C))
4246 {
4247 yield return false;
4248 }
4249 goto cutIf6;
4250 }
4251 foreach (bool l6 in YP.unify(N, N0))
4252 {
4253 foreach (bool l7 in YP.unify(C, C1))
4254 {
4255 yield return false;
4256 }
4257 }
4258 cutIf6:
4259 cutIf5:
4260 { }
4261 }
4262 goto cutIf4;
4263 }
4264 }
4265 if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
4266 {
4267 if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
4268 {
4269 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10))))
4270 {
4271 if (YP.lessThan(Digit, Base))
4272 {
4273 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4274 {
4275 foreach (bool l8 in read_based(Base, N1, N, C))
4276 {
4277 yield return false;
4278 }
4279 }
4280 goto cutIf8;
4281 }
4282 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4283 {
4284 foreach (bool l7 in read_based(Base, N0, N, C))
4285 {
4286 yield return false;
4287 }
4288 goto cutIf9;
4289 }
4290 foreach (bool l6 in YP.unify(N, N0))
4291 {
4292 foreach (bool l7 in YP.unify(C, C1))
4293 {
4294 yield return false;
4295 }
4296 }
4297 cutIf9:
4298 cutIf8:
4299 { }
4300 }
4301 goto cutIf7;
4302 }
4303 }
4304 foreach (bool l3 in YP.unify(Digit, 99))
4305 {
4306 if (YP.lessThan(Digit, Base))
4307 {
4308 foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4309 {
4310 foreach (bool l6 in read_based(Base, N1, N, C))
4311 {
4312 yield return false;
4313 }
4314 }
4315 goto cutIf10;
4316 }
4317 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4318 {
4319 foreach (bool l5 in read_based(Base, N0, N, C))
4320 {
4321 yield return false;
4322 }
4323 goto cutIf11;
4324 }
4325 foreach (bool l4 in YP.unify(N, N0))
4326 {
4327 foreach (bool l5 in YP.unify(C, C1))
4328 {
4329 yield return false;
4330 }
4331 }
4332 cutIf11:
4333 cutIf10:
4334 { }
4335 }
4336 cutIf7:
4337 cutIf4:
4338 cutIf1:
4339 { }
4340 }
4341 }
4342 }
4343
4344 public static IEnumerable<bool> read_char(object Char, object Quote, object Result, object Next)
4345 {
4346 {
4347 Variable C1 = new Variable();
4348 Variable C2 = new Variable();
4349 Variable C3 = new Variable();
4350 Variable Ch = new Variable();
4351 if (YP.equal(Char, 92))
4352 {
4353 foreach (bool l3 in YP.get_code(C1))
4354 {
4355 if (YP.lessThan(C1, 0))
4356 {
4357 foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL))))
4358 {
4359 foreach (bool l6 in YP.unify(Result, -1))
4360 {
4361 foreach (bool l7 in YP.unify(Next, C1))
4362 {
4363 yield return false;
4364 }
4365 }
4366 }
4367 goto cutIf2;
4368 }
4369 if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
4370 {
4371 foreach (bool l5 in YP.get_code(C2))
4372 {
4373 foreach (bool l6 in read_char(C2, Quote, Result, Next))
4374 {
4375 yield return false;
4376 }
4377 }
4378 goto cutIf3;
4379 }
4380 if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL)))
4381 {
4382 foreach (bool l5 in YP.get_code(C2))
4383 {
4384 foreach (bool l6 in read_char(C2, Quote, Result, Next))
4385 {
4386 yield return false;
4387 }
4388 }
4389 goto cutIf4;
4390 }
4391 if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL)))
4392 {
4393 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
4394 {
4395 foreach (bool l6 in YP.get_code(C2))
4396 {
4397 if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL)))
4398 {
4399 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
4400 {
4401 foreach (bool l9 in YP.get_code(C3))
4402 {
4403 if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL)))
4404 {
4405 if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
4406 {
4407 foreach (bool l12 in YP.get_code(Next))
4408 {
4409 foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL)))))
4410 {
4411 yield return false;
4412 }
4413 }
4414 goto cutIf7;
4415 }
4416 }
4417 foreach (bool l10 in YP.unify(Next, C3))
4418 {
4419 foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL)))))
4420 {
4421 yield return false;
4422 }
4423 }
4424 cutIf7:
4425 { }
4426 }
4427 goto cutIf6;
4428 }
4429 }
4430 foreach (bool l7 in YP.unify(Next, C2))
4431 {
4432 foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL))))
4433 {
4434 yield return false;
4435 }
4436 }
4437 cutIf6:
4438 { }
4439 }
4440 goto cutIf5;
4441 }
4442 }
4443 if (YP.equal(C1, new ListPair(94, Atom.NIL)))
4444 {
4445 foreach (bool l5 in YP.get_code(C2))
4446 {
4447 if (YP.lessThan(C2, 0))
4448 {
4449 foreach (bool l7 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~c..~c^..~c~n"), ListPair.make(new object[] { Quote, 92, Quote })))
4450 {
4451 foreach (bool l8 in YP.unify(Result, -1))
4452 {
4453 foreach (bool l9 in YP.unify(Next, C2))
4454 {
4455 yield return false;
4456 }
4457 }
4458 }
4459 goto cutIf9;
4460 }
4461 if (YP.equal(C2, new ListPair(63, Atom.NIL)))
4462 {
4463 foreach (bool l7 in YP.unify(Result, 127))
4464 {
4465 foreach (bool l8 in YP.get_code(Next))
4466 {
4467 yield return false;
4468 }
4469 }
4470 goto cutIf10;
4471 }
4472 foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31)))
4473 {
4474 foreach (bool l7 in YP.get_code(Next))
4475 {
4476 yield return false;
4477 }
4478 }
4479 cutIf10:
4480 cutIf9:
4481 { }
4482 }
4483 goto cutIf8;
4484 }
4485 foreach (bool l4 in escape_char(C1, Result))
4486 {
4487 foreach (bool l5 in YP.get_code(Next))
4488 {
4489 yield return false;
4490 }
4491 goto cutIf11;
4492 }
4493 foreach (bool l4 in YP.unify(Result, C1))
4494 {
4495 foreach (bool l5 in YP.get_code(Next))
4496 {
4497 yield return false;
4498 }
4499 }
4500 cutIf11:
4501 cutIf8:
4502 cutIf5:
4503 cutIf4:
4504 cutIf3:
4505 cutIf2:
4506 { }
4507 }
4508 goto cutIf1;
4509 }
4510 if (YP.equal(Char, Quote))
4511 {
4512 foreach (bool l3 in YP.get_code(Ch))
4513 {
4514 if (YP.equal(Ch, Quote))
4515 {
4516 foreach (bool l5 in YP.unify(Result, Quote))
4517 {
4518 foreach (bool l6 in YP.get_code(Next))
4519 {
4520 yield return false;
4521 }
4522 }
4523 goto cutIf13;
4524 }
4525 foreach (bool l4 in YP.unify(Result, -1))
4526 {
4527 foreach (bool l5 in YP.unify(Next, Ch))
4528 {
4529 yield return false;
4530 }
4531 }
4532 cutIf13:
4533 { }
4534 }
4535 goto cutIf12;
4536 }
4537 if (YP.lessThan(Char, new ListPair(32, Atom.NIL)))
4538 {
4539 if (YP.notEqual(Char, 9))
4540 {
4541 if (YP.notEqual(Char, 10))
4542 {
4543 if (YP.notEqual(Char, 13))
4544 {
4545 foreach (bool l6 in YP.unify(Result, -1))
4546 {
4547 foreach (bool l7 in YP.unify(Next, Char))
4548 {
4549 foreach (bool l8 in formatError(Atom.a("user_error"), Atom.a("~N** Strange character ~d ends ~ctoken~c~n"), ListPair.make(new object[] { Char, Quote, Quote })))
4550 {
4551 yield return false;
4552 }
4553 }
4554 }
4555 goto cutIf14;
4556 }
4557 }
4558 }
4559 }
4560 foreach (bool l2 in YP.unify(Result, Char))
4561 {
4562 foreach (bool l3 in YP.get_code(Next))
4563 {
4564 yield return false;
4565 }
4566 }
4567 cutIf14:
4568 cutIf12:
4569 cutIf1:
4570 { }
4571 }
4572 }
4573 #pragma warning restore 0168, 0219, 0162
4574 }
4575}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs
deleted file mode 100644
index 9f5ae3d..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs
+++ /dev/null
@@ -1,159 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32
33namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
34{
35 /// <summary>
36 /// A PrologException is used as the exception thrown by YP.throw(Term).
37 /// </summary>
38 public class PrologException : Exception
39 {
40 public readonly object _term;
41
42 /// <summary>
43 /// Create a PrologException with the given Term. The printable exception message is the full Term.
44 /// </summary>
45 /// <param name="Term">the term of the exception</param>
46 public PrologException(object Term)
47 : base(YP.getValue(Term).ToString())
48 {
49 _term = YP.makeCopy(Term, new Variable.CopyStore());
50 }
51
52 /// <summary>
53 /// Create a PrologException where the Term is error(ErrorTerm, Message).
54 /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding.
55 /// </summary>
56 /// <param name="ErrorTerm">the error term of the error</param>
57 /// <param name="Messsage">the message term of the error. If this is a string, it is converted to an
58 /// Atom so it can be used by Prolog code.
59 /// Message, converted to a string, is use as the printable exception message.
60 /// </param>
61 public PrologException(object ErrorTerm, object Message)
62 : base(YP.getValue(Message).ToString())
63 {
64 if (Message is string)
65 Message = Atom.a((string)Message);
66 _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore());
67 }
68
69 public class TypeErrorInfo
70 {
71 public readonly Atom _Type;
72 public readonly object _Culprit;
73 public readonly object _Message;
74
75 public TypeErrorInfo(Atom Type, object Culprit, object Message)
76 {
77 _Type = Type;
78 _Culprit = Culprit;
79 _Message = Message;
80 }
81 }
82 /// <summary>
83 /// Return the TypeErrorInfo for this exception, or null if _term does not match
84 /// error(type_error(Type, Culprit), Message).
85 /// </summary>
86 /// <returns></returns>
87 public TypeErrorInfo getTypeErrorInfo()
88 {
89 if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error"))
90 return null;
91 object errorTerm = ((Functor2)_term)._arg1;
92 if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "type_error"))
93 return null;
94 if (!(((Functor2)errorTerm)._arg1 is Atom))
95 return null;
96 return new TypeErrorInfo
97 ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2);
98 }
99
100 public class ExistenceErrorInfo
101 {
102 public readonly Atom _Type;
103 public readonly object _Culprit;
104 public readonly object _Message;
105
106 public ExistenceErrorInfo(Atom Type, object Culprit, object Message)
107 {
108 _Type = Type;
109 _Culprit = Culprit;
110 _Message = Message;
111 }
112
113 /// <summary>
114 /// If _Type is procedure and _Culprit is name/artity, return the name. Otherwise return null.
115 /// </summary>
116 /// <returns></returns>
117 public object getProcedureName()
118 {
119 if (!(_Type._name == "procedure" &&
120 _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH))
121 return null;
122 return ((Functor2)_Culprit)._arg1;
123 }
124
125 /// <summary>
126 /// If _Type is procedure and _Culprit is name/arity and arity is an integer, return the arity.
127 /// Otherwise return -1.
128 /// </summary>
129 /// <returns></returns>
130 public int getProcedureArity()
131 {
132 if (!(_Type._name == "procedure" &&
133 _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH))
134 return -1;
135 if (!(((Functor2)_Culprit)._arg2 is int))
136 return -1;
137 return (int)((Functor2)_Culprit)._arg2;
138 }
139 }
140 /// <summary>
141 /// Return the ExistenceErrorInfo for this exception, or null if _term does not match
142 /// error(existence_error(Type, Culprit), Message). If the returned ExistenceErrorInfo _Culprit is
143 /// procedure, you can use its getProcedureName and getProcedureArity.
144 /// </summary>
145 /// <returns></returns>
146 public ExistenceErrorInfo getExistenceErrorInfo()
147 {
148 if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error"))
149 return null;
150 object errorTerm = ((Functor2)_term)._arg1;
151 if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "existence_error"))
152 return null;
153 if (!(((Functor2)errorTerm)._arg1 is Atom))
154 return null;
155 return new ExistenceErrorInfo
156 ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2);
157 }
158 }
159}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Properties/AssemblyInfo.cs
deleted file mode 100644
index 342dbff..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,33 +0,0 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using System.Runtime.InteropServices;
4
5// General Information about an assembly is controlled through the following
6// set of attributes. Change these attribute values to modify the information
7// associated with an assembly.
8[assembly: AssemblyTitle("OpenSim.Region.ScriptEngine.Shared.YieldProlog")]
9[assembly: AssemblyDescription("")]
10[assembly: AssemblyConfiguration("")]
11[assembly: AssemblyCompany("http://opensimulator.org")]
12[assembly: AssemblyProduct("OpenSim")]
13[assembly: AssemblyCopyright("OpenSimulator developers")]
14[assembly: AssemblyTrademark("")]
15[assembly: AssemblyCulture("")]
16
17// Setting ComVisible to false makes the types in this assembly not visible
18// to COM components. If you need to access a type in this assembly from
19// COM, set the ComVisible attribute to true on that type.
20[assembly: ComVisible(false)]
21
22// The following GUID is for the ID of the typelib if this project is exposed to COM
23[assembly: Guid("8df98e6b-0425-44d6-8d91-2b3b4c56acdf")]
24
25// Version information for an assembly consists of the following four values:
26//
27// Major Version
28// Minor Version
29// Build Number
30// Revision
31//
32[assembly: AssemblyVersion("0.7.6.*")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs
deleted file mode 100644
index 4b6112f..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs
+++ /dev/null
@@ -1,62 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32
33namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
34{
35 /// <summary>
36 /// An UndefinedPredicateException extends PrologException to create an existence_error exception.
37 /// </summary>
38 public class UndefinedPredicateException : PrologException
39 {
40 private Atom _predicateName;
41 private int _arity;
42
43 public UndefinedPredicateException(object message, Atom predicateName, int arity)
44 : base(new Functor2
45 (Atom.a("existence_error"), Atom.a("procedure"), new Functor2(Atom.a("/"), predicateName, arity)),
46 message)
47 {
48 _predicateName = predicateName;
49 _arity = arity;
50 }
51
52 public Atom PredicateName
53 {
54 get { return _predicateName; }
55 }
56
57 public int Arity
58 {
59 get { return _arity; }
60 }
61 }
62}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs
deleted file mode 100644
index ea5b7a6..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs
+++ /dev/null
@@ -1,222 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
36{
37 public interface IUnifiable
38 {
39 IEnumerable<bool> unify(object arg);
40 void addUniqueVariables(List<Variable> variableSet);
41 object makeCopy(Variable.CopyStore copyStore);
42 bool termEqual(object term);
43 bool ground();
44 }
45
46 /// <summary>
47 /// A Variable is passed to a function so that it can be unified with
48 /// value or another Variable. See getValue and unify for details.
49 /// </summary>
50 public class Variable : IUnifiable
51 {
52 // Use _isBound separate from _value so that it can be bound to any value,
53 // including null.
54 private bool _isBound = false;
55 private object _value;
56
57 /// <summary>
58 /// If this Variable is unbound, then just return this Variable.
59 /// Otherwise, if this has been bound to a value with unify, return the value.
60 /// If the bound value is another Variable, this follows the "variable chain"
61 /// to the end and returns the final value, or the final Variable if it is unbound.
62 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
63 /// </summary>
64 /// <returns></returns>
65 public object getValue()
66 {
67 if (!_isBound)
68 return this;
69
70 object result = _value;
71 while (result is Variable)
72 {
73 if (!((Variable)result)._isBound)
74 return result;
75
76 // Keep following the Variable chain.
77 result = ((Variable)result)._value;
78 }
79
80 return result;
81 }
82
83 /// <summary>
84 /// If this Variable is bound, then just call YP.unify to unify this with arg.
85 /// (Note that if arg is an unbound Variable, then YP.unify will bind it to
86 /// this Variable's value.)
87 /// Otherwise, bind this Variable to YP.getValue(arg) and yield once. After the
88 /// yield, return this Variable to the unbound state.
89 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
90 /// </summary>
91 /// <param name="arg"></param>
92 /// <returns></returns>
93 public IEnumerable<bool> unify(object arg)
94 {
95 if (!_isBound)
96 {
97 _value = YP.getValue(arg);
98 if (_value == this)
99 // We are unifying this unbound variable with itself, so leave it unbound.
100 yield return false;
101 else
102 {
103 _isBound = true;
104 try
105 {
106 yield return false;
107 }
108 finally
109 {
110 // Remove the binding.
111 _isBound = false;
112 }
113 }
114 }
115 else
116 {
117 // disable warning on l1, don't see how we can
118 // code this differently
119 #pragma warning disable 0168, 0219
120 foreach (bool l1 in YP.unify(this, arg))
121 yield return false;
122 #pragma warning restore 0168, 0219
123 }
124 }
125
126 public override string ToString()
127 {
128 object value = getValue();
129 if (value == this)
130 return "_Variable";
131 else
132 return getValue().ToString();
133 }
134
135 /// <summary>
136 /// If bound, call YP.addUniqueVariables on the value. Otherwise, if this unbound
137 /// variable is not already in variableSet, add it.
138 /// </summary>
139 /// <param name="variableSet"></param>
140 public void addUniqueVariables(List<Variable> variableSet)
141 {
142 if (_isBound)
143 YP.addUniqueVariables(getValue(), variableSet);
144 else
145 {
146 if (variableSet.IndexOf(this) < 0)
147 variableSet.Add(this);
148 }
149 }
150
151 /// <summary>
152 /// If bound, return YP.makeCopy for the value, else return copyStore.getCopy(this).
153 /// However, if copyStore is null, just return this.
154 /// </summary>
155 /// <param name="copyStore"></param>
156 /// <returns></returns>
157 public object makeCopy(Variable.CopyStore copyStore)
158 {
159 if (_isBound)
160 return YP.makeCopy(getValue(), copyStore);
161 else
162 return copyStore == null ? this : copyStore.getCopy(this);
163 }
164
165 public bool termEqual(object term)
166 {
167 if (_isBound)
168 return YP.termEqual(getValue(), term);
169 else
170 return this == YP.getValue(term);
171 }
172
173 public bool ground()
174 {
175 if (_isBound)
176 // This is usually called by YP.ground which already did getValue, so this
177 // should never be reached, but check anyway.
178 return YP.ground(getValue());
179 else
180 return false;
181 }
182
183 /// <summary>
184 /// A CopyStore is used by makeCopy to track which Variable objects have
185 /// been copied.
186 /// </summary>
187 public class CopyStore
188 {
189 private List<Variable> _inVariableSet = new List<Variable>();
190 private List<Variable> _outVariableSet = new List<Variable>();
191
192 /// <summary>
193 /// If inVariable has already been copied, return its copy. Otherwise,
194 /// return a fresh Variable associated with inVariable.
195 /// </summary>
196 /// <param name="inVariable"></param>
197 /// <returns></returns>
198 public Variable getCopy(Variable inVariable)
199 {
200 int index = _inVariableSet.IndexOf(inVariable);
201 if (index >= 0)
202 return _outVariableSet[index];
203 else
204 {
205 Variable outVariable = new Variable();
206 _inVariableSet.Add(inVariable);
207 _outVariableSet.Add(outVariable);
208 return outVariable;
209 }
210 }
211
212 /// <summary>
213 /// Return the number of unique variables that have been copied.
214 /// </summary>
215 /// <returns></returns>
216 public int getNUniqueVariables()
217 {
218 return _inVariableSet.Count;
219 }
220 }
221 }
222}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs
deleted file mode 100644
index f2171dd..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs
+++ /dev/null
@@ -1,2701 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34using System.IO;
35using System.Reflection;
36using System.Net.Sockets;
37using System.Text;
38using System.Text.RegularExpressions;
39using log4net;
40
41namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
42{
43 /// <summary>
44 /// YP has static methods for general functions in Yield Prolog such as <see cref="getValue"/>
45 /// and <see cref="unify"/>.
46 /// </summary>
47 public class YP
48 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50 private static Fail _fail = new Fail();
51 private static Repeat _repeat = new Repeat();
52 private static Dictionary<NameArity, List<IClause>> _predicatesStore =
53 new Dictionary<NameArity, List<IClause>>();
54 private static TextWriter _outputStream = System.Console.Out;
55 private static TextReader _inputStream = System.Console.In;
56 private static IndexedAnswers _operatorTable = null;
57 private static Dictionary<string, object> _prologFlags = new Dictionary<string, object>();
58 public const int MAX_ARITY = 255;
59
60 /// <summary>
61 /// An IClause is used so that dynamic predicates can call match.
62 /// </summary>
63 public interface IClause
64 {
65 IEnumerable<bool> match(object[] args);
66 IEnumerable<bool> clause(object Head, object Body);
67 }
68
69 /// <summary>
70 /// If value is a Variable, then return its getValue. Otherwise, just
71 /// return value. You should call YP.getValue on any object that
72 /// may be a Variable to get the value to pass to other functions in
73 /// your system that are not part of Yield Prolog, such as math functions
74 /// or file I/O.
75 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
76 /// </summary>
77 /// <param name="value"></param>
78 /// <returns></returns>
79 public static object getValue(object value)
80 {
81 if (value is Variable)
82 return ((Variable)value).getValue();
83 else
84 return value;
85 }
86
87 /// <summary>
88 /// If arg1 or arg2 is an object with a unify method (such as Variable or
89 /// Functor) then just call its unify with the other argument. The object's
90 /// unify method will bind the values or check for equals as needed.
91 /// Otherwise, both arguments are "normal" (atomic) values so if they
92 /// are equal then succeed (yield once), else fail (don't yield).
93 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
94 /// </summary>
95 /// <param name="arg1"></param>
96 /// <param name="arg2"></param>
97 /// <returns></returns>
98 public static IEnumerable<bool> unify(object arg1, object arg2)
99 {
100 arg1 = getValue(arg1);
101 arg2 = getValue(arg2);
102 if (arg1 is IUnifiable)
103 return ((IUnifiable)arg1).unify(arg2);
104 else if (arg2 is IUnifiable)
105 return ((IUnifiable)arg2).unify(arg1);
106 else
107 {
108 // Arguments are "normal" types.
109 if (arg1.Equals(arg2))
110 return new Succeed();
111 else
112 return _fail;
113 }
114 }
115
116 /// <summary>
117 /// This is used for the lookup key in _factStore.
118 /// </summary>
119 public struct NameArity
120 {
121 public readonly Atom _name;
122 public readonly int _arity;
123
124 public NameArity(Atom name, int arity)
125 {
126 _name = name;
127 _arity = arity;
128 }
129
130 public override bool Equals(object obj)
131 {
132 if (obj is NameArity)
133 {
134 NameArity nameArity = (NameArity)obj;
135 return nameArity._name.Equals(_name) && nameArity._arity.Equals(_arity);
136 }
137 else
138 {
139 return false;
140 }
141 }
142
143 public override int GetHashCode()
144 {
145 return _name.GetHashCode() ^ _arity.GetHashCode();
146 }
147 }
148
149 /// <summary>
150 /// Convert term to an int.
151 /// If term is a single-element List, use its first element
152 /// (to handle the char types like "a").
153 /// If can't convert, throw a PrologException for type_error evaluable (because this is only
154 /// called from arithmetic functions).
155 /// </summary>
156 /// <param name="term"></param>
157 /// <returns></returns>
158 public static int convertInt(object term)
159 {
160 term = YP.getValue(term);
161 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
162 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
163 // Assume it is a char type like "a".
164 term = YP.getValue(((Functor2)term)._arg1);
165 if (term is Variable)
166 throw new PrologException(Atom.a("instantiation_error"),
167 "Expected a number but the argument is an unbound variable");
168
169 try
170 {
171 return (int)term;
172 }
173 catch (InvalidCastException)
174 {
175 throw new PrologException
176 (new Functor2
177 ("type_error", Atom.a("evaluable"),
178 new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)),
179 "Term must be an integer");
180 }
181 }
182
183 /// <summary>
184 /// Convert term to a double. This may convert an int to a double, etc.
185 /// If term is a single-element List, use its first element
186 /// (to handle the char types like "a").
187 /// If can't convert, throw a PrologException for type_error evaluable (because this is only
188 /// called from arithmetic functions).
189 /// </summary>
190 /// <param name="term"></param>
191 /// <returns></returns>
192 public static double convertDouble(object term)
193 {
194 term = YP.getValue(term);
195 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
196 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
197 // Assume it is a char type like "a".
198 term = YP.getValue(((Functor2)term)._arg1);
199 if (term is Variable)
200 throw new PrologException(Atom.a("instantiation_error"),
201 "Expected a number but the argument is an unbound variable");
202
203 try
204 {
205 return Convert.ToDouble(term);
206 }
207 catch (InvalidCastException)
208 {
209 throw new PrologException
210 (new Functor2
211 ("type_error", Atom.a("evaluable"),
212 new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)),
213 "Term must be an integer");
214 }
215 }
216
217 /// <summary>
218 /// If term is an integer, set intTerm.
219 /// If term is a single-element List, use its first element
220 /// (to handle the char types like "a"). Return true for success, false if can't convert.
221 /// We use a success return value because throwing an exception is inefficient.
222 /// </summary>
223 /// <param name="term"></param>
224 /// <returns></returns>
225 public static bool getInt(object term, out int intTerm)
226 {
227 term = YP.getValue(term);
228 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
229 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
230 // Assume it is a char type like "a".
231 term = YP.getValue(((Functor2)term)._arg1);
232
233 if (term is int)
234 {
235 intTerm = (int)term;
236 return true;
237 }
238
239 intTerm = 0;
240 return false;
241 }
242
243 public static bool equal(object x, object y)
244 {
245 x = YP.getValue(x);
246 if (x is DateTime)
247 return (DateTime)x == (DateTime)YP.getValue(y);
248 // Assume convertDouble converts an int to a double perfectly.
249 return YP.convertDouble(x) == YP.convertDouble(y);
250 }
251
252 public static bool notEqual(object x, object y)
253 {
254 x = YP.getValue(x);
255 if (x is DateTime)
256 return (DateTime)x != (DateTime)YP.getValue(y);
257 // Assume convertDouble converts an int to a double perfectly.
258 return YP.convertDouble(x) != YP.convertDouble(y);
259 }
260
261 public static bool greaterThan(object x, object y)
262 {
263 x = YP.getValue(x);
264 if (x is DateTime)
265 return (DateTime)x > (DateTime)YP.getValue(y);
266 // Assume convertDouble converts an int to a double perfectly.
267 return YP.convertDouble(x) > YP.convertDouble(y);
268 }
269
270 public static bool lessThan(object x, object y)
271 {
272 x = YP.getValue(x);
273 if (x is DateTime)
274 return (DateTime)x < (DateTime)YP.getValue(y);
275 // Assume convertDouble converts an int to a double perfectly.
276 return YP.convertDouble(x) < YP.convertDouble(y);
277 }
278
279 public static bool greaterThanOrEqual(object x, object y)
280 {
281 x = YP.getValue(x);
282 if (x is DateTime)
283 return (DateTime)x >= (DateTime)YP.getValue(y);
284 // Assume convertDouble converts an int to a double perfectly.
285 return YP.convertDouble(x) >= YP.convertDouble(y);
286 }
287
288 public static bool lessThanOrEqual(object x, object y)
289 {
290 x = YP.getValue(x);
291 if (x is DateTime)
292 return (DateTime)x <= (DateTime)YP.getValue(y);
293 // Assume convertDouble converts an int to a double perfectly.
294 return YP.convertDouble(x) <= YP.convertDouble(y);
295 }
296
297 public static object negate(object x)
298 {
299 int intX;
300 if (getInt(x, out intX))
301 return -intX;
302 return -convertDouble(x);
303 }
304
305 public static object abs(object x)
306 {
307 int intX;
308 if (getInt(x, out intX))
309 return Math.Abs(intX);
310 return Math.Abs(convertDouble(x));
311 }
312
313 public static object sign(object x)
314 {
315 int intX;
316 if (getInt(x, out intX))
317 return Math.Sign(intX);
318 return Math.Sign(convertDouble(x));
319 }
320
321 // Use toFloat instead of float because it is a reserved keyword.
322 public static object toFloat(object x)
323 {
324 return convertDouble(x);
325 }
326
327 /// <summary>
328 /// The ISO standard returns an int.
329 /// </summary>
330 /// <param name="x"></param>
331 /// <returns></returns>
332 public static object floor(object x)
333 {
334 return (int)Math.Floor(convertDouble(x));
335 }
336
337 /// <summary>
338 /// The ISO standard returns an int.
339 /// </summary>
340 /// <param name="x"></param>
341 /// <returns></returns>
342 public static object truncate(object x)
343 {
344 return (int)Math.Truncate(convertDouble(x));
345 }
346
347 /// <summary>
348 /// The ISO standard returns an int.
349 /// </summary>
350 /// <param name="x"></param>
351 /// <returns></returns>
352 public static object round(object x)
353 {
354 return (int)Math.Round(convertDouble(x));
355 }
356
357 /// <summary>
358 /// The ISO standard returns an int.
359 /// </summary>
360 /// <param name="x"></param>
361 /// <returns></returns>
362 public static object ceiling(object x)
363 {
364 return (int)Math.Ceiling(convertDouble(x));
365 }
366
367 public static object sin(object x)
368 {
369 return Math.Sin(YP.convertDouble(x));
370 }
371
372 public static object cos(object x)
373 {
374 return Math.Cos(YP.convertDouble(x));
375 }
376
377 public static object atan(object x)
378 {
379 return Math.Atan(YP.convertDouble(x));
380 }
381
382 public static object exp(object x)
383 {
384 return Math.Exp(YP.convertDouble(x));
385 }
386
387 public static object log(object x)
388 {
389 return Math.Log(YP.convertDouble(x));
390 }
391
392 public static object sqrt(object x)
393 {
394 return Math.Sqrt(convertDouble(x));
395 }
396
397 public static object bitwiseComplement(object x)
398 {
399 return ~YP.convertInt(x);
400 }
401
402 public static object add(object x, object y)
403 {
404 int intX, intY;
405 if (getInt(x, out intX) && getInt(y, out intY))
406 return intX + intY;
407 return convertDouble(x) + convertDouble(y);
408 }
409
410 public static object subtract(object x, object y)
411 {
412 int intX, intY;
413 if (getInt(x, out intX) && getInt(y, out intY))
414 return intX - intY;
415 return convertDouble(x) - convertDouble(y);
416 }
417
418 public static object multiply(object x, object y)
419 {
420 int intX, intY;
421 if (getInt(x, out intX) && getInt(y, out intY))
422 return intX * intY;
423 return convertDouble(x) * convertDouble(y);
424 }
425
426 /// <summary>
427 /// Return floating point, even if both arguments are integer.
428 /// </summary>
429 /// <param name="x"></param>
430 /// <param name="y"></param>
431 /// <returns></returns>
432 public static object divide(object x, object y)
433 {
434 return convertDouble(x) / convertDouble(y);
435 }
436
437 public static object intDivide(object x, object y)
438 {
439 int intX, intY;
440 if (getInt(x, out intX) && getInt(y, out intY))
441 return intX / intY;
442 // Still allow passing a double, but treat as an int.
443 return (int)convertDouble(x) / (int)convertDouble(y);
444 }
445
446 public static object mod(object x, object y)
447 {
448 int intX, intY;
449 if (getInt(x, out intX) && getInt(y, out intY))
450 return intX % intY;
451 // Still allow passing a double, but treat as an int.
452 return (int)convertDouble(x) % (int)convertDouble(y);
453 }
454
455 public static object pow(object x, object y)
456 {
457 return Math.Pow(YP.convertDouble(x), YP.convertDouble(y));
458 }
459
460 public static object bitwiseShiftRight(object x, object y)
461 {
462 return YP.convertInt(x) >> YP.convertInt(y);
463 }
464
465 public static object bitwiseShiftLeft(object x, object y)
466 {
467 return YP.convertInt(x) << YP.convertInt(y);
468 }
469
470 public static object bitwiseAnd(object x, object y)
471 {
472 return YP.convertInt(x) & YP.convertInt(y);
473 }
474
475 public static object bitwiseOr(object x, object y)
476 {
477 return YP.convertInt(x) | YP.convertInt(y);
478 }
479
480 public static object min(object x, object y)
481 {
482 int intX, intY;
483 if (getInt(x, out intX) && getInt(y, out intY))
484 return Math.Min(intX, intY);
485 return Math.Min(convertDouble(x), convertDouble(y));
486 }
487
488 public static object max(object x, object y)
489 {
490 int intX, intY;
491 if (getInt(x, out intX) && getInt(y, out intY))
492 return Math.Max(intX, intY);
493 return Math.Max(convertDouble(x), convertDouble(y));
494 }
495
496 public static IEnumerable<bool> copy_term(object inTerm, object outTerm)
497 {
498 return YP.unify(outTerm, YP.makeCopy(inTerm, new Variable.CopyStore()));
499 }
500
501 public static void addUniqueVariables(object term, List<Variable> variableSet)
502 {
503 term = YP.getValue(term);
504 if (term is IUnifiable)
505 ((IUnifiable)term).addUniqueVariables(variableSet);
506 }
507
508 public static object makeCopy(object term, Variable.CopyStore copyStore)
509 {
510 term = YP.getValue(term);
511 if (term is IUnifiable)
512 return ((IUnifiable)term).makeCopy(copyStore);
513 else
514 // term is a "normal" type. Assume it is ground.
515 return term;
516 }
517
518 /// <summary>
519 /// Sort the array in place according to termLessThan. This does not remove duplicates
520 /// </summary>
521 /// <param name="array"></param>
522 public static void sortArray(object[] array)
523 {
524 Array.Sort(array, YP.compareTerms);
525 }
526
527 /// <summary>
528 /// Sort the array in place according to termLessThan. This does not remove duplicates
529 /// </summary>
530 /// <param name="array"></param>
531 public static void sortArray(List<object> array)
532 {
533 array.Sort(YP.compareTerms);
534 }
535
536 /// <summary>
537 /// Sort List according to termLessThan, remove duplicates and unify with Sorted.
538 /// </summary>
539 /// <param name="List"></param>
540 /// <param name="Sorted"></param>
541 /// <returns></returns>
542 public static IEnumerable<bool> sort(object List, object Sorted)
543 {
544 object[] array = ListPair.toArray(List);
545 if (array == null)
546 return YP.fail();
547 if (array.Length > 1)
548 sortArray(array);
549 return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array));
550 }
551
552 /// <summary>
553 /// Use YP.unify to unify each of the elements of the two arrays, and yield
554 /// once if they all unify.
555 /// </summary>
556 /// <param name="array1"></param>
557 /// <param name="array2"></param>
558 /// <returns></returns>
559 public static IEnumerable<bool> unifyArrays(object[] array1, object[] array2)
560 {
561 if (array1.Length != array2.Length)
562 yield break;
563
564 IEnumerator<bool>[] iterators = new IEnumerator<bool>[array1.Length];
565 bool gotMatch = true;
566 int nIterators = 0;
567 // Try to bind all the arguments.
568 for (int i = 0; i < array1.Length; ++i)
569 {
570 IEnumerator<bool> iterator = YP.unify(array1[i], array2[i]).GetEnumerator();
571 iterators[nIterators++] = iterator;
572 // MoveNext() is true if YP.unify succeeds.
573 if (!iterator.MoveNext())
574 {
575 gotMatch = false;
576 break;
577 }
578 }
579 int z = 0;
580 try
581 {
582 if (gotMatch)
583 yield return false;
584 }
585 finally
586 {
587 // Manually finalize all the iterators.
588 for (z = 0; z < nIterators; ++z)
589 iterators[z].Dispose();
590 }
591 }
592
593 /// <summary>
594 /// Return an iterator (which you can use in a for-in loop) which does
595 /// zero iterations. This returns a pre-existing iterator which is
596 /// more efficient than letting the compiler generate a new one.
597 /// </summary>
598 /// <returns></returns>
599 public static IEnumerable<bool> fail()
600 {
601 return _fail;
602 }
603
604 /// <summary>
605 /// Return an iterator (which you can use in a for-in loop) which does
606 /// one iteration. This returns a pre-existing iterator which is
607 /// more efficient than letting the compiler generate a new one.
608 /// </summary>
609 /// <returns></returns>
610 public static IEnumerable<bool> succeed()
611 {
612 return new Succeed();
613 }
614
615 /// <summary>
616 /// Return an iterator (which you can use in a for-in loop) which repeats
617 /// indefinitely. This returns a pre-existing iterator which is
618 /// more efficient than letting the compiler generate a new one.
619 /// </summary>
620 /// <returns></returns>
621 public static IEnumerable<bool> repeat()
622 {
623 return _repeat;
624 }
625
626 // disable warning on l1, don't see how we can
627 // code this differently
628 #pragma warning disable 0168, 0219
629 public static IEnumerable<bool> univ(object Term, object List)
630 {
631 Term = YP.getValue(Term);
632 List = YP.getValue(List);
633
634 if (nonvar(Term))
635 return YP.unify(new ListPair
636 (getFunctorName(Term), ListPair.make(getFunctorArgs(Term))), List);
637
638 Variable Name = new Variable();
639 Variable ArgList = new Variable();
640 foreach (bool l1 in new ListPair(Name, ArgList).unify(List))
641 {
642 object[] args = ListPair.toArray(ArgList);
643 if (args == null)
644 throw new PrologException
645 (new Functor2("type_error", Atom.a("list"), ArgList),
646 "Expected a list. Got: " + ArgList.getValue());
647 if (args.Length == 0)
648 // Return the Name, even if it is not an Atom.
649 return YP.unify(Term, Name);
650 if (args.Length > MAX_ARITY)
651 throw new PrologException
652 (new Functor1("representation_error", Atom.a("max_arity")),
653 "Functor arity " + args.Length + " may not be greater than " + MAX_ARITY);
654 if (!atom(Name))
655 throw new PrologException
656 (new Functor2("type_error", Atom.a("atom"), Name),
657 "Expected an atom. Got: " + Name.getValue());
658
659 return YP.unify(Term, Functor.make((Atom)YP.getValue(Name), args));
660 }
661
662 return YP.fail();
663 }
664
665 public static IEnumerable<bool> functor(object Term, object FunctorName, object Arity)
666 {
667 Term = YP.getValue(Term);
668 FunctorName = YP.getValue(FunctorName);
669 Arity = YP.getValue(Arity);
670
671 if (Term is Variable)
672 {
673 if (FunctorName is Variable)
674 throw new PrologException(Atom.a("instantiation_error"),
675 "Arg 2 FunctorName is an unbound variable");
676 if (Arity is Variable)
677 throw new PrologException(Atom.a("instantiation_error"),
678 "Arg 3 Arity is an unbound variable");
679 if (!(Arity is int))
680 throw new PrologException
681 (new Functor2("type_error", Atom.a("integer"), Arity), "Arity is not an integer");
682 if (!YP.atomic(FunctorName))
683 throw new PrologException
684 (new Functor2("type_error", Atom.a("atomic"), FunctorName), "FunctorName is not atomic");
685
686 if ((int)Arity < 0)
687 throw new PrologException
688 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Arity),
689 "Arity may not be less than zero");
690 else if ((int)Arity == 0)
691 {
692 // Just unify Term with the atomic FunctorName.
693 foreach (bool l1 in YP.unify(Term, FunctorName))
694 yield return false;
695 }
696 else
697 {
698 if ((int)Arity > MAX_ARITY)
699 throw new PrologException
700 (new Functor1("representation_error", Atom.a("max_arity")),
701 "Functor arity " + Arity + " may not be greater than " + MAX_ARITY);
702 if (!(FunctorName is Atom))
703 throw new PrologException
704 (new Functor2("type_error", Atom.a("atom"), FunctorName), "FunctorName is not an atom");
705 // Construct a functor with unbound variables.
706 object[] args = new object[(int)Arity];
707 for (int i = 0; i < args.Length; ++i)
708 args[i] = new Variable();
709 foreach (bool l1 in YP.unify(Term, Functor.make((Atom)FunctorName, args)))
710 yield return false;
711 }
712 }
713 else
714 {
715 foreach (bool l1 in YP.unify(FunctorName, getFunctorName(Term)))
716 {
717 foreach (bool l2 in YP.unify(Arity, getFunctorArgs(Term).Length))
718 yield return false;
719 }
720 }
721 }
722
723 public static IEnumerable<bool> arg(object ArgNumber, object Term, object Value)
724 {
725 if (var(ArgNumber))
726 throw new PrologException(Atom.a("instantiation_error"), "Arg 1 ArgNumber is an unbound variable");
727 int argNumberInt;
728 if (!getInt(ArgNumber, out argNumberInt))
729 throw new PrologException
730 (new Functor2("type_error", Atom.a("integer"), ArgNumber), "Arg 1 ArgNumber must be integer");
731 if (argNumberInt < 0)
732 throw new PrologException
733 (new Functor2("domain_error", Atom.a("not_less_than_zero"), argNumberInt),
734 "ArgNumber may not be less than zero");
735
736 if (YP.var(Term))
737 throw new PrologException(Atom.a("instantiation_error"),
738 "Arg 2 Term is an unbound variable");
739 if (!YP.compound(Term))
740 throw new PrologException
741 (new Functor2("type_error", Atom.a("compound"), Term), "Arg 2 Term must be compound");
742
743 object[] termArgs = YP.getFunctorArgs(Term);
744 // Silently fail if argNumberInt is out of range.
745 if (argNumberInt >= 1 && argNumberInt <= termArgs.Length)
746 {
747 // The first ArgNumber is at 1, not 0.
748 foreach (bool l1 in YP.unify(Value, termArgs[argNumberInt - 1]))
749 yield return false;
750 }
751 }
752
753 public static bool termEqual(object Term1, object Term2)
754 {
755 Term1 = YP.getValue(Term1);
756 if (Term1 is IUnifiable)
757 return ((IUnifiable)Term1).termEqual(Term2);
758 return Term1.Equals(YP.getValue(Term2));
759 }
760
761 public static bool termNotEqual(object Term1, object Term2)
762 {
763 return !termEqual(Term1, Term2);
764 }
765
766 public static bool termLessThan(object Term1, object Term2)
767 {
768 Term1 = YP.getValue(Term1);
769 Term2 = YP.getValue(Term2);
770 int term1TypeCode = getTypeCode(Term1);
771 int term2TypeCode = getTypeCode(Term2);
772 if (term1TypeCode != term2TypeCode)
773 return term1TypeCode < term2TypeCode;
774
775 // The terms are the same type code.
776 if (term1TypeCode == -2)
777 {
778 // Variable.
779 // We always check for equality first because we want to be sure
780 // that less than returns false if the terms are equal, in
781 // case that the less than check really behaves like less than or equal.
782 if ((Variable)Term1 != (Variable)Term2)
783 // The hash code should be unique to a Variable object.
784 return Term1.GetHashCode() < Term2.GetHashCode();
785 return false;
786 }
787 if (term1TypeCode == 0)
788 return ((Atom)Term1)._name.CompareTo(((Atom)Term2)._name) < 0;
789 if (term1TypeCode == 1)
790 return ((Functor1)Term1).lessThan((Functor1)Term2);
791 if (term1TypeCode == 2)
792 return ((Functor2)Term1).lessThan((Functor2)Term2);
793 if (term1TypeCode == 3)
794 return ((Functor3)Term1).lessThan((Functor3)Term2);
795 if (term1TypeCode == 4)
796 return ((Functor)Term1).lessThan((Functor)Term2);
797
798 // Type code is -1 for general objects. First compare their type names.
799 // Note that this puts Double before Int32 as required by ISO Prolog.
800 string term1TypeName = Term1.GetType().ToString();
801 string term2TypeName = Term2.GetType().ToString();
802 if (term1TypeName != term2TypeName)
803 return term1TypeName.CompareTo(term2TypeName) < 0;
804
805 // The terms are the same type name.
806 if (Term1 is int)
807 return (int)Term1 < (int)Term2;
808 else if (Term1 is double)
809 return (double)Term1 < (double)Term2;
810 else if (Term1 is DateTime)
811 return (DateTime)Term1 < (DateTime)Term2;
812 else if (Term1 is String)
813 return ((String)Term1).CompareTo((String)Term2) < 0;
814 // Debug: Should we try arrays, etc.?
815
816 if (!Term1.Equals(Term2))
817 // Could be equal or greater than.
818 return Term1.GetHashCode() < Term2.GetHashCode();
819 return false;
820 }
821
822 /// <summary>
823 /// Type code is -2 if term is a Variable, 0 if it is an Atom,
824 /// 1 if it is a Functor1, 2 if it is a Functor2, 3 if it is a Functor3,
825 /// 4 if it is Functor.
826 /// Otherwise, type code is -1.
827 /// This does not call YP.getValue(term).
828 /// </summary>
829 /// <param name="term"></param>
830 /// <returns></returns>
831 private static int getTypeCode(object term)
832 {
833 if (term is Variable)
834 return -2;
835 else if (term is Atom)
836 return 0;
837 else if (term is Functor1)
838 return 1;
839 else if (term is Functor2)
840 return 2;
841 else if (term is Functor3)
842 return 3;
843 else if (term is Functor)
844 return 4;
845 else
846 return -1;
847 }
848
849 public static bool termLessThanOrEqual(object Term1, object Term2)
850 {
851 if (YP.termEqual(Term1, Term2))
852 return true;
853 return YP.termLessThan(Term1, Term2);
854 }
855
856 public static bool termGreaterThan(object Term1, object Term2)
857 {
858 return !YP.termLessThanOrEqual(Term1, Term2);
859 }
860
861 public static bool termGreaterThanOrEqual(object Term1, object Term2)
862 {
863 // termLessThan should ensure that it returns false if terms are equal,
864 // so that this would return true.
865 return !YP.termLessThan(Term1, Term2);
866 }
867
868 public static int compareTerms(object Term1, object Term2)
869 {
870 if (YP.termEqual(Term1, Term2))
871 return 0;
872 else if (YP.termLessThan(Term1, Term2))
873 return -1;
874 else
875 return 1;
876 }
877
878 public static bool ground(object Term)
879 {
880 Term = YP.getValue(Term);
881 if (Term is IUnifiable)
882 return ((IUnifiable)Term).ground();
883 return true;
884 }
885
886 public static IEnumerable<bool> current_op
887 (object Priority, object Specifier, object Operator)
888 {
889 if (_operatorTable == null)
890 {
891 // Initialize.
892 _operatorTable = new IndexedAnswers(3);
893 _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a(":-") });
894 _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a("-->") });
895 _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a(":-") });
896 _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a("?-") });
897 _operatorTable.addAnswer(new object[] { 1100, Atom.a("xfy"), Atom.a(";") });
898 _operatorTable.addAnswer(new object[] { 1050, Atom.a("xfy"), Atom.a("->") });
899 _operatorTable.addAnswer(new object[] { 1000, Atom.a("xfy"), Atom.a(",") });
900 _operatorTable.addAnswer(new object[] { 900, Atom.a("fy"), Atom.a("\\+") });
901 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=") });
902 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\=") });
903 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("==") });
904 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\==") });
905 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@<") });
906 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@=<") });
907 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>") });
908 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>=") });
909 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=..") });
910 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("is") });
911 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=:=") });
912 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=\\=") });
913 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("<") });
914 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=<") });
915 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">") });
916 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">=") });
917 _operatorTable.addAnswer(new object[] { 600, Atom.a("xfy"), Atom.a(":") });
918 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("+") });
919 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("-") });
920 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("/\\") });
921 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("\\/") });
922 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("*") });
923 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("/") });
924 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("//") });
925 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("rem") });
926 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("mod") });
927 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("<<") });
928 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a(">>") });
929 _operatorTable.addAnswer(new object[] { 200, Atom.a("xfx"), Atom.a("**") });
930 _operatorTable.addAnswer(new object[] { 200, Atom.a("xfy"), Atom.a("^") });
931 _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("-") });
932 _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("\\") });
933 // Debug: This is hacked in to run the Prolog test suite until we implement op/3.
934 _operatorTable.addAnswer(new object[] { 20, Atom.a("xfx"), Atom.a("<--") });
935 }
936
937 return _operatorTable.match(new object[] { Priority, Specifier, Operator });
938 }
939
940 public static IEnumerable<bool> atom_length(object atom, object Length)
941 {
942 atom = YP.getValue(atom);
943 Length = YP.getValue(Length);
944 if (atom is Variable)
945 throw new PrologException(Atom.a("instantiation_error"),
946 "Expected atom(Arg1) but it is an unbound variable");
947 if (!(atom is Atom))
948 throw new PrologException
949 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom");
950 if (!(Length is Variable))
951 {
952 if (!(Length is int))
953 throw new PrologException
954 (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer");
955 if ((int)Length < 0)
956 throw new PrologException
957 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length),
958 "Length must not be less than zero");
959 }
960 return YP.unify(Length, ((Atom)atom)._name.Length);
961 }
962
963 public static IEnumerable<bool> atom_concat(object Start, object End, object Whole)
964 {
965 // Debug: Should we try to preserve the _declaringClass?
966 Start = YP.getValue(Start);
967 End = YP.getValue(End);
968 Whole = YP.getValue(Whole);
969 if (Whole is Variable)
970 {
971 if (Start is Variable)
972 throw new PrologException(Atom.a("instantiation_error"),
973 "Arg 1 Start and arg 3 Whole are both var");
974 if (End is Variable)
975 throw new PrologException(Atom.a("instantiation_error"),
976 "Arg 2 End and arg 3 Whole are both var");
977 if (!(Start is Atom))
978 throw new PrologException
979 (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not an atom");
980 if (!(End is Atom))
981 throw new PrologException
982 (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not an atom");
983
984 foreach (bool l1 in YP.unify(Whole, Atom.a(((Atom)Start)._name + ((Atom)End)._name)))
985 yield return false;
986 }
987 else
988 {
989 if (!(Whole is Atom))
990 throw new PrologException
991 (new Functor2("type_error", Atom.a("atom"), Whole), "Arg 3 Whole is not an atom");
992 bool gotStartLength = false;
993 int startLength = 0;
994 if (!(Start is Variable))
995 {
996 if (!(Start is Atom))
997 throw new PrologException
998 (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not var or atom");
999 startLength = ((Atom)Start)._name.Length;
1000 gotStartLength = true;
1001 }
1002
1003 bool gotEndLength = false;
1004 int endLength = 0;
1005 if (!(End is Variable))
1006 {
1007 if (!(End is Atom))
1008 throw new PrologException
1009 (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not var or atom");
1010 endLength = ((Atom)End)._name.Length;
1011 gotEndLength = true;
1012 }
1013
1014 // We are doing a search through all possible Start and End which concatenate to Whole.
1015 string wholeString = ((Atom)Whole)._name;
1016 for (int i = 0; i <= wholeString.Length; ++i)
1017 {
1018 // If we got either startLength or endLength, we know the lengths have to match so check
1019 // the lengths instead of constructing an Atom to do it.
1020 if (gotStartLength && startLength != i)
1021 continue;
1022 if (gotEndLength && endLength != wholeString.Length - i)
1023 continue;
1024 foreach (bool l1 in YP.unify(Start, Atom.a(wholeString.Substring(0, i))))
1025 {
1026 foreach (bool l2 in YP.unify(End, Atom.a(wholeString.Substring(i, wholeString.Length - i))))
1027 yield return false;
1028 }
1029 }
1030 }
1031 }
1032
1033 public static IEnumerable<bool> sub_atom
1034 (object atom, object Before, object Length, object After, object Sub_atom)
1035 {
1036 // Debug: Should we try to preserve the _declaringClass?
1037 atom = YP.getValue(atom);
1038 Before = YP.getValue(Before);
1039 Length = YP.getValue(Length);
1040 After = YP.getValue(After);
1041 Sub_atom = YP.getValue(Sub_atom);
1042 if (atom is Variable)
1043 throw new PrologException(Atom.a("instantiation_error"),
1044 "Expected atom(Arg1) but it is an unbound variable");
1045 if (!(atom is Atom))
1046 throw new PrologException
1047 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom");
1048 if (!(Sub_atom is Variable))
1049 {
1050 if (!(Sub_atom is Atom))
1051 throw new PrologException
1052 (new Functor2("type_error", Atom.a("atom"), Sub_atom), "Sub_atom is not var or atom");
1053 }
1054
1055 bool beforeIsInt = false;
1056 bool lengthIsInt = false;
1057 bool afterIsInt = false;
1058 if (!(Before is Variable))
1059 {
1060 if (!(Before is int))
1061 throw new PrologException
1062 (new Functor2("type_error", Atom.a("integer"), Before), "Before must be var or integer");
1063 beforeIsInt = true;
1064 if ((int)Before < 0)
1065 throw new PrologException
1066 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Before),
1067 "Before must not be less than zero");
1068 }
1069 if (!(Length is Variable))
1070 {
1071 if (!(Length is int))
1072 throw new PrologException
1073 (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer");
1074 lengthIsInt = true;
1075 if ((int)Length < 0)
1076 throw new PrologException
1077 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length),
1078 "Length must not be less than zero");
1079 }
1080 if (!(After is Variable))
1081 {
1082 if (!(After is int))
1083 throw new PrologException
1084 (new Functor2("type_error", Atom.a("integer"), After), "After must be var or integer");
1085 afterIsInt = true;
1086 if ((int)After < 0)
1087 throw new PrologException
1088 (new Functor2("domain_error", Atom.a("not_less_than_zero"), After),
1089 "After must not be less than zero");
1090 }
1091
1092 Atom atomAtom = (Atom)atom;
1093 int atomLength = atomAtom._name.Length;
1094 if (beforeIsInt && lengthIsInt)
1095 {
1096 // Special case: the caller is just trying to extract a substring, so do it quickly.
1097 int xAfter = atomLength - (int)Before - (int)Length;
1098 if (xAfter >= 0)
1099 {
1100 foreach (bool l1 in YP.unify(After, xAfter))
1101 {
1102 foreach (bool l2 in YP.unify
1103 (Sub_atom, Atom.a(atomAtom._name.Substring((int)Before, (int)Length))))
1104 yield return false;
1105 }
1106 }
1107 }
1108 else if (afterIsInt && lengthIsInt)
1109 {
1110 // Special case: the caller is just trying to extract a substring, so do it quickly.
1111 int xBefore = atomLength - (int)After - (int)Length;
1112 if (xBefore >= 0)
1113 {
1114 foreach (bool l1 in YP.unify(Before, xBefore))
1115 {
1116 foreach (bool l2 in YP.unify
1117 (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, (int)Length))))
1118 yield return false;
1119 }
1120 }
1121 }
1122 else
1123 {
1124 // We are underconstrained and doing a search, so go through all possibilities.
1125 for (int xBefore = 0; xBefore <= atomLength; ++xBefore)
1126 {
1127 foreach (bool l1 in YP.unify(Before, xBefore))
1128 {
1129 for (int xLength = 0; xLength <= (atomLength - xBefore); ++xLength)
1130 {
1131 foreach (bool l2 in YP.unify(Length, xLength))
1132 {
1133 foreach (bool l3 in YP.unify(After, atomLength - (xBefore + xLength)))
1134 {
1135 foreach (bool l4 in YP.unify
1136 (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, xLength))))
1137 yield return false;
1138 }
1139 }
1140 }
1141 }
1142 }
1143 }
1144 }
1145
1146 public static IEnumerable<bool> atom_chars(object atom, object List)
1147 {
1148 atom = YP.getValue(atom);
1149 List = YP.getValue(List);
1150
1151 if (atom is Variable)
1152 {
1153 if (List is Variable)
1154 throw new PrologException(Atom.a("instantiation_error"),
1155 "Arg 1 Atom and arg 2 List are both unbound variables");
1156 object[] codeArray = ListPair.toArray(List);
1157 if (codeArray == null)
1158 throw new PrologException
1159 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1160
1161 char[] charArray = new char[codeArray.Length];
1162 for (int i = 0; i < codeArray.Length; ++i)
1163 {
1164 object listAtom = YP.getValue(codeArray[i]);
1165 if (listAtom is Variable)
1166 throw new PrologException(Atom.a("instantiation_error"),
1167 "Arg 2 List has an element which is an unbound variable");
1168 if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1))
1169 throw new PrologException
1170 (new Functor2("type_error", Atom.a("character"), listAtom),
1171 "Arg 2 List has an element which is not a one character atom");
1172 charArray[i] = ((Atom)listAtom)._name[0];
1173 }
1174 return YP.unify(atom, Atom.a(new String(charArray)));
1175 }
1176 else
1177 {
1178 if (!(atom is Atom))
1179 throw new PrologException
1180 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom");
1181
1182 string atomString = ((Atom)atom)._name;
1183 object charList = Atom.NIL;
1184 // Start from the back to make the list.
1185 for (int i = atomString.Length - 1; i >= 0; --i)
1186 charList = new ListPair(Atom.a(atomString.Substring(i, 1)), charList);
1187 return YP.unify(List, charList);
1188 }
1189 }
1190
1191 public static IEnumerable<bool> atom_codes(object atom, object List)
1192 {
1193 atom = YP.getValue(atom);
1194 List = YP.getValue(List);
1195
1196 if (atom is Variable)
1197 {
1198 if (List is Variable)
1199 throw new PrologException(Atom.a("instantiation_error"),
1200 "Arg 1 Atom and arg 2 List are both unbound variables");
1201 object[] codeArray = ListPair.toArray(List);
1202 if (codeArray == null)
1203 throw new PrologException
1204 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1205
1206 char[] charArray = new char[codeArray.Length];
1207 for (int i = 0; i < codeArray.Length; ++i)
1208 {
1209 int codeInt;
1210 if (!getInt(codeArray[i], out codeInt) || codeInt < 0)
1211 throw new PrologException
1212 (new Functor1("representation_error", Atom.a("character_code")),
1213 "Element of Arg 2 List is not a character code");
1214 charArray[i] = (char)codeInt;
1215 }
1216 return YP.unify(atom, Atom.a(new String(charArray)));
1217 }
1218 else
1219 {
1220 if (!(atom is Atom))
1221 throw new PrologException
1222 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom");
1223
1224 string atomString = ((Atom)atom)._name;
1225 object codeList = Atom.NIL;
1226 // Start from the back to make the list.
1227 for (int i = atomString.Length - 1; i >= 0; --i)
1228 codeList = new ListPair((int)atomString[i], codeList);
1229 return YP.unify(List, codeList);
1230 }
1231 }
1232
1233 public static IEnumerable<bool> number_chars(object Number, object List)
1234 {
1235 Number = YP.getValue(Number);
1236 List = YP.getValue(List);
1237
1238 if (Number is Variable)
1239 {
1240 if (List is Variable)
1241 throw new PrologException(Atom.a("instantiation_error"),
1242 "Arg 1 Number and arg 2 List are both unbound variables");
1243 object[] codeArray = ListPair.toArray(List);
1244 if (codeArray == null)
1245 throw new PrologException
1246 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1247
1248 char[] charArray = new char[codeArray.Length];
1249 for (int i = 0; i < codeArray.Length; ++i)
1250 {
1251 object listAtom = YP.getValue(codeArray[i]);
1252 if (listAtom is Variable)
1253 throw new PrologException(Atom.a("instantiation_error"),
1254 "Arg 2 List has an element which is an unbound variable");
1255 if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1))
1256 throw new PrologException
1257 (new Functor2("type_error", Atom.a("character"), listAtom),
1258 "Arg 2 List has an element which is not a one character atom");
1259 charArray[i] = ((Atom)listAtom)._name[0];
1260 }
1261 return YP.unify(Number, parseNumberString(charArray));
1262 }
1263 else
1264 {
1265 string numberString = null;
1266 // Try converting to an int first.
1267 int intNumber;
1268 if (YP.getInt(Number, out intNumber))
1269 numberString = intNumber.ToString();
1270 else
1271 {
1272 if (!YP.number(Number))
1273 throw new PrologException
1274 (new Functor2("type_error", Atom.a("number"), Number),
1275 "Arg 1 Number is not var or number");
1276 // We just checked, so convertDouble shouldn't throw an exception.
1277 numberString = YP.doubleToString(YP.convertDouble(Number));
1278 }
1279
1280 object charList = Atom.NIL;
1281 // Start from the back to make the list.
1282 for (int i = numberString.Length - 1; i >= 0; --i)
1283 charList = new ListPair(Atom.a(numberString.Substring(i, 1)), charList);
1284 return YP.unify(List, charList);
1285 }
1286 }
1287
1288 public static IEnumerable<bool> number_codes(object Number, object List)
1289 {
1290 Number = YP.getValue(Number);
1291 List = YP.getValue(List);
1292
1293 if (Number is Variable)
1294 {
1295 if (List is Variable)
1296 throw new PrologException(Atom.a("instantiation_error"),
1297 "Arg 1 Number and arg 2 List are both unbound variables");
1298 object[] codeArray = ListPair.toArray(List);
1299 if (codeArray == null)
1300 throw new PrologException
1301 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1302
1303 char[] charArray = new char[codeArray.Length];
1304 for (int i = 0; i < codeArray.Length; ++i)
1305 {
1306 int codeInt;
1307 if (!getInt(codeArray[i], out codeInt) || codeInt < 0)
1308 throw new PrologException
1309 (new Functor1("representation_error", Atom.a("character_code")),
1310 "Element of Arg 2 List is not a character code");
1311 charArray[i] = (char)codeInt;
1312 }
1313 return YP.unify(Number, parseNumberString(charArray));
1314 }
1315 else
1316 {
1317 string numberString = null;
1318 // Try converting to an int first.
1319 int intNumber;
1320 if (YP.getInt(Number, out intNumber))
1321 numberString = intNumber.ToString();
1322 else
1323 {
1324 if (!YP.number(Number))
1325 throw new PrologException
1326 (new Functor2("type_error", Atom.a("number"), Number),
1327 "Arg 1 Number is not var or number");
1328 // We just checked, so convertDouble shouldn't throw an exception.
1329 numberString = YP.doubleToString(YP.convertDouble(Number));
1330 }
1331
1332 object codeList = Atom.NIL;
1333 // Start from the back to make the list.
1334 for (int i = numberString.Length - 1; i >= 0; --i)
1335 codeList = new ListPair((int)numberString[i], codeList);
1336 return YP.unify(List, codeList);
1337 }
1338 }
1339
1340 /// <summary>
1341 /// Used by number_chars and number_codes. Return the number in charArray or
1342 /// throw an exception if can't parse.
1343 /// </summary>
1344 /// <param name="numberString"></param>
1345 /// <returns></returns>
1346 private static object parseNumberString(char[] charArray)
1347 {
1348 string numberString = new String(charArray);
1349 if (charArray.Length == 3 && numberString.StartsWith("0'"))
1350 // This is a char code.
1351 return (int)charArray[2];
1352 if (numberString.StartsWith("0x"))
1353 {
1354 try
1355 {
1356 return Int32.Parse
1357 (numberString.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier);
1358 }
1359 catch (FormatException)
1360 {
1361 throw new PrologException
1362 (new Functor1("syntax_error", Atom.a("number_format: " + numberString)),
1363 "Arg 2 List is not a list for a hexadecimal number");
1364 }
1365 }
1366 // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception?
1367 try
1368 {
1369 // Try an int first.
1370 return Convert.ToInt32(numberString);
1371 }
1372 catch (FormatException) { }
1373 try
1374 {
1375 return Convert.ToDouble(numberString);
1376 }
1377 catch (FormatException)
1378 {
1379 throw new PrologException
1380 (new Functor1("syntax_error", Atom.a("number_format: " + numberString)),
1381 "Arg 2 List is not a list for a number");
1382 }
1383 }
1384
1385 public static IEnumerable<bool> char_code(object Char, object Code)
1386 {
1387 Char = YP.getValue(Char);
1388 Code = YP.getValue(Code);
1389
1390 int codeInt = 0;
1391 if (!(Code is Variable))
1392 {
1393 // Get codeInt now so we type check it whether or not Char is Variable.
1394 if (!getInt(Code, out codeInt))
1395 throw new PrologException
1396 (new Functor2("type_error", Atom.a("integer"), Code),
1397 "Arg 2 Code is not var or a character code");
1398 if (codeInt < 0)
1399 throw new PrologException
1400 (new Functor1("representation_error", Atom.a("character_code")),
1401 "Arg 2 Code is not a character code");
1402 }
1403
1404 if (Char is Variable)
1405 {
1406 if (Code is Variable)
1407 throw new PrologException(Atom.a("instantiation_error"),
1408 "Arg 1 Char and arg 2 Code are both unbound variables");
1409
1410 return YP.unify(Char, Atom.a(new String(new char[] {(char)codeInt})));
1411 }
1412 else
1413 {
1414 if (!(Char is Atom) || ((Atom)Char)._name.Length != 1)
1415 throw new PrologException
1416 (new Functor2("type_error", Atom.a("character"), Char),
1417 "Arg 1 Char is not var or one-character atom");
1418
1419 if (Code is Variable)
1420 return YP.unify(Code, (int)((Atom)Char)._name[0]);
1421 else
1422 // Use codeInt to handle whether Code is supplied as, e.g., 97 or 0'a .
1423 return YP.unify(codeInt, (int)((Atom)Char)._name[0]);
1424 }
1425 }
1426
1427 /// <summary>
1428 /// If term is an Atom or functor type, return its name.
1429 /// Otherwise, return term.
1430 /// </summary>
1431 /// <param name="term"></param>
1432 /// <returns></returns>
1433 public static object getFunctorName(object term)
1434 {
1435 term = YP.getValue(term);
1436 if (term is Functor1)
1437 return ((Functor1)term)._name;
1438 else if (term is Functor2)
1439 return ((Functor2)term)._name;
1440 else if (term is Functor3)
1441 return ((Functor3)term)._name;
1442 else if (term is Functor)
1443 return ((Functor)term)._name;
1444 else
1445 return term;
1446 }
1447
1448 /// <summary>
1449 /// If term is an Atom or functor type, return an array of its args.
1450 /// Otherwise, return an empty array.
1451 /// </summary>
1452 /// <param name="term"></param>
1453 /// <returns></returns>
1454 public static object[] getFunctorArgs(object term)
1455 {
1456 term = YP.getValue(term);
1457 if (term is Functor1)
1458 {
1459 Functor1 functor = (Functor1)term;
1460 return new object[] { functor._arg1 };
1461 }
1462 else if (term is Functor2)
1463 {
1464 Functor2 functor = (Functor2)term;
1465 return new object[] { functor._arg1, functor._arg2 };
1466 }
1467 else if (term is Functor3)
1468 {
1469 Functor3 functor = (Functor3)term;
1470 return new object[] { functor._arg1, functor._arg2, functor._arg3 };
1471 }
1472 else if (term is Functor) {
1473 Functor functor = (Functor)term;
1474 return functor._args;
1475 }
1476 else
1477 return new object[0];
1478 }
1479
1480 public static bool var(object Term)
1481 {
1482 return YP.getValue(Term) is Variable;
1483 }
1484
1485 public static bool nonvar(object Term)
1486 {
1487 return !YP.var(Term);
1488 }
1489
1490 public static bool atom(object Term)
1491 {
1492 return YP.getValue(Term) is Atom;
1493 }
1494
1495 public static bool integer(object Term)
1496 {
1497 // Debug: Should exhaustively check for all integer types.
1498 return getValue(Term) is int;
1499 }
1500
1501 // Use isFloat instead of float because it is a reserved keyword.
1502 public static bool isFloat(object Term)
1503 {
1504 // Debug: Should exhaustively check for all float types.
1505 return getValue(Term) is double;
1506 }
1507
1508 public static bool number(object Term)
1509 {
1510 return YP.integer(Term) || YP.isFloat(Term);
1511 }
1512
1513 public static bool atomic(object Term)
1514 {
1515 return YP.atom(Term) || YP.number(Term);
1516 }
1517
1518 public static bool compound(object Term)
1519 {
1520 Term = getValue(Term);
1521 return Term is Functor1 || Term is Functor2 || Term is Functor3 || Term is Functor;
1522 }
1523
1524 /// <summary>
1525 /// If input is a TextReader, use it. If input is an Atom or String, create a StreamReader with the
1526 /// input as the filename. If input is a Prolog list, then read character codes from it.
1527 /// </summary>
1528 /// <param name="input"></param>
1529 public static void see(object input)
1530 {
1531 input = YP.getValue(input);
1532 if (input is Variable)
1533 throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable");
1534
1535 if (input == null)
1536 {
1537 _inputStream = null;
1538 return;
1539 }
1540 if (input is TextReader)
1541 {
1542 _inputStream = (TextReader)input;
1543 return;
1544 }
1545 else if (input is Atom)
1546 {
1547 _inputStream = new StreamReader(((Atom)input)._name);
1548 return;
1549 }
1550 else if (input is String)
1551 {
1552 _inputStream = new StreamReader((String)input);
1553 return;
1554 }
1555 else if (input is Functor2 && ((Functor2)input)._name == Atom.DOT)
1556 {
1557 _inputStream = new CodeListReader(input);
1558 return;
1559 }
1560 else
1561 throw new PrologException
1562 (new Functor2("domain_error", Atom.a("stream_or_alias"), input),
1563 "Input stream specifier not recognized");
1564 }
1565
1566 public static void seen()
1567 {
1568 if (_inputStream == null)
1569 return;
1570 if (_inputStream == Console.In)
1571 return;
1572 _inputStream.Close();
1573 _inputStream = Console.In;
1574 }
1575
1576 public static IEnumerable<bool> current_input(object Stream)
1577 {
1578 return YP.unify(Stream, _inputStream);
1579 }
1580
1581 /// <summary>
1582 /// If output is a TextWriter, use it. If output is an Atom or a String, create a StreamWriter
1583 /// with the input as the filename.
1584 /// </summary>
1585 /// <param name="output"></param>
1586 public static void tell(object output)
1587 {
1588 output = YP.getValue(output);
1589 if (output is Variable)
1590 throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable");
1591
1592 if (output == null)
1593 {
1594 _outputStream = null;
1595 return;
1596 }
1597 if (output is TextWriter)
1598 {
1599 _outputStream = (TextWriter)output;
1600 return;
1601 }
1602 else if (output is Atom)
1603 {
1604 _outputStream = new StreamWriter(((Atom)output)._name);
1605 return;
1606 }
1607 else if (output is String)
1608 {
1609 _outputStream = new StreamWriter((String)output);
1610 return;
1611 }
1612 else
1613 throw new PrologException
1614 (new Functor2("domain_error", Atom.a("stream_or_alias"), output),
1615 "Can't open stream for " + output);
1616 }
1617
1618 public static void told()
1619 {
1620 if (_outputStream == null)
1621 return;
1622 if (_outputStream == Console.Out)
1623 return;
1624 _outputStream.Close();
1625 _outputStream = Console.Out;
1626 }
1627
1628 public static IEnumerable<bool> current_output(object Stream)
1629 {
1630 return YP.unify(Stream, _outputStream);
1631 }
1632
1633 public static void write(object x)
1634 {
1635 if (_outputStream == null)
1636 return;
1637 x = YP.getValue(x);
1638 if (x is double)
1639 _outputStream.Write(doubleToString((double)x));
1640 else
1641 _outputStream.Write(x.ToString());
1642 }
1643
1644 /// <summary>
1645 /// Format x as a string, making sure that it won't parse as an int later. I.e., for 1.0, don't just
1646 /// use "1" which will parse as an int.
1647 /// </summary>
1648 /// <param name="x"></param>
1649 /// <returns></returns>
1650 private static string doubleToString(double x)
1651 {
1652 string xString = x.ToString();
1653 // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception?
1654 try
1655 {
1656 Convert.ToInt32(xString);
1657 // The string will parse as an int, not a double, so re-format so that it does.
1658 // Use float if possible, else exponential if it would be too big.
1659 return x.ToString(x >= 100000.0 ? "E1" : "f1");
1660 }
1661 catch (FormatException)
1662 {
1663 // Assume it will parse as a double.
1664 }
1665 return xString;
1666 }
1667
1668 public static void put_code(object x)
1669 {
1670 if (_outputStream == null)
1671 return;
1672 if (var(x))
1673 throw new PrologException(Atom.a("instantiation_error"), "Arg 1 is an unbound variable");
1674 int xInt;
1675 if (!getInt(x, out xInt))
1676 throw new PrologException
1677 (new Functor2("type_error", Atom.a("integer"), x), "Arg 1 must be integer");
1678 _outputStream.Write((char)xInt);
1679 }
1680
1681 public static void nl()
1682 {
1683 if (_outputStream == null)
1684 return;
1685 _outputStream.WriteLine();
1686 }
1687
1688 public static IEnumerable<bool> get_code(object code)
1689 {
1690 if (_inputStream == null)
1691 return YP.unify(code, -1);
1692 else
1693 return YP.unify(code, _inputStream.Read());
1694 }
1695
1696 public static void asserta(object Term, Type declaringClass)
1697 {
1698 assertDynamic(Term, declaringClass, true);
1699 }
1700
1701 public static void assertz(object Term, Type declaringClass)
1702 {
1703 assertDynamic(Term, declaringClass, false);
1704 }
1705
1706 public static void assertDynamic(object Term, Type declaringClass, bool prepend)
1707 {
1708 Term = getValue(Term);
1709 if (Term is Variable)
1710 throw new PrologException("instantiation_error", "Term to assert is an unbound variable");
1711
1712 Variable.CopyStore copyStore = new Variable.CopyStore();
1713 object TermCopy = makeCopy(Term, copyStore);
1714 object Head, Body;
1715 if (TermCopy is Functor2 && ((Functor2)TermCopy)._name == Atom.RULE)
1716 {
1717 Head = YP.getValue(((Functor2)TermCopy)._arg1);
1718 Body = YP.getValue(((Functor2)TermCopy)._arg2);
1719 if (Head is Variable)
1720 throw new PrologException("instantiation_error", "Head to assert is an unbound variable");
1721 if (Body is Variable)
1722 throw new PrologException("instantiation_error", "Body to assert is an unbound variable");
1723 }
1724 else
1725 {
1726 Head = TermCopy;
1727 Body = Atom.a("true");
1728 }
1729
1730 Atom name = getFunctorName(Head) as Atom;
1731 if (name == null)
1732 // name is a non-Atom, such as a number.
1733 throw new PrologException
1734 (new Functor2("type_error", Atom.a("callable"), Head), "Term to assert is not callable");
1735 object[] args = getFunctorArgs(Head);
1736 if (isSystemPredicate(name, args.Length))
1737 throw new PrologException
1738 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
1739 new Functor2(Atom.SLASH, name, args.Length)),
1740 "Assert cannot modify static predicate " + name + "/" + args.Length);
1741
1742 if (copyStore.getNUniqueVariables() == 0 && Body == Atom.a("true"))
1743 {
1744 // This is a fact with no unbound variables
1745 // assertFact and prependFact use IndexedAnswers, so don't we don't need to compile.
1746 if (prepend)
1747 prependFact(name, args);
1748 else
1749 assertFact(name, args);
1750
1751 return;
1752 }
1753
1754 IClause clause = YPCompiler.compileAnonymousClause(Head, Body, declaringClass);
1755 // We expect clause to be a ClauseHeadAndBody (from Compiler.compileAnonymousFunction)
1756 // so we can set the Head and Body.
1757 if (clause is ClauseHeadAndBody)
1758 ((ClauseHeadAndBody)clause).setHeadAndBody(Head, Body);
1759
1760 // Add the clause to the entry in _predicatesStore.
1761 NameArity nameArity = new NameArity(name, args.Length);
1762 List<IClause> clauses;
1763 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1764 // Create an entry for the nameArity.
1765 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1766
1767 if (prepend)
1768 clauses.Insert(0, clause);
1769 else
1770 clauses.Add(clause);
1771 }
1772
1773 private static bool isSystemPredicate(Atom name, int arity)
1774 {
1775 if (arity == 2 && (name == Atom.a(",") || name == Atom.a(";") || name == Atom.DOT))
1776 return true;
1777 // Use the same mapping to static predicates in YP as the compiler.
1778 foreach (bool l1 in YPCompiler.functorCallYPFunctionName(name, arity, new Variable()))
1779 return true;
1780 // Debug: Do we need to check if name._module is null?
1781 return false;
1782 }
1783
1784 /// <summary>
1785 /// Assert values at the end of the set of facts for the predicate with the
1786 /// name and with arity values.Length.
1787 /// </summary>
1788 /// <param name="name">must be an Atom</param>
1789 /// <param name="values">the array of arguments to the fact predicate.
1790 /// It is an error if an value has an unbound variable.</param>
1791 public static void assertFact(Atom name, object[] values)
1792 {
1793 NameArity nameArity = new NameArity(name, values.Length);
1794 List<IClause> clauses;
1795 IndexedAnswers indexedAnswers;
1796 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1797 {
1798 // Create an IndexedAnswers as the only clause of the predicate.
1799 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1800 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1801 }
1802 else
1803 {
1804 indexedAnswers = null;
1805 if (clauses.Count >= 1)
1806 indexedAnswers = clauses[clauses.Count - 1] as IndexedAnswers;
1807 if (indexedAnswers == null)
1808 // The latest clause is not an IndexedAnswers, so add one.
1809 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1810 }
1811
1812 indexedAnswers.addAnswer(values);
1813 }
1814
1815 /// <summary>
1816 /// Assert values, prepending to the front of the set of facts for the predicate with the
1817 /// name and with arity values.Length.
1818 /// </summary>
1819 /// <param name="name">must be an Atom</param>
1820 /// <param name="values">the array of arguments to the fact predicate.
1821 /// It is an error if an value has an unbound variable.</param>
1822 public static void prependFact(Atom name, object[] values)
1823 {
1824 NameArity nameArity = new NameArity(name, values.Length);
1825 List<IClause> clauses;
1826 IndexedAnswers indexedAnswers;
1827 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1828 {
1829 // Create an IndexedAnswers as the only clause of the predicate.
1830 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1831 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1832 }
1833 else
1834 {
1835 indexedAnswers = null;
1836 if (clauses.Count >= 1)
1837 indexedAnswers = clauses[0] as IndexedAnswers;
1838 if (indexedAnswers == null)
1839 // The first clause is not an IndexedAnswers, so prepend one.
1840 clauses.Insert(0, indexedAnswers = new IndexedAnswers(values.Length));
1841 }
1842
1843 indexedAnswers.prependAnswer(values);
1844 }
1845
1846 /// <summary>
1847 /// Match all clauses of the dynamic predicate with the name and with arity
1848 /// arguments.Length.
1849 /// If the predicate is not defined, return the result of YP.unknownPredicate.
1850 /// </summary>
1851 /// <param name="name">must be an Atom</param>
1852 /// <param name="arguments">an array of arity number of arguments</param>
1853 /// <returns>an iterator which you can use in foreach</returns>
1854 public static IEnumerable<bool> matchDynamic(Atom name, object[] arguments)
1855 {
1856 List<IClause> clauses;
1857 if (!_predicatesStore.TryGetValue(new NameArity(name, arguments.Length), out clauses))
1858 return unknownPredicate(name, arguments.Length,
1859 "Undefined dynamic predicate: " + name + "/" + arguments.Length);
1860
1861 if (clauses.Count == 1)
1862 // Usually there is only one clause, so return it without needing to wrap it in an iterator.
1863 return clauses[0].match(arguments);
1864 else
1865 return matchAllClauses(clauses, arguments);
1866 }
1867
1868 /// <summary>
1869 /// Call match(arguments) for each IClause in clauses. We make this a separate
1870 /// function so that matchDynamic itself does not need to be an iterator object.
1871 /// </summary>
1872 /// <param name="clauses"></param>
1873 /// <param name="arguments"></param>
1874 /// <returns></returns>
1875 private static IEnumerable<bool> matchAllClauses(List<IClause> clauses, object[] arguments)
1876 {
1877 // Debug: If the caller asserts another clause into this same predicate during yield, the iterator
1878 // over clauses will be corrupted. Should we take the time to copy clauses?
1879 foreach (IClause clause in clauses)
1880 {
1881 foreach (bool lastCall in clause.match(arguments))
1882 {
1883 yield return false;
1884 if (lastCall)
1885 // This happens after a cut in a clause.
1886 yield break;
1887 }
1888 }
1889 }
1890
1891 /// <summary>
1892 /// If _prologFlags["unknown"] is fail then return fail(), else if
1893 /// _prologFlags["unknown"] is warning then write the message to YP.write and
1894 /// return fail(), else throw a PrologException for existence_error. .
1895 /// </summary>
1896 /// <param name="name"></param>
1897 /// <param name="arity"></param>
1898 /// <param name="message"></param>
1899 /// <returns></returns>
1900 public static IEnumerable<bool> unknownPredicate(Atom name, int arity, string message)
1901 {
1902 establishPrologFlags();
1903
1904 if (_prologFlags["unknown"] == Atom.a("fail"))
1905 return fail();
1906 else if (_prologFlags["unknown"] == Atom.a("warning"))
1907 {
1908 write(message);
1909 nl();
1910 return fail();
1911 }
1912 else
1913 throw new PrologException
1914 (new Functor2
1915 (Atom.a("existence_error"), Atom.a("procedure"),
1916 new Functor2(Atom.SLASH, name, arity)), message);
1917 }
1918
1919 /// <summary>
1920 /// This is deprecated and just calls matchDynamic. This matches all clauses,
1921 /// not just the ones defined with assertFact.
1922 /// </summary>
1923 /// <param name="name"></param>
1924 /// <param name="arguments"></param>
1925 /// <returns></returns>
1926 public static IEnumerable<bool> matchFact(Atom name, object[] arguments)
1927 {
1928 return matchDynamic(name, arguments);
1929 }
1930
1931 public static IEnumerable<bool> clause(object Head, object Body)
1932 {
1933 Head = getValue(Head);
1934 Body = getValue(Body);
1935 if (Head is Variable)
1936 throw new PrologException("instantiation_error", "Head is an unbound variable");
1937
1938 Atom name = getFunctorName(Head) as Atom;
1939 if (name == null)
1940 // name is a non-Atom, such as a number.
1941 throw new PrologException
1942 (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable");
1943 object[] args = getFunctorArgs(Head);
1944 if (isSystemPredicate(name, args.Length))
1945 throw new PrologException
1946 (new Functor3("permission_error", Atom.a("access"), Atom.a("private_procedure"),
1947 new Functor2(Atom.SLASH, name, args.Length)),
1948 "clause cannot access private predicate " + name + "/" + args.Length);
1949 if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom))
1950 throw new PrologException
1951 (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable");
1952
1953 List<IClause> clauses;
1954 if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses))
1955 yield break;
1956 // The caller can assert another clause into this same predicate during yield, so we have to
1957 // make a copy of the clauses.
1958 foreach (IClause predicateClause in clauses.ToArray())
1959 {
1960 foreach (bool l1 in predicateClause.clause(Head, Body))
1961 yield return false;
1962 }
1963 }
1964
1965 public static IEnumerable<bool> retract(object Term)
1966 {
1967 Term = getValue(Term);
1968 if (Term is Variable)
1969 throw new PrologException("instantiation_error", "Term to retract is an unbound variable");
1970
1971 object Head, Body;
1972 if (Term is Functor2 && ((Functor2)Term)._name == Atom.RULE)
1973 {
1974 Head = YP.getValue(((Functor2)Term)._arg1);
1975 Body = YP.getValue(((Functor2)Term)._arg2);
1976 }
1977 else
1978 {
1979 Head = Term;
1980 Body = Atom.a("true");
1981 }
1982 if (Head is Variable)
1983 throw new PrologException("instantiation_error", "Head is an unbound variable");
1984
1985 Atom name = getFunctorName(Head) as Atom;
1986 if (name == null)
1987 // name is a non-Atom, such as a number.
1988 throw new PrologException
1989 (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable");
1990 object[] args = getFunctorArgs(Head);
1991 if (isSystemPredicate(name, args.Length))
1992 throw new PrologException
1993 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
1994 new Functor2(Atom.SLASH, name, args.Length)),
1995 "clause cannot access private predicate " + name + "/" + args.Length);
1996 if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom))
1997 throw new PrologException
1998 (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable");
1999
2000 List<IClause> clauses;
2001 if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses))
2002 yield break;
2003 // The caller can assert another clause into this same predicate during yield, so we have to
2004 // make a copy of the clauses.
2005 foreach (IClause predicateClause in clauses.ToArray())
2006 {
2007 if (predicateClause is IndexedAnswers)
2008 {
2009 // IndexedAnswers handles its own retract. Even if it removes all of its
2010 // answers, it is OK to leave it empty as one of the elements in clauses.
2011 foreach (bool l1 in ((IndexedAnswers)predicateClause).retract(Head, Body))
2012 yield return false;
2013 }
2014 else
2015 {
2016 foreach (bool l1 in predicateClause.clause(Head, Body))
2017 {
2018 clauses.Remove(predicateClause);
2019 yield return false;
2020 }
2021 }
2022 }
2023 }
2024
2025 /// <summary>
2026 /// This is deprecated for backward compatibility. You should use retractall.
2027 /// </summary>
2028 /// <param name="name">must be an Atom</param>
2029 /// <param name="arguments">an array of arity number of arguments</param>
2030 public static void retractFact(Atom name, object[] arguments)
2031 {
2032 retractall(Functor.make(name, arguments));
2033 }
2034
2035 /// <summary>
2036 /// Retract all dynamic clauses which unify with Head. If this matches all clauses in a predicate,
2037 /// the predicate is still defined. To completely remove the predicate, see abolish.
2038 /// </summary>
2039 /// <param name="Head"></param>
2040 public static void retractall(object Head)
2041 {
2042 object name = YP.getFunctorName(Head);
2043 object[] arguments = getFunctorArgs(Head);
2044 if (!(name is Atom))
2045 return;
2046 NameArity nameArity = new NameArity((Atom)name, arguments.Length);
2047 List<IClause> clauses;
2048 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
2049 // Can't find, so ignore.
2050 return;
2051
2052 foreach (object arg in arguments)
2053 {
2054 if (!YP.var(arg))
2055 throw new InvalidOperationException
2056 ("Until matching retractall is supported, all arguments must be unbound to retract all clauses");
2057 }
2058 // Clear all clauses.
2059 _predicatesStore[nameArity] = new List<IClause>();
2060 }
2061
2062 /// <summary>
2063 /// If NameSlashArity is var, match with all the dynamic predicates using the
2064 /// Name/Artity form.
2065 /// If NameSlashArity is not var, check if the Name/Arity exists as a static or
2066 /// dynamic predicate.
2067 /// </summary>
2068 /// <param name="NameSlashArity"></param>
2069 /// <param name="declaringClass">if not null, used to resolve references to the default
2070 /// module Atom.a("")</param>
2071 /// <returns></returns>
2072 public static IEnumerable<bool> current_predicate(object NameSlashArity, Type declaringClass)
2073 {
2074 NameSlashArity = YP.getValue(NameSlashArity);
2075 // First check if Name and Arity are nonvar so we can do a direct lookup.
2076 if (YP.ground(NameSlashArity))
2077 {
2078 Functor2 NameArityFunctor = NameSlashArity as Functor2;
2079 if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH))
2080 throw new PrologException
2081 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2082 "Must be a name/arity predicate indicator");
2083 object name = YP.getValue(NameArityFunctor._arg1);
2084 object arity = YP.getValue(NameArityFunctor._arg2);
2085 if (name is Variable || arity is Variable)
2086 throw new PrologException
2087 ("instantiation_error", "Predicate indicator name or arity is an unbound variable");
2088 if (!(name is Atom && arity is int))
2089 throw new PrologException
2090 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2091 "Must be a name/arity predicate indicator");
2092 if ((int)arity < 0)
2093 throw new PrologException
2094 (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity),
2095 "Arity may not be less than zero");
2096
2097 if (YPCompiler.isCurrentPredicate((Atom)name, (int)arity, declaringClass))
2098 // The predicate is defined.
2099 yield return false;
2100 }
2101 else
2102 {
2103 foreach (NameArity key in _predicatesStore.Keys)
2104 {
2105 foreach (bool l1 in YP.unify
2106 (new Functor2(Atom.SLASH, key._name, key._arity), NameSlashArity))
2107 yield return false;
2108 }
2109 }
2110 }
2111
2112 /// <summary>
2113 /// Return true if the dynamic predicate store has an entry for the predicate
2114 /// with name and arity.
2115 /// </summary>
2116 /// <param name="name"></param>
2117 /// <param name="arity"></param>
2118 /// <returns></returns>
2119 public static bool isDynamicCurrentPredicate(Atom name, int arity)
2120 {
2121 return _predicatesStore.ContainsKey(new NameArity(name, arity));
2122 }
2123
2124 public static void abolish(object NameSlashArity)
2125 {
2126 NameSlashArity = YP.getValue(NameSlashArity);
2127 if (NameSlashArity is Variable)
2128 throw new PrologException
2129 ("instantiation_error", "Predicate indicator is an unbound variable");
2130 Functor2 NameArityFunctor = NameSlashArity as Functor2;
2131 if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH))
2132 throw new PrologException
2133 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2134 "Must be a name/arity predicate indicator");
2135 object name = YP.getValue(NameArityFunctor._arg1);
2136 object arity = YP.getValue(NameArityFunctor._arg2);
2137 if (name is Variable || arity is Variable)
2138 throw new PrologException
2139 ("instantiation_error", "Predicate indicator name or arity is an unbound variable");
2140 if (!(name is Atom))
2141 throw new PrologException
2142 (new Functor2("type_error", Atom.a("atom"), name),
2143 "Predicate indicator name must be an atom");
2144 if (!(arity is int))
2145 throw new PrologException
2146 (new Functor2("type_error", Atom.a("integer"), arity),
2147 "Predicate indicator arity must be an integer");
2148 if ((int)arity < 0)
2149 throw new PrologException
2150 (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity),
2151 "Arity may not be less than zero");
2152 if ((int)arity > MAX_ARITY)
2153 throw new PrologException
2154 (new Functor1("representation_error", Atom.a("max_arity")),
2155 "Arity may not be greater than " + MAX_ARITY);
2156
2157 if (isSystemPredicate((Atom)name, (int)arity))
2158 throw new PrologException
2159 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
2160 new Functor2(Atom.SLASH, name, arity)),
2161 "Abolish cannot modify static predicate " + name + "/" + arity);
2162 _predicatesStore.Remove(new NameArity((Atom)name, (int)arity));
2163 }
2164
2165 /// <summary>
2166 /// If Goal is a simple predicate, call YP.getFunctorName(Goal) using arguments from
2167 /// YP.getFunctorArgs(Goal). If not found, this throws a PrologException for existence_error.
2168 /// Otherwise, compile the goal as a single clause predicate and invoke it.
2169 /// </summary>
2170 /// <param name="Goal"></param>
2171 /// <param name="declaringClass">if not null, used to resolve references to the default
2172 /// module Atom.a("")</param>
2173 /// <returns></returns>
2174 public static IEnumerable<bool> getIterator(object Goal, Type declaringClass)
2175 {
2176 Atom name;
2177 object[] args;
2178 while (true)
2179 {
2180 Goal = YP.getValue(Goal);
2181 if (Goal is Variable)
2182 throw new PrologException("instantiation_error", "Goal to call is an unbound variable");
2183 name = YP.getFunctorName(Goal) as Atom;
2184 if (name == null)
2185 throw new PrologException
2186 (new Functor2("type_error", Atom.a("callable"), Goal), "Goal to call is not callable");
2187 args = YP.getFunctorArgs(Goal);
2188 if (name == Atom.HAT && args.Length == 2)
2189 // Assume this is called from a bagof operation. Skip the leading qualifiers.
2190 Goal = YP.getValue(((Functor2)Goal)._arg2);
2191 else
2192 break;
2193 }
2194
2195 IEnumerable<bool> simpleIterator = YPCompiler.getSimpleIterator(name, args, declaringClass);
2196 if (simpleIterator != null)
2197 // We don't need to compile since the goal is a simple predicate which we call directly.
2198 return simpleIterator;
2199
2200 // Compile the goal as a clause.
2201 List<Variable> variableSetList = new List<Variable>();
2202 addUniqueVariables(Goal, variableSetList);
2203 Variable[] variableSet = variableSetList.ToArray();
2204
2205 // Use Atom.F since it is ignored.
2206 return YPCompiler.compileAnonymousClause
2207 (Functor.make(Atom.F, variableSet), Goal, declaringClass).match(variableSet);
2208 }
2209
2210 public static void throwException(object Term)
2211 {
2212 throw new PrologException(Term);
2213 }
2214 /// <summary>
2215 /// This must be called by any function that uses YP._prologFlags to make sure
2216 /// the initial defaults are loaded.
2217 /// </summary>
2218 private static void establishPrologFlags()
2219 {
2220 if (_prologFlags.Count > 0)
2221 // Already established.
2222 return;
2223
2224 // List these in the order they appear in the ISO standard.
2225 _prologFlags["bounded"] = Atom.a("true");
2226 _prologFlags["max_integer"] = Int32.MaxValue;
2227 _prologFlags["min_integer"] = Int32.MinValue;
2228 _prologFlags["integer_rounding_function"] = Atom.a("toward_zero");
2229 _prologFlags["char_conversion"] = Atom.a("off");
2230 _prologFlags["debug"] = Atom.a("off");
2231 _prologFlags["max_arity"] = MAX_ARITY;
2232 _prologFlags["unknown"] = Atom.a("error");
2233 _prologFlags["double_quotes"] = Atom.a("codes");
2234 }
2235
2236 public static IEnumerable<bool> current_prolog_flag(object Key, object Value)
2237 {
2238 establishPrologFlags();
2239
2240 Key = YP.getValue(Key);
2241 Value = YP.getValue(Value);
2242
2243 if (Key is Variable)
2244 {
2245 // Bind all key values.
2246 foreach (string key in _prologFlags.Keys)
2247 {
2248 foreach (bool l1 in YP.unify(Key, Atom.a(key)))
2249 {
2250 foreach (bool l2 in YP.unify(Value, _prologFlags[key]))
2251 yield return false;
2252 }
2253 }
2254 }
2255 else
2256 {
2257 if (!(Key is Atom))
2258 throw new PrologException
2259 (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom");
2260 if (!_prologFlags.ContainsKey(((Atom)Key)._name))
2261 throw new PrologException
2262 (new Functor2("domain_error", Atom.a("prolog_flag"), Key),
2263 "Arg 1 Key is not a recognized flag");
2264
2265 foreach (bool l1 in YP.unify(Value, _prologFlags[((Atom)Key)._name]))
2266 yield return false;
2267 }
2268 }
2269
2270 public static void set_prolog_flag(object Key, object Value)
2271 {
2272 establishPrologFlags();
2273
2274 Key = YP.getValue(Key);
2275 Value = YP.getValue(Value);
2276
2277 if (Key is Variable)
2278 throw new PrologException(Atom.a("instantiation_error"),
2279 "Arg 1 Key is an unbound variable");
2280 if (Value is Variable)
2281 throw new PrologException(Atom.a("instantiation_error"),
2282 "Arg 1 Key is an unbound variable");
2283 if (!(Key is Atom))
2284 throw new PrologException
2285 (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom");
2286
2287 string keyName = ((Atom)Key)._name;
2288 if (!_prologFlags.ContainsKey(keyName))
2289 throw new PrologException
2290 (new Functor2("domain_error", Atom.a("prolog_flag"), Key),
2291 "Arg 1 Key " + Key + " is not a recognized flag");
2292
2293 bool valueIsOK = false;
2294 if (keyName == "char_conversion")
2295 valueIsOK = (Value == _prologFlags[keyName]);
2296 else if (keyName == "debug")
2297 valueIsOK = (Value == _prologFlags[keyName]);
2298 else if (keyName == "unknown")
2299 valueIsOK = (Value == Atom.a("fail") || Value == Atom.a("warning") ||
2300 Value == Atom.a("error"));
2301 else if (keyName == "double_quotes")
2302 valueIsOK = (Value == Atom.a("codes") || Value == Atom.a("chars") ||
2303 Value == Atom.a("atom"));
2304 else
2305 throw new PrologException
2306 (new Functor3("permission_error", Atom.a("modify"), Atom.a("flag"), Key),
2307 "May not modify Prolog flag " + Key);
2308
2309 if (!valueIsOK)
2310 throw new PrologException
2311 (new Functor2("domain_error", Atom.a("flag_value"), new Functor2("+", Key, Value)),
2312 "May not set arg 1 Key " + Key + " to arg 2 Value " + Value);
2313
2314 _prologFlags[keyName] = Value;
2315 }
2316 /// <summary>
2317 /// script_event calls hosting script with events as a callback method.
2318 /// </summary>
2319 /// <param name="script_event"></param>
2320 /// <param name="script_params"></param>
2321 /// <returns></returns>
2322 public static IEnumerable<bool> script_event(object script_event, object script_params)
2323 {
2324 // string function = ((Atom)YP.getValue(script_event))._name;
2325 object[] array = ListPair.toArray(script_params);
2326 if (array == null)
2327 yield return false; // return; // YP.fail();
2328 if (array.Length > 1)
2329 {
2330 //m_CmdManager.m_ScriptEngine.m_EventQueManager.AddToScriptQueue
2331 //(localID, itemID, function, array);
2332 // sortArray(array);
2333 }
2334 //return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array));
2335 yield return false;
2336 }
2337
2338 /* Non-prolog-ish functions for inline coding */
2339 public static string regexString(string inData, string inPattern, string presep,string postsep)
2340 {
2341 //string str=cycMessage;
2342 //string strMatch = @"\. \#\$(.*)\)";
2343 string results = "";
2344 for (Match m = Regex.Match(inData,inPattern); m.Success; m=m.NextMatch())
2345 {
2346 //m_log.Debug(m);
2347 results += presep+ m + postsep;
2348 }
2349 return results;
2350 }
2351
2352 public static string cycComm(object msgobj)
2353 {
2354 string cycInputString = msgobj.ToString();
2355 string cycOutputString="";
2356 TcpClient socketForServer;
2357
2358 try
2359 {
2360 socketForServer = new TcpClient("localHost", 3601);
2361 }
2362 catch
2363 {
2364 m_log.Error("Failed to connect to server at localhost:999");
2365 return "";
2366 }
2367
2368 NetworkStream networkStream = socketForServer.GetStream();
2369
2370 System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
2371
2372 System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
2373
2374 try
2375 {
2376 // read the data from the host and display it
2377
2378 {
2379
2380 streamWriter.WriteLine(cycInputString);
2381 streamWriter.Flush();
2382
2383 cycOutputString = streamReader.ReadLine();
2384 m_log.Debug("Cycoutput:" + cycOutputString);
2385 //streamWriter.WriteLine("Client Message");
2386 //m_log.Debug("Client Message");
2387 streamWriter.Flush();
2388 }
2389
2390 }
2391 catch
2392 {
2393 m_log.Error("Exception reading from Server");
2394 return "";
2395 }
2396 // tidy up
2397 networkStream.Close();
2398 return cycOutputString;
2399
2400 }
2401 //public static void throwException(object Term)
2402 //{
2403 // throw new PrologException(Term);
2404 //}
2405 /// <summary>
2406 /// An enumerator that does zero loops.
2407 /// </summary>
2408 private class Fail : IEnumerator<bool>, IEnumerable<bool>
2409 {
2410 public bool MoveNext()
2411 {
2412 return false;
2413 }
2414
2415 public IEnumerator<bool> GetEnumerator()
2416 {
2417 return (IEnumerator<bool>)this;
2418 }
2419
2420 IEnumerator IEnumerable.GetEnumerator()
2421 {
2422 return GetEnumerator();
2423 }
2424
2425 public bool Current
2426 {
2427 get { return true; }
2428 }
2429
2430 object IEnumerator.Current
2431 {
2432 get { return true; }
2433 }
2434
2435 public void Dispose()
2436 {
2437 }
2438
2439 public void Reset()
2440 {
2441 throw new NotImplementedException();
2442 }
2443 }
2444
2445 /// <summary>
2446 /// An enumerator that does one iteration.
2447 /// </summary>
2448 private class Succeed : IEnumerator<bool>, IEnumerable<bool>
2449 {
2450 private bool _didIteration = false;
2451
2452 public bool MoveNext()
2453 {
2454 if (!_didIteration)
2455 {
2456 _didIteration = true;
2457 return true;
2458 }
2459 else
2460 return false;
2461 }
2462
2463 public IEnumerator<bool> GetEnumerator()
2464 {
2465 return (IEnumerator<bool>)this;
2466 }
2467
2468 IEnumerator IEnumerable.GetEnumerator()
2469 {
2470 return GetEnumerator();
2471 }
2472
2473 public bool Current
2474 {
2475 get { return false; }
2476 }
2477
2478 object IEnumerator.Current
2479 {
2480 get { return false; }
2481 }
2482
2483 public void Dispose()
2484 {
2485 }
2486
2487 public void Reset()
2488 {
2489 throw new NotImplementedException();
2490 }
2491 }
2492
2493 /// <summary>
2494 /// An enumerator that repeats forever.
2495 /// </summary>
2496 private class Repeat : IEnumerator<bool>, IEnumerable<bool>
2497 {
2498 public bool MoveNext()
2499 {
2500 return true;
2501 }
2502
2503 public IEnumerator<bool> GetEnumerator()
2504 {
2505 return (IEnumerator<bool>)this;
2506 }
2507
2508 IEnumerator IEnumerable.GetEnumerator()
2509 {
2510 return GetEnumerator();
2511 }
2512
2513 public bool Current
2514 {
2515 get { return false; }
2516 }
2517
2518 object IEnumerator.Current
2519 {
2520 get { return false; }
2521 }
2522
2523 public void Dispose()
2524 {
2525 }
2526
2527 public void Reset()
2528 {
2529 throw new NotImplementedException();
2530 }
2531 }
2532
2533 /// <summary>
2534 /// An enumerator that wraps another enumerator in order to catch a PrologException.
2535 /// </summary>
2536 public class Catch : IEnumerator<bool>, IEnumerable<bool>
2537 {
2538 private IEnumerator<bool> _enumerator;
2539 private PrologException _exception = null;
2540
2541 /// <summary>
2542 /// Call YP.getIterator(Goal, declaringClass) and save the returned iterator.
2543 /// If getIterator throws an exception, save it the same as MoveNext().
2544 /// </summary>
2545 /// <param name="Goal"></param>
2546 /// <param name="declaringClass"></param>
2547 public Catch(object Goal, Type declaringClass)
2548 {
2549 try
2550 {
2551 _enumerator = getIterator(Goal, declaringClass).GetEnumerator();
2552 }
2553 catch (PrologException exception)
2554 {
2555 // MoveNext() will check this.
2556 _exception = exception;
2557 }
2558 }
2559
2560 /// <summary>
2561 /// Call _enumerator.MoveNext(). If it throws a PrologException, set _exception
2562 /// and return false. After this returns false, call unifyExceptionOrThrow.
2563 /// </summary>
2564 /// <returns></returns>
2565 public bool MoveNext()
2566 {
2567 if (_exception != null)
2568 return false;
2569
2570 try
2571 {
2572 return _enumerator.MoveNext();
2573 }
2574 catch (PrologException exception)
2575 {
2576 _exception = exception;
2577 return false;
2578 }
2579 }
2580
2581 /// <summary>
2582 /// Call this after MoveNext() returns false to check for an exception. If
2583 /// MoveNext did not get a PrologException, don't yield.
2584 /// Otherwise, unify the exception with Catcher and yield so the caller can
2585 /// do the handler code. However, if can't unify with Catcher then throw the exception.
2586 /// </summary>
2587 /// <param name="Catcher"></param>
2588 /// <returns></returns>
2589 public IEnumerable<bool> unifyExceptionOrThrow(object Catcher)
2590 {
2591 if (_exception != null)
2592 {
2593 bool didUnify = false;
2594 foreach (bool l1 in YP.unify(_exception._term, Catcher))
2595 {
2596 didUnify = true;
2597 yield return false;
2598 }
2599 if (!didUnify)
2600 throw _exception;
2601 }
2602 }
2603
2604 public IEnumerator<bool> GetEnumerator()
2605 {
2606 return (IEnumerator<bool>)this;
2607 }
2608
2609 IEnumerator IEnumerable.GetEnumerator()
2610 {
2611 return GetEnumerator();
2612 }
2613
2614 public bool Current
2615 {
2616 get { return _enumerator.Current; }
2617 }
2618
2619 object IEnumerator.Current
2620 {
2621 get { return _enumerator.Current; }
2622 }
2623
2624 public void Dispose()
2625 {
2626 if (_enumerator != null)
2627 _enumerator.Dispose();
2628 }
2629
2630 public void Reset()
2631 {
2632 throw new NotImplementedException();
2633 }
2634 }
2635 #pragma warning restore 0168, 0219
2636 /// <summary>
2637 /// A ClauseHeadAndBody is used in Compiler.compileAnonymousFunction as a base class
2638 /// in order to implement YP.IClause. After creating the object, you must call setHeadAndBody.
2639 /// </summary>
2640 public class ClauseHeadAndBody
2641 {
2642 private object _Head;
2643 private object _Body;
2644
2645 public void setHeadAndBody(object Head, object Body)
2646 {
2647 _Head = Head;
2648 _Body = Body;
2649 }
2650
2651 public IEnumerable<bool> clause(object Head, object Body)
2652 {
2653 if (_Head == null || _Body == null)
2654 yield break;
2655
2656 #pragma warning disable 0168, 0219
2657 foreach (bool l1 in YP.unify(Head, _Head))
2658 {
2659 foreach (bool l2 in YP.unify(Body, _Body))
2660 yield return false;
2661 }
2662 #pragma warning restore 0168, 0219
2663 }
2664 }
2665
2666 /// <summary>
2667 /// CodeListReader extends TextReader and overrides Read to read the next code from
2668 /// the CodeList which is a Prolog list of integer character codes.
2669 /// </summary>
2670 public class CodeListReader : TextReader
2671 {
2672 private object _CodeList;
2673
2674 public CodeListReader(object CodeList)
2675 {
2676 _CodeList = YP.getValue(CodeList);
2677 }
2678
2679 /// <summary>
2680 /// If the head of _CodeList is an integer, return it and advance the list. Otherwise,
2681 /// return -1 for end of file.
2682 /// </summary>
2683 /// <returns></returns>
2684 public override int Read()
2685 {
2686 Functor2 CodeListPair = _CodeList as Functor2;
2687 int code;
2688 if (!(CodeListPair != null && CodeListPair._name == Atom.DOT &&
2689 getInt(CodeListPair._arg1, out code)))
2690 {
2691 _CodeList = Atom.NIL;
2692 return -1;
2693 }
2694
2695 // Advance.
2696 _CodeList = YP.getValue(CodeListPair._arg2);
2697 return code;
2698 }
2699 }
2700 }
2701}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs
deleted file mode 100644
index c6a6748..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs
+++ /dev/null
@@ -1,6382 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.IO;
33using System.Collections;
34using System.Collections.Generic;
35using System.Text;
36using System.CodeDom.Compiler;
37using System.Reflection;
38
39namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
40{
41 public class YPCompiler
42 {
43 private class CompilerState
44 {
45 public IndexedAnswers _pred = new IndexedAnswers(4);
46 public Dictionary<YP.NameArity, Atom> _moduleForNameArity = new Dictionary<YP.NameArity, Atom>();
47 public int _gensymCounter;
48 public bool _useFinalCutCode;
49 public Variable _finalCutCode;
50 public bool _codeUsesYield;
51 public Atom _determinism;
52 // a list of '='(Name, Variable)
53 public List<object> _variableNames;
54
55 // Make these static functions that explicitly take the State so Prolog can call it.
56
57 /// <summary>
58 /// Make a new CompilerState and bind it to State.
59 /// </summary>
60 /// <param name="State"></param>
61 /// <returns></returns>
62 public static IEnumerable<bool> make(object State)
63 {
64 return YP.unify(State, new CompilerState());
65 }
66
67 public static void assertPred(object State, object Pred, object Determinism)
68 {
69 State = YP.getValue(State);
70 object functorName = YP.getFunctorName(Pred);
71 object[] functorArgs = YP.getFunctorArgs(Pred);
72 // Debug: Should check if it's already asserted and is the same.
73 ((CompilerState)State)._pred.addAnswer
74 (new object[] { functorName, functorArgs.Length, Pred, YP.getValue(Determinism) });
75 }
76
77 public static void assertModuleForNameArity(object State, object Name, object Arity, object Module)
78 {
79 State = YP.getValue(State);
80 Name = YP.getValue(Name);
81 Arity = YP.getValue(Arity);
82 Module = YP.getValue(Module);
83 // If the Module Atom comes from the parser, it always has null _declaringClass.
84 if (Module is Atom && ((Atom)Module)._module == null && Name is Atom && Arity is int)
85 // Replace a previous entry if it exists.
86 ((CompilerState)State)._moduleForNameArity[new YP.NameArity((Atom)Name, (int)Arity)] =
87 (Atom)Module;
88 }
89
90 public static void startFunction(object State, object Head)
91 {
92 State = YP.getValue(State);
93 ((CompilerState)State)._gensymCounter = 0;
94 ((CompilerState)State)._useFinalCutCode = false;
95 ((CompilerState)State)._finalCutCode = new Variable();
96 ((CompilerState)State)._codeUsesYield = false;
97 if (CompilerState.isDetNoneOut(State, Head))
98 ((CompilerState)State)._determinism = Atom.a("detNoneOut");
99 else if (CompilerState.isSemidetNoneOut(State, Head))
100 ((CompilerState)State)._determinism = Atom.a("semidetNoneOut");
101 else
102 ((CompilerState)State)._determinism = Atom.a("nondet");
103 }
104
105 public static void setCodeUsesYield(object State)
106 {
107 State = YP.getValue(State);
108 ((CompilerState)State)._codeUsesYield = true;
109 }
110
111 public static bool codeUsesYield(object State)
112 {
113 State = YP.getValue(State);
114 return ((CompilerState)State)._codeUsesYield;
115 }
116
117 public static bool determinismEquals(object State, object Term)
118 {
119 State = YP.getValue(State);
120 return YP.termEqual(((CompilerState)State)._determinism, Term);
121 }
122
123 /// <summary>
124 /// Set _variableNames to a new list of (Name = Variable) for each unique variable in rule.
125 /// If the variable is in variableNameSuggestions, use it, otherwise use x1, x2, etc.
126 /// </summary>
127 /// <param name="State"></param>
128 /// <param name="rule"></param>
129 /// <param name="variableNameSuggestions"></param>
130 public static void newVariableNames(object State, object Rule, object VariableNameSuggestions)
131 {
132 State = YP.getValue(State);
133 List<Variable> variablesSet = new List<Variable>();
134 YP.addUniqueVariables(Rule, variablesSet);
135
136 ((CompilerState)State)._variableNames = new List<object>();
137 int xCounter = 0;
138 foreach (Variable variable in variablesSet)
139 ((CompilerState)State)._variableNames.Add
140 (new Functor2(Atom.a("="), makeVariableName(variable, VariableNameSuggestions, ++xCounter),
141 variable));
142 }
143
144 private static object makeVariableName(object variable, object variableNameSuggestions, int xCounter)
145 {
146 // Debug: should require named variables to start with _ or capital. Should
147 // check for duplicates and clashes with keywords.
148 for (object element = YP.getValue(variableNameSuggestions);
149 element is Functor2 && ((Functor2)element)._name == Atom.DOT;
150 element = YP.getValue(((Functor2)element)._arg2))
151 {
152 object suggestionPair = YP.getValue(((Functor2)element)._arg1);
153 if (sameVariable(variable, ((Functor2)suggestionPair)._arg2))
154 {
155 Atom suggestion = (Atom)YP.getValue(((Functor2)suggestionPair)._arg1);
156 if (suggestion.Equals(Atom.a("Atom")))
157 suggestion = Atom.a("Atom_1");
158 if (suggestion.Equals(Atom.a("Variable")))
159 suggestion = Atom.a("Variable_1");
160 if (suggestion.Equals(Atom.a("Functor")))
161 suggestion = Atom.a("Functor_1");
162 return suggestion;
163 }
164 }
165
166 return Atom.a("x" + xCounter);
167 }
168
169 /// <summary>
170 /// Unify Result with the name assigned by CompilerState.newVariableNames in State._variableNames
171 /// for variable.
172 /// </summary>
173 /// <param name="variable">a Variable</param>
174 /// <param name="State"></param>
175 /// <param name="Result">the assigned Name</param>
176 public static IEnumerable<bool> getVariableName(object State, object variable, object Result)
177 {
178 State = YP.getValue(State);
179 foreach (object variableInfo in ((CompilerState)State)._variableNames)
180 {
181 if (variableInfo is Functor2 && ((Functor2)variableInfo)._name.Equals(Atom.a("=")))
182 {
183 if (sameVariable(variable, ((Functor2)variableInfo)._arg2))
184 return YP.unify(Result, ((Functor2)variableInfo)._arg1);
185 }
186 }
187
188 // We set up names for all unique variables, so this should never happen.
189 throw new PrologException(Atom.a("Can't find entry in _variableNames"));
190 }
191
192 public static IEnumerable<bool> variableNamesList(object State, object VariableNamesList)
193 {
194 State = YP.getValue(State);
195 return YP.unify(VariableNamesList, ListPair.make(((CompilerState)State)._variableNames));
196 }
197
198 public static IEnumerable<bool> gensym(object State, object Base, object Symbol)
199 {
200 State = YP.getValue(State);
201 return YP.unify(Symbol, Atom.a(Base.ToString() + ++((CompilerState)State)._gensymCounter));
202 }
203
204 // disable warning on l1, don't see how we can
205 // code this differently
206 #pragma warning disable 0168, 0164, 0162, 0219
207 public static bool isDetNoneOut(object State, object Term)
208 {
209 State = YP.getValue(State);
210 object functorName = YP.getFunctorName(Term);
211 object[] functorArgs = YP.getFunctorArgs(Term);
212
213 Variable pred = new Variable();
214 foreach (bool l1 in ((CompilerState)State)._pred.match
215 (new object[] { functorName, functorArgs.Length, pred, Atom.a("det") }))
216 {
217 if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue())))
218 {
219 return true;
220 }
221 }
222
223 return false;
224 }
225
226 public static bool isSemidetNoneOut(object State, object Term)
227 {
228 State = YP.getValue(State);
229 object functorName = YP.getFunctorName(Term);
230 object[] functorArgs = YP.getFunctorArgs(Term);
231
232 Variable pred = new Variable();
233 foreach (bool l1 in ((CompilerState)State)._pred.match
234 (new object[] { functorName, functorArgs.Length, pred, Atom.a("semidet") }))
235 {
236 if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue())))
237 {
238 return true;
239 }
240 }
241
242 return false;
243 }
244 #pragma warning restore 0168, 0164, 0162, 0219
245
246 /// <summary>
247 /// Return false if any of args is out, otherwise true.
248 /// args is an array of ::(Type,Mode) where Mode is in or out.
249 /// </summary>
250 /// <param name="args"></param>
251 /// <returns></returns>
252 private static bool isNoneOut(object[] args)
253 {
254 foreach (object arg in args)
255 {
256 if (arg is Functor2 && ((Functor2)arg)._name == Atom.a("::") &&
257 ((Functor2)arg)._arg2 == Atom.a("out"))
258 return false;
259 }
260 return true;
261 }
262
263 public static bool nameArityHasModule(object State, object Name, object Arity, object Module)
264 {
265 State = YP.getValue(State);
266 Name = YP.getValue(Name);
267 Arity = YP.getValue(Arity);
268 Module = YP.getValue(Module);
269 if (Name is Atom && Arity is int)
270 {
271 Atom FoundModule;
272 if (!((CompilerState)State)._moduleForNameArity.TryGetValue
273 (new YP.NameArity((Atom)Name, (int)Arity), out FoundModule))
274 return false;
275 return FoundModule == Module;
276 }
277 return false;
278 }
279 }
280
281 // disable warning on l1, don't see how we can
282 // code this differently
283 #pragma warning disable 0168, 0219,0164,0162
284
285 /// <summary>
286 /// Use makeFunctionPseudoCode, convertFunctionCSharp and compileAnonymousFunction
287 /// to return an anonymous YP.IClause for the Head and Body of a rule clause.
288 /// </summary>
289 /// <param name="Head">a prolog term such as new Functor2("test1", X, Y).
290 /// Note that the name of the head is ignored.
291 /// </param>
292 /// <param name="Body">a prolog term such as
293 /// new Functor2(",", new Functor1(Atom.a("test2", Atom.a("")), X),
294 /// new Functor2("=", Y, X)).
295 /// This may not be null. (For a head-only clause, set the Body to Atom.a("true").
296 /// </param>
297 /// <param name="declaringClass">if not null, the code is compiled as a subclass of this class
298 /// to resolve references to the default module Atom.a("")</param>
299 /// <returns>a new YP.IClause object on which you can call match(object[] args) where
300 /// args length is the arity of the Head</returns>
301 public static YP.IClause compileAnonymousClause(object Head, object Body, Type declaringClass)
302 {
303 object[] args = YP.getFunctorArgs(Head);
304 // compileAnonymousFunction wants "function".
305 object Rule = new Functor2(Atom.RULE, Functor.make("function", args), Body);
306 object RuleList = ListPair.make(new Functor2(Atom.F, Rule, Atom.NIL));
307
308 StringWriter functionCode = new StringWriter();
309 Variable SaveOutputStream = new Variable();
310 foreach (bool l1 in YP.current_output(SaveOutputStream))
311 {
312 try
313 {
314 YP.tell(functionCode);
315 Variable PseudoCode = new Variable();
316 foreach (bool l2 in makeFunctionPseudoCode(RuleList, PseudoCode))
317 {
318 if (YP.termEqual(PseudoCode, Atom.a("getDeclaringClass")))
319 // Ignore getDeclaringClass since we have access to the one passed in.
320 continue;
321
322 convertFunctionCSharp(PseudoCode);
323 }
324 YP.told();
325 }
326 finally
327 {
328 // Restore after calling tell.
329 YP.tell(SaveOutputStream.getValue());
330 }
331 }
332 return YPCompiler.compileAnonymousFunction
333 (functionCode.ToString(), args.Length, declaringClass);
334 }
335
336 /// <summary>
337 /// Use CodeDomProvider to compile the functionCode and return a YP.ClauseHeadAndBody
338 /// which implements YP.IClause.
339 /// The function name must be "function" and have nArgs arguments.
340 /// </summary>
341 /// <param name="functionCode">the code for the iterator, such as
342 /// "public static IEnumerable<bool> function() { yield return false; }"
343 /// </param>
344 /// <param name="nArgs">the number of args in the function</param>
345 /// <param name="declaringClass">if not null, then use the functionCode inside a class which
346 /// inherits from contextClass, so that references in functionCode to methods in declaringClass don't
347 /// have to be qualified</param>
348 /// <returns>a new YP.IClause object on which you can call match(object[] args) where
349 /// args length is nArgs</returns>
350 public static YP.IClause compileAnonymousFunction(string functionCode, int nArgs, Type declaringClass)
351 {
352 CompilerParameters parameters = new CompilerParameters();
353 // This gets the location of the System assembly.
354 parameters.ReferencedAssemblies.Add(typeof(System.Int32).Assembly.Location);
355 // This gets the location of this assembly which also has YieldProlog.YP, etc.
356 parameters.ReferencedAssemblies.Add(typeof(YPCompiler).Assembly.Location);
357 if (declaringClass != null)
358 parameters.ReferencedAssemblies.Add(declaringClass.Assembly.Location);
359 parameters.GenerateInMemory = true;
360
361 StringBuilder sourceCode = new StringBuilder();
362 sourceCode.Append(@"
363using System;
364using System.Collections.Generic;
365using OpenSim.Region.ScriptEngine.Shared.YieldProlog;
366
367namespace Temporary {
368 public class Temporary : YP.ClauseHeadAndBody, YP.IClause {");
369 if (declaringClass == null)
370 // We don't extend a class with getDeclaringClass, so define it.
371 sourceCode.Append(@"
372 public class Inner {
373 public static System.Type getDeclaringClass() { return null; }
374");
375 else
376 sourceCode.Append(@"
377 public class Inner : " + declaringClass.FullName + @" {
378");
379 sourceCode.Append(functionCode);
380 // Basically, match applies the args to function.
381 sourceCode.Append(@"
382 }
383 public IEnumerable<bool> match(object[] args) {
384 return Inner.function(");
385 if (nArgs >= 1)
386 sourceCode.Append("args[0]");
387 for (int i = 1; i < nArgs; ++i)
388 sourceCode.Append(", args[" + i + "]");
389 sourceCode.Append(@");
390 }
391 }
392}
393");
394
395 CompilerResults results = CodeDomProvider.CreateProvider
396 ("CSharp").CompileAssemblyFromSource(parameters, sourceCode.ToString());
397 if (results.Errors.Count > 0)
398 throw new Exception("Error evaluating code: " + results.Errors[0]);
399
400 // Return a new Temporary.Temporary object.
401 return (YP.IClause)results.CompiledAssembly.GetType
402 ("Temporary.Temporary").GetConstructor(Type.EmptyTypes).Invoke(null);
403 }
404
405 /// <summary>
406 /// If the functor with name and args can be called directly as determined by
407 /// functorCallFunctionName, then call it and return its iterator. If the predicate is
408 /// dynamic and undefined, or if static and the method cannot be found, return
409 /// the result of YP.unknownPredicate.
410 /// This returns null if the functor has a special form than needs to be compiled
411 /// (including ,/2 and ;/2).
412 /// </summary>
413 /// <param name="name"></param>
414 /// <param name="args"></param>
415 /// <param name="declaringClass">used to resolve references to the default
416 /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
417 /// null, this throws a PrologException for existence_error</param>
418 /// <returns></returns>
419 public static IEnumerable<bool> getSimpleIterator(Atom name, object[] args, Type declaringClass)
420 {
421 CompilerState state = new CompilerState();
422 Variable FunctionName = new Variable();
423 foreach (bool l1 in functorCallFunctionName(state, name, args.Length, FunctionName))
424 {
425 Atom functionNameAtom = ((Atom)FunctionName.getValue());
426 if (functionNameAtom == Atom.NIL)
427 // name is for a dynamic predicate.
428 return YP.matchDynamic(name, args);
429
430 string methodName = functionNameAtom._name;
431 // Set the default for the method to call.
432 Type methodClass = declaringClass;
433
434 bool checkMode = false;
435 if (methodName.StartsWith("YP."))
436 {
437 // Assume we only check mode in calls to standard Prolog predicates in YP.
438 checkMode = true;
439
440 // Use the method in class YP.
441 methodName = methodName.Substring(3);
442 methodClass = typeof(YP);
443 }
444 if (methodName.Contains("."))
445 // We don't support calling inner classes, etc.
446 return null;
447
448 if (methodClass == null)
449 return YP.unknownPredicate
450 (name, args.Length,
451 "Cannot find predicate function for: " + name + "/" + args.Length +
452 " because declaringClass is null. Set declaringClass to the class containing " +
453 methodName);
454 try
455 {
456 if (checkMode)
457 {
458 assertYPPred(state);
459 object functor = Functor.make(name, args);
460 if (CompilerState.isDetNoneOut(state, functor))
461 {
462 methodClass.InvokeMember
463 (methodName, BindingFlags.InvokeMethod, null, null, args);
464 return YP.succeed();
465 }
466 if (CompilerState.isSemidetNoneOut(state, functor))
467 {
468 if ((bool)methodClass.InvokeMember
469 (methodName, BindingFlags.InvokeMethod, null, null, args))
470 return YP.succeed();
471 else
472 return YP.fail();
473 }
474
475 }
476 return (IEnumerable<bool>)methodClass.InvokeMember
477 (methodName, BindingFlags.InvokeMethod, null, null, args);
478 }
479 catch (TargetInvocationException exception)
480 {
481 throw exception.InnerException;
482 }
483 catch (MissingMethodException)
484 {
485 return YP.unknownPredicate
486 (name, args.Length,
487 "Cannot find predicate function " + methodName + " for " + name + "/" + args.Length +
488 " in " + methodClass.FullName);
489 }
490 }
491
492 return null;
493 }
494
495 /// <summary>
496 /// Return true if there is a dynamic or static predicate with name and arity.
497 /// This returns false for built-in predicates.
498 /// </summary>
499 /// <param name="name"></param>
500 /// <param name="arity"></param>
501 /// <param name="declaringClass">used to resolve references to the default
502 /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
503 /// null, return false</param>
504 /// <returns></returns>
505 public static bool isCurrentPredicate(Atom name, int arity, Type declaringClass)
506 {
507 CompilerState state = new CompilerState();
508 Variable FunctionName = new Variable();
509 foreach (bool l1 in functorCallFunctionName(state, name, arity, FunctionName))
510 {
511 Atom functionNameAtom = ((Atom)FunctionName.getValue());
512 if (functionNameAtom == Atom.NIL)
513 // name is for a dynamic predicate.
514 return YP.isDynamicCurrentPredicate(name, arity);
515
516 string methodName = functionNameAtom._name;
517
518 if (methodName.StartsWith("YP."))
519 // current_predicate/1 should fail for built-ins.
520 return false;
521 if (methodName.Contains("."))
522 // We don't support calling inner classes, etc.
523 return false;
524 if (declaringClass == null)
525 return false;
526
527 foreach (MemberInfo member in declaringClass.GetMember(methodName))
528 {
529 MethodInfo method = member as MethodInfo;
530 if (method == null)
531 continue;
532 if ((method.Attributes | MethodAttributes.Static) == 0)
533 // Not a static method.
534 continue;
535 if (method.GetParameters().Length == arity)
536 return true;
537 }
538 }
539
540 return false;
541 }
542
543 // Compiler output follows.
544
545 public class YPInnerClass { }
546 public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
547
548 public static void repeatWrite(object arg1, object N)
549 {
550 {
551 object _Value = arg1;
552 if (YP.termEqual(N, 0))
553 {
554 return;
555 }
556 }
557 {
558 object Value = arg1;
559 Variable NextN = new Variable();
560 YP.write(Value);
561 foreach (bool l2 in YP.unify(NextN, YP.subtract(N, 1)))
562 {
563 repeatWrite(Value, NextN);
564 return;
565 }
566 }
567 }
568
569 public static bool sameVariable(object Variable1, object Variable2)
570 {
571 {
572 if (YP.var(Variable1))
573 {
574 if (YP.var(Variable2))
575 {
576 if (YP.termEqual(Variable1, Variable2))
577 {
578 return true;
579 }
580 }
581 }
582 }
583 return false;
584 }
585
586 public static IEnumerable<bool> makeFunctionPseudoCode(object RuleList, object FunctionCode)
587 {
588 {
589 Variable State = new Variable();
590 foreach (bool l2 in CompilerState.make(State))
591 {
592 assertYPPred(State);
593 processCompilerDirectives(RuleList, State);
594 foreach (bool l3 in YP.unify(FunctionCode, Atom.a("getDeclaringClass")))
595 {
596 yield return false;
597 }
598 foreach (bool l3 in makeFunctionPseudoCode3(RuleList, State, FunctionCode))
599 {
600 yield return false;
601 }
602 }
603 }
604 }
605
606 public static void assertYPPred(object State)
607 {
608 {
609 CompilerState.assertPred(State, Atom.a("nl"), Atom.a("det"));
610 CompilerState.assertPred(State, new Functor1("write", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
611 CompilerState.assertPred(State, new Functor1("put_code", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
612 CompilerState.assertPred(State, new Functor1("see", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
613 CompilerState.assertPred(State, Atom.a("seen"), Atom.a("det"));
614 CompilerState.assertPred(State, new Functor1("tell", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
615 CompilerState.assertPred(State, Atom.a("told"), Atom.a("det"));
616 CompilerState.assertPred(State, new Functor1("throw", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
617 CompilerState.assertPred(State, new Functor1("abolish", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
618 CompilerState.assertPred(State, new Functor1("retractall", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
619 CompilerState.assertPred(State, new Functor2("set_prolog_flag", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
620 CompilerState.assertPred(State, new Functor1("var", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
621 CompilerState.assertPred(State, new Functor1("nonvar", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
622 CompilerState.assertPred(State, new Functor1("atom", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
623 CompilerState.assertPred(State, new Functor1("integer", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
624 CompilerState.assertPred(State, new Functor1("float", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
625 CompilerState.assertPred(State, new Functor1("number", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
626 CompilerState.assertPred(State, new Functor1("atomic", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
627 CompilerState.assertPred(State, new Functor1("compound", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
628 CompilerState.assertPred(State, new Functor2("==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
629 CompilerState.assertPred(State, new Functor2("\\==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
630 CompilerState.assertPred(State, new Functor2("@<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
631 CompilerState.assertPred(State, new Functor2("@=<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
632 CompilerState.assertPred(State, new Functor2("@>", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
633 CompilerState.assertPred(State, new Functor2("@>=", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
634 return;
635 }
636 }
637
638 public static void processCompilerDirectives(object arg1, object arg2)
639 {
640 {
641 object _State = arg2;
642 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
643 {
644 return;
645 }
646 }
647 {
648 object State = arg2;
649 Variable Pred = new Variable();
650 Variable Determinism = new Variable();
651 Variable x3 = new Variable();
652 Variable RestRules = new Variable();
653 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor1("pred", new Functor2("is", Pred, Determinism))), x3), RestRules)))
654 {
655 CompilerState.assertPred(State, Pred, Determinism);
656 processCompilerDirectives(RestRules, State);
657 return;
658 }
659 }
660 {
661 object State = arg2;
662 Variable Module = new Variable();
663 Variable PredicateList = new Variable();
664 Variable x3 = new Variable();
665 Variable RestRules = new Variable();
666 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor2("import", Module, PredicateList)), x3), RestRules)))
667 {
668 foreach (bool l3 in importPredicateList(State, Module, PredicateList))
669 {
670 processCompilerDirectives(RestRules, State);
671 return;
672 }
673 }
674 }
675 {
676 object State = arg2;
677 Variable x1 = new Variable();
678 Variable x2 = new Variable();
679 Variable RestRules = new Variable();
680 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", x1), x2), RestRules)))
681 {
682 processCompilerDirectives(RestRules, State);
683 return;
684 }
685 }
686 {
687 object State = arg2;
688 Variable Head = new Variable();
689 Variable _Body = new Variable();
690 Variable x3 = new Variable();
691 Variable RestRules = new Variable();
692 Variable Name = new Variable();
693 Variable Arity = new Variable();
694 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor2(":-", Head, _Body), x3), RestRules)))
695 {
696 foreach (bool l3 in YP.functor(Head, Name, Arity))
697 {
698 CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(""));
699 processCompilerDirectives(RestRules, State);
700 return;
701 }
702 }
703 }
704 {
705 object State = arg2;
706 Variable Fact = new Variable();
707 Variable x2 = new Variable();
708 Variable RestRules = new Variable();
709 Variable Name = new Variable();
710 Variable Arity = new Variable();
711 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", Fact, x2), RestRules)))
712 {
713 foreach (bool l3 in YP.functor(Fact, Name, Arity))
714 {
715 CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(""));
716 processCompilerDirectives(RestRules, State);
717 return;
718 }
719 }
720 }
721 {
722 object State = arg2;
723 Variable x1 = new Variable();
724 Variable RestRules = new Variable();
725 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestRules)))
726 {
727 processCompilerDirectives(RestRules, State);
728 return;
729 }
730 }
731 }
732
733 public static IEnumerable<bool> importPredicateList(object arg1, object arg2, object arg3)
734 {
735 {
736 object _State = arg1;
737 object _Module = arg2;
738 foreach (bool l2 in YP.unify(arg3, Atom.NIL))
739 {
740 yield return true;
741 yield break;
742 }
743 }
744 {
745 object State = arg1;
746 object Module = arg2;
747 Variable Name = new Variable();
748 Variable Arity = new Variable();
749 Variable Rest = new Variable();
750 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("/", Name, Arity), Rest)))
751 {
752 CompilerState.assertModuleForNameArity(State, Name, Arity, Module);
753 foreach (bool l3 in importPredicateList(State, Module, Rest))
754 {
755 yield return true;
756 yield break;
757 }
758 }
759 }
760 {
761 object State = arg1;
762 object Module = arg2;
763 Variable x3 = new Variable();
764 Variable Rest = new Variable();
765 foreach (bool l2 in YP.unify(arg3, new ListPair(x3, Rest)))
766 {
767 foreach (bool l3 in importPredicateList(State, Module, Rest))
768 {
769 yield return true;
770 yield break;
771 }
772 }
773 }
774 }
775
776 public static IEnumerable<bool> makeFunctionPseudoCode3(object RuleList, object State, object FunctionCode)
777 {
778 {
779 Variable SamePredicateRuleList = new Variable();
780 Variable RestRules = new Variable();
781 foreach (bool l2 in samePredicateRuleList(RuleList, SamePredicateRuleList, RestRules))
782 {
783 if (YP.termNotEqual(SamePredicateRuleList, Atom.NIL))
784 {
785 foreach (bool l4 in compileSamePredicateFunction(SamePredicateRuleList, State, FunctionCode))
786 {
787 yield return false;
788 }
789 foreach (bool l4 in makeFunctionPseudoCode3(RestRules, State, FunctionCode))
790 {
791 yield return false;
792 }
793 }
794 }
795 }
796 }
797
798 public static IEnumerable<bool> compileSamePredicateFunction(object SamePredicateRuleList, object State, object FunctionCode)
799 {
800 {
801 Variable FirstRule = new Variable();
802 Variable x5 = new Variable();
803 Variable x6 = new Variable();
804 Variable x7 = new Variable();
805 Variable Head = new Variable();
806 Variable x9 = new Variable();
807 Variable ArgAssignments = new Variable();
808 Variable Calls = new Variable();
809 Variable Rule = new Variable();
810 Variable VariableNameSuggestions = new Variable();
811 Variable ClauseBag = new Variable();
812 Variable Name = new Variable();
813 Variable ArgsList = new Variable();
814 Variable FunctionArgNames = new Variable();
815 Variable MergedArgName = new Variable();
816 Variable ArgName = new Variable();
817 Variable MergedArgNames = new Variable();
818 Variable FunctionArgs = new Variable();
819 Variable BodyCode = new Variable();
820 Variable ReturnType = new Variable();
821 Variable BodyWithReturn = new Variable();
822 foreach (bool l2 in YP.unify(new ListPair(new Functor2("f", FirstRule, x5), x6), SamePredicateRuleList))
823 {
824 foreach (bool l3 in YP.unify(FirstRule, new Functor1(":-", x7)))
825 {
826 goto cutIf1;
827 }
828 foreach (bool l3 in YP.unify(new Functor2(":-", Head, x9), FirstRule))
829 {
830 CompilerState.startFunction(State, Head);
831 FindallAnswers findallAnswers3 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls));
832 foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList))
833 {
834 foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls))
835 {
836 findallAnswers3.add();
837 }
838 }
839 foreach (bool l4 in findallAnswers3.result(ClauseBag))
840 {
841 foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList)))
842 {
843 foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames))
844 {
845 FindallAnswers findallAnswers4 = new FindallAnswers(MergedArgName);
846 foreach (bool l7 in member(ArgName, FunctionArgNames))
847 {
848 foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName))
849 {
850 findallAnswers4.add();
851 goto cutIf5;
852 }
853 foreach (bool l8 in YP.unify(MergedArgName, ArgName))
854 {
855 findallAnswers4.add();
856 }
857 cutIf5:
858 { }
859 }
860 foreach (bool l7 in findallAnswers4.result(MergedArgNames))
861 {
862 foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs))
863 {
864 foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode))
865 {
866 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
867 {
868 foreach (bool l11 in YP.unify(ReturnType, Atom.a("void")))
869 {
870 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
871 {
872 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
873 {
874 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
875 {
876 yield return false;
877 }
878 }
879 goto cutIf7;
880 }
881 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
882 {
883 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
884 {
885 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
886 {
887 yield return false;
888 }
889 }
890 goto cutIf8;
891 }
892 if (CompilerState.codeUsesYield(State))
893 {
894 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
895 {
896 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
897 {
898 yield return false;
899 }
900 }
901 goto cutIf9;
902 }
903 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
904 {
905 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
906 {
907 yield return false;
908 }
909 }
910 cutIf9:
911 cutIf8:
912 cutIf7:
913 { }
914 }
915 goto cutIf6;
916 }
917 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
918 {
919 foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool")))
920 {
921 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
922 {
923 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
924 {
925 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
926 {
927 yield return false;
928 }
929 }
930 goto cutIf11;
931 }
932 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
933 {
934 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
935 {
936 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
937 {
938 yield return false;
939 }
940 }
941 goto cutIf12;
942 }
943 if (CompilerState.codeUsesYield(State))
944 {
945 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
946 {
947 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
948 {
949 yield return false;
950 }
951 }
952 goto cutIf13;
953 }
954 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
955 {
956 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
957 {
958 yield return false;
959 }
960 }
961 cutIf13:
962 cutIf12:
963 cutIf11:
964 { }
965 }
966 goto cutIf10;
967 }
968 foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable<bool>")))
969 {
970 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
971 {
972 foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
973 {
974 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
975 {
976 yield return false;
977 }
978 }
979 goto cutIf14;
980 }
981 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
982 {
983 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
984 {
985 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
986 {
987 yield return false;
988 }
989 }
990 goto cutIf15;
991 }
992 if (CompilerState.codeUsesYield(State))
993 {
994 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
995 {
996 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
997 {
998 yield return false;
999 }
1000 }
1001 goto cutIf16;
1002 }
1003 foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1004 {
1005 foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1006 {
1007 yield return false;
1008 }
1009 }
1010 cutIf16:
1011 cutIf15:
1012 cutIf14:
1013 { }
1014 }
1015 cutIf10:
1016 cutIf6:
1017 { }
1018 }
1019 }
1020 }
1021 }
1022 }
1023 }
1024 goto cutIf2;
1025 }
1026 foreach (bool l3 in YP.unify(Head, FirstRule))
1027 {
1028 CompilerState.startFunction(State, Head);
1029 FindallAnswers findallAnswers17 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls));
1030 foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList))
1031 {
1032 foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls))
1033 {
1034 findallAnswers17.add();
1035 }
1036 }
1037 foreach (bool l4 in findallAnswers17.result(ClauseBag))
1038 {
1039 foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList)))
1040 {
1041 foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames))
1042 {
1043 FindallAnswers findallAnswers18 = new FindallAnswers(MergedArgName);
1044 foreach (bool l7 in member(ArgName, FunctionArgNames))
1045 {
1046 foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName))
1047 {
1048 findallAnswers18.add();
1049 goto cutIf19;
1050 }
1051 foreach (bool l8 in YP.unify(MergedArgName, ArgName))
1052 {
1053 findallAnswers18.add();
1054 }
1055 cutIf19:
1056 { }
1057 }
1058 foreach (bool l7 in findallAnswers18.result(MergedArgNames))
1059 {
1060 foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs))
1061 {
1062 foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode))
1063 {
1064 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1065 {
1066 foreach (bool l11 in YP.unify(ReturnType, Atom.a("void")))
1067 {
1068 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1069 {
1070 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1071 {
1072 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1073 {
1074 yield return false;
1075 }
1076 }
1077 goto cutIf21;
1078 }
1079 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1080 {
1081 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1082 {
1083 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1084 {
1085 yield return false;
1086 }
1087 }
1088 goto cutIf22;
1089 }
1090 if (CompilerState.codeUsesYield(State))
1091 {
1092 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1093 {
1094 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1095 {
1096 yield return false;
1097 }
1098 }
1099 goto cutIf23;
1100 }
1101 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1102 {
1103 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1104 {
1105 yield return false;
1106 }
1107 }
1108 cutIf23:
1109 cutIf22:
1110 cutIf21:
1111 { }
1112 }
1113 goto cutIf20;
1114 }
1115 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1116 {
1117 foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool")))
1118 {
1119 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1120 {
1121 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1122 {
1123 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1124 {
1125 yield return false;
1126 }
1127 }
1128 goto cutIf25;
1129 }
1130 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1131 {
1132 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1133 {
1134 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1135 {
1136 yield return false;
1137 }
1138 }
1139 goto cutIf26;
1140 }
1141 if (CompilerState.codeUsesYield(State))
1142 {
1143 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1144 {
1145 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1146 {
1147 yield return false;
1148 }
1149 }
1150 goto cutIf27;
1151 }
1152 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1153 {
1154 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1155 {
1156 yield return false;
1157 }
1158 }
1159 cutIf27:
1160 cutIf26:
1161 cutIf25:
1162 { }
1163 }
1164 goto cutIf24;
1165 }
1166 foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable<bool>")))
1167 {
1168 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1169 {
1170 foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1171 {
1172 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1173 {
1174 yield return false;
1175 }
1176 }
1177 goto cutIf28;
1178 }
1179 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1180 {
1181 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
1182 {
1183 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1184 {
1185 yield return false;
1186 }
1187 }
1188 goto cutIf29;
1189 }
1190 if (CompilerState.codeUsesYield(State))
1191 {
1192 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
1193 {
1194 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1195 {
1196 yield return false;
1197 }
1198 }
1199 goto cutIf30;
1200 }
1201 foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1202 {
1203 foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1204 {
1205 yield return false;
1206 }
1207 }
1208 cutIf30:
1209 cutIf29:
1210 cutIf28:
1211 { }
1212 }
1213 cutIf24:
1214 cutIf20:
1215 { }
1216 }
1217 }
1218 }
1219 }
1220 }
1221 }
1222 }
1223 cutIf2:
1224 cutIf1:
1225 { }
1226 }
1227 }
1228 }
1229
1230 public static IEnumerable<bool> samePredicateRuleList(object arg1, object arg2, object arg3)
1231 {
1232 {
1233 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1234 {
1235 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1236 {
1237 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1238 {
1239 yield return true;
1240 yield break;
1241 }
1242 }
1243 }
1244 }
1245 {
1246 Variable First = new Variable();
1247 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Atom.NIL)))
1248 {
1249 foreach (bool l3 in YP.unify(arg2, new ListPair(First, Atom.NIL)))
1250 {
1251 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1252 {
1253 yield return true;
1254 yield break;
1255 }
1256 }
1257 }
1258 }
1259 {
1260 object SamePredicateRuleList = arg2;
1261 object RestRules = arg3;
1262 Variable First = new Variable();
1263 Variable Rest = new Variable();
1264 Variable FirstRule = new Variable();
1265 Variable x6 = new Variable();
1266 Variable SecondRule = new Variable();
1267 Variable x8 = new Variable();
1268 Variable x9 = new Variable();
1269 Variable FirstHead = new Variable();
1270 Variable x11 = new Variable();
1271 Variable SecondHead = new Variable();
1272 Variable x13 = new Variable();
1273 Variable Name = new Variable();
1274 Variable Arity = new Variable();
1275 Variable RestSamePredicates = new Variable();
1276 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
1277 {
1278 foreach (bool l3 in YP.unify(new Functor2("f", FirstRule, x6), First))
1279 {
1280 foreach (bool l4 in YP.unify(new ListPair(new Functor2("f", SecondRule, x8), x9), Rest))
1281 {
1282 foreach (bool l5 in YP.unify(new Functor2(":-", FirstHead, x11), FirstRule))
1283 {
1284 foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule))
1285 {
1286 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1287 {
1288 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1289 {
1290 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1291 {
1292 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1293 {
1294 yield return true;
1295 yield break;
1296 }
1297 }
1298 goto cutIf3;
1299 }
1300 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1301 {
1302 foreach (bool l9 in YP.unify(RestRules, Rest))
1303 {
1304 yield return true;
1305 yield break;
1306 }
1307 }
1308 cutIf3:
1309 { }
1310 }
1311 goto cutIf2;
1312 }
1313 foreach (bool l6 in YP.unify(SecondHead, SecondRule))
1314 {
1315 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1316 {
1317 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1318 {
1319 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1320 {
1321 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1322 {
1323 yield return true;
1324 yield break;
1325 }
1326 }
1327 goto cutIf4;
1328 }
1329 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1330 {
1331 foreach (bool l9 in YP.unify(RestRules, Rest))
1332 {
1333 yield return true;
1334 yield break;
1335 }
1336 }
1337 cutIf4:
1338 { }
1339 }
1340 }
1341 cutIf2:
1342 goto cutIf1;
1343 }
1344 foreach (bool l5 in YP.unify(FirstHead, FirstRule))
1345 {
1346 foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule))
1347 {
1348 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1349 {
1350 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1351 {
1352 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1353 {
1354 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1355 {
1356 yield return true;
1357 yield break;
1358 }
1359 }
1360 goto cutIf6;
1361 }
1362 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1363 {
1364 foreach (bool l9 in YP.unify(RestRules, Rest))
1365 {
1366 yield return true;
1367 yield break;
1368 }
1369 }
1370 cutIf6:
1371 { }
1372 }
1373 goto cutIf5;
1374 }
1375 foreach (bool l6 in YP.unify(SecondHead, SecondRule))
1376 {
1377 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1378 {
1379 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1380 {
1381 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1382 {
1383 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1384 {
1385 yield return true;
1386 yield break;
1387 }
1388 }
1389 goto cutIf7;
1390 }
1391 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1392 {
1393 foreach (bool l9 in YP.unify(RestRules, Rest))
1394 {
1395 yield return true;
1396 yield break;
1397 }
1398 }
1399 cutIf7:
1400 { }
1401 }
1402 }
1403 cutIf5:
1404 { }
1405 }
1406 cutIf1:
1407 { }
1408 }
1409 }
1410 }
1411 }
1412 }
1413
1414 public static IEnumerable<bool> maplist_compileClause(object arg1, object arg2, object arg3)
1415 {
1416 {
1417 object _MergedArgNames = arg2;
1418 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1419 {
1420 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
1421 {
1422 yield return true;
1423 yield break;
1424 }
1425 }
1426 }
1427 {
1428 object MergedArgNames = arg2;
1429 Variable ArgAssignments = new Variable();
1430 Variable Calls = new Variable();
1431 Variable Rest = new Variable();
1432 Variable ClauseCode = new Variable();
1433 Variable RestResults = new Variable();
1434 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", ArgAssignments, Calls), Rest)))
1435 {
1436 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("blockScope", ClauseCode), RestResults)))
1437 {
1438 foreach (bool l4 in prependArgAssignments(ArgAssignments, Calls, MergedArgNames, ClauseCode))
1439 {
1440 foreach (bool l5 in maplist_compileClause(Rest, MergedArgNames, RestResults))
1441 {
1442 yield return true;
1443 yield break;
1444 }
1445 }
1446 }
1447 }
1448 }
1449 }
1450
1451 public static IEnumerable<bool> prependArgAssignments(object arg1, object arg2, object arg3, object arg4)
1452 {
1453 {
1454 object _MergedArgNames = arg3;
1455 Variable In = new Variable();
1456 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1457 {
1458 foreach (bool l3 in YP.unify(arg2, In))
1459 {
1460 foreach (bool l4 in YP.unify(arg4, In))
1461 {
1462 yield return true;
1463 yield break;
1464 }
1465 }
1466 }
1467 }
1468 {
1469 object In = arg2;
1470 object MergedArgNames = arg3;
1471 object ClauseCode = arg4;
1472 Variable VariableName = new Variable();
1473 Variable ArgName = new Variable();
1474 Variable RestArgAssignments = new Variable();
1475 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", VariableName, ArgName), RestArgAssignments)))
1476 {
1477 foreach (bool l3 in member(VariableName, MergedArgNames))
1478 {
1479 foreach (bool l4 in prependArgAssignments(RestArgAssignments, In, MergedArgNames, ClauseCode))
1480 {
1481 yield return true;
1482 yield break;
1483 }
1484 goto cutIf1;
1485 }
1486 foreach (bool l3 in prependArgAssignments(RestArgAssignments, new ListPair(new Functor3("declare", Atom.a("object"), VariableName, new Functor1("var", ArgName)), In), MergedArgNames, ClauseCode))
1487 {
1488 yield return true;
1489 yield break;
1490 }
1491 cutIf1:
1492 { }
1493 }
1494 }
1495 }
1496
1497 public static IEnumerable<bool> argAssignedAll(object arg1, object arg2, object VariableName)
1498 {
1499 {
1500 object _ArgName = arg1;
1501 foreach (bool l2 in YP.unify(arg2, Atom.NIL))
1502 {
1503 if (YP.nonvar(VariableName))
1504 {
1505 yield return true;
1506 yield break;
1507 }
1508 }
1509 }
1510 {
1511 object ArgName = arg1;
1512 Variable ArgAssignments = new Variable();
1513 Variable _Calls = new Variable();
1514 Variable RestClauseBag = new Variable();
1515 foreach (bool l2 in YP.unify(arg2, new ListPair(new Functor2("f", ArgAssignments, _Calls), RestClauseBag)))
1516 {
1517 foreach (bool l3 in member(new Functor2("f", VariableName, ArgName), ArgAssignments))
1518 {
1519 foreach (bool l4 in argAssignedAll(ArgName, RestClauseBag, VariableName))
1520 {
1521 yield return false;
1522 }
1523 }
1524 }
1525 }
1526 }
1527
1528 public static IEnumerable<bool> maplist_arg(object arg1, object arg2)
1529 {
1530 {
1531 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1532 {
1533 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1534 {
1535 yield return true;
1536 yield break;
1537 }
1538 }
1539 }
1540 {
1541 Variable First = new Variable();
1542 Variable Rest = new Variable();
1543 Variable RestResults = new Variable();
1544 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
1545 {
1546 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("arg", First), RestResults)))
1547 {
1548 foreach (bool l4 in maplist_arg(Rest, RestResults))
1549 {
1550 yield return true;
1551 yield break;
1552 }
1553 }
1554 }
1555 }
1556 }
1557
1558 public static IEnumerable<bool> getFunctionArgNames(object arg1, object arg2, object arg3)
1559 {
1560 {
1561 object _StartArgNumber = arg2;
1562 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1563 {
1564 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
1565 {
1566 yield return true;
1567 yield break;
1568 }
1569 }
1570 }
1571 {
1572 object StartArgNumber = arg2;
1573 Variable x1 = new Variable();
1574 Variable Rest = new Variable();
1575 Variable ArgName = new Variable();
1576 Variable RestFunctionArgs = new Variable();
1577 Variable NumberCodes = new Variable();
1578 Variable NumberAtom = new Variable();
1579 Variable NextArgNumber = new Variable();
1580 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Rest)))
1581 {
1582 foreach (bool l3 in YP.unify(arg3, new ListPair(ArgName, RestFunctionArgs)))
1583 {
1584 foreach (bool l4 in YP.number_codes(StartArgNumber, NumberCodes))
1585 {
1586 foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes))
1587 {
1588 foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1589 {
1590 foreach (bool l7 in YP.unify(NextArgNumber, YP.add(StartArgNumber, 1)))
1591 {
1592 foreach (bool l8 in getFunctionArgNames(Rest, NextArgNumber, RestFunctionArgs))
1593 {
1594 yield return true;
1595 yield break;
1596 }
1597 }
1598 }
1599 }
1600 }
1601 }
1602 }
1603 }
1604 }
1605
1606 public static IEnumerable<bool> compileBodyWithHeadBindings(object Rule, object VariableNameSuggestions, object State, object ArgAssignments, object Calls)
1607 {
1608 {
1609 Variable Head = new Variable();
1610 Variable Body = new Variable();
1611 Variable x8 = new Variable();
1612 Variable HeadArgs = new Variable();
1613 Variable CompiledHeadArgs = new Variable();
1614 Variable BodyCode = new Variable();
1615 Variable VariableNamesList = new Variable();
1616 Variable ArgUnifications = new Variable();
1617 foreach (bool l2 in YP.unify(new Functor2(":-", Head, Body), Rule))
1618 {
1619 CompilerState.newVariableNames(State, Rule, VariableNameSuggestions);
1620 foreach (bool l3 in YP.univ(Head, new ListPair(x8, HeadArgs)))
1621 {
1622 foreach (bool l4 in maplist_compileTerm(HeadArgs, State, CompiledHeadArgs))
1623 {
1624 foreach (bool l5 in compileRuleBody(Body, State, BodyCode))
1625 {
1626 foreach (bool l6 in CompilerState.variableNamesList(State, VariableNamesList))
1627 {
1628 foreach (bool l7 in compileArgUnifications(HeadArgs, CompiledHeadArgs, 1, HeadArgs, BodyCode, ArgUnifications))
1629 {
1630 foreach (bool l8 in compileDeclarations(VariableNamesList, HeadArgs, Atom.NIL, ArgAssignments, ArgUnifications, Calls))
1631 {
1632 yield return true;
1633 yield break;
1634 }
1635 }
1636 }
1637 }
1638 }
1639 }
1640 }
1641 }
1642 {
1643 foreach (bool l2 in compileBodyWithHeadBindings(new Functor2(":-", Rule, Atom.a("true")), VariableNameSuggestions, State, ArgAssignments, Calls))
1644 {
1645 yield return true;
1646 yield break;
1647 }
1648 }
1649 }
1650
1651 public static IEnumerable<bool> compileArgUnifications(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1652 {
1653 {
1654 object x1 = arg2;
1655 object x2 = arg3;
1656 object x3 = arg4;
1657 Variable BodyCode = new Variable();
1658 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1659 {
1660 foreach (bool l3 in YP.unify(arg5, BodyCode))
1661 {
1662 foreach (bool l4 in YP.unify(arg6, BodyCode))
1663 {
1664 yield return true;
1665 yield break;
1666 }
1667 }
1668 }
1669 }
1670 {
1671 object Index = arg3;
1672 object AllHeadArgs = arg4;
1673 object BodyCode = arg5;
1674 object ArgUnifications = arg6;
1675 Variable HeadArg = new Variable();
1676 Variable RestHeadArgs = new Variable();
1677 Variable x3 = new Variable();
1678 Variable RestCompiledHeadArgs = new Variable();
1679 Variable _ArgIndex1 = new Variable();
1680 Variable NextIndex = new Variable();
1681 foreach (bool l2 in YP.unify(arg1, new ListPair(HeadArg, RestHeadArgs)))
1682 {
1683 foreach (bool l3 in YP.unify(arg2, new ListPair(x3, RestCompiledHeadArgs)))
1684 {
1685 foreach (bool l4 in getVariableArgIndex1(HeadArg, AllHeadArgs, _ArgIndex1))
1686 {
1687 foreach (bool l5 in YP.unify(NextIndex, YP.add(Index, 1)))
1688 {
1689 foreach (bool l6 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, ArgUnifications))
1690 {
1691 yield return true;
1692 yield break;
1693 }
1694 }
1695 }
1696 }
1697 }
1698 }
1699 {
1700 object Index = arg3;
1701 object AllHeadArgs = arg4;
1702 object BodyCode = arg5;
1703 Variable _HeadArg = new Variable();
1704 Variable RestHeadArgs = new Variable();
1705 Variable CompiledHeadArg = new Variable();
1706 Variable RestCompiledHeadArgs = new Variable();
1707 Variable ArgName = new Variable();
1708 Variable RestArgUnifications = new Variable();
1709 Variable NumberCodes = new Variable();
1710 Variable NumberAtom = new Variable();
1711 Variable NextIndex = new Variable();
1712 foreach (bool l2 in YP.unify(arg1, new ListPair(_HeadArg, RestHeadArgs)))
1713 {
1714 foreach (bool l3 in YP.unify(arg2, new ListPair(CompiledHeadArg, RestCompiledHeadArgs)))
1715 {
1716 foreach (bool l4 in YP.unify(arg6, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(new Functor1("var", ArgName), new ListPair(CompiledHeadArg, Atom.NIL))), RestArgUnifications), Atom.NIL)))
1717 {
1718 foreach (bool l5 in YP.number_codes(Index, NumberCodes))
1719 {
1720 foreach (bool l6 in YP.atom_codes(NumberAtom, NumberCodes))
1721 {
1722 foreach (bool l7 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1723 {
1724 foreach (bool l8 in YP.unify(NextIndex, YP.add(Index, 1)))
1725 {
1726 foreach (bool l9 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, RestArgUnifications))
1727 {
1728 yield return true;
1729 yield break;
1730 }
1731 }
1732 }
1733 }
1734 }
1735 }
1736 }
1737 }
1738 }
1739 }
1740
1741 public static IEnumerable<bool> compileDeclarations(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1742 {
1743 {
1744 object _HeadArgs = arg2;
1745 Variable ArgAssignmentsIn = new Variable();
1746 Variable DeclarationsIn = new Variable();
1747 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1748 {
1749 foreach (bool l3 in YP.unify(arg3, ArgAssignmentsIn))
1750 {
1751 foreach (bool l4 in YP.unify(arg4, ArgAssignmentsIn))
1752 {
1753 foreach (bool l5 in YP.unify(arg5, DeclarationsIn))
1754 {
1755 foreach (bool l6 in YP.unify(arg6, DeclarationsIn))
1756 {
1757 yield return true;
1758 yield break;
1759 }
1760 }
1761 }
1762 }
1763 }
1764 }
1765 {
1766 object HeadArgs = arg2;
1767 object ArgAssignmentsIn = arg3;
1768 object ArgAssignmentsOut = arg4;
1769 object DeclarationsIn = arg5;
1770 object DeclarationsOut = arg6;
1771 Variable VariableName = new Variable();
1772 Variable Var = new Variable();
1773 Variable RestVariableNames = new Variable();
1774 Variable ArgIndex1 = new Variable();
1775 Variable NumberCodes = new Variable();
1776 Variable NumberAtom = new Variable();
1777 Variable ArgName = new Variable();
1778 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, Var), RestVariableNames)))
1779 {
1780 foreach (bool l3 in getVariableArgIndex1(Var, HeadArgs, ArgIndex1))
1781 {
1782 foreach (bool l4 in YP.number_codes(ArgIndex1, NumberCodes))
1783 {
1784 foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes))
1785 {
1786 foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1787 {
1788 foreach (bool l7 in compileDeclarations(RestVariableNames, HeadArgs, new ListPair(new Functor2("f", VariableName, ArgName), ArgAssignmentsIn), ArgAssignmentsOut, DeclarationsIn, DeclarationsOut))
1789 {
1790 yield return true;
1791 yield break;
1792 }
1793 }
1794 }
1795 }
1796 }
1797 }
1798 }
1799 {
1800 object HeadArgs = arg2;
1801 object ArgAssignmentsIn = arg3;
1802 object ArgAssignmentsOut = arg4;
1803 object DeclarationsIn = arg5;
1804 Variable VariableName = new Variable();
1805 Variable _Var = new Variable();
1806 Variable RestVariableNames = new Variable();
1807 Variable DeclarationsOut = new Variable();
1808 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, _Var), RestVariableNames)))
1809 {
1810 foreach (bool l3 in YP.unify(arg6, new ListPair(new Functor3("declare", Atom.a("Variable"), VariableName, new Functor2("new", Atom.a("Variable"), Atom.NIL)), DeclarationsOut)))
1811 {
1812 foreach (bool l4 in compileDeclarations(RestVariableNames, HeadArgs, ArgAssignmentsIn, ArgAssignmentsOut, DeclarationsIn, DeclarationsOut))
1813 {
1814 yield return true;
1815 yield break;
1816 }
1817 }
1818 }
1819 }
1820 }
1821
1822 public static IEnumerable<bool> getVariableArgIndex1(object Var, object arg2, object arg3)
1823 {
1824 {
1825 Variable FirstHeadArgs = new Variable();
1826 Variable RestHeadArgs = new Variable();
1827 Variable x4 = new Variable();
1828 foreach (bool l2 in YP.unify(arg2, new ListPair(FirstHeadArgs, RestHeadArgs)))
1829 {
1830 foreach (bool l3 in YP.unify(arg3, 1))
1831 {
1832 if (sameVariable(Var, FirstHeadArgs))
1833 {
1834 foreach (bool l5 in getVariableArgIndex1(Var, RestHeadArgs, x4))
1835 {
1836 goto cutIf1;
1837 }
1838 yield return false;
1839 cutIf1:
1840 yield break;
1841 }
1842 }
1843 }
1844 }
1845 {
1846 object Index = arg3;
1847 Variable x2 = new Variable();
1848 Variable RestHeadArgs = new Variable();
1849 Variable RestIndex = new Variable();
1850 foreach (bool l2 in YP.unify(arg2, new ListPair(x2, RestHeadArgs)))
1851 {
1852 foreach (bool l3 in getVariableArgIndex1(Var, RestHeadArgs, RestIndex))
1853 {
1854 foreach (bool l4 in YP.unify(Index, YP.add(1, RestIndex)))
1855 {
1856 yield return true;
1857 yield break;
1858 }
1859 }
1860 }
1861 }
1862 }
1863
1864 public static IEnumerable<bool> compileRuleBody(object arg1, object arg2, object arg3)
1865 {
1866 {
1867 object A = arg1;
1868 object State = arg2;
1869 object PseudoCode = arg3;
1870 if (YP.var(A))
1871 {
1872 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("call", A), Atom.a("true")), State, PseudoCode))
1873 {
1874 yield return true;
1875 yield break;
1876 }
1877 }
1878 }
1879 {
1880 object State = arg2;
1881 object PseudoCode = arg3;
1882 Variable A = new Variable();
1883 Variable B = new Variable();
1884 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
1885 {
1886 if (YP.var(A))
1887 {
1888 foreach (bool l4 in compileRuleBody(new Functor2(",", new Functor1("call", A), B), State, PseudoCode))
1889 {
1890 yield return true;
1891 yield break;
1892 }
1893 }
1894 }
1895 }
1896 {
1897 object State = arg2;
1898 object PseudoCode = arg3;
1899 Variable A = new Variable();
1900 Variable B = new Variable();
1901 Variable ACode = new Variable();
1902 Variable BCode = new Variable();
1903 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
1904 {
1905 foreach (bool l3 in compileFunctorCall(A, State, ACode))
1906 {
1907 if (CompilerState.isDetNoneOut(State, A))
1908 {
1909 foreach (bool l5 in compileRuleBody(B, State, BCode))
1910 {
1911 foreach (bool l6 in YP.unify(PseudoCode, new ListPair(ACode, BCode)))
1912 {
1913 yield return true;
1914 yield break;
1915 }
1916 }
1917 }
1918 if (CompilerState.isSemidetNoneOut(State, A))
1919 {
1920 foreach (bool l5 in compileRuleBody(B, State, BCode))
1921 {
1922 foreach (bool l6 in YP.unify(PseudoCode, new ListPair(new Functor2("if", ACode, BCode), Atom.NIL)))
1923 {
1924 yield return true;
1925 yield break;
1926 }
1927 }
1928 }
1929 foreach (bool l4 in compileRuleBody(B, State, BCode))
1930 {
1931 foreach (bool l5 in YP.unify(PseudoCode, new ListPair(new Functor2("foreach", ACode, BCode), Atom.NIL)))
1932 {
1933 yield return true;
1934 yield break;
1935 }
1936 }
1937 }
1938 }
1939 }
1940 {
1941 object State = arg2;
1942 object PseudoCode = arg3;
1943 Variable A = new Variable();
1944 Variable T = new Variable();
1945 Variable B = new Variable();
1946 Variable C = new Variable();
1947 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", new Functor2("->", A, T), B), C)))
1948 {
1949 foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2("->", A, new Functor2(",", T, C)), new Functor2(",", B, C)), State, PseudoCode))
1950 {
1951 yield return true;
1952 yield break;
1953 }
1954 }
1955 }
1956 {
1957 object State = arg2;
1958 object PseudoCode = arg3;
1959 Variable A = new Variable();
1960 Variable B = new Variable();
1961 Variable C = new Variable();
1962 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", A, B), C)))
1963 {
1964 foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2(",", A, C), new Functor2(",", B, C)), State, PseudoCode))
1965 {
1966 yield return true;
1967 yield break;
1968 }
1969 }
1970 }
1971 {
1972 object State = arg2;
1973 Variable A = new Variable();
1974 Variable B = new Variable();
1975 Variable ACode = new Variable();
1976 Variable BCode = new Variable();
1977 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B)))
1978 {
1979 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor1("not", ACode), BCode), Atom.NIL)))
1980 {
1981 if (CompilerState.isSemidetNoneOut(State, A))
1982 {
1983 foreach (bool l5 in compileFunctorCall(A, State, ACode))
1984 {
1985 foreach (bool l6 in compileRuleBody(B, State, BCode))
1986 {
1987 yield return true;
1988 yield break;
1989 }
1990 }
1991 }
1992 }
1993 }
1994 }
1995 {
1996 object State = arg2;
1997 object PseudoCode = arg3;
1998 Variable A = new Variable();
1999 Variable B = new Variable();
2000 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B)))
2001 {
2002 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("fail")), Atom.a("true")), B), State, PseudoCode))
2003 {
2004 yield return true;
2005 yield break;
2006 }
2007 }
2008 }
2009 {
2010 object State = arg2;
2011 object PseudoCode = arg3;
2012 Variable A = new Variable();
2013 Variable B = new Variable();
2014 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("once", A), B)))
2015 {
2016 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("true")), Atom.a("fail")), B), State, PseudoCode))
2017 {
2018 yield return true;
2019 yield break;
2020 }
2021 }
2022 }
2023 {
2024 object State = arg2;
2025 object PseudoCode = arg3;
2026 Variable A = new Variable();
2027 Variable T = new Variable();
2028 Variable B = new Variable();
2029 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("->", A, T), B)))
2030 {
2031 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, T), Atom.a("fail")), B), State, PseudoCode))
2032 {
2033 yield return true;
2034 yield break;
2035 }
2036 }
2037 }
2038 {
2039 object State = arg2;
2040 object PseudoCode = arg3;
2041 Variable A = new Variable();
2042 Variable B = new Variable();
2043 Variable C = new Variable();
2044 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("\\=", A, B), C)))
2045 {
2046 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("\\+", new Functor2("=", A, B)), C), State, PseudoCode))
2047 {
2048 yield return true;
2049 yield break;
2050 }
2051 }
2052 }
2053 {
2054 object State = arg2;
2055 object PseudoCode = arg3;
2056 Variable A = new Variable();
2057 Variable ACode = new Variable();
2058 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("!"), A)))
2059 {
2060 foreach (bool l3 in compileRuleBody(A, State, ACode))
2061 {
2062 foreach (bool l4 in append(ACode, new ListPair(Atom.a("yieldbreak"), Atom.NIL), PseudoCode))
2063 {
2064 yield return true;
2065 yield break;
2066 }
2067 }
2068 }
2069 }
2070 {
2071 object State = arg2;
2072 object PseudoCode = arg3;
2073 Variable Name = new Variable();
2074 Variable A = new Variable();
2075 Variable ACode = new Variable();
2076 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$CUTIF", Name), A)))
2077 {
2078 foreach (bool l3 in compileRuleBody(A, State, ACode))
2079 {
2080 foreach (bool l4 in append(ACode, new ListPair(new Functor1("breakBlock", Name), Atom.NIL), PseudoCode))
2081 {
2082 yield return true;
2083 yield break;
2084 }
2085 }
2086 }
2087 }
2088 {
2089 object _State = arg2;
2090 Variable x1 = new Variable();
2091 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("fail"), x1)))
2092 {
2093 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
2094 {
2095 yield return true;
2096 yield break;
2097 }
2098 }
2099 }
2100 {
2101 object State = arg2;
2102 object PseudoCode = arg3;
2103 Variable A = new Variable();
2104 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("true"), A)))
2105 {
2106 foreach (bool l3 in compileRuleBody(A, State, PseudoCode))
2107 {
2108 yield return true;
2109 yield break;
2110 }
2111 }
2112 }
2113 {
2114 object State = arg2;
2115 Variable A = new Variable();
2116 Variable Term = new Variable();
2117 Variable B = new Variable();
2118 Variable ACode = new Variable();
2119 Variable TermCode = new Variable();
2120 Variable BCode = new Variable();
2121 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("is", A, Term), B)))
2122 {
2123 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(ACode, new ListPair(TermCode, Atom.NIL))), BCode), Atom.NIL)))
2124 {
2125 foreach (bool l4 in compileTerm(A, State, ACode))
2126 {
2127 foreach (bool l5 in compileExpression(Term, State, TermCode))
2128 {
2129 foreach (bool l6 in compileRuleBody(B, State, BCode))
2130 {
2131 yield return true;
2132 yield break;
2133 }
2134 }
2135 }
2136 }
2137 }
2138 }
2139 {
2140 object State = arg2;
2141 Variable ACode = new Variable();
2142 Variable B = new Variable();
2143 Variable BCode = new Variable();
2144 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$DET_NONE_OUT", ACode), B)))
2145 {
2146 foreach (bool l3 in YP.unify(arg3, new ListPair(ACode, BCode)))
2147 {
2148 foreach (bool l4 in compileRuleBody(B, State, BCode))
2149 {
2150 yield return true;
2151 yield break;
2152 }
2153 }
2154 }
2155 }
2156 {
2157 object State = arg2;
2158 Variable A = new Variable();
2159 Variable B = new Variable();
2160 Variable FunctionName = new Variable();
2161 Variable X1Code = new Variable();
2162 Variable X2Code = new Variable();
2163 Variable BCode = new Variable();
2164 Variable Name = new Variable();
2165 Variable X1 = new Variable();
2166 Variable X2 = new Variable();
2167 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
2168 {
2169 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor2("call", FunctionName, new ListPair(X1Code, new ListPair(X2Code, Atom.NIL))), BCode), Atom.NIL)))
2170 {
2171 foreach (bool l4 in YP.univ(A, ListPair.make(new object[] { Name, X1, X2 })))
2172 {
2173 foreach (bool l5 in binaryExpressionConditional(Name, FunctionName))
2174 {
2175 foreach (bool l6 in compileExpression(X1, State, X1Code))
2176 {
2177 foreach (bool l7 in compileExpression(X2, State, X2Code))
2178 {
2179 foreach (bool l8 in compileRuleBody(B, State, BCode))
2180 {
2181 yield return true;
2182 yield break;
2183 }
2184 }
2185 }
2186 }
2187 }
2188 }
2189 }
2190 }
2191 {
2192 object State = arg2;
2193 object PseudoCode = arg3;
2194 Variable Template = new Variable();
2195 Variable Goal = new Variable();
2196 Variable Bag = new Variable();
2197 Variable B = new Variable();
2198 Variable TemplateCode = new Variable();
2199 Variable FindallAnswers = new Variable();
2200 Variable GoalAndAddCode = new Variable();
2201 Variable BagCode = new Variable();
2202 Variable BCode = new Variable();
2203 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("findall", Template, Goal, Bag), B)))
2204 {
2205 foreach (bool l3 in compileTerm(Template, State, TemplateCode))
2206 {
2207 foreach (bool l4 in CompilerState.gensym(State, Atom.a("findallAnswers"), FindallAnswers))
2208 {
2209 foreach (bool l5 in compileRuleBody(new Functor2(",", Goal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode))
2210 {
2211 foreach (bool l6 in compileTerm(Bag, State, BagCode))
2212 {
2213 foreach (bool l7 in compileRuleBody(B, State, BCode))
2214 {
2215 foreach (bool l8 in append(new ListPair(new Functor3("declare", Atom.a("FindallAnswers"), FindallAnswers, new Functor2("new", Atom.a("FindallAnswers"), new ListPair(TemplateCode, Atom.NIL))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("result"), new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode))
2216 {
2217 yield return true;
2218 yield break;
2219 }
2220 }
2221 }
2222 }
2223 }
2224 }
2225 }
2226 }
2227 {
2228 object State = arg2;
2229 object PseudoCode = arg3;
2230 Variable Template = new Variable();
2231 Variable Goal = new Variable();
2232 Variable Bag = new Variable();
2233 Variable B = new Variable();
2234 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("bagof", Template, Goal, Bag), B)))
2235 {
2236 foreach (bool l3 in compileBagof(Atom.a("result"), Template, Goal, Bag, B, State, PseudoCode))
2237 {
2238 yield return true;
2239 yield break;
2240 }
2241 }
2242 }
2243 {
2244 object State = arg2;
2245 object PseudoCode = arg3;
2246 Variable Template = new Variable();
2247 Variable Goal = new Variable();
2248 Variable Bag = new Variable();
2249 Variable B = new Variable();
2250 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("setof", Template, Goal, Bag), B)))
2251 {
2252 foreach (bool l3 in compileBagof(Atom.a("resultSet"), Template, Goal, Bag, B, State, PseudoCode))
2253 {
2254 yield return true;
2255 yield break;
2256 }
2257 }
2258 }
2259 {
2260 object State = arg2;
2261 Variable A = new Variable();
2262 Variable B = new Variable();
2263 Variable ATermCode = new Variable();
2264 Variable BCode = new Variable();
2265 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("call", A), B)))
2266 {
2267 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.getIterator"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL)))
2268 {
2269 foreach (bool l4 in compileTerm(A, State, ATermCode))
2270 {
2271 foreach (bool l5 in compileRuleBody(B, State, BCode))
2272 {
2273 yield return true;
2274 yield break;
2275 }
2276 }
2277 }
2278 }
2279 }
2280 {
2281 object State = arg2;
2282 Variable A = new Variable();
2283 Variable B = new Variable();
2284 Variable ATermCode = new Variable();
2285 Variable BCode = new Variable();
2286 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("current_predicate", A), B)))
2287 {
2288 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.current_predicate"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL)))
2289 {
2290 foreach (bool l4 in compileTerm(A, State, ATermCode))
2291 {
2292 foreach (bool l5 in compileRuleBody(B, State, BCode))
2293 {
2294 yield return true;
2295 yield break;
2296 }
2297 }
2298 }
2299 }
2300 }
2301 {
2302 object State = arg2;
2303 Variable A = new Variable();
2304 Variable B = new Variable();
2305 Variable ATermCode = new Variable();
2306 Variable BCode = new Variable();
2307 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("asserta", A), B)))
2308 {
2309 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.asserta"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode)))
2310 {
2311 foreach (bool l4 in compileTerm(A, State, ATermCode))
2312 {
2313 foreach (bool l5 in compileRuleBody(B, State, BCode))
2314 {
2315 yield return true;
2316 yield break;
2317 }
2318 }
2319 }
2320 }
2321 }
2322 {
2323 object State = arg2;
2324 Variable A = new Variable();
2325 Variable B = new Variable();
2326 Variable ATermCode = new Variable();
2327 Variable BCode = new Variable();
2328 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assertz", A), B)))
2329 {
2330 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.assertz"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode)))
2331 {
2332 foreach (bool l4 in compileTerm(A, State, ATermCode))
2333 {
2334 foreach (bool l5 in compileRuleBody(B, State, BCode))
2335 {
2336 yield return true;
2337 yield break;
2338 }
2339 }
2340 }
2341 }
2342 }
2343 {
2344 object State = arg2;
2345 object PseudoCode = arg3;
2346 Variable A = new Variable();
2347 Variable B = new Variable();
2348 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assert", A), B)))
2349 {
2350 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("assertz", A), B), State, PseudoCode))
2351 {
2352 yield return true;
2353 yield break;
2354 }
2355 }
2356 }
2357 {
2358 object State = arg2;
2359 Variable Goal = new Variable();
2360 Variable Catcher = new Variable();
2361 Variable Handler = new Variable();
2362 Variable B = new Variable();
2363 Variable CatchGoal = new Variable();
2364 Variable GoalTermCode = new Variable();
2365 Variable BCode = new Variable();
2366 Variable CatcherTermCode = new Variable();
2367 Variable HandlerAndBCode = new Variable();
2368 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("catch", Goal, Catcher, Handler), B)))
2369 {
2370 foreach (bool l3 in YP.unify(arg3, ListPair.make(new object[] { new Functor3("declare", Atom.a("YP.Catch"), CatchGoal, new Functor2("new", Atom.a("YP.Catch"), new ListPair(GoalTermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL)))), new Functor2("foreach", new Functor1("var", CatchGoal), BCode), new Functor2("foreach", new Functor3("callMember", new Functor1("var", CatchGoal), Atom.a("unifyExceptionOrThrow"), new ListPair(CatcherTermCode, Atom.NIL)), HandlerAndBCode) })))
2371 {
2372 foreach (bool l4 in CompilerState.gensym(State, Atom.a("catchGoal"), CatchGoal))
2373 {
2374 foreach (bool l5 in compileTerm(Goal, State, GoalTermCode))
2375 {
2376 foreach (bool l6 in compileTerm(Catcher, State, CatcherTermCode))
2377 {
2378 foreach (bool l7 in compileRuleBody(B, State, BCode))
2379 {
2380 foreach (bool l8 in compileRuleBody(new Functor2(",", Handler, B), State, HandlerAndBCode))
2381 {
2382 yield return true;
2383 yield break;
2384 }
2385 }
2386 }
2387 }
2388 }
2389 }
2390 }
2391 }
2392 {
2393 object State = arg2;
2394 object PseudoCode = arg3;
2395 Variable A = new Variable();
2396 Variable B = new Variable();
2397 Variable C = new Variable();
2398 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(",", A, B), C)))
2399 {
2400 foreach (bool l3 in compileRuleBody(new Functor2(",", A, new Functor2(",", B, C)), State, PseudoCode))
2401 {
2402 yield return true;
2403 yield break;
2404 }
2405 }
2406 }
2407 {
2408 object State = arg2;
2409 object PseudoCode = arg3;
2410 Variable A = new Variable();
2411 Variable B = new Variable();
2412 foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B)))
2413 {
2414 if (YP.var(A))
2415 {
2416 foreach (bool l4 in compileRuleBody(new Functor2(";", new Functor1("call", A), B), State, PseudoCode))
2417 {
2418 yield return true;
2419 yield break;
2420 }
2421 }
2422 }
2423 }
2424 {
2425 object State = arg2;
2426 Variable A = new Variable();
2427 Variable T = new Variable();
2428 Variable B = new Variable();
2429 Variable CutIfLabel = new Variable();
2430 Variable Code = new Variable();
2431 foreach (bool l2 in YP.unify(arg1, new Functor2(";", new Functor2("->", A, T), B)))
2432 {
2433 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("breakableBlock", CutIfLabel, Code), Atom.NIL)))
2434 {
2435 foreach (bool l4 in CompilerState.gensym(State, Atom.a("cutIf"), CutIfLabel))
2436 {
2437 foreach (bool l5 in compileRuleBody(new Functor2(";", new Functor2(",", A, new Functor2(",", new Functor1("$CUTIF", CutIfLabel), T)), B), State, Code))
2438 {
2439 yield return true;
2440 yield break;
2441 }
2442 }
2443 }
2444 }
2445 }
2446 {
2447 object State = arg2;
2448 object PseudoCode = arg3;
2449 Variable _B = new Variable();
2450 foreach (bool l2 in YP.unify(arg1, new Functor2(";", Atom.a("!"), _B)))
2451 {
2452 foreach (bool l3 in compileRuleBody(Atom.a("!"), State, PseudoCode))
2453 {
2454 yield return true;
2455 yield break;
2456 }
2457 }
2458 }
2459 {
2460 object State = arg2;
2461 object PseudoCode = arg3;
2462 Variable A = new Variable();
2463 Variable B = new Variable();
2464 Variable ACode = new Variable();
2465 Variable BCode = new Variable();
2466 foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B)))
2467 {
2468 foreach (bool l3 in compileRuleBody(A, State, ACode))
2469 {
2470 foreach (bool l4 in compileRuleBody(B, State, BCode))
2471 {
2472 foreach (bool l5 in append(ACode, BCode, PseudoCode))
2473 {
2474 yield return true;
2475 yield break;
2476 }
2477 }
2478 }
2479 }
2480 }
2481 {
2482 object State = arg2;
2483 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2484 {
2485 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL)))
2486 {
2487 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
2488 {
2489 yield return true;
2490 yield break;
2491 }
2492 }
2493 }
2494 }
2495 {
2496 object State = arg2;
2497 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2498 {
2499 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL)))
2500 {
2501 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
2502 {
2503 yield return true;
2504 yield break;
2505 }
2506 }
2507 }
2508 }
2509 {
2510 object State = arg2;
2511 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2512 {
2513 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldtrue"), new ListPair(Atom.a("yieldbreak"), Atom.NIL))))
2514 {
2515 CompilerState.setCodeUsesYield(State);
2516 yield return true;
2517 yield break;
2518 }
2519 }
2520 }
2521 {
2522 object _State = arg2;
2523 Variable Name = new Variable();
2524 foreach (bool l2 in YP.unify(arg1, new Functor1("$CUTIF", Name)))
2525 {
2526 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("breakBlock", Name), Atom.NIL)))
2527 {
2528 yield return true;
2529 yield break;
2530 }
2531 }
2532 }
2533 {
2534 object State = arg2;
2535 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2536 {
2537 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL)))
2538 {
2539 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
2540 {
2541 yield return true;
2542 yield break;
2543 }
2544 }
2545 }
2546 }
2547 {
2548 object State = arg2;
2549 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2550 {
2551 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL)))
2552 {
2553 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
2554 {
2555 yield return true;
2556 yield break;
2557 }
2558 }
2559 }
2560 }
2561 {
2562 object State = arg2;
2563 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2564 {
2565 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldfalse"), Atom.NIL)))
2566 {
2567 CompilerState.setCodeUsesYield(State);
2568 yield return true;
2569 yield break;
2570 }
2571 }
2572 }
2573 {
2574 object A = arg1;
2575 object State = arg2;
2576 object PseudoCode = arg3;
2577 foreach (bool l2 in compileRuleBody(new Functor2(",", A, Atom.a("true")), State, PseudoCode))
2578 {
2579 yield return true;
2580 yield break;
2581 }
2582 }
2583 }
2584
2585 public static IEnumerable<bool> compileBagof(object ResultMethod, object Template, object Goal, object Bag, object B, object State, object PseudoCode)
2586 {
2587 {
2588 Variable TemplateCode = new Variable();
2589 Variable GoalTermCode = new Variable();
2590 Variable UnqualifiedGoal = new Variable();
2591 Variable BagofAnswers = new Variable();
2592 Variable GoalAndAddCode = new Variable();
2593 Variable BagCode = new Variable();
2594 Variable BCode = new Variable();
2595 foreach (bool l2 in compileTerm(Template, State, TemplateCode))
2596 {
2597 foreach (bool l3 in compileTerm(Goal, State, GoalTermCode))
2598 {
2599 foreach (bool l4 in unqualifiedGoal(Goal, UnqualifiedGoal))
2600 {
2601 foreach (bool l5 in CompilerState.gensym(State, Atom.a("bagofAnswers"), BagofAnswers))
2602 {
2603 foreach (bool l6 in compileRuleBody(new Functor2(",", UnqualifiedGoal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", BagofAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode))
2604 {
2605 foreach (bool l7 in compileTerm(Bag, State, BagCode))
2606 {
2607 foreach (bool l8 in compileRuleBody(B, State, BCode))
2608 {
2609 foreach (bool l9 in append(new ListPair(new Functor3("declare", Atom.a("BagofAnswers"), BagofAnswers, new Functor2("new", Atom.a("BagofAnswers"), new ListPair(TemplateCode, new ListPair(GoalTermCode, Atom.NIL)))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", BagofAnswers), ResultMethod, new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode))
2610 {
2611 yield return true;
2612 yield break;
2613 }
2614 }
2615 }
2616 }
2617 }
2618 }
2619 }
2620 }
2621 }
2622 }
2623
2624 public static IEnumerable<bool> unqualifiedGoal(object arg1, object arg2)
2625 {
2626 {
2627 object Goal = arg1;
2628 foreach (bool l2 in YP.unify(arg2, new Functor1("call", Goal)))
2629 {
2630 if (YP.var(Goal))
2631 {
2632 yield return true;
2633 yield break;
2634 }
2635 }
2636 }
2637 {
2638 object UnqualifiedGoal = arg2;
2639 Variable x1 = new Variable();
2640 Variable Goal = new Variable();
2641 foreach (bool l2 in YP.unify(arg1, new Functor2("^", x1, Goal)))
2642 {
2643 foreach (bool l3 in unqualifiedGoal(Goal, UnqualifiedGoal))
2644 {
2645 yield return true;
2646 yield break;
2647 }
2648 }
2649 }
2650 {
2651 Variable UnqualifiedGoal = new Variable();
2652 foreach (bool l2 in YP.unify(arg1, UnqualifiedGoal))
2653 {
2654 foreach (bool l3 in YP.unify(arg2, UnqualifiedGoal))
2655 {
2656 yield return true;
2657 yield break;
2658 }
2659 }
2660 }
2661 }
2662
2663 public static IEnumerable<bool> binaryExpressionConditional(object arg1, object arg2)
2664 {
2665 {
2666 foreach (bool l2 in YP.unify(arg1, Atom.a("=:=")))
2667 {
2668 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.equal")))
2669 {
2670 yield return true;
2671 yield break;
2672 }
2673 }
2674 }
2675 {
2676 foreach (bool l2 in YP.unify(arg1, Atom.a("=\\=")))
2677 {
2678 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.notEqual")))
2679 {
2680 yield return true;
2681 yield break;
2682 }
2683 }
2684 }
2685 {
2686 foreach (bool l2 in YP.unify(arg1, Atom.a(">")))
2687 {
2688 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThan")))
2689 {
2690 yield return true;
2691 yield break;
2692 }
2693 }
2694 }
2695 {
2696 foreach (bool l2 in YP.unify(arg1, Atom.a("<")))
2697 {
2698 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThan")))
2699 {
2700 yield return true;
2701 yield break;
2702 }
2703 }
2704 }
2705 {
2706 foreach (bool l2 in YP.unify(arg1, Atom.a(">=")))
2707 {
2708 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThanOrEqual")))
2709 {
2710 yield return true;
2711 yield break;
2712 }
2713 }
2714 }
2715 {
2716 foreach (bool l2 in YP.unify(arg1, Atom.a("=<")))
2717 {
2718 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThanOrEqual")))
2719 {
2720 yield return true;
2721 yield break;
2722 }
2723 }
2724 }
2725 }
2726
2727 public static IEnumerable<bool> compileFunctorCall(object Functor_1, object State, object PseudoCode)
2728 {
2729 {
2730 Variable FunctorName = new Variable();
2731 Variable FunctorArgs = new Variable();
2732 Variable x6 = new Variable();
2733 Variable Arity = new Variable();
2734 Variable FunctionName = new Variable();
2735 Variable CompiledArgs = new Variable();
2736 foreach (bool l2 in YP.univ(Functor_1, new ListPair(FunctorName, FunctorArgs)))
2737 {
2738 foreach (bool l3 in YP.functor(Functor_1, x6, Arity))
2739 {
2740 foreach (bool l4 in functorCallFunctionName(State, FunctorName, Arity, FunctionName))
2741 {
2742 foreach (bool l5 in maplist_compileTerm(FunctorArgs, State, CompiledArgs))
2743 {
2744 if (YP.termEqual(FunctionName, Atom.NIL))
2745 {
2746 foreach (bool l7 in YP.unify(PseudoCode, new Functor2("call", Atom.a("YP.matchDynamic"), new ListPair(new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", FunctorName), Atom.NIL)), new ListPair(new Functor1("objectArray", CompiledArgs), Atom.NIL)))))
2747 {
2748 yield return true;
2749 yield break;
2750 }
2751 goto cutIf1;
2752 }
2753 foreach (bool l6 in YP.unify(PseudoCode, new Functor3("functorCall", FunctionName, FunctorArgs, CompiledArgs)))
2754 {
2755 yield return true;
2756 yield break;
2757 }
2758 cutIf1:
2759 { }
2760 }
2761 }
2762 }
2763 }
2764 }
2765 }
2766
2767 public static IEnumerable<bool> functorCallFunctionName(object arg1, object arg2, object arg3, object arg4)
2768 {
2769 {
2770 object _State = arg1;
2771 object Name = arg2;
2772 object Arity = arg3;
2773 object x4 = arg4;
2774 if (functorCallIsSpecialForm(Name, Arity))
2775 {
2776 yield break;
2777 }
2778 }
2779 {
2780 object x1 = arg1;
2781 object Name = arg2;
2782 object Arity = arg3;
2783 object FunctionName = arg4;
2784 foreach (bool l2 in functorCallYPFunctionName(Name, Arity, FunctionName))
2785 {
2786 yield return true;
2787 yield break;
2788 }
2789 }
2790 {
2791 object State = arg1;
2792 object Arity = arg3;
2793 Variable Name = new Variable();
2794 foreach (bool l2 in YP.unify(arg2, Name))
2795 {
2796 foreach (bool l3 in YP.unify(arg4, Name))
2797 {
2798 if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a("")))
2799 {
2800 yield return true;
2801 yield break;
2802 }
2803 }
2804 }
2805 }
2806 {
2807 object _State = arg1;
2808 object _Arity = arg3;
2809 Variable Name = new Variable();
2810 foreach (bool l2 in YP.unify(arg2, Name))
2811 {
2812 foreach (bool l3 in YP.unify(arg4, Name))
2813 {
2814 foreach (bool l4 in Atom.module(Name, Atom.a("")))
2815 {
2816 yield return true;
2817 yield break;
2818 }
2819 }
2820 }
2821 }
2822 {
2823 object _State = arg1;
2824 object Name = arg2;
2825 object _Arity = arg3;
2826 foreach (bool l2 in YP.unify(arg4, Atom.NIL))
2827 {
2828 foreach (bool l3 in Atom.module(Name, Atom.NIL))
2829 {
2830 yield return true;
2831 yield break;
2832 }
2833 }
2834 }
2835 {
2836 object _State = arg1;
2837 object Name = arg2;
2838 object Arity = arg3;
2839 object x4 = arg4;
2840 Variable Module = new Variable();
2841 Variable Message = new Variable();
2842 foreach (bool l2 in Atom.module(Name, Module))
2843 {
2844 foreach (bool l3 in YP.atom_concat(Atom.a("Not supporting calls to external module: "), Module, Message))
2845 {
2846 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), new Functor2("/", Name, Arity)), Message));
2847 yield return true;
2848 yield break;
2849 }
2850 }
2851 }
2852 {
2853 object _State = arg1;
2854 object Name = arg2;
2855 object _Arity = arg3;
2856 object x4 = arg4;
2857 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), Name), Atom.a("Term is not callable")));
2858 yield return true;
2859 yield break;
2860 }
2861 }
2862
2863 public static bool functorCallIsSpecialForm(object Name, object Arity)
2864 {
2865 {
2866 Variable x3 = new Variable();
2867 if (YP.termEqual(Arity, 0))
2868 {
2869 if (YP.termEqual(Name, Atom.a("!")))
2870 {
2871 return true;
2872 }
2873 if (YP.termEqual(Name, Atom.a("fail")))
2874 {
2875 return true;
2876 }
2877 if (YP.termEqual(Name, Atom.a("true")))
2878 {
2879 return true;
2880 }
2881 }
2882 if (YP.termEqual(Arity, 1))
2883 {
2884 if (YP.termEqual(Name, Atom.a("\\+")))
2885 {
2886 return true;
2887 }
2888 if (YP.termEqual(Name, Atom.a("once")))
2889 {
2890 return true;
2891 }
2892 if (YP.termEqual(Name, Atom.a("$CUTIF")))
2893 {
2894 return true;
2895 }
2896 if (YP.termEqual(Name, Atom.a("$DET_NONE_OUT")))
2897 {
2898 return true;
2899 }
2900 if (YP.termEqual(Name, Atom.a("call")))
2901 {
2902 return true;
2903 }
2904 if (YP.termEqual(Name, Atom.a("current_predicate")))
2905 {
2906 return true;
2907 }
2908 if (YP.termEqual(Name, Atom.a("asserta")))
2909 {
2910 return true;
2911 }
2912 if (YP.termEqual(Name, Atom.a("assertz")))
2913 {
2914 return true;
2915 }
2916 if (YP.termEqual(Name, Atom.a("assert")))
2917 {
2918 return true;
2919 }
2920 }
2921 if (YP.termEqual(Arity, 2))
2922 {
2923 if (YP.termEqual(Name, Atom.a(";")))
2924 {
2925 return true;
2926 }
2927 if (YP.termEqual(Name, Atom.a(",")))
2928 {
2929 return true;
2930 }
2931 if (YP.termEqual(Name, Atom.a("->")))
2932 {
2933 return true;
2934 }
2935 if (YP.termEqual(Name, Atom.a("\\=")))
2936 {
2937 return true;
2938 }
2939 if (YP.termEqual(Name, Atom.a("is")))
2940 {
2941 return true;
2942 }
2943 foreach (bool l3 in binaryExpressionConditional(Name, x3))
2944 {
2945 return true;
2946 }
2947 }
2948 if (YP.termEqual(Arity, 3))
2949 {
2950 if (YP.termEqual(Name, Atom.a("findall")))
2951 {
2952 return true;
2953 }
2954 if (YP.termEqual(Name, Atom.a("bagof")))
2955 {
2956 return true;
2957 }
2958 if (YP.termEqual(Name, Atom.a("setof")))
2959 {
2960 return true;
2961 }
2962 if (YP.termEqual(Name, Atom.a("catch")))
2963 {
2964 return true;
2965 }
2966 }
2967 }
2968 return false;
2969 }
2970
2971 public static IEnumerable<bool> functorCallYPFunctionName(object arg1, object arg2, object arg3)
2972 {
2973 {
2974 foreach (bool l2 in YP.unify(arg1, Atom.a("=")))
2975 {
2976 foreach (bool l3 in YP.unify(arg2, 2))
2977 {
2978 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.unify")))
2979 {
2980 yield return true;
2981 yield break;
2982 }
2983 }
2984 }
2985 }
2986 {
2987 foreach (bool l2 in YP.unify(arg1, Atom.a("=..")))
2988 {
2989 foreach (bool l3 in YP.unify(arg2, 2))
2990 {
2991 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.univ")))
2992 {
2993 yield return true;
2994 yield break;
2995 }
2996 }
2997 }
2998 }
2999 {
3000 foreach (bool l2 in YP.unify(arg1, Atom.a("var")))
3001 {
3002 foreach (bool l3 in YP.unify(arg2, 1))
3003 {
3004 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.var")))
3005 {
3006 yield return true;
3007 yield break;
3008 }
3009 }
3010 }
3011 }
3012 {
3013 foreach (bool l2 in YP.unify(arg1, Atom.a("nonvar")))
3014 {
3015 foreach (bool l3 in YP.unify(arg2, 1))
3016 {
3017 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nonvar")))
3018 {
3019 yield return true;
3020 yield break;
3021 }
3022 }
3023 }
3024 }
3025 {
3026 foreach (bool l2 in YP.unify(arg1, Atom.a("arg")))
3027 {
3028 foreach (bool l3 in YP.unify(arg2, 3))
3029 {
3030 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.arg")))
3031 {
3032 yield return true;
3033 yield break;
3034 }
3035 }
3036 }
3037 }
3038 {
3039 foreach (bool l2 in YP.unify(arg1, Atom.a("functor")))
3040 {
3041 foreach (bool l3 in YP.unify(arg2, 3))
3042 {
3043 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.functor")))
3044 {
3045 yield return true;
3046 yield break;
3047 }
3048 }
3049 }
3050 }
3051 {
3052 foreach (bool l2 in YP.unify(arg1, Atom.a("repeat")))
3053 {
3054 foreach (bool l3 in YP.unify(arg2, 0))
3055 {
3056 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.repeat")))
3057 {
3058 yield return true;
3059 yield break;
3060 }
3061 }
3062 }
3063 }
3064 {
3065 foreach (bool l2 in YP.unify(arg1, Atom.a("get_code")))
3066 {
3067 foreach (bool l3 in YP.unify(arg2, 1))
3068 {
3069 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.get_code")))
3070 {
3071 yield return true;
3072 yield break;
3073 }
3074 }
3075 }
3076 }
3077 {
3078 foreach (bool l2 in YP.unify(arg1, Atom.a("current_op")))
3079 {
3080 foreach (bool l3 in YP.unify(arg2, 3))
3081 {
3082 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_op")))
3083 {
3084 yield return true;
3085 yield break;
3086 }
3087 }
3088 }
3089 }
3090 {
3091 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_length")))
3092 {
3093 foreach (bool l3 in YP.unify(arg2, 2))
3094 {
3095 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_length")))
3096 {
3097 yield return true;
3098 yield break;
3099 }
3100 }
3101 }
3102 }
3103 {
3104 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_concat")))
3105 {
3106 foreach (bool l3 in YP.unify(arg2, 3))
3107 {
3108 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_concat")))
3109 {
3110 yield return true;
3111 yield break;
3112 }
3113 }
3114 }
3115 }
3116 {
3117 foreach (bool l2 in YP.unify(arg1, Atom.a("sub_atom")))
3118 {
3119 foreach (bool l3 in YP.unify(arg2, 5))
3120 {
3121 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sub_atom")))
3122 {
3123 yield return true;
3124 yield break;
3125 }
3126 }
3127 }
3128 }
3129 {
3130 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_chars")))
3131 {
3132 foreach (bool l3 in YP.unify(arg2, 2))
3133 {
3134 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_chars")))
3135 {
3136 yield return true;
3137 yield break;
3138 }
3139 }
3140 }
3141 }
3142 {
3143 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_codes")))
3144 {
3145 foreach (bool l3 in YP.unify(arg2, 2))
3146 {
3147 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_codes")))
3148 {
3149 yield return true;
3150 yield break;
3151 }
3152 }
3153 }
3154 }
3155 {
3156 foreach (bool l2 in YP.unify(arg1, Atom.a("char_code")))
3157 {
3158 foreach (bool l3 in YP.unify(arg2, 2))
3159 {
3160 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.char_code")))
3161 {
3162 yield return true;
3163 yield break;
3164 }
3165 }
3166 }
3167 }
3168 {
3169 foreach (bool l2 in YP.unify(arg1, Atom.a("number_chars")))
3170 {
3171 foreach (bool l3 in YP.unify(arg2, 2))
3172 {
3173 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_chars")))
3174 {
3175 yield return true;
3176 yield break;
3177 }
3178 }
3179 }
3180 }
3181 {
3182 foreach (bool l2 in YP.unify(arg1, Atom.a("number_codes")))
3183 {
3184 foreach (bool l3 in YP.unify(arg2, 2))
3185 {
3186 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_codes")))
3187 {
3188 yield return true;
3189 yield break;
3190 }
3191 }
3192 }
3193 }
3194 {
3195 foreach (bool l2 in YP.unify(arg1, Atom.a("copy_term")))
3196 {
3197 foreach (bool l3 in YP.unify(arg2, 2))
3198 {
3199 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.copy_term")))
3200 {
3201 yield return true;
3202 yield break;
3203 }
3204 }
3205 }
3206 }
3207 {
3208 foreach (bool l2 in YP.unify(arg1, Atom.a("sort")))
3209 {
3210 foreach (bool l3 in YP.unify(arg2, 2))
3211 {
3212 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sort")))
3213 {
3214 yield return true;
3215 yield break;
3216 }
3217 }
3218 }
3219 }
3220 {
3221 // Manually included : script_event for callback to LSL/C#
3222
3223 //object x1 = arg1;
3224 foreach (bool l2 in YP.unify(arg1, Atom.a(@"script_event")))
3225 {
3226 foreach (bool l3 in YP.unify(arg2, 2))
3227 {
3228 foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.script_event")))
3229 {
3230 yield return true;
3231 yield break;
3232 }
3233 }
3234 }
3235 }
3236 {
3237 foreach (bool l2 in YP.unify(arg1, Atom.a("nl")))
3238 {
3239 foreach (bool l3 in YP.unify(arg2, 0))
3240 {
3241 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nl")))
3242 {
3243 yield return true;
3244 yield break;
3245 }
3246 }
3247 }
3248 }
3249 {
3250 foreach (bool l2 in YP.unify(arg1, Atom.a("write")))
3251 {
3252 foreach (bool l3 in YP.unify(arg2, 1))
3253 {
3254 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.write")))
3255 {
3256 yield return true;
3257 yield break;
3258 }
3259 }
3260 }
3261 }
3262 {
3263 foreach (bool l2 in YP.unify(arg1, Atom.a("put_code")))
3264 {
3265 foreach (bool l3 in YP.unify(arg2, 1))
3266 {
3267 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.put_code")))
3268 {
3269 yield return true;
3270 yield break;
3271 }
3272 }
3273 }
3274 }
3275 {
3276 foreach (bool l2 in YP.unify(arg1, Atom.a("see")))
3277 {
3278 foreach (bool l3 in YP.unify(arg2, 1))
3279 {
3280 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.see")))
3281 {
3282 yield return true;
3283 yield break;
3284 }
3285 }
3286 }
3287 }
3288 {
3289 foreach (bool l2 in YP.unify(arg1, Atom.a("seen")))
3290 {
3291 foreach (bool l3 in YP.unify(arg2, 0))
3292 {
3293 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.seen")))
3294 {
3295 yield return true;
3296 yield break;
3297 }
3298 }
3299 }
3300 }
3301 {
3302 foreach (bool l2 in YP.unify(arg1, Atom.a("tell")))
3303 {
3304 foreach (bool l3 in YP.unify(arg2, 1))
3305 {
3306 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.tell")))
3307 {
3308 yield return true;
3309 yield break;
3310 }
3311 }
3312 }
3313 }
3314 {
3315 foreach (bool l2 in YP.unify(arg1, Atom.a("told")))
3316 {
3317 foreach (bool l3 in YP.unify(arg2, 0))
3318 {
3319 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.told")))
3320 {
3321 yield return true;
3322 yield break;
3323 }
3324 }
3325 }
3326 }
3327 {
3328 foreach (bool l2 in YP.unify(arg1, Atom.a("clause")))
3329 {
3330 foreach (bool l3 in YP.unify(arg2, 2))
3331 {
3332 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.clause")))
3333 {
3334 yield return true;
3335 yield break;
3336 }
3337 }
3338 }
3339 }
3340 {
3341 foreach (bool l2 in YP.unify(arg1, Atom.a("retract")))
3342 {
3343 foreach (bool l3 in YP.unify(arg2, 1))
3344 {
3345 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retract")))
3346 {
3347 yield return true;
3348 yield break;
3349 }
3350 }
3351 }
3352 }
3353 {
3354 foreach (bool l2 in YP.unify(arg1, Atom.a("abolish")))
3355 {
3356 foreach (bool l3 in YP.unify(arg2, 1))
3357 {
3358 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.abolish")))
3359 {
3360 yield return true;
3361 yield break;
3362 }
3363 }
3364 }
3365 }
3366 {
3367 foreach (bool l2 in YP.unify(arg1, Atom.a("retractall")))
3368 {
3369 foreach (bool l3 in YP.unify(arg2, 1))
3370 {
3371 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retractall")))
3372 {
3373 yield return true;
3374 yield break;
3375 }
3376 }
3377 }
3378 }
3379 {
3380 foreach (bool l2 in YP.unify(arg1, Atom.a("atom")))
3381 {
3382 foreach (bool l3 in YP.unify(arg2, 1))
3383 {
3384 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom")))
3385 {
3386 yield return true;
3387 yield break;
3388 }
3389 }
3390 }
3391 }
3392 {
3393 foreach (bool l2 in YP.unify(arg1, Atom.a("integer")))
3394 {
3395 foreach (bool l3 in YP.unify(arg2, 1))
3396 {
3397 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.integer")))
3398 {
3399 yield return true;
3400 yield break;
3401 }
3402 }
3403 }
3404 }
3405 {
3406 foreach (bool l2 in YP.unify(arg1, Atom.a("float")))
3407 {
3408 foreach (bool l3 in YP.unify(arg2, 1))
3409 {
3410 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.isFloat")))
3411 {
3412 yield return true;
3413 yield break;
3414 }
3415 }
3416 }
3417 }
3418 {
3419 foreach (bool l2 in YP.unify(arg1, Atom.a("number")))
3420 {
3421 foreach (bool l3 in YP.unify(arg2, 1))
3422 {
3423 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number")))
3424 {
3425 yield return true;
3426 yield break;
3427 }
3428 }
3429 }
3430 }
3431 {
3432 foreach (bool l2 in YP.unify(arg1, Atom.a("atomic")))
3433 {
3434 foreach (bool l3 in YP.unify(arg2, 1))
3435 {
3436 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atomic")))
3437 {
3438 yield return true;
3439 yield break;
3440 }
3441 }
3442 }
3443 }
3444 {
3445 foreach (bool l2 in YP.unify(arg1, Atom.a("compound")))
3446 {
3447 foreach (bool l3 in YP.unify(arg2, 1))
3448 {
3449 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.compound")))
3450 {
3451 yield return true;
3452 yield break;
3453 }
3454 }
3455 }
3456 }
3457 {
3458 foreach (bool l2 in YP.unify(arg1, Atom.a("==")))
3459 {
3460 foreach (bool l3 in YP.unify(arg2, 2))
3461 {
3462 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termEqual")))
3463 {
3464 yield return true;
3465 yield break;
3466 }
3467 }
3468 }
3469 }
3470 {
3471 foreach (bool l2 in YP.unify(arg1, Atom.a("\\==")))
3472 {
3473 foreach (bool l3 in YP.unify(arg2, 2))
3474 {
3475 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termNotEqual")))
3476 {
3477 yield return true;
3478 yield break;
3479 }
3480 }
3481 }
3482 }
3483 {
3484 foreach (bool l2 in YP.unify(arg1, Atom.a("@<")))
3485 {
3486 foreach (bool l3 in YP.unify(arg2, 2))
3487 {
3488 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThan")))
3489 {
3490 yield return true;
3491 yield break;
3492 }
3493 }
3494 }
3495 }
3496 {
3497 foreach (bool l2 in YP.unify(arg1, Atom.a("@=<")))
3498 {
3499 foreach (bool l3 in YP.unify(arg2, 2))
3500 {
3501 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThanOrEqual")))
3502 {
3503 yield return true;
3504 yield break;
3505 }
3506 }
3507 }
3508 }
3509 {
3510 foreach (bool l2 in YP.unify(arg1, Atom.a("@>")))
3511 {
3512 foreach (bool l3 in YP.unify(arg2, 2))
3513 {
3514 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThan")))
3515 {
3516 yield return true;
3517 yield break;
3518 }
3519 }
3520 }
3521 }
3522 {
3523 foreach (bool l2 in YP.unify(arg1, Atom.a("@>=")))
3524 {
3525 foreach (bool l3 in YP.unify(arg2, 2))
3526 {
3527 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThanOrEqual")))
3528 {
3529 yield return true;
3530 yield break;
3531 }
3532 }
3533 }
3534 }
3535 {
3536 foreach (bool l2 in YP.unify(arg1, Atom.a("throw")))
3537 {
3538 foreach (bool l3 in YP.unify(arg2, 1))
3539 {
3540 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.throwException")))
3541 {
3542 yield return true;
3543 yield break;
3544 }
3545 }
3546 }
3547 }
3548 {
3549 foreach (bool l2 in YP.unify(arg1, Atom.a("current_prolog_flag")))
3550 {
3551 foreach (bool l3 in YP.unify(arg2, 2))
3552 {
3553 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_prolog_flag")))
3554 {
3555 yield return true;
3556 yield break;
3557 }
3558 }
3559 }
3560 }
3561 {
3562 foreach (bool l2 in YP.unify(arg1, Atom.a("set_prolog_flag")))
3563 {
3564 foreach (bool l3 in YP.unify(arg2, 2))
3565 {
3566 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.set_prolog_flag")))
3567 {
3568 yield return true;
3569 yield break;
3570 }
3571 }
3572 }
3573 }
3574 {
3575 foreach (bool l2 in YP.unify(arg1, Atom.a("current_input")))
3576 {
3577 foreach (bool l3 in YP.unify(arg2, 1))
3578 {
3579 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_input")))
3580 {
3581 yield return true;
3582 yield break;
3583 }
3584 }
3585 }
3586 }
3587 {
3588 foreach (bool l2 in YP.unify(arg1, Atom.a("current_output")))
3589 {
3590 foreach (bool l3 in YP.unify(arg2, 1))
3591 {
3592 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_output")))
3593 {
3594 yield return true;
3595 yield break;
3596 }
3597 }
3598 }
3599 }
3600 {
3601 foreach (bool l2 in YP.unify(arg1, Atom.a("read_term")))
3602 {
3603 foreach (bool l3 in YP.unify(arg2, 2))
3604 {
3605 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term2")))
3606 {
3607 yield return true;
3608 yield break;
3609 }
3610 }
3611 }
3612 }
3613 {
3614 foreach (bool l2 in YP.unify(arg1, Atom.a("read_term")))
3615 {
3616 foreach (bool l3 in YP.unify(arg2, 3))
3617 {
3618 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term3")))
3619 {
3620 yield return true;
3621 yield break;
3622 }
3623 }
3624 }
3625 }
3626 {
3627 foreach (bool l2 in YP.unify(arg1, Atom.a("read")))
3628 {
3629 foreach (bool l3 in YP.unify(arg2, 1))
3630 {
3631 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read1")))
3632 {
3633 yield return true;
3634 yield break;
3635 }
3636 }
3637 }
3638 }
3639 {
3640 foreach (bool l2 in YP.unify(arg1, Atom.a("read")))
3641 {
3642 foreach (bool l3 in YP.unify(arg2, 2))
3643 {
3644 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read2")))
3645 {
3646 yield return true;
3647 yield break;
3648 }
3649 }
3650 }
3651 }
3652 }
3653
3654 public static IEnumerable<bool> compileTerm(object arg1, object arg2, object arg3)
3655 {
3656 {
3657 object Term = arg1;
3658 object State = arg2;
3659 Variable VariableName = new Variable();
3660 foreach (bool l2 in YP.unify(arg3, new Functor1("var", VariableName)))
3661 {
3662 if (YP.var(Term))
3663 {
3664 foreach (bool l4 in CompilerState.getVariableName(State, Term, VariableName))
3665 {
3666 yield return true;
3667 yield break;
3668 }
3669 }
3670 }
3671 }
3672 {
3673 object _State = arg2;
3674 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3675 {
3676 foreach (bool l3 in YP.unify(arg3, new Functor1("var", Atom.a("Atom.NIL"))))
3677 {
3678 yield return true;
3679 yield break;
3680 }
3681 }
3682 }
3683 {
3684 object Term = arg1;
3685 object State = arg2;
3686 object Code = arg3;
3687 Variable ModuleCode = new Variable();
3688 if (YP.atom(Term))
3689 {
3690 foreach (bool l3 in compileAtomModule(Term, 0, State, ModuleCode))
3691 {
3692 foreach (bool l4 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), new ListPair(ModuleCode, Atom.NIL)))))
3693 {
3694 yield return true;
3695 yield break;
3696 }
3697 goto cutIf1;
3698 }
3699 foreach (bool l3 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), Atom.NIL))))
3700 {
3701 yield return true;
3702 yield break;
3703 }
3704 cutIf1:
3705 { }
3706 }
3707 }
3708 {
3709 object State = arg2;
3710 Variable First = new Variable();
3711 Variable Rest = new Variable();
3712 Variable CompiledList = new Variable();
3713 Variable x5 = new Variable();
3714 Variable Rest2 = new Variable();
3715 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3716 {
3717 foreach (bool l3 in YP.unify(arg3, new Functor2("call", Atom.a("ListPair.make"), new ListPair(new Functor1("objectArray", CompiledList), Atom.NIL))))
3718 {
3719 if (YP.nonvar(Rest))
3720 {
3721 foreach (bool l5 in YP.unify(Rest, new ListPair(x5, Rest2)))
3722 {
3723 if (YP.termNotEqual(Rest2, Atom.NIL))
3724 {
3725 foreach (bool l7 in maplist_compileTerm(new ListPair(First, Rest), State, CompiledList))
3726 {
3727 yield return true;
3728 yield break;
3729 }
3730 }
3731 }
3732 }
3733 }
3734 }
3735 }
3736 {
3737 object State = arg2;
3738 Variable First = new Variable();
3739 Variable Rest = new Variable();
3740 Variable Arg1 = new Variable();
3741 Variable Arg2 = new Variable();
3742 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3743 {
3744 foreach (bool l3 in YP.unify(arg3, new Functor2("new", Atom.a("ListPair"), new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))
3745 {
3746 foreach (bool l4 in compileTerm(First, State, Arg1))
3747 {
3748 foreach (bool l5 in compileTerm(Rest, State, Arg2))
3749 {
3750 yield return true;
3751 yield break;
3752 }
3753 }
3754 }
3755 }
3756 }
3757 {
3758 object Term = arg1;
3759 object State = arg2;
3760 object Result = arg3;
3761 Variable Name = new Variable();
3762 Variable TermArgs = new Variable();
3763 Variable x6 = new Variable();
3764 Variable Arity = new Variable();
3765 Variable ModuleCode = new Variable();
3766 Variable NameCode = new Variable();
3767 Variable X1 = new Variable();
3768 Variable Arg1 = new Variable();
3769 Variable X2 = new Variable();
3770 Variable Arg2 = new Variable();
3771 Variable X3 = new Variable();
3772 Variable Arg3 = new Variable();
3773 Variable Args = new Variable();
3774 foreach (bool l2 in YP.univ(Term, new ListPair(Name, TermArgs)))
3775 {
3776 if (YP.termEqual(TermArgs, Atom.NIL))
3777 {
3778 foreach (bool l4 in YP.unify(Result, new Functor1("object", Name)))
3779 {
3780 yield return true;
3781 yield break;
3782 }
3783 goto cutIf2;
3784 }
3785 foreach (bool l3 in YP.functor(Term, x6, Arity))
3786 {
3787 foreach (bool l4 in compileAtomModule(Name, Arity, State, ModuleCode))
3788 {
3789 foreach (bool l5 in YP.unify(NameCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Name), new ListPair(ModuleCode, Atom.NIL)))))
3790 {
3791 foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
3792 {
3793 foreach (bool l7 in compileTerm(X1, State, Arg1))
3794 {
3795 foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL)))))
3796 {
3797 yield return true;
3798 yield break;
3799 }
3800 }
3801 goto cutIf4;
3802 }
3803 foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
3804 {
3805 foreach (bool l7 in compileTerm(X1, State, Arg1))
3806 {
3807 foreach (bool l8 in compileTerm(X2, State, Arg2))
3808 {
3809 foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 }))))
3810 {
3811 yield return true;
3812 yield break;
3813 }
3814 }
3815 }
3816 goto cutIf5;
3817 }
3818 foreach (bool l6 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 })))
3819 {
3820 foreach (bool l7 in compileTerm(X1, State, Arg1))
3821 {
3822 foreach (bool l8 in compileTerm(X2, State, Arg2))
3823 {
3824 foreach (bool l9 in compileTerm(X3, State, Arg3))
3825 {
3826 foreach (bool l10 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 }))))
3827 {
3828 yield return true;
3829 yield break;
3830 }
3831 }
3832 }
3833 }
3834 }
3835 foreach (bool l6 in maplist_compileTerm(TermArgs, State, Args))
3836 {
3837 foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL)))))
3838 {
3839 yield return true;
3840 yield break;
3841 }
3842 }
3843 cutIf5:
3844 cutIf4:
3845 { }
3846 }
3847 goto cutIf3;
3848 }
3849 foreach (bool l4 in YP.unify(NameCode, new Functor1("object", Name)))
3850 {
3851 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
3852 {
3853 foreach (bool l6 in compileTerm(X1, State, Arg1))
3854 {
3855 foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL)))))
3856 {
3857 yield return true;
3858 yield break;
3859 }
3860 }
3861 goto cutIf6;
3862 }
3863 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
3864 {
3865 foreach (bool l6 in compileTerm(X1, State, Arg1))
3866 {
3867 foreach (bool l7 in compileTerm(X2, State, Arg2))
3868 {
3869 foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 }))))
3870 {
3871 yield return true;
3872 yield break;
3873 }
3874 }
3875 }
3876 goto cutIf7;
3877 }
3878 foreach (bool l5 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 })))
3879 {
3880 foreach (bool l6 in compileTerm(X1, State, Arg1))
3881 {
3882 foreach (bool l7 in compileTerm(X2, State, Arg2))
3883 {
3884 foreach (bool l8 in compileTerm(X3, State, Arg3))
3885 {
3886 foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 }))))
3887 {
3888 yield return true;
3889 yield break;
3890 }
3891 }
3892 }
3893 }
3894 }
3895 foreach (bool l5 in maplist_compileTerm(TermArgs, State, Args))
3896 {
3897 foreach (bool l6 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL)))))
3898 {
3899 yield return true;
3900 yield break;
3901 }
3902 }
3903 cutIf7:
3904 cutIf6:
3905 { }
3906 }
3907 cutIf3:
3908 { }
3909 }
3910 cutIf2:
3911 { }
3912 }
3913 }
3914 }
3915
3916 public static IEnumerable<bool> compileAtomModule(object Name, object arg2, object arg3, object ModuleCode)
3917 {
3918 {
3919 object Arity = arg2;
3920 object State = arg3;
3921 if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a("")))
3922 {
3923 foreach (bool l3 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Atom.a("")), Atom.NIL))))
3924 {
3925 yield return true;
3926 yield break;
3927 }
3928 }
3929 }
3930 {
3931 object _Arity = arg2;
3932 object _State = arg3;
3933 Variable Module = new Variable();
3934 foreach (bool l2 in Atom.module(Name, Module))
3935 {
3936 if (YP.termNotEqual(Module, Atom.NIL))
3937 {
3938 foreach (bool l4 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Module), Atom.NIL))))
3939 {
3940 yield return true;
3941 yield break;
3942 }
3943 }
3944 }
3945 }
3946 }
3947
3948 public static IEnumerable<bool> maplist_compileTerm(object arg1, object arg2, object arg3)
3949 {
3950 {
3951 object _State = arg2;
3952 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3953 {
3954 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
3955 {
3956 yield return true;
3957 yield break;
3958 }
3959 }
3960 }
3961 {
3962 object State = arg2;
3963 Variable First = new Variable();
3964 Variable Rest = new Variable();
3965 Variable FirstResult = new Variable();
3966 Variable RestResults = new Variable();
3967 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3968 {
3969 foreach (bool l3 in YP.unify(arg3, new ListPair(FirstResult, RestResults)))
3970 {
3971 if (YP.nonvar(Rest))
3972 {
3973 foreach (bool l5 in compileTerm(First, State, FirstResult))
3974 {
3975 foreach (bool l6 in maplist_compileTerm(Rest, State, RestResults))
3976 {
3977 yield return true;
3978 yield break;
3979 }
3980 }
3981 }
3982 }
3983 }
3984 }
3985 }
3986
3987 public static IEnumerable<bool> compileExpression(object Term, object State, object Result)
3988 {
3989 {
3990 Variable Name = new Variable();
3991 Variable TermArgs = new Variable();
3992 Variable X1 = new Variable();
3993 Variable FunctionName = new Variable();
3994 Variable Arg1 = new Variable();
3995 Variable x9 = new Variable();
3996 Variable X2 = new Variable();
3997 Variable Arg2 = new Variable();
3998 Variable x12 = new Variable();
3999 Variable Arity = new Variable();
4000 if (YP.nonvar(Term))
4001 {
4002 foreach (bool l3 in YP.univ(Term, new ListPair(Name, TermArgs)))
4003 {
4004 if (YP.atom(Name))
4005 {
4006 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
4007 {
4008 foreach (bool l6 in unaryFunction(Name, FunctionName))
4009 {
4010 foreach (bool l7 in compileExpression(X1, State, Arg1))
4011 {
4012 foreach (bool l8 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, Atom.NIL))))
4013 {
4014 yield return true;
4015 yield break;
4016 }
4017 }
4018 goto cutIf1;
4019 }
4020 }
4021 foreach (bool l5 in YP.unify(Term, new ListPair(x9, Atom.NIL)))
4022 {
4023 foreach (bool l6 in compileTerm(Term, State, Result))
4024 {
4025 yield return true;
4026 yield break;
4027 }
4028 goto cutIf2;
4029 }
4030 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
4031 {
4032 foreach (bool l6 in binaryFunction(Name, FunctionName))
4033 {
4034 foreach (bool l7 in compileExpression(X1, State, Arg1))
4035 {
4036 foreach (bool l8 in compileExpression(X2, State, Arg2))
4037 {
4038 foreach (bool l9 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))
4039 {
4040 yield return true;
4041 yield break;
4042 }
4043 }
4044 }
4045 goto cutIf3;
4046 }
4047 }
4048 foreach (bool l5 in YP.functor(Term, x12, Arity))
4049 {
4050 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("evaluable"), new Functor2("/", Name, Arity)), Atom.a("Not an expression function")));
4051 yield return false;
4052 }
4053 cutIf3:
4054 cutIf2:
4055 cutIf1:
4056 { }
4057 }
4058 }
4059 }
4060 }
4061 {
4062 foreach (bool l2 in compileTerm(Term, State, Result))
4063 {
4064 yield return true;
4065 yield break;
4066 }
4067 }
4068 }
4069
4070 public static IEnumerable<bool> unaryFunction(object arg1, object arg2)
4071 {
4072 {
4073 foreach (bool l2 in YP.unify(arg1, Atom.a("-")))
4074 {
4075 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.negate")))
4076 {
4077 yield return true;
4078 yield break;
4079 }
4080 }
4081 }
4082 {
4083 foreach (bool l2 in YP.unify(arg1, Atom.a("abs")))
4084 {
4085 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.abs")))
4086 {
4087 yield return true;
4088 yield break;
4089 }
4090 }
4091 }
4092 {
4093 foreach (bool l2 in YP.unify(arg1, Atom.a("sign")))
4094 {
4095 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sign")))
4096 {
4097 yield return true;
4098 yield break;
4099 }
4100 }
4101 }
4102 {
4103 foreach (bool l2 in YP.unify(arg1, Atom.a("float")))
4104 {
4105 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.toFloat")))
4106 {
4107 yield return true;
4108 yield break;
4109 }
4110 }
4111 }
4112 {
4113 foreach (bool l2 in YP.unify(arg1, Atom.a("floor")))
4114 {
4115 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.floor")))
4116 {
4117 yield return true;
4118 yield break;
4119 }
4120 }
4121 }
4122 {
4123 foreach (bool l2 in YP.unify(arg1, Atom.a("truncate")))
4124 {
4125 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.truncate")))
4126 {
4127 yield return true;
4128 yield break;
4129 }
4130 }
4131 }
4132 {
4133 foreach (bool l2 in YP.unify(arg1, Atom.a("round")))
4134 {
4135 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.round")))
4136 {
4137 yield return true;
4138 yield break;
4139 }
4140 }
4141 }
4142 {
4143 foreach (bool l2 in YP.unify(arg1, Atom.a("ceiling")))
4144 {
4145 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.ceiling")))
4146 {
4147 yield return true;
4148 yield break;
4149 }
4150 }
4151 }
4152 {
4153 foreach (bool l2 in YP.unify(arg1, Atom.a("sin")))
4154 {
4155 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sin")))
4156 {
4157 yield return true;
4158 yield break;
4159 }
4160 }
4161 }
4162 {
4163 foreach (bool l2 in YP.unify(arg1, Atom.a("cos")))
4164 {
4165 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.cos")))
4166 {
4167 yield return true;
4168 yield break;
4169 }
4170 }
4171 }
4172 {
4173 foreach (bool l2 in YP.unify(arg1, Atom.a("atan")))
4174 {
4175 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.atan")))
4176 {
4177 yield return true;
4178 yield break;
4179 }
4180 }
4181 }
4182 {
4183 foreach (bool l2 in YP.unify(arg1, Atom.a("exp")))
4184 {
4185 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.exp")))
4186 {
4187 yield return true;
4188 yield break;
4189 }
4190 }
4191 }
4192 {
4193 foreach (bool l2 in YP.unify(arg1, Atom.a("log")))
4194 {
4195 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.log")))
4196 {
4197 yield return true;
4198 yield break;
4199 }
4200 }
4201 }
4202 {
4203 foreach (bool l2 in YP.unify(arg1, Atom.a("sqrt")))
4204 {
4205 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sqrt")))
4206 {
4207 yield return true;
4208 yield break;
4209 }
4210 }
4211 }
4212 {
4213 foreach (bool l2 in YP.unify(arg1, Atom.a("\\")))
4214 {
4215 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseComplement")))
4216 {
4217 yield return true;
4218 yield break;
4219 }
4220 }
4221 }
4222 }
4223
4224 public static IEnumerable<bool> binaryFunction(object arg1, object arg2)
4225 {
4226 {
4227 foreach (bool l2 in YP.unify(arg1, Atom.a("+")))
4228 {
4229 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.add")))
4230 {
4231 yield return true;
4232 yield break;
4233 }
4234 }
4235 }
4236 {
4237 foreach (bool l2 in YP.unify(arg1, Atom.a("-")))
4238 {
4239 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.subtract")))
4240 {
4241 yield return true;
4242 yield break;
4243 }
4244 }
4245 }
4246 {
4247 foreach (bool l2 in YP.unify(arg1, Atom.a("*")))
4248 {
4249 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.multiply")))
4250 {
4251 yield return true;
4252 yield break;
4253 }
4254 }
4255 }
4256 {
4257 foreach (bool l2 in YP.unify(arg1, Atom.a("/")))
4258 {
4259 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.divide")))
4260 {
4261 yield return true;
4262 yield break;
4263 }
4264 }
4265 }
4266 {
4267 foreach (bool l2 in YP.unify(arg1, Atom.a("//")))
4268 {
4269 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.intDivide")))
4270 {
4271 yield return true;
4272 yield break;
4273 }
4274 }
4275 }
4276 {
4277 foreach (bool l2 in YP.unify(arg1, Atom.a("mod")))
4278 {
4279 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.mod")))
4280 {
4281 yield return true;
4282 yield break;
4283 }
4284 }
4285 }
4286 {
4287 foreach (bool l2 in YP.unify(arg1, Atom.a("**")))
4288 {
4289 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.pow")))
4290 {
4291 yield return true;
4292 yield break;
4293 }
4294 }
4295 }
4296 {
4297 foreach (bool l2 in YP.unify(arg1, Atom.a(">>")))
4298 {
4299 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftRight")))
4300 {
4301 yield return true;
4302 yield break;
4303 }
4304 }
4305 }
4306 {
4307 foreach (bool l2 in YP.unify(arg1, Atom.a("<<")))
4308 {
4309 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftLeft")))
4310 {
4311 yield return true;
4312 yield break;
4313 }
4314 }
4315 }
4316 {
4317 foreach (bool l2 in YP.unify(arg1, Atom.a("/\\")))
4318 {
4319 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseAnd")))
4320 {
4321 yield return true;
4322 yield break;
4323 }
4324 }
4325 }
4326 {
4327 foreach (bool l2 in YP.unify(arg1, Atom.a("\\/")))
4328 {
4329 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseOr")))
4330 {
4331 yield return true;
4332 yield break;
4333 }
4334 }
4335 }
4336 {
4337 foreach (bool l2 in YP.unify(arg1, Atom.a("min")))
4338 {
4339 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.min")))
4340 {
4341 yield return true;
4342 yield break;
4343 }
4344 }
4345 }
4346 {
4347 foreach (bool l2 in YP.unify(arg1, Atom.a("max")))
4348 {
4349 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.max")))
4350 {
4351 yield return true;
4352 yield break;
4353 }
4354 }
4355 }
4356 }
4357
4358 public static void convertFunctionCSharp(object arg1)
4359 {
4360 {
4361 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
4362 {
4363 YP.write(Atom.a("public class YPInnerClass {}"));
4364 YP.nl();
4365 YP.write(Atom.a("public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }"));
4366 YP.nl();
4367 YP.nl();
4368 return;
4369 }
4370 }
4371 {
4372 Variable ReturnType = new Variable();
4373 Variable Name = new Variable();
4374 Variable ArgList = new Variable();
4375 Variable Body = new Variable();
4376 Variable Level = new Variable();
4377 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { ReturnType, Name, ArgList, Body })))
4378 {
4379 YP.write(Atom.a("public static "));
4380 YP.write(ReturnType);
4381 YP.write(Atom.a(" "));
4382 YP.write(Name);
4383 YP.write(Atom.a("("));
4384 convertArgListCSharp(ArgList);
4385 YP.write(Atom.a(") {"));
4386 YP.nl();
4387 foreach (bool l3 in YP.unify(Level, 1))
4388 {
4389 convertStatementListCSharp(Body, Level);
4390 YP.write(Atom.a("}"));
4391 YP.nl();
4392 YP.nl();
4393 return;
4394 }
4395 }
4396 }
4397 }
4398
4399 public static IEnumerable<bool> convertStatementListCSharp(object arg1, object x1, object x2)
4400 {
4401 {
4402 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4403 {
4404 yield return true;
4405 yield break;
4406 }
4407 }
4408 }
4409
4410 public static void convertStatementListCSharp(object arg1, object Level)
4411 {
4412 {
4413 Variable Name = new Variable();
4414 Variable Body = new Variable();
4415 Variable RestStatements = new Variable();
4416 Variable NewStatements = new Variable();
4417 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
4418 {
4419 foreach (bool l3 in append(Body, new ListPair(new Functor1("label", Name), RestStatements), NewStatements))
4420 {
4421 convertStatementListCSharp(NewStatements, Level);
4422 return;
4423 }
4424 }
4425 }
4426 {
4427 Variable Type = new Variable();
4428 Variable Name = new Variable();
4429 Variable Expression = new Variable();
4430 Variable RestStatements = new Variable();
4431 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", Type, Name, Expression), RestStatements)))
4432 {
4433 convertIndentationCSharp(Level);
4434 YP.write(Type);
4435 YP.write(Atom.a(" "));
4436 YP.write(Name);
4437 YP.write(Atom.a(" = "));
4438 convertExpressionCSharp(Expression);
4439 YP.write(Atom.a(";"));
4440 YP.nl();
4441 convertStatementListCSharp(RestStatements, Level);
4442 return;
4443 }
4444 }
4445 {
4446 Variable Name = new Variable();
4447 Variable Expression = new Variable();
4448 Variable RestStatements = new Variable();
4449 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
4450 {
4451 convertIndentationCSharp(Level);
4452 YP.write(Name);
4453 YP.write(Atom.a(" = "));
4454 convertExpressionCSharp(Expression);
4455 YP.write(Atom.a(";"));
4456 YP.nl();
4457 convertStatementListCSharp(RestStatements, Level);
4458 return;
4459 }
4460 }
4461 {
4462 Variable RestStatements = new Variable();
4463 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
4464 {
4465 convertIndentationCSharp(Level);
4466 YP.write(Atom.a("yield return true;"));
4467 YP.nl();
4468 convertStatementListCSharp(RestStatements, Level);
4469 return;
4470 }
4471 }
4472 {
4473 Variable RestStatements = new Variable();
4474 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
4475 {
4476 convertIndentationCSharp(Level);
4477 YP.write(Atom.a("yield return false;"));
4478 YP.nl();
4479 convertStatementListCSharp(RestStatements, Level);
4480 return;
4481 }
4482 }
4483 {
4484 Variable RestStatements = new Variable();
4485 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
4486 {
4487 convertIndentationCSharp(Level);
4488 YP.write(Atom.a("yield break;"));
4489 YP.nl();
4490 convertStatementListCSharp(RestStatements, Level);
4491 return;
4492 }
4493 }
4494 {
4495 Variable RestStatements = new Variable();
4496 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
4497 {
4498 convertIndentationCSharp(Level);
4499 YP.write(Atom.a("return;"));
4500 YP.nl();
4501 convertStatementListCSharp(RestStatements, Level);
4502 return;
4503 }
4504 }
4505 {
4506 Variable RestStatements = new Variable();
4507 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
4508 {
4509 convertIndentationCSharp(Level);
4510 YP.write(Atom.a("return true;"));
4511 YP.nl();
4512 convertStatementListCSharp(RestStatements, Level);
4513 return;
4514 }
4515 }
4516 {
4517 Variable RestStatements = new Variable();
4518 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
4519 {
4520 convertIndentationCSharp(Level);
4521 YP.write(Atom.a("return false;"));
4522 YP.nl();
4523 convertStatementListCSharp(RestStatements, Level);
4524 return;
4525 }
4526 }
4527 {
4528 Variable Name = new Variable();
4529 Variable RestStatements = new Variable();
4530 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("label", Name), RestStatements)))
4531 {
4532 convertIndentationCSharp(Level);
4533 YP.write(Name);
4534 YP.write(Atom.a(":"));
4535 YP.nl();
4536 if (YP.termEqual(RestStatements, Atom.NIL))
4537 {
4538 convertIndentationCSharp(Level);
4539 YP.write(Atom.a("{}"));
4540 YP.nl();
4541 convertStatementListCSharp(RestStatements, Level);
4542 return;
4543 goto cutIf1;
4544 }
4545 convertStatementListCSharp(RestStatements, Level);
4546 return;
4547 cutIf1:
4548 { }
4549 }
4550 }
4551 {
4552 Variable Name = new Variable();
4553 Variable RestStatements = new Variable();
4554 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
4555 {
4556 convertIndentationCSharp(Level);
4557 YP.write(Atom.a("goto "));
4558 YP.write(Name);
4559 YP.write(Atom.a(";"));
4560 YP.nl();
4561 convertStatementListCSharp(RestStatements, Level);
4562 return;
4563 }
4564 }
4565 {
4566 Variable Name = new Variable();
4567 Variable ArgList = new Variable();
4568 Variable RestStatements = new Variable();
4569 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
4570 {
4571 convertIndentationCSharp(Level);
4572 YP.write(Name);
4573 YP.write(Atom.a("("));
4574 convertArgListCSharp(ArgList);
4575 YP.write(Atom.a(");"));
4576 YP.nl();
4577 convertStatementListCSharp(RestStatements, Level);
4578 return;
4579 }
4580 }
4581 {
4582 Variable Name = new Variable();
4583 Variable _FunctorArgs = new Variable();
4584 Variable ArgList = new Variable();
4585 Variable RestStatements = new Variable();
4586 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
4587 {
4588 convertStatementListCSharp(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level);
4589 return;
4590 }
4591 }
4592 {
4593 Variable Obj = new Variable();
4594 Variable Name = new Variable();
4595 Variable ArgList = new Variable();
4596 Variable RestStatements = new Variable();
4597 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
4598 {
4599 convertIndentationCSharp(Level);
4600 YP.write(Obj);
4601 YP.write(Atom.a("."));
4602 YP.write(Name);
4603 YP.write(Atom.a("("));
4604 convertArgListCSharp(ArgList);
4605 YP.write(Atom.a(");"));
4606 YP.nl();
4607 convertStatementListCSharp(RestStatements, Level);
4608 return;
4609 }
4610 }
4611 {
4612 Variable Body = new Variable();
4613 Variable RestStatements = new Variable();
4614 Variable NextLevel = new Variable();
4615 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
4616 {
4617 convertIndentationCSharp(Level);
4618 YP.write(Atom.a("{"));
4619 YP.nl();
4620 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4621 {
4622 convertStatementListCSharp(Body, NextLevel);
4623 convertIndentationCSharp(Level);
4624 YP.write(Atom.a("}"));
4625 YP.nl();
4626 convertStatementListCSharp(RestStatements, Level);
4627 return;
4628 }
4629 }
4630 }
4631 {
4632 Variable Expression = new Variable();
4633 Variable Body = new Variable();
4634 Variable RestStatements = new Variable();
4635 Variable NextLevel = new Variable();
4636 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
4637 {
4638 convertIndentationCSharp(Level);
4639 YP.write(Atom.a("if ("));
4640 convertExpressionCSharp(Expression);
4641 YP.write(Atom.a(") {"));
4642 YP.nl();
4643 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4644 {
4645 convertStatementListCSharp(Body, NextLevel);
4646 convertIndentationCSharp(Level);
4647 YP.write(Atom.a("}"));
4648 YP.nl();
4649 convertStatementListCSharp(RestStatements, Level);
4650 return;
4651 }
4652 }
4653 }
4654 {
4655 Variable Expression = new Variable();
4656 Variable Body = new Variable();
4657 Variable RestStatements = new Variable();
4658 Variable NextLevel = new Variable();
4659 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
4660 {
4661 convertIndentationCSharp(Level);
4662 YP.write(Atom.a("foreach (bool l"));
4663 YP.write(Level);
4664 YP.write(Atom.a(" in "));
4665 convertExpressionCSharp(Expression);
4666 YP.write(Atom.a(") {"));
4667 YP.nl();
4668 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4669 {
4670 convertStatementListCSharp(Body, NextLevel);
4671 convertIndentationCSharp(Level);
4672 YP.write(Atom.a("}"));
4673 YP.nl();
4674 convertStatementListCSharp(RestStatements, Level);
4675 return;
4676 }
4677 }
4678 }
4679 {
4680 Variable Expression = new Variable();
4681 Variable RestStatements = new Variable();
4682 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
4683 {
4684 convertIndentationCSharp(Level);
4685 YP.write(Atom.a("throw "));
4686 convertExpressionCSharp(Expression);
4687 YP.write(Atom.a(";"));
4688 YP.nl();
4689 convertStatementListCSharp(RestStatements, Level);
4690 return;
4691 }
4692 }
4693 }
4694
4695 public static void convertIndentationCSharp(object Level)
4696 {
4697 {
4698 Variable N = new Variable();
4699 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
4700 {
4701 repeatWrite(Atom.a(" "), N);
4702 return;
4703 }
4704 }
4705 }
4706
4707 public static void convertArgListCSharp(object arg1)
4708 {
4709 {
4710 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4711 {
4712 return;
4713 }
4714 }
4715 {
4716 Variable Head = new Variable();
4717 Variable Tail = new Variable();
4718 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
4719 {
4720 convertExpressionCSharp(Head);
4721 if (YP.termNotEqual(Tail, Atom.NIL))
4722 {
4723 YP.write(Atom.a(", "));
4724 convertArgListCSharp(Tail);
4725 return;
4726 goto cutIf1;
4727 }
4728 convertArgListCSharp(Tail);
4729 return;
4730 cutIf1:
4731 { }
4732 }
4733 }
4734 }
4735
4736 public static void convertExpressionCSharp(object arg1)
4737 {
4738 {
4739 Variable X = new Variable();
4740 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
4741 {
4742 YP.write(Atom.a("object "));
4743 YP.write(X);
4744 return;
4745 }
4746 }
4747 {
4748 Variable Name = new Variable();
4749 Variable ArgList = new Variable();
4750 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
4751 {
4752 YP.write(Name);
4753 YP.write(Atom.a("("));
4754 convertArgListCSharp(ArgList);
4755 YP.write(Atom.a(")"));
4756 return;
4757 }
4758 }
4759 {
4760 Variable Name = new Variable();
4761 Variable _FunctorArgs = new Variable();
4762 Variable ArgList = new Variable();
4763 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
4764 {
4765 convertExpressionCSharp(new Functor2("call", Name, ArgList));
4766 return;
4767 }
4768 }
4769 {
4770 Variable Obj = new Variable();
4771 Variable Name = new Variable();
4772 Variable ArgList = new Variable();
4773 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
4774 {
4775 YP.write(Obj);
4776 YP.write(Atom.a("."));
4777 YP.write(Name);
4778 YP.write(Atom.a("("));
4779 convertArgListCSharp(ArgList);
4780 YP.write(Atom.a(")"));
4781 return;
4782 }
4783 }
4784 {
4785 Variable Name = new Variable();
4786 Variable ArgList = new Variable();
4787 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
4788 {
4789 YP.write(Atom.a("new "));
4790 YP.write(Name);
4791 YP.write(Atom.a("("));
4792 convertArgListCSharp(ArgList);
4793 YP.write(Atom.a(")"));
4794 return;
4795 }
4796 }
4797 {
4798 Variable Name = new Variable();
4799 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
4800 {
4801 YP.write(Name);
4802 return;
4803 }
4804 }
4805 {
4806 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
4807 {
4808 YP.write(Atom.a("null"));
4809 return;
4810 }
4811 }
4812 {
4813 Variable X = new Variable();
4814 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
4815 {
4816 YP.write(Atom.a("!("));
4817 convertExpressionCSharp(X);
4818 YP.write(Atom.a(")"));
4819 return;
4820 }
4821 }
4822 {
4823 Variable X = new Variable();
4824 Variable Y = new Variable();
4825 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
4826 {
4827 YP.write(Atom.a("("));
4828 convertExpressionCSharp(X);
4829 YP.write(Atom.a(") && ("));
4830 convertExpressionCSharp(Y);
4831 YP.write(Atom.a(")"));
4832 return;
4833 }
4834 }
4835 {
4836 Variable ArgList = new Variable();
4837 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
4838 {
4839 YP.write(Atom.a("new object[] {"));
4840 convertArgListCSharp(ArgList);
4841 YP.write(Atom.a("}"));
4842 return;
4843 }
4844 }
4845 {
4846 Variable X = new Variable();
4847 Variable Codes = new Variable();
4848 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
4849 {
4850 if (YP.atom(X))
4851 {
4852 YP.write(Atom.a("\""));
4853 foreach (bool l4 in YP.atom_codes(X, Codes))
4854 {
4855 convertStringCodesCSharp(Codes);
4856 YP.write(Atom.a("\""));
4857 return;
4858 }
4859 }
4860 }
4861 }
4862 {
4863 Variable X = new Variable();
4864 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
4865 {
4866 YP.write(X);
4867 return;
4868 }
4869 }
4870 }
4871
4872 public static void convertStringCodesCSharp(object arg1)
4873 {
4874 {
4875 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4876 {
4877 return;
4878 }
4879 }
4880 {
4881 Variable Code = new Variable();
4882 Variable RestCodes = new Variable();
4883 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
4884 {
4885 foreach (bool l3 in putCStringCode(Code))
4886 {
4887 convertStringCodesCSharp(RestCodes);
4888 return;
4889 }
4890 }
4891 }
4892 }
4893
4894 public static void convertFunctionJavascript(object arg1)
4895 {
4896 {
4897 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
4898 {
4899 YP.write(Atom.a("function getDeclaringClass() { return null; }"));
4900 YP.nl();
4901 YP.nl();
4902 return;
4903 }
4904 }
4905 {
4906 Variable x1 = new Variable();
4907 Variable Name = new Variable();
4908 Variable ArgList = new Variable();
4909 Variable Body = new Variable();
4910 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body })))
4911 {
4912 YP.write(Atom.a("function "));
4913 YP.write(Name);
4914 YP.write(Atom.a("("));
4915 convertArgListJavascript(ArgList);
4916 YP.write(Atom.a(") {"));
4917 YP.nl();
4918 convertStatementListJavascript(Body, 1);
4919 YP.write(Atom.a("}"));
4920 YP.nl();
4921 YP.nl();
4922 return;
4923 }
4924 }
4925 }
4926
4927 public static void convertStatementListJavascript(object arg1, object arg2)
4928 {
4929 {
4930 object x1 = arg2;
4931 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4932 {
4933 return;
4934 }
4935 }
4936 {
4937 object Level = arg2;
4938 Variable Name = new Variable();
4939 Variable Body = new Variable();
4940 Variable RestStatements = new Variable();
4941 Variable NextLevel = new Variable();
4942 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
4943 {
4944 convertIndentationJavascript(Level);
4945 YP.write(Name);
4946 YP.write(Atom.a(":"));
4947 YP.nl();
4948 convertIndentationJavascript(Level);
4949 YP.write(Atom.a("{"));
4950 YP.nl();
4951 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4952 {
4953 convertStatementListJavascript(Body, NextLevel);
4954 convertIndentationJavascript(Level);
4955 YP.write(Atom.a("}"));
4956 YP.nl();
4957 convertStatementListJavascript(RestStatements, Level);
4958 return;
4959 }
4960 }
4961 }
4962 {
4963 object Level = arg2;
4964 Variable _Type = new Variable();
4965 Variable Name = new Variable();
4966 Variable Expression = new Variable();
4967 Variable RestStatements = new Variable();
4968 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements)))
4969 {
4970 convertIndentationJavascript(Level);
4971 YP.write(Atom.a("var "));
4972 YP.write(Name);
4973 YP.write(Atom.a(" = "));
4974 convertExpressionJavascript(Expression);
4975 YP.write(Atom.a(";"));
4976 YP.nl();
4977 convertStatementListJavascript(RestStatements, Level);
4978 return;
4979 }
4980 }
4981 {
4982 object Level = arg2;
4983 Variable Name = new Variable();
4984 Variable Expression = new Variable();
4985 Variable RestStatements = new Variable();
4986 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
4987 {
4988 convertIndentationJavascript(Level);
4989 YP.write(Name);
4990 YP.write(Atom.a(" = "));
4991 convertExpressionJavascript(Expression);
4992 YP.write(Atom.a(";"));
4993 YP.nl();
4994 convertStatementListJavascript(RestStatements, Level);
4995 return;
4996 }
4997 }
4998 {
4999 object Level = arg2;
5000 Variable RestStatements = new Variable();
5001 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
5002 {
5003 convertIndentationJavascript(Level);
5004 YP.write(Atom.a("yield true;"));
5005 YP.nl();
5006 convertStatementListJavascript(RestStatements, Level);
5007 return;
5008 }
5009 }
5010 {
5011 object Level = arg2;
5012 Variable RestStatements = new Variable();
5013 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
5014 {
5015 convertIndentationJavascript(Level);
5016 YP.write(Atom.a("yield false;"));
5017 YP.nl();
5018 convertStatementListJavascript(RestStatements, Level);
5019 return;
5020 }
5021 }
5022 {
5023 object Level = arg2;
5024 Variable RestStatements = new Variable();
5025 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
5026 {
5027 convertIndentationJavascript(Level);
5028 YP.write(Atom.a("return;"));
5029 YP.nl();
5030 convertStatementListJavascript(RestStatements, Level);
5031 return;
5032 }
5033 }
5034 {
5035 object Level = arg2;
5036 Variable RestStatements = new Variable();
5037 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
5038 {
5039 convertIndentationJavascript(Level);
5040 YP.write(Atom.a("return;"));
5041 YP.nl();
5042 convertStatementListJavascript(RestStatements, Level);
5043 return;
5044 }
5045 }
5046 {
5047 object Level = arg2;
5048 Variable RestStatements = new Variable();
5049 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
5050 {
5051 convertIndentationJavascript(Level);
5052 YP.write(Atom.a("return true;"));
5053 YP.nl();
5054 convertStatementListJavascript(RestStatements, Level);
5055 return;
5056 }
5057 }
5058 {
5059 object Level = arg2;
5060 Variable RestStatements = new Variable();
5061 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
5062 {
5063 convertIndentationJavascript(Level);
5064 YP.write(Atom.a("return false;"));
5065 YP.nl();
5066 convertStatementListJavascript(RestStatements, Level);
5067 return;
5068 }
5069 }
5070 {
5071 object Level = arg2;
5072 Variable Name = new Variable();
5073 Variable RestStatements = new Variable();
5074 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
5075 {
5076 convertIndentationJavascript(Level);
5077 YP.write(Atom.a("break "));
5078 YP.write(Name);
5079 YP.write(Atom.a(";"));
5080 YP.nl();
5081 convertStatementListJavascript(RestStatements, Level);
5082 return;
5083 }
5084 }
5085 {
5086 object Level = arg2;
5087 Variable Name = new Variable();
5088 Variable ArgList = new Variable();
5089 Variable RestStatements = new Variable();
5090 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
5091 {
5092 convertIndentationJavascript(Level);
5093 YP.write(Name);
5094 YP.write(Atom.a("("));
5095 convertArgListJavascript(ArgList);
5096 YP.write(Atom.a(");"));
5097 YP.nl();
5098 convertStatementListJavascript(RestStatements, Level);
5099 return;
5100 }
5101 }
5102 {
5103 object Level = arg2;
5104 Variable Name = new Variable();
5105 Variable _FunctorArgs = new Variable();
5106 Variable ArgList = new Variable();
5107 Variable RestStatements = new Variable();
5108 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
5109 {
5110 convertStatementListJavascript(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level);
5111 return;
5112 }
5113 }
5114 {
5115 object Level = arg2;
5116 Variable Obj = new Variable();
5117 Variable Name = new Variable();
5118 Variable ArgList = new Variable();
5119 Variable RestStatements = new Variable();
5120 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
5121 {
5122 convertIndentationJavascript(Level);
5123 YP.write(Obj);
5124 YP.write(Atom.a("."));
5125 YP.write(Name);
5126 YP.write(Atom.a("("));
5127 convertArgListJavascript(ArgList);
5128 YP.write(Atom.a(");"));
5129 YP.nl();
5130 convertStatementListJavascript(RestStatements, Level);
5131 return;
5132 }
5133 }
5134 {
5135 object Level = arg2;
5136 Variable Body = new Variable();
5137 Variable RestStatements = new Variable();
5138 Variable NextLevel = new Variable();
5139 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
5140 {
5141 convertIndentationJavascript(Level);
5142 YP.write(Atom.a("{"));
5143 YP.nl();
5144 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5145 {
5146 convertStatementListJavascript(Body, NextLevel);
5147 convertIndentationJavascript(Level);
5148 YP.write(Atom.a("}"));
5149 YP.nl();
5150 convertStatementListJavascript(RestStatements, Level);
5151 return;
5152 }
5153 }
5154 }
5155 {
5156 object Level = arg2;
5157 Variable Expression = new Variable();
5158 Variable Body = new Variable();
5159 Variable RestStatements = new Variable();
5160 Variable NextLevel = new Variable();
5161 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
5162 {
5163 convertIndentationJavascript(Level);
5164 YP.write(Atom.a("if ("));
5165 convertExpressionJavascript(Expression);
5166 YP.write(Atom.a(") {"));
5167 YP.nl();
5168 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5169 {
5170 convertStatementListJavascript(Body, NextLevel);
5171 convertIndentationJavascript(Level);
5172 YP.write(Atom.a("}"));
5173 YP.nl();
5174 convertStatementListJavascript(RestStatements, Level);
5175 return;
5176 }
5177 }
5178 }
5179 {
5180 object Level = arg2;
5181 Variable Expression = new Variable();
5182 Variable Body = new Variable();
5183 Variable RestStatements = new Variable();
5184 Variable NextLevel = new Variable();
5185 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
5186 {
5187 convertIndentationJavascript(Level);
5188 YP.write(Atom.a("for each (var l"));
5189 YP.write(Level);
5190 YP.write(Atom.a(" in "));
5191 convertExpressionJavascript(Expression);
5192 YP.write(Atom.a(") {"));
5193 YP.nl();
5194 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5195 {
5196 convertStatementListJavascript(Body, NextLevel);
5197 convertIndentationJavascript(Level);
5198 YP.write(Atom.a("}"));
5199 YP.nl();
5200 convertStatementListJavascript(RestStatements, Level);
5201 return;
5202 }
5203 }
5204 }
5205 {
5206 object Level = arg2;
5207 Variable Expression = new Variable();
5208 Variable RestStatements = new Variable();
5209 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
5210 {
5211 convertIndentationJavascript(Level);
5212 YP.write(Atom.a("throw "));
5213 convertExpressionJavascript(Expression);
5214 YP.write(Atom.a(";"));
5215 YP.nl();
5216 convertStatementListJavascript(RestStatements, Level);
5217 return;
5218 }
5219 }
5220 }
5221
5222 public static void convertIndentationJavascript(object Level)
5223 {
5224 {
5225 Variable N = new Variable();
5226 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
5227 {
5228 repeatWrite(Atom.a(" "), N);
5229 return;
5230 }
5231 }
5232 }
5233
5234 public static void convertArgListJavascript(object arg1)
5235 {
5236 {
5237 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5238 {
5239 return;
5240 }
5241 }
5242 {
5243 Variable Head = new Variable();
5244 Variable Tail = new Variable();
5245 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
5246 {
5247 convertExpressionJavascript(Head);
5248 if (YP.termNotEqual(Tail, Atom.NIL))
5249 {
5250 YP.write(Atom.a(", "));
5251 convertArgListJavascript(Tail);
5252 return;
5253 goto cutIf1;
5254 }
5255 convertArgListJavascript(Tail);
5256 return;
5257 cutIf1:
5258 { }
5259 }
5260 }
5261 }
5262
5263 public static void convertExpressionJavascript(object arg1)
5264 {
5265 {
5266 Variable X = new Variable();
5267 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
5268 {
5269 YP.write(X);
5270 return;
5271 }
5272 }
5273 {
5274 Variable Name = new Variable();
5275 Variable ArgList = new Variable();
5276 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
5277 {
5278 YP.write(Name);
5279 YP.write(Atom.a("("));
5280 convertArgListJavascript(ArgList);
5281 YP.write(Atom.a(")"));
5282 return;
5283 }
5284 }
5285 {
5286 Variable Name = new Variable();
5287 Variable _FunctorArgs = new Variable();
5288 Variable ArgList = new Variable();
5289 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
5290 {
5291 convertExpressionJavascript(new Functor2("call", Name, ArgList));
5292 return;
5293 }
5294 }
5295 {
5296 Variable Obj = new Variable();
5297 Variable Name = new Variable();
5298 Variable ArgList = new Variable();
5299 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
5300 {
5301 YP.write(Obj);
5302 YP.write(Atom.a("."));
5303 YP.write(Name);
5304 YP.write(Atom.a("("));
5305 convertArgListJavascript(ArgList);
5306 YP.write(Atom.a(")"));
5307 return;
5308 }
5309 }
5310 {
5311 Variable Name = new Variable();
5312 Variable ArgList = new Variable();
5313 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
5314 {
5315 YP.write(Atom.a("new "));
5316 YP.write(Name);
5317 YP.write(Atom.a("("));
5318 convertArgListJavascript(ArgList);
5319 YP.write(Atom.a(")"));
5320 return;
5321 }
5322 }
5323 {
5324 Variable Name = new Variable();
5325 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
5326 {
5327 YP.write(Name);
5328 return;
5329 }
5330 }
5331 {
5332 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
5333 {
5334 YP.write(Atom.a("null"));
5335 return;
5336 }
5337 }
5338 {
5339 Variable X = new Variable();
5340 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
5341 {
5342 YP.write(Atom.a("!("));
5343 convertExpressionJavascript(X);
5344 YP.write(Atom.a(")"));
5345 return;
5346 }
5347 }
5348 {
5349 Variable X = new Variable();
5350 Variable Y = new Variable();
5351 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
5352 {
5353 YP.write(Atom.a("("));
5354 convertExpressionJavascript(X);
5355 YP.write(Atom.a(") && ("));
5356 convertExpressionJavascript(Y);
5357 YP.write(Atom.a(")"));
5358 return;
5359 }
5360 }
5361 {
5362 Variable ArgList = new Variable();
5363 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
5364 {
5365 YP.write(Atom.a("["));
5366 convertArgListJavascript(ArgList);
5367 YP.write(Atom.a("]"));
5368 return;
5369 }
5370 }
5371 {
5372 Variable X = new Variable();
5373 Variable Codes = new Variable();
5374 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
5375 {
5376 if (YP.atom(X))
5377 {
5378 YP.write(Atom.a("\""));
5379 foreach (bool l4 in YP.atom_codes(X, Codes))
5380 {
5381 convertStringCodesJavascript(Codes);
5382 YP.write(Atom.a("\""));
5383 return;
5384 }
5385 }
5386 }
5387 }
5388 {
5389 Variable X = new Variable();
5390 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
5391 {
5392 YP.write(X);
5393 return;
5394 }
5395 }
5396 }
5397
5398 public static void convertStringCodesJavascript(object arg1)
5399 {
5400 {
5401 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5402 {
5403 return;
5404 }
5405 }
5406 {
5407 Variable Code = new Variable();
5408 Variable RestCodes = new Variable();
5409 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
5410 {
5411 foreach (bool l3 in putCStringCode(Code))
5412 {
5413 convertStringCodesJavascript(RestCodes);
5414 return;
5415 }
5416 }
5417 }
5418 }
5419
5420 public static void convertFunctionPython(object arg1)
5421 {
5422 {
5423 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
5424 {
5425 YP.write(Atom.a("def getDeclaringClass():"));
5426 YP.nl();
5427 YP.write(Atom.a(" return None"));
5428 YP.nl();
5429 YP.nl();
5430 return;
5431 }
5432 }
5433 {
5434 Variable x1 = new Variable();
5435 Variable Name = new Variable();
5436 Variable ArgList = new Variable();
5437 Variable Body = new Variable();
5438 Variable Level = new Variable();
5439 Variable HasBreakableBlock = new Variable();
5440 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body })))
5441 {
5442 YP.write(Atom.a("def "));
5443 YP.write(Name);
5444 YP.write(Atom.a("("));
5445 convertArgListPython(ArgList);
5446 YP.write(Atom.a("):"));
5447 YP.nl();
5448 foreach (bool l3 in YP.unify(Level, 1))
5449 {
5450 if (hasBreakableBlockPython(Body))
5451 {
5452 foreach (bool l5 in YP.unify(HasBreakableBlock, 1))
5453 {
5454 if (YP.termEqual(HasBreakableBlock, 1))
5455 {
5456 convertIndentationPython(Level);
5457 YP.write(Atom.a("doBreak = False"));
5458 YP.nl();
5459 foreach (bool l7 in convertStatementListPython(Body, Level, HasBreakableBlock))
5460 {
5461 YP.nl();
5462 return;
5463 }
5464 goto cutIf2;
5465 }
5466 foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock))
5467 {
5468 YP.nl();
5469 return;
5470 }
5471 cutIf2:
5472 { }
5473 }
5474 goto cutIf1;
5475 }
5476 foreach (bool l4 in YP.unify(HasBreakableBlock, 0))
5477 {
5478 if (YP.termEqual(HasBreakableBlock, 1))
5479 {
5480 convertIndentationPython(Level);
5481 YP.write(Atom.a("doBreak = False"));
5482 YP.nl();
5483 foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock))
5484 {
5485 YP.nl();
5486 return;
5487 }
5488 goto cutIf3;
5489 }
5490 foreach (bool l5 in convertStatementListPython(Body, Level, HasBreakableBlock))
5491 {
5492 YP.nl();
5493 return;
5494 }
5495 cutIf3:
5496 { }
5497 }
5498 cutIf1:
5499 { }
5500 }
5501 }
5502 }
5503 }
5504
5505 public static bool hasBreakableBlockPython(object arg1)
5506 {
5507 {
5508 Variable _Name = new Variable();
5509 Variable _Body = new Variable();
5510 Variable _RestStatements = new Variable();
5511 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", _Name, _Body), _RestStatements)))
5512 {
5513 return true;
5514 }
5515 }
5516 {
5517 Variable Body = new Variable();
5518 Variable _RestStatements = new Variable();
5519 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), _RestStatements)))
5520 {
5521 if (hasBreakableBlockPython(Body))
5522 {
5523 return true;
5524 }
5525 }
5526 }
5527 {
5528 Variable _Expression = new Variable();
5529 Variable Body = new Variable();
5530 Variable _RestStatements = new Variable();
5531 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", _Expression, Body), _RestStatements)))
5532 {
5533 if (hasBreakableBlockPython(Body))
5534 {
5535 return true;
5536 }
5537 }
5538 }
5539 {
5540 Variable _Expression = new Variable();
5541 Variable Body = new Variable();
5542 Variable _RestStatements = new Variable();
5543 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", _Expression, Body), _RestStatements)))
5544 {
5545 if (hasBreakableBlockPython(Body))
5546 {
5547 return true;
5548 }
5549 }
5550 }
5551 {
5552 Variable x1 = new Variable();
5553 Variable RestStatements = new Variable();
5554 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestStatements)))
5555 {
5556 if (hasBreakableBlockPython(RestStatements))
5557 {
5558 return true;
5559 }
5560 }
5561 }
5562 return false;
5563 }
5564
5565 public static IEnumerable<bool> convertStatementListPython(object arg1, object arg2, object arg3)
5566 {
5567 {
5568 object x1 = arg2;
5569 object x2 = arg3;
5570 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5571 {
5572 yield return true;
5573 yield break;
5574 }
5575 }
5576 {
5577 object Level = arg2;
5578 object HasBreakableBlock = arg3;
5579 Variable Name = new Variable();
5580 Variable Body = new Variable();
5581 Variable RestStatements = new Variable();
5582 Variable NextLevel = new Variable();
5583 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
5584 {
5585 convertIndentationPython(Level);
5586 YP.write(Name);
5587 YP.write(Atom.a(" = False"));
5588 YP.nl();
5589 convertIndentationPython(Level);
5590 YP.write(Atom.a("for _ in [1]:"));
5591 YP.nl();
5592 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5593 {
5594 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5595 {
5596 convertIndentationPython(Level);
5597 YP.write(Atom.a("if "));
5598 YP.write(Name);
5599 YP.write(Atom.a(":"));
5600 YP.nl();
5601 convertIndentationPython(NextLevel);
5602 YP.write(Atom.a("doBreak = False"));
5603 YP.nl();
5604 convertIndentationPython(Level);
5605 YP.write(Atom.a("if doBreak:"));
5606 YP.nl();
5607 convertIndentationPython(NextLevel);
5608 YP.write(Atom.a("break"));
5609 YP.nl();
5610 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5611 {
5612 yield return true;
5613 yield break;
5614 }
5615 }
5616 }
5617 }
5618 }
5619 {
5620 object Level = arg2;
5621 object HasBreakableBlock = arg3;
5622 Variable _Type = new Variable();
5623 Variable Name = new Variable();
5624 Variable Expression = new Variable();
5625 Variable RestStatements = new Variable();
5626 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements)))
5627 {
5628 convertIndentationPython(Level);
5629 YP.write(Name);
5630 YP.write(Atom.a(" = "));
5631 convertExpressionPython(Expression);
5632 YP.nl();
5633 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5634 {
5635 yield return true;
5636 yield break;
5637 }
5638 }
5639 }
5640 {
5641 object Level = arg2;
5642 object HasBreakableBlock = arg3;
5643 Variable Name = new Variable();
5644 Variable Expression = new Variable();
5645 Variable RestStatements = new Variable();
5646 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
5647 {
5648 convertIndentationPython(Level);
5649 YP.write(Name);
5650 YP.write(Atom.a(" = "));
5651 convertExpressionPython(Expression);
5652 YP.nl();
5653 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5654 {
5655 yield return true;
5656 yield break;
5657 }
5658 }
5659 }
5660 {
5661 object Level = arg2;
5662 object HasBreakableBlock = arg3;
5663 Variable RestStatements = new Variable();
5664 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
5665 {
5666 convertIndentationPython(Level);
5667 YP.write(Atom.a("yield True"));
5668 YP.nl();
5669 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5670 {
5671 yield return true;
5672 yield break;
5673 }
5674 }
5675 }
5676 {
5677 object Level = arg2;
5678 object HasBreakableBlock = arg3;
5679 Variable RestStatements = new Variable();
5680 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
5681 {
5682 convertIndentationPython(Level);
5683 YP.write(Atom.a("yield False"));
5684 YP.nl();
5685 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5686 {
5687 yield return true;
5688 yield break;
5689 }
5690 }
5691 }
5692 {
5693 object Level = arg2;
5694 object HasBreakableBlock = arg3;
5695 Variable RestStatements = new Variable();
5696 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
5697 {
5698 convertIndentationPython(Level);
5699 YP.write(Atom.a("return"));
5700 YP.nl();
5701 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5702 {
5703 yield return true;
5704 yield break;
5705 }
5706 }
5707 }
5708 {
5709 object Level = arg2;
5710 object HasBreakableBlock = arg3;
5711 Variable RestStatements = new Variable();
5712 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
5713 {
5714 convertIndentationPython(Level);
5715 YP.write(Atom.a("return"));
5716 YP.nl();
5717 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5718 {
5719 yield return true;
5720 yield break;
5721 }
5722 }
5723 }
5724 {
5725 object Level = arg2;
5726 object HasBreakableBlock = arg3;
5727 Variable RestStatements = new Variable();
5728 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
5729 {
5730 convertIndentationPython(Level);
5731 YP.write(Atom.a("return True"));
5732 YP.nl();
5733 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5734 {
5735 yield return true;
5736 yield break;
5737 }
5738 }
5739 }
5740 {
5741 object Level = arg2;
5742 object HasBreakableBlock = arg3;
5743 Variable RestStatements = new Variable();
5744 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
5745 {
5746 convertIndentationPython(Level);
5747 YP.write(Atom.a("return False"));
5748 YP.nl();
5749 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5750 {
5751 yield return true;
5752 yield break;
5753 }
5754 }
5755 }
5756 {
5757 object Level = arg2;
5758 object HasBreakableBlock = arg3;
5759 Variable Name = new Variable();
5760 Variable RestStatements = new Variable();
5761 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
5762 {
5763 convertIndentationPython(Level);
5764 YP.write(Name);
5765 YP.write(Atom.a(" = True"));
5766 YP.nl();
5767 convertIndentationPython(Level);
5768 YP.write(Atom.a("doBreak = True"));
5769 YP.nl();
5770 convertIndentationPython(Level);
5771 YP.write(Atom.a("break"));
5772 YP.nl();
5773 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5774 {
5775 yield return true;
5776 yield break;
5777 }
5778 }
5779 }
5780 {
5781 object Level = arg2;
5782 object HasBreakableBlock = arg3;
5783 Variable Name = new Variable();
5784 Variable ArgList = new Variable();
5785 Variable RestStatements = new Variable();
5786 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
5787 {
5788 convertIndentationPython(Level);
5789 YP.write(Name);
5790 YP.write(Atom.a("("));
5791 convertArgListPython(ArgList);
5792 YP.write(Atom.a(")"));
5793 YP.nl();
5794 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5795 {
5796 yield return true;
5797 yield break;
5798 }
5799 }
5800 }
5801 {
5802 object Level = arg2;
5803 object HasBreakableBlock = arg3;
5804 Variable Name = new Variable();
5805 Variable _FunctorArgs = new Variable();
5806 Variable ArgList = new Variable();
5807 Variable RestStatements = new Variable();
5808 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
5809 {
5810 foreach (bool l3 in convertStatementListPython(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level, HasBreakableBlock))
5811 {
5812 yield return true;
5813 yield break;
5814 }
5815 }
5816 }
5817 {
5818 object Level = arg2;
5819 object HasBreakableBlock = arg3;
5820 Variable Obj = new Variable();
5821 Variable Name = new Variable();
5822 Variable ArgList = new Variable();
5823 Variable RestStatements = new Variable();
5824 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
5825 {
5826 convertIndentationPython(Level);
5827 YP.write(Obj);
5828 YP.write(Atom.a("."));
5829 YP.write(Name);
5830 YP.write(Atom.a("("));
5831 convertArgListPython(ArgList);
5832 YP.write(Atom.a(")"));
5833 YP.nl();
5834 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5835 {
5836 yield return true;
5837 yield break;
5838 }
5839 }
5840 }
5841 {
5842 object Level = arg2;
5843 object HasBreakableBlock = arg3;
5844 Variable Body = new Variable();
5845 Variable RestStatements = new Variable();
5846 Variable NextLevel = new Variable();
5847 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
5848 {
5849 if (YP.termEqual(HasBreakableBlock, 1))
5850 {
5851 convertIndentationPython(Level);
5852 YP.write(Atom.a("for _ in [1]:"));
5853 YP.nl();
5854 foreach (bool l4 in YP.unify(NextLevel, YP.add(Level, 1)))
5855 {
5856 foreach (bool l5 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5857 {
5858 if (YP.termEqual(HasBreakableBlock, 1))
5859 {
5860 if (YP.greaterThan(Level, 1))
5861 {
5862 convertIndentationPython(Level);
5863 YP.write(Atom.a("if doBreak:"));
5864 YP.nl();
5865 convertIndentationPython(NextLevel);
5866 YP.write(Atom.a("break"));
5867 YP.nl();
5868 foreach (bool l8 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5869 {
5870 yield return true;
5871 yield break;
5872 }
5873 goto cutIf3;
5874 }
5875 foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5876 {
5877 yield return true;
5878 yield break;
5879 }
5880 cutIf3:
5881 goto cutIf2;
5882 }
5883 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5884 {
5885 yield return true;
5886 yield break;
5887 }
5888 cutIf2:
5889 { }
5890 }
5891 }
5892 goto cutIf1;
5893 }
5894 foreach (bool l3 in YP.unify(NextLevel, Level))
5895 {
5896 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5897 {
5898 if (YP.termEqual(HasBreakableBlock, 1))
5899 {
5900 if (YP.greaterThan(Level, 1))
5901 {
5902 convertIndentationPython(Level);
5903 YP.write(Atom.a("if doBreak:"));
5904 YP.nl();
5905 convertIndentationPython(NextLevel);
5906 YP.write(Atom.a("break"));
5907 YP.nl();
5908 foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5909 {
5910 yield return true;
5911 yield break;
5912 }
5913 goto cutIf5;
5914 }
5915 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5916 {
5917 yield return true;
5918 yield break;
5919 }
5920 cutIf5:
5921 goto cutIf4;
5922 }
5923 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5924 {
5925 yield return true;
5926 yield break;
5927 }
5928 cutIf4:
5929 { }
5930 }
5931 }
5932 cutIf1:
5933 { }
5934 }
5935 }
5936 {
5937 object Level = arg2;
5938 object HasBreakableBlock = arg3;
5939 Variable Expression = new Variable();
5940 Variable Body = new Variable();
5941 Variable RestStatements = new Variable();
5942 Variable NextLevel = new Variable();
5943 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
5944 {
5945 convertIndentationPython(Level);
5946 YP.write(Atom.a("if "));
5947 convertExpressionPython(Expression);
5948 YP.write(Atom.a(":"));
5949 YP.nl();
5950 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5951 {
5952 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5953 {
5954 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5955 {
5956 yield return true;
5957 yield break;
5958 }
5959 }
5960 }
5961 }
5962 }
5963 {
5964 object Level = arg2;
5965 object HasBreakableBlock = arg3;
5966 Variable Expression = new Variable();
5967 Variable Body = new Variable();
5968 Variable RestStatements = new Variable();
5969 Variable NextLevel = new Variable();
5970 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
5971 {
5972 convertIndentationPython(Level);
5973 YP.write(Atom.a("for l"));
5974 YP.write(Level);
5975 YP.write(Atom.a(" in "));
5976 convertExpressionPython(Expression);
5977 YP.write(Atom.a(":"));
5978 YP.nl();
5979 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5980 {
5981 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5982 {
5983 if (YP.termEqual(HasBreakableBlock, 1))
5984 {
5985 convertIndentationPython(Level);
5986 YP.write(Atom.a("if doBreak:"));
5987 YP.nl();
5988 convertIndentationPython(NextLevel);
5989 YP.write(Atom.a("break"));
5990 YP.nl();
5991 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5992 {
5993 yield return true;
5994 yield break;
5995 }
5996 goto cutIf6;
5997 }
5998 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5999 {
6000 yield return true;
6001 yield break;
6002 }
6003 cutIf6:
6004 { }
6005 }
6006 }
6007 }
6008 }
6009 {
6010 object Level = arg2;
6011 object HasBreakableBlock = arg3;
6012 Variable Expression = new Variable();
6013 Variable RestStatements = new Variable();
6014 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
6015 {
6016 convertIndentationPython(Level);
6017 YP.write(Atom.a("raise "));
6018 convertExpressionPython(Expression);
6019 YP.nl();
6020 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
6021 {
6022 yield return true;
6023 yield break;
6024 }
6025 }
6026 }
6027 }
6028
6029 public static void convertIndentationPython(object Level)
6030 {
6031 {
6032 Variable N = new Variable();
6033 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
6034 {
6035 repeatWrite(Atom.a(" "), N);
6036 return;
6037 }
6038 }
6039 }
6040
6041 public static void convertArgListPython(object arg1)
6042 {
6043 {
6044 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6045 {
6046 return;
6047 }
6048 }
6049 {
6050 Variable Head = new Variable();
6051 Variable Tail = new Variable();
6052 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
6053 {
6054 convertExpressionPython(Head);
6055 if (YP.termNotEqual(Tail, Atom.NIL))
6056 {
6057 YP.write(Atom.a(", "));
6058 convertArgListPython(Tail);
6059 return;
6060 goto cutIf1;
6061 }
6062 convertArgListPython(Tail);
6063 return;
6064 cutIf1:
6065 { }
6066 }
6067 }
6068 }
6069
6070 public static void convertExpressionPython(object arg1)
6071 {
6072 {
6073 Variable X = new Variable();
6074 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
6075 {
6076 YP.write(X);
6077 return;
6078 }
6079 }
6080 {
6081 Variable Name = new Variable();
6082 Variable ArgList = new Variable();
6083 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
6084 {
6085 YP.write(Name);
6086 YP.write(Atom.a("("));
6087 convertArgListPython(ArgList);
6088 YP.write(Atom.a(")"));
6089 return;
6090 }
6091 }
6092 {
6093 Variable Name = new Variable();
6094 Variable _FunctorArgs = new Variable();
6095 Variable ArgList = new Variable();
6096 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
6097 {
6098 convertExpressionPython(new Functor2("call", Name, ArgList));
6099 return;
6100 }
6101 }
6102 {
6103 Variable Obj = new Variable();
6104 Variable Name = new Variable();
6105 Variable ArgList = new Variable();
6106 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
6107 {
6108 YP.write(Obj);
6109 YP.write(Atom.a("."));
6110 YP.write(Name);
6111 YP.write(Atom.a("("));
6112 convertArgListPython(ArgList);
6113 YP.write(Atom.a(")"));
6114 return;
6115 }
6116 }
6117 {
6118 Variable Name = new Variable();
6119 Variable ArgList = new Variable();
6120 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
6121 {
6122 YP.write(Name);
6123 YP.write(Atom.a("("));
6124 convertArgListPython(ArgList);
6125 YP.write(Atom.a(")"));
6126 return;
6127 }
6128 }
6129 {
6130 Variable Name = new Variable();
6131 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
6132 {
6133 YP.write(Name);
6134 return;
6135 }
6136 }
6137 {
6138 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
6139 {
6140 YP.write(Atom.a("None"));
6141 return;
6142 }
6143 }
6144 {
6145 Variable X = new Variable();
6146 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
6147 {
6148 YP.write(Atom.a("not ("));
6149 convertExpressionPython(X);
6150 YP.write(Atom.a(")"));
6151 return;
6152 }
6153 }
6154 {
6155 Variable X = new Variable();
6156 Variable Y = new Variable();
6157 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
6158 {
6159 YP.write(Atom.a("("));
6160 convertExpressionPython(X);
6161 YP.write(Atom.a(") and ("));
6162 convertExpressionPython(Y);
6163 YP.write(Atom.a(")"));
6164 return;
6165 }
6166 }
6167 {
6168 Variable ArgList = new Variable();
6169 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
6170 {
6171 YP.write(Atom.a("["));
6172 convertArgListPython(ArgList);
6173 YP.write(Atom.a("]"));
6174 return;
6175 }
6176 }
6177 {
6178 Variable X = new Variable();
6179 Variable Codes = new Variable();
6180 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
6181 {
6182 if (YP.atom(X))
6183 {
6184 YP.write(Atom.a("\""));
6185 foreach (bool l4 in YP.atom_codes(X, Codes))
6186 {
6187 convertStringCodesPython(Codes);
6188 YP.write(Atom.a("\""));
6189 return;
6190 }
6191 }
6192 }
6193 }
6194 {
6195 Variable X = new Variable();
6196 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
6197 {
6198 YP.write(X);
6199 return;
6200 }
6201 }
6202 }
6203
6204 public static void convertStringCodesPython(object arg1)
6205 {
6206 {
6207 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6208 {
6209 return;
6210 }
6211 }
6212 {
6213 Variable Code = new Variable();
6214 Variable RestCodes = new Variable();
6215 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
6216 {
6217 if (YP.termEqual(Code, 34))
6218 {
6219 YP.put_code(92);
6220 YP.put_code(Code);
6221 convertStringCodesPython(RestCodes);
6222 return;
6223 goto cutIf1;
6224 }
6225 if (YP.termEqual(Code, 92))
6226 {
6227 YP.put_code(92);
6228 YP.put_code(Code);
6229 convertStringCodesPython(RestCodes);
6230 return;
6231 goto cutIf1;
6232 }
6233 YP.put_code(Code);
6234 convertStringCodesPython(RestCodes);
6235 return;
6236 cutIf1:
6237 { }
6238 }
6239 }
6240 }
6241
6242 public static IEnumerable<bool> putCStringCode(object Code)
6243 {
6244 {
6245 Variable HexDigit = new Variable();
6246 Variable HexChar = new Variable();
6247 if (YP.lessThanOrEqual(Code, 31))
6248 {
6249 if (YP.lessThanOrEqual(Code, 15))
6250 {
6251 YP.write(Atom.a("\\u000"));
6252 foreach (bool l4 in YP.unify(HexDigit, Code))
6253 {
6254 if (YP.lessThanOrEqual(HexDigit, 9))
6255 {
6256 foreach (bool l6 in YP.unify(HexChar, YP.add(HexDigit, 48)))
6257 {
6258 YP.put_code(HexChar);
6259 yield return true;
6260 yield break;
6261 }
6262 goto cutIf2;
6263 }
6264 foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 55)))
6265 {
6266 YP.put_code(HexChar);
6267 yield return true;
6268 yield break;
6269 }
6270 cutIf2:
6271 { }
6272 }
6273 goto cutIf1;
6274 }
6275 YP.write(Atom.a("\\u001"));
6276 foreach (bool l3 in YP.unify(HexDigit, YP.subtract(Code, 16)))
6277 {
6278 if (YP.lessThanOrEqual(HexDigit, 9))
6279 {
6280 foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 48)))
6281 {
6282 YP.put_code(HexChar);
6283 yield return true;
6284 yield break;
6285 }
6286 goto cutIf3;
6287 }
6288 foreach (bool l4 in YP.unify(HexChar, YP.add(HexDigit, 55)))
6289 {
6290 YP.put_code(HexChar);
6291 yield return true;
6292 yield break;
6293 }
6294 cutIf3:
6295 { }
6296 }
6297 cutIf1:
6298 { }
6299 }
6300 }
6301 {
6302 if (YP.termEqual(Code, 34))
6303 {
6304 YP.put_code(92);
6305 YP.put_code(34);
6306 yield return true;
6307 yield break;
6308 }
6309 }
6310 {
6311 if (YP.termEqual(Code, 92))
6312 {
6313 YP.put_code(92);
6314 YP.put_code(92);
6315 yield return true;
6316 yield break;
6317 }
6318 }
6319 {
6320 YP.put_code(Code);
6321 yield return true;
6322 yield break;
6323 }
6324 }
6325
6326 public static IEnumerable<bool> member(object X, object arg2)
6327 {
6328 {
6329 Variable x2 = new Variable();
6330 foreach (bool l2 in YP.unify(arg2, new ListPair(X, x2)))
6331 {
6332 yield return false;
6333 }
6334 }
6335 {
6336 Variable x2 = new Variable();
6337 Variable Rest = new Variable();
6338 foreach (bool l2 in YP.unify(arg2, new ListPair(x2, Rest)))
6339 {
6340 foreach (bool l3 in member(X, Rest))
6341 {
6342 yield return false;
6343 }
6344 }
6345 }
6346 }
6347
6348 public static IEnumerable<bool> append(object arg1, object arg2, object arg3)
6349 {
6350 {
6351 Variable List = new Variable();
6352 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6353 {
6354 foreach (bool l3 in YP.unify(arg2, List))
6355 {
6356 foreach (bool l4 in YP.unify(arg3, List))
6357 {
6358 yield return false;
6359 }
6360 }
6361 }
6362 }
6363 {
6364 object List2 = arg2;
6365 Variable X = new Variable();
6366 Variable List1 = new Variable();
6367 Variable List12 = new Variable();
6368 foreach (bool l2 in YP.unify(arg1, new ListPair(X, List1)))
6369 {
6370 foreach (bool l3 in YP.unify(arg3, new ListPair(X, List12)))
6371 {
6372 foreach (bool l4 in append(List1, List2, List12))
6373 {
6374 yield return false;
6375 }
6376 }
6377 }
6378 }
6379 }
6380 #pragma warning restore 0168, 0219, 0164,0162
6381 }
6382}
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
index 6aa717d..4e0c273 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
@@ -162,7 +162,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
162 m_braceCount++; 162 m_braceCount++;
163 163
164 // line number 164 // line number
165 m_CSharpLine += 3; 165 m_CSharpLine += 9;
166 166
167 // here's the payload 167 // here's the payload
168 retstr += GenerateLine(); 168 retstr += GenerateLine();
@@ -626,11 +626,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
626 string labelStatement; 626 string labelStatement;
627 627
628 if (m_insertCoopTerminationChecks) 628 if (m_insertCoopTerminationChecks)
629 labelStatement = m_coopTerminationCheck + "\n"; 629 labelStatement = m_coopTerminationCheck;
630 else 630 else
631 labelStatement = "NoOp();\n"; 631 labelStatement = "NoOp();";
632 632
633 return Generate(String.Format("{0}: ", CheckName(jl.LabelName)), jl) + labelStatement; 633 return GenerateLine(String.Format("{0}: {1}", CheckName(jl.LabelName), labelStatement), jl);
634 } 634 }
635 635
636 /// <summary> 636 /// <summary>
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
index a1b8d85..af324bf 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
@@ -58,9 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
58 { 58 {
59 lsl = 0, 59 lsl = 0,
60 cs = 1, 60 cs = 1,
61 vb = 2, 61 vb = 2
62 js = 3,
63 yp = 4
64 } 62 }
65 63
66 /// <summary> 64 /// <summary>
@@ -85,9 +83,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
85 83
86 private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider(); 84 private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider();
87 private static VBCodeProvider VBcodeProvider = new VBCodeProvider(); 85 private static VBCodeProvider VBcodeProvider = new VBCodeProvider();
88// private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider();
89 private static CSharpCodeProvider YPcodeProvider = new CSharpCodeProvider(); // YP is translated into CSharp
90 private static YP2CSConverter YP_Converter = new YP2CSConverter();
91 86
92 // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files 87 // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files
93 private static UInt64 scriptCompileCounter = 0; // And a counter 88 private static UInt64 scriptCompileCounter = 0; // And a counter
@@ -123,7 +118,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
123 if (in_startup) 118 if (in_startup)
124 { 119 {
125 in_startup = false; 120 in_startup = false;
126 CreateScriptsDirectory(); 121 CheckOrCreateScriptsDirectory();
127 122
128 // First time we start? Delete old files 123 // First time we start? Delete old files
129 if (DeleteScriptsOnStartup) 124 if (DeleteScriptsOnStartup)
@@ -134,8 +129,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
134 LanguageMapping.Add(enumCompileType.cs.ToString(), enumCompileType.cs); 129 LanguageMapping.Add(enumCompileType.cs.ToString(), enumCompileType.cs);
135 LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb); 130 LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb);
136 LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl); 131 LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl);
137 LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js);
138 LanguageMapping.Add(enumCompileType.yp.ToString(), enumCompileType.yp);
139 132
140 // Allowed compilers 133 // Allowed compilers
141 string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl"); 134 string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl");
@@ -192,13 +185,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
192 } 185 }
193 186
194 // We now have an allow-list, a mapping list, and a default language 187 // We now have an allow-list, a mapping list, and a default language
195
196 } 188 }
197 189
198 /// <summary> 190 /// <summary>
199 /// Create the directory where compiled scripts are stored. 191 /// Create the directory where compiled scripts are stored if it does not already exist.
200 /// </summary> 192 /// </summary>
201 private void CreateScriptsDirectory() 193 private void CheckOrCreateScriptsDirectory()
202 { 194 {
203 if (!Directory.Exists(ScriptEnginesPath)) 195 if (!Directory.Exists(ScriptEnginesPath))
204 { 196 {
@@ -288,15 +280,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
288 return GetCompilerOutput(assetID.ToString()); 280 return GetCompilerOutput(assetID.ToString());
289 } 281 }
290 282
291 /// <summary> 283 public void PerformScriptCompile(
292 /// Converts script from LSL to CS and calls CompileFromCSText 284 string source, string asset, UUID ownerUUID,
293 /// </summary> 285 out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap)
294 /// <param name="Script">LSL script</param> 286 {
295 /// <returns>Filename to .dll assembly</returns> 287 PerformScriptCompile(source, asset, ownerUUID, false, out assembly, out linemap);
296 public void PerformScriptCompile(string Script, string asset, UUID ownerUUID, 288 }
289
290 public void PerformScriptCompile(
291 string source, string asset, UUID ownerUUID, bool alwaysRecompile,
297 out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap) 292 out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap)
298 { 293 {
299// m_log.DebugFormat("[Compiler]: Compiling script\n{0}", Script); 294// m_log.DebugFormat("[Compiler]: Checking script for asset {0} in {1}\n{2}", asset, m_scriptEngine.World.Name, source);
300 295
301 IScriptModuleComms comms = m_scriptEngine.World.RequestModuleInterface<IScriptModuleComms>(); 296 IScriptModuleComms comms = m_scriptEngine.World.RequestModuleInterface<IScriptModuleComms>();
302 297
@@ -305,33 +300,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
305 300
306 assembly = GetCompilerOutput(asset); 301 assembly = GetCompilerOutput(asset);
307 302
308 if (!Directory.Exists(ScriptEnginesPath)) 303// m_log.DebugFormat("[Compiler]: Retrieved assembly {0} for asset {1} in {2}", assembly, asset, m_scriptEngine.World.Name);
309 {
310 try
311 {
312 Directory.CreateDirectory(ScriptEnginesPath);
313 }
314 catch (Exception)
315 {
316 }
317 }
318 304
319 if (!Directory.Exists(Path.Combine(ScriptEnginesPath, 305 CheckOrCreateScriptsDirectory();
320 m_scriptEngine.World.RegionInfo.RegionID.ToString())))
321 {
322 try
323 {
324 Directory.CreateDirectory(ScriptEnginesPath);
325 }
326 catch (Exception)
327 {
328 }
329 }
330 306
331 // Don't recompile if we already have it 307 // Don't recompile if we're not forced to and we already have it
332 // Performing 3 file exists tests for every script can still be slow 308 // Performing 3 file exists tests for every script can still be slow
333 if (File.Exists(assembly) && File.Exists(assembly + ".text") && File.Exists(assembly + ".map")) 309 if (!alwaysRecompile && File.Exists(assembly) && File.Exists(assembly + ".text") && File.Exists(assembly + ".map"))
334 { 310 {
311// m_log.DebugFormat("[Compiler]: Found existing assembly {0} for asset {1} in {2}", assembly, asset, m_scriptEngine.World.Name);
312
335 // If we have already read this linemap file, then it will be in our dictionary. 313 // If we have already read this linemap file, then it will be in our dictionary.
336 // Don't build another copy of the dictionary (saves memory) and certainly 314 // Don't build another copy of the dictionary (saves memory) and certainly
337 // don't keep reading the same file from disk multiple times. 315 // don't keep reading the same file from disk multiple times.
@@ -341,31 +319,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
341 return; 319 return;
342 } 320 }
343 321
344 if (Script == String.Empty) 322// m_log.DebugFormat("[Compiler]: Compiling assembly {0} for asset {1} in {2}", assembly, asset, m_scriptEngine.World.Name);
345 { 323
324 if (source == String.Empty)
346 throw new Exception("Cannot find script assembly and no script text present"); 325 throw new Exception("Cannot find script assembly and no script text present");
347 }
348 326
349 enumCompileType language = DefaultCompileLanguage; 327 enumCompileType language = DefaultCompileLanguage;
350 328
351 if (Script.StartsWith("//c#", true, CultureInfo.InvariantCulture)) 329 if (source.StartsWith("//c#", true, CultureInfo.InvariantCulture))
352 language = enumCompileType.cs; 330 language = enumCompileType.cs;
353 if (Script.StartsWith("//vb", true, CultureInfo.InvariantCulture)) 331 if (source.StartsWith("//vb", true, CultureInfo.InvariantCulture))
354 { 332 {
355 language = enumCompileType.vb; 333 language = enumCompileType.vb;
356 // We need to remove //vb, it won't compile with that 334 // We need to remove //vb, it won't compile with that
357 335
358 Script = Script.Substring(4, Script.Length - 4); 336 source = source.Substring(4, source.Length - 4);
359 } 337 }
360 if (Script.StartsWith("//lsl", true, CultureInfo.InvariantCulture)) 338 if (source.StartsWith("//lsl", true, CultureInfo.InvariantCulture))
361 language = enumCompileType.lsl; 339 language = enumCompileType.lsl;
362 340
363 if (Script.StartsWith("//js", true, CultureInfo.InvariantCulture))
364 language = enumCompileType.js;
365
366 if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
367 language = enumCompileType.yp;
368
369// m_log.DebugFormat("[Compiler]: Compile language is {0}", language); 341// m_log.DebugFormat("[Compiler]: Compile language is {0}", language);
370 342
371 if (!AllowedCompilers.ContainsKey(language.ToString())) 343 if (!AllowedCompilers.ContainsKey(language.ToString()))
@@ -384,13 +356,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
384 throw new Exception(errtext); 356 throw new Exception(errtext);
385 } 357 }
386 358
387 string compileScript = Script; 359 string compileScript = source;
388 360
389 if (language == enumCompileType.lsl) 361 if (language == enumCompileType.lsl)
390 { 362 {
391 // Its LSL, convert it to C# 363 // Its LSL, convert it to C#
392 LSL_Converter = (ICodeConverter)new CSCodeGenerator(comms, m_insertCoopTerminationCalls); 364 LSL_Converter = (ICodeConverter)new CSCodeGenerator(comms, m_insertCoopTerminationCalls);
393 compileScript = LSL_Converter.Convert(Script); 365 compileScript = LSL_Converter.Convert(source);
394 366
395 // copy converter warnings into our warnings. 367 // copy converter warnings into our warnings.
396 foreach (string warning in LSL_Converter.GetWarnings()) 368 foreach (string warning in LSL_Converter.GetWarnings())
@@ -404,12 +376,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
404 WriteMapFile(assembly + ".map", linemap); 376 WriteMapFile(assembly + ".map", linemap);
405 } 377 }
406 378
407 if (language == enumCompileType.yp)
408 {
409 // Its YP, convert it to C#
410 compileScript = YP_Converter.Convert(Script);
411 }
412
413 switch (language) 379 switch (language)
414 { 380 {
415 case enumCompileType.cs: 381 case enumCompileType.cs:
@@ -424,13 +390,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
424 compileScript = CreateVBCompilerScript( 390 compileScript = CreateVBCompilerScript(
425 compileScript, m_scriptEngine.ScriptClassName, m_scriptEngine.ScriptBaseClassName); 391 compileScript, m_scriptEngine.ScriptClassName, m_scriptEngine.ScriptBaseClassName);
426 break; 392 break;
427// case enumCompileType.js:
428// compileScript = CreateJSCompilerScript(compileScript, m_scriptEngine.ScriptBaseClassName);
429// break;
430 case enumCompileType.yp:
431 compileScript = CreateYPCompilerScript(
432 compileScript, m_scriptEngine.ScriptClassName,m_scriptEngine.ScriptBaseClassName);
433 break;
434 } 393 }
435 394
436 assembly = CompileFromDotNetText(compileScript, language, asset, assembly); 395 assembly = CompileFromDotNetText(compileScript, language, asset, assembly);
@@ -460,7 +419,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
460// return compileScript; 419// return compileScript;
461// } 420// }
462 421
463 private static string CreateCSCompilerScript( 422 public static string CreateCSCompilerScript(
464 string compileScript, string className, string baseClassName, ParameterInfo[] constructorParameters) 423 string compileScript, string className, string baseClassName, ParameterInfo[] constructorParameters)
465 { 424 {
466 compileScript = string.Format( 425 compileScript = string.Format(
@@ -488,23 +447,7 @@ namespace SecondLife
488 return compileScript; 447 return compileScript;
489 } 448 }
490 449
491 private static string CreateYPCompilerScript(string compileScript, string className, string baseClassName) 450 public static string CreateVBCompilerScript(string compileScript, string className, string baseClassName)
492 {
493 compileScript = String.Empty +
494 "using OpenSim.Region.ScriptEngine.Shared.YieldProlog; " +
495 "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" +
496 String.Empty + "namespace SecondLife { " +
497 String.Empty + "public class " + className + " : " + baseClassName + " { \r\n" +
498 //@"public Script() { } " +
499 @"static OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP YP=null; " +
500 @"public " + className + "() { YP= new OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP(); } " +
501 compileScript +
502 "} }\r\n";
503
504 return compileScript;
505 }
506
507 private static string CreateVBCompilerScript(string compileScript, string className, string baseClassName)
508 { 451 {
509 compileScript = String.Empty + 452 compileScript = String.Empty +
510 "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " + 453 "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " +
@@ -532,7 +475,11 @@ namespace SecondLife
532 scriptCompileCounter++; 475 scriptCompileCounter++;
533 try 476 try
534 { 477 {
535 File.Delete(assembly); 478 if (File.Exists(assembly))
479 {
480 File.SetAttributes(assembly, FileAttributes.Normal);
481 File.Delete(assembly);
482 }
536 } 483 }
537 catch (Exception e) // NOTLEGIT - Should be just FileIOException 484 catch (Exception e) // NOTLEGIT - Should be just FileIOException
538 { 485 {
@@ -580,12 +527,6 @@ namespace SecondLife
580 m_scriptEngine.ScriptReferencedAssemblies, 527 m_scriptEngine.ScriptReferencedAssemblies,
581 a => parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, a))); 528 a => parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, a)));
582 529
583 if (lang == enumCompileType.yp)
584 {
585 parameters.ReferencedAssemblies.Add(Path.Combine(rootPath,
586 "OpenSim.Region.ScriptEngine.Shared.YieldProlog.dll"));
587 }
588
589 parameters.GenerateExecutable = false; 530 parameters.GenerateExecutable = false;
590 parameters.OutputAssembly = assembly; 531 parameters.OutputAssembly = assembly;
591 parameters.IncludeDebugInformation = CompileWithDebugInformation; 532 parameters.IncludeDebugInformation = CompileWithDebugInformation;
@@ -635,14 +576,6 @@ namespace SecondLife
635 } 576 }
636 } while (!complete); 577 } while (!complete);
637 break; 578 break;
638// case enumCompileType.js:
639// results = JScodeProvider.CompileAssemblyFromSource(
640// parameters, Script);
641// break;
642 case enumCompileType.yp:
643 results = YPcodeProvider.CompileAssemblyFromSource(
644 parameters, Script);
645 break;
646 default: 579 default:
647 throw new Exception("Compiler is not able to recongnize " + 580 throw new Exception("Compiler is not able to recongnize " +
648 "language type \"" + lang.ToString() + "\""); 581 "language type \"" + lang.ToString() + "\"");
@@ -740,9 +673,8 @@ namespace SecondLife
740 673
741 try 674 try
742 { 675 {
743 FileStream fs = File.Open(assembly, FileMode.Open, FileAccess.Read); 676 using (FileStream fs = File.Open(assembly, FileMode.Open, FileAccess.Read))
744 fs.Read(data, 0, data.Length); 677 fs.Read(data, 0, data.Length);
745 fs.Close();
746 } 678 }
747 catch (Exception) 679 catch (Exception)
748 { 680 {
@@ -757,19 +689,19 @@ namespace SecondLife
757 689
758 Byte[] buf = Encoding.ASCII.GetBytes(filetext); 690 Byte[] buf = Encoding.ASCII.GetBytes(filetext);
759 691
760 FileStream sfs = File.Create(assembly + ".text"); 692 using (FileStream sfs = File.Create(assembly + ".text"))
761 sfs.Write(buf, 0, buf.Length); 693 sfs.Write(buf, 0, buf.Length);
762 sfs.Close();
763 694
764 return assembly; 695 return assembly;
765 } 696 }
766 697
767 private class kvpSorter : IComparer<KeyValuePair<int, int>> 698 private class kvpSorter : IComparer<KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, int>>>
768 { 699 {
769 public int Compare(KeyValuePair<int, int> a, 700 public int Compare(KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, int>> a,
770 KeyValuePair<int, int> b) 701 KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, int>> b)
771 { 702 {
772 return a.Key.CompareTo(b.Key); 703 int kc = a.Key.Key.CompareTo(b.Key.Key);
704 return (kc != 0) ? kc : a.Key.Value.CompareTo(b.Key.Value);
773 } 705 }
774 } 706 }
775 707
@@ -786,30 +718,46 @@ namespace SecondLife
786 out ret)) 718 out ret))
787 return ret; 719 return ret;
788 720
789 List<KeyValuePair<int, int>> sorted = 721 var sorted = new List<KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, int>>>(positionMap);
790 new List<KeyValuePair<int, int>>(positionMap.Keys);
791 722
792 sorted.Sort(new kvpSorter()); 723 sorted.Sort(new kvpSorter());
793 724
794 int l = 1; 725 int l = 1;
795 int c = 1; 726 int c = 1;
727 int pl = 1;
796 728
797 foreach (KeyValuePair<int, int> cspos in sorted) 729 foreach (KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, int>> posmap in sorted)
798 { 730 {
799 if (cspos.Key >= line) 731 //m_log.DebugFormat("[Compiler]: Scanning line map {0},{1} --> {2},{3}", posmap.Key.Key, posmap.Key.Value, posmap.Value.Key, posmap.Value.Value);
732 int nl = posmap.Value.Key + line - posmap.Key.Key; // New, translated LSL line and column.
733 int nc = posmap.Value.Value + col - posmap.Key.Value;
734 // Keep going until we find the first point passed line,col.
735 if (posmap.Key.Key > line)
800 { 736 {
801 if (cspos.Key > line) 737 //m_log.DebugFormat("[Compiler]: Line is larger than requested {0},{1}, returning {2},{3}", line, col, l, c);
802 return new KeyValuePair<int, int>(l, c); 738 if (pl < line)
803 if (cspos.Value > col) 739 {
804 return new KeyValuePair<int, int>(l, c); 740 //m_log.DebugFormat("[Compiler]: Previous line ({0}) is less than requested line ({1}), setting column to 1.", pl, line);
805 c = cspos.Value; 741 c = 1;
806 if (c == 0) 742 }
807 c++; 743 break;
808 } 744 }
809 else 745 if (posmap.Key.Key == line && posmap.Key.Value > col)
810 { 746 {
811 l = cspos.Key; 747 // Never move l,c backwards.
748 if (nl > l || (nl == l && nc > c))
749 {
750 //m_log.DebugFormat("[Compiler]: Using offset relative to this: {0} + {1} - {2}, {3} + {4} - {5} = {6}, {7}",
751 // posmap.Value.Key, line, posmap.Key.Key, posmap.Value.Value, col, posmap.Key.Value, nl, nc);
752 l = nl;
753 c = nc;
754 }
755 //m_log.DebugFormat("[Compiler]: Column is larger than requested {0},{1}, returning {2},{3}", line, col, l, c);
756 break;
812 } 757 }
758 pl = posmap.Key.Key;
759 l = posmap.Value.Key;
760 c = posmap.Value.Value;
813 } 761 }
814 return new KeyValuePair<int, int>(l, c); 762 return new KeyValuePair<int, int>(l, c);
815 } 763 }
@@ -835,7 +783,6 @@ namespace SecondLife
835 return message; 783 return message;
836 } 784 }
837 785
838
839 private static void WriteMapFile(string filename, Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap) 786 private static void WriteMapFile(string filename, Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap)
840 { 787 {
841 string mapstring = String.Empty; 788 string mapstring = String.Empty;
@@ -847,40 +794,42 @@ namespace SecondLife
847 } 794 }
848 795
849 Byte[] mapbytes = Encoding.ASCII.GetBytes(mapstring); 796 Byte[] mapbytes = Encoding.ASCII.GetBytes(mapstring);
850 FileStream mfs = File.Create(filename);
851 mfs.Write(mapbytes, 0, mapbytes.Length);
852 mfs.Close();
853 }
854 797
798 using (FileStream mfs = File.Create(filename))
799 mfs.Write(mapbytes, 0, mapbytes.Length);
800 }
855 801
856 private static Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> ReadMapFile(string filename) 802 private static Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> ReadMapFile(string filename)
857 { 803 {
858 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap; 804 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap;
859 try 805 try
860 { 806 {
861 StreamReader r = File.OpenText(filename); 807 using (StreamReader r = File.OpenText(filename))
862 linemap = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>>();
863
864 string line;
865 while ((line = r.ReadLine()) != null)
866 { 808 {
867 String[] parts = line.Split(new Char[] { ',' }); 809 linemap = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>>();
868 int kk = System.Convert.ToInt32(parts[0]);
869 int kv = System.Convert.ToInt32(parts[1]);
870 int vk = System.Convert.ToInt32(parts[2]);
871 int vv = System.Convert.ToInt32(parts[3]);
872 810
873 KeyValuePair<int, int> k = new KeyValuePair<int, int>(kk, kv); 811 string line;
874 KeyValuePair<int, int> v = new KeyValuePair<int, int>(vk, vv); 812 while ((line = r.ReadLine()) != null)
813 {
814 String[] parts = line.Split(new Char[] { ',' });
815 int kk = System.Convert.ToInt32(parts[0]);
816 int kv = System.Convert.ToInt32(parts[1]);
817 int vk = System.Convert.ToInt32(parts[2]);
818 int vv = System.Convert.ToInt32(parts[3]);
875 819
876 linemap[k] = v; 820 KeyValuePair<int, int> k = new KeyValuePair<int, int>(kk, kv);
821 KeyValuePair<int, int> v = new KeyValuePair<int, int>(vk, vv);
822
823 linemap[k] = v;
824 }
877 } 825 }
878 } 826 }
879 catch 827 catch
880 { 828 {
881 linemap = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>>(); 829 linemap = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>>();
882 } 830 }
831
883 return linemap; 832 return linemap;
884 } 833 }
885 } 834 }
886} 835} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs
index d163438..4df09ef 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.8.0.*")] 32[assembly: AssemblyVersion("0.8.2.*")]
33 33
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Tests/CompilerTest.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Tests/CompilerTest.cs
index 05a8756..b476e32 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Tests/CompilerTest.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Tests/CompilerTest.cs
@@ -25,12 +25,14 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
28using System.IO; 29using System.IO;
29using System.CodeDom.Compiler; 30using System.CodeDom.Compiler;
30using System.Collections.Generic; 31using System.Collections.Generic;
31using Microsoft.CSharp; 32using Microsoft.CSharp;
32using NUnit.Framework; 33using NUnit.Framework;
33using OpenSim.Region.ScriptEngine.Shared.CodeTools; 34using OpenSim.Region.ScriptEngine.Shared.CodeTools;
35using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
34using OpenSim.Tests.Common; 36using OpenSim.Tests.Common;
35 37
36namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests 38namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
@@ -46,7 +48,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
46 private string m_testDir; 48 private string m_testDir;
47 private CSharpCodeProvider m_CSCodeProvider; 49 private CSharpCodeProvider m_CSCodeProvider;
48 private CompilerParameters m_compilerParameters; 50 private CompilerParameters m_compilerParameters;
49 private CompilerResults m_compilerResults; 51 // private CompilerResults m_compilerResults;
52 private ResolveEventHandler m_resolveEventHandler;
50 53
51 /// <summary> 54 /// <summary>
52 /// Creates a temporary directory where build artifacts are stored. 55 /// Creates a temporary directory where build artifacts are stored.
@@ -61,14 +64,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
61 // Create the temporary directory for housing build artifacts. 64 // Create the temporary directory for housing build artifacts.
62 Directory.CreateDirectory(m_testDir); 65 Directory.CreateDirectory(m_testDir);
63 } 66 }
67 }
68
69 [SetUp]
70 public override void SetUp()
71 {
72 base.SetUp();
64 73
65 // Create a CSCodeProvider and CompilerParameters. 74 // Create a CSCodeProvider and CompilerParameters.
66 m_CSCodeProvider = new CSharpCodeProvider(); 75 m_CSCodeProvider = new CSharpCodeProvider();
67 m_compilerParameters = new CompilerParameters(); 76 m_compilerParameters = new CompilerParameters();
68 77
69 string rootPath = Path.Combine(Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory), "bin"); 78 string rootPath = System.AppDomain.CurrentDomain.BaseDirectory;
79
80 m_resolveEventHandler = new ResolveEventHandler(AssemblyResolver.OnAssemblyResolve);
81
82 System.AppDomain.CurrentDomain.AssemblyResolve += m_resolveEventHandler;
83
70 m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll")); 84 m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll"));
71 m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll")); 85 m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll"));
86 m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenMetaverseTypes.dll"));
72 m_compilerParameters.GenerateExecutable = false; 87 m_compilerParameters.GenerateExecutable = false;
73 } 88 }
74 89
@@ -76,9 +91,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
76 /// Removes the temporary build directory and any build artifacts 91 /// Removes the temporary build directory and any build artifacts
77 /// inside it. 92 /// inside it.
78 /// </summary> 93 /// </summary>
79 [TestFixtureTearDown] 94 [TearDown]
80 public void CleanUp() 95 public void CleanUp()
81 { 96 {
97 System.AppDomain.CurrentDomain.AssemblyResolve -= m_resolveEventHandler;
98
82 if (Directory.Exists(m_testDir)) 99 if (Directory.Exists(m_testDir))
83 { 100 {
84 // Blow away the temporary directory with artifacts. 101 // Blow away the temporary directory with artifacts.
@@ -86,52 +103,100 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
86 } 103 }
87 } 104 }
88 105
106 private CompilerResults CompileScript(
107 string input, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> positionMap)
108 {
109 m_compilerParameters.OutputAssembly = Path.Combine(m_testDir, Path.GetRandomFileName() + ".dll");
110
111 CSCodeGenerator cg = new CSCodeGenerator();
112 string output = cg.Convert(input);
113
114 output = Compiler.CreateCSCompilerScript(output, "script1", typeof(ScriptBaseClass).FullName, null);
115 // System.Console.WriteLine(output);
116
117 positionMap = cg.PositionMap;
118
119 CompilerResults compilerResults = m_CSCodeProvider.CompileAssemblyFromSource(m_compilerParameters, output);
120
121 // foreach (KeyValuePair<int, int> key in positionMap.Keys)
122 // {
123 // KeyValuePair<int, int> val = positionMap[key];
124 //
125 // System.Console.WriteLine("{0},{1} => {2},{3}", key.Key, key.Value, val.Key, val.Value);
126 // }
127 //
128 // foreach (CompilerError compErr in m_compilerResults.Errors)
129 // {
130 // System.Console.WriteLine("Error: {0},{1} => {2}", compErr.Line, compErr.Column, compErr);
131 // }
132
133 return compilerResults;
134 }
135
136 /// <summary>
137 /// Test that line number errors are resolved as expected when preceding code contains a jump.
138 /// </summary>
139 [Test]
140 public void TestJumpAndSyntaxError()
141 {
142 TestHelpers.InMethod();
143
144 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> positionMap;
145
146 CompilerResults compilerResults = CompileScript(
147@"default
148{
149 state_entry()
150 {
151 jump l;
152 @l;
153 i = 1;
154 }
155}", out positionMap);
156
157 Assert.AreEqual(
158 new KeyValuePair<int, int>(7, 9),
159 positionMap[new KeyValuePair<int, int>(compilerResults.Errors[0].Line, compilerResults.Errors[0].Column)]);
160 }
161
89 /// <summary> 162 /// <summary>
90 /// Test the C# compiler error message can be mapped to the correct 163 /// Test the C# compiler error message can be mapped to the correct
91 /// line/column in the LSL source when an undeclared variable is used. 164 /// line/column in the LSL source when an undeclared variable is used.
92 /// </summary> 165 /// </summary>
93 //[Test] 166 [Test]
94 public void TestUseUndeclaredVariable() 167 public void TestUseUndeclaredVariable()
95 { 168 {
96 TestHelpers.InMethod(); 169 TestHelpers.InMethod();
97 170
98 m_compilerParameters.OutputAssembly = Path.Combine(m_testDir, Path.GetRandomFileName() + ".dll"); 171 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> positionMap;
99 172
100 string input = @"default 173 CompilerResults compilerResults = CompileScript(
174@"default
101{ 175{
102 state_entry() 176 state_entry()
103 { 177 {
104 integer y = x + 3; 178 integer y = x + 3;
105 } 179 }
106}"; 180}", out positionMap);
107 181
108 CSCodeGenerator cg = new CSCodeGenerator(); 182 Assert.AreEqual(
109 string output = "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\n" + 183 new KeyValuePair<int, int>(5, 21),
110 "namespace SecondLife { " + 184 positionMap[new KeyValuePair<int, int>(compilerResults.Errors[0].Line, compilerResults.Errors[0].Column)]);
111 "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass {\n" +
112 "public Script() { } " +
113 cg.Convert(input) +
114 "} }\n";
115 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> positionMap = cg.PositionMap;
116
117 m_compilerResults = m_CSCodeProvider.CompileAssemblyFromSource(m_compilerParameters, output);
118
119 Assert.AreEqual(new KeyValuePair<int, int>(5, 21),
120 positionMap[new KeyValuePair<int, int>(m_compilerResults.Errors[0].Line, m_compilerResults.Errors[0].Column)]);
121 } 185 }
122 186
123 /// <summary> 187 /// <summary>
124 /// Test that a string can be cast to string and another string 188 /// Test that a string can be cast to string and another string
125 /// concatenated. 189 /// concatenated.
126 /// </summary> 190 /// </summary>
127 //[Test] 191 [Test]
128 public void TestCastAndConcatString() 192 public void TestCastAndConcatString()
129 { 193 {
130 TestHelpers.InMethod(); 194 TestHelpers.InMethod();
131 195
132 m_compilerParameters.OutputAssembly = Path.Combine(m_testDir, Path.GetRandomFileName() + ".dll"); 196 Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> positionMap;
133 197
134 string input = @"string s = "" a string""; 198 CompilerResults compilerResults = CompileScript(
199@"string s = "" a string"";
135 200
136default 201default
137{ 202{
@@ -141,18 +206,9 @@ default
141 string tmp = (string) gAvatarKey + s; 206 string tmp = (string) gAvatarKey + s;
142 llSay(0, tmp); 207 llSay(0, tmp);
143 } 208 }
144}"; 209}", out positionMap);
145 210
146 CSCodeGenerator cg = new CSCodeGenerator(); 211 Assert.AreEqual(0, compilerResults.Errors.Count);
147 string output = "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\n" +
148 "namespace SecondLife { " +
149 "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass {\n" +
150 "public Script() { } " +
151 cg.Convert(input) +
152 "} }\n";
153 m_compilerResults = m_CSCodeProvider.CompileAssemblyFromSource(m_compilerParameters, output);
154
155 Assert.AreEqual(0, m_compilerResults.Errors.Count);
156 } 212 }
157 } 213 }
158} \ No newline at end of file 214} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs
deleted file mode 100644
index 7ea3cfc..0000000
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs
+++ /dev/null
@@ -1,117 +0,0 @@
1/*
2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSimulator Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28
29using System;
30using System.IO;
31using System.Collections.Generic;
32using System.Text;
33using System.Text.RegularExpressions;
34using OpenSim.Region.ScriptEngine.Shared.YieldProlog;
35
36namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
37{
38 public class YP2CSConverter
39 {
40 public YP2CSConverter()
41 {
42 }
43
44 public string Convert(string Script)
45 {
46 string CS_code = GenCode(Script);
47 return CS_code;
48 }
49
50 static string GenCode(string myCode)
51 {
52 Variable TermList = new Variable();
53 Variable FunctionCode = new Variable();
54
55 string CS_code = "";
56
57 int cs_pointer = myCode.IndexOf("\n//cs");
58 if (cs_pointer > 0)
59 {
60 CS_code = myCode.Substring(cs_pointer); // CS code comes after
61 myCode = myCode.Substring(0, cs_pointer);
62 }
63 myCode.Replace("//yp", "%YPCode");
64
65 StringWriter myCS_SW = new StringWriter();
66 StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n "+myCode + "\n");
67
68 YP.see(myCode_SR);
69 YP.tell(myCS_SW);
70
71 //m_log.Debug("Mycode\n ===================================\n" + myCode+"\n");
72
73// disable warning: don't see how we can code this differently short
74// of rewriting the whole thing
75#pragma warning disable 0168, 0219
76 foreach (bool l1 in Parser.parseInput(TermList))
77 {
78 foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
79 {
80 // ListPair VFC = new ListPair(FunctionCode, new Variable());
81 //m_log.Debug("-------------------------")
82 //m_log.Debug(FunctionCode.ToString())
83 //m_log.Debug("-------------------------")
84 YPCompiler.convertFunctionCSharp(FunctionCode);
85 //YPCompiler.convertStringCodesCSharp(VFC);
86 }
87 }
88#pragma warning restore 0168, 0219
89 YP.seen();
90 myCS_SW.Close();
91 YP.told();
92 StringBuilder bu = myCS_SW.GetStringBuilder();
93 string finalcode = "//YPEncoded\n" + bu.ToString();
94 // FIX script events (we're in the same script)
95 // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit('
96 finalcode = Regex.Replace(finalcode,
97 @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,",
98 @"this.$1(",
99 RegexOptions.Compiled | RegexOptions.Singleline);
100 finalcode = Regex.Replace(finalcode,
101 @"YP.script_event\(Atom.a\(\""(.*?)""\)\,",
102 @"this.$1(",
103 RegexOptions.Compiled | RegexOptions.Singleline);
104 finalcode = Regex.Replace(finalcode,
105 @" static ",
106 @" ",
107 RegexOptions.Compiled | RegexOptions.Singleline);
108
109 finalcode = CS_code+"\n\r"+ finalcode;
110 finalcode = Regex.Replace(finalcode,
111 @"PrologCallback",
112 @"public IEnumerable<bool> ",
113 RegexOptions.Compiled | RegexOptions.Singleline);
114 return finalcode;
115 }
116 }
117}
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.lexer.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.lexer.cs
index cad27b7..f87f446 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.lexer.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.lexer.cs
@@ -357,21 +357,25 @@ public override int yynum { get { return 90; }}
357public class HTTP_REQUEST_EVENT : TOKEN{ public override string yyname { get { return "HTTP_REQUEST_EVENT";}} 357public class HTTP_REQUEST_EVENT : TOKEN{ public override string yyname { get { return "HTTP_REQUEST_EVENT";}}
358public override int yynum { get { return 91; }} 358public override int yynum { get { return 91; }}
359 public HTTP_REQUEST_EVENT(Lexer yyl):base(yyl) {}} 359 public HTTP_REQUEST_EVENT(Lexer yyl):base(yyl) {}}
360//%IDENT+92 360//%TRANSACTION_RESULT_EVENT+92
361public class IDENT : TOKEN{ public override string yyname { get { return "IDENT";}} 361public class TRANSACTION_RESULT_EVENT : TOKEN{ public override string yyname { get { return "TRANSACTION_RESULT_EVENT";}}
362public override int yynum { get { return 92; }} 362public override int yynum { get { return 92; }}
363 public TRANSACTION_RESULT_EVENT(Lexer yyl):base(yyl) {}}
364//%IDENT+93
365public class IDENT : TOKEN{ public override string yyname { get { return "IDENT";}}
366public override int yynum { get { return 93; }}
363 public IDENT(Lexer yyl):base(yyl) {}} 367 public IDENT(Lexer yyl):base(yyl) {}}
364//%INTEGER_CONSTANT+93 368//%INTEGER_CONSTANT+94
365public class INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "INTEGER_CONSTANT";}} 369public class INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "INTEGER_CONSTANT";}}
366public override int yynum { get { return 93; }} 370public override int yynum { get { return 94; }}
367 public INTEGER_CONSTANT(Lexer yyl):base(yyl) {}} 371 public INTEGER_CONSTANT(Lexer yyl):base(yyl) {}}
368//%HEX_INTEGER_CONSTANT+94 372//%HEX_INTEGER_CONSTANT+95
369public class HEX_INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "HEX_INTEGER_CONSTANT";}} 373public class HEX_INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "HEX_INTEGER_CONSTANT";}}
370public override int yynum { get { return 94; }} 374public override int yynum { get { return 95; }}
371 public HEX_INTEGER_CONSTANT(Lexer yyl):base(yyl) {}} 375 public HEX_INTEGER_CONSTANT(Lexer yyl):base(yyl) {}}
372//%FLOAT_CONSTANT+95 376//%FLOAT_CONSTANT+96
373public class FLOAT_CONSTANT : TOKEN{ public override string yyname { get { return "FLOAT_CONSTANT";}} 377public class FLOAT_CONSTANT : TOKEN{ public override string yyname { get { return "FLOAT_CONSTANT";}}
374public override int yynum { get { return 95; }} 378public override int yynum { get { return 96; }}
375 public FLOAT_CONSTANT(Lexer yyl):base(yyl) {}} 379 public FLOAT_CONSTANT(Lexer yyl):base(yyl) {}}
376//%|LSLTokens 380//%|LSLTokens
377public class yyLSLTokens : YyLexer { 381public class yyLSLTokens : YyLexer {
@@ -476,9 +480,9 @@ public class yyLSLTokens : YyLexer {
4762,1,3,56,0, 4802,1,3,56,0,
4772,1,3,57,0, 4812,1,3,57,0,
4782,1,7,9,122, 4822,1,7,9,122,
4799,1,9,3,96, 4839,1,9,3,238,
48033,123,5,1,3, 48422,123,5,1,3,
48196,33,2,1,7, 485238,22,2,1,7,
48210,124,9,1,10, 48610,124,9,1,10,
4833,178,0,125,5, 4873,178,0,125,5,
4841,3,178,0,2, 4881,3,178,0,2,
@@ -502,8 +506,8 @@ public class yyLSLTokens : YyLexer {
5029,0,2,1,3, 5069,0,2,1,3,
50310,0,2,1,7, 50710,0,2,1,7,
50415,134,9,1,15, 50815,134,9,1,15,
5053,15,7,135,5, 5093,0,6,135,5,
5061,3,15,7,2, 5101,3,0,6,2,
5071,7,17,136,9, 5111,7,17,136,9,
5081,17,3,0,224, 5121,17,3,0,224,
509137,5,1,3,0, 513137,5,1,3,0,
@@ -573,18 +577,18 @@ public class yyLSLTokens : YyLexer {
57379,0,77,0,77, 57779,0,77,0,77,
5740,69,0,78,0, 5780,69,0,78,0,
57584,0,160,12,1, 57984,0,160,12,1,
5761073,161,5,119,3, 5801095,161,5,119,3,
5771,0,162,12,1, 5811,0,162,12,1,
5781074,163,5,0,164, 5821096,163,5,0,164,
57911,1,1041,0,165, 58311,1,1063,0,165,
5804,0,1,-1,3, 5844,0,1,-1,3,
5819,0,162,3,10, 5859,0,162,3,10,
5820,166,12,1,1275, 5860,166,12,1,1297,
583167,5,0,168,11, 587167,5,0,168,11,
5841,1045,0,165,1, 5881,1067,0,165,1,
585-1,3,13,0,162, 589-1,3,13,0,162,
5863,0,3,162,3, 5903,0,3,162,3,
58796,33,162,3,32, 5910,6,162,3,32,
5880,162,3,33,0, 5920,162,3,33,0,
589162,3,34,0,162, 593162,3,34,0,162,
5903,35,0,162,3, 5943,35,0,162,3,
@@ -593,12 +597,12 @@ public class yyLSLTokens : YyLexer {
593162,3,40,0,162, 597162,3,40,0,162,
5943,41,0,162,3, 5983,41,0,162,3,
59542,0,169,12,1, 59942,0,169,12,1,
5961414,170,5,1,3, 6001436,170,5,1,3,
59747,0,171,12,1, 60147,0,171,12,1,
5981518,172,5,0,173, 6021540,172,5,0,173,
59911,1,1027,0,165, 60311,1,1049,0,165,
6001,-1,174,11,1, 6041,-1,174,11,1,
6011041,0,165,1,-1, 6051063,0,165,1,-1,
6023,43,0,162,3, 6063,43,0,162,3,
60344,0,162,3,45, 60744,0,162,3,45,
6040,162,3,46,0, 6080,162,3,46,0,
@@ -641,15 +645,15 @@ public class yyLSLTokens : YyLexer {
641162,3,93,0,162, 645162,3,93,0,162,
6423,94,0,162,3, 6463,94,0,162,3,
64395,0,162,3,96, 64795,0,162,3,96,
6440,162,3,97,0, 6480,162,3,238,22,
645162,3,98,0,162, 649162,3,98,0,162,
6463,99,0,162,3, 6503,99,0,162,3,
647100,0,162,3,101, 651100,0,162,3,101,
6480,162,3,102,0, 6520,162,3,97,0,
649162,3,103,0,162, 653162,3,103,0,162,
6503,104,0,162,3, 6543,104,0,162,3,
651105,0,162,3,106, 655105,0,162,3,106,
6520,162,3,107,0, 6560,162,3,102,0,
653162,3,108,0,162, 657162,3,108,0,162,
6543,109,0,162,3, 6583,109,0,162,3,
655110,0,162,3,111, 659110,0,162,3,111,
@@ -665,11 +669,11 @@ public class yyLSLTokens : YyLexer {
665162,3,123,0,162, 669162,3,123,0,162,
6663,124,0,162,3, 6703,124,0,162,3,
667125,0,162,3,96, 671125,0,162,3,96,
6686,162,3,126,0, 6726,162,3,107,0,
669162,3,58,15,162, 673162,3,126,0,162,
6703,59,15,162,3, 6743,58,15,162,3,
671136,4,162,3,160, 67559,15,162,3,136,
6720,162,3,15,7, 6764,162,3,160,0,
673162,3,170,0,162, 677162,3,170,0,162,
6743,171,0,162,3, 6783,171,0,162,3,
675172,0,162,3,173, 679172,0,162,3,173,
@@ -687,17 +691,17 @@ public class yyLSLTokens : YyLexer {
68778,0,73,0,84, 69178,0,73,0,84,
6880,73,0,65,0, 6920,73,0,65,0,
68976,0,176,12,1, 69376,0,176,12,1,
6901674,177,5,91,3, 6941696,177,5,91,3,
6919,0,178,12,1, 6959,0,178,12,1,
69240509,179,5,0,180, 69642571,179,5,0,180,
69311,1,1050,0,165, 69711,1,1072,0,165,
6941,-1,3,10,0, 6981,-1,3,10,0,
695178,3,13,0,178, 699178,3,13,0,178,
6963,32,0,178,3, 7003,32,0,178,3,
69733,0,181,12,1, 70133,0,181,12,1,
69843542,182,5,1,3, 70245604,182,5,1,3,
69961,0,183,12,1, 70361,0,183,12,1,
70043657,184,5,0,185, 70445719,184,5,0,185,
70111,1,142,0,186, 70511,1,142,0,186,
7024,36,69,0,88, 7064,36,69,0,88,
7030,67,0,76,0, 7070,67,0,76,0,
@@ -714,13 +718,13 @@ public class yyLSLTokens : YyLexer {
71465,0,84,0,73, 71865,0,84,0,73,
7150,79,0,78,0, 7190,79,0,78,0,
7161,-1,3,34,0, 7201,-1,3,34,0,
717189,12,1,43783,190, 721189,12,1,45845,190,
7185,0,191,11,1, 7225,0,191,11,1,
719941,0,165,1,-1, 723963,0,165,1,-1,
7203,37,0,192,12, 7243,37,0,192,12,
7211,41733,193,5,1, 7251,43795,193,5,1,
7223,61,0,194,12, 7263,61,0,194,12,
7231,41848,195,5,0, 7271,43910,195,5,0,
724196,11,1,40,0, 728196,11,1,40,0,
725197,4,28,80,0, 729197,4,28,80,0,
72669,0,82,0,67, 73069,0,82,0,67,
@@ -734,9 +738,9 @@ public class yyLSLTokens : YyLexer {
73482,0,67,0,69, 73882,0,67,0,69,
7350,78,0,84,0, 7390,78,0,84,0,
7361,-1,3,38,0, 7401,-1,3,38,0,
737200,12,1,41974,201, 741200,12,1,44036,201,
7385,1,3,38,0, 7425,1,3,38,0,
739202,12,1,42074,203, 743202,12,1,44136,203,
7405,0,204,11,1, 7445,0,204,11,1,
741185,0,205,4,14, 745185,0,205,4,14,
74265,0,77,0,80, 74665,0,77,0,80,
@@ -746,7 +750,7 @@ public class yyLSLTokens : YyLexer {
7460,207,4,6,65, 7500,207,4,6,65,
7470,77,0,80,0, 7510,77,0,80,0,
7481,-1,3,40,0, 7521,-1,3,40,0,
749208,12,1,41246,209, 753208,12,1,43308,209,
7505,0,210,11,1, 7545,0,210,11,1,
75171,0,211,4,20, 75571,0,211,4,20,
75276,0,69,0,70, 75676,0,69,0,70,
@@ -754,7 +758,7 @@ public class yyLSLTokens : YyLexer {
75480,0,65,0,82, 75880,0,65,0,82,
7550,69,0,78,0, 7590,69,0,78,0,
7561,-1,3,41,0, 7601,-1,3,41,0,
757212,12,1,41610,213, 761212,12,1,43672,213,
7585,0,214,11,1, 7625,0,214,11,1,
75976,0,215,4,22, 76376,0,215,4,22,
76082,0,73,0,71, 76482,0,73,0,71,
@@ -763,9 +767,9 @@ public class yyLSLTokens : YyLexer {
7630,82,0,69,0, 7670,82,0,69,0,
76478,0,1,-1,3, 76878,0,1,-1,3,
76542,0,216,12,1, 76942,0,216,12,1,
76642215,217,5,1,3, 77044277,217,5,1,3,
76761,0,218,12,1, 77161,0,218,12,1,
76842330,219,5,0,220, 77244392,219,5,0,220,
76911,1,28,0,221, 77311,1,28,0,221,
7704,22,83,0,84, 7744,22,83,0,84,
7710,65,0,82,0, 7750,65,0,82,0,
@@ -777,9 +781,9 @@ public class yyLSLTokens : YyLexer {
7770,84,0,65,0, 7810,84,0,65,0,
77882,0,1,-1,3, 78282,0,1,-1,3,
77943,0,224,12,1, 78343,0,224,12,1,
78045231,225,5,2,3, 78447293,225,5,2,3,
78161,0,226,12,1, 78561,0,226,12,1,
78245346,227,5,0,228, 78647408,227,5,0,228,
78311,1,16,0,229, 78711,1,16,0,229,
7844,22,80,0,76, 7884,22,80,0,76,
7850,85,0,83,0, 7890,85,0,83,0,
@@ -787,7 +791,7 @@ public class yyLSLTokens : YyLexer {
7870,85,0,65,0, 7910,85,0,65,0,
78876,0,83,0,1, 79276,0,83,0,1,
789-1,3,43,0,230, 793-1,3,43,0,230,
79012,1,45468,231,5, 79412,1,47530,231,5,
7910,232,11,1,2, 7950,232,11,1,2,
7920,233,4,18,73, 7960,233,4,18,73,
7930,78,0,67,0, 7970,78,0,67,0,
@@ -798,15 +802,15 @@ public class yyLSLTokens : YyLexer {
7984,8,80,0,76, 8024,8,80,0,76,
7990,85,0,83,0, 8030,85,0,83,0,
8001,-1,3,44,0, 8041,-1,3,44,0,
801236,12,1,42456,237, 805236,12,1,44518,237,
8025,0,238,11,1, 8065,0,238,11,1,
80361,0,239,4,10, 80761,0,239,4,10,
80467,0,79,0,77, 80867,0,79,0,77,
8050,77,0,65,0, 8090,77,0,65,0,
8061,-1,3,45,0, 8101,-1,3,45,0,
807240,12,1,40641,241, 811240,12,1,42703,241,
8085,2,3,45,0, 8125,2,3,45,0,
809242,12,1,40728,243, 813242,12,1,42790,243,
8105,0,244,11,1, 8145,0,244,11,1,
81110,0,245,4,18, 81510,0,245,4,18,
81268,0,69,0,67, 81668,0,69,0,67,
@@ -814,7 +818,7 @@ public class yyLSLTokens : YyLexer {
81477,0,69,0,78, 81877,0,69,0,78,
8150,84,0,1,-1, 8190,84,0,1,-1,
8163,61,0,246,12, 8203,61,0,246,12,
8171,40876,247,5,0, 8211,42938,247,5,0,
818248,11,1,22,0, 822248,11,1,22,0,
819249,4,24,77,0, 823249,4,24,77,0,
82073,0,78,0,85, 82473,0,78,0,85,
@@ -827,9 +831,9 @@ public class yyLSLTokens : YyLexer {
8270,78,0,85,0, 8310,78,0,85,0,
82883,0,1,-1,3, 83283,0,1,-1,3,
82946,0,252,12,1, 83346,0,252,12,1,
83042577,253,5,14,3, 83444639,253,5,14,3,
83148,0,254,12,1, 83548,0,254,12,1,
83240243,255,5,14,3, 83642305,255,5,14,3,
83348,0,254,3,49, 83748,0,254,3,49,
8340,254,3,50,0, 8380,254,3,50,0,
835254,3,51,0,254, 839254,3,51,0,254,
@@ -839,11 +843,11 @@ public class yyLSLTokens : YyLexer {
839254,3,56,0,254, 843254,3,56,0,254,
8403,57,0,254,3, 8443,57,0,254,3,
841101,0,256,12,1, 845101,0,256,12,1,
84239706,257,5,12,3, 84641768,257,5,12,3,
84343,0,258,12,1, 84743,0,258,12,1,
84440033,259,5,10,3, 84842095,259,5,10,3,
84548,0,260,12,1, 84948,0,260,12,1,
84639768,261,5,12,3, 85041830,261,5,12,3,
84748,0,260,3,49, 85148,0,260,3,49,
8480,260,3,50,0, 8520,260,3,50,0,
849260,3,51,0,260, 853260,3,51,0,260,
@@ -853,8 +857,8 @@ public class yyLSLTokens : YyLexer {
853260,3,56,0,260, 857260,3,56,0,260,
8543,57,0,260,3, 8583,57,0,260,3,
855102,0,262,12,1, 859102,0,262,12,1,
85639774,263,5,0,264, 86041836,263,5,0,264,
85711,1,882,0,265, 86111,1,904,0,265,
8584,28,70,0,76, 8624,28,70,0,76,
8590,79,0,65,0, 8630,79,0,65,0,
86084,0,95,0,67, 86484,0,95,0,67,
@@ -862,7 +866,7 @@ public class yyLSLTokens : YyLexer {
86283,0,84,0,65, 86683,0,84,0,65,
8630,78,0,84,0, 8670,78,0,84,0,
8641,-1,3,70,0, 8681,-1,3,70,0,
865262,266,11,1,882, 869262,266,11,1,904,
8660,265,1,-1,3, 8700,265,1,-1,3,
86749,0,260,3,50, 87149,0,260,3,50,
8680,260,3,51,0, 8720,260,3,51,0,
@@ -884,7 +888,7 @@ public class yyLSLTokens : YyLexer {
8841,-1,3,102,0, 8881,-1,3,102,0,
885262,3,69,0,256, 889262,3,69,0,256,
8863,70,0,262,267, 8903,70,0,262,267,
88711,1,882,0,265, 89111,1,904,0,265,
8881,-1,3,49,0, 8921,-1,3,49,0,
889254,3,50,0,254, 893254,3,50,0,254,
8903,51,0,254,3, 8943,51,0,254,3,
@@ -901,15 +905,15 @@ public class yyLSLTokens : YyLexer {
9010,82,0,73,0, 9050,82,0,73,0,
90279,0,68,0,1, 90679,0,68,0,1,
903-1,3,47,0,270, 907-1,3,47,0,270,
90412,1,42698,271,5, 90812,1,44760,271,5,
9053,3,47,0,272, 9093,3,47,0,272,
90612,1,42922,273,5, 91012,1,44984,273,5,
907118,3,1,0,274, 911118,3,1,0,274,
90812,1,42923,275,5, 91212,1,44985,275,5,
909118,3,1,0,274, 913118,3,1,0,274,
9103,9,0,274,3, 9143,9,0,274,3,
91196,33,274,3,13, 91513,0,274,3,0,
9120,274,3,0,3, 9163,274,3,0,6,
913274,3,32,0,274, 917274,3,32,0,274,
9143,33,0,274,3, 9183,33,0,274,3,
91534,0,274,3,35, 91934,0,274,3,35,
@@ -960,16 +964,16 @@ public class yyLSLTokens : YyLexer {
9600,274,3,93,0, 9640,274,3,93,0,
961274,3,94,0,274, 965274,3,94,0,274,
9623,95,0,274,3, 9663,95,0,274,3,
96396,0,274,3,97, 96796,0,274,3,238,
9640,274,3,98,0, 96822,274,3,98,0,
965274,3,99,0,274, 969274,3,99,0,274,
9663,100,0,274,3, 9703,100,0,274,3,
967101,0,274,3,102, 971101,0,274,3,97,
9680,274,3,103,0, 9720,274,3,103,0,
969274,3,104,0,274, 973274,3,104,0,274,
9703,105,0,274,3, 9743,105,0,274,3,
971106,0,274,3,107, 975106,0,274,3,102,
9720,274,3,15,7, 9760,274,3,108,0,
973274,3,109,0,274, 977274,3,109,0,274,
9743,110,0,274,3, 9783,110,0,274,3,
975111,0,274,3,112, 979111,0,274,3,112,
@@ -981,10 +985,10 @@ public class yyLSLTokens : YyLexer {
981274,3,119,0,274, 985274,3,119,0,274,
9823,120,0,274,3, 9863,120,0,274,3,
983121,0,274,3,122, 987121,0,274,3,122,
9840,274,3,108,0, 9880,274,3,123,0,
985274,3,124,0,274, 989274,3,124,0,274,
9863,125,0,274,3, 9903,125,0,274,3,
98796,6,274,3,123, 99196,6,274,3,107,
9880,274,3,126,0, 9920,274,3,126,0,
989274,3,58,15,274, 993274,3,58,15,274,
9903,59,15,274,3, 9943,59,15,274,3,
@@ -1001,11 +1005,11 @@ public class yyLSLTokens : YyLexer {
1001274,3,0,224,274, 1005274,3,0,224,274,
10023,40,32,274,3, 10063,40,32,274,3,
100363,32,274,276,11, 100763,32,274,276,11,
10041,1054,0,165,1, 10081,1076,0,165,1,
1005-1,3,9,0,274, 1009-1,3,9,0,274,
10063,96,33,274,3, 10103,13,0,274,3,
100713,0,274,3,0, 10110,3,274,3,0,
10083,274,3,32,0, 10126,274,3,32,0,
1009274,3,33,0,274, 1013274,3,33,0,274,
10103,34,0,274,3, 10143,34,0,274,3,
101135,0,274,3,36, 101535,0,274,3,36,
@@ -1056,16 +1060,16 @@ public class yyLSLTokens : YyLexer {
10560,274,3,94,0, 10600,274,3,94,0,
1057274,3,95,0,274, 1061274,3,95,0,274,
10583,96,0,274,3, 10623,96,0,274,3,
105997,0,274,3,98, 1063238,22,274,3,98,
10600,274,3,99,0, 10640,274,3,99,0,
1061274,3,100,0,274, 1065274,3,100,0,274,
10623,101,0,274,3, 10663,101,0,274,3,
1063102,0,274,3,103, 106797,0,274,3,103,
10640,274,3,104,0, 10680,274,3,104,0,
1065274,3,105,0,274, 1069274,3,105,0,274,
10663,106,0,274,3, 10703,106,0,274,3,
1067107,0,274,3,15, 1071102,0,274,3,108,
10687,274,3,109,0, 10720,274,3,109,0,
1069274,3,110,0,274, 1073274,3,110,0,274,
10703,111,0,274,3, 10743,111,0,274,3,
1071112,0,274,3,113, 1075112,0,274,3,113,
@@ -1076,11 +1080,11 @@ public class yyLSLTokens : YyLexer {
10760,274,3,119,0, 10800,274,3,119,0,
1077274,3,120,0,274, 1081274,3,120,0,274,
10783,121,0,274,3, 10823,121,0,274,3,
1079122,0,274,3,108, 1083122,0,274,3,123,
10800,274,3,124,0, 10840,274,3,124,0,
1081274,3,125,0,274, 1085274,3,125,0,274,
10823,96,6,274,3, 10863,96,6,274,3,
1083123,0,274,3,126, 1087107,0,274,3,126,
10840,274,3,58,15, 10880,274,3,58,15,
1085274,3,59,15,274, 1089274,3,59,15,274,
10863,136,4,274,3, 10903,136,4,274,3,
@@ -1096,9 +1100,9 @@ public class yyLSLTokens : YyLexer {
10961,274,3,0,224, 11001,274,3,0,224,
1097274,3,40,32,274, 1101274,3,40,32,274,
10983,63,32,274,277, 11023,63,32,274,277,
109911,1,1054,0,165, 110311,1,1076,0,165,
11001,-1,3,61,0, 11041,-1,3,61,0,
1101278,12,1,43173,279, 1105278,12,1,45235,279,
11025,0,280,11,1, 11065,0,280,11,1,
110334,0,281,4,24, 110734,0,281,4,24,
110483,0,76,0,65, 110883,0,76,0,65,
@@ -1107,19 +1111,19 @@ public class yyLSLTokens : YyLexer {
11070,85,0,65,0, 11110,85,0,65,0,
110876,0,83,0,1, 111276,0,83,0,1,
1109-1,3,42,0,282, 1113-1,3,42,0,282,
111012,1,42799,283,5, 111412,1,44861,283,5,
11110,284,11,1,1015, 11150,284,11,1,1037,
11120,165,1,-1,285, 11160,165,1,-1,285,
111311,1,96,0,286, 111711,1,96,0,286,
11144,10,83,0,76, 11184,10,83,0,76,
11150,65,0,83,0, 11190,65,0,83,0,
111672,0,1,-1,3, 112072,0,1,-1,3,
111748,0,287,12,1, 112148,0,287,12,1,
111839296,288,5,13,3, 112241358,288,5,13,3,
1119120,0,289,12,1, 1123120,0,289,12,1,
112039320,290,5,22,3, 112441382,290,5,22,3,
1121102,0,291,12,1, 1125102,0,291,12,1,
112239321,292,5,22,3, 112641383,292,5,22,3,
1123102,0,291,3,48, 1127102,0,291,3,48,
11240,291,3,49,0, 11280,291,3,49,0,
1125291,3,50,0,291, 1129291,3,50,0,291,
@@ -1138,7 +1142,7 @@ public class yyLSLTokens : YyLexer {
11383,68,0,291,3, 11423,68,0,291,3,
113969,0,291,3,70, 114369,0,291,3,70,
11400,291,293,11,1, 11440,291,293,11,1,
1141863,0,294,4,40, 1145885,0,294,4,40,
114272,0,69,0,88, 114672,0,69,0,88,
11430,95,0,73,0, 11470,95,0,73,0,
114478,0,84,0,69, 114878,0,84,0,69,
@@ -1166,9 +1170,9 @@ public class yyLSLTokens : YyLexer {
11660,291,3,70,0, 11700,291,3,70,0,
1167291,0,165,1,-1, 1171291,0,165,1,-1,
11683,48,0,295,12, 11723,48,0,295,12,
11691,39598,296,5,11, 11731,41660,296,5,11,
11703,46,0,297,12, 11743,46,0,297,12,
11711,39701,298,5,14, 11751,41763,298,5,14,
11723,48,0,254,3, 11763,48,0,254,3,
117349,0,254,3,50, 117749,0,254,3,50,
11740,254,3,51,0, 11780,254,3,51,0,
@@ -1180,7 +1184,7 @@ public class yyLSLTokens : YyLexer {
11803,101,0,256,3, 11843,101,0,256,3,
1181102,0,262,3,69, 1185102,0,262,3,69,
11820,256,3,70,0, 11860,256,3,70,0,
1183262,299,11,1,882, 1187262,299,11,1,904,
11840,265,1,-1,3, 11880,265,1,-1,3,
118548,0,295,3,49, 118948,0,295,3,49,
11860,295,3,50,0, 11900,295,3,50,0,
@@ -1190,7 +1194,7 @@ public class yyLSLTokens : YyLexer {
11900,295,3,55,0, 11940,295,3,55,0,
1191295,3,56,0,295, 1195295,3,56,0,295,
11923,57,0,295,300, 11963,57,0,295,300,
119311,1,857,0,301, 119711,1,879,0,301,
11944,32,73,0,78, 11984,32,73,0,78,
11950,84,0,69,0, 11990,84,0,69,0,
119671,0,69,0,82, 120071,0,69,0,82,
@@ -1207,7 +1211,7 @@ public class yyLSLTokens : YyLexer {
120756,0,295,3,54, 121156,0,295,3,54,
12080,295,3,46,0, 12120,295,3,46,0,
1209297,3,57,0,295, 1213297,3,57,0,295,
1210302,11,1,857,0, 1214302,11,1,879,0,
1211301,1,-1,3,49, 1215301,1,-1,3,49,
12120,295,3,50,0, 12160,295,3,50,0,
1213295,3,51,0,295, 1217295,3,51,0,295,
@@ -1217,16 +1221,16 @@ public class yyLSLTokens : YyLexer {
1217295,3,56,0,295, 1221295,3,56,0,295,
12183,57,0,295,3, 12223,57,0,295,3,
121959,0,303,12,1, 122359,0,303,12,1,
122043300,304,5,0,305, 122445362,304,5,0,305,
122111,1,46,0,306, 122511,1,46,0,306,
12224,18,83,0,69, 12264,18,83,0,69,
12230,77,0,73,0, 12270,77,0,73,0,
122467,0,79,0,76, 122867,0,79,0,76,
12250,79,0,78,0, 12290,79,0,78,0,
12261,-1,3,60,0, 12301,-1,3,60,0,
1227307,12,1,44268,308, 1231307,12,1,46330,308,
12285,2,3,60,0, 12325,2,3,60,0,
1229309,12,1,44382,310, 1233309,12,1,46444,310,
12305,0,311,11,1, 12345,0,311,11,1,
1231197,0,312,4,20, 1235197,0,312,4,20,
123276,0,69,0,70, 123676,0,69,0,70,
@@ -1234,7 +1238,7 @@ public class yyLSLTokens : YyLexer {
123483,0,72,0,73, 123883,0,72,0,73,
12350,70,0,84,0, 12390,70,0,84,0,
12361,-1,3,61,0, 12401,-1,3,61,0,
1237313,12,1,44503,314, 1241313,12,1,46565,314,
12385,0,315,11,1, 12425,0,315,11,1,
1239148,0,316,4,22, 1243148,0,316,4,22,
124076,0,69,0,83, 124476,0,69,0,83,
@@ -1249,9 +1253,9 @@ public class yyLSLTokens : YyLexer {
12490,71,0,76,0, 12530,71,0,76,0,
125069,0,1,-1,3, 125469,0,1,-1,3,
125161,0,319,12,1, 125561,0,319,12,1,
125244629,320,5,1,3, 125646691,320,5,1,3,
125361,0,321,12,1, 125761,0,321,12,1,
125444744,322,5,0,323, 125846806,322,5,0,323,
125511,1,136,0,324, 125911,1,136,0,324,
12564,26,69,0,81, 12604,26,69,0,81,
12570,85,0,65,0, 12610,85,0,65,0,
@@ -1264,9 +1268,9 @@ public class yyLSLTokens : YyLexer {
126481,0,85,0,65, 126881,0,85,0,65,
12650,76,0,83,0, 12690,76,0,83,0,
12661,-1,3,62,0, 12701,-1,3,62,0,
1267327,12,1,44870,328, 1271327,12,1,46932,328,
12685,2,3,61,0, 12725,2,3,61,0,
1269329,12,1,44985,330, 1273329,12,1,47047,330,
12705,0,331,11,1, 12745,0,331,11,1,
1271154,0,332,4,28, 1275154,0,332,4,28,
127271,0,82,0,69, 127671,0,82,0,69,
@@ -1276,7 +1280,7 @@ public class yyLSLTokens : YyLexer {
127685,0,65,0,76, 128085,0,65,0,76,
12770,83,0,1,-1, 12810,83,0,1,-1,
12783,62,0,333,12, 12823,62,0,333,12,
12791,45106,334,5,0, 12831,47168,334,5,0,
1280335,11,1,203,0, 1284335,11,1,203,0,
1281336,4,22,82,0, 1285336,4,22,82,0,
128273,0,71,0,72, 128673,0,71,0,72,
@@ -1291,13 +1295,13 @@ public class yyLSLTokens : YyLexer {
12910,71,0,76,0, 12950,71,0,76,0,
129269,0,1,-1,3, 129669,0,1,-1,3,
129364,0,339,12,1, 129764,0,339,12,1,
129443421,340,5,0,341, 129845483,340,5,0,341,
129511,1,106,0,342, 129911,1,106,0,342,
12964,4,65,0,84, 13004,4,65,0,84,
12970,1,-1,3,65, 13010,1,-1,3,65,
12980,343,12,1,1675, 13020,343,12,1,1697,
1299344,5,63,3,109, 1303344,5,63,3,109,
13000,345,12,1,1676, 13040,345,12,1,1698,
1301346,5,63,3,109, 1305346,5,63,3,109,
13020,345,3,110,0, 13060,345,3,110,0,
1303345,3,111,0,345, 1307345,3,111,0,345,
@@ -1349,7 +1353,7 @@ public class yyLSLTokens : YyLexer {
1349105,0,345,3,106, 1353105,0,345,3,106,
13500,345,3,107,0, 13540,345,3,107,0,
1351345,3,108,0,345, 1355345,3,108,0,345,
1352347,11,1,845,0, 1356347,11,1,867,0,
1353348,4,10,73,0, 1357348,4,10,73,0,
135468,0,69,0,78, 135868,0,69,0,78,
13550,84,0,1,-1, 13590,84,0,1,-1,
@@ -1403,7 +1407,7 @@ public class yyLSLTokens : YyLexer {
1403345,3,106,0,345, 1407345,3,106,0,345,
14043,107,0,345,3, 14083,107,0,345,3,
1405108,0,345,349,11, 1409108,0,345,349,11,
14061,845,0,348,1, 14101,867,0,348,1,
1407-1,3,66,0,343, 1411-1,3,66,0,343,
14083,67,0,343,3, 14123,67,0,343,3,
140968,0,343,3,69, 141368,0,343,3,69,
@@ -1425,7 +1429,7 @@ public class yyLSLTokens : YyLexer {
142588,0,343,3,89, 142988,0,343,3,89,
14260,343,3,90,0, 14300,343,3,90,0,
1427343,3,91,0,350, 1431343,3,91,0,350,
142812,1,41124,351,5, 143212,1,43186,351,5,
14290,352,11,1,126, 14330,352,11,1,126,
14300,353,4,24,76, 14340,353,4,24,76,
14310,69,0,70,0, 14350,69,0,70,0,
@@ -1434,7 +1438,7 @@ public class yyLSLTokens : YyLexer {
143467,0,75,0,69, 143867,0,75,0,69,
14350,84,0,1,-1, 14390,84,0,1,-1,
14363,93,0,354,12, 14403,93,0,354,12,
14371,41489,355,5,0, 14411,43551,355,5,0,
1438356,11,1,131,0, 1442356,11,1,131,0,
1439357,4,26,82,0, 1443357,4,26,82,0,
144073,0,71,0,72, 144473,0,71,0,72,
@@ -1443,21 +1447,21 @@ public class yyLSLTokens : YyLexer {
14430,67,0,75,0, 14470,67,0,75,0,
144469,0,84,0,1, 144869,0,84,0,1,
1445-1,3,94,0,358, 1449-1,3,94,0,358,
144612,1,45593,359,5, 145012,1,47655,359,5,
14470,360,11,1,170, 14510,360,11,1,170,
14480,361,4,10,67, 14520,361,4,10,67,
14490,65,0,82,0, 14530,65,0,82,0,
145069,0,84,0,1, 145469,0,84,0,1,
1451-1,3,95,0,343, 1455-1,3,95,0,343,
14523,97,0,362,12, 14563,97,0,362,12,
14531,20677,363,5,63, 14571,22739,363,5,63,
14543,109,0,345,3, 14583,109,0,345,3,
1455110,0,345,3,111, 1459110,0,345,3,111,
14560,345,3,112,0, 14600,345,3,112,0,
1457345,3,113,0,345, 1461345,3,113,0,345,
14583,114,0,345,3, 14623,114,0,345,3,
1459115,0,345,3,116, 1463115,0,345,3,116,
14600,364,12,1,20712, 14640,364,12,1,22774,
1461365,5,63,3,109, 1465365,5,63,3,109,
14620,345,3,110,0, 14660,345,3,110,0,
1463345,3,111,0,345, 1467345,3,111,0,345,
@@ -1465,7 +1469,7 @@ public class yyLSLTokens : YyLexer {
1465113,0,345,3,114, 1469113,0,345,3,114,
14660,345,3,115,0, 14700,345,3,115,0,
1467345,3,116,0,366, 1471345,3,116,0,366,
146812,1,20747,367,5, 147212,1,22809,367,5,
146963,3,109,0,345, 147363,3,109,0,345,
14703,110,0,345,3, 14743,110,0,345,3,
1471111,0,345,3,112, 1475111,0,345,3,112,
@@ -1508,7 +1512,7 @@ public class yyLSLTokens : YyLexer {
15080,345,3,90,0, 15120,345,3,90,0,
1509345,3,95,0,345, 1513345,3,95,0,345,
15103,97,0,368,12, 15143,97,0,368,12,
15111,20790,369,5,63, 15151,22852,369,5,63,
15123,109,0,345,3, 15163,109,0,345,3,
1513110,0,345,3,111, 1517110,0,345,3,111,
15140,345,3,112,0, 15180,345,3,112,0,
@@ -1552,7 +1556,7 @@ public class yyLSLTokens : YyLexer {
15523,95,0,345,3, 15563,95,0,345,3,
155397,0,345,3,98, 155797,0,345,3,98,
15540,345,3,99,0, 15580,345,3,99,0,
1555370,12,1,20835,371, 1559370,12,1,22897,371,
15565,63,3,109,0, 15605,63,3,109,0,
1557345,3,110,0,345, 1561345,3,110,0,345,
15583,111,0,345,3, 15623,111,0,345,3,
@@ -1601,7 +1605,7 @@ public class yyLSLTokens : YyLexer {
1601345,3,102,0,345, 1605345,3,102,0,345,
16023,103,0,345,3, 16063,103,0,345,3,
1603104,0,372,12,1, 1607104,0,372,12,1,
160420885,373,5,63,3, 160822947,373,5,63,3,
1605109,0,345,3,110, 1609109,0,345,3,110,
16060,345,3,111,0, 16100,345,3,111,0,
1607345,3,112,0,345, 1611345,3,112,0,345,
@@ -1662,7 +1666,7 @@ public class yyLSLTokens : YyLexer {
16623,105,0,345,3, 16663,105,0,345,3,
1663106,0,345,3,107, 1667106,0,345,3,107,
16640,345,3,108,0, 16680,345,3,108,0,
1665345,376,11,1,845, 1669345,376,11,1,867,
16660,348,1,-1,3, 16700,348,1,-1,3,
1667100,0,345,3,101, 1671100,0,345,3,101,
16680,345,3,102,0, 16720,345,3,102,0,
@@ -1671,7 +1675,7 @@ public class yyLSLTokens : YyLexer {
1671105,0,345,3,106, 1675105,0,345,3,106,
16720,345,3,107,0, 16760,345,3,107,0,
1673345,3,108,0,345, 1677345,3,108,0,345,
1674377,11,1,845,0, 1678377,11,1,867,0,
1675348,1,-1,3,98, 1679348,1,-1,3,98,
16760,345,3,99,0, 16800,345,3,99,0,
1677345,3,100,0,345, 1681345,3,100,0,345,
@@ -1682,7 +1686,7 @@ public class yyLSLTokens : YyLexer {
16823,106,0,345,3, 16863,106,0,345,3,
1683107,0,345,3,108, 1687107,0,345,3,108,
16840,345,378,11,1, 16880,345,378,11,1,
1685845,0,348,1,-1, 1689867,0,348,1,-1,
16863,117,0,345,3, 16903,117,0,345,3,
1687118,0,345,3,119, 1691118,0,345,3,119,
16880,345,3,120,0, 16920,345,3,120,0,
@@ -1717,17 +1721,17 @@ public class yyLSLTokens : YyLexer {
1717345,3,88,0,345, 1721345,3,88,0,345,
17183,89,0,345,3, 17223,89,0,345,3,
171990,0,345,3,95, 172390,0,345,3,95,
17200,379,12,1,21278, 17240,379,12,1,23340,
1721380,5,63,3,109, 1725380,5,63,3,109,
17220,345,3,110,0, 17260,345,3,110,0,
1723345,3,111,0,345, 1727345,3,111,0,345,
17243,112,0,345,3, 17283,112,0,345,3,
1725113,0,345,3,114, 1729113,0,345,3,114,
17260,381,12,1,21311, 17300,381,12,1,23373,
1727382,5,63,3,109, 1731382,5,63,3,109,
17280,345,3,110,0, 17320,345,3,110,0,
1729345,3,111,0,383, 1733345,3,111,0,383,
173012,1,21341,384,5, 173412,1,23403,384,5,
173163,3,109,0,345, 173563,3,109,0,345,
17323,110,0,345,3, 17363,110,0,345,3,
1733111,0,345,3,112, 1737111,0,345,3,112,
@@ -1735,7 +1739,7 @@ public class yyLSLTokens : YyLexer {
1735345,3,114,0,345, 1739345,3,114,0,345,
17363,115,0,345,3, 17403,115,0,345,3,
1737116,0,385,12,1, 1741116,0,385,12,1,
173821376,386,5,63,3, 174223438,386,5,63,3,
1739109,0,345,3,110, 1743109,0,345,3,110,
17400,345,3,111,0, 17440,345,3,111,0,
1741345,3,112,0,345, 1745345,3,112,0,345,
@@ -1777,14 +1781,14 @@ public class yyLSLTokens : YyLexer {
1777345,3,89,0,345, 1781345,3,89,0,345,
17783,90,0,345,3, 17823,90,0,345,3,
177995,0,387,12,1, 178395,0,387,12,1,
178021462,388,5,63,3, 178423524,388,5,63,3,
1781109,0,345,3,110, 1785109,0,345,3,110,
17820,345,3,111,0, 17860,345,3,111,0,
1783345,3,112,0,345, 1787345,3,112,0,345,
17843,113,0,345,3, 17883,113,0,345,3,
1785114,0,345,3,115, 1789114,0,345,3,115,
17860,345,3,116,0, 17900,345,3,116,0,
1787389,12,1,21497,390, 1791389,12,1,23559,390,
17885,63,3,109,0, 17925,63,3,109,0,
1789345,3,110,0,345, 1793345,3,110,0,345,
17903,111,0,345,3, 17943,111,0,345,3,
@@ -1827,13 +1831,13 @@ public class yyLSLTokens : YyLexer {
182789,0,345,3,90, 183189,0,345,3,90,
18280,345,3,95,0, 18320,345,3,95,0,
1829345,3,97,0,391, 1833345,3,97,0,391,
183012,1,21540,392,5, 183412,1,23602,392,5,
183163,3,109,0,345, 183563,3,109,0,345,
18323,110,0,345,3, 18363,110,0,345,3,
1833111,0,345,3,112, 1837111,0,345,3,112,
18340,345,3,113,0, 18380,345,3,113,0,
1835345,3,114,0,393, 1839345,3,114,0,393,
183612,1,21573,394,5, 184012,1,23635,394,5,
183763,3,109,0,345, 184163,3,109,0,345,
18383,110,0,345,3, 18423,110,0,345,3,
1839111,0,345,3,112, 1843111,0,345,3,112,
@@ -1881,7 +1885,7 @@ public class yyLSLTokens : YyLexer {
1881345,3,101,0,345, 1885345,3,101,0,345,
18823,102,0,345,3, 18863,102,0,345,3,
1883103,0,395,12,1, 1887103,0,395,12,1,
188421622,396,5,63,3, 188823684,396,5,63,3,
1885109,0,345,3,110, 1889109,0,345,3,110,
18860,345,3,111,0, 18900,345,3,111,0,
1887345,3,112,0,345, 1891345,3,112,0,345,
@@ -1927,14 +1931,14 @@ public class yyLSLTokens : YyLexer {
1927345,3,99,0,345, 1931345,3,99,0,345,
19283,100,0,345,3, 19323,100,0,345,3,
1929101,0,397,12,1, 1933101,0,397,12,1,
193021669,398,5,63,3, 193423731,398,5,63,3,
1931109,0,345,3,110, 1935109,0,345,3,110,
19320,345,3,111,0, 19360,345,3,111,0,
1933345,3,112,0,345, 1937345,3,112,0,345,
19343,113,0,345,3, 19383,113,0,345,3,
1935114,0,345,3,115, 1939114,0,345,3,115,
19360,345,3,116,0, 19400,345,3,116,0,
1937399,12,1,21704,400, 1941399,12,1,23766,400,
19385,63,3,109,0, 19425,63,3,109,0,
1939345,3,110,0,345, 1943345,3,110,0,345,
19403,111,0,345,3, 19443,111,0,345,3,
@@ -2040,19 +2044,19 @@ public class yyLSLTokens : YyLexer {
20403,106,0,345,3, 20443,106,0,345,3,
2041107,0,345,3,108, 2045107,0,345,3,108,
20420,345,403,11,1, 20460,345,403,11,1,
2043845,0,348,1,-1, 2047867,0,348,1,-1,
20443,102,0,345,3, 20483,102,0,345,3,
2045103,0,345,3,104, 2049103,0,345,3,104,
20460,345,3,105,0, 20500,345,3,105,0,
2047345,3,106,0,345, 2051345,3,106,0,345,
20483,107,0,345,3, 20523,107,0,345,3,
2049108,0,345,404,11, 2053108,0,345,404,11,
20501,845,0,348,1, 20541,867,0,348,1,
2051-1,3,104,0,345, 2055-1,3,104,0,345,
20523,105,0,345,3, 20563,105,0,345,3,
2053106,0,345,3,107, 2057106,0,345,3,107,
20540,345,3,108,0, 20580,345,3,108,0,
2055345,405,11,1,845, 2059345,405,11,1,867,
20560,348,1,-1,3, 20600,348,1,-1,3,
2057115,0,345,3,116, 2061115,0,345,3,116,
20580,345,3,117,0, 20620,345,3,117,0,
@@ -2100,7 +2104,7 @@ public class yyLSLTokens : YyLexer {
21003,106,0,345,3, 21043,106,0,345,3,
2101107,0,345,3,108, 2105107,0,345,3,108,
21020,345,406,11,1, 21060,345,406,11,1,
2103845,0,348,1,-1, 2107867,0,348,1,-1,
21043,98,0,345,3, 21083,98,0,345,3,
210599,0,345,3,100, 210999,0,345,3,100,
21060,345,3,101,0, 21100,345,3,101,0,
@@ -2110,7 +2114,7 @@ public class yyLSLTokens : YyLexer {
21100,345,3,106,0, 21140,345,3,106,0,
2111345,3,107,0,345, 2115345,3,107,0,345,
21123,108,0,345,407, 21163,108,0,345,407,
211311,1,845,0,348, 211711,1,867,0,348,
21141,-1,3,117,0, 21181,-1,3,117,0,
2115345,3,118,0,345, 2119345,3,118,0,345,
21163,119,0,345,3, 21203,119,0,345,3,
@@ -2156,7 +2160,7 @@ public class yyLSLTokens : YyLexer {
21563,106,0,345,3, 21603,106,0,345,3,
2157107,0,345,3,108, 2161107,0,345,3,108,
21580,345,408,11,1, 21620,345,408,11,1,
2159845,0,348,1,-1, 2163867,0,348,1,-1,
21603,97,0,345,3, 21643,97,0,345,3,
216198,0,345,3,99, 216598,0,345,3,99,
21620,345,3,100,0, 21660,345,3,100,0,
@@ -2167,7 +2171,7 @@ public class yyLSLTokens : YyLexer {
2167345,3,106,0,345, 2171345,3,106,0,345,
21683,107,0,345,3, 21723,107,0,345,3,
2169108,0,345,409,11, 2173108,0,345,409,11,
21701,845,0,348,1, 21741,867,0,348,1,
2171-1,3,117,0,345, 2175-1,3,117,0,345,
21723,118,0,345,3, 21763,118,0,345,3,
2173119,0,345,3,120, 2177119,0,345,3,120,
@@ -2212,7 +2216,7 @@ public class yyLSLTokens : YyLexer {
22123,105,0,345,3, 22163,105,0,345,3,
2213106,0,345,3,107, 2217106,0,345,3,107,
22140,345,3,108,0, 22180,345,3,108,0,
2215345,410,11,1,845, 2219345,410,11,1,867,
22160,348,1,-1,3, 22200,348,1,-1,3,
2217112,0,345,3,113, 2221112,0,345,3,113,
22180,345,3,114,0, 22220,345,3,114,0,
@@ -2262,10 +2266,10 @@ public class yyLSLTokens : YyLexer {
22620,345,3,106,0, 22660,345,3,106,0,
2263345,3,107,0,345, 2267345,3,107,0,345,
22643,108,0,345,411, 22683,108,0,345,411,
226511,1,845,0,348, 226911,1,867,0,348,
22661,-1,3,115,0, 22701,-1,3,115,0,
2267345,3,116,0,412, 2271345,3,116,0,412,
226812,1,22513,413,5, 227212,1,24575,413,5,
226963,3,109,0,345, 227363,3,109,0,345,
22703,110,0,345,3, 22743,110,0,345,3,
2271111,0,345,3,112, 2275111,0,345,3,112,
@@ -2308,13 +2312,13 @@ public class yyLSLTokens : YyLexer {
23080,345,3,90,0, 23120,345,3,90,0,
2309345,3,95,0,345, 2313345,3,95,0,345,
23103,97,0,414,12, 23143,97,0,414,12,
23111,22556,415,5,63, 23151,24618,415,5,63,
23123,109,0,345,3, 23163,109,0,345,3,
2313110,0,345,3,111, 2317110,0,345,3,111,
23140,345,3,112,0, 23180,345,3,112,0,
2315345,3,113,0,345, 2319345,3,113,0,345,
23163,114,0,416,12, 23203,114,0,416,12,
23171,22589,417,5,63, 23211,24651,417,5,63,
23183,109,0,345,3, 23223,109,0,345,3,
2319110,0,345,3,111, 2323110,0,345,3,111,
23200,345,3,112,0, 23240,345,3,112,0,
@@ -2361,7 +2365,7 @@ public class yyLSLTokens : YyLexer {
2361345,3,100,0,345, 2365345,3,100,0,345,
23623,101,0,345,3, 23663,101,0,345,3,
2363102,0,345,3,103, 2367102,0,345,3,103,
23640,418,12,1,22638, 23680,418,12,1,24700,
2365419,5,63,3,109, 2369419,5,63,3,109,
23660,345,3,110,0, 23700,345,3,110,0,
2367345,3,111,0,345, 2371345,3,111,0,345,
@@ -2407,7 +2411,7 @@ public class yyLSLTokens : YyLexer {
2407345,3,98,0,345, 2411345,3,98,0,345,
24083,99,0,345,3, 24123,99,0,345,3,
2409100,0,345,3,101, 2413100,0,345,3,101,
24100,420,12,1,22685, 24140,420,12,1,24747,
2411421,5,63,3,109, 2415421,5,63,3,109,
24120,345,3,110,0, 24160,345,3,110,0,
2413345,3,111,0,345, 2417345,3,111,0,345,
@@ -2415,7 +2419,7 @@ public class yyLSLTokens : YyLexer {
2415113,0,345,3,114, 2419113,0,345,3,114,
24160,345,3,115,0, 24200,345,3,115,0,
2417345,3,116,0,422, 2421345,3,116,0,422,
241812,1,22720,423,5, 242212,1,24782,423,5,
241963,3,109,0,345, 242363,3,109,0,345,
24203,110,0,345,3, 24243,110,0,345,3,
2421111,0,345,3,112, 2425111,0,345,3,112,
@@ -2519,20 +2523,20 @@ public class yyLSLTokens : YyLexer {
2519345,3,106,0,345, 2523345,3,106,0,345,
25203,107,0,345,3, 25243,107,0,345,3,
2521108,0,345,426,11, 2525108,0,345,426,11,
25221,845,0,348,1, 25261,867,0,348,1,
2523-1,3,102,0,345, 2527-1,3,102,0,345,
25243,103,0,345,3, 25283,103,0,345,3,
2525104,0,345,3,105, 2529104,0,345,3,105,
25260,345,3,106,0, 25300,345,3,106,0,
2527345,3,107,0,345, 2531345,3,107,0,345,
25283,108,0,345,427, 25323,108,0,345,427,
252911,1,845,0,348, 253311,1,867,0,348,
25301,-1,3,104,0, 25341,-1,3,104,0,
2531345,3,105,0,345, 2535345,3,105,0,345,
25323,106,0,345,3, 25363,106,0,345,3,
2533107,0,345,3,108, 2537107,0,345,3,108,
25340,345,428,11,1, 25380,345,428,11,1,
2535845,0,348,1,-1, 2539867,0,348,1,-1,
25363,115,0,345,3, 25403,115,0,345,3,
2537116,0,345,3,117, 2541116,0,345,3,117,
25380,345,3,118,0, 25420,345,3,118,0,
@@ -2579,7 +2583,7 @@ public class yyLSLTokens : YyLexer {
2579345,3,106,0,345, 2583345,3,106,0,345,
25803,107,0,345,3, 25843,107,0,345,3,
2581108,0,345,429,11, 2585108,0,345,429,11,
25821,845,0,348,1, 25861,867,0,348,1,
2583-1,3,98,0,345, 2587-1,3,98,0,345,
25843,99,0,345,3, 25883,99,0,345,3,
2585100,0,345,3,101, 2589100,0,345,3,101,
@@ -2589,7 +2593,7 @@ public class yyLSLTokens : YyLexer {
2589105,0,345,3,106, 2593105,0,345,3,106,
25900,345,3,107,0, 25940,345,3,107,0,
2591345,3,108,0,345, 2595345,3,108,0,345,
2592430,11,1,845,0, 2596430,11,1,867,0,
2593348,1,-1,3,117, 2597348,1,-1,3,117,
25940,345,3,118,0, 25980,345,3,118,0,
2595345,3,119,0,345, 2599345,3,119,0,345,
@@ -2635,7 +2639,7 @@ public class yyLSLTokens : YyLexer {
2635345,3,106,0,345, 2639345,3,106,0,345,
26363,107,0,345,3, 26403,107,0,345,3,
2637108,0,345,431,11, 2641108,0,345,431,11,
26381,845,0,348,1, 26421,867,0,348,1,
2639-1,3,97,0,345, 2643-1,3,97,0,345,
26403,98,0,345,3, 26443,98,0,345,3,
264199,0,345,3,100, 264599,0,345,3,100,
@@ -2646,7 +2650,7 @@ public class yyLSLTokens : YyLexer {
26460,345,3,106,0, 26500,345,3,106,0,
2647345,3,107,0,345, 2651345,3,107,0,345,
26483,108,0,345,432, 26523,108,0,345,432,
264911,1,845,0,348, 265311,1,867,0,348,
26501,-1,3,117,0, 26541,-1,3,117,0,
2651345,3,118,0,345, 2655345,3,118,0,345,
26523,119,0,345,3, 26563,119,0,345,3,
@@ -2692,16 +2696,16 @@ public class yyLSLTokens : YyLexer {
26923,106,0,345,3, 26963,106,0,345,3,
2693107,0,345,3,108, 2697107,0,345,3,108,
26940,345,433,11,1, 26980,345,433,11,1,
2695845,0,348,1,-1, 2699867,0,348,1,-1,
26963,98,0,343,3, 27003,98,0,343,3,
269799,0,434,12,1, 270199,0,434,12,1,
269823439,435,5,63,3, 270225501,435,5,63,3,
2699109,0,345,3,110, 2703109,0,345,3,110,
27000,345,3,111,0, 27040,345,3,111,0,
2701436,12,1,23469,437, 2705436,12,1,25531,437,
27025,63,3,109,0, 27065,63,3,109,0,
2703345,3,110,0,438, 2707345,3,110,0,438,
270412,1,23498,439,5, 270812,1,25560,439,5,
270563,3,109,0,345, 270963,3,109,0,345,
27063,110,0,345,3, 27103,110,0,345,3,
2707111,0,345,3,112, 2711111,0,345,3,112,
@@ -2709,16 +2713,16 @@ public class yyLSLTokens : YyLexer {
2709345,3,114,0,345, 2713345,3,114,0,345,
27103,115,0,345,3, 27143,115,0,345,3,
2711116,0,440,12,1, 2715116,0,440,12,1,
271223533,441,5,63,3, 271625595,441,5,63,3,
2713109,0,345,3,110, 2717109,0,345,3,110,
27140,345,3,111,0, 27180,345,3,111,0,
2715345,3,112,0,345, 2719345,3,112,0,345,
27163,113,0,345,3, 27203,113,0,345,3,
2717114,0,442,12,1, 2721114,0,442,12,1,
271823566,443,5,63,3, 272225628,443,5,63,3,
2719109,0,345,3,110, 2723109,0,345,3,110,
27200,345,3,111,0, 27240,345,3,111,0,
2721444,12,1,23596,445, 2725444,12,1,25658,445,
27225,63,3,109,0, 27265,63,3,109,0,
2723345,3,110,0,345, 2727345,3,110,0,345,
27243,111,0,345,3, 27283,111,0,345,3,
@@ -2770,7 +2774,7 @@ public class yyLSLTokens : YyLexer {
27700,345,3,106,0, 27740,345,3,106,0,
2771345,3,107,0,345, 2775345,3,107,0,345,
27723,108,0,446,12, 27763,108,0,446,12,
27731,23650,447,5,63, 27771,25712,447,5,63,
27743,109,0,345,3, 27783,109,0,345,3,
2775110,0,345,3,111, 2779110,0,345,3,111,
27760,345,3,112,0, 27800,345,3,112,0,
@@ -2829,7 +2833,7 @@ public class yyLSLTokens : YyLexer {
28290,69,0,86,0, 28330,69,0,86,0,
283069,0,78,0,84, 283469,0,78,0,84,
28310,1,-1,450,11, 28350,1,-1,450,11,
28321,845,0,348,1, 28361,867,0,348,1,
2833-1,3,112,0,345, 2837-1,3,112,0,345,
28343,113,0,345,3, 28383,113,0,345,3,
2835114,0,345,3,115, 2839114,0,345,3,115,
@@ -2878,7 +2882,7 @@ public class yyLSLTokens : YyLexer {
28783,105,0,345,3, 28823,105,0,345,3,
2879106,0,345,3,107, 2883106,0,345,3,107,
28800,345,3,108,0, 28840,345,3,108,0,
2881345,451,11,1,845, 2885345,451,11,1,867,
28820,348,1,-1,3, 28860,348,1,-1,3,
2883115,0,345,3,116, 2887115,0,345,3,116,
28840,345,3,117,0, 28880,345,3,117,0,
@@ -2926,7 +2930,7 @@ public class yyLSLTokens : YyLexer {
29263,106,0,345,3, 29303,106,0,345,3,
2927107,0,345,3,108, 2931107,0,345,3,108,
29280,345,452,11,1, 29320,345,452,11,1,
2929845,0,348,1,-1, 2933867,0,348,1,-1,
29303,117,0,345,3, 29343,117,0,345,3,
2931118,0,345,3,119, 2935118,0,345,3,119,
29320,345,3,120,0, 29360,345,3,120,0,
@@ -2971,7 +2975,7 @@ public class yyLSLTokens : YyLexer {
2971105,0,345,3,106, 2975105,0,345,3,106,
29720,345,3,107,0, 29760,345,3,107,0,
2973345,3,108,0,345, 2977345,3,108,0,345,
2974453,11,1,845,0, 2978453,11,1,867,0,
2975348,1,-1,3,111, 2979348,1,-1,3,111,
29760,345,3,112,0, 29800,345,3,112,0,
2977345,3,113,0,345, 2981345,3,113,0,345,
@@ -3021,7 +3025,7 @@ public class yyLSLTokens : YyLexer {
3021345,3,105,0,345, 3025345,3,105,0,345,
30223,106,0,345,3, 30263,106,0,345,3,
3023107,0,345,3,108, 3027107,0,345,3,108,
30240,454,12,1,24123, 30280,454,12,1,26185,
3025455,5,63,3,109, 3029455,5,63,3,109,
30260,345,3,110,0, 30300,345,3,110,0,
3027345,3,111,0,345, 3031345,3,111,0,345,
@@ -3073,7 +3077,7 @@ public class yyLSLTokens : YyLexer {
3073105,0,345,3,106, 3077105,0,345,3,106,
30740,345,3,107,0, 30780,345,3,107,0,
3075345,3,108,0,456, 3079345,3,108,0,456,
307612,1,24177,457,5, 308012,1,26239,457,5,
307763,3,109,0,345, 308163,3,109,0,345,
30783,110,0,345,3, 30823,110,0,345,3,
3079111,0,345,3,112, 3083111,0,345,3,112,
@@ -3122,14 +3126,14 @@ public class yyLSLTokens : YyLexer {
31223,102,0,345,3, 31263,102,0,345,3,
3123103,0,345,3,104, 3127103,0,345,3,104,
31240,345,3,105,0, 31280,345,3,105,0,
3125458,12,1,24228,459, 3129458,12,1,26290,459,
31265,63,3,109,0, 31305,63,3,109,0,
3127345,3,110,0,345, 3131345,3,110,0,345,
31283,111,0,345,3, 31323,111,0,345,3,
3129112,0,345,3,113, 3133112,0,345,3,113,
31300,345,3,114,0, 31340,345,3,114,0,
3131345,3,115,0,460, 3135345,3,115,0,460,
313212,1,24262,461,5, 313612,1,26324,461,5,
313363,3,109,0,345, 313763,3,109,0,345,
31343,110,0,345,3, 31383,110,0,345,3,
3135111,0,345,3,112, 3139111,0,345,3,112,
@@ -3178,14 +3182,14 @@ public class yyLSLTokens : YyLexer {
31783,102,0,345,3, 31823,102,0,345,3,
3179103,0,345,3,104, 3183103,0,345,3,104,
31800,345,3,105,0, 31840,345,3,105,0,
3181462,12,1,24313,463, 3185462,12,1,26375,463,
31825,63,3,109,0, 31865,63,3,109,0,
3183345,3,110,0,345, 3187345,3,110,0,345,
31843,111,0,464,12, 31883,111,0,464,12,
31851,24343,465,5,63, 31891,26405,465,5,63,
31863,109,0,345,3, 31903,109,0,345,3,
3187110,0,466,12,1, 3191110,0,466,12,1,
318824372,467,5,63,3, 319226434,467,5,63,3,
3189109,0,345,3,110, 3193109,0,345,3,110,
31900,345,3,111,0, 31940,345,3,111,0,
3191345,3,112,0,345, 3195345,3,112,0,345,
@@ -3227,13 +3231,13 @@ public class yyLSLTokens : YyLexer {
3227345,3,89,0,345, 3231345,3,89,0,345,
32283,90,0,345,3, 32323,90,0,345,3,
322995,0,468,12,1, 323395,0,468,12,1,
323024458,469,5,63,3, 323426520,469,5,63,3,
3231109,0,345,3,110, 3235109,0,345,3,110,
32320,345,3,111,0, 32360,345,3,111,0,
3233345,3,112,0,345, 3237345,3,112,0,345,
32343,113,0,345,3, 32383,113,0,345,3,
3235114,0,345,3,115, 3239114,0,345,3,115,
32360,470,12,1,24492, 32400,470,12,1,26554,
3237471,5,63,3,109, 3241471,5,63,3,109,
32380,345,3,110,0, 32420,345,3,110,0,
3239345,3,111,0,345, 3243345,3,111,0,345,
@@ -3241,7 +3245,7 @@ public class yyLSLTokens : YyLexer {
3241113,0,345,3,114, 3245113,0,345,3,114,
32420,345,3,115,0, 32460,345,3,115,0,
3243345,3,116,0,472, 3247345,3,116,0,472,
324412,1,24527,473,5, 324812,1,26589,473,5,
324563,3,109,0,345, 324963,3,109,0,345,
32463,110,0,345,3, 32503,110,0,345,3,
3247111,0,345,3,112, 3251111,0,345,3,112,
@@ -3284,20 +3288,20 @@ public class yyLSLTokens : YyLexer {
32840,345,3,90,0, 32880,345,3,90,0,
3285345,3,95,0,345, 3289345,3,95,0,345,
32863,97,0,474,12, 32903,97,0,474,12,
32871,24570,475,5,63, 32911,26632,475,5,63,
32883,109,0,345,3, 32923,109,0,345,3,
3289110,0,345,3,111, 3293110,0,345,3,111,
32900,345,3,112,0, 32940,345,3,112,0,
3291345,3,113,0,345, 3295345,3,113,0,345,
32923,114,0,476,12, 32963,114,0,476,12,
32931,24603,477,5,63, 32971,26665,477,5,63,
32943,109,0,345,3, 32983,109,0,345,3,
3295110,0,345,3,111, 3299110,0,345,3,111,
32960,345,3,112,0, 33000,345,3,112,0,
3297345,3,113,0,345, 3301345,3,113,0,345,
32983,114,0,345,3, 33023,114,0,345,3,
3299115,0,345,3,116, 3303115,0,345,3,116,
33000,478,12,1,24638, 33040,478,12,1,26700,
3301479,5,63,3,109, 3305479,5,63,3,109,
33020,345,3,110,0, 33060,345,3,110,0,
3303345,3,111,0,345, 3307345,3,111,0,345,
@@ -3404,7 +3408,7 @@ public class yyLSLTokens : YyLexer {
34043,106,0,345,3, 34083,106,0,345,3,
3405107,0,345,3,108, 3409107,0,345,3,108,
34060,345,482,11,1, 34100,345,482,11,1,
3407845,0,348,1,-1, 3411867,0,348,1,-1,
34083,115,0,345,3, 34123,115,0,345,3,
3409116,0,345,3,117, 3413116,0,345,3,117,
34100,345,3,118,0, 34140,345,3,118,0,
@@ -3451,7 +3455,7 @@ public class yyLSLTokens : YyLexer {
3451345,3,106,0,345, 3455345,3,106,0,345,
34523,107,0,345,3, 34563,107,0,345,3,
3453108,0,345,483,11, 3457108,0,345,483,11,
34541,845,0,348,1, 34581,867,0,348,1,
3455-1,3,98,0,345, 3459-1,3,98,0,345,
34563,99,0,345,3, 34603,99,0,345,3,
3457100,0,345,3,101, 3461100,0,345,3,101,
@@ -3461,7 +3465,7 @@ public class yyLSLTokens : YyLexer {
3461105,0,345,3,106, 3465105,0,345,3,106,
34620,345,3,107,0, 34660,345,3,107,0,
3463345,3,108,0,345, 3467345,3,108,0,345,
3464484,11,1,845,0, 3468484,11,1,867,0,
3465348,1,-1,3,117, 3469348,1,-1,3,117,
34660,345,3,118,0, 34700,345,3,118,0,
3467345,3,119,0,345, 3471345,3,119,0,345,
@@ -3507,7 +3511,7 @@ public class yyLSLTokens : YyLexer {
3507345,3,106,0,345, 3511345,3,106,0,345,
35083,107,0,345,3, 35123,107,0,345,3,
3509108,0,345,485,11, 3513108,0,345,485,11,
35101,845,0,348,1, 35141,867,0,348,1,
3511-1,3,116,0,345, 3515-1,3,116,0,345,
35123,117,0,345,3, 35163,117,0,345,3,
3513118,0,345,3,119, 3517118,0,345,3,119,
@@ -3547,10 +3551,10 @@ public class yyLSLTokens : YyLexer {
3547345,3,98,0,345, 3551345,3,98,0,345,
35483,99,0,345,3, 35523,99,0,345,3,
3549100,0,345,3,101, 3553100,0,345,3,101,
35500,486,12,1,25105, 35540,486,12,1,27167,
3551487,5,63,3,109, 3555487,5,63,3,109,
35520,345,3,110,0, 35560,345,3,110,0,
3553488,12,1,25134,489, 3557488,12,1,27196,489,
35545,63,3,109,0, 35585,63,3,109,0,
3555345,3,110,0,345, 3559345,3,110,0,345,
35563,111,0,345,3, 35603,111,0,345,3,
@@ -3595,7 +3599,7 @@ public class yyLSLTokens : YyLexer {
3595345,3,97,0,345, 3599345,3,97,0,345,
35963,98,0,345,3, 36003,98,0,345,3,
359799,0,345,3,100, 360199,0,345,3,100,
35980,490,12,1,25180, 36020,490,12,1,27242,
3599491,5,63,3,109, 3603491,5,63,3,109,
36000,345,3,110,0, 36040,345,3,110,0,
3601345,3,111,0,345, 3605345,3,111,0,345,
@@ -3663,7 +3667,7 @@ public class yyLSLTokens : YyLexer {
3663105,0,345,3,106, 3667105,0,345,3,106,
36640,345,3,107,0, 36680,345,3,107,0,
3665345,3,108,0,345, 3669345,3,108,0,345,
3666494,11,1,845,0, 3670494,11,1,867,0,
3667348,1,-1,3,111, 3671348,1,-1,3,111,
36680,345,3,112,0, 36720,345,3,112,0,
3669345,3,113,0,345, 3673345,3,113,0,345,
@@ -3714,14 +3718,14 @@ public class yyLSLTokens : YyLexer {
37143,106,0,345,3, 37183,106,0,345,3,
3715107,0,345,3,108, 3719107,0,345,3,108,
37160,345,495,11,1, 37200,345,495,11,1,
3717845,0,348,1,-1, 3721867,0,348,1,-1,
37183,102,0,345,3, 37223,102,0,345,3,
3719103,0,345,3,104, 3723103,0,345,3,104,
37200,345,3,105,0, 37240,345,3,105,0,
3721345,3,106,0,345, 3725345,3,106,0,345,
37223,107,0,345,3, 37263,107,0,345,3,
3723108,0,345,496,11, 3727108,0,345,496,11,
37241,845,0,348,1, 37281,867,0,348,1,
3725-1,3,97,0,345, 3729-1,3,97,0,345,
37263,98,0,345,3, 37303,98,0,345,3,
372799,0,345,3,100, 373199,0,345,3,100,
@@ -3789,7 +3793,7 @@ public class yyLSLTokens : YyLexer {
3789345,3,106,0,345, 3793345,3,106,0,345,
37903,107,0,345,3, 37943,107,0,345,3,
3791108,0,345,499,11, 3795108,0,345,499,11,
37921,845,0,348,1, 37961,867,0,348,1,
3793-1,3,112,0,345, 3797-1,3,112,0,345,
37943,113,0,345,3, 37983,113,0,345,3,
3795114,0,345,3,115, 3799114,0,345,3,115,
@@ -3838,11 +3842,11 @@ public class yyLSLTokens : YyLexer {
38383,105,0,345,3, 38423,105,0,345,3,
3839106,0,345,3,107, 3843106,0,345,3,107,
38400,345,3,108,0, 38440,345,3,108,0,
3841345,500,11,1,845, 3845345,500,11,1,867,
38420,348,1,-1,3, 38460,348,1,-1,3,
3843106,0,345,3,107, 3847106,0,345,3,107,
38440,345,3,108,0, 38480,345,3,108,0,
3845345,501,11,1,845, 3849345,501,11,1,867,
38460,348,1,-1,3, 38500,348,1,-1,3,
3847116,0,345,3,117, 3851116,0,345,3,117,
38480,345,3,118,0, 38520,345,3,118,0,
@@ -3889,14 +3893,14 @@ public class yyLSLTokens : YyLexer {
3889345,3,106,0,345, 3893345,3,106,0,345,
38903,107,0,345,3, 38943,107,0,345,3,
3891108,0,345,502,11, 3895108,0,345,502,11,
38921,845,0,348,1, 38961,867,0,348,1,
3893-1,3,106,0,345, 3897-1,3,106,0,345,
38943,107,0,345,3, 38983,107,0,345,3,
3895108,0,345,503,11, 3899108,0,345,503,11,
38961,845,0,348,1, 39001,867,0,348,1,
3897-1,504,11,1,845, 3901-1,504,11,1,867,
38980,348,1,-1,505, 39020,348,1,-1,505,
389911,1,845,0,348, 390311,1,867,0,348,
39001,-1,3,112,0, 39041,-1,3,112,0,
3901345,3,113,0,345, 3905345,3,113,0,345,
39023,114,0,345,3, 39063,114,0,345,3,
@@ -3942,7 +3946,7 @@ public class yyLSLTokens : YyLexer {
39423,101,0,345,3, 39463,101,0,345,3,
3943102,0,345,3,103, 3947102,0,345,3,103,
39440,345,3,104,0, 39480,345,3,104,0,
3945506,12,1,26129,507, 3949506,12,1,28191,507,
39465,63,3,109,0, 39505,63,3,109,0,
3947345,3,110,0,345, 3951345,3,110,0,345,
39483,111,0,345,3, 39523,111,0,345,3,
@@ -3985,10 +3989,10 @@ public class yyLSLTokens : YyLexer {
398589,0,345,3,90, 398989,0,345,3,90,
39860,345,3,95,0, 39900,345,3,95,0,
3987345,3,97,0,508, 3991345,3,97,0,508,
398812,1,26172,509,5, 399212,1,28234,509,5,
398963,3,109,0,345, 399363,3,109,0,345,
39903,110,0,510,12, 39943,110,0,510,12,
39911,26201,511,5,63, 39951,28263,511,5,63,
39923,109,0,345,3, 39963,109,0,345,3,
3993110,0,345,3,111, 3997110,0,345,3,111,
39940,345,3,112,0, 39980,345,3,112,0,
@@ -4035,7 +4039,7 @@ public class yyLSLTokens : YyLexer {
4035345,3,100,0,345, 4039345,3,100,0,345,
40363,101,0,345,3, 40403,101,0,345,3,
4037102,0,345,3,103, 4041102,0,345,3,103,
40380,512,12,1,26250, 40420,512,12,1,28312,
4039513,5,63,3,109, 4043513,5,63,3,109,
40400,345,3,110,0, 40440,345,3,110,0,
4041345,3,111,0,345, 4045345,3,111,0,345,
@@ -4081,7 +4085,7 @@ public class yyLSLTokens : YyLexer {
4081345,3,98,0,345, 4085345,3,98,0,345,
40823,99,0,345,3, 40863,99,0,345,3,
4083100,0,345,3,101, 4087100,0,345,3,101,
40840,514,12,1,26297, 40880,514,12,1,28359,
4085515,5,63,3,109, 4089515,5,63,3,109,
40860,345,3,110,0, 40900,345,3,110,0,
4087345,3,111,0,345, 4091345,3,111,0,345,
@@ -4127,7 +4131,7 @@ public class yyLSLTokens : YyLexer {
4127345,3,98,0,345, 4131345,3,98,0,345,
41283,99,0,345,3, 41323,99,0,345,3,
4129100,0,516,12,1, 4133100,0,516,12,1,
413026343,517,5,63,3, 413428405,517,5,63,3,
4131109,0,345,3,110, 4135109,0,345,3,110,
41320,345,3,111,0, 41360,345,3,111,0,
4133345,3,112,0,345, 4137345,3,112,0,345,
@@ -4192,20 +4196,20 @@ public class yyLSLTokens : YyLexer {
41920,345,3,106,0, 41960,345,3,106,0,
4193345,3,107,0,345, 4197345,3,107,0,345,
41943,108,0,345,520, 41983,108,0,345,520,
419511,1,845,0,348, 419911,1,867,0,348,
41961,-1,3,102,0, 42001,-1,3,102,0,
4197345,3,103,0,345, 4201345,3,103,0,345,
41983,104,0,345,3, 42023,104,0,345,3,
4199105,0,345,3,106, 4203105,0,345,3,106,
42000,345,3,107,0, 42040,345,3,107,0,
4201345,3,108,0,345, 4205345,3,108,0,345,
4202521,11,1,845,0, 4206521,11,1,867,0,
4203348,1,-1,3,104, 4207348,1,-1,3,104,
42040,345,3,105,0, 42080,345,3,105,0,
4205345,3,106,0,345, 4209345,3,106,0,345,
42063,107,0,345,3, 42103,107,0,345,3,
4207108,0,345,522,11, 4211108,0,345,522,11,
42081,845,0,348,1, 42121,867,0,348,1,
4209-1,3,111,0,345, 4213-1,3,111,0,345,
42103,112,0,345,3, 42143,112,0,345,3,
4211113,0,345,3,114, 4215113,0,345,3,114,
@@ -4255,7 +4259,7 @@ public class yyLSLTokens : YyLexer {
4255105,0,345,3,106, 4259105,0,345,3,106,
42560,345,3,107,0, 42600,345,3,107,0,
4257345,3,108,0,345, 4261345,3,108,0,345,
4258523,11,1,845,0, 4262523,11,1,867,0,
4259348,1,-1,3,98, 4263348,1,-1,3,98,
42600,345,3,99,0, 42640,345,3,99,0,
4261345,3,100,0,345, 4265345,3,100,0,345,
@@ -4266,17 +4270,17 @@ public class yyLSLTokens : YyLexer {
42663,106,0,345,3, 42703,106,0,345,3,
4267107,0,345,3,108, 4271107,0,345,3,108,
42680,345,524,11,1, 42720,345,524,11,1,
4269845,0,348,1,-1, 4273867,0,348,1,-1,
42703,105,0,345,3, 42743,105,0,345,3,
4271106,0,345,3,107, 4275106,0,345,3,107,
42720,345,3,108,0, 42760,345,3,108,0,
4273345,525,11,1,845, 4277345,525,11,1,867,
42740,348,1,-1,3, 42780,348,1,-1,3,
4275100,0,526,12,1, 4279100,0,526,12,1,
427626920,527,5,63,3, 428028982,527,5,63,3,
4277109,0,345,3,110, 4281109,0,345,3,110,
42780,345,3,111,0, 42820,345,3,111,0,
4279528,12,1,26950,529, 4283528,12,1,29012,529,
42805,63,3,109,0, 42845,63,3,109,0,
4281345,3,110,0,345, 4285345,3,110,0,345,
42823,111,0,345,3, 42863,111,0,345,3,
@@ -4370,14 +4374,14 @@ public class yyLSLTokens : YyLexer {
43700,345,3,90,0, 43740,345,3,90,0,
4371345,3,95,0,345, 4375345,3,95,0,345,
43723,97,0,532,12, 43763,97,0,532,12,
43731,27083,533,5,63, 43771,29145,533,5,63,
43743,109,0,345,3, 43783,109,0,345,3,
4375110,0,345,3,111, 4379110,0,345,3,111,
43760,345,3,112,0, 43800,345,3,112,0,
4377345,3,113,0,345, 4381345,3,113,0,345,
43783,114,0,345,3, 43823,114,0,345,3,
4379115,0,345,3,116, 4383115,0,345,3,116,
43800,534,12,1,27118, 43840,534,12,1,29180,
4381535,5,63,3,109, 4385535,5,63,3,109,
43820,345,3,110,0, 43860,345,3,110,0,
4383345,3,111,0,345, 4387345,3,111,0,345,
@@ -4420,14 +4424,14 @@ public class yyLSLTokens : YyLexer {
44203,89,0,345,3, 44243,89,0,345,3,
442190,0,345,3,95, 442590,0,345,3,95,
44220,345,3,97,0, 44260,345,3,97,0,
4423536,12,1,27161,537, 4427536,12,1,29223,537,
44245,63,3,109,0, 44285,63,3,109,0,
4425345,3,110,0,345, 4429345,3,110,0,345,
44263,111,0,345,3, 44303,111,0,345,3,
4427112,0,345,3,113, 4431112,0,345,3,113,
44280,345,3,114,0, 44320,345,3,114,0,
4429345,3,115,0,538, 4433345,3,115,0,538,
443012,1,27195,539,5, 443412,1,29257,539,5,
443163,3,109,0,345, 443563,3,109,0,345,
44323,110,0,345,3, 44363,110,0,345,3,
4433111,0,345,3,112, 4437111,0,345,3,112,
@@ -4473,13 +4477,13 @@ public class yyLSLTokens : YyLexer {
447398,0,345,3,99, 447798,0,345,3,99,
44740,345,3,100,0, 44780,345,3,100,0,
4475345,3,101,0,540, 4479345,3,101,0,540,
447612,1,27242,541,5, 448012,1,29304,541,5,
447763,3,109,0,345, 448163,3,109,0,345,
44783,110,0,345,3, 44823,110,0,345,3,
4479111,0,345,3,112, 4483111,0,345,3,112,
44800,345,3,113,0, 44840,345,3,113,0,
4481345,3,114,0,542, 4485345,3,114,0,542,
448212,1,27275,543,5, 448612,1,29337,543,5,
448363,3,109,0,345, 448763,3,109,0,345,
44843,110,0,345,3, 44883,110,0,345,3,
4485111,0,345,3,112, 4489111,0,345,3,112,
@@ -4488,7 +4492,7 @@ public class yyLSLTokens : YyLexer {
44883,115,0,345,3, 44923,115,0,345,3,
4489116,0,345,3,117, 4493116,0,345,3,117,
44900,345,3,118,0, 44940,345,3,118,0,
4491544,12,1,27312,545, 4495544,12,1,29374,545,
44925,63,3,109,0, 44965,63,3,109,0,
4493345,3,110,0,345, 4497345,3,110,0,345,
44943,111,0,345,3, 44983,111,0,345,3,
@@ -4534,13 +4538,13 @@ public class yyLSLTokens : YyLexer {
45343,98,0,345,3, 45383,98,0,345,3,
453599,0,345,3,100, 453999,0,345,3,100,
45360,345,3,101,0, 45400,345,3,101,0,
4537546,12,1,27359,547, 4541546,12,1,29421,547,
45385,63,3,109,0, 45425,63,3,109,0,
4539345,3,110,0,345, 4543345,3,110,0,345,
45403,111,0,345,3, 45443,111,0,345,3,
4541112,0,345,3,113, 4545112,0,345,3,113,
45420,345,3,114,0, 45460,345,3,114,0,
4543548,12,1,27392,549, 4547548,12,1,29454,549,
45445,63,3,109,0, 45485,63,3,109,0,
4545345,3,110,0,345, 4549345,3,110,0,345,
45463,111,0,345,3, 45503,111,0,345,3,
@@ -4646,14 +4650,14 @@ public class yyLSLTokens : YyLexer {
46460,345,3,106,0, 46500,345,3,106,0,
4647345,3,107,0,345, 4651345,3,107,0,345,
46483,108,0,345,552, 46523,108,0,345,552,
464911,1,845,0,348, 465311,1,867,0,348,
46501,-1,3,102,0, 46541,-1,3,102,0,
4651345,3,103,0,345, 4655345,3,103,0,345,
46523,104,0,345,3, 46563,104,0,345,3,
4653105,0,345,3,106, 4657105,0,345,3,106,
46540,345,3,107,0, 46580,345,3,107,0,
4655345,3,108,0,345, 4659345,3,108,0,345,
4656553,11,1,845,0, 4660553,11,1,867,0,
4657348,1,-1,3,119, 4661348,1,-1,3,119,
46580,345,3,120,0, 46620,345,3,120,0,
4659345,3,121,0,345, 4663345,3,121,0,345,
@@ -4697,7 +4701,7 @@ public class yyLSLTokens : YyLexer {
4697105,0,345,3,106, 4701105,0,345,3,106,
46980,345,3,107,0, 47020,345,3,107,0,
4699345,3,108,0,345, 4703345,3,108,0,345,
4700554,11,1,845,0, 4704554,11,1,867,0,
4701348,1,-1,3,115, 4705348,1,-1,3,115,
47020,345,3,116,0, 47060,345,3,116,0,
4703345,3,117,0,345, 4707345,3,117,0,345,
@@ -4744,7 +4748,7 @@ public class yyLSLTokens : YyLexer {
47443,105,0,345,3, 47483,105,0,345,3,
4745106,0,345,3,107, 4749106,0,345,3,107,
47460,345,3,108,0, 47500,345,3,108,0,
4747345,555,11,1,845, 4751345,555,11,1,867,
47480,348,1,-1,3, 47520,348,1,-1,3,
4749102,0,345,3,103, 4753102,0,345,3,103,
47500,345,3,104,0, 47540,345,3,104,0,
@@ -4752,7 +4756,7 @@ public class yyLSLTokens : YyLexer {
47523,106,0,345,3, 47563,106,0,345,3,
4753107,0,345,3,108, 4757107,0,345,3,108,
47540,345,556,11,1, 47580,345,556,11,1,
4755845,0,348,1,-1, 4759867,0,348,1,-1,
47563,116,0,345,3, 47603,116,0,345,3,
4757117,0,345,3,118, 4761117,0,345,3,118,
47580,345,3,119,0, 47620,345,3,119,0,
@@ -4798,7 +4802,7 @@ public class yyLSLTokens : YyLexer {
47980,345,3,106,0, 48020,345,3,106,0,
4799345,3,107,0,345, 4803345,3,107,0,345,
48003,108,0,345,557, 48043,108,0,345,557,
480111,1,845,0,348, 480511,1,867,0,348,
48021,-1,3,98,0, 48061,-1,3,98,0,
4803345,3,99,0,345, 4807345,3,99,0,345,
48043,100,0,345,3, 48083,100,0,345,3,
@@ -4808,7 +4812,7 @@ public class yyLSLTokens : YyLexer {
48083,105,0,345,3, 48123,105,0,345,3,
4809106,0,345,3,107, 4813106,0,345,3,107,
48100,345,3,108,0, 48140,345,3,108,0,
4811345,558,11,1,845, 4815345,558,11,1,867,
48120,348,1,-1,3, 48160,348,1,-1,3,
4813117,0,345,3,118, 4817117,0,345,3,118,
48140,345,3,119,0, 48180,345,3,119,0,
@@ -4854,12 +4858,12 @@ public class yyLSLTokens : YyLexer {
48540,345,3,106,0, 48580,345,3,106,0,
4855345,3,107,0,345, 4859345,3,107,0,345,
48563,108,0,345,559, 48603,108,0,345,559,
485711,1,845,0,348, 486111,1,867,0,348,
48581,-1,3,98,0, 48621,-1,3,98,0,
4859345,3,99,0,345, 4863345,3,99,0,345,
48603,100,0,345,3, 48643,100,0,345,3,
4861101,0,560,12,1, 4865101,0,560,12,1,
486228167,561,5,63,3, 486630229,561,5,63,3,
4863109,0,345,3,110, 4867109,0,345,3,110,
48640,345,3,111,0, 48680,345,3,111,0,
4865345,3,112,0,345, 4869345,3,112,0,345,
@@ -4905,7 +4909,7 @@ public class yyLSLTokens : YyLexer {
4905345,3,99,0,345, 4909345,3,99,0,345,
49063,100,0,345,3, 49103,100,0,345,3,
4907101,0,345,3,102, 4911101,0,345,3,102,
49080,562,12,1,28215, 49120,562,12,1,30277,
4909563,5,63,3,109, 4913563,5,63,3,109,
49100,345,3,110,0, 49140,345,3,110,0,
4911345,3,111,0,345, 4915345,3,111,0,345,
@@ -4948,7 +4952,7 @@ public class yyLSLTokens : YyLexer {
49483,89,0,345,3, 49523,89,0,345,3,
494990,0,345,3,95, 495390,0,345,3,95,
49500,345,3,97,0, 49540,345,3,97,0,
4951564,12,1,28258,565, 4955564,12,1,30320,565,
49525,63,3,109,0, 49565,63,3,109,0,
4953345,3,110,0,345, 4957345,3,110,0,345,
49543,111,0,345,3, 49583,111,0,345,3,
@@ -4957,7 +4961,7 @@ public class yyLSLTokens : YyLexer {
4957345,3,115,0,345, 4961345,3,115,0,345,
49583,116,0,345,3, 49623,116,0,345,3,
4959117,0,566,12,1, 4963117,0,566,12,1,
496028294,567,5,63,3, 496430356,567,5,63,3,
4961109,0,345,3,110, 4965109,0,345,3,110,
49620,345,3,111,0, 49660,345,3,111,0,
4963345,3,112,0,345, 4967345,3,112,0,345,
@@ -5008,7 +5012,7 @@ public class yyLSLTokens : YyLexer {
50083,105,0,345,3, 50123,105,0,345,3,
5009106,0,345,3,107, 5013106,0,345,3,107,
50100,345,3,108,0, 50140,345,3,108,0,
5011568,12,1,28348,569, 5015568,12,1,30410,569,
50125,63,3,109,0, 50165,63,3,109,0,
5013345,3,110,0,345, 5017345,3,110,0,345,
50143,111,0,345,3, 50183,111,0,345,3,
@@ -5016,7 +5020,7 @@ public class yyLSLTokens : YyLexer {
50160,345,3,114,0, 50200,345,3,114,0,
5017345,3,115,0,345, 5021345,3,115,0,345,
50183,116,0,570,12, 50223,116,0,570,12,
50191,28383,571,5,63, 50231,30445,571,5,63,
50203,109,0,345,3, 50243,109,0,345,3,
5021110,0,345,3,111, 5025110,0,345,3,111,
50220,345,3,112,0, 50260,345,3,112,0,
@@ -5119,8 +5123,8 @@ public class yyLSLTokens : YyLexer {
5119345,3,106,0,345, 5123345,3,106,0,345,
51203,107,0,345,3, 51243,107,0,345,3,
5121108,0,345,574,11, 5125108,0,345,574,11,
51221,845,0,348,1, 51261,867,0,348,1,
5123-1,575,11,1,845, 5127-1,575,11,1,867,
51240,348,1,-1,3, 51280,348,1,-1,3,
5125118,0,345,3,119, 5129118,0,345,3,119,
51260,345,3,120,0, 51300,345,3,120,0,
@@ -5165,7 +5169,7 @@ public class yyLSLTokens : YyLexer {
5165105,0,345,3,106, 5169105,0,345,3,106,
51660,345,3,107,0, 51700,345,3,107,0,
5167345,3,108,0,345, 5171345,3,108,0,345,
5168576,11,1,845,0, 5172576,11,1,867,0,
5169348,1,-1,3,98, 5173348,1,-1,3,98,
51700,345,3,99,0, 51740,345,3,99,0,
5171345,3,100,0,345, 5175345,3,100,0,345,
@@ -5176,24 +5180,24 @@ public class yyLSLTokens : YyLexer {
51763,106,0,345,3, 51803,106,0,345,3,
5177107,0,345,3,108, 5181107,0,345,3,108,
51780,345,577,11,1, 51820,345,577,11,1,
5179845,0,348,1,-1, 5183867,0,348,1,-1,
51803,103,0,345,3, 51843,103,0,345,3,
5181104,0,345,3,105, 5185104,0,345,3,105,
51820,345,3,106,0, 51860,345,3,106,0,
5183345,3,107,0,345, 5187345,3,107,0,345,
51843,108,0,345,578, 51883,108,0,345,578,
518511,1,845,0,348, 518911,1,867,0,348,
51861,-1,3,102,0, 51901,-1,3,102,0,
5187345,3,103,0,345, 5191345,3,103,0,345,
51883,104,0,345,3, 51923,104,0,345,3,
5189105,0,345,3,106, 5193105,0,345,3,106,
51900,345,3,107,0, 51940,345,3,107,0,
5191345,3,108,0,345, 5195345,3,108,0,345,
5192579,11,1,845,0, 5196579,11,1,867,0,
5193348,1,-1,3,101, 5197348,1,-1,3,101,
51940,580,12,1,28961, 51980,580,12,1,31023,
5195581,5,63,3,109, 5199581,5,63,3,109,
51960,582,12,1,28989, 52000,582,12,1,31051,
5197583,5,63,3,109, 5201583,5,63,3,109,
51980,345,3,110,0, 52020,345,3,110,0,
5199345,3,111,0,345, 5203345,3,111,0,345,
@@ -5236,7 +5240,7 @@ public class yyLSLTokens : YyLexer {
52363,89,0,345,3, 52403,89,0,345,3,
523790,0,345,3,95, 524190,0,345,3,95,
52380,345,3,97,0, 52420,345,3,97,0,
5239584,12,1,29032,585, 5243584,12,1,31094,585,
52405,63,3,109,0, 52445,63,3,109,0,
5241345,3,110,0,345, 5245345,3,110,0,345,
52423,111,0,345,3, 52463,111,0,345,3,
@@ -5285,7 +5289,7 @@ public class yyLSLTokens : YyLexer {
5285345,3,102,0,345, 5289345,3,102,0,345,
52863,103,0,345,3, 52903,103,0,345,3,
5287104,0,345,3,105, 5291104,0,345,3,105,
52880,586,12,1,29083, 52920,586,12,1,31145,
5289587,5,63,3,109, 5293587,5,63,3,109,
52900,345,3,110,0, 52940,345,3,110,0,
5291345,3,111,0,345, 5295345,3,111,0,345,
@@ -5337,7 +5341,7 @@ public class yyLSLTokens : YyLexer {
5337105,0,345,3,106, 5341105,0,345,3,106,
53380,345,3,107,0, 53420,345,3,107,0,
5339345,3,108,0,588, 5343345,3,108,0,588,
534012,1,29137,589,5, 534412,1,31199,589,5,
534163,3,109,0,345, 534563,3,109,0,345,
53423,110,0,345,3, 53463,110,0,345,3,
5343111,0,345,3,112, 5347111,0,345,3,112,
@@ -5395,11 +5399,11 @@ public class yyLSLTokens : YyLexer {
53950,95,0,69,0, 53990,95,0,69,0,
539686,0,69,0,78, 540086,0,69,0,78,
53970,84,0,1,-1, 54010,84,0,1,-1,
5398592,11,1,845,0, 5402592,11,1,867,0,
5399348,1,-1,3,106, 5403348,1,-1,3,106,
54000,345,3,107,0, 54040,345,3,107,0,
5401345,3,108,0,345, 5405345,3,108,0,345,
5402593,11,1,845,0, 5406593,11,1,867,0,
5403348,1,-1,3,98, 5407348,1,-1,3,98,
54040,345,3,99,0, 54080,345,3,99,0,
5405345,3,100,0,345, 5409345,3,100,0,345,
@@ -5410,7 +5414,7 @@ public class yyLSLTokens : YyLexer {
54103,106,0,345,3, 54143,106,0,345,3,
5411107,0,345,3,108, 5415107,0,345,3,108,
54120,345,594,11,1, 54160,345,594,11,1,
5413845,0,348,1,-1, 5417867,0,348,1,-1,
54143,110,0,345,3, 54183,110,0,345,3,
5415111,0,345,3,112, 5419111,0,345,3,112,
54160,345,3,113,0, 54200,345,3,113,0,
@@ -5461,13 +5465,13 @@ public class yyLSLTokens : YyLexer {
5461345,3,106,0,345, 5465345,3,106,0,345,
54623,107,0,345,3, 54663,107,0,345,3,
5463108,0,595,12,1, 5467108,0,595,12,1,
546429495,596,5,63,3, 546831557,596,5,63,3,
5465109,0,345,3,110, 5469109,0,345,3,110,
54660,345,3,111,0, 54700,345,3,111,0,
5467345,3,112,0,345, 5471345,3,112,0,345,
54683,113,0,345,3, 54723,113,0,345,3,
5469114,0,345,3,115, 5473114,0,345,3,115,
54700,597,12,1,29529, 54740,597,12,1,31591,
5471598,5,63,3,109, 5475598,5,63,3,109,
54720,345,3,110,0, 54760,345,3,110,0,
5473345,3,111,0,345, 5477345,3,111,0,345,
@@ -5513,7 +5517,7 @@ public class yyLSLTokens : YyLexer {
5513345,3,98,0,345, 5517345,3,98,0,345,
55143,99,0,345,3, 55183,99,0,345,3,
5515100,0,345,3,101, 5519100,0,345,3,101,
55160,599,12,1,29576, 55200,599,12,1,31638,
5517600,5,63,3,109, 5521600,5,63,3,109,
55180,345,3,110,0, 55220,345,3,110,0,
5519345,3,111,0,345, 5523345,3,111,0,345,
@@ -5574,7 +5578,7 @@ public class yyLSLTokens : YyLexer {
55743,105,0,345,3, 55783,105,0,345,3,
5575106,0,345,3,107, 5579106,0,345,3,107,
55760,345,3,108,0, 55800,345,3,108,0,
5577345,603,11,1,845, 5581345,603,11,1,867,
55780,348,1,-1,3, 55820,348,1,-1,3,
5579116,0,345,3,117, 5583116,0,345,3,117,
55800,345,3,118,0, 55840,345,3,118,0,
@@ -5621,20 +5625,20 @@ public class yyLSLTokens : YyLexer {
5621345,3,106,0,345, 5625345,3,106,0,345,
56223,107,0,345,3, 56263,107,0,345,3,
5623108,0,345,604,11, 5627108,0,345,604,11,
56241,845,0,348,1, 56281,867,0,348,1,
5625-1,605,11,1,845, 5629-1,605,11,1,867,
56260,348,1,-1,3, 56300,348,1,-1,3,
5627102,0,606,12,1, 5631102,0,606,12,1,
562829922,607,5,63,3, 563231984,607,5,63,3,
5629109,0,345,3,110, 5633109,0,345,3,110,
56300,345,3,111,0, 56340,345,3,111,0,
5631608,12,1,29952,609, 5635608,12,1,32014,609,
56325,63,3,109,0, 56365,63,3,109,0,
5633345,3,110,0,345, 5637345,3,110,0,345,
56343,111,0,345,3, 56383,111,0,345,3,
5635112,0,345,3,113, 5639112,0,345,3,113,
56360,345,3,114,0, 56400,345,3,114,0,
5637610,12,1,29985,611, 5641610,12,1,32047,611,
56385,63,3,109,0, 56425,63,3,109,0,
5639345,3,110,0,345, 5643345,3,110,0,345,
56403,111,0,345,3, 56443,111,0,345,3,
@@ -5735,7 +5739,7 @@ public class yyLSLTokens : YyLexer {
5735345,3,106,0,345, 5739345,3,106,0,345,
57363,107,0,345,3, 57403,107,0,345,3,
5737108,0,345,614,11, 5741108,0,345,614,11,
57381,845,0,348,1, 57421,867,0,348,1,
5739-1,3,112,0,345, 5743-1,3,112,0,345,
57403,113,0,345,3, 57443,113,0,345,3,
5741114,0,345,3,115, 5745114,0,345,3,115,
@@ -5784,11 +5788,11 @@ public class yyLSLTokens : YyLexer {
57843,105,0,345,3, 57883,105,0,345,3,
5785106,0,345,3,107, 5789106,0,345,3,107,
57860,345,3,108,0, 57900,345,3,108,0,
5787615,12,1,30216,616, 5791615,12,1,32278,616,
57885,63,3,109,0, 57925,63,3,109,0,
5789345,3,110,0,345, 5793345,3,110,0,345,
57903,111,0,617,12, 57943,111,0,617,12,
57911,30246,618,5,63, 57951,32308,618,5,63,
57923,109,0,345,3, 57963,109,0,345,3,
5793110,0,345,3,111, 5797110,0,345,3,111,
57940,345,3,112,0, 57980,345,3,112,0,
@@ -5831,14 +5835,14 @@ public class yyLSLTokens : YyLexer {
5831345,3,90,0,345, 5835345,3,90,0,345,
58323,95,0,345,3, 58363,95,0,345,3,
583397,0,619,12,1, 583797,0,619,12,1,
583430289,620,5,63,3, 583832351,620,5,63,3,
5835109,0,345,3,110, 5839109,0,345,3,110,
58360,345,3,111,0, 58400,345,3,111,0,
5837345,3,112,0,345, 5841345,3,112,0,345,
58383,113,0,345,3, 58423,113,0,345,3,
5839114,0,345,3,115, 5843114,0,345,3,115,
58400,345,3,116,0, 58440,345,3,116,0,
5841621,12,1,30324,622, 5845621,12,1,32386,622,
58425,63,3,109,0, 58465,63,3,109,0,
5843345,3,110,0,345, 5847345,3,110,0,345,
58443,111,0,345,3, 58483,111,0,345,3,
@@ -5940,7 +5944,7 @@ public class yyLSLTokens : YyLexer {
59400,345,3,106,0, 59440,345,3,106,0,
5941345,3,107,0,345, 5945345,3,107,0,345,
59423,108,0,345,625, 59463,108,0,345,625,
594311,1,845,0,348, 594711,1,867,0,348,
59441,-1,3,98,0, 59481,-1,3,98,0,
5945345,3,99,0,345, 5949345,3,99,0,345,
59463,100,0,345,3, 59503,100,0,345,3,
@@ -5950,7 +5954,7 @@ public class yyLSLTokens : YyLexer {
59503,105,0,345,3, 59543,105,0,345,3,
5951106,0,345,3,107, 5955106,0,345,3,107,
59520,345,3,108,0, 59560,345,3,108,0,
5953345,626,11,1,845, 5957345,626,11,1,867,
59540,348,1,-1,3, 59580,348,1,-1,3,
5955112,0,345,3,113, 5959112,0,345,3,113,
59560,345,3,114,0, 59600,345,3,114,0,
@@ -6000,19 +6004,19 @@ public class yyLSLTokens : YyLexer {
60000,345,3,106,0, 60040,345,3,106,0,
6001345,3,107,0,345, 6005345,3,107,0,345,
60023,108,0,345,627, 60063,108,0,345,627,
600311,1,845,0,348, 600711,1,867,0,348,
60041,-1,628,11,1, 60081,-1,628,11,1,
6005845,0,348,1,-1, 6009867,0,348,1,-1,
60063,103,0,343,3, 60103,103,0,343,3,
6007104,0,629,12,1, 6011104,0,629,12,1,
600830764,630,5,63,3, 601232826,630,5,63,3,
6009109,0,345,3,110, 6013109,0,345,3,110,
60100,345,3,111,0, 60140,345,3,111,0,
6011345,3,112,0,345, 6015345,3,112,0,345,
60123,113,0,345,3, 60163,113,0,345,3,
6013114,0,345,3,115, 6017114,0,345,3,115,
60140,345,3,116,0, 60180,345,3,116,0,
6015631,12,1,30799,632, 6019631,12,1,32861,632,
60165,63,3,109,0, 60205,63,3,109,0,
6017345,3,110,0,345, 6021345,3,110,0,345,
60183,111,0,345,3, 60223,111,0,345,3,
@@ -6020,11 +6024,11 @@ public class yyLSLTokens : YyLexer {
60200,345,3,114,0, 60240,345,3,114,0,
6021345,3,115,0,345, 6025345,3,115,0,345,
60223,116,0,633,12, 60263,116,0,633,12,
60231,30834,634,5,63, 60271,32896,634,5,63,
60243,109,0,345,3, 60283,109,0,345,3,
6025110,0,345,3,111, 6029110,0,345,3,111,
60260,345,3,112,0, 60300,345,3,112,0,
6027635,12,1,30865,636, 6031635,12,1,32927,636,
60285,63,3,109,0, 60325,63,3,109,0,
6029345,3,110,0,345, 6033345,3,110,0,345,
60303,111,0,345,3, 60343,111,0,345,3,
@@ -6066,13 +6070,13 @@ public class yyLSLTokens : YyLexer {
60663,88,0,345,3, 60703,88,0,345,3,
606789,0,345,3,90, 607189,0,345,3,90,
60680,345,3,95,0, 60720,345,3,95,0,
6069637,12,1,30951,638, 6073637,12,1,33013,638,
60705,63,3,109,0, 60745,63,3,109,0,
6071345,3,110,0,345, 6075345,3,110,0,345,
60723,111,0,345,3, 60763,111,0,345,3,
6073112,0,345,3,113, 6077112,0,345,3,113,
60740,345,3,114,0, 60780,345,3,114,0,
6075639,12,1,30984,640, 6079639,12,1,33046,640,
60765,63,3,109,0, 60805,63,3,109,0,
6077345,3,110,0,345, 6081345,3,110,0,345,
60783,111,0,345,3, 60823,111,0,345,3,
@@ -6118,12 +6122,12 @@ public class yyLSLTokens : YyLexer {
61183,98,0,345,3, 61223,98,0,345,3,
611999,0,345,3,100, 612399,0,345,3,100,
61200,345,3,101,0, 61240,345,3,101,0,
6121641,12,1,31031,642, 6125641,12,1,33093,642,
61225,63,3,109,0, 61265,63,3,109,0,
6123345,3,110,0,345, 6127345,3,110,0,345,
61243,111,0,345,3, 61283,111,0,345,3,
6125112,0,345,3,113, 6129112,0,345,3,113,
61260,643,12,1,31063, 61300,643,12,1,33125,
6127644,5,63,3,109, 6131644,5,63,3,109,
61280,345,3,110,0, 61320,345,3,110,0,
6129345,3,111,0,345, 6133345,3,111,0,345,
@@ -6132,7 +6136,7 @@ public class yyLSLTokens : YyLexer {
61320,345,3,115,0, 61360,345,3,115,0,
6133345,3,116,0,345, 6137345,3,116,0,345,
61343,117,0,645,12, 61383,117,0,645,12,
61351,31099,646,5,63, 61391,33161,646,5,63,
61363,109,0,345,3, 61403,109,0,345,3,
6137110,0,345,3,111, 6141110,0,345,3,111,
61380,345,3,112,0, 61420,345,3,112,0,
@@ -6178,21 +6182,21 @@ public class yyLSLTokens : YyLexer {
61780,345,3,99,0, 61820,345,3,99,0,
6179345,3,100,0,345, 6183345,3,100,0,345,
61803,101,0,647,12, 61843,101,0,647,12,
61811,31146,648,5,63, 61851,33208,648,5,63,
61823,109,0,345,3, 61863,109,0,345,3,
6183110,0,345,3,111, 6187110,0,345,3,111,
61840,345,3,112,0, 61880,345,3,112,0,
6185345,3,113,0,345, 6189345,3,113,0,345,
61863,114,0,345,3, 61903,114,0,345,3,
6187115,0,649,12,1, 6191115,0,649,12,1,
618831180,650,5,63,3, 619233242,650,5,63,3,
6189109,0,345,3,110, 6193109,0,345,3,110,
61900,345,3,111,0, 61940,345,3,111,0,
6191345,3,112,0,345, 6195345,3,112,0,345,
61923,113,0,345,3, 61963,113,0,345,3,
6193114,0,345,3,115, 6197114,0,345,3,115,
61940,345,3,116,0, 61980,345,3,116,0,
6195651,12,1,31215,652, 6199651,12,1,33277,652,
61965,63,3,109,0, 62005,63,3,109,0,
6197345,3,110,0,345, 6201345,3,110,0,345,
61983,111,0,345,3, 62023,111,0,345,3,
@@ -6297,7 +6301,7 @@ public class yyLSLTokens : YyLexer {
6297105,0,345,3,106, 6301105,0,345,3,106,
62980,345,3,107,0, 63020,345,3,107,0,
6299345,3,108,0,345, 6303345,3,108,0,345,
6300655,11,1,845,0, 6304655,11,1,867,0,
6301348,1,-1,3,116, 6305348,1,-1,3,116,
63020,345,3,117,0, 63060,345,3,117,0,
6303345,3,118,0,345, 6307345,3,118,0,345,
@@ -6344,14 +6348,14 @@ public class yyLSLTokens : YyLexer {
63443,106,0,345,3, 63483,106,0,345,3,
6345107,0,345,3,108, 6349107,0,345,3,108,
63460,345,656,11,1, 63500,345,656,11,1,
6347845,0,348,1,-1, 6351867,0,348,1,-1,
63483,102,0,345,3, 63523,102,0,345,3,
6349103,0,345,3,104, 6353103,0,345,3,104,
63500,345,3,105,0, 63540,345,3,105,0,
6351345,3,106,0,345, 6355345,3,106,0,345,
63523,107,0,345,3, 63563,107,0,345,3,
6353108,0,345,657,11, 6357108,0,345,657,11,
63541,845,0,348,1, 63581,867,0,348,1,
6355-1,3,118,0,345, 6359-1,3,118,0,345,
63563,119,0,345,3, 63603,119,0,345,3,
6357120,0,345,3,121, 6361120,0,345,3,121,
@@ -6396,27 +6400,27 @@ public class yyLSLTokens : YyLexer {
63963,106,0,345,3, 64003,106,0,345,3,
6397107,0,345,3,108, 6401107,0,345,3,108,
63980,345,658,11,1, 64020,345,658,11,1,
6399845,0,348,1,-1, 6403867,0,348,1,-1,
64003,114,0,345,3, 64043,114,0,345,3,
6401115,0,659,12,1, 6405115,0,659,12,1,
640231665,660,5,63,3, 640633727,660,5,63,3,
6403109,0,345,3,110, 6407109,0,345,3,110,
64040,345,3,111,0, 64080,345,3,111,0,
6405345,3,112,0,661, 6409345,3,112,0,661,
640612,1,31696,662,5, 641012,1,33758,662,5,
640763,3,109,0,345, 641163,3,109,0,345,
64083,110,0,345,3, 64123,110,0,345,3,
6409111,0,663,12,1, 6413111,0,663,12,1,
641031726,664,5,63,3, 641433788,664,5,63,3,
6411109,0,345,3,110, 6415109,0,345,3,110,
64120,665,12,1,31755, 64160,665,12,1,33817,
6413666,5,63,3,109, 6417666,5,63,3,109,
64140,345,3,110,0, 64180,345,3,110,0,
6415345,3,111,0,345, 6419345,3,111,0,345,
64163,112,0,345,3, 64203,112,0,345,3,
6417113,0,345,3,114, 6421113,0,345,3,114,
64180,345,3,115,0, 64220,345,3,115,0,
6419667,12,1,31789,668, 6423667,12,1,33851,668,
64205,63,3,109,0, 64245,63,3,109,0,
6421345,3,110,0,345, 6425345,3,110,0,345,
64223,111,0,345,3, 64263,111,0,345,3,
@@ -6462,7 +6466,7 @@ public class yyLSLTokens : YyLexer {
64623,98,0,345,3, 64663,98,0,345,3,
646399,0,345,3,100, 646799,0,345,3,100,
64640,345,3,101,0, 64680,345,3,101,0,
6465669,12,1,31836,670, 6469669,12,1,33898,670,
64665,63,3,109,0, 64705,63,3,109,0,
6467345,3,110,0,345, 6471345,3,110,0,345,
64683,111,0,345,3, 64723,111,0,345,3,
@@ -6529,7 +6533,7 @@ public class yyLSLTokens : YyLexer {
6529105,0,345,3,106, 6533105,0,345,3,106,
65300,345,3,107,0, 65340,345,3,107,0,
6531345,3,108,0,345, 6535345,3,108,0,345,
6532673,11,1,845,0, 6536673,11,1,867,0,
6533348,1,-1,3,116, 6537348,1,-1,3,116,
65340,345,3,117,0, 65380,345,3,117,0,
6535345,3,118,0,345, 6539345,3,118,0,345,
@@ -6576,7 +6580,7 @@ public class yyLSLTokens : YyLexer {
65763,106,0,345,3, 65803,106,0,345,3,
6577107,0,345,3,108, 6581107,0,345,3,108,
65780,345,674,11,1, 65820,345,674,11,1,
6579845,0,348,1,-1, 6583867,0,348,1,-1,
65803,111,0,345,3, 65843,111,0,345,3,
6581112,0,345,3,113, 6585112,0,345,3,113,
65820,345,3,114,0, 65860,345,3,114,0,
@@ -6626,7 +6630,7 @@ public class yyLSLTokens : YyLexer {
66260,345,3,106,0, 66300,345,3,106,0,
6627345,3,107,0,345, 6631345,3,107,0,345,
66283,108,0,345,675, 66323,108,0,345,675,
662911,1,845,0,348, 663311,1,867,0,348,
66301,-1,3,112,0, 66341,-1,3,112,0,
6631345,3,113,0,345, 6635345,3,113,0,345,
66323,114,0,345,3, 66363,114,0,345,3,
@@ -6676,7 +6680,7 @@ public class yyLSLTokens : YyLexer {
66763,106,0,345,3, 66803,106,0,345,3,
6677107,0,345,3,108, 6681107,0,345,3,108,
66780,345,676,11,1, 66820,345,676,11,1,
6679845,0,348,1,-1, 6683867,0,348,1,-1,
66803,113,0,345,3, 66843,113,0,345,3,
6681114,0,345,3,115, 6685114,0,345,3,115,
66820,345,3,116,0, 66860,345,3,116,0,
@@ -6724,7 +6728,7 @@ public class yyLSLTokens : YyLexer {
67243,105,0,345,3, 67283,105,0,345,3,
6725106,0,345,3,107, 6729106,0,345,3,107,
67260,345,3,108,0, 67300,345,3,108,0,
6727345,677,11,1,845, 6731345,677,11,1,867,
67280,348,1,-1,3, 67320,348,1,-1,3,
6729116,0,345,3,117, 6733116,0,345,3,117,
67300,345,3,118,0, 67340,345,3,118,0,
@@ -6771,14 +6775,14 @@ public class yyLSLTokens : YyLexer {
6771345,3,106,0,345, 6775345,3,106,0,345,
67723,107,0,345,3, 67763,107,0,345,3,
6773108,0,345,678,11, 6777108,0,345,678,11,
67741,845,0,348,1, 67781,867,0,348,1,
6775-1,3,102,0,345, 6779-1,3,102,0,345,
67763,103,0,345,3, 67803,103,0,345,3,
6777104,0,345,3,105, 6781104,0,345,3,105,
67780,345,3,106,0, 67820,345,3,106,0,
6779345,3,107,0,345, 6783345,3,107,0,345,
67803,108,0,345,679, 67843,108,0,345,679,
678111,1,845,0,348, 678511,1,867,0,348,
67821,-1,3,115,0, 67861,-1,3,115,0,
6783345,3,116,0,345, 6787345,3,116,0,345,
67843,117,0,345,3, 67883,117,0,345,3,
@@ -6825,7 +6829,7 @@ public class yyLSLTokens : YyLexer {
6825105,0,345,3,106, 6829105,0,345,3,106,
68260,345,3,107,0, 68300,345,3,107,0,
6827345,3,108,0,345, 6831345,3,108,0,345,
6828680,11,1,845,0, 6832680,11,1,867,0,
6829348,1,-1,3,97, 6833348,1,-1,3,97,
68300,345,3,98,0, 68340,345,3,98,0,
6831345,3,99,0,345, 6835345,3,99,0,345,
@@ -6836,7 +6840,7 @@ public class yyLSLTokens : YyLexer {
68363,105,0,345,3, 68403,105,0,345,3,
6837106,0,345,3,107, 6841106,0,345,3,107,
68380,345,3,108,0, 68420,345,3,108,0,
6839345,681,11,1,845, 6843345,681,11,1,867,
68400,348,1,-1,3, 68440,348,1,-1,3,
6841113,0,345,3,114, 6845113,0,345,3,114,
68420,345,3,115,0, 68460,345,3,115,0,
@@ -6885,7 +6889,7 @@ public class yyLSLTokens : YyLexer {
6885105,0,345,3,106, 6889105,0,345,3,106,
68860,345,3,107,0, 68900,345,3,107,0,
6887345,3,108,0,345, 6891345,3,108,0,345,
6888682,11,1,845,0, 6892682,11,1,867,0,
6889348,1,-1,3,117, 6893348,1,-1,3,117,
68900,345,3,118,0, 68940,345,3,118,0,
6891345,3,119,0,345, 6895345,3,119,0,345,
@@ -6931,7 +6935,7 @@ public class yyLSLTokens : YyLexer {
6931345,3,106,0,345, 6935345,3,106,0,345,
69323,107,0,345,3, 69363,107,0,345,3,
6933108,0,345,683,11, 6937108,0,345,683,11,
69341,845,0,348,1, 69381,867,0,348,1,
6935-1,3,117,0,345, 6939-1,3,117,0,345,
69363,118,0,345,3, 69403,118,0,345,3,
6937119,0,345,3,120, 6941119,0,345,3,120,
@@ -6976,12 +6980,12 @@ public class yyLSLTokens : YyLexer {
69763,105,0,345,3, 69803,105,0,345,3,
6977106,0,345,3,107, 6981106,0,345,3,107,
69780,345,3,108,0, 69820,345,3,108,0,
6979345,684,11,1,845, 6983345,684,11,1,867,
69800,348,1,-1,3, 69840,348,1,-1,3,
6981105,0,685,12,1, 6985105,0,685,12,1,
698232925,686,5,63,3, 698634987,686,5,63,3,
6983109,0,345,3,110, 6987109,0,345,3,110,
69840,687,12,1,32954, 69880,687,12,1,35016,
6985688,5,63,3,109, 6989688,5,63,3,109,
69860,345,3,110,0, 69900,345,3,110,0,
6987345,3,111,0,345, 6991345,3,111,0,345,
@@ -6989,7 +6993,7 @@ public class yyLSLTokens : YyLexer {
6989113,0,345,3,114, 6993113,0,345,3,114,
69900,345,3,115,0, 69940,345,3,115,0,
6991345,3,116,0,689, 6995345,3,116,0,689,
699212,1,32989,690,5, 699612,1,35051,690,5,
699363,3,109,0,345, 699763,3,109,0,345,
69943,110,0,345,3, 69983,110,0,345,3,
6995111,0,345,3,112, 6999111,0,345,3,112,
@@ -7035,7 +7039,7 @@ public class yyLSLTokens : YyLexer {
703598,0,345,3,99, 703998,0,345,3,99,
70360,345,3,100,0, 70400,345,3,100,0,
7037345,3,101,0,691, 7041345,3,101,0,691,
703812,1,33036,692,5, 704212,1,35098,692,5,
703963,3,109,0,345, 704363,3,109,0,345,
70403,110,0,345,3, 70443,110,0,345,3,
7041111,0,345,3,112, 7045111,0,345,3,112,
@@ -7083,7 +7087,7 @@ public class yyLSLTokens : YyLexer {
7083345,3,101,0,345, 7087345,3,101,0,345,
70843,102,0,345,3, 70883,102,0,345,3,
7085103,0,693,12,1, 7089103,0,693,12,1,
708633085,694,5,63,3, 709035147,694,5,63,3,
7087109,0,345,3,110, 7091109,0,345,3,110,
70880,345,3,111,0, 70920,345,3,111,0,
7089345,3,112,0,345, 7093345,3,112,0,345,
@@ -7129,13 +7133,13 @@ public class yyLSLTokens : YyLexer {
7129345,3,99,0,345, 7133345,3,99,0,345,
71303,100,0,345,3, 71343,100,0,345,3,
7131101,0,695,12,1, 7135101,0,695,12,1,
713233132,696,5,63,3, 713635194,696,5,63,3,
7133109,0,345,3,110, 7137109,0,345,3,110,
71340,345,3,111,0, 71380,345,3,111,0,
7135345,3,112,0,345, 7139345,3,112,0,345,
71363,113,0,345,3, 71403,113,0,345,3,
7137114,0,697,12,1, 7141114,0,697,12,1,
713833165,698,5,63,3, 714235227,698,5,63,3,
7139109,0,345,3,110, 7143109,0,345,3,110,
71400,345,3,111,0, 71440,345,3,111,0,
7141345,3,112,0,345, 7145345,3,112,0,345,
@@ -7239,27 +7243,27 @@ public class yyLSLTokens : YyLexer {
7239345,3,106,0,345, 7243345,3,106,0,345,
72403,107,0,345,3, 72443,107,0,345,3,
7241108,0,345,701,11, 7245108,0,345,701,11,
72421,845,0,348,1, 72461,867,0,348,1,
7243-1,3,102,0,345, 7247-1,3,102,0,345,
72443,103,0,345,3, 72483,103,0,345,3,
7245104,0,345,3,105, 7249104,0,345,3,105,
72460,345,3,106,0, 72500,345,3,106,0,
7247345,3,107,0,345, 7251345,3,107,0,345,
72483,108,0,345,702, 72523,108,0,345,702,
724911,1,845,0,348, 725311,1,867,0,348,
72501,-1,3,104,0, 72541,-1,3,104,0,
7251345,3,105,0,345, 7255345,3,105,0,345,
72523,106,0,345,3, 72563,106,0,345,3,
7253107,0,345,3,108, 7257107,0,345,3,108,
72540,345,703,11,1, 72580,345,703,11,1,
7255845,0,348,1,-1, 7259867,0,348,1,-1,
72563,102,0,345,3, 72603,102,0,345,3,
7257103,0,345,3,104, 7261103,0,345,3,104,
72580,345,3,105,0, 72620,345,3,105,0,
7259345,3,106,0,345, 7263345,3,106,0,345,
72603,107,0,345,3, 72643,107,0,345,3,
7261108,0,345,704,11, 7265108,0,345,704,11,
72621,845,0,348,1, 72661,867,0,348,1,
7263-1,3,117,0,345, 7267-1,3,117,0,345,
72643,118,0,345,3, 72683,118,0,345,3,
7265119,0,345,3,120, 7269119,0,345,3,120,
@@ -7304,7 +7308,7 @@ public class yyLSLTokens : YyLexer {
73043,105,0,345,3, 73083,105,0,345,3,
7305106,0,345,3,107, 7309106,0,345,3,107,
73060,345,3,108,0, 73100,345,3,108,0,
7307345,705,11,1,845, 7311345,705,11,1,867,
73080,348,1,-1,3, 73120,348,1,-1,3,
7309111,0,345,3,112, 7313111,0,345,3,112,
73100,345,3,113,0, 73140,345,3,113,0,
@@ -7350,7 +7354,7 @@ public class yyLSLTokens : YyLexer {
73500,345,3,100,0, 73540,345,3,100,0,
7351345,3,101,0,345, 7355345,3,101,0,345,
73523,102,0,706,12, 73563,102,0,706,12,
73531,33693,707,5,63, 73571,35755,707,5,63,
73543,109,0,345,3, 73583,109,0,345,3,
7355110,0,345,3,111, 7359110,0,345,3,111,
73560,345,3,112,0, 73600,345,3,112,0,
@@ -7409,9 +7413,9 @@ public class yyLSLTokens : YyLexer {
7409105,0,345,3,106, 7413105,0,345,3,106,
74100,345,3,107,0, 74140,345,3,107,0,
7411345,3,108,0,345, 7415345,3,108,0,345,
7412710,11,1,845,0, 7416710,11,1,867,0,
7413348,1,-1,3,106, 7417348,1,-1,3,106,
74140,711,12,1,33886, 74180,711,12,1,35948,
7415712,5,63,3,109, 7419712,5,63,3,109,
74160,345,3,110,0, 74200,345,3,110,0,
7417345,3,111,0,345, 7421345,3,111,0,345,
@@ -7420,13 +7424,13 @@ public class yyLSLTokens : YyLexer {
74200,345,3,115,0, 74240,345,3,115,0,
7421345,3,116,0,345, 7425345,3,116,0,345,
74223,117,0,713,12, 74263,117,0,713,12,
74231,33922,714,5,63, 74271,35984,714,5,63,
74243,109,0,715,12, 74283,109,0,715,12,
74251,33950,716,5,63, 74291,36012,716,5,63,
74263,109,0,345,3, 74303,109,0,345,3,
7427110,0,345,3,111, 7431110,0,345,3,111,
74280,345,3,112,0, 74320,345,3,112,0,
7429717,12,1,33981,718, 7433717,12,1,36043,718,
74305,63,3,109,0, 74345,63,3,109,0,
7431345,3,110,0,345, 7435345,3,110,0,345,
74323,111,0,345,3, 74363,111,0,345,3,
@@ -7529,7 +7533,7 @@ public class yyLSLTokens : YyLexer {
7529345,3,106,0,345, 7533345,3,106,0,345,
75303,107,0,345,3, 75343,107,0,345,3,
7531108,0,345,721,11, 7535108,0,345,721,11,
75321,845,0,348,1, 75361,867,0,348,1,
7533-1,3,110,0,345, 7537-1,3,110,0,345,
75343,111,0,345,3, 75383,111,0,345,3,
7535112,0,345,3,113, 7539112,0,345,3,113,
@@ -7580,7 +7584,7 @@ public class yyLSLTokens : YyLexer {
75800,345,3,106,0, 75840,345,3,106,0,
7581345,3,107,0,345, 7585345,3,107,0,345,
75823,108,0,345,722, 75863,108,0,345,722,
758311,1,845,0,348, 758711,1,867,0,348,
75841,-1,3,118,0, 75881,-1,3,118,0,
7585345,3,119,0,345, 7589345,3,119,0,345,
75863,120,0,345,3, 75903,120,0,345,3,
@@ -7625,9 +7629,9 @@ public class yyLSLTokens : YyLexer {
7625345,3,106,0,345, 7629345,3,106,0,345,
76263,107,0,345,3, 76303,107,0,345,3,
7627108,0,345,723,11, 7631108,0,345,723,11,
76281,845,0,348,1, 76321,867,0,348,1,
7629-1,3,107,0,724, 7633-1,3,107,0,724,
763012,1,34367,725,5, 763412,1,36429,725,5,
763163,3,109,0,345, 763563,3,109,0,345,
76323,110,0,345,3, 76363,110,0,345,3,
7633111,0,345,3,112, 7637111,0,345,3,112,
@@ -7673,7 +7677,7 @@ public class yyLSLTokens : YyLexer {
767398,0,345,3,99, 767798,0,345,3,99,
76740,345,3,100,0, 76780,345,3,100,0,
7675345,3,101,0,726, 7679345,3,101,0,726,
767612,1,34414,727,5, 768012,1,36476,727,5,
767763,3,109,0,345, 768163,3,109,0,345,
76783,110,0,345,3, 76823,110,0,345,3,
7679111,0,345,3,112, 7683111,0,345,3,112,
@@ -7685,7 +7689,7 @@ public class yyLSLTokens : YyLexer {
7685345,3,119,0,345, 7689345,3,119,0,345,
76863,120,0,345,3, 76903,120,0,345,3,
7687121,0,728,12,1, 7691121,0,728,12,1,
768834454,729,5,63,3, 769236516,729,5,63,3,
7689109,0,345,3,110, 7693109,0,345,3,110,
76900,345,3,111,0, 76940,345,3,111,0,
7691345,3,112,0,345, 7695345,3,112,0,345,
@@ -7782,16 +7786,16 @@ public class yyLSLTokens : YyLexer {
77823,106,0,345,3, 77863,106,0,345,3,
7783107,0,345,3,108, 7787107,0,345,3,108,
77840,345,732,11,1, 77880,345,732,11,1,
7785845,0,348,1,-1, 7789867,0,348,1,-1,
77863,102,0,345,3, 77903,102,0,345,3,
7787103,0,345,3,104, 7791103,0,345,3,104,
77880,345,3,105,0, 77920,345,3,105,0,
7789345,3,106,0,345, 7793345,3,106,0,345,
77903,107,0,345,3, 77943,107,0,345,3,
7791108,0,345,733,11, 7795108,0,345,733,11,
77921,845,0,348,1, 77961,867,0,348,1,
7793-1,3,108,0,734, 7797-1,3,108,0,734,
779412,1,34728,735,5, 779812,1,36790,735,5,
779563,3,109,0,345, 779963,3,109,0,345,
77963,110,0,345,3, 78003,110,0,345,3,
7797111,0,345,3,112, 7801111,0,345,3,112,
@@ -7834,10 +7838,10 @@ public class yyLSLTokens : YyLexer {
78340,345,3,90,0, 78380,345,3,90,0,
7835345,3,95,0,345, 7839345,3,95,0,345,
78363,97,0,736,12, 78403,97,0,736,12,
78371,34771,737,5,63, 78411,36833,737,5,63,
78383,109,0,345,3, 78423,109,0,345,3,
7839110,0,738,12,1, 7843110,0,738,12,1,
784034800,739,5,63,3, 784436862,739,5,63,3,
7841109,0,345,3,110, 7845109,0,345,3,110,
78420,345,3,111,0, 78460,345,3,111,0,
7843345,3,112,0,345, 7847345,3,112,0,345,
@@ -7882,7 +7886,7 @@ public class yyLSLTokens : YyLexer {
78820,345,3,98,0, 78860,345,3,98,0,
7883345,3,99,0,345, 7887345,3,99,0,345,
78843,100,0,740,12, 78883,100,0,740,12,
78851,34846,741,5,63, 78891,36908,741,5,63,
78863,109,0,345,3, 78903,109,0,345,3,
7887110,0,345,3,111, 7891110,0,345,3,111,
78880,345,3,112,0, 78920,345,3,112,0,
@@ -7924,7 +7928,7 @@ public class yyLSLTokens : YyLexer {
79240,345,3,89,0, 79280,345,3,89,0,
7925345,3,90,0,345, 7929345,3,90,0,345,
79263,95,0,742,12, 79303,95,0,742,12,
79271,34932,743,5,63, 79311,36994,743,5,63,
79283,109,0,345,3, 79323,109,0,345,3,
7929110,0,345,3,111, 7933110,0,345,3,111,
79300,345,3,112,0, 79340,345,3,112,0,
@@ -7968,11 +7972,11 @@ public class yyLSLTokens : YyLexer {
79683,95,0,345,3, 79723,95,0,345,3,
796997,0,345,3,98, 797397,0,345,3,98,
79700,345,3,99,0, 79740,345,3,99,0,
7971744,12,1,34977,745, 7975744,12,1,37039,745,
79725,63,3,109,0, 79765,63,3,109,0,
7973345,3,110,0,345, 7977345,3,110,0,345,
79743,111,0,746,12, 79783,111,0,746,12,
79751,35007,747,5,63, 79791,37069,747,5,63,
79763,109,0,345,3, 79803,109,0,345,3,
7977110,0,345,3,111, 7981110,0,345,3,111,
79780,345,3,112,0, 79820,345,3,112,0,
@@ -8023,7 +8027,7 @@ public class yyLSLTokens : YyLexer {
8023345,3,105,0,345, 8027345,3,105,0,345,
80243,106,0,345,3, 80283,106,0,345,3,
8025107,0,345,3,108, 8029107,0,345,3,108,
80260,748,12,1,35061, 80300,748,12,1,37123,
8027749,5,63,3,109, 8031749,5,63,3,109,
80280,345,3,110,0, 80320,345,3,110,0,
8029345,3,111,0,345, 8033345,3,111,0,345,
@@ -8075,7 +8079,7 @@ public class yyLSLTokens : YyLexer {
8075105,0,345,3,106, 8079105,0,345,3,106,
80760,345,3,107,0, 80800,345,3,107,0,
8077345,3,108,0,750, 8081345,3,108,0,750,
807812,1,35115,751,5, 808212,1,37177,751,5,
807963,3,109,0,345, 808363,3,109,0,345,
80803,110,0,345,3, 80843,110,0,345,3,
8081111,0,345,3,112, 8085111,0,345,3,112,
@@ -8124,14 +8128,14 @@ public class yyLSLTokens : YyLexer {
81243,102,0,345,3, 81283,102,0,345,3,
8125103,0,345,3,104, 8129103,0,345,3,104,
81260,345,3,105,0, 81300,345,3,105,0,
8127752,12,1,35166,753, 8131752,12,1,37228,753,
81285,63,3,109,0, 81325,63,3,109,0,
8129345,3,110,0,345, 8133345,3,110,0,345,
81303,111,0,345,3, 81343,111,0,345,3,
8131112,0,345,3,113, 8135112,0,345,3,113,
81320,345,3,114,0, 81360,345,3,114,0,
8133345,3,115,0,754, 8137345,3,115,0,754,
813412,1,35200,755,5, 813812,1,37262,755,5,
813563,3,109,0,345, 813963,3,109,0,345,
81363,110,0,345,3, 81403,110,0,345,3,
8137111,0,345,3,112, 8141111,0,345,3,112,
@@ -8180,14 +8184,14 @@ public class yyLSLTokens : YyLexer {
81803,102,0,345,3, 81843,102,0,345,3,
8181103,0,345,3,104, 8185103,0,345,3,104,
81820,345,3,105,0, 81860,345,3,105,0,
8183756,12,1,35251,757, 8187756,12,1,37313,757,
81845,63,3,109,0, 81885,63,3,109,0,
8185345,3,110,0,345, 8189345,3,110,0,345,
81863,111,0,758,12, 81903,111,0,758,12,
81871,35281,759,5,63, 81911,37343,759,5,63,
81883,109,0,345,3, 81923,109,0,345,3,
8189110,0,760,12,1, 8193110,0,760,12,1,
819035310,761,5,63,3, 819437372,761,5,63,3,
8191109,0,345,3,110, 8195109,0,345,3,110,
81920,345,3,111,0, 81960,345,3,111,0,
8193345,3,112,0,345, 8197345,3,112,0,345,
@@ -8229,13 +8233,13 @@ public class yyLSLTokens : YyLexer {
8229345,3,89,0,345, 8233345,3,89,0,345,
82303,90,0,345,3, 82343,90,0,345,3,
823195,0,762,12,1, 823595,0,762,12,1,
823235396,763,5,63,3, 823637458,763,5,63,3,
8233109,0,345,3,110, 8237109,0,345,3,110,
82340,345,3,111,0, 82380,345,3,111,0,
8235345,3,112,0,345, 8239345,3,112,0,345,
82363,113,0,345,3, 82403,113,0,345,3,
8237114,0,345,3,115, 8241114,0,345,3,115,
82380,764,12,1,35430, 82420,764,12,1,37492,
8239765,5,63,3,109, 8243765,5,63,3,109,
82400,345,3,110,0, 82440,345,3,110,0,
8241345,3,111,0,345, 8245345,3,111,0,345,
@@ -8243,7 +8247,7 @@ public class yyLSLTokens : YyLexer {
8243113,0,345,3,114, 8247113,0,345,3,114,
82440,345,3,115,0, 82480,345,3,115,0,
8245345,3,116,0,766, 8249345,3,116,0,766,
824612,1,35465,767,5, 825012,1,37527,767,5,
824763,3,109,0,345, 825163,3,109,0,345,
82483,110,0,345,3, 82523,110,0,345,3,
8249111,0,345,3,112, 8253111,0,345,3,112,
@@ -8286,20 +8290,20 @@ public class yyLSLTokens : YyLexer {
82860,345,3,90,0, 82900,345,3,90,0,
8287345,3,95,0,345, 8291345,3,95,0,345,
82883,97,0,768,12, 82923,97,0,768,12,
82891,35508,769,5,63, 82931,37570,769,5,63,
82903,109,0,345,3, 82943,109,0,345,3,
8291110,0,345,3,111, 8295110,0,345,3,111,
82920,345,3,112,0, 82960,345,3,112,0,
8293345,3,113,0,345, 8297345,3,113,0,345,
82943,114,0,770,12, 82983,114,0,770,12,
82951,35541,771,5,63, 82991,37603,771,5,63,
82963,109,0,345,3, 83003,109,0,345,3,
8297110,0,345,3,111, 8301110,0,345,3,111,
82980,345,3,112,0, 83020,345,3,112,0,
8299345,3,113,0,345, 8303345,3,113,0,345,
83003,114,0,345,3, 83043,114,0,345,3,
8301115,0,345,3,116, 8305115,0,345,3,116,
83020,772,12,1,35576, 83060,772,12,1,37638,
8303773,5,63,3,109, 8307773,5,63,3,109,
83040,345,3,110,0, 83080,345,3,110,0,
8305345,3,111,0,345, 8309345,3,111,0,345,
@@ -8408,7 +8412,7 @@ public class yyLSLTokens : YyLexer {
84083,106,0,345,3, 84123,106,0,345,3,
8409107,0,345,3,108, 8413107,0,345,3,108,
84100,345,776,11,1, 84140,345,776,11,1,
8411845,0,348,1,-1, 8415867,0,348,1,-1,
84123,115,0,345,3, 84163,115,0,345,3,
8413116,0,345,3,117, 8417116,0,345,3,117,
84140,345,3,118,0, 84180,345,3,118,0,
@@ -8455,7 +8459,7 @@ public class yyLSLTokens : YyLexer {
8455345,3,106,0,345, 8459345,3,106,0,345,
84563,107,0,345,3, 84603,107,0,345,3,
8457108,0,345,777,11, 8461108,0,345,777,11,
84581,845,0,348,1, 84621,867,0,348,1,
8459-1,3,98,0,345, 8463-1,3,98,0,345,
84603,99,0,345,3, 84643,99,0,345,3,
8461100,0,345,3,101, 8465100,0,345,3,101,
@@ -8465,7 +8469,7 @@ public class yyLSLTokens : YyLexer {
8465105,0,345,3,106, 8469105,0,345,3,106,
84660,345,3,107,0, 84700,345,3,107,0,
8467345,3,108,0,345, 8471345,3,108,0,345,
8468778,11,1,845,0, 8472778,11,1,867,0,
8469348,1,-1,3,117, 8473348,1,-1,3,117,
84700,345,3,118,0, 84740,345,3,118,0,
8471345,3,119,0,345, 8475345,3,119,0,345,
@@ -8511,7 +8515,7 @@ public class yyLSLTokens : YyLexer {
8511345,3,106,0,345, 8515345,3,106,0,345,
85123,107,0,345,3, 85163,107,0,345,3,
8513108,0,345,779,11, 8517108,0,345,779,11,
85141,845,0,348,1, 85181,867,0,348,1,
8515-1,3,116,0,345, 8519-1,3,116,0,345,
85163,117,0,345,3, 85203,117,0,345,3,
8517118,0,345,3,119, 8521118,0,345,3,119,
@@ -8551,10 +8555,10 @@ public class yyLSLTokens : YyLexer {
8551345,3,98,0,345, 8555345,3,98,0,345,
85523,99,0,345,3, 85563,99,0,345,3,
8553100,0,345,3,101, 8557100,0,345,3,101,
85540,780,12,1,36043, 85580,780,12,1,38105,
8555781,5,63,3,109, 8559781,5,63,3,109,
85560,345,3,110,0, 85600,345,3,110,0,
8557782,12,1,36072,783, 8561782,12,1,38134,783,
85585,63,3,109,0, 85625,63,3,109,0,
8559345,3,110,0,345, 8563345,3,110,0,345,
85603,111,0,345,3, 85643,111,0,345,3,
@@ -8599,7 +8603,7 @@ public class yyLSLTokens : YyLexer {
8599345,3,97,0,345, 8603345,3,97,0,345,
86003,98,0,345,3, 86043,98,0,345,3,
860199,0,345,3,100, 860599,0,345,3,100,
86020,784,12,1,36118, 86060,784,12,1,38180,
8603785,5,63,3,109, 8607785,5,63,3,109,
86040,345,3,110,0, 86080,345,3,110,0,
8605345,3,111,0,345, 8609345,3,111,0,345,
@@ -8669,7 +8673,7 @@ public class yyLSLTokens : YyLexer {
8669105,0,345,3,106, 8673105,0,345,3,106,
86700,345,3,107,0, 86740,345,3,107,0,
8671345,3,108,0,345, 8675345,3,108,0,345,
8672788,11,1,845,0, 8676788,11,1,867,0,
8673348,1,-1,3,111, 8677348,1,-1,3,111,
86740,345,3,112,0, 86780,345,3,112,0,
8675345,3,113,0,345, 8679345,3,113,0,345,
@@ -8720,14 +8724,14 @@ public class yyLSLTokens : YyLexer {
87203,106,0,345,3, 87243,106,0,345,3,
8721107,0,345,3,108, 8725107,0,345,3,108,
87220,345,789,11,1, 87260,345,789,11,1,
8723845,0,348,1,-1, 8727867,0,348,1,-1,
87243,102,0,345,3, 87283,102,0,345,3,
8725103,0,345,3,104, 8729103,0,345,3,104,
87260,345,3,105,0, 87300,345,3,105,0,
8727345,3,106,0,345, 8731345,3,106,0,345,
87283,107,0,345,3, 87323,107,0,345,3,
8729108,0,345,790,11, 8733108,0,345,790,11,
87301,845,0,348,1, 87341,867,0,348,1,
8731-1,3,97,0,345, 8735-1,3,97,0,345,
87323,98,0,345,3, 87363,98,0,345,3,
873399,0,345,3,100, 873799,0,345,3,100,
@@ -8797,7 +8801,7 @@ public class yyLSLTokens : YyLexer {
8797345,3,106,0,345, 8801345,3,106,0,345,
87983,107,0,345,3, 88023,107,0,345,3,
8799108,0,345,793,11, 8803108,0,345,793,11,
88001,845,0,348,1, 88041,867,0,348,1,
8801-1,3,112,0,345, 8805-1,3,112,0,345,
88023,113,0,345,3, 88063,113,0,345,3,
8803114,0,345,3,115, 8807114,0,345,3,115,
@@ -8846,11 +8850,11 @@ public class yyLSLTokens : YyLexer {
88463,105,0,345,3, 88503,105,0,345,3,
8847106,0,345,3,107, 8851106,0,345,3,107,
88480,345,3,108,0, 88520,345,3,108,0,
8849345,794,11,1,845, 8853345,794,11,1,867,
88500,348,1,-1,3, 88540,348,1,-1,3,
8851106,0,345,3,107, 8855106,0,345,3,107,
88520,345,3,108,0, 88560,345,3,108,0,
8853345,795,11,1,845, 8857345,795,11,1,867,
88540,348,1,-1,3, 88580,348,1,-1,3,
8855116,0,345,3,117, 8859116,0,345,3,117,
88560,345,3,118,0, 88600,345,3,118,0,
@@ -8897,14 +8901,14 @@ public class yyLSLTokens : YyLexer {
8897345,3,106,0,345, 8901345,3,106,0,345,
88983,107,0,345,3, 89023,107,0,345,3,
8899108,0,345,796,11, 8903108,0,345,796,11,
89001,845,0,348,1, 89041,867,0,348,1,
8901-1,3,106,0,345, 8905-1,3,106,0,345,
89023,107,0,345,3, 89063,107,0,345,3,
8903108,0,345,797,11, 8907108,0,345,797,11,
89041,845,0,348,1, 89081,867,0,348,1,
8905-1,798,11,1,845, 8909-1,798,11,1,867,
89060,348,1,-1,799, 89100,348,1,-1,799,
890711,1,845,0,348, 891111,1,867,0,348,
89081,-1,3,112,0, 89121,-1,3,112,0,
8909345,3,113,0,345, 8913345,3,113,0,345,
89103,114,0,345,3, 89143,114,0,345,3,
@@ -8954,7 +8958,7 @@ public class yyLSLTokens : YyLexer {
89543,106,0,345,3, 89583,106,0,345,3,
8955107,0,345,3,108, 8959107,0,345,3,108,
89560,345,800,11,1, 89600,345,800,11,1,
8957845,0,348,1,-1, 8961867,0,348,1,-1,
89583,100,0,345,3, 89623,100,0,345,3,
8959101,0,345,3,102, 8963101,0,345,3,102,
89600,345,3,103,0, 89640,345,3,103,0,
@@ -8962,7 +8966,7 @@ public class yyLSLTokens : YyLexer {
89623,105,0,345,3, 89663,105,0,345,3,
8963106,0,345,3,107, 8967106,0,345,3,107,
89640,345,3,108,0, 89680,345,3,108,0,
8965345,801,11,1,845, 8969345,801,11,1,867,
89660,348,1,-1,3, 89700,348,1,-1,3,
896797,0,345,3,98, 897197,0,345,3,98,
89680,345,3,99,0, 89720,345,3,99,0,
@@ -8974,7 +8978,7 @@ public class yyLSLTokens : YyLexer {
89743,106,0,345,3, 89783,106,0,345,3,
8975107,0,345,3,108, 8979107,0,345,3,108,
89760,345,802,11,1, 89800,345,802,11,1,
8977845,0,348,1,-1, 8981867,0,348,1,-1,
89783,101,0,345,3, 89823,101,0,345,3,
8979102,0,345,3,103, 8983102,0,345,3,103,
89800,345,3,104,0, 89840,345,3,104,0,
@@ -8982,7 +8986,7 @@ public class yyLSLTokens : YyLexer {
89823,106,0,345,3, 89863,106,0,345,3,
8983107,0,345,3,108, 8987107,0,345,3,108,
89840,345,803,11,1, 89880,345,803,11,1,
8985845,0,348,1,-1, 8989867,0,348,1,-1,
89863,111,0,345,3, 89903,111,0,345,3,
8987112,0,345,3,113, 8991112,0,345,3,113,
89880,345,3,114,0, 89920,345,3,114,0,
@@ -9032,7 +9036,7 @@ public class yyLSLTokens : YyLexer {
90320,345,3,106,0, 90360,345,3,106,0,
9033345,3,107,0,345, 9037345,3,107,0,345,
90343,108,0,345,804, 90383,108,0,345,804,
903511,1,845,0,348, 903911,1,867,0,348,
90361,-1,3,98,0, 90401,-1,3,98,0,
9037345,3,99,0,345, 9041345,3,99,0,345,
90383,100,0,345,3, 90423,100,0,345,3,
@@ -9040,10 +9044,10 @@ public class yyLSLTokens : YyLexer {
90400,345,3,103,0, 90440,345,3,103,0,
9041345,3,104,0,345, 9045345,3,104,0,345,
90423,105,0,805,12, 90463,105,0,805,12,
90431,37419,806,5,63, 90471,39481,806,5,63,
90443,109,0,345,3, 90483,109,0,345,3,
9045110,0,807,12,1, 9049110,0,807,12,1,
904637448,808,5,63,3, 905039510,808,5,63,3,
9047109,0,345,3,110, 9051109,0,345,3,110,
90480,345,3,111,0, 90520,345,3,111,0,
9049345,3,112,0,345, 9053345,3,112,0,345,
@@ -9093,7 +9097,7 @@ public class yyLSLTokens : YyLexer {
9093345,3,104,0,345, 9097345,3,104,0,345,
90943,105,0,345,3, 90983,105,0,345,3,
9095106,0,345,3,107, 9099106,0,345,3,107,
90960,809,12,1,37501, 91000,809,12,1,39563,
9097810,5,63,3,109, 9101810,5,63,3,109,
90980,345,3,110,0, 91020,345,3,110,0,
9099345,3,111,0,345, 9103345,3,111,0,345,
@@ -9135,9 +9139,9 @@ public class yyLSLTokens : YyLexer {
9135345,3,88,0,345, 9139345,3,88,0,345,
91363,89,0,345,3, 91403,89,0,345,3,
913790,0,345,3,95, 914190,0,345,3,95,
91380,811,12,1,37587, 91420,811,12,1,39649,
9139812,5,63,3,109, 9143812,5,63,3,109,
91400,813,12,1,37615, 91440,813,12,1,39677,
9141814,5,63,3,109, 9145814,5,63,3,109,
91420,345,3,110,0, 91460,345,3,110,0,
9143345,3,111,0,345, 9147345,3,111,0,345,
@@ -9183,21 +9187,21 @@ public class yyLSLTokens : YyLexer {
9183345,3,98,0,345, 9187345,3,98,0,345,
91843,99,0,345,3, 91883,99,0,345,3,
9185100,0,345,3,101, 9189100,0,345,3,101,
91860,815,12,1,37662, 91900,815,12,1,39724,
9187816,5,63,3,109, 9191816,5,63,3,109,
91880,345,3,110,0, 91920,345,3,110,0,
9189345,3,111,0,345, 9193345,3,111,0,345,
91903,112,0,345,3, 91943,112,0,345,3,
9191113,0,345,3,114, 9195113,0,345,3,114,
91920,345,3,115,0, 91960,345,3,115,0,
9193817,12,1,37696,818, 9197817,12,1,39758,818,
91945,63,3,109,0, 91985,63,3,109,0,
9195345,3,110,0,345, 9199345,3,110,0,345,
91963,111,0,345,3, 92003,111,0,345,3,
9197112,0,345,3,113, 9201112,0,345,3,113,
91980,345,3,114,0, 92020,345,3,114,0,
9199345,3,115,0,819, 9203345,3,115,0,819,
920012,1,37730,820,5, 920412,1,39792,820,5,
920163,3,109,0,345, 920563,3,109,0,345,
92023,110,0,345,3, 92063,110,0,345,3,
9203111,0,345,3,112, 9207111,0,345,3,112,
@@ -9240,7 +9244,7 @@ public class yyLSLTokens : YyLexer {
92400,345,3,90,0, 92440,345,3,90,0,
9241345,3,95,0,345, 9245345,3,95,0,345,
92423,97,0,821,12, 92463,97,0,821,12,
92431,37773,822,5,63, 92471,39835,822,5,63,
92443,109,0,345,3, 92483,109,0,345,3,
9245110,0,345,3,111, 9249110,0,345,3,111,
92460,345,3,112,0, 92500,345,3,112,0,
@@ -9287,7 +9291,7 @@ public class yyLSLTokens : YyLexer {
9287345,3,100,0,345, 9291345,3,100,0,345,
92883,101,0,345,3, 92923,101,0,345,3,
9289102,0,345,3,103, 9293102,0,345,3,103,
92900,823,12,1,37822, 92940,823,12,1,39884,
9291824,5,63,3,109, 9295824,5,63,3,109,
92920,345,3,110,0, 92960,345,3,110,0,
9293345,3,111,0,345, 9297345,3,111,0,345,
@@ -9333,7 +9337,7 @@ public class yyLSLTokens : YyLexer {
9333345,3,98,0,345, 9337345,3,98,0,345,
93343,99,0,345,3, 93383,99,0,345,3,
9335100,0,345,3,101, 9339100,0,345,3,101,
93360,825,12,1,37869, 93400,825,12,1,39931,
9337826,5,63,3,109, 9341826,5,63,3,109,
93380,345,3,110,0, 93420,345,3,110,0,
9339345,3,111,0,345, 9343345,3,111,0,345,
@@ -9400,13 +9404,13 @@ public class yyLSLTokens : YyLexer {
94000,345,3,106,0, 94040,345,3,106,0,
9401345,3,107,0,345, 9405345,3,107,0,345,
94023,108,0,345,829, 94063,108,0,345,829,
940311,1,845,0,348, 940711,1,867,0,348,
94041,-1,3,104,0, 94081,-1,3,104,0,
9405345,3,105,0,345, 9409345,3,105,0,345,
94063,106,0,345,3, 94103,106,0,345,3,
9407107,0,345,3,108, 9411107,0,345,3,108,
94080,345,830,11,1, 94120,345,830,11,1,
9409845,0,348,1,-1, 9413867,0,348,1,-1,
94103,98,0,345,3, 94143,98,0,345,3,
941199,0,345,3,100, 941599,0,345,3,100,
94120,345,3,101,0, 94160,345,3,101,0,
@@ -9416,7 +9420,7 @@ public class yyLSLTokens : YyLexer {
94160,345,3,106,0, 94200,345,3,106,0,
9417345,3,107,0,345, 9421345,3,107,0,345,
94183,108,0,345,831, 94223,108,0,345,831,
941911,1,845,0,348, 942311,1,867,0,348,
94201,-1,3,116,0, 94241,-1,3,116,0,
9421345,3,117,0,345, 9425345,3,117,0,345,
94223,118,0,345,3, 94263,118,0,345,3,
@@ -9462,7 +9466,7 @@ public class yyLSLTokens : YyLexer {
94623,105,0,345,3, 94663,105,0,345,3,
9463106,0,345,3,107, 9467106,0,345,3,107,
94640,345,3,108,0, 94680,345,3,108,0,
9465345,832,11,1,845, 9469345,832,11,1,867,
94660,348,1,-1,3, 94700,348,1,-1,3,
9467116,0,345,3,117, 9471116,0,345,3,117,
94680,345,3,118,0, 94720,345,3,118,0,
@@ -9509,14 +9513,14 @@ public class yyLSLTokens : YyLexer {
9509345,3,106,0,345, 9513345,3,106,0,345,
95103,107,0,345,3, 95143,107,0,345,3,
9511108,0,345,833,11, 9515108,0,345,833,11,
95121,845,0,348,1, 95161,867,0,348,1,
9513-1,3,102,0,345, 9517-1,3,102,0,345,
95143,103,0,345,3, 95183,103,0,345,3,
9515104,0,345,3,105, 9519104,0,345,3,105,
95160,345,3,106,0, 95200,345,3,106,0,
9517345,3,107,0,345, 9521345,3,107,0,345,
95183,108,0,345,834, 95223,108,0,345,834,
951911,1,845,0,348, 952311,1,867,0,348,
95201,-1,3,110,0, 95241,-1,3,110,0,
9521345,3,111,0,345, 9525345,3,111,0,345,
95223,112,0,345,3, 95263,112,0,345,3,
@@ -9567,7 +9571,7 @@ public class yyLSLTokens : YyLexer {
9567105,0,345,3,106, 9571105,0,345,3,106,
95680,345,3,107,0, 95720,345,3,107,0,
9569345,3,108,0,345, 9573345,3,108,0,345,
9570835,11,1,845,0, 9574835,11,1,867,0,
9571348,1,-1,3,97, 9575348,1,-1,3,97,
95720,345,3,98,0, 95760,345,3,98,0,
9573345,3,99,0,345, 9577345,3,99,0,345,
@@ -9578,15 +9582,15 @@ public class yyLSLTokens : YyLexer {
95783,105,0,345,3, 95823,105,0,345,3,
9579106,0,345,3,107, 9583106,0,345,3,107,
95800,345,3,108,0, 95840,345,3,108,0,
9581345,836,11,1,845, 9585345,836,11,1,867,
95820,348,1,-1,3, 95860,348,1,-1,3,
9583108,0,345,837,11, 9587108,0,345,837,11,
95841,845,0,348,1, 95881,867,0,348,1,
9585-1,3,111,0,345, 9589-1,3,111,0,345,
95863,112,0,345,3, 95903,112,0,345,3,
9587113,0,345,3,114, 9591113,0,345,3,114,
95880,345,3,115,0, 95920,345,3,115,0,
9589838,12,1,38653,839, 9593838,12,1,40715,839,
95905,63,3,109,0, 95945,63,3,109,0,
9591345,3,110,0,345, 9595345,3,110,0,345,
95923,111,0,345,3, 95963,111,0,345,3,
@@ -9594,7 +9598,7 @@ public class yyLSLTokens : YyLexer {
95940,345,3,114,0, 95980,345,3,114,0,
9595345,3,115,0,345, 9599345,3,115,0,345,
95963,116,0,840,12, 96003,116,0,840,12,
95971,38688,841,5,63, 96011,40750,841,5,63,
95983,109,0,345,3, 96023,109,0,345,3,
9599110,0,345,3,111, 9603110,0,345,3,111,
96000,345,3,112,0, 96040,345,3,112,0,
@@ -9640,10 +9644,10 @@ public class yyLSLTokens : YyLexer {
96400,345,3,99,0, 96440,345,3,99,0,
9641345,3,100,0,345, 9645345,3,100,0,345,
96423,101,0,842,12, 96463,101,0,842,12,
96431,38735,843,5,63, 96471,40797,843,5,63,
96443,109,0,345,3, 96483,109,0,345,3,
9645110,0,844,12,1, 9649110,0,844,12,1,
964638764,845,5,63,3, 965040826,845,5,63,3,
9647109,0,345,3,110, 9651109,0,345,3,110,
96480,345,3,111,0, 96520,345,3,111,0,
9649345,3,112,0,345, 9653345,3,112,0,345,
@@ -9750,7 +9754,7 @@ public class yyLSLTokens : YyLexer {
97500,345,3,106,0, 97540,345,3,106,0,
9751345,3,107,0,345, 9755345,3,107,0,345,
97523,108,0,345,848, 97563,108,0,345,848,
975311,1,845,0,348, 975711,1,867,0,348,
97541,-1,3,102,0, 97581,-1,3,102,0,
9755345,3,103,0,345, 9759345,3,103,0,345,
97563,104,0,345,3, 97603,104,0,345,3,
@@ -9807,7 +9811,7 @@ public class yyLSLTokens : YyLexer {
9807345,3,106,0,345, 9811345,3,106,0,345,
98083,107,0,345,3, 98123,107,0,345,3,
9809108,0,345,851,11, 9813108,0,345,851,11,
98101,845,0,348,1, 98141,867,0,348,1,
9811-1,3,116,0,345, 9815-1,3,116,0,345,
98123,117,0,345,3, 98163,117,0,345,3,
9813118,0,345,3,119, 9817118,0,345,3,119,
@@ -9853,20 +9857,20 @@ public class yyLSLTokens : YyLexer {
9853105,0,345,3,106, 9857105,0,345,3,106,
98540,345,3,107,0, 98580,345,3,107,0,
9855345,3,108,0,345, 9859345,3,108,0,345,
9856852,11,1,845,0, 9860852,11,1,867,0,
9857348,1,-1,3,106, 9861348,1,-1,3,106,
98580,345,3,107,0, 98620,345,3,107,0,
9859345,3,108,0,345, 9863345,3,108,0,345,
9860853,11,1,845,0, 9864853,11,1,867,0,
9861348,1,-1,3,109, 9865348,1,-1,3,109,
98620,854,12,1,1942, 98660,854,12,1,1964,
9863855,5,63,3,109, 9867855,5,63,3,109,
98640,345,3,110,0, 98680,345,3,110,0,
9865345,3,111,0,856, 9869345,3,111,0,856,
986612,1,1972,857,5, 987012,1,1994,857,5,
986763,3,109,0,345, 987163,3,109,0,345,
98683,110,0,858,12, 98723,110,0,858,12,
98691,2001,859,5,63, 98731,2023,859,5,63,
98703,109,0,345,3, 98743,109,0,345,3,
9871110,0,345,3,111, 9875110,0,345,3,111,
98720,345,3,112,0, 98760,345,3,112,0,
@@ -9912,7 +9916,7 @@ public class yyLSLTokens : YyLexer {
99120,345,3,99,0, 99160,345,3,99,0,
9913345,3,100,0,345, 9917345,3,100,0,345,
99143,101,0,860,12, 99183,101,0,860,12,
99151,2048,861,5,63, 99191,2070,861,5,63,
99163,109,0,345,3, 99203,109,0,345,3,
9917110,0,345,3,111, 9921110,0,345,3,111,
99180,345,3,112,0, 99220,345,3,112,0,
@@ -9923,7 +9927,7 @@ public class yyLSLTokens : YyLexer {
9923345,3,118,0,345, 9927345,3,118,0,345,
99243,119,0,345,3, 99283,119,0,345,3,
9925120,0,345,3,121, 9929120,0,345,3,121,
99260,862,12,1,2088, 99300,862,12,1,2110,
9927863,5,63,3,109, 9931863,5,63,3,109,
99280,345,3,110,0, 99320,345,3,110,0,
9929345,3,111,0,345, 9933345,3,111,0,345,
@@ -10022,14 +10026,14 @@ public class yyLSLTokens : YyLexer {
100223,106,0,345,3, 100263,106,0,345,3,
10023107,0,345,3,108, 10027107,0,345,3,108,
100240,345,866,11,1, 100280,345,866,11,1,
10025845,0,348,1,-1, 10029867,0,348,1,-1,
100263,102,0,345,3, 100303,102,0,345,3,
10027103,0,345,3,104, 10031103,0,345,3,104,
100280,345,3,105,0, 100320,345,3,105,0,
10029345,3,106,0,345, 10033345,3,106,0,345,
100303,107,0,345,3, 100343,107,0,345,3,
10031108,0,345,867,11, 10035108,0,345,867,11,
100321,845,0,348,1, 100361,867,0,348,1,
10033-1,3,111,0,345, 10037-1,3,111,0,345,
100343,112,0,345,3, 100383,112,0,345,3,
10035113,0,345,3,114, 10039113,0,345,3,114,
@@ -10037,7 +10041,7 @@ public class yyLSLTokens : YyLexer {
10037345,3,116,0,345, 10041345,3,116,0,345,
100383,117,0,345,3, 100423,117,0,345,3,
10039118,0,868,12,1, 10043118,0,868,12,1,
100402369,869,5,63,3, 100442391,869,5,63,3,
10041109,0,345,3,110, 10045109,0,345,3,110,
100420,345,3,111,0, 100460,345,3,111,0,
10043345,3,112,0,345, 10047345,3,112,0,345,
@@ -10086,10 +10090,10 @@ public class yyLSLTokens : YyLexer {
100860,345,3,103,0, 100900,345,3,103,0,
10087345,3,104,0,345, 10091345,3,104,0,345,
100883,105,0,870,12, 100923,105,0,870,12,
100891,2420,871,5,63, 100931,2442,871,5,63,
100903,109,0,345,3, 100943,109,0,345,3,
10091110,0,872,12,1, 10095110,0,872,12,1,
100922449,873,5,63,3, 100962471,873,5,63,3,
10093109,0,345,3,110, 10097109,0,345,3,110,
100940,345,3,111,0, 100980,345,3,111,0,
10095345,3,112,0,345, 10099345,3,112,0,345,
@@ -10136,7 +10140,7 @@ public class yyLSLTokens : YyLexer {
101363,100,0,345,3, 101403,100,0,345,3,
10137101,0,345,3,102, 10141101,0,345,3,102,
101380,345,3,103,0, 101420,345,3,103,0,
10139874,12,1,2498,875, 10143874,12,1,2520,875,
101405,63,3,109,0, 101445,63,3,109,0,
10141345,3,110,0,345, 10145345,3,110,0,345,
101423,111,0,345,3, 101463,111,0,345,3,
@@ -10178,14 +10182,14 @@ public class yyLSLTokens : YyLexer {
101783,88,0,345,3, 101823,88,0,345,3,
1017989,0,345,3,90, 1018389,0,345,3,90,
101800,345,3,95,0, 101840,345,3,95,0,
10181876,12,1,2584,877, 10185876,12,1,2606,877,
101825,63,3,109,0, 101865,63,3,109,0,
10183345,3,110,0,345, 10187345,3,110,0,345,
101843,111,0,345,3, 101883,111,0,345,3,
10185112,0,345,3,113, 10189112,0,345,3,113,
101860,345,3,114,0, 101900,345,3,114,0,
10187345,3,115,0,878, 10191345,3,115,0,878,
1018812,1,2618,879,5, 1019212,1,2640,879,5,
1018963,3,109,0,345, 1019363,3,109,0,345,
101903,110,0,345,3, 101943,110,0,345,3,
10191111,0,345,3,112, 10195111,0,345,3,112,
@@ -10193,7 +10197,7 @@ public class yyLSLTokens : YyLexer {
10193345,3,114,0,345, 10197345,3,114,0,345,
101943,115,0,345,3, 101983,115,0,345,3,
10195116,0,880,12,1, 10199116,0,880,12,1,
101962653,881,5,63,3, 102002675,881,5,63,3,
10197109,0,345,3,110, 10201109,0,345,3,110,
101980,345,3,111,0, 102020,345,3,111,0,
10199345,3,112,0,345, 10203345,3,112,0,345,
@@ -10235,13 +10239,13 @@ public class yyLSLTokens : YyLexer {
10235345,3,89,0,345, 10239345,3,89,0,345,
102363,90,0,345,3, 102403,90,0,345,3,
1023795,0,345,3,97, 1024195,0,345,3,97,
102380,882,12,1,2696, 102420,882,12,1,2718,
10239883,5,63,3,109, 10243883,5,63,3,109,
102400,345,3,110,0, 102440,345,3,110,0,
10241345,3,111,0,345, 10245345,3,111,0,345,
102423,112,0,345,3, 102463,112,0,345,3,
10243113,0,345,3,114, 10247113,0,345,3,114,
102440,884,12,1,2729, 102480,884,12,1,2751,
10245885,5,63,3,109, 10249885,5,63,3,109,
102460,345,3,110,0, 102500,345,3,110,0,
10247345,3,111,0,345, 10251345,3,111,0,345,
@@ -10249,7 +10253,7 @@ public class yyLSLTokens : YyLexer {
10249113,0,345,3,114, 10253113,0,345,3,114,
102500,345,3,115,0, 102540,345,3,115,0,
10251345,3,116,0,886, 10255345,3,116,0,886,
1025212,1,2764,887,5, 1025612,1,2786,887,5,
1025363,3,109,0,345, 1025763,3,109,0,345,
102543,110,0,345,3, 102583,110,0,345,3,
10255111,0,345,3,112, 10259111,0,345,3,112,
@@ -10354,7 +10358,7 @@ public class yyLSLTokens : YyLexer {
103540,345,3,106,0, 103580,345,3,106,0,
10355345,3,107,0,345, 10359345,3,107,0,345,
103563,108,0,345,890, 103603,108,0,345,890,
1035711,1,845,0,348, 1036111,1,867,0,348,
103581,-1,3,115,0, 103621,-1,3,115,0,
10359345,3,116,0,345, 10363345,3,116,0,345,
103603,117,0,345,3, 103643,117,0,345,3,
@@ -10401,7 +10405,7 @@ public class yyLSLTokens : YyLexer {
10401105,0,345,3,106, 10405105,0,345,3,106,
104020,345,3,107,0, 104060,345,3,107,0,
10403345,3,108,0,345, 10407345,3,108,0,345,
10404891,11,1,845,0, 10408891,11,1,867,0,
10405348,1,-1,3,98, 10409348,1,-1,3,98,
104060,345,3,99,0, 104100,345,3,99,0,
10407345,3,100,0,345, 10411345,3,100,0,345,
@@ -10412,7 +10416,7 @@ public class yyLSLTokens : YyLexer {
104123,106,0,345,3, 104163,106,0,345,3,
10413107,0,345,3,108, 10417107,0,345,3,108,
104140,345,892,11,1, 104180,345,892,11,1,
10415845,0,348,1,-1, 10419867,0,348,1,-1,
104163,117,0,345,3, 104203,117,0,345,3,
10417118,0,345,3,119, 10421118,0,345,3,119,
104180,345,3,120,0, 104220,345,3,120,0,
@@ -10457,7 +10461,7 @@ public class yyLSLTokens : YyLexer {
10457105,0,345,3,106, 10461105,0,345,3,106,
104580,345,3,107,0, 104620,345,3,107,0,
10459345,3,108,0,345, 10463345,3,108,0,345,
10460893,11,1,845,0, 10464893,11,1,867,0,
10461348,1,-1,3,116, 10465348,1,-1,3,116,
104620,345,3,117,0, 104660,345,3,117,0,
10463345,3,118,0,345, 10467345,3,118,0,345,
@@ -10498,10 +10502,10 @@ public class yyLSLTokens : YyLexer {
104980,345,3,99,0, 105020,345,3,99,0,
10499345,3,100,0,345, 10503345,3,100,0,345,
105003,101,0,894,12, 105043,101,0,894,12,
105011,3231,895,5,63, 105051,3253,895,5,63,
105023,109,0,345,3, 105063,109,0,345,3,
10503110,0,896,12,1, 10507110,0,896,12,1,
105043260,897,5,63,3, 105083282,897,5,63,3,
10505109,0,345,3,110, 10509109,0,345,3,110,
105060,345,3,111,0, 105100,345,3,111,0,
10507345,3,112,0,345, 10511345,3,112,0,345,
@@ -10546,7 +10550,7 @@ public class yyLSLTokens : YyLexer {
105460,345,3,98,0, 105500,345,3,98,0,
10547345,3,99,0,345, 10551345,3,99,0,345,
105483,100,0,898,12, 105523,100,0,898,12,
105491,3306,899,5,63, 105531,3328,899,5,63,
105503,109,0,345,3, 105543,109,0,345,3,
10551110,0,345,3,111, 10555110,0,345,3,111,
105520,345,3,112,0, 105560,345,3,112,0,
@@ -10612,7 +10616,7 @@ public class yyLSLTokens : YyLexer {
106123,105,0,345,3, 106163,105,0,345,3,
10613106,0,345,3,107, 10617106,0,345,3,107,
106140,345,3,108,0, 106180,345,3,108,0,
10615345,902,11,1,845, 10619345,902,11,1,867,
106160,348,1,-1,3, 106200,348,1,-1,3,
10617111,0,345,3,112, 10621111,0,345,3,112,
106180,345,3,113,0, 106220,345,3,113,0,
@@ -10663,14 +10667,14 @@ public class yyLSLTokens : YyLexer {
10663345,3,106,0,345, 10667345,3,106,0,345,
106643,107,0,345,3, 106683,107,0,345,3,
10665108,0,345,903,11, 10669108,0,345,903,11,
106661,845,0,348,1, 106701,867,0,348,1,
10667-1,3,102,0,345, 10671-1,3,102,0,345,
106683,103,0,345,3, 106723,103,0,345,3,
10669104,0,345,3,105, 10673104,0,345,3,105,
106700,345,3,106,0, 106740,345,3,106,0,
10671345,3,107,0,345, 10675345,3,107,0,345,
106723,108,0,345,904, 106763,108,0,345,904,
1067311,1,845,0,348, 1067711,1,867,0,348,
106741,-1,3,97,0, 106781,-1,3,97,0,
10675345,3,98,0,345, 10679345,3,98,0,345,
106763,99,0,345,3, 106803,99,0,345,3,
@@ -10681,13 +10685,13 @@ public class yyLSLTokens : YyLexer {
10681105,0,345,3,106, 10685105,0,345,3,106,
106820,345,3,107,0, 106860,345,3,107,0,
10683345,3,108,0,345, 10687345,3,108,0,345,
10684905,11,1,845,0, 10688905,11,1,867,0,
10685348,1,-1,3,104, 10689348,1,-1,3,104,
106860,345,3,105,0, 106900,345,3,105,0,
10687345,3,106,0,345, 10691345,3,106,0,345,
106883,107,0,345,3, 106923,107,0,345,3,
10689108,0,345,906,11, 10693108,0,345,906,11,
106901,845,0,348,1, 106941,867,0,348,1,
10691-1,3,111,0,345, 10695-1,3,111,0,345,
106923,112,0,345,3, 106963,112,0,345,3,
10693113,0,345,3,114, 10697113,0,345,3,114,
@@ -10737,11 +10741,11 @@ public class yyLSLTokens : YyLexer {
10737105,0,345,3,106, 10741105,0,345,3,106,
107380,345,3,107,0, 107420,345,3,107,0,
10739345,3,108,0,345, 10743345,3,108,0,345,
10740907,11,1,845,0, 10744907,11,1,867,0,
10741348,1,-1,3,106, 10745348,1,-1,3,106,
107420,345,3,107,0, 107460,345,3,107,0,
10743345,3,108,0,345, 10747345,3,108,0,345,
10744908,11,1,845,0, 10748908,11,1,867,0,
10745348,1,-1,3,119, 10749348,1,-1,3,119,
107460,345,3,120,0, 107500,345,3,120,0,
10747345,3,121,0,345, 10751345,3,121,0,345,
@@ -10785,7 +10789,7 @@ public class yyLSLTokens : YyLexer {
10785105,0,345,3,106, 10789105,0,345,3,106,
107860,345,3,107,0, 107900,345,3,107,0,
10787345,3,108,0,345, 10791345,3,108,0,345,
10788909,11,1,845,0, 10792909,11,1,867,0,
10789348,1,-1,3,112, 10793348,1,-1,3,112,
107900,345,3,113,0, 107940,345,3,113,0,
10791345,3,114,0,345, 10795345,3,114,0,345,
@@ -10835,20 +10839,20 @@ public class yyLSLTokens : YyLexer {
10835345,3,106,0,345, 10839345,3,106,0,345,
108363,107,0,345,3, 108403,107,0,345,3,
10837108,0,345,910,11, 10841108,0,345,910,11,
108381,845,0,348,1, 108421,867,0,348,1,
10839-1,3,110,0,911, 10843-1,3,110,0,911,
1084012,1,4103,912,5, 1084412,1,4125,912,5,
1084163,3,109,0,345, 1084563,3,109,0,345,
108423,110,0,345,3, 108463,110,0,345,3,
10843111,0,913,12,1, 10847111,0,913,12,1,
108444133,914,5,63,3, 108484155,914,5,63,3,
10845109,0,345,3,110, 10849109,0,345,3,110,
108460,345,3,111,0, 108500,345,3,111,0,
10847345,3,112,0,345, 10851345,3,112,0,345,
108483,113,0,345,3, 108523,113,0,345,3,
10849114,0,345,3,115, 10853114,0,345,3,115,
108500,345,3,116,0, 108540,345,3,116,0,
10851915,12,1,4168,916, 10855915,12,1,4190,916,
108525,63,3,109,0, 108565,63,3,109,0,
10853345,3,110,0,345, 10857345,3,110,0,345,
108543,111,0,345,3, 108583,111,0,345,3,
@@ -10890,7 +10894,7 @@ public class yyLSLTokens : YyLexer {
108903,88,0,345,3, 108943,88,0,345,3,
1089189,0,345,3,90, 1089589,0,345,3,90,
108920,345,3,95,0, 108960,345,3,95,0,
10893917,12,1,4254,918, 10897917,12,1,4276,918,
108945,63,3,109,0, 108985,63,3,109,0,
10895345,3,110,0,345, 10899345,3,110,0,345,
108963,111,0,345,3, 109003,111,0,345,3,
@@ -10933,7 +10937,7 @@ public class yyLSLTokens : YyLexer {
1093389,0,345,3,90, 1093789,0,345,3,90,
109340,345,3,95,0, 109380,345,3,95,0,
10935345,3,97,0,919, 10939345,3,97,0,919,
1093612,1,4297,920,5, 1094012,1,4319,920,5,
1093763,3,109,0,345, 1094163,3,109,0,345,
109383,110,0,345,3, 109423,110,0,345,3,
10939111,0,345,3,112, 10943111,0,345,3,112,
@@ -10941,7 +10945,7 @@ public class yyLSLTokens : YyLexer {
10941345,3,114,0,345, 10945345,3,114,0,345,
109423,115,0,345,3, 109463,115,0,345,3,
10943116,0,921,12,1, 10947116,0,921,12,1,
109444332,922,5,63,3, 109484354,922,5,63,3,
10945109,0,345,3,110, 10949109,0,345,3,110,
109460,345,3,111,0, 109500,345,3,111,0,
10947345,3,112,0,345, 10951345,3,112,0,345,
@@ -10983,16 +10987,16 @@ public class yyLSLTokens : YyLexer {
10983345,3,89,0,345, 10987345,3,89,0,345,
109843,90,0,345,3, 109883,90,0,345,3,
1098595,0,923,12,1, 1098995,0,923,12,1,
109864418,924,5,63,3, 109904440,924,5,63,3,
10987109,0,345,3,110, 10991109,0,345,3,110,
109880,345,3,111,0, 109920,345,3,111,0,
10989345,3,112,0,345, 10993345,3,112,0,345,
109903,113,0,345,3, 109943,113,0,345,3,
10991114,0,925,12,1, 10995114,0,925,12,1,
109924451,926,5,63,3, 109964473,926,5,63,3,
10993109,0,345,3,110, 10997109,0,345,3,110,
109940,345,3,111,0, 109980,345,3,111,0,
10995927,12,1,4481,928, 10999927,12,1,4503,928,
109965,63,3,109,0, 110005,63,3,109,0,
10997345,3,110,0,345, 11001345,3,110,0,345,
109983,111,0,345,3, 110023,111,0,345,3,
@@ -11000,7 +11004,7 @@ public class yyLSLTokens : YyLexer {
110000,345,3,114,0, 110040,345,3,114,0,
11001345,3,115,0,345, 11005345,3,115,0,345,
110023,116,0,929,12, 110063,116,0,929,12,
110031,4516,930,5,63, 110071,4538,930,5,63,
110043,109,0,345,3, 110083,109,0,345,3,
11005110,0,345,3,111, 11009110,0,345,3,111,
110060,345,3,112,0, 110100,345,3,112,0,
@@ -11042,14 +11046,14 @@ public class yyLSLTokens : YyLexer {
110420,345,3,89,0, 110460,345,3,89,0,
11043345,3,90,0,345, 11047345,3,90,0,345,
110443,95,0,931,12, 110483,95,0,931,12,
110451,4602,932,5,63, 110491,4624,932,5,63,
110463,109,0,345,3, 110503,109,0,345,3,
11047110,0,345,3,111, 11051110,0,345,3,111,
110480,345,3,112,0, 110520,345,3,112,0,
11049345,3,113,0,345, 11053345,3,113,0,345,
110503,114,0,345,3, 110543,114,0,345,3,
11051115,0,345,3,116, 11055115,0,345,3,116,
110520,933,12,1,4637, 110560,933,12,1,4659,
11053934,5,63,3,109, 11057934,5,63,3,109,
110540,345,3,110,0, 110580,345,3,110,0,
11055345,3,111,0,345, 11059345,3,111,0,345,
@@ -11092,13 +11096,13 @@ public class yyLSLTokens : YyLexer {
110923,89,0,345,3, 110963,89,0,345,3,
1109390,0,345,3,95, 1109790,0,345,3,95,
110940,345,3,97,0, 110980,345,3,97,0,
11095935,12,1,4680,936, 11099935,12,1,4702,936,
110965,63,3,109,0, 111005,63,3,109,0,
11097345,3,110,0,345, 11101345,3,110,0,345,
110983,111,0,345,3, 111023,111,0,345,3,
11099112,0,345,3,113, 11103112,0,345,3,113,
111000,345,3,114,0, 111040,345,3,114,0,
11101937,12,1,4713,938, 11105937,12,1,4735,938,
111025,63,3,109,0, 111065,63,3,109,0,
11103345,3,110,0,345, 11107345,3,110,0,345,
111043,111,0,345,3, 111083,111,0,345,3,
@@ -11146,7 +11150,7 @@ public class yyLSLTokens : YyLexer {
111460,345,3,101,0, 111500,345,3,101,0,
11147345,3,102,0,345, 11151345,3,102,0,345,
111483,103,0,939,12, 111523,103,0,939,12,
111491,4762,940,5,63, 111531,4784,940,5,63,
111503,109,0,345,3, 111543,109,0,345,3,
11151110,0,345,3,111, 11155110,0,345,3,111,
111520,345,3,112,0, 111560,345,3,112,0,
@@ -11192,14 +11196,14 @@ public class yyLSLTokens : YyLexer {
111920,345,3,99,0, 111960,345,3,99,0,
11193345,3,100,0,345, 11197345,3,100,0,345,
111943,101,0,941,12, 111983,101,0,941,12,
111951,4809,942,5,63, 111991,4831,942,5,63,
111963,109,0,345,3, 112003,109,0,345,3,
11197110,0,345,3,111, 11201110,0,345,3,111,
111980,345,3,112,0, 112020,345,3,112,0,
11199345,3,113,0,345, 11203345,3,113,0,345,
112003,114,0,345,3, 112043,114,0,345,3,
11201115,0,345,3,116, 11205115,0,345,3,116,
112020,943,12,1,4844, 112060,943,12,1,4866,
11203944,5,63,3,109, 11207944,5,63,3,109,
112040,345,3,110,0, 112080,345,3,110,0,
11205345,3,111,0,345, 11209345,3,111,0,345,
@@ -11306,7 +11310,7 @@ public class yyLSLTokens : YyLexer {
113063,105,0,345,3, 113103,105,0,345,3,
11307106,0,345,3,107, 11311106,0,345,3,107,
113080,345,3,108,0, 113120,345,3,108,0,
11309345,947,11,1,845, 11313345,947,11,1,867,
113100,348,1,-1,3, 113140,348,1,-1,3,
11311102,0,345,3,103, 11315102,0,345,3,103,
113120,345,3,104,0, 113160,345,3,104,0,
@@ -11314,12 +11318,12 @@ public class yyLSLTokens : YyLexer {
113143,106,0,345,3, 113183,106,0,345,3,
11315107,0,345,3,108, 11319107,0,345,3,108,
113160,345,948,11,1, 113200,345,948,11,1,
11317845,0,348,1,-1, 11321867,0,348,1,-1,
113183,104,0,345,3, 113223,104,0,345,3,
11319105,0,345,3,106, 11323105,0,345,3,106,
113200,345,3,107,0, 113240,345,3,107,0,
11321345,3,108,0,345, 11325345,3,108,0,345,
11322949,11,1,845,0, 11326949,11,1,867,0,
11323348,1,-1,3,115, 11327348,1,-1,3,115,
113240,345,3,116,0, 113280,345,3,116,0,
11325345,3,117,0,345, 11329345,3,117,0,345,
@@ -11366,7 +11370,7 @@ public class yyLSLTokens : YyLexer {
113663,105,0,345,3, 113703,105,0,345,3,
11367106,0,345,3,107, 11371106,0,345,3,107,
113680,345,3,108,0, 113720,345,3,108,0,
11369345,950,11,1,845, 11373345,950,11,1,867,
113700,348,1,-1,3, 113740,348,1,-1,3,
1137198,0,345,3,99, 1137598,0,345,3,99,
113720,345,3,100,0, 113760,345,3,100,0,
@@ -11377,7 +11381,7 @@ public class yyLSLTokens : YyLexer {
11377345,3,106,0,345, 11381345,3,106,0,345,
113783,107,0,345,3, 113823,107,0,345,3,
11379108,0,345,951,11, 11383108,0,345,951,11,
113801,845,0,348,1, 113841,867,0,348,1,
11381-1,3,117,0,345, 11385-1,3,117,0,345,
113823,118,0,345,3, 113863,118,0,345,3,
11383119,0,345,3,120, 11387119,0,345,3,120,
@@ -11422,7 +11426,7 @@ public class yyLSLTokens : YyLexer {
114223,105,0,345,3, 114263,105,0,345,3,
11423106,0,345,3,107, 11427106,0,345,3,107,
114240,345,3,108,0, 114280,345,3,108,0,
11425345,952,11,1,845, 11429345,952,11,1,867,
114260,348,1,-1,3, 114300,348,1,-1,3,
1142797,0,345,3,98, 1143197,0,345,3,98,
114280,345,3,99,0, 114320,345,3,99,0,
@@ -11434,7 +11438,7 @@ public class yyLSLTokens : YyLexer {
114343,106,0,345,3, 114383,106,0,345,3,
11435107,0,345,3,108, 11439107,0,345,3,108,
114360,345,953,11,1, 114400,345,953,11,1,
11437845,0,348,1,-1, 11441867,0,348,1,-1,
114383,117,0,345,3, 114423,117,0,345,3,
11439118,0,345,3,119, 11443118,0,345,3,119,
114400,345,3,120,0, 114440,345,3,120,0,
@@ -11479,7 +11483,7 @@ public class yyLSLTokens : YyLexer {
11479105,0,345,3,106, 11483105,0,345,3,106,
114800,345,3,107,0, 114840,345,3,107,0,
11481345,3,108,0,345, 11485345,3,108,0,345,
11482954,11,1,845,0, 11486954,11,1,867,0,
11483348,1,-1,3,112, 11487348,1,-1,3,112,
114840,345,3,113,0, 114880,345,3,113,0,
11485345,3,114,0,345, 11489345,3,114,0,345,
@@ -11529,10 +11533,10 @@ public class yyLSLTokens : YyLexer {
11529345,3,106,0,345, 11533345,3,106,0,345,
115303,107,0,345,3, 115343,107,0,345,3,
11531108,0,345,955,11, 11535108,0,345,955,11,
115321,845,0,348,1, 115361,867,0,348,1,
11533-1,3,115,0,345, 11537-1,3,115,0,345,
115343,116,0,956,12, 115383,116,0,956,12,
115351,5653,957,5,63, 115391,5675,957,5,63,
115363,109,0,345,3, 115403,109,0,345,3,
11537110,0,345,3,111, 11541110,0,345,3,111,
115380,345,3,112,0, 115420,345,3,112,0,
@@ -11575,13 +11579,13 @@ public class yyLSLTokens : YyLexer {
11575345,3,90,0,345, 11579345,3,90,0,345,
115763,95,0,345,3, 115803,95,0,345,3,
1157797,0,958,12,1, 1158197,0,958,12,1,
115785696,959,5,63,3, 115825718,959,5,63,3,
11579109,0,345,3,110, 11583109,0,345,3,110,
115800,345,3,111,0, 115840,345,3,111,0,
11581345,3,112,0,345, 11585345,3,112,0,345,
115823,113,0,345,3, 115863,113,0,345,3,
11583114,0,960,12,1, 11587114,0,960,12,1,
115845729,961,5,63,3, 115885751,961,5,63,3,
11585109,0,345,3,110, 11589109,0,345,3,110,
115860,345,3,111,0, 115900,345,3,111,0,
11587345,3,112,0,345, 11591345,3,112,0,345,
@@ -11628,7 +11632,7 @@ public class yyLSLTokens : YyLexer {
116283,100,0,345,3, 116323,100,0,345,3,
11629101,0,345,3,102, 11633101,0,345,3,102,
116300,345,3,103,0, 116340,345,3,103,0,
11631962,12,1,5778,963, 11635962,12,1,5800,963,
116325,63,3,109,0, 116365,63,3,109,0,
11633345,3,110,0,345, 11637345,3,110,0,345,
116343,111,0,345,3, 116383,111,0,345,3,
@@ -11674,7 +11678,7 @@ public class yyLSLTokens : YyLexer {
116743,98,0,345,3, 116783,98,0,345,3,
1167599,0,345,3,100, 1167999,0,345,3,100,
116760,345,3,101,0, 116800,345,3,101,0,
11677964,12,1,5825,965, 11681964,12,1,5847,965,
116785,63,3,109,0, 116825,63,3,109,0,
11679345,3,110,0,345, 11683345,3,110,0,345,
116803,111,0,345,3, 116843,111,0,345,3,
@@ -11682,7 +11686,7 @@ public class yyLSLTokens : YyLexer {
116820,345,3,114,0, 116860,345,3,114,0,
11683345,3,115,0,345, 11687345,3,115,0,345,
116843,116,0,966,12, 116883,116,0,966,12,
116851,5860,967,5,63, 116891,5882,967,5,63,
116863,109,0,345,3, 116903,109,0,345,3,
11687110,0,345,3,111, 11691110,0,345,3,111,
116880,345,3,112,0, 116920,345,3,112,0,
@@ -11787,20 +11791,20 @@ public class yyLSLTokens : YyLexer {
11787105,0,345,3,106, 11791105,0,345,3,106,
117880,345,3,107,0, 117920,345,3,107,0,
11789345,3,108,0,345, 11793345,3,108,0,345,
11790970,11,1,845,0, 11794970,11,1,867,0,
11791348,1,-1,3,102, 11795348,1,-1,3,102,
117920,345,3,103,0, 117960,345,3,103,0,
11793345,3,104,0,345, 11797345,3,104,0,345,
117943,105,0,345,3, 117983,105,0,345,3,
11795106,0,345,3,107, 11799106,0,345,3,107,
117960,345,3,108,0, 118000,345,3,108,0,
11797345,971,11,1,845, 11801345,971,11,1,867,
117980,348,1,-1,3, 118020,348,1,-1,3,
11799104,0,345,3,105, 11803104,0,345,3,105,
118000,345,3,106,0, 118040,345,3,106,0,
11801345,3,107,0,345, 11805345,3,107,0,345,
118023,108,0,345,972, 118063,108,0,345,972,
1180311,1,845,0,348, 1180711,1,867,0,348,
118041,-1,3,115,0, 118081,-1,3,115,0,
11805345,3,116,0,345, 11809345,3,116,0,345,
118063,117,0,345,3, 118103,117,0,345,3,
@@ -11847,7 +11851,7 @@ public class yyLSLTokens : YyLexer {
11847105,0,345,3,106, 11851105,0,345,3,106,
118480,345,3,107,0, 118520,345,3,107,0,
11849345,3,108,0,345, 11853345,3,108,0,345,
11850973,11,1,845,0, 11854973,11,1,867,0,
11851348,1,-1,3,98, 11855348,1,-1,3,98,
118520,345,3,99,0, 118560,345,3,99,0,
11853345,3,100,0,345, 11857345,3,100,0,345,
@@ -11858,7 +11862,7 @@ public class yyLSLTokens : YyLexer {
118583,106,0,345,3, 118623,106,0,345,3,
11859107,0,345,3,108, 11863107,0,345,3,108,
118600,345,974,11,1, 118640,345,974,11,1,
11861845,0,348,1,-1, 11865867,0,348,1,-1,
118623,117,0,345,3, 118663,117,0,345,3,
11863118,0,345,3,119, 11867118,0,345,3,119,
118640,345,3,120,0, 118680,345,3,120,0,
@@ -11903,7 +11907,7 @@ public class yyLSLTokens : YyLexer {
11903105,0,345,3,106, 11907105,0,345,3,106,
119040,345,3,107,0, 119080,345,3,107,0,
11905345,3,108,0,345, 11909345,3,108,0,345,
11906975,11,1,845,0, 11910975,11,1,867,0,
11907348,1,-1,3,97, 11911348,1,-1,3,97,
119080,345,3,98,0, 119120,345,3,98,0,
11909345,3,99,0,345, 11913345,3,99,0,345,
@@ -11914,7 +11918,7 @@ public class yyLSLTokens : YyLexer {
119143,105,0,345,3, 119183,105,0,345,3,
11915106,0,345,3,107, 11919106,0,345,3,107,
119160,345,3,108,0, 119200,345,3,108,0,
11917345,976,11,1,845, 11921345,976,11,1,867,
119180,348,1,-1,3, 119220,348,1,-1,3,
11919117,0,345,3,118, 11923117,0,345,3,118,
119200,345,3,119,0, 119240,345,3,119,0,
@@ -11960,7 +11964,7 @@ public class yyLSLTokens : YyLexer {
119600,345,3,106,0, 119640,345,3,106,0,
11961345,3,107,0,345, 11965345,3,107,0,345,
119623,108,0,345,977, 119663,108,0,345,977,
1196311,1,845,0,348, 1196711,1,867,0,348,
119641,-1,3,98,0, 119681,-1,3,98,0,
11965345,3,99,0,345, 11969345,3,99,0,345,
119663,100,0,345,3, 119703,100,0,345,3,
@@ -11970,7 +11974,7 @@ public class yyLSLTokens : YyLexer {
119703,105,0,345,3, 119743,105,0,345,3,
11971106,0,345,3,107, 11975106,0,345,3,107,
119720,345,3,108,0, 119760,345,3,108,0,
11973345,978,11,1,845, 11977345,978,11,1,867,
119740,348,1,-1,3, 119780,348,1,-1,3,
1197597,0,345,3,98, 1197997,0,345,3,98,
119760,345,3,99,0, 119800,345,3,99,0,
@@ -11982,7 +11986,7 @@ public class yyLSLTokens : YyLexer {
119823,106,0,345,3, 119863,106,0,345,3,
11983107,0,345,3,108, 11987107,0,345,3,108,
119840,345,979,11,1, 119880,345,979,11,1,
11985845,0,348,1,-1, 11989867,0,348,1,-1,
119863,117,0,345,3, 119903,117,0,345,3,
11987118,0,345,3,119, 11991118,0,345,3,119,
119880,345,3,120,0, 119920,345,3,120,0,
@@ -12017,14 +12021,14 @@ public class yyLSLTokens : YyLexer {
12017345,3,88,0,345, 12021345,3,88,0,345,
120183,89,0,345,3, 120223,89,0,345,3,
1201990,0,345,3,95, 1202390,0,345,3,95,
120200,980,12,1,6739, 120240,980,12,1,6761,
12021981,5,63,3,109, 12025981,5,63,3,109,
120220,345,3,110,0, 120260,345,3,110,0,
12023345,3,111,0,345, 12027345,3,111,0,345,
120243,112,0,345,3, 120283,112,0,345,3,
12025113,0,345,3,114, 12029113,0,345,3,114,
120260,345,3,115,0, 120300,345,3,115,0,
12027982,12,1,6773,983, 12031982,12,1,6795,983,
120285,63,3,109,0, 120325,63,3,109,0,
12029345,3,110,0,345, 12033345,3,110,0,345,
120303,111,0,345,3, 120343,111,0,345,3,
@@ -12070,26 +12074,26 @@ public class yyLSLTokens : YyLexer {
120703,98,0,345,3, 120743,98,0,345,3,
1207199,0,345,3,100, 1207599,0,345,3,100,
120720,345,3,101,0, 120760,345,3,101,0,
12073984,12,1,6820,985, 12077984,12,1,6842,985,
120745,63,3,109,0, 120785,63,3,109,0,
12075345,3,110,0,986, 12079345,3,110,0,986,
1207612,1,6849,987,5, 1208012,1,6871,987,5,
1207763,3,109,0,345, 1208163,3,109,0,345,
120783,110,0,345,3, 120823,110,0,345,3,
12079111,0,345,3,112, 12083111,0,345,3,112,
120800,345,3,113,0, 120840,345,3,113,0,
12081345,3,114,0,345, 12085345,3,114,0,345,
120823,115,0,988,12, 120863,115,0,988,12,
120831,6883,989,5,63, 120871,6905,989,5,63,
120843,109,0,345,3, 120883,109,0,345,3,
12085110,0,345,3,111, 12089110,0,345,3,111,
120860,990,12,1,6913, 120900,990,12,1,6935,
12087991,5,63,3,109, 12091991,5,63,3,109,
120880,345,3,110,0, 120920,345,3,110,0,
12089345,3,111,0,345, 12093345,3,111,0,345,
120903,112,0,345,3, 120943,112,0,345,3,
12091113,0,345,3,114, 12095113,0,345,3,114,
120920,992,12,1,6946, 120960,992,12,1,6968,
12093993,5,63,3,109, 12097993,5,63,3,109,
120940,345,3,110,0, 120980,345,3,110,0,
12095345,3,111,0,345, 12099345,3,111,0,345,
@@ -12195,7 +12199,7 @@ public class yyLSLTokens : YyLexer {
12195345,3,106,0,345, 12199345,3,106,0,345,
121963,107,0,345,3, 122003,107,0,345,3,
12197108,0,345,996,11, 12201108,0,345,996,11,
121981,845,0,348,1, 122021,867,0,348,1,
12199-1,3,112,0,345, 12203-1,3,112,0,345,
122003,113,0,345,3, 122043,113,0,345,3,
12201114,0,345,3,115, 12205114,0,345,3,115,
@@ -12244,7 +12248,7 @@ public class yyLSLTokens : YyLexer {
122443,105,0,345,3, 122483,105,0,345,3,
12245106,0,345,3,107, 12249106,0,345,3,107,
122460,345,3,108,0, 122500,345,3,108,0,
12247345,997,11,1,845, 12251345,997,11,1,867,
122480,348,1,-1,3, 122520,348,1,-1,3,
12249116,0,345,3,117, 12253116,0,345,3,117,
122500,345,3,118,0, 122540,345,3,118,0,
@@ -12291,7 +12295,7 @@ public class yyLSLTokens : YyLexer {
12291345,3,106,0,345, 12295345,3,106,0,345,
122923,107,0,345,3, 122963,107,0,345,3,
12293108,0,345,998,11, 12297108,0,345,998,11,
122941,845,0,348,1, 122981,867,0,348,1,
12295-1,3,111,0,345, 12299-1,3,111,0,345,
122963,112,0,345,3, 123003,112,0,345,3,
12297113,0,345,3,114, 12301113,0,345,3,114,
@@ -12341,14 +12345,14 @@ public class yyLSLTokens : YyLexer {
12341105,0,345,3,106, 12345105,0,345,3,106,
123420,345,3,107,0, 123460,345,3,107,0,
12343345,3,108,0,345, 12347345,3,108,0,345,
12344999,11,1,845,0, 12348999,11,1,867,0,
12345348,1,-1,3,102, 12349348,1,-1,3,102,
123460,345,3,103,0, 123500,345,3,103,0,
12347345,3,104,0,345, 12351345,3,104,0,345,
123483,105,0,345,3, 123523,105,0,345,3,
12349106,0,345,3,107, 12353106,0,345,3,107,
123500,345,3,108,0, 123540,345,3,108,0,
12351345,1000,11,1,845, 12355345,1000,11,1,867,
123520,348,1,-1,3, 123560,348,1,-1,3,
12353116,0,345,3,117, 12357116,0,345,3,117,
123540,345,3,118,0, 123580,345,3,118,0,
@@ -12395,7 +12399,7 @@ public class yyLSLTokens : YyLexer {
12395345,3,106,0,345, 12399345,3,106,0,345,
123963,107,0,345,3, 124003,107,0,345,3,
12397108,0,345,1001,11, 12401108,0,345,1001,11,
123981,845,0,348,1, 124021,867,0,348,1,
12399-1,3,97,0,345, 12403-1,3,97,0,345,
124003,98,0,345,3, 124043,98,0,345,3,
1240199,0,345,3,100, 1240599,0,345,3,100,
@@ -12406,7 +12410,7 @@ public class yyLSLTokens : YyLexer {
124060,345,3,106,0, 124100,345,3,106,0,
12407345,3,107,0,345, 12411345,3,107,0,345,
124083,108,0,345,1002, 124123,108,0,345,1002,
1240911,1,845,0,348, 1241311,1,867,0,348,
124101,-1,3,112,0, 124141,-1,3,112,0,
12411345,3,113,0,345, 12415345,3,113,0,345,
124123,114,0,345,3, 124163,114,0,345,3,
@@ -12456,12 +12460,12 @@ public class yyLSLTokens : YyLexer {
124563,106,0,345,3, 124603,106,0,345,3,
12457107,0,345,3,108, 12461107,0,345,3,108,
124580,345,1003,11,1, 124620,345,1003,11,1,
12459845,0,348,1,-1, 12463867,0,348,1,-1,
124603,111,0,1004,12, 124643,111,0,1004,12,
124611,7704,1005,5,63, 124651,7726,1005,5,63,
124623,109,0,345,3, 124663,109,0,345,3,
12463110,0,1006,12,1, 12467110,0,1006,12,1,
124647733,1007,5,63,3, 124687755,1007,5,63,3,
12465109,0,345,3,110, 12469109,0,345,3,110,
124660,345,3,111,0, 124700,345,3,111,0,
12467345,3,112,0,345, 12471345,3,112,0,345,
@@ -12503,13 +12507,13 @@ public class yyLSLTokens : YyLexer {
12503345,3,89,0,345, 12507345,3,89,0,345,
125043,90,0,345,3, 125083,90,0,345,3,
1250595,0,1008,12,1, 1250995,0,1008,12,1,
125067819,1009,5,63,3, 125107841,1009,5,63,3,
12507109,0,345,3,110, 12511109,0,345,3,110,
125080,345,3,111,0, 125120,345,3,111,0,
12509345,3,112,0,345, 12513345,3,112,0,345,
125103,113,0,345,3, 125143,113,0,345,3,
12511114,0,1010,12,1, 12515114,0,1010,12,1,
125127852,1011,5,63,3, 125167874,1011,5,63,3,
12513109,0,345,3,110, 12517109,0,345,3,110,
125140,345,3,111,0, 125180,345,3,111,0,
12515345,3,112,0,345, 12519345,3,112,0,345,
@@ -12555,7 +12559,7 @@ public class yyLSLTokens : YyLexer {
12555345,3,99,0,345, 12559345,3,99,0,345,
125563,100,0,345,3, 125603,100,0,345,3,
12557101,0,1012,12,1, 12561101,0,1012,12,1,
125587899,1013,5,63,3, 125627921,1013,5,63,3,
12559109,0,345,3,110, 12563109,0,345,3,110,
125600,345,3,111,0, 125640,345,3,111,0,
12561345,3,112,0,345, 12565345,3,112,0,345,
@@ -12567,7 +12571,7 @@ public class yyLSLTokens : YyLexer {
12567119,0,345,3,120, 12571119,0,345,3,120,
125680,345,3,121,0, 125720,345,3,121,0,
12569345,3,122,0,1014, 12573345,3,122,0,1014,
1257012,1,7940,1015,5, 1257412,1,7962,1015,5,
1257163,3,109,0,345, 1257563,3,109,0,345,
125723,110,0,345,3, 125763,110,0,345,3,
12573111,0,345,3,112, 12577111,0,345,3,112,
@@ -12665,14 +12669,14 @@ public class yyLSLTokens : YyLexer {
12665345,3,106,0,345, 12669345,3,106,0,345,
126663,107,0,345,3, 126703,107,0,345,3,
12667108,0,345,1018,11, 12671108,0,345,1018,11,
126681,845,0,348,1, 126721,867,0,348,1,
12669-1,3,102,0,345, 12673-1,3,102,0,345,
126703,103,0,345,3, 126743,103,0,345,3,
12671104,0,345,3,105, 12675104,0,345,3,105,
126720,345,3,106,0, 126760,345,3,106,0,
12673345,3,107,0,345, 12677345,3,107,0,345,
126743,108,0,345,1019, 126783,108,0,345,1019,
1267511,1,845,0,348, 1267911,1,867,0,348,
126761,-1,3,115,0, 126801,-1,3,115,0,
12677345,3,116,0,345, 12681345,3,116,0,345,
126783,117,0,345,3, 126823,117,0,345,3,
@@ -12719,7 +12723,7 @@ public class yyLSLTokens : YyLexer {
12719105,0,345,3,106, 12723105,0,345,3,106,
127200,345,3,107,0, 127240,345,3,107,0,
12721345,3,108,0,345, 12725345,3,108,0,345,
127221020,11,1,845,0, 127261020,11,1,867,0,
12723348,1,-1,3,97, 12727348,1,-1,3,97,
127240,345,3,98,0, 127280,345,3,98,0,
12725345,3,99,0,345, 12729345,3,99,0,345,
@@ -12730,7 +12734,7 @@ public class yyLSLTokens : YyLexer {
127303,105,0,345,3, 127343,105,0,345,3,
12731106,0,345,3,107, 12735106,0,345,3,107,
127320,345,3,108,0, 127360,345,3,108,0,
12733345,1021,11,1,845, 12737345,1021,11,1,867,
127340,348,1,-1,3, 127380,348,1,-1,3,
12735111,0,345,3,112, 12739111,0,345,3,112,
127360,345,3,113,0, 127400,345,3,113,0,
@@ -12773,7 +12777,7 @@ public class yyLSLTokens : YyLexer {
12773345,3,95,0,345, 12777345,3,95,0,345,
127743,97,0,345,3, 127783,97,0,345,3,
1277598,0,1022,12,1, 1277998,0,1022,12,1,
127768348,1023,5,63,3, 127808370,1023,5,63,3,
12777109,0,345,3,110, 12781109,0,345,3,110,
127780,345,3,111,0, 127820,345,3,111,0,
12779345,3,112,0,345, 12783345,3,112,0,345,
@@ -12823,7 +12827,7 @@ public class yyLSLTokens : YyLexer {
12823345,3,104,0,345, 12827345,3,104,0,345,
128243,105,0,345,3, 128283,105,0,345,3,
12825106,0,1024,12,1, 12829106,0,1024,12,1,
128268400,1025,5,63,3, 128308422,1025,5,63,3,
12827109,0,345,3,110, 12831109,0,345,3,110,
128280,345,3,111,0, 128320,345,3,111,0,
12829345,3,112,0,345, 12833345,3,112,0,345,
@@ -12869,7 +12873,7 @@ public class yyLSLTokens : YyLexer {
12869345,3,99,0,345, 12873345,3,99,0,345,
128703,100,0,345,3, 128743,100,0,345,3,
12871101,0,1026,12,1, 12875101,0,1026,12,1,
128728447,1027,5,63,3, 128768469,1027,5,63,3,
12873109,0,345,3,110, 12877109,0,345,3,110,
128740,345,3,111,0, 128780,345,3,111,0,
12875345,3,112,0,345, 12879345,3,112,0,345,
@@ -12913,7 +12917,7 @@ public class yyLSLTokens : YyLexer {
1291395,0,345,3,97, 1291795,0,345,3,97,
129140,345,3,98,0, 129180,345,3,98,0,
12915345,3,99,0,1028, 12919345,3,99,0,1028,
1291612,1,8492,1029,5, 1292012,1,8514,1029,5,
1291763,3,109,0,345, 1292163,3,109,0,345,
129183,110,0,345,3, 129223,110,0,345,3,
12919111,0,345,3,112, 12923111,0,345,3,112,
@@ -12921,7 +12925,7 @@ public class yyLSLTokens : YyLexer {
12921345,3,114,0,345, 12925345,3,114,0,345,
129223,115,0,345,3, 129263,115,0,345,3,
12923116,0,1030,12,1, 12927116,0,1030,12,1,
129248527,1031,5,63,3, 129288549,1031,5,63,3,
12925109,0,345,3,110, 12929109,0,345,3,110,
129260,345,3,111,0, 129300,345,3,111,0,
12927345,3,112,0,345, 12931345,3,112,0,345,
@@ -12963,13 +12967,13 @@ public class yyLSLTokens : YyLexer {
12963345,3,89,0,345, 12967345,3,89,0,345,
129643,90,0,345,3, 129683,90,0,345,3,
1296595,0,1032,12,1, 1296995,0,1032,12,1,
129668613,1033,5,63,3, 129708635,1033,5,63,3,
12967109,0,345,3,110, 12971109,0,345,3,110,
129680,345,3,111,0, 129720,345,3,111,0,
12969345,3,112,0,345, 12973345,3,112,0,345,
129703,113,0,345,3, 129743,113,0,345,3,
12971114,0,1034,12,1, 12975114,0,1034,12,1,
129728646,1035,5,63,3, 129768668,1035,5,63,3,
12973109,0,345,3,110, 12977109,0,345,3,110,
129740,345,3,111,0, 129780,345,3,111,0,
12975345,3,112,0,345, 12979345,3,112,0,345,
@@ -13015,7 +13019,7 @@ public class yyLSLTokens : YyLexer {
13015345,3,99,0,345, 13019345,3,99,0,345,
130163,100,0,345,3, 130203,100,0,345,3,
13017101,0,1036,12,1, 13021101,0,1036,12,1,
130188693,1037,5,63,3, 130228715,1037,5,63,3,
13019109,0,345,3,110, 13023109,0,345,3,110,
130200,345,3,111,0, 130240,345,3,111,0,
13021345,3,112,0,345, 13025345,3,112,0,345,
@@ -13027,7 +13031,7 @@ public class yyLSLTokens : YyLexer {
13027119,0,345,3,120, 13031119,0,345,3,120,
130280,345,3,121,0, 130320,345,3,121,0,
13029345,3,122,0,1038, 13033345,3,122,0,1038,
1303012,1,8734,1039,5, 1303412,1,8756,1039,5,
1303163,3,109,0,345, 1303563,3,109,0,345,
130323,110,0,345,3, 130363,110,0,345,3,
13033111,0,345,3,112, 13037111,0,345,3,112,
@@ -13126,7 +13130,7 @@ public class yyLSLTokens : YyLexer {
131263,105,0,345,3, 131303,105,0,345,3,
13127106,0,345,3,107, 13131106,0,345,3,107,
131280,345,3,108,0, 131320,345,3,108,0,
13129345,1042,11,1,845, 13133345,1042,11,1,867,
131300,348,1,-1,3, 131340,348,1,-1,3,
13131102,0,345,3,103, 13135102,0,345,3,103,
131320,345,3,104,0, 131360,345,3,104,0,
@@ -13134,7 +13138,7 @@ public class yyLSLTokens : YyLexer {
131343,106,0,345,3, 131383,106,0,345,3,
13135107,0,345,3,108, 13139107,0,345,3,108,
131360,345,1043,11,1, 131400,345,1043,11,1,
13137845,0,348,1,-1, 13141867,0,348,1,-1,
131383,115,0,345,3, 131423,115,0,345,3,
13139116,0,345,3,117, 13143116,0,345,3,117,
131400,345,3,118,0, 131440,345,3,118,0,
@@ -13181,7 +13185,7 @@ public class yyLSLTokens : YyLexer {
13181345,3,106,0,345, 13185345,3,106,0,345,
131823,107,0,345,3, 131863,107,0,345,3,
13183108,0,345,1044,11, 13187108,0,345,1044,11,
131841,845,0,348,1, 131881,867,0,348,1,
13185-1,3,97,0,345, 13189-1,3,97,0,345,
131863,98,0,345,3, 131903,98,0,345,3,
1318799,0,345,3,100, 1319199,0,345,3,100,
@@ -13192,7 +13196,7 @@ public class yyLSLTokens : YyLexer {
131920,345,3,106,0, 131960,345,3,106,0,
13193345,3,107,0,345, 13197345,3,107,0,345,
131943,108,0,345,1045, 131983,108,0,345,1045,
1319511,1,845,0,348, 1319911,1,867,0,348,
131961,-1,3,117,0, 132001,-1,3,117,0,
13197345,3,118,0,345, 13201345,3,118,0,345,
131983,119,0,345,3, 132023,119,0,345,3,
@@ -13238,7 +13242,7 @@ public class yyLSLTokens : YyLexer {
132383,106,0,345,3, 132423,106,0,345,3,
13239107,0,345,3,108, 13243107,0,345,3,108,
132400,345,1046,11,1, 132440,345,1046,11,1,
13241845,0,348,1,-1, 13245867,0,348,1,-1,
132423,100,0,345,3, 132463,100,0,345,3,
13243101,0,345,3,102, 13247101,0,345,3,102,
132440,345,3,103,0, 132480,345,3,103,0,
@@ -13246,7 +13250,7 @@ public class yyLSLTokens : YyLexer {
132463,105,0,345,3, 132503,105,0,345,3,
13247106,0,345,3,107, 13251106,0,345,3,107,
132480,345,3,108,0, 132520,345,3,108,0,
13249345,1047,11,1,845, 13253345,1047,11,1,867,
132500,348,1,-1,3, 132540,348,1,-1,3,
13251102,0,345,3,103, 13255102,0,345,3,103,
132520,345,3,104,0, 132560,345,3,104,0,
@@ -13254,10 +13258,10 @@ public class yyLSLTokens : YyLexer {
132543,106,0,345,3, 132583,106,0,345,3,
13255107,0,345,3,108, 13259107,0,345,3,108,
132560,345,1048,11,1, 132600,345,1048,11,1,
13257845,0,348,1,-1, 13261867,0,348,1,-1,
132583,107,0,345,3, 132623,107,0,345,3,
13259108,0,345,1049,11, 13263108,0,345,1049,11,
132601,845,0,348,1, 132641,867,0,348,1,
13261-1,3,99,0,345, 13265-1,3,99,0,345,
132623,100,0,345,3, 132663,100,0,345,3,
13263101,0,345,3,102, 13267101,0,345,3,102,
@@ -13266,22 +13270,22 @@ public class yyLSLTokens : YyLexer {
132663,105,0,345,3, 132703,105,0,345,3,
13267106,0,345,3,107, 13271106,0,345,3,107,
132680,345,3,108,0, 132720,345,3,108,0,
13269345,1050,11,1,845, 13273345,1050,11,1,867,
132700,348,1,-1,3, 132740,348,1,-1,3,
13271112,0,343,3,113, 13275112,0,343,3,113,
132720,343,3,114,0, 132760,343,3,114,0,
132731051,12,1,9507,1052, 132771051,12,1,9529,1052,
132745,63,3,109,0, 132785,63,3,109,0,
13275345,3,110,0,345, 13279345,3,110,0,345,
132763,111,0,1053,12, 132803,111,0,1053,12,
132771,9537,1054,5,63, 132811,9559,1054,5,63,
132783,109,0,345,3, 132823,109,0,345,3,
13279110,0,345,3,111, 13283110,0,345,3,111,
132800,345,3,112,0, 132840,345,3,112,0,
13281345,3,113,0,345, 13285345,3,113,0,345,
132823,114,0,345,3, 132863,114,0,345,3,
13283115,0,345,3,116, 13287115,0,345,3,116,
132840,1055,12,1,9572, 132880,1055,12,1,9594,
132851056,5,63,3,109, 132891056,5,63,3,109,
132860,345,3,110,0, 132900,345,3,110,0,
13287345,3,111,0,345, 13291345,3,111,0,345,
@@ -13324,7 +13328,7 @@ public class yyLSLTokens : YyLexer {
133243,89,0,345,3, 133283,89,0,345,3,
1332590,0,345,3,95, 1332990,0,345,3,95,
133260,345,3,97,0, 133300,345,3,97,0,
133271057,12,1,9615,1058, 133311057,12,1,9637,1058,
133285,63,3,109,0, 133325,63,3,109,0,
13329345,3,110,0,345, 13333345,3,110,0,345,
133303,111,0,345,3, 133343,111,0,345,3,
@@ -13332,7 +13336,7 @@ public class yyLSLTokens : YyLexer {
133320,345,3,114,0, 133360,345,3,114,0,
13333345,3,115,0,345, 13337345,3,115,0,345,
133343,116,0,1059,12, 133383,116,0,1059,12,
133351,9650,1060,5,63, 133391,9672,1060,5,63,
133363,109,0,345,3, 133403,109,0,345,3,
13337110,0,345,3,111, 13341110,0,345,3,111,
133380,345,3,112,0, 133420,345,3,112,0,
@@ -13381,13 +13385,13 @@ public class yyLSLTokens : YyLexer {
13381102,0,345,3,103, 13385102,0,345,3,103,
133820,345,3,104,0, 133860,345,3,104,0,
13383345,3,105,0,1061, 13387345,3,105,0,1061,
1338412,1,9701,1062,5, 1338812,1,9723,1062,5,
1338563,3,109,0,345, 1338963,3,109,0,345,
133863,110,0,345,3, 133903,110,0,345,3,
13387111,0,1063,12,1, 13391111,0,1063,12,1,
133889731,1064,5,63,3, 133929753,1064,5,63,3,
13389109,0,345,3,110, 13393109,0,345,3,110,
133900,1065,12,1,9760, 133940,1065,12,1,9782,
133911066,5,63,3,109, 133951066,5,63,3,109,
133920,345,3,110,0, 133960,345,3,110,0,
13393345,3,111,0,345, 13397345,3,111,0,345,
@@ -13495,7 +13499,7 @@ public class yyLSLTokens : YyLexer {
13495105,0,345,3,106, 13499105,0,345,3,106,
134960,345,3,107,0, 135000,345,3,107,0,
13497345,3,108,0,345, 13501345,3,108,0,345,
134981069,11,1,845,0, 135021069,11,1,867,0,
13499348,1,-1,3,112, 13503348,1,-1,3,112,
135000,345,3,113,0, 135040,345,3,113,0,
13501345,3,114,0,345, 13505345,3,114,0,345,
@@ -13545,11 +13549,11 @@ public class yyLSLTokens : YyLexer {
13545345,3,106,0,345, 13549345,3,106,0,345,
135463,107,0,345,3, 135503,107,0,345,3,
13547108,0,345,1070,11, 13551108,0,345,1070,11,
135481,845,0,348,1, 135521,867,0,348,1,
13549-1,3,106,0,345, 13553-1,3,106,0,345,
135503,107,0,345,3, 135543,107,0,345,3,
13551108,0,345,1071,11, 13555108,0,345,1071,11,
135521,845,0,348,1, 135561,867,0,348,1,
13553-1,3,117,0,345, 13557-1,3,117,0,345,
135543,118,0,345,3, 135583,118,0,345,3,
13555119,0,345,3,120, 13559119,0,345,3,120,
@@ -13594,7 +13598,7 @@ public class yyLSLTokens : YyLexer {
135943,105,0,345,3, 135983,105,0,345,3,
13595106,0,345,3,107, 13599106,0,345,3,107,
135960,345,3,108,0, 136000,345,3,108,0,
13597345,1072,11,1,845, 13601345,1072,11,1,867,
135980,348,1,-1,3, 136020,348,1,-1,3,
1359998,0,345,3,99, 1360398,0,345,3,99,
136000,345,3,100,0, 136040,345,3,100,0,
@@ -13605,7 +13609,7 @@ public class yyLSLTokens : YyLexer {
13605345,3,106,0,345, 13609345,3,106,0,345,
136063,107,0,345,3, 136103,107,0,345,3,
13607108,0,345,1073,11, 13611108,0,345,1073,11,
136081,845,0,348,1, 136121,867,0,348,1,
13609-1,3,117,0,345, 13613-1,3,117,0,345,
136103,118,0,345,3, 136143,118,0,345,3,
13611119,0,345,3,120, 13615119,0,345,3,120,
@@ -13650,16 +13654,16 @@ public class yyLSLTokens : YyLexer {
136503,105,0,345,3, 136543,105,0,345,3,
13651106,0,345,3,107, 13655106,0,345,3,107,
136520,345,3,108,0, 136560,345,3,108,0,
13653345,1074,11,1,845, 13657345,1074,11,1,867,
136540,348,1,-1,3, 136580,348,1,-1,3,
13655112,0,345,3,113, 13659112,0,345,3,113,
136560,345,3,114,0, 136600,345,3,114,0,
13657345,3,115,0,345, 13661345,3,115,0,345,
136583,116,0,345,3, 136623,116,0,345,3,
13659117,0,1075,12,1, 13663117,0,1075,12,1,
1366010383,1076,5,63,3, 1366410405,1076,5,63,3,
13661109,0,345,3,110, 13665109,0,345,3,110,
136620,1077,12,1,10412, 136660,1077,12,1,10434,
136631078,5,63,3,109, 136671078,5,63,3,109,
136640,345,3,110,0, 136680,345,3,110,0,
13665345,3,111,0,345, 13669345,3,111,0,345,
@@ -13701,7 +13705,7 @@ public class yyLSLTokens : YyLexer {
13701345,3,88,0,345, 13705345,3,88,0,345,
137023,89,0,345,3, 137063,89,0,345,3,
1370390,0,345,3,95, 1370790,0,345,3,95,
137040,1079,12,1,10498, 137080,1079,12,1,10520,
137051080,5,63,3,109, 137091080,5,63,3,109,
137060,345,3,110,0, 137100,345,3,110,0,
13707345,3,111,0,345, 13711345,3,111,0,345,
@@ -13709,7 +13713,7 @@ public class yyLSLTokens : YyLexer {
13709113,0,345,3,114, 13713113,0,345,3,114,
137100,345,3,115,0, 137140,345,3,115,0,
13711345,3,116,0,1081, 13715345,3,116,0,1081,
1371212,1,10533,1082,5, 1371612,1,10555,1082,5,
1371363,3,109,0,345, 1371763,3,109,0,345,
137143,110,0,345,3, 137183,110,0,345,3,
13715111,0,345,3,112, 13719111,0,345,3,112,
@@ -13758,9 +13762,9 @@ public class yyLSLTokens : YyLexer {
137583,102,0,345,3, 137623,102,0,345,3,
13759103,0,345,3,104, 13763103,0,345,3,104,
137600,345,3,105,0, 137640,345,3,105,0,
137611083,12,1,10584,1084, 137651083,12,1,10606,1084,
137625,63,3,109,0, 137665,63,3,109,0,
137631085,12,1,10612,1086, 137671085,12,1,10634,1086,
137645,63,3,109,0, 137685,63,3,109,0,
13765345,3,110,0,345, 13769345,3,110,0,345,
137663,111,0,345,3, 137703,111,0,345,3,
@@ -13806,7 +13810,7 @@ public class yyLSLTokens : YyLexer {
138063,98,0,345,3, 138103,98,0,345,3,
1380799,0,345,3,100, 1381199,0,345,3,100,
138080,345,3,101,0, 138120,345,3,101,0,
138091087,12,1,10659,1088, 138131087,12,1,10681,1088,
138105,63,3,109,0, 138145,63,3,109,0,
13811345,3,110,0,345, 13815345,3,110,0,345,
138123,111,0,345,3, 138163,111,0,345,3,
@@ -13848,12 +13852,12 @@ public class yyLSLTokens : YyLexer {
138483,88,0,345,3, 138523,88,0,345,3,
1384989,0,345,3,90, 1385389,0,345,3,90,
138500,345,3,95,0, 138540,345,3,95,0,
138511089,12,1,10745,1090, 138551089,12,1,10767,1090,
138525,63,3,109,0, 138565,63,3,109,0,
13853345,3,110,0,345, 13857345,3,110,0,345,
138543,111,0,345,3, 138583,111,0,345,3,
13855112,0,1091,12,1, 13859112,0,1091,12,1,
1385610776,1092,5,63,3, 1386010798,1092,5,63,3,
13857109,0,345,3,110, 13861109,0,345,3,110,
138580,345,3,111,0, 138620,345,3,111,0,
13859345,3,112,0,345, 13863345,3,112,0,345,
@@ -13899,15 +13903,15 @@ public class yyLSLTokens : YyLexer {
13899345,3,99,0,345, 13903345,3,99,0,345,
139003,100,0,345,3, 139043,100,0,345,3,
13901101,0,1093,12,1, 13905101,0,1093,12,1,
1390210823,1094,5,63,3, 1390610845,1094,5,63,3,
13903109,0,345,3,110, 13907109,0,345,3,110,
139040,345,3,111,0, 139080,345,3,111,0,
13905345,3,112,0,345, 13909345,3,112,0,345,
139063,113,0,345,3, 139103,113,0,345,3,
13907114,0,1095,12,1, 13911114,0,1095,12,1,
1390810856,1096,5,63,3, 1391210878,1096,5,63,3,
13909109,0,1097,12,1, 13913109,0,1097,12,1,
1391010884,1098,5,63,3, 1391410906,1098,5,63,3,
13911109,0,345,3,110, 13915109,0,345,3,110,
139120,345,3,111,0, 139160,345,3,111,0,
13913345,3,112,0,345, 13917345,3,112,0,345,
@@ -13956,20 +13960,20 @@ public class yyLSLTokens : YyLexer {
139560,345,3,103,0, 139600,345,3,103,0,
13957345,3,104,0,345, 13961345,3,104,0,345,
139583,105,0,1099,12, 139623,105,0,1099,12,
139591,10935,1100,5,63, 139631,10957,1100,5,63,
139603,109,0,345,3, 139643,109,0,345,3,
13961110,0,345,3,111, 13965110,0,345,3,111,
139620,345,3,112,0, 139660,345,3,112,0,
13963345,3,113,0,345, 13967345,3,113,0,345,
139643,114,0,345,3, 139683,114,0,345,3,
13965115,0,1101,12,1, 13969115,0,1101,12,1,
1396610969,1102,5,63,3, 1397010991,1102,5,63,3,
13967109,0,345,3,110, 13971109,0,345,3,110,
139680,345,3,111,0, 139720,345,3,111,0,
13969345,3,112,0,345, 13973345,3,112,0,345,
139703,113,0,345,3, 139743,113,0,345,3,
13971114,0,345,3,115, 13975114,0,345,3,115,
139720,1103,12,1,11003, 139760,1103,12,1,11025,
139731104,5,63,3,109, 139771104,5,63,3,109,
139740,345,3,110,0, 139780,345,3,110,0,
13975345,3,111,0,345, 13979345,3,111,0,345,
@@ -14019,20 +14023,20 @@ public class yyLSLTokens : YyLexer {
14019345,3,103,0,345, 14023345,3,103,0,345,
140203,104,0,345,3, 140243,104,0,345,3,
14021105,0,1105,12,1, 14025105,0,1105,12,1,
1402211054,1106,5,63,3, 1402611076,1106,5,63,3,
14023109,0,345,3,110, 14027109,0,345,3,110,
140240,345,3,111,0, 140280,345,3,111,0,
140251107,12,1,11084,1108, 140291107,12,1,11106,1108,
140265,63,3,109,0, 140305,63,3,109,0,
14027345,3,110,0,1109, 14031345,3,110,0,1109,
1402812,1,11113,1110,5, 1403212,1,11135,1110,5,
1402963,3,109,0,345, 1403363,3,109,0,345,
140303,110,0,345,3, 140343,110,0,345,3,
14031111,0,345,3,112, 14035111,0,345,3,112,
140320,345,3,113,0, 140360,345,3,113,0,
14033345,3,114,0,345, 14037345,3,114,0,345,
140343,115,0,1111,12, 140383,115,0,1111,12,
140351,11147,1112,5,63, 140391,11169,1112,5,63,
140363,109,0,345,3, 140403,109,0,345,3,
14037110,0,345,3,111, 14041110,0,345,3,111,
140380,345,3,112,0, 140420,345,3,112,0,
@@ -14141,7 +14145,7 @@ public class yyLSLTokens : YyLexer {
14141345,3,106,0,345, 14145345,3,106,0,345,
141423,107,0,345,3, 141463,107,0,345,3,
14143108,0,345,1115,11, 14147108,0,345,1115,11,
141441,845,0,348,1, 141481,867,0,348,1,
14145-1,3,111,0,345, 14149-1,3,111,0,345,
141463,112,0,345,3, 141503,112,0,345,3,
14147113,0,345,3,114, 14151113,0,345,3,114,
@@ -14191,7 +14195,7 @@ public class yyLSLTokens : YyLexer {
14191105,0,345,3,106, 14195105,0,345,3,106,
141920,345,3,107,0, 141960,345,3,107,0,
14193345,3,108,0,345, 14197345,3,108,0,345,
141941116,11,1,845,0, 141981116,11,1,867,0,
14195348,1,-1,3,112, 14199348,1,-1,3,112,
141960,345,3,113,0, 142000,345,3,113,0,
14197345,3,114,0,345, 14201345,3,114,0,345,
@@ -14241,11 +14245,11 @@ public class yyLSLTokens : YyLexer {
14241345,3,106,0,345, 14245345,3,106,0,345,
142423,107,0,345,3, 142463,107,0,345,3,
14243108,0,345,1117,11, 14247108,0,345,1117,11,
142441,845,0,348,1, 142481,867,0,348,1,
14245-1,3,106,0,345, 14249-1,3,106,0,345,
142463,107,0,345,3, 142503,107,0,345,3,
14247108,0,345,1118,11, 14251108,0,345,1118,11,
142481,845,0,348,1, 142521,867,0,348,1,
14249-1,3,116,0,345, 14253-1,3,116,0,345,
142503,117,0,345,3, 142543,117,0,345,3,
14251118,0,345,3,119, 14255118,0,345,3,119,
@@ -14291,7 +14295,7 @@ public class yyLSLTokens : YyLexer {
14291105,0,345,3,106, 14295105,0,345,3,106,
142920,345,3,107,0, 142960,345,3,107,0,
14293345,3,108,0,345, 14297345,3,108,0,345,
142941119,11,1,845,0, 142981119,11,1,867,0,
14295348,1,-1,3,116, 14299348,1,-1,3,116,
142960,345,3,117,0, 143000,345,3,117,0,
14297345,3,118,0,345, 14301345,3,118,0,345,
@@ -14338,11 +14342,11 @@ public class yyLSLTokens : YyLexer {
143383,106,0,345,3, 143423,106,0,345,3,
14339107,0,345,3,108, 14343107,0,345,3,108,
143400,345,1120,11,1, 143440,345,1120,11,1,
14341845,0,348,1,-1, 14345867,0,348,1,-1,
143423,106,0,345,3, 143463,106,0,345,3,
14343107,0,345,3,108, 14347107,0,345,3,108,
143440,345,1121,11,1, 143480,345,1121,11,1,
14345845,0,348,1,-1, 14349867,0,348,1,-1,
143463,110,0,345,3, 143503,110,0,345,3,
14347111,0,345,3,112, 14351111,0,345,3,112,
143480,345,3,113,0, 143520,345,3,113,0,
@@ -14393,7 +14397,7 @@ public class yyLSLTokens : YyLexer {
14393345,3,106,0,345, 14397345,3,106,0,345,
143943,107,0,345,3, 143983,107,0,345,3,
14395108,0,345,1122,11, 14399108,0,345,1122,11,
143961,845,0,348,1, 144001,867,0,348,1,
14397-1,3,115,0,345, 14401-1,3,115,0,345,
143983,116,0,345,3, 144023,116,0,345,3,
14399117,0,345,3,118, 14403117,0,345,3,118,
@@ -14440,14 +14444,14 @@ public class yyLSLTokens : YyLexer {
144400,345,3,106,0, 144440,345,3,106,0,
14441345,3,107,0,345, 14445345,3,107,0,345,
144423,108,0,345,1123, 144463,108,0,345,1123,
1444311,1,845,0,348, 1444711,1,867,0,348,
144441,-1,3,102,0, 144481,-1,3,102,0,
14445345,3,103,0,345, 14449345,3,103,0,345,
144463,104,0,345,3, 144503,104,0,345,3,
14447105,0,345,3,106, 14451105,0,345,3,106,
144480,345,3,107,0, 144520,345,3,107,0,
14449345,3,108,0,345, 14453345,3,108,0,345,
144501124,11,1,845,0, 144541124,11,1,867,0,
14451348,1,-1,3,113, 14455348,1,-1,3,113,
144520,345,3,114,0, 144560,345,3,114,0,
14453345,3,115,0,345, 14457345,3,115,0,345,
@@ -14496,7 +14500,7 @@ public class yyLSLTokens : YyLexer {
144960,345,3,106,0, 145000,345,3,106,0,
14497345,3,107,0,345, 14501345,3,107,0,345,
144983,108,0,345,1125, 145023,108,0,345,1125,
1449911,1,845,0,348, 1450311,1,867,0,348,
145001,-1,3,97,0, 145041,-1,3,97,0,
14501345,3,98,0,345, 14505345,3,98,0,345,
145023,99,0,345,3, 145063,99,0,345,3,
@@ -14507,14 +14511,14 @@ public class yyLSLTokens : YyLexer {
14507105,0,345,3,106, 14511105,0,345,3,106,
145080,345,3,107,0, 145120,345,3,107,0,
14509345,3,108,0,345, 14513345,3,108,0,345,
145101126,11,1,845,0, 145141126,11,1,867,0,
14511348,1,-1,3,102, 14515348,1,-1,3,102,
145120,345,3,103,0, 145160,345,3,103,0,
14513345,3,104,0,345, 14517345,3,104,0,345,
145143,105,0,345,3, 145183,105,0,345,3,
14515106,0,345,3,107, 14519106,0,345,3,107,
145160,345,3,108,0, 145200,345,3,108,0,
14517345,1127,11,1,845, 14521345,1127,11,1,867,
145180,348,1,-1,3, 145220,348,1,-1,3,
14519110,0,345,3,111, 14523110,0,345,3,111,
145200,345,3,112,0, 145240,345,3,112,0,
@@ -14566,11 +14570,11 @@ public class yyLSLTokens : YyLexer {
145663,106,0,345,3, 145703,106,0,345,3,
14567107,0,345,3,108, 14571107,0,345,3,108,
145680,345,1128,11,1, 145720,345,1128,11,1,
14569845,0,348,1,-1, 14573867,0,348,1,-1,
145703,106,0,345,3, 145743,106,0,345,3,
14571107,0,345,3,108, 14575107,0,345,3,108,
145720,345,1129,11,1, 145760,345,1129,11,1,
14573845,0,348,1,-1, 14577867,0,348,1,-1,
145743,117,0,345,3, 145783,117,0,345,3,
14575118,0,345,3,119, 14579118,0,345,3,119,
145760,345,3,120,0, 145800,345,3,120,0,
@@ -14615,7 +14619,7 @@ public class yyLSLTokens : YyLexer {
14615105,0,345,3,106, 14619105,0,345,3,106,
146160,345,3,107,0, 146200,345,3,107,0,
14617345,3,108,0,345, 14621345,3,108,0,345,
146181130,11,1,845,0, 146221130,11,1,867,0,
14619348,1,-1,3,97, 14623348,1,-1,3,97,
146200,345,3,98,0, 146240,345,3,98,0,
14621345,3,99,0,345, 14625345,3,99,0,345,
@@ -14626,7 +14630,7 @@ public class yyLSLTokens : YyLexer {
146263,105,0,345,3, 146303,105,0,345,3,
14627106,0,345,3,107, 14631106,0,345,3,107,
146280,345,3,108,0, 146320,345,3,108,0,
14629345,1131,11,1,845, 14633345,1131,11,1,867,
146300,348,1,-1,3, 146340,348,1,-1,3,
14631111,0,345,3,112, 14635111,0,345,3,112,
146320,345,3,113,0, 146360,345,3,113,0,
@@ -14677,7 +14681,7 @@ public class yyLSLTokens : YyLexer {
14677345,3,106,0,345, 14681345,3,106,0,345,
146783,107,0,345,3, 146823,107,0,345,3,
14679108,0,345,1132,11, 14683108,0,345,1132,11,
146801,845,0,348,1, 146841,867,0,348,1,
14681-1,3,118,0,345, 14685-1,3,118,0,345,
146823,119,0,345,3, 146863,119,0,345,3,
14683120,0,345,3,121, 14687120,0,345,3,121,
@@ -14716,12 +14720,12 @@ public class yyLSLTokens : YyLexer {
147160,345,3,99,0, 147200,345,3,99,0,
14717345,3,100,0,345, 14721345,3,100,0,345,
147183,101,0,1133,12, 147223,101,0,1133,12,
147191,12674,1134,5,63, 147231,12696,1134,5,63,
147203,109,0,1135,12, 147243,109,0,1135,12,
147211,12702,1136,5,63, 147251,12724,1136,5,63,
147223,109,0,345,3, 147263,109,0,345,3,
14723110,0,345,3,111, 14727110,0,345,3,111,
147240,1137,12,1,12732, 147280,1137,12,1,12754,
147251138,5,63,3,109, 147291138,5,63,3,109,
147260,345,3,110,0, 147300,345,3,110,0,
14727345,3,111,0,345, 14731345,3,111,0,345,
@@ -14729,7 +14733,7 @@ public class yyLSLTokens : YyLexer {
14729113,0,345,3,114, 14733113,0,345,3,114,
147300,345,3,115,0, 147340,345,3,115,0,
14731345,3,116,0,1139, 14735345,3,116,0,1139,
1473212,1,12767,1140,5, 1473612,1,12789,1140,5,
1473363,3,109,0,345, 1473763,3,109,0,345,
147343,110,0,345,3, 147383,110,0,345,3,
14735111,0,345,3,112, 14739111,0,345,3,112,
@@ -14775,7 +14779,7 @@ public class yyLSLTokens : YyLexer {
1477598,0,345,3,99, 1477998,0,345,3,99,
147760,345,3,100,0, 147800,345,3,100,0,
14777345,3,101,0,1141, 14781345,3,101,0,1141,
1477812,1,12814,1142,5, 1478212,1,12836,1142,5,
1477963,3,109,0,345, 1478363,3,109,0,345,
147803,110,0,345,3, 147843,110,0,345,3,
14781111,0,345,3,112, 14785111,0,345,3,112,
@@ -14817,7 +14821,7 @@ public class yyLSLTokens : YyLexer {
1481788,0,345,3,89, 1482188,0,345,3,89,
148180,345,3,90,0, 148220,345,3,90,0,
14819345,3,95,0,1143, 14823345,3,95,0,1143,
1482012,1,12900,1144,5, 1482412,1,12922,1144,5,
1482163,3,109,0,345, 1482563,3,109,0,345,
148223,110,0,345,3, 148263,110,0,345,3,
14823111,0,345,3,112, 14827111,0,345,3,112,
@@ -14862,7 +14866,7 @@ public class yyLSLTokens : YyLexer {
148623,97,0,345,3, 148663,97,0,345,3,
1486398,0,345,3,99, 1486798,0,345,3,99,
148640,345,3,100,0, 148680,345,3,100,0,
148651145,12,1,12946,1146, 148691145,12,1,12968,1146,
148665,63,3,109,0, 148705,63,3,109,0,
14867345,3,110,0,345, 14871345,3,110,0,345,
148683,111,0,345,3, 148723,111,0,345,3,
@@ -14905,7 +14909,7 @@ public class yyLSLTokens : YyLexer {
1490589,0,345,3,90, 1490989,0,345,3,90,
149060,345,3,95,0, 149100,345,3,95,0,
14907345,3,97,0,1147, 14911345,3,97,0,1147,
1490812,1,12989,1148,5, 1491212,1,13011,1148,5,
1490963,3,109,0,345, 1491363,3,109,0,345,
149103,110,0,345,3, 149143,110,0,345,3,
14911111,0,345,3,112, 14915111,0,345,3,112,
@@ -14913,7 +14917,7 @@ public class yyLSLTokens : YyLexer {
14913345,3,114,0,345, 14917345,3,114,0,345,
149143,115,0,345,3, 149183,115,0,345,3,
14915116,0,1149,12,1, 14919116,0,1149,12,1,
1491613024,1150,5,63,3, 1492013046,1150,5,63,3,
14917109,0,345,3,110, 14921109,0,345,3,110,
149180,345,3,111,0, 149220,345,3,111,0,
14919345,3,112,0,345, 14923345,3,112,0,345,
@@ -14955,7 +14959,7 @@ public class yyLSLTokens : YyLexer {
14955345,3,89,0,345, 14959345,3,89,0,345,
149563,90,0,345,3, 149603,90,0,345,3,
1495795,0,345,3,97, 1496195,0,345,3,97,
149580,1151,12,1,13067, 149620,1151,12,1,13089,
149591152,5,63,3,109, 149631152,5,63,3,109,
149600,345,3,110,0, 149640,345,3,110,0,
14961345,3,111,0,345, 14965345,3,111,0,345,
@@ -15025,7 +15029,7 @@ public class yyLSLTokens : YyLexer {
15025345,3,106,0,345, 15029345,3,106,0,345,
150263,107,0,345,3, 150303,107,0,345,3,
15027108,0,345,1155,11, 15031108,0,345,1155,11,
150281,845,0,348,1, 150321,867,0,348,1,
15029-1,3,117,0,345, 15033-1,3,117,0,345,
150303,118,0,345,3, 150343,118,0,345,3,
15031119,0,345,3,120, 15035119,0,345,3,120,
@@ -15070,7 +15074,7 @@ public class yyLSLTokens : YyLexer {
150703,105,0,345,3, 150743,105,0,345,3,
15071106,0,345,3,107, 15075106,0,345,3,107,
150720,345,3,108,0, 150760,345,3,108,0,
15073345,1156,11,1,845, 15077345,1156,11,1,867,
150740,348,1,-1,3, 150780,348,1,-1,3,
1507598,0,345,3,99, 1507998,0,345,3,99,
150760,345,3,100,0, 150800,345,3,100,0,
@@ -15081,7 +15085,7 @@ public class yyLSLTokens : YyLexer {
15081345,3,106,0,345, 15085345,3,106,0,345,
150823,107,0,345,3, 150863,107,0,345,3,
15083108,0,345,1157,11, 15087108,0,345,1157,11,
150841,845,0,348,1, 150881,867,0,348,1,
15085-1,3,101,0,345, 15089-1,3,101,0,345,
150863,102,0,345,3, 150903,102,0,345,3,
15087103,0,345,3,104, 15091103,0,345,3,104,
@@ -15089,7 +15093,7 @@ public class yyLSLTokens : YyLexer {
15089345,3,106,0,345, 15093345,3,106,0,345,
150903,107,0,345,3, 150943,107,0,345,3,
15091108,0,345,1158,11, 15095108,0,345,1158,11,
150921,845,0,348,1, 150961,867,0,348,1,
15093-1,3,97,0,345, 15097-1,3,97,0,345,
150943,98,0,345,3, 150983,98,0,345,3,
1509599,0,345,3,100, 1509999,0,345,3,100,
@@ -15100,14 +15104,14 @@ public class yyLSLTokens : YyLexer {
151000,345,3,106,0, 151040,345,3,106,0,
15101345,3,107,0,345, 15105345,3,107,0,345,
151023,108,0,345,1159, 151063,108,0,345,1159,
1510311,1,845,0,348, 1510711,1,867,0,348,
151041,-1,3,102,0, 151081,-1,3,102,0,
15105345,3,103,0,345, 15109345,3,103,0,345,
151063,104,0,345,3, 151103,104,0,345,3,
15107105,0,345,3,106, 15111105,0,345,3,106,
151080,345,3,107,0, 151120,345,3,107,0,
15109345,3,108,0,345, 15113345,3,108,0,345,
151101160,11,1,845,0, 151141160,11,1,867,0,
15111348,1,-1,3,117, 15115348,1,-1,3,117,
151120,345,3,118,0, 151160,345,3,118,0,
15113345,3,119,0,345, 15117345,3,119,0,345,
@@ -15153,7 +15157,7 @@ public class yyLSLTokens : YyLexer {
15153345,3,106,0,345, 15157345,3,106,0,345,
151543,107,0,345,3, 151583,107,0,345,3,
15155108,0,345,1161,11, 15159108,0,345,1161,11,
151561,845,0,348,1, 151601,867,0,348,1,
15157-1,3,112,0,345, 15161-1,3,112,0,345,
151583,113,0,345,3, 151623,113,0,345,3,
15159114,0,345,3,115, 15163114,0,345,3,115,
@@ -15202,14 +15206,14 @@ public class yyLSLTokens : YyLexer {
152023,105,0,345,3, 152063,105,0,345,3,
15203106,0,345,3,107, 15207106,0,345,3,107,
152040,345,3,108,0, 152080,345,3,108,0,
15205345,1162,11,1,845, 15209345,1162,11,1,867,
152060,348,1,-1,3, 152100,348,1,-1,3,
15207110,0,345,3,111, 15211110,0,345,3,111,
152080,345,3,112,0, 152120,345,3,112,0,
15209345,3,113,0,345, 15213345,3,113,0,345,
152103,114,0,345,3, 152143,114,0,345,3,
15211115,0,345,3,116, 15215115,0,345,3,116,
152120,1163,12,1,13789, 152160,1163,12,1,13811,
152131164,5,63,3,109, 152171164,5,63,3,109,
152140,345,3,110,0, 152180,345,3,110,0,
15215345,3,111,0,345, 15219345,3,111,0,345,
@@ -15218,16 +15222,16 @@ public class yyLSLTokens : YyLexer {
152180,345,3,115,0, 152220,345,3,115,0,
15219345,3,116,0,345, 15223345,3,116,0,345,
152203,117,0,1165,12, 152243,117,0,1165,12,
152211,13825,1166,5,63, 152251,13847,1166,5,63,
152223,109,0,345,3, 152263,109,0,345,3,
15223110,0,345,3,111, 15227110,0,345,3,111,
152240,345,3,112,0, 152280,345,3,112,0,
15225345,3,113,0,345, 15229345,3,113,0,345,
152263,114,0,1167,12, 152303,114,0,1167,12,
152271,13858,1168,5,63, 152311,13880,1168,5,63,
152283,109,0,345,3, 152323,109,0,345,3,
15229110,0,1169,12,1, 15233110,0,1169,12,1,
1523013887,1170,5,63,3, 1523413909,1170,5,63,3,
15231109,0,345,3,110, 15235109,0,345,3,110,
152320,345,3,111,0, 152360,345,3,111,0,
15233345,3,112,0,345, 15237345,3,112,0,345,
@@ -15332,7 +15336,7 @@ public class yyLSLTokens : YyLexer {
153323,106,0,345,3, 153363,106,0,345,3,
15333107,0,345,3,108, 15337107,0,345,3,108,
153340,345,1173,11,1, 153380,345,1173,11,1,
15335845,0,348,1,-1, 15339867,0,348,1,-1,
153363,115,0,345,3, 153403,115,0,345,3,
15337116,0,345,3,117, 15341116,0,345,3,117,
153380,345,3,118,0, 153420,345,3,118,0,
@@ -15379,7 +15383,7 @@ public class yyLSLTokens : YyLexer {
15379345,3,106,0,345, 15383345,3,106,0,345,
153803,107,0,345,3, 153843,107,0,345,3,
15381108,0,345,1174,11, 15385108,0,345,1174,11,
153821,845,0,348,1, 153861,867,0,348,1,
15383-1,3,118,0,345, 15387-1,3,118,0,345,
153843,119,0,345,3, 153883,119,0,345,3,
15385120,0,345,3,121, 15389120,0,345,3,121,
@@ -15424,7 +15428,7 @@ public class yyLSLTokens : YyLexer {
154243,106,0,345,3, 154283,106,0,345,3,
15425107,0,345,3,108, 15429107,0,345,3,108,
154260,345,1175,11,1, 154300,345,1175,11,1,
15427845,0,348,1,-1, 15431867,0,348,1,-1,
154283,117,0,345,3, 154323,117,0,345,3,
15429118,0,345,3,119, 15433118,0,345,3,119,
154300,345,3,120,0, 154340,345,3,120,0,
@@ -15469,30 +15473,30 @@ public class yyLSLTokens : YyLexer {
15469105,0,345,3,106, 15473105,0,345,3,106,
154700,345,3,107,0, 154740,345,3,107,0,
15471345,3,108,0,345, 15475345,3,108,0,345,
154721176,11,1,845,0, 154761176,11,1,867,0,
15473348,1,-1,3,102, 15477348,1,-1,3,102,
154740,345,3,103,0, 154780,345,3,103,0,
15475345,3,104,0,345, 15479345,3,104,0,345,
154763,105,0,345,3, 154803,105,0,345,3,
15477106,0,345,3,107, 15481106,0,345,3,107,
154780,345,3,108,0, 154820,345,3,108,0,
15479345,1177,11,1,845, 15483345,1177,11,1,867,
154800,348,1,-1,3, 154840,348,1,-1,3,
15481115,0,1178,12,1, 15485115,0,1178,12,1,
1548214428,1179,5,63,3, 1548614450,1179,5,63,3,
15483109,0,345,3,110, 15487109,0,345,3,110,
154840,345,3,111,0, 154880,345,3,111,0,
15485345,3,112,0,345, 15489345,3,112,0,345,
154863,113,0,345,3, 154903,113,0,345,3,
15487114,0,345,3,115, 15491114,0,345,3,115,
154880,345,3,116,0, 154920,345,3,116,0,
154891180,12,1,14463,1181, 154931180,12,1,14485,1181,
154905,63,3,109,0, 154945,63,3,109,0,
15491345,3,110,0,345, 15495345,3,110,0,345,
154923,111,0,345,3, 154963,111,0,345,3,
15493112,0,345,3,113, 15497112,0,345,3,113,
154940,345,3,114,0, 154980,345,3,114,0,
154951182,12,1,14496,1183, 154991182,12,1,14518,1183,
154965,63,3,109,0, 155005,63,3,109,0,
15497345,3,110,0,345, 15501345,3,110,0,345,
154983,111,0,345,3, 155023,111,0,345,3,
@@ -15541,10 +15545,10 @@ public class yyLSLTokens : YyLexer {
15541345,3,102,0,345, 15545345,3,102,0,345,
155423,103,0,345,3, 155463,103,0,345,3,
15543104,0,345,3,105, 15547104,0,345,3,105,
155440,1184,12,1,14547, 155480,1184,12,1,14569,
155451185,5,63,3,109, 155491185,5,63,3,109,
155460,345,3,110,0, 155500,345,3,110,0,
155471186,12,1,14576,1187, 155511186,12,1,14598,1187,
155485,63,3,109,0, 155525,63,3,109,0,
15549345,3,110,0,345, 15553345,3,110,0,345,
155503,111,0,345,3, 155543,111,0,345,3,
@@ -15592,7 +15596,7 @@ public class yyLSLTokens : YyLexer {
155920,345,3,101,0, 155960,345,3,101,0,
15593345,3,102,0,345, 15597345,3,102,0,345,
155943,103,0,1188,12, 155983,103,0,1188,12,
155951,14625,1189,5,63, 155991,14647,1189,5,63,
155963,109,0,345,3, 156003,109,0,345,3,
15597110,0,345,3,111, 15601110,0,345,3,111,
155980,345,3,112,0, 156020,345,3,112,0,
@@ -15654,7 +15658,7 @@ public class yyLSLTokens : YyLexer {
156540,345,3,106,0, 156580,345,3,106,0,
15655345,3,107,0,345, 15659345,3,107,0,345,
156563,108,0,345,1192, 156603,108,0,345,1192,
1565711,1,845,0,348, 1566111,1,867,0,348,
156581,-1,3,111,0, 156621,-1,3,111,0,
15659345,3,112,0,345, 15663345,3,112,0,345,
156603,113,0,345,3, 156643,113,0,345,3,
@@ -15704,11 +15708,11 @@ public class yyLSLTokens : YyLexer {
157043,105,0,345,3, 157083,105,0,345,3,
15705106,0,345,3,107, 15709106,0,345,3,107,
157060,345,3,108,0, 157100,345,3,108,0,
15707345,1193,11,1,845, 15711345,1193,11,1,867,
157080,348,1,-1,3, 157120,348,1,-1,3,
15709106,0,345,3,107, 15713106,0,345,3,107,
157100,345,3,108,0, 157140,345,3,108,0,
15711345,1194,11,1,845, 15715345,1194,11,1,867,
157120,348,1,-1,3, 157160,348,1,-1,3,
15713115,0,345,3,116, 15717115,0,345,3,116,
157140,345,3,117,0, 157180,345,3,117,0,
@@ -15747,14 +15751,14 @@ public class yyLSLTokens : YyLexer {
15747345,3,90,0,345, 15751345,3,90,0,345,
157483,95,0,345,3, 157523,95,0,345,3,
1574997,0,1195,12,1, 1575397,0,1195,12,1,
1575014986,1196,5,63,3, 1575415008,1196,5,63,3,
15751109,0,345,3,110, 15755109,0,345,3,110,
157520,345,3,111,0, 157560,345,3,111,0,
15753345,3,112,0,345, 15757345,3,112,0,345,
157543,113,0,345,3, 157583,113,0,345,3,
15755114,0,345,3,115, 15759114,0,345,3,115,
157560,345,3,116,0, 157600,345,3,116,0,
157571197,12,1,15021,1198, 157611197,12,1,15043,1198,
157585,63,3,109,0, 157625,63,3,109,0,
15759345,3,110,0,345, 15763345,3,110,0,345,
157603,111,0,345,3, 157643,111,0,345,3,
@@ -15800,7 +15804,7 @@ public class yyLSLTokens : YyLexer {
158003,98,0,345,3, 158043,98,0,345,3,
1580199,0,345,3,100, 1580599,0,345,3,100,
158020,345,3,101,0, 158060,345,3,101,0,
158031199,12,1,15068,1200, 158071199,12,1,15090,1200,
158045,63,3,109,0, 158085,63,3,109,0,
15805345,3,110,0,345, 15809345,3,110,0,345,
158063,111,0,345,3, 158103,111,0,345,3,
@@ -15842,7 +15846,7 @@ public class yyLSLTokens : YyLexer {
158423,88,0,345,3, 158463,88,0,345,3,
1584389,0,345,3,90, 1584789,0,345,3,90,
158440,345,3,95,0, 158480,345,3,95,0,
158451201,12,1,15154,1202, 158491201,12,1,15176,1202,
158465,63,3,109,0, 158505,63,3,109,0,
15847345,3,110,0,345, 15851345,3,110,0,345,
158483,111,0,345,3, 158523,111,0,345,3,
@@ -15888,10 +15892,10 @@ public class yyLSLTokens : YyLexer {
158883,98,0,345,3, 158923,98,0,345,3,
1588999,0,345,3,100, 1589399,0,345,3,100,
158900,345,3,101,0, 158940,345,3,101,0,
158911203,12,1,15201,1204, 158951203,12,1,15223,1204,
158925,63,3,109,0, 158965,63,3,109,0,
15893345,3,110,0,1205, 15897345,3,110,0,1205,
1589412,1,15230,1206,5, 1589812,1,15252,1206,5,
1589563,3,109,0,345, 1589963,3,109,0,345,
158963,110,0,345,3, 159003,110,0,345,3,
15897111,0,345,3,112, 15901111,0,345,3,112,
@@ -15899,13 +15903,13 @@ public class yyLSLTokens : YyLexer {
15899345,3,114,0,345, 15903345,3,114,0,345,
159003,115,0,345,3, 159043,115,0,345,3,
15901116,0,1207,12,1, 15905116,0,1207,12,1,
1590215265,1208,5,63,3, 1590615287,1208,5,63,3,
15903109,0,345,3,110, 15907109,0,345,3,110,
159040,345,3,111,0, 159080,345,3,111,0,
15905345,3,112,0,345, 15909345,3,112,0,345,
159063,113,0,345,3, 159103,113,0,345,3,
15907114,0,1209,12,1, 15911114,0,1209,12,1,
1590815298,1210,5,63,3, 1591215320,1210,5,63,3,
15909109,0,345,3,110, 15913109,0,345,3,110,
159100,345,3,111,0, 159140,345,3,111,0,
15911345,3,112,0,345, 15915345,3,112,0,345,
@@ -15916,7 +15920,7 @@ public class yyLSLTokens : YyLexer {
159163,118,0,345,3, 159203,118,0,345,3,
15917119,0,345,3,120, 15921119,0,345,3,120,
159180,345,3,121,0, 159220,345,3,121,0,
159191211,12,1,15338,1212, 159231211,12,1,15360,1212,
159205,63,3,109,0, 159245,63,3,109,0,
15921345,3,110,0,345, 15925345,3,110,0,345,
159223,111,0,345,3, 159263,111,0,345,3,
@@ -16017,7 +16021,7 @@ public class yyLSLTokens : YyLexer {
16017345,3,106,0,345, 16021345,3,106,0,345,
160183,107,0,345,3, 160223,107,0,345,3,
16019108,0,345,1215,11, 16023108,0,345,1215,11,
160201,845,0,348,1, 160241,867,0,348,1,
16021-1,3,115,0,345, 16025-1,3,115,0,345,
160223,116,0,345,3, 160263,116,0,345,3,
16023117,0,345,3,118, 16027117,0,345,3,118,
@@ -16064,7 +16068,7 @@ public class yyLSLTokens : YyLexer {
160640,345,3,106,0, 160680,345,3,106,0,
16065345,3,107,0,345, 16069345,3,107,0,345,
160663,108,0,345,1216, 160703,108,0,345,1216,
1606711,1,845,0,348, 1607111,1,867,0,348,
160681,-1,3,117,0, 160721,-1,3,117,0,
16069345,3,118,0,345, 16073345,3,118,0,345,
160703,119,0,345,3, 160743,119,0,345,3,
@@ -16110,7 +16114,7 @@ public class yyLSLTokens : YyLexer {
161103,106,0,345,3, 161143,106,0,345,3,
16111107,0,345,3,108, 16115107,0,345,3,108,
161120,345,1217,11,1, 161160,345,1217,11,1,
16113845,0,348,1,-1, 16117867,0,348,1,-1,
161143,111,0,345,3, 161183,111,0,345,3,
16115112,0,345,3,113, 16119112,0,345,3,113,
161160,345,3,114,0, 161200,345,3,114,0,
@@ -16119,7 +16123,7 @@ public class yyLSLTokens : YyLexer {
16119117,0,345,3,118, 16123117,0,345,3,118,
161200,345,3,119,0, 161240,345,3,119,0,
16121345,3,120,0,1218, 16125345,3,120,0,1218,
1612212,1,15720,1219,5, 1612612,1,15742,1219,5,
1612363,3,109,0,345, 1612763,3,109,0,345,
161243,110,0,345,3, 161283,110,0,345,3,
16125111,0,345,3,112, 16129111,0,345,3,112,
@@ -16168,7 +16172,7 @@ public class yyLSLTokens : YyLexer {
161683,102,0,345,3, 161723,102,0,345,3,
16169103,0,345,3,104, 16173103,0,345,3,104,
161700,345,3,105,0, 161740,345,3,105,0,
161711220,12,1,15771,1221, 161751220,12,1,15793,1221,
161725,63,3,109,0, 161765,63,3,109,0,
16173345,3,110,0,345, 16177345,3,110,0,345,
161743,111,0,345,3, 161783,111,0,345,3,
@@ -16176,7 +16180,7 @@ public class yyLSLTokens : YyLexer {
161760,345,3,114,0, 161800,345,3,114,0,
16177345,3,115,0,345, 16181345,3,115,0,345,
161783,116,0,1222,12, 161823,116,0,1222,12,
161791,15806,1223,5,63, 161831,15828,1223,5,63,
161803,109,0,345,3, 161843,109,0,345,3,
16181110,0,345,3,111, 16185110,0,345,3,111,
161820,345,3,112,0, 161860,345,3,112,0,
@@ -16280,11 +16284,11 @@ public class yyLSLTokens : YyLexer {
162800,345,3,106,0, 162840,345,3,106,0,
16281345,3,107,0,345, 16285345,3,107,0,345,
162823,108,0,345,1226, 162863,108,0,345,1226,
1628311,1,845,0,348, 1628711,1,867,0,348,
162841,-1,3,106,0, 162881,-1,3,106,0,
16285345,3,107,0,345, 16289345,3,107,0,345,
162863,108,0,345,1227, 162903,108,0,345,1227,
1628711,1,845,0,348, 1629111,1,867,0,348,
162881,-1,3,121,0, 162921,-1,3,121,0,
16289345,3,122,0,345, 16293345,3,122,0,345,
162903,48,0,345,3, 162943,48,0,345,3,
@@ -16326,7 +16330,7 @@ public class yyLSLTokens : YyLexer {
163263,105,0,345,3, 163303,105,0,345,3,
16327106,0,345,3,107, 16331106,0,345,3,107,
163280,345,3,108,0, 163320,345,3,108,0,
16329345,1228,11,1,845, 16333345,1228,11,1,867,
163300,348,1,-1,3, 163340,348,1,-1,3,
16331102,0,345,3,103, 16335102,0,345,3,103,
163320,345,3,104,0, 163360,345,3,104,0,
@@ -16334,7 +16338,7 @@ public class yyLSLTokens : YyLexer {
163343,106,0,345,3, 163383,106,0,345,3,
16335107,0,345,3,108, 16339107,0,345,3,108,
163360,345,1229,11,1, 163400,345,1229,11,1,
16337845,0,348,1,-1, 16341867,0,348,1,-1,
163383,97,0,345,3, 163423,97,0,345,3,
1633998,0,345,3,99, 1634398,0,345,3,99,
163400,345,3,100,0, 163440,345,3,100,0,
@@ -16354,7 +16358,7 @@ public class yyLSLTokens : YyLexer {
163543,105,0,345,3, 163583,105,0,345,3,
16355106,0,345,3,107, 16359106,0,345,3,107,
163560,345,3,108,0, 163600,345,3,108,0,
16357345,1232,11,1,845, 16361345,1232,11,1,867,
163580,348,1,-1,3, 163620,348,1,-1,3,
16359117,0,345,3,118, 16363117,0,345,3,118,
163600,345,3,119,0, 163640,345,3,119,0,
@@ -16400,7 +16404,7 @@ public class yyLSLTokens : YyLexer {
164000,345,3,106,0, 164040,345,3,106,0,
16401345,3,107,0,345, 16405345,3,107,0,345,
164023,108,0,345,1233, 164063,108,0,345,1233,
1640311,1,845,0,348, 1640711,1,867,0,348,
164041,-1,3,98,0, 164081,-1,3,98,0,
16405345,3,99,0,345, 16409345,3,99,0,345,
164063,100,0,345,3, 164103,100,0,345,3,
@@ -16410,7 +16414,7 @@ public class yyLSLTokens : YyLexer {
164103,105,0,345,3, 164143,105,0,345,3,
16411106,0,345,3,107, 16415106,0,345,3,107,
164120,345,3,108,0, 164160,345,3,108,0,
16413345,1234,11,1,845, 16417345,1234,11,1,867,
164140,348,1,-1,3, 164180,348,1,-1,3,
16415117,0,345,3,118, 16419117,0,345,3,118,
164160,345,3,119,0, 164200,345,3,119,0,
@@ -16450,26 +16454,26 @@ public class yyLSLTokens : YyLexer {
164503,98,0,345,3, 164543,98,0,345,3,
1645199,0,345,3,100, 1645599,0,345,3,100,
164520,345,3,101,0, 164560,345,3,101,0,
164531235,12,1,16515,1236, 164571235,12,1,16537,1236,
164545,63,3,109,0, 164585,63,3,109,0,
16455345,3,110,0,1237, 16459345,3,110,0,1237,
1645612,1,16544,1238,5, 1646012,1,16566,1238,5,
1645763,3,109,0,345, 1646163,3,109,0,345,
164583,110,0,345,3, 164623,110,0,345,3,
16459111,0,345,3,112, 16463111,0,345,3,112,
164600,345,3,113,0, 164640,345,3,113,0,
16461345,3,114,0,345, 16465345,3,114,0,345,
164623,115,0,1239,12, 164663,115,0,1239,12,
164631,16578,1240,5,63, 164671,16600,1240,5,63,
164643,109,0,345,3, 164683,109,0,345,3,
16465110,0,345,3,111, 16469110,0,345,3,111,
164660,1241,12,1,16608, 164700,1241,12,1,16630,
164671242,5,63,3,109, 164711242,5,63,3,109,
164680,345,3,110,0, 164720,345,3,110,0,
16469345,3,111,0,345, 16473345,3,111,0,345,
164703,112,0,345,3, 164743,112,0,345,3,
16471113,0,345,3,114, 16475113,0,345,3,114,
164720,1243,12,1,16641, 164760,1243,12,1,16663,
164731244,5,63,3,109, 164771244,5,63,3,109,
164740,345,3,110,0, 164780,345,3,110,0,
16475345,3,111,0,345, 16479345,3,111,0,345,
@@ -16574,7 +16578,7 @@ public class yyLSLTokens : YyLexer {
165743,106,0,345,3, 165783,106,0,345,3,
16575107,0,345,3,108, 16579107,0,345,3,108,
165760,345,1247,11,1, 165800,345,1247,11,1,
16577845,0,348,1,-1, 16581867,0,348,1,-1,
165783,112,0,345,3, 165823,112,0,345,3,
16579113,0,345,3,114, 16583113,0,345,3,114,
165800,345,3,115,0, 165840,345,3,115,0,
@@ -16623,7 +16627,7 @@ public class yyLSLTokens : YyLexer {
16623105,0,345,3,106, 16627105,0,345,3,106,
166240,345,3,107,0, 166280,345,3,107,0,
16625345,3,108,0,345, 16629345,3,108,0,345,
166261248,11,1,845,0, 166301248,11,1,867,0,
16627348,1,-1,3,116, 16631348,1,-1,3,116,
166280,345,3,117,0, 166320,345,3,117,0,
16629345,3,118,0,345, 16633345,3,118,0,345,
@@ -16670,7 +16674,7 @@ public class yyLSLTokens : YyLexer {
166703,106,0,345,3, 166743,106,0,345,3,
16671107,0,345,3,108, 16675107,0,345,3,108,
166720,345,1249,11,1, 166760,345,1249,11,1,
16673845,0,348,1,-1, 16677867,0,348,1,-1,
166743,111,0,345,3, 166783,111,0,345,3,
16675112,0,345,3,113, 16679112,0,345,3,113,
166760,345,3,114,0, 166800,345,3,114,0,
@@ -16720,20 +16724,20 @@ public class yyLSLTokens : YyLexer {
167200,345,3,106,0, 167240,345,3,106,0,
16721345,3,107,0,345, 16725345,3,107,0,345,
167223,108,0,345,1250, 167263,108,0,345,1250,
1672311,1,845,0,348, 1672711,1,867,0,348,
167241,-1,3,102,0, 167281,-1,3,102,0,
16725345,3,103,0,345, 16729345,3,103,0,345,
167263,104,0,345,3, 167303,104,0,345,3,
16727105,0,345,3,106, 16731105,0,345,3,106,
167280,345,3,107,0, 167320,345,3,107,0,
16729345,3,108,0,345, 16733345,3,108,0,345,
167301251,11,1,845,0, 167341251,11,1,867,0,
16731348,1,-1,3,116, 16735348,1,-1,3,116,
167320,1252,12,1,17189, 167360,1252,12,1,17211,
167331253,5,63,3,109, 167371253,5,63,3,109,
167340,345,3,110,0, 167380,345,3,110,0,
16735345,3,111,0,1254, 16739345,3,111,0,1254,
1673612,1,17219,1255,5, 1674012,1,17241,1255,5,
1673763,3,109,0,345, 1674163,3,109,0,345,
167383,110,0,345,3, 167423,110,0,345,3,
16739111,0,345,3,112, 16743111,0,345,3,112,
@@ -16741,7 +16745,7 @@ public class yyLSLTokens : YyLexer {
16741345,3,114,0,345, 16745345,3,114,0,345,
167423,115,0,345,3, 167463,115,0,345,3,
16743116,0,345,3,117, 16747116,0,345,3,117,
167440,1256,12,1,17255, 167480,1256,12,1,17277,
167451257,5,63,3,109, 167491257,5,63,3,109,
167460,345,3,110,0, 167500,345,3,110,0,
16747345,3,111,0,345, 16751345,3,111,0,345,
@@ -16786,7 +16790,7 @@ public class yyLSLTokens : YyLexer {
167860,345,3,97,0, 167900,345,3,97,0,
16787345,3,98,0,345, 16791345,3,98,0,345,
167883,99,0,1258,12, 167923,99,0,1258,12,
167891,17300,1259,5,63, 167931,17322,1259,5,63,
167903,109,0,345,3, 167943,109,0,345,3,
16791110,0,345,3,111, 16795110,0,345,3,111,
167920,345,3,112,0, 167960,345,3,112,0,
@@ -16834,7 +16838,7 @@ public class yyLSLTokens : YyLexer {
168343,101,0,345,3, 168383,101,0,345,3,
16835102,0,345,3,103, 16839102,0,345,3,103,
168360,345,3,104,0, 168400,345,3,104,0,
168371260,12,1,17350,1261, 168411260,12,1,17372,1261,
168385,63,3,109,0, 168425,63,3,109,0,
16839345,3,110,0,345, 16843345,3,110,0,345,
168403,111,0,345,3, 168443,111,0,345,3,
@@ -16876,14 +16880,14 @@ public class yyLSLTokens : YyLexer {
168763,88,0,345,3, 168803,88,0,345,3,
1687789,0,345,3,90, 1688189,0,345,3,90,
168780,345,3,95,0, 168820,345,3,95,0,
168791262,12,1,17436,1263, 168831262,12,1,17458,1263,
168805,63,3,109,0, 168845,63,3,109,0,
16881345,3,110,0,345, 16885345,3,110,0,345,
168823,111,0,345,3, 168863,111,0,345,3,
16883112,0,345,3,113, 16887112,0,345,3,113,
168840,345,3,114,0, 168880,345,3,114,0,
16885345,3,115,0,1264, 16889345,3,115,0,1264,
1688612,1,17470,1265,5, 1689012,1,17492,1265,5,
1688763,3,109,0,345, 1689163,3,109,0,345,
168883,110,0,345,3, 168923,110,0,345,3,
16889111,0,345,3,112, 16893111,0,345,3,112,
@@ -16891,7 +16895,7 @@ public class yyLSLTokens : YyLexer {
16891345,3,114,0,345, 16895345,3,114,0,345,
168923,115,0,345,3, 168963,115,0,345,3,
16893116,0,1266,12,1, 16897116,0,1266,12,1,
1689417505,1267,5,63,3, 1689817527,1267,5,63,3,
16895109,0,345,3,110, 16899109,0,345,3,110,
168960,345,3,111,0, 169000,345,3,111,0,
16897345,3,112,0,345, 16901345,3,112,0,345,
@@ -16933,13 +16937,13 @@ public class yyLSLTokens : YyLexer {
16933345,3,89,0,345, 16937345,3,89,0,345,
169343,90,0,345,3, 169383,90,0,345,3,
1693595,0,345,3,97, 1693995,0,345,3,97,
169360,1268,12,1,17548, 169400,1268,12,1,17570,
169371269,5,63,3,109, 169411269,5,63,3,109,
169380,345,3,110,0, 169420,345,3,110,0,
16939345,3,111,0,345, 16943345,3,111,0,345,
169403,112,0,345,3, 169443,112,0,345,3,
16941113,0,345,3,114, 16945113,0,345,3,114,
169420,1270,12,1,17581, 169460,1270,12,1,17603,
169431271,5,63,3,109, 169471271,5,63,3,109,
169440,345,3,110,0, 169480,345,3,110,0,
16945345,3,111,0,345, 16949345,3,111,0,345,
@@ -16947,7 +16951,7 @@ public class yyLSLTokens : YyLexer {
16947113,0,345,3,114, 16951113,0,345,3,114,
169480,345,3,115,0, 169520,345,3,115,0,
16949345,3,116,0,1272, 16953345,3,116,0,1272,
1695012,1,17616,1273,5, 1695412,1,17638,1273,5,
1695163,3,109,0,345, 1695563,3,109,0,345,
169523,110,0,345,3, 169563,110,0,345,3,
16953111,0,345,3,112, 16957111,0,345,3,112,
@@ -17052,7 +17056,7 @@ public class yyLSLTokens : YyLexer {
170523,106,0,345,3, 170563,106,0,345,3,
17053107,0,345,3,108, 17057107,0,345,3,108,
170540,345,1276,11,1, 170580,345,1276,11,1,
17055845,0,348,1,-1, 17059867,0,348,1,-1,
170563,115,0,345,3, 170603,115,0,345,3,
17057116,0,345,3,117, 17061116,0,345,3,117,
170580,345,3,118,0, 170620,345,3,118,0,
@@ -17099,7 +17103,7 @@ public class yyLSLTokens : YyLexer {
17099345,3,106,0,345, 17103345,3,106,0,345,
171003,107,0,345,3, 171043,107,0,345,3,
17101108,0,345,1277,11, 17105108,0,345,1277,11,
171021,845,0,348,1, 171061,867,0,348,1,
17103-1,3,98,0,345, 17107-1,3,98,0,345,
171043,99,0,345,3, 171083,99,0,345,3,
17105100,0,345,3,101, 17109100,0,345,3,101,
@@ -17109,7 +17113,7 @@ public class yyLSLTokens : YyLexer {
17109105,0,345,3,106, 17113105,0,345,3,106,
171100,345,3,107,0, 171140,345,3,107,0,
17111345,3,108,0,345, 17115345,3,108,0,345,
171121278,11,1,845,0, 171161278,11,1,867,0,
17113348,1,-1,3,117, 17117348,1,-1,3,117,
171140,345,3,118,0, 171180,345,3,118,0,
17115345,3,119,0,345, 17119345,3,119,0,345,
@@ -17155,7 +17159,7 @@ public class yyLSLTokens : YyLexer {
17155345,3,106,0,345, 17159345,3,106,0,345,
171563,107,0,345,3, 171603,107,0,345,3,
17157108,0,345,1279,11, 17161108,0,345,1279,11,
171581,845,0,348,1, 171621,867,0,348,1,
17159-1,3,116,0,345, 17163-1,3,116,0,345,
171603,117,0,345,3, 171643,117,0,345,3,
17161118,0,345,3,119, 17165118,0,345,3,119,
@@ -17195,10 +17199,10 @@ public class yyLSLTokens : YyLexer {
17195345,3,98,0,345, 17199345,3,98,0,345,
171963,99,0,345,3, 172003,99,0,345,3,
17197100,0,345,3,101, 17201100,0,345,3,101,
171980,1280,12,1,18083, 172020,1280,12,1,18105,
171991281,5,63,3,109, 172031281,5,63,3,109,
172000,345,3,110,0, 172040,345,3,110,0,
172011282,12,1,18112,1283, 172051282,12,1,18134,1283,
172025,63,3,109,0, 172065,63,3,109,0,
17203345,3,110,0,345, 17207345,3,110,0,345,
172043,111,0,345,3, 172083,111,0,345,3,
@@ -17243,7 +17247,7 @@ public class yyLSLTokens : YyLexer {
17243345,3,97,0,345, 17247345,3,97,0,345,
172443,98,0,345,3, 172483,98,0,345,3,
1724599,0,345,3,100, 1724999,0,345,3,100,
172460,1284,12,1,18158, 172500,1284,12,1,18180,
172471285,5,63,3,109, 172511285,5,63,3,109,
172480,345,3,110,0, 172520,345,3,110,0,
17249345,3,111,0,345, 17253345,3,111,0,345,
@@ -17310,7 +17314,7 @@ public class yyLSLTokens : YyLexer {
173103,106,0,345,3, 173143,106,0,345,3,
17311107,0,345,3,108, 17315107,0,345,3,108,
173120,345,1288,11,1, 173160,345,1288,11,1,
17313845,0,348,1,-1, 17317867,0,348,1,-1,
173143,111,0,345,3, 173183,111,0,345,3,
17315112,0,345,3,113, 17319112,0,345,3,113,
173160,345,3,114,0, 173200,345,3,114,0,
@@ -17360,14 +17364,14 @@ public class yyLSLTokens : YyLexer {
173600,345,3,106,0, 173640,345,3,106,0,
17361345,3,107,0,345, 17365345,3,107,0,345,
173623,108,0,345,1289, 173663,108,0,345,1289,
1736311,1,845,0,348, 1736711,1,867,0,348,
173641,-1,3,102,0, 173681,-1,3,102,0,
17365345,3,103,0,345, 17369345,3,103,0,345,
173663,104,0,345,3, 173703,104,0,345,3,
17367105,0,345,3,106, 17371105,0,345,3,106,
173680,345,3,107,0, 173720,345,3,107,0,
17369345,3,108,0,345, 17373345,3,108,0,345,
173701290,11,1,845,0, 173741290,11,1,867,0,
17371348,1,-1,3,97, 17375348,1,-1,3,97,
173720,345,3,98,0, 173760,345,3,98,0,
17373345,3,99,0,345, 17377345,3,99,0,345,
@@ -17388,7 +17392,7 @@ public class yyLSLTokens : YyLexer {
173880,345,3,106,0, 173920,345,3,106,0,
17389345,3,107,0,345, 17393345,3,107,0,345,
173903,108,0,345,1293, 173943,108,0,345,1293,
1739111,1,845,0,348, 1739511,1,867,0,348,
173921,-1,3,100,0, 173961,-1,3,100,0,
17393345,3,101,0,345, 17397345,3,101,0,345,
173943,102,0,345,3, 173983,102,0,345,3,
@@ -17397,7 +17401,7 @@ public class yyLSLTokens : YyLexer {
17397345,3,106,0,345, 17401345,3,106,0,345,
173983,107,0,345,3, 174023,107,0,345,3,
17399108,0,345,1294,11, 17403108,0,345,1294,11,
174001,845,0,348,1, 174041,867,0,348,1,
17401-1,3,118,0,345, 17405-1,3,118,0,345,
174023,119,0,345,3, 174063,119,0,345,3,
17403120,0,345,3,121, 17407120,0,345,3,121,
@@ -17442,7 +17446,13 @@ public class yyLSLTokens : YyLexer {
174423,106,0,345,3, 174463,106,0,345,3,
17443107,0,345,3,108, 17447107,0,345,3,108,
174440,345,1295,11,1, 174480,345,1295,11,1,
17445845,0,348,1,-1, 17449867,0,348,1,-1,
174503,112,0,345,3,
17451113,0,345,3,114,
174520,1296,12,1,18804,
174531297,5,63,3,109,
174540,345,3,110,0,
17455345,3,111,0,345,
174463,112,0,345,3, 174563,112,0,345,3,
17447113,0,345,3,114, 17457113,0,345,3,114,
174480,345,3,115,0, 174580,345,3,115,0,
@@ -17482,16 +17492,60 @@ public class yyLSLTokens : YyLexer {
174823,89,0,345,3, 174923,89,0,345,3,
1748390,0,345,3,95, 1749390,0,345,3,95,
174840,345,3,97,0, 174940,345,3,97,0,
17485345,3,98,0,345, 174951298,12,1,18847,1299,
174863,99,0,345,3, 174965,63,3,109,0,
17487100,0,345,3,101, 17497345,3,110,0,1300,
174880,345,3,102,0, 1749812,1,18876,1301,5,
17489345,3,103,0,345, 1749963,3,109,0,345,
174903,104,0,345,3, 175003,110,0,345,3,
17491105,0,1296,12,1, 17501111,0,345,3,112,
1749218800,1297,5,63,3, 175020,345,3,113,0,
17493109,0,1298,12,1, 17503345,3,114,0,345,
1749418828,1299,5,63,3, 175043,115,0,1302,12,
175051,18910,1303,5,63,
175063,109,0,345,3,
17507110,0,345,3,111,
175080,345,3,112,0,
17509345,3,113,0,345,
175103,114,0,345,3,
17511115,0,345,3,116,
175120,345,3,117,0,
17513345,3,118,0,345,
175143,119,0,345,3,
17515120,0,345,3,121,
175160,345,3,122,0,
17517345,3,48,0,345,
175183,49,0,345,3,
1751950,0,345,3,51,
175200,345,3,52,0,
17521345,3,53,0,345,
175223,54,0,345,3,
1752355,0,345,3,56,
175240,345,3,57,0,
17525345,3,65,0,345,
175263,66,0,345,3,
1752767,0,345,3,68,
175280,345,3,69,0,
17529345,3,70,0,345,
175303,71,0,345,3,
1753172,0,345,3,73,
175320,345,3,74,0,
17533345,3,75,0,345,
175343,76,0,345,3,
1753577,0,345,3,78,
175360,345,3,79,0,
17537345,3,80,0,345,
175383,81,0,345,3,
1753982,0,345,3,83,
175400,345,3,84,0,
17541345,3,85,0,345,
175423,86,0,345,3,
1754387,0,345,3,88,
175440,345,3,89,0,
17545345,3,90,0,345,
175463,95,0,345,3,
1754797,0,1304,12,1,
1754818953,1305,5,63,3,
17495109,0,345,3,110, 17549109,0,345,3,110,
174960,345,3,111,0, 175500,345,3,111,0,
17497345,3,112,0,345, 17551345,3,112,0,345,
@@ -17534,16 +17588,240 @@ public class yyLSLTokens : YyLexer {
175343,90,0,345,3, 175883,90,0,345,3,
1753595,0,345,3,97, 1758995,0,345,3,97,
175360,345,3,98,0, 175900,345,3,98,0,
17537345,3,99,0,345, 17591345,3,99,0,1306,
175383,100,0,345,3, 1759212,1,18998,1307,5,
17539101,0,1300,12,1, 1759363,3,109,0,345,
1754018875,1301,5,63,3, 175943,110,0,345,3,
17595111,0,345,3,112,
175960,345,3,113,0,
17597345,3,114,0,345,
175983,115,0,345,3,
17599116,0,1308,12,1,
1760019033,1309,5,63,3,
17541109,0,345,3,110, 17601109,0,345,3,110,
175420,345,3,111,0, 176020,345,3,111,0,
17543345,3,112,0,345, 17603345,3,112,0,345,
175443,113,0,345,3, 176043,113,0,345,3,
17545114,0,1302,12,1, 17605114,0,345,3,115,
1754618908,1303,5,63,3, 176060,345,3,116,0,
17607345,3,117,0,345,
176083,118,0,345,3,
17609119,0,345,3,120,
176100,345,3,121,0,
17611345,3,122,0,345,
176123,48,0,345,3,
1761349,0,345,3,50,
176140,345,3,51,0,
17615345,3,52,0,345,
176163,53,0,345,3,
1761754,0,345,3,55,
176180,345,3,56,0,
17619345,3,57,0,345,
176203,65,0,345,3,
1762166,0,345,3,67,
176220,345,3,68,0,
17623345,3,69,0,345,
176243,70,0,345,3,
1762571,0,345,3,72,
176260,345,3,73,0,
17627345,3,74,0,345,
176283,75,0,345,3,
1762976,0,345,3,77,
176300,345,3,78,0,
17631345,3,79,0,345,
176323,80,0,345,3,
1763381,0,345,3,82,
176340,345,3,83,0,
17635345,3,84,0,345,
176363,85,0,345,3,
1763786,0,345,3,87,
176380,345,3,88,0,
17639345,3,89,0,345,
176403,90,0,345,3,
1764195,0,345,3,97,
176420,345,3,98,0,
17643345,3,99,0,345,
176443,100,0,345,3,
17645101,0,345,3,102,
176460,345,3,103,0,
17647345,3,104,0,345,
176483,105,0,1310,12,
176491,19084,1311,5,63,
176503,109,0,345,3,
17651110,0,345,3,111,
176520,1312,12,1,19114,
176531313,5,63,3,109,
176540,345,3,110,0,
176551314,12,1,19143,1315,
176565,63,3,109,0,
17657345,3,110,0,345,
176583,111,0,345,3,
17659112,0,345,3,113,
176600,345,3,114,0,
17661345,3,115,0,345,
176623,116,0,345,3,
17663117,0,345,3,118,
176640,345,3,119,0,
17665345,3,120,0,345,
176663,121,0,345,3,
17667122,0,345,3,48,
176680,345,3,49,0,
17669345,3,50,0,345,
176703,51,0,345,3,
1767152,0,345,3,53,
176720,345,3,54,0,
17673345,3,55,0,345,
176743,56,0,345,3,
1767557,0,345,3,65,
176760,345,3,66,0,
17677345,3,67,0,345,
176783,68,0,345,3,
1767969,0,345,3,70,
176800,345,3,71,0,
17681345,3,72,0,345,
176823,73,0,345,3,
1768374,0,345,3,75,
176840,345,3,76,0,
17685345,3,77,0,345,
176863,78,0,345,3,
1768779,0,345,3,80,
176880,345,3,81,0,
17689345,3,82,0,345,
176903,83,0,345,3,
1769184,0,345,3,85,
176920,345,3,86,0,
17693345,3,87,0,345,
176943,88,0,345,3,
1769589,0,345,3,90,
176960,345,3,95,0,
176971316,12,1,19229,1317,
176985,63,3,109,0,
17699345,3,110,0,345,
177003,111,0,345,3,
17701112,0,345,3,113,
177020,345,3,114,0,
177031318,12,1,19262,1319,
177045,63,3,109,0,
17705345,3,110,0,345,
177063,111,0,345,3,
17707112,0,345,3,113,
177080,345,3,114,0,
17709345,3,115,0,345,
177103,116,0,345,3,
17711117,0,345,3,118,
177120,345,3,119,0,
17713345,3,120,0,345,
177143,121,0,345,3,
17715122,0,345,3,48,
177160,345,3,49,0,
17717345,3,50,0,345,
177183,51,0,345,3,
1771952,0,345,3,53,
177200,345,3,54,0,
17721345,3,55,0,345,
177223,56,0,345,3,
1772357,0,345,3,65,
177240,345,3,66,0,
17725345,3,67,0,345,
177263,68,0,345,3,
1772769,0,345,3,70,
177280,345,3,71,0,
17729345,3,72,0,345,
177303,73,0,345,3,
1773174,0,345,3,75,
177320,345,3,76,0,
17733345,3,77,0,345,
177343,78,0,345,3,
1773579,0,345,3,80,
177360,345,3,81,0,
17737345,3,82,0,345,
177383,83,0,345,3,
1773984,0,345,3,85,
177400,345,3,86,0,
17741345,3,87,0,345,
177423,88,0,345,3,
1774389,0,345,3,90,
177440,345,3,95,0,
17745345,3,97,0,345,
177463,98,0,345,3,
1774799,0,345,3,100,
177480,345,3,101,0,
177491320,12,1,19309,1321,
177505,63,3,109,0,
17751345,3,110,0,345,
177523,111,0,345,3,
17753112,0,345,3,113,
177540,345,3,114,0,
17755345,3,115,0,1322,
1775612,1,19343,1323,5,
1775763,3,109,0,345,
177583,110,0,345,3,
17759111,0,345,3,112,
177600,345,3,113,0,
17761345,3,114,0,345,
177623,115,0,345,3,
17763116,0,345,3,117,
177640,1324,12,1,19379,
177651325,5,63,3,109,
177660,345,3,110,0,
17767345,3,111,0,345,
177683,112,0,345,3,
17769113,0,345,3,114,
177700,345,3,115,0,
17771345,3,116,0,345,
177723,117,0,345,3,
17773118,0,345,3,119,
177740,345,3,120,0,
17775345,3,121,0,345,
177763,122,0,345,3,
1777748,0,345,3,49,
177780,345,3,50,0,
17779345,3,51,0,345,
177803,52,0,345,3,
1778153,0,345,3,54,
177820,345,3,55,0,
17783345,3,56,0,345,
177843,57,0,345,3,
1778565,0,345,3,66,
177860,345,3,67,0,
17787345,3,68,0,345,
177883,69,0,345,3,
1778970,0,345,3,71,
177900,345,3,72,0,
17791345,3,73,0,345,
177923,74,0,345,3,
1779375,0,345,3,76,
177940,345,3,77,0,
17795345,3,78,0,345,
177963,79,0,345,3,
1779780,0,345,3,81,
177980,345,3,82,0,
17799345,3,83,0,345,
178003,84,0,345,3,
1780185,0,345,3,86,
178020,345,3,87,0,
17803345,3,88,0,345,
178043,89,0,345,3,
1780590,0,345,3,95,
178060,345,3,97,0,
17807345,3,98,0,345,
178083,99,0,345,3,
17809100,0,345,3,101,
178100,345,3,102,0,
17811345,3,103,0,345,
178123,104,0,345,3,
17813105,0,345,3,106,
178140,345,3,107,0,
17815345,3,108,0,1326,
1781612,1,19433,1327,5,
1781763,3,109,0,345,
178183,110,0,345,3,
17819111,0,345,3,112,
178200,345,3,113,0,
17821345,3,114,0,345,
178223,115,0,345,3,
17823116,0,1328,12,1,
1782419468,1329,5,63,3,
17547109,0,345,3,110, 17825109,0,345,3,110,
175480,345,3,111,0, 178260,345,3,111,0,
17549345,3,112,0,345, 17827345,3,112,0,345,
@@ -17594,15 +17872,65 @@ public class yyLSLTokens : YyLexer {
175943,105,0,345,3, 178723,105,0,345,3,
17595106,0,345,3,107, 17873106,0,345,3,107,
175960,345,3,108,0, 178740,345,3,108,0,
17597345,1304,11,1,783, 17875345,1330,11,1,845,
175980,1305,4,22,84, 178760,1331,4,48,84,
175990,73,0,77,0, 178770,82,0,65,0,
1760069,0,82,0,95, 1787878,0,83,0,65,
176010,69,0,86,0, 178790,67,0,84,0,
1760269,0,78,0,84, 1788073,0,79,0,78,
176030,1,-1,3,115, 178810,95,0,82,0,
176040,345,3,116,0, 1788269,0,83,0,85,
17605345,3,117,0,345, 178830,76,0,84,0,
1788495,0,69,0,86,
178850,69,0,78,0,
1788684,0,1,-1,3,
17887117,0,345,3,118,
178880,345,3,119,0,
17889345,3,120,0,345,
178903,121,0,345,3,
17891122,0,345,3,48,
178920,345,3,49,0,
17893345,3,50,0,345,
178943,51,0,345,3,
1789552,0,345,3,53,
178960,345,3,54,0,
17897345,3,55,0,345,
178983,56,0,345,3,
1789957,0,345,3,65,
179000,345,3,66,0,
17901345,3,67,0,345,
179023,68,0,345,3,
1790369,0,345,3,70,
179040,345,3,71,0,
17905345,3,72,0,345,
179063,73,0,345,3,
1790774,0,345,3,75,
179080,345,3,76,0,
17909345,3,77,0,345,
179103,78,0,345,3,
1791179,0,345,3,80,
179120,345,3,81,0,
17913345,3,82,0,345,
179143,83,0,345,3,
1791584,0,345,3,85,
179160,345,3,86,0,
17917345,3,87,0,345,
179183,88,0,345,3,
1791989,0,345,3,90,
179200,345,3,95,0,
17921345,3,97,0,345,
179223,98,0,345,3,
1792399,0,345,3,100,
179240,345,3,101,0,
17925345,3,102,0,345,
179263,103,0,345,3,
17927104,0,345,3,105,
179280,345,3,106,0,
17929345,3,107,0,345,
179303,108,0,345,1332,
1793111,1,867,0,348,
179321,-1,1333,11,1,
17933867,0,348,1,-1,
176063,118,0,345,3, 179343,118,0,345,3,
17607119,0,345,3,120, 17935119,0,345,3,120,
176080,345,3,121,0, 179360,345,3,121,0,
@@ -17646,20 +17974,8 @@ public class yyLSLTokens : YyLexer {
176463,105,0,345,3, 179743,105,0,345,3,
17647106,0,345,3,107, 17975106,0,345,3,107,
176480,345,3,108,0, 179760,345,3,108,0,
17649345,1306,11,1,845, 17977345,1334,11,1,867,
176500,348,1,-1,3, 179780,348,1,-1,3,
17651102,0,345,3,103,
176520,345,3,104,0,
17653345,3,105,0,345,
176543,106,0,345,3,
17655107,0,345,3,108,
176560,345,1307,11,1,
17657845,0,348,1,-1,
176583,110,0,345,3,
17659111,0,345,3,112,
176600,345,3,113,0,
17661345,3,114,0,345,
176623,115,0,345,3,
17663116,0,345,3,117, 17979116,0,345,3,117,
176640,345,3,118,0, 179800,345,3,118,0,
17665345,3,119,0,345, 17981345,3,119,0,345,
@@ -17704,179 +18020,15 @@ public class yyLSLTokens : YyLexer {
177040,345,3,105,0, 180200,345,3,105,0,
17705345,3,106,0,345, 18021345,3,106,0,345,
177063,107,0,345,3, 180223,107,0,345,3,
17707108,0,345,1308,11, 18023108,0,345,1335,11,
177081,845,0,348,1, 180241,867,0,348,1,
17709-1,3,106,0,345, 18025-1,3,102,0,345,
177103,107,0,345,3, 180263,103,0,345,3,
17711108,0,345,1309,11, 18027104,0,345,3,105,
177121,845,0,348,1, 180280,345,3,106,0,
17713-1,3,117,0,343, 18029345,3,107,0,345,
177143,118,0,1310,12, 180303,108,0,345,1336,
177151,19351,1311,5,63, 1803111,1,867,0,348,
177163,109,0,345,3,
17717110,0,345,3,111,
177180,345,3,112,0,
17719345,3,113,0,345,
177203,114,0,345,3,
17721115,0,345,3,116,
177220,345,3,117,0,
17723345,3,118,0,345,
177243,119,0,345,3,
17725120,0,345,3,121,
177260,345,3,122,0,
17727345,3,48,0,345,
177283,49,0,345,3,
1772950,0,345,3,51,
177300,345,3,52,0,
17731345,3,53,0,345,
177323,54,0,345,3,
1773355,0,345,3,56,
177340,345,3,57,0,
17735345,3,65,0,345,
177363,66,0,345,3,
1773767,0,345,3,68,
177380,345,3,69,0,
17739345,3,70,0,345,
177403,71,0,345,3,
1774172,0,345,3,73,
177420,345,3,74,0,
17743345,3,75,0,345,
177443,76,0,345,3,
1774577,0,345,3,78,
177460,345,3,79,0,
17747345,3,80,0,345,
177483,81,0,345,3,
1774982,0,345,3,83,
177500,345,3,84,0,
17751345,3,85,0,345,
177523,86,0,345,3,
1775387,0,345,3,88,
177540,345,3,89,0,
17755345,3,90,0,345,
177563,95,0,345,3,
1775797,0,345,3,98,
177580,345,3,99,0,
17759345,3,100,0,345,
177603,101,0,1312,12,
177611,19398,1313,5,63,
177623,109,0,345,3,
17763110,0,345,3,111,
177640,345,3,112,0,
17765345,3,113,0,345,
177663,114,0,345,3,
17767115,0,345,3,116,
177680,345,3,117,0,
17769345,3,118,0,345,
177703,119,0,345,3,
17771120,0,345,3,121,
177720,345,3,122,0,
17773345,3,48,0,345,
177743,49,0,345,3,
1777550,0,345,3,51,
177760,345,3,52,0,
17777345,3,53,0,345,
177783,54,0,345,3,
1777955,0,345,3,56,
177800,345,3,57,0,
17781345,3,65,0,345,
177823,66,0,345,3,
1778367,0,345,3,68,
177840,345,3,69,0,
17785345,3,70,0,345,
177863,71,0,345,3,
1778772,0,345,3,73,
177880,345,3,74,0,
17789345,3,75,0,345,
177903,76,0,345,3,
1779177,0,345,3,78,
177920,345,3,79,0,
17793345,3,80,0,345,
177943,81,0,345,3,
1779582,0,345,3,83,
177960,345,3,84,0,
17797345,3,85,0,345,
177983,86,0,345,3,
1779987,0,345,3,88,
178000,345,3,89,0,
17801345,3,90,0,345,
178023,95,0,345,3,
1780397,0,345,3,98,
178040,345,3,99,0,
178051314,12,1,19443,1315,
178065,63,3,109,0,
17807345,3,110,0,345,
178083,111,0,345,3,
17809112,0,345,3,113,
178100,345,3,114,0,
17811345,3,115,0,345,
178123,116,0,1316,12,
178131,19478,1317,5,63,
178143,109,0,345,3,
17815110,0,345,3,111,
178160,1318,12,1,19508,
178171319,5,63,3,109,
178180,345,3,110,0,
17819345,3,111,0,345,
178203,112,0,345,3,
17821113,0,345,3,114,
178220,1320,12,1,19541,
178231321,5,63,3,109,
178240,345,3,110,0,
17825345,3,111,0,345,
178263,112,0,345,3,
17827113,0,345,3,114,
178280,345,3,115,0,
17829345,3,116,0,345,
178303,117,0,345,3,
17831118,0,345,3,119,
178320,345,3,120,0,
17833345,3,121,0,345,
178343,122,0,345,3,
1783548,0,345,3,49,
178360,345,3,50,0,
17837345,3,51,0,345,
178383,52,0,345,3,
1783953,0,345,3,54,
178400,345,3,55,0,
17841345,3,56,0,345,
178423,57,0,345,3,
1784365,0,345,3,66,
178440,345,3,67,0,
17845345,3,68,0,345,
178463,69,0,345,3,
1784770,0,345,3,71,
178480,345,3,72,0,
17849345,3,73,0,345,
178503,74,0,345,3,
1785175,0,345,3,76,
178520,345,3,77,0,
17853345,3,78,0,345,
178543,79,0,345,3,
1785580,0,345,3,81,
178560,345,3,82,0,
17857345,3,83,0,345,
178583,84,0,345,3,
1785985,0,345,3,86,
178600,345,3,87,0,
17861345,3,88,0,345,
178623,89,0,345,3,
1786390,0,345,3,95,
178640,345,3,97,0,
17865345,3,98,0,345,
178663,99,0,345,3,
17867100,0,345,3,101,
178680,345,3,102,0,
17869345,3,103,0,345,
178703,104,0,345,3,
17871105,0,345,3,106,
178720,345,3,107,0,
17873345,3,108,0,345,
178741322,11,1,320,0,
178751323,4,22,86,0,
1787669,0,67,0,84,
178770,79,0,82,0,
1787895,0,84,0,89,
178790,80,0,69,0,
178801,-1,3,115,0, 180321,-1,3,115,0,
17881345,3,116,0,345, 18033345,3,116,0,345,
178823,117,0,345,3, 180343,117,0,345,3,
@@ -17923,8 +18075,20 @@ public class yyLSLTokens : YyLexer {
17923105,0,345,3,106, 18075105,0,345,3,106,
179240,345,3,107,0, 180760,345,3,107,0,
17925345,3,108,0,345, 18077345,3,108,0,345,
179261324,11,1,845,0, 180781337,11,1,867,0,
17927348,1,-1,3,112, 18079348,1,-1,3,97,
180800,345,3,98,0,
18081345,3,99,0,345,
180823,100,0,345,3,
18083101,0,345,3,102,
180840,345,3,103,0,
18085345,3,104,0,345,
180863,105,0,345,3,
18087106,0,345,3,107,
180880,345,3,108,0,
18089345,1338,11,1,867,
180900,348,1,-1,3,
18091111,0,345,3,112,
179280,345,3,113,0, 180920,345,3,113,0,
17929345,3,114,0,345, 18093345,3,114,0,345,
179303,115,0,345,3, 180943,115,0,345,3,
@@ -17972,9 +18136,13 @@ public class yyLSLTokens : YyLexer {
179720,345,3,105,0, 181360,345,3,105,0,
17973345,3,106,0,345, 18137345,3,106,0,345,
179743,107,0,345,3, 181383,107,0,345,3,
17975108,0,345,1325,11, 18139108,0,345,1339,11,
179761,845,0,348,1, 181401,867,0,348,1,
17977-1,3,117,0,345, 18141-1,3,112,0,345,
181423,113,0,345,3,
18143114,0,345,3,115,
181440,345,3,116,0,
18145345,3,117,0,345,
179783,118,0,345,3, 181463,118,0,345,3,
17979119,0,345,3,120, 18147119,0,345,3,120,
179800,345,3,121,0, 181480,345,3,121,0,
@@ -18018,8 +18186,68 @@ public class yyLSLTokens : YyLexer {
180183,105,0,345,3, 181863,105,0,345,3,
18019106,0,345,3,107, 18187106,0,345,3,107,
180200,345,3,108,0, 181880,345,3,108,0,
18021345,1326,11,1,845, 18189345,1340,11,1,867,
181900,348,1,-1,3,
18191106,0,345,3,107,
181920,345,3,108,0,
18193345,1341,11,1,867,
180220,348,1,-1,3, 181940,348,1,-1,3,
18195117,0,345,3,118,
181960,345,3,119,0,
18197345,3,120,0,345,
181983,121,0,345,3,
18199122,0,345,3,48,
182000,345,3,49,0,
18201345,3,50,0,345,
182023,51,0,345,3,
1820352,0,345,3,53,
182040,345,3,54,0,
18205345,3,55,0,345,
182063,56,0,345,3,
1820757,0,345,3,65,
182080,345,3,66,0,
18209345,3,67,0,345,
182103,68,0,345,3,
1821169,0,345,3,70,
182120,345,3,71,0,
18213345,3,72,0,345,
182143,73,0,345,3,
1821574,0,345,3,75,
182160,345,3,76,0,
18217345,3,77,0,345,
182183,78,0,345,3,
1821979,0,345,3,80,
182200,345,3,81,0,
18221345,3,82,0,345,
182223,83,0,345,3,
1822384,0,345,3,85,
182240,345,3,86,0,
18225345,3,87,0,345,
182263,88,0,345,3,
1822789,0,345,3,90,
182280,345,3,95,0,
18229345,3,97,0,345,
182303,98,0,345,3,
1823199,0,345,3,100,
182320,345,3,101,0,
18233345,3,102,0,345,
182343,103,0,345,3,
18235104,0,345,3,105,
182360,345,3,106,0,
18237345,3,107,0,345,
182383,108,0,345,1342,
1823911,1,867,0,348,
182401,-1,3,100,0,
18241345,3,101,0,345,
182423,102,0,345,3,
18243103,0,345,3,104,
182440,345,3,105,0,
18245345,3,106,0,345,
182463,107,0,345,3,
18247108,0,345,1343,11,
182481,867,0,348,1,
18249-1,3,98,0,345,
182503,99,0,345,3,
18023100,0,345,3,101, 18251100,0,345,3,101,
180240,345,3,102,0, 182520,345,3,102,0,
18025345,3,103,0,345, 18253345,3,103,0,345,
@@ -18027,65 +18255,213 @@ public class yyLSLTokens : YyLexer {
18027105,0,345,3,106, 18255105,0,345,3,106,
180280,345,3,107,0, 182560,345,3,107,0,
18029345,3,108,0,345, 18257345,3,108,0,345,
180301327,11,1,845,0, 182581344,11,1,867,0,
18031348,1,-1,3,102, 18259348,1,-1,3,116,
182600,345,3,117,0,
18261345,3,118,0,345,
182623,119,0,345,3,
18263120,0,345,3,121,
182640,345,3,122,0,
18265345,3,48,0,345,
182663,49,0,345,3,
1826750,0,345,3,51,
182680,345,3,52,0,
18269345,3,53,0,345,
182703,54,0,345,3,
1827155,0,345,3,56,
182720,345,3,57,0,
18273345,3,65,0,345,
182743,66,0,345,3,
1827567,0,345,3,68,
182760,345,3,69,0,
18277345,3,70,0,345,
182783,71,0,345,3,
1827972,0,345,3,73,
182800,345,3,74,0,
18281345,3,75,0,345,
182823,76,0,345,3,
1828377,0,345,3,78,
182840,345,3,79,0,
18285345,3,80,0,345,
182863,81,0,345,3,
1828782,0,345,3,83,
182880,345,3,84,0,
18289345,3,85,0,345,
182903,86,0,345,3,
1829187,0,345,3,88,
182920,345,3,89,0,
18293345,3,90,0,345,
182943,95,0,345,3,
1829597,0,345,3,98,
182960,345,3,99,0,
18297345,3,100,0,345,
182983,101,0,345,3,
18299102,0,345,3,103,
183000,345,3,104,0,
18301345,3,105,0,345,
183023,106,0,345,3,
18303107,0,345,3,108,
183040,345,1345,11,1,
18305867,0,348,1,-1,
183063,111,0,345,3,
18307112,0,345,3,113,
183080,345,3,114,0,
18309345,3,115,0,345,
183103,116,0,345,3,
18311117,0,345,3,118,
183120,345,3,119,0,
18313345,3,120,0,345,
183143,121,0,345,3,
18315122,0,345,3,48,
183160,345,3,49,0,
18317345,3,50,0,345,
183183,51,0,345,3,
1831952,0,345,3,53,
183200,345,3,54,0,
18321345,3,55,0,345,
183223,56,0,345,3,
1832357,0,345,3,65,
183240,345,3,66,0,
18325345,3,67,0,345,
183263,68,0,345,3,
1832769,0,345,3,70,
183280,345,3,71,0,
18329345,3,72,0,345,
183303,73,0,345,3,
1833174,0,345,3,75,
183320,345,3,76,0,
18333345,3,77,0,345,
183343,78,0,345,3,
1833579,0,345,3,80,
183360,345,3,81,0,
18337345,3,82,0,345,
183383,83,0,345,3,
1833984,0,345,3,85,
183400,345,3,86,0,
18341345,3,87,0,345,
183423,88,0,345,3,
1834389,0,345,3,90,
183440,345,3,95,0,
18345345,3,97,0,345,
183463,98,0,345,3,
1834799,0,345,3,100,
183480,345,3,101,0,
18349345,3,102,0,345,
183503,103,0,345,3,
18351104,0,345,3,105,
183520,345,3,106,0,
18353345,3,107,0,345,
183543,108,0,345,1346,
1835511,1,867,0,348,
183561,-1,3,98,0,
18357345,3,99,0,345,
183583,100,0,345,3,
18359101,0,345,3,102,
180320,345,3,103,0, 183600,345,3,103,0,
18033345,3,104,0,345, 18361345,3,104,0,345,
180343,105,0,345,3, 183623,105,0,345,3,
18035106,0,345,3,107, 18363106,0,345,3,107,
180360,345,3,108,0, 183640,345,3,108,0,
18037345,1328,11,1,845, 18365345,1347,11,1,867,
180380,348,1,-1,3, 183660,348,1,-1,3,
18039119,0,1329,12,1, 18367115,0,345,3,116,
1804020072,1330,5,63,3, 183680,345,3,117,0,
18041109,0,345,3,110, 18369345,3,118,0,345,
180420,345,3,111,0, 183703,119,0,345,3,
18043345,3,112,0,345, 18371120,0,345,3,121,
180443,113,0,345,3, 183720,345,3,122,0,
18045114,0,345,3,115, 18373345,3,48,0,345,
180460,345,3,116,0, 183743,49,0,345,3,
18047345,3,117,0,345, 1837550,0,345,3,51,
180483,118,0,345,3, 183760,345,3,52,0,
18049119,0,345,3,120, 18377345,3,53,0,345,
180500,345,3,121,0, 183783,54,0,345,3,
18051345,3,122,0,345, 1837955,0,345,3,56,
180523,48,0,345,3, 183800,345,3,57,0,
1805349,0,345,3,50, 18381345,3,65,0,345,
180540,345,3,51,0, 183823,66,0,345,3,
18055345,3,52,0,345, 1838367,0,345,3,68,
180563,53,0,345,3, 183840,345,3,69,0,
1805754,0,345,3,55, 18385345,3,70,0,345,
180580,345,3,56,0, 183863,71,0,345,3,
18059345,3,57,0,345, 1838772,0,345,3,73,
180603,65,0,345,3, 183880,345,3,74,0,
1806166,0,345,3,67, 18389345,3,75,0,345,
180620,345,3,68,0, 183903,76,0,345,3,
18063345,3,69,0,345, 1839177,0,345,3,78,
180643,70,0,345,3, 183920,345,3,79,0,
1806571,0,345,3,72, 18393345,3,80,0,345,
180660,345,3,73,0, 183943,81,0,345,3,
18067345,3,74,0,345, 1839582,0,345,3,83,
180683,75,0,345,3, 183960,345,3,84,0,
1806976,0,345,3,77, 18397345,3,85,0,345,
180700,345,3,78,0, 183983,86,0,345,3,
18071345,3,79,0,345, 1839987,0,345,3,88,
180723,80,0,345,3, 184000,345,3,89,0,
1807381,0,345,3,82, 18401345,3,90,0,345,
180740,345,3,83,0, 184023,95,0,345,3,
18075345,3,84,0,345, 1840397,0,345,3,98,
180763,85,0,345,3, 184040,345,3,99,0,
1807786,0,345,3,87, 18405345,3,100,0,345,
180780,345,3,88,0, 184063,101,0,345,3,
18079345,3,89,0,345, 18407102,0,345,3,103,
180803,90,0,345,3, 184080,345,3,104,0,
1808195,0,345,3,97, 18409345,3,105,0,1348,
180820,345,3,98,0, 1841012,1,20862,1349,5,
18083345,3,99,0,345, 1841163,3,109,0,1350,
180843,100,0,345,3, 1841212,1,20890,1351,5,
18085101,0,345,3,102, 1841363,3,109,0,345,
180860,345,3,103,0, 184143,110,0,345,3,
18087345,3,104,0,1331, 18415111,0,345,3,112,
1808812,1,20122,1332,5, 184160,345,3,113,0,
18417345,3,114,0,345,
184183,115,0,345,3,
18419116,0,345,3,117,
184200,345,3,118,0,
18421345,3,119,0,345,
184223,120,0,345,3,
18423121,0,345,3,122,
184240,345,3,48,0,
18425345,3,49,0,345,
184263,50,0,345,3,
1842751,0,345,3,52,
184280,345,3,53,0,
18429345,3,54,0,345,
184303,55,0,345,3,
1843156,0,345,3,57,
184320,345,3,65,0,
18433345,3,66,0,345,
184343,67,0,345,3,
1843568,0,345,3,69,
184360,345,3,70,0,
18437345,3,71,0,345,
184383,72,0,345,3,
1843973,0,345,3,74,
184400,345,3,75,0,
18441345,3,76,0,345,
184423,77,0,345,3,
1844378,0,345,3,79,
184440,345,3,80,0,
18445345,3,81,0,345,
184463,82,0,345,3,
1844783,0,345,3,84,
184480,345,3,85,0,
18449345,3,86,0,345,
184503,87,0,345,3,
1845188,0,345,3,89,
184520,345,3,90,0,
18453345,3,95,0,345,
184543,97,0,345,3,
1845598,0,345,3,99,
184560,345,3,100,0,
18457345,3,101,0,1352,
1845812,1,20937,1353,5,
1845963,3,109,0,345,
184603,110,0,345,3,
18461111,0,345,3,112,
184620,345,3,113,0,
18463345,3,114,0,1354,
1846412,1,20970,1355,5,
1808963,3,109,0,345, 1846563,3,109,0,345,
180903,110,0,345,3, 184663,110,0,345,3,
18091111,0,345,3,112, 18467111,0,345,3,112,
@@ -18134,7 +18510,127 @@ public class yyLSLTokens : YyLexer {
181343,102,0,345,3, 185103,102,0,345,3,
18135103,0,345,3,104, 18511103,0,345,3,104,
181360,345,3,105,0, 185120,345,3,105,0,
181371333,12,1,20173,1334, 18513345,3,106,0,345,
185143,107,0,345,3,
18515108,0,345,1356,11,
185161,783,0,1357,4,
1851722,84,0,73,0,
1851877,0,69,0,82,
185190,95,0,69,0,
1852086,0,69,0,78,
185210,84,0,1,-1,
185223,115,0,345,3,
18523116,0,345,3,117,
185240,345,3,118,0,
18525345,3,119,0,345,
185263,120,0,345,3,
18527121,0,345,3,122,
185280,345,3,48,0,
18529345,3,49,0,345,
185303,50,0,345,3,
1853151,0,345,3,52,
185320,345,3,53,0,
18533345,3,54,0,345,
185343,55,0,345,3,
1853556,0,345,3,57,
185360,345,3,65,0,
18537345,3,66,0,345,
185383,67,0,345,3,
1853968,0,345,3,69,
185400,345,3,70,0,
18541345,3,71,0,345,
185423,72,0,345,3,
1854373,0,345,3,74,
185440,345,3,75,0,
18545345,3,76,0,345,
185463,77,0,345,3,
1854778,0,345,3,79,
185480,345,3,80,0,
18549345,3,81,0,345,
185503,82,0,345,3,
1855183,0,345,3,84,
185520,345,3,85,0,
18553345,3,86,0,345,
185543,87,0,345,3,
1855588,0,345,3,89,
185560,345,3,90,0,
18557345,3,95,0,345,
185583,97,0,345,3,
1855998,0,345,3,99,
185600,345,3,100,0,
18561345,3,101,0,345,
185623,102,0,345,3,
18563103,0,345,3,104,
185640,345,3,105,0,
18565345,3,106,0,345,
185663,107,0,345,3,
18567108,0,345,1358,11,
185681,867,0,348,1,
18569-1,3,102,0,345,
185703,103,0,345,3,
18571104,0,345,3,105,
185720,345,3,106,0,
18573345,3,107,0,345,
185743,108,0,345,1359,
1857511,1,867,0,348,
185761,-1,3,110,0,
18577345,3,111,0,345,
185783,112,0,345,3,
18579113,0,345,3,114,
185800,345,3,115,0,
18581345,3,116,0,345,
185823,117,0,345,3,
18583118,0,345,3,119,
185840,345,3,120,0,
18585345,3,121,0,345,
185863,122,0,345,3,
1858748,0,345,3,49,
185880,345,3,50,0,
18589345,3,51,0,345,
185903,52,0,345,3,
1859153,0,345,3,54,
185920,345,3,55,0,
18593345,3,56,0,345,
185943,57,0,345,3,
1859565,0,345,3,66,
185960,345,3,67,0,
18597345,3,68,0,345,
185983,69,0,345,3,
1859970,0,345,3,71,
186000,345,3,72,0,
18601345,3,73,0,345,
186023,74,0,345,3,
1860375,0,345,3,76,
186040,345,3,77,0,
18605345,3,78,0,345,
186063,79,0,345,3,
1860780,0,345,3,81,
186080,345,3,82,0,
18609345,3,83,0,345,
186103,84,0,345,3,
1861185,0,345,3,86,
186120,345,3,87,0,
18613345,3,88,0,345,
186143,89,0,345,3,
1861590,0,345,3,95,
186160,345,3,97,0,
18617345,3,98,0,345,
186183,99,0,345,3,
18619100,0,345,3,101,
186200,345,3,102,0,
18621345,3,103,0,345,
186223,104,0,345,3,
18623105,0,345,3,106,
186240,345,3,107,0,
18625345,3,108,0,345,
186261360,11,1,867,0,
18627348,1,-1,3,106,
186280,345,3,107,0,
18629345,3,108,0,345,
186301361,11,1,867,0,
18631348,1,-1,3,117,
186320,343,3,118,0,
186331362,12,1,21413,1363,
181385,63,3,109,0, 186345,63,3,109,0,
18139345,3,110,0,345, 18635345,3,110,0,345,
181403,111,0,345,3, 186363,111,0,345,3,
@@ -18180,13 +18676,69 @@ public class yyLSLTokens : YyLexer {
181803,98,0,345,3, 186763,98,0,345,3,
1818199,0,345,3,100, 1867799,0,345,3,100,
181820,345,3,101,0, 186780,345,3,101,0,
18183345,3,102,0,345, 186791364,12,1,21460,1365,
181843,103,0,345,3, 186805,63,3,109,0,
18185104,0,345,3,105, 18681345,3,110,0,345,
181860,345,3,106,0, 186823,111,0,345,3,
18187345,3,107,0,345, 18683112,0,345,3,113,
181883,108,0,1335,12, 186840,345,3,114,0,
181891,20227,1336,5,63, 18685345,3,115,0,345,
186863,116,0,345,3,
18687117,0,345,3,118,
186880,345,3,119,0,
18689345,3,120,0,345,
186903,121,0,345,3,
18691122,0,345,3,48,
186920,345,3,49,0,
18693345,3,50,0,345,
186943,51,0,345,3,
1869552,0,345,3,53,
186960,345,3,54,0,
18697345,3,55,0,345,
186983,56,0,345,3,
1869957,0,345,3,65,
187000,345,3,66,0,
18701345,3,67,0,345,
187023,68,0,345,3,
1870369,0,345,3,70,
187040,345,3,71,0,
18705345,3,72,0,345,
187063,73,0,345,3,
1870774,0,345,3,75,
187080,345,3,76,0,
18709345,3,77,0,345,
187103,78,0,345,3,
1871179,0,345,3,80,
187120,345,3,81,0,
18713345,3,82,0,345,
187143,83,0,345,3,
1871584,0,345,3,85,
187160,345,3,86,0,
18717345,3,87,0,345,
187183,88,0,345,3,
1871989,0,345,3,90,
187200,345,3,95,0,
18721345,3,97,0,345,
187223,98,0,345,3,
1872399,0,1366,12,1,
1872421505,1367,5,63,3,
18725109,0,345,3,110,
187260,345,3,111,0,
18727345,3,112,0,345,
187283,113,0,345,3,
18729114,0,345,3,115,
187300,345,3,116,0,
187311368,12,1,21540,1369,
187325,63,3,109,0,
18733345,3,110,0,345,
187343,111,0,1370,12,
187351,21570,1371,5,63,
187363,109,0,345,3,
18737110,0,345,3,111,
187380,345,3,112,0,
18739345,3,113,0,345,
187403,114,0,1372,12,
187411,21603,1373,5,63,
181903,109,0,345,3, 187423,109,0,345,3,
18191110,0,345,3,111, 18743110,0,345,3,111,
181920,345,3,112,0, 187440,345,3,112,0,
@@ -18231,13 +18783,19 @@ public class yyLSLTokens : YyLexer {
1823197,0,345,3,98, 1878397,0,345,3,98,
182320,345,3,99,0, 187840,345,3,99,0,
18233345,3,100,0,345, 18785345,3,100,0,345,
182343,101,0,1337,12, 187863,101,0,345,3,
182351,20274,1338,5,63, 18787102,0,345,3,103,
182363,109,0,345,3, 187880,345,3,104,0,
18237110,0,345,3,111, 18789345,3,105,0,345,
182380,345,3,112,0, 187903,106,0,345,3,
18239345,3,113,0,345, 18791107,0,345,3,108,
182403,114,0,345,3, 187920,345,1374,11,1,
18793320,0,1375,4,22,
1879486,0,69,0,67,
187950,84,0,79,0,
1879682,0,95,0,84,
187970,89,0,80,0,
1879869,0,1,-1,3,
18241115,0,345,3,116, 18799115,0,345,3,116,
182420,345,3,117,0, 188000,345,3,117,0,
18243345,3,118,0,345, 18801345,3,118,0,345,
@@ -18283,315 +18841,676 @@ public class yyLSLTokens : YyLexer {
18283345,3,105,0,345, 18841345,3,105,0,345,
182843,106,0,345,3, 188423,106,0,345,3,
18285107,0,345,3,108, 18843107,0,345,3,108,
182860,345,1339,11,1, 188440,345,1376,11,1,
18287229,0,1340,4,10, 18845867,0,348,1,-1,
1828887,0,72,0,73, 188463,112,0,345,3,
182890,76,0,69,0, 18847113,0,345,3,114,
182901,-1,3,102,0, 188480,345,3,115,0,
18849345,3,116,0,345,
188503,117,0,345,3,
18851118,0,345,3,119,
188520,345,3,120,0,
18853345,3,121,0,345,
188543,122,0,345,3,
1885548,0,345,3,49,
188560,345,3,50,0,
18857345,3,51,0,345,
188583,52,0,345,3,
1885953,0,345,3,54,
188600,345,3,55,0,
18861345,3,56,0,345,
188623,57,0,345,3,
1886365,0,345,3,66,
188640,345,3,67,0,
18865345,3,68,0,345,
188663,69,0,345,3,
1886770,0,345,3,71,
188680,345,3,72,0,
18869345,3,73,0,345,
188703,74,0,345,3,
1887175,0,345,3,76,
188720,345,3,77,0,
18873345,3,78,0,345,
188743,79,0,345,3,
1887580,0,345,3,81,
188760,345,3,82,0,
18877345,3,83,0,345,
188783,84,0,345,3,
1887985,0,345,3,86,
188800,345,3,87,0,
18881345,3,88,0,345,
188823,89,0,345,3,
1888390,0,345,3,95,
188840,345,3,97,0,
18885345,3,98,0,345,
188863,99,0,345,3,
18887100,0,345,3,101,
188880,345,3,102,0,
18291345,3,103,0,345, 18889345,3,103,0,345,
182923,104,0,345,3, 188903,104,0,345,3,
18293105,0,345,3,106, 18891105,0,345,3,106,
182940,345,3,107,0, 188920,345,3,107,0,
18295345,3,108,0,345, 18893345,3,108,0,345,
182961341,11,1,845,0, 188941377,11,1,867,0,
18297348,1,-1,1342,11, 18895348,1,-1,3,117,
182981,845,0,348,1, 188960,345,3,118,0,
18299-1,3,106,0,345, 18897345,3,119,0,345,
188983,120,0,345,3,
18899121,0,345,3,122,
189000,345,3,48,0,
18901345,3,49,0,345,
189023,50,0,345,3,
1890351,0,345,3,52,
189040,345,3,53,0,
18905345,3,54,0,345,
189063,55,0,345,3,
1890756,0,345,3,57,
189080,345,3,65,0,
18909345,3,66,0,345,
189103,67,0,345,3,
1891168,0,345,3,69,
189120,345,3,70,0,
18913345,3,71,0,345,
189143,72,0,345,3,
1891573,0,345,3,74,
189160,345,3,75,0,
18917345,3,76,0,345,
189183,77,0,345,3,
1891978,0,345,3,79,
189200,345,3,80,0,
18921345,3,81,0,345,
189223,82,0,345,3,
1892383,0,345,3,84,
189240,345,3,85,0,
18925345,3,86,0,345,
189263,87,0,345,3,
1892788,0,345,3,89,
189280,345,3,90,0,
18929345,3,95,0,345,
189303,97,0,345,3,
1893198,0,345,3,99,
189320,345,3,100,0,
18933345,3,101,0,345,
189343,102,0,345,3,
18935103,0,345,3,104,
189360,345,3,105,0,
18937345,3,106,0,345,
183003,107,0,345,3, 189383,107,0,345,3,
18301108,0,345,1343,11, 18939108,0,345,1378,11,
183021,845,0,348,1, 189401,867,0,348,1,
18303-1,3,105,0,345, 18941-1,3,100,0,345,
189423,101,0,345,3,
18943102,0,345,3,103,
189440,345,3,104,0,
18945345,3,105,0,345,
183043,106,0,345,3, 189463,106,0,345,3,
18305107,0,345,3,108, 18947107,0,345,3,108,
183060,345,1344,11,1, 189480,345,1379,11,1,
18307845,0,348,1,-1, 18949867,0,348,1,-1,
183083,120,0,343,3, 189503,102,0,345,3,
18309121,0,343,3,122, 18951103,0,345,3,104,
183100,343,3,123,0, 189520,345,3,105,0,
183111345,12,1,41003,1346, 18953345,3,106,0,345,
183125,0,1347,11,1, 189543,107,0,345,3,
1831351,0,1348,4,20, 18955108,0,345,1380,11,
1831476,0,69,0,70, 189561,867,0,348,1,
183150,84,0,95,0, 18957-1,3,119,0,1381,
1831666,0,82,0,65, 1895812,1,22134,1382,5,
183170,67,0,69,0, 1895963,3,109,0,345,
183181,-1,3,124,0, 189603,110,0,345,3,
183191349,12,1,43906,1350, 18961111,0,345,3,112,
183205,1,3,124,0, 189620,345,3,113,0,
183211351,12,1,44018,1352, 18963345,3,114,0,345,
183225,0,1353,11,1, 189643,115,0,345,3,
18323191,0,1354,4,26, 18965116,0,345,3,117,
1832483,0,84,0,82, 189660,345,3,118,0,
183250,79,0,75,0, 18967345,3,119,0,345,
1832669,0,95,0,83, 189683,120,0,345,3,
183270,84,0,82,0, 18969121,0,345,3,122,
1832879,0,75,0,69, 189700,345,3,48,0,
183290,1,-1,1355,11, 18971345,3,49,0,345,
183301,165,0,1356,4, 189723,50,0,345,3,
1833112,83,0,84,0, 1897351,0,345,3,52,
189740,345,3,53,0,
18975345,3,54,0,345,
189763,55,0,345,3,
1897756,0,345,3,57,
189780,345,3,65,0,
18979345,3,66,0,345,
189803,67,0,345,3,
1898168,0,345,3,69,
189820,345,3,70,0,
18983345,3,71,0,345,
189843,72,0,345,3,
1898573,0,345,3,74,
189860,345,3,75,0,
18987345,3,76,0,345,
189883,77,0,345,3,
1898978,0,345,3,79,
189900,345,3,80,0,
18991345,3,81,0,345,
189923,82,0,345,3,
1899383,0,345,3,84,
189940,345,3,85,0,
18995345,3,86,0,345,
189963,87,0,345,3,
1899788,0,345,3,89,
189980,345,3,90,0,
18999345,3,95,0,345,
190003,97,0,345,3,
1900198,0,345,3,99,
190020,345,3,100,0,
19003345,3,101,0,345,
190043,102,0,345,3,
19005103,0,345,3,104,
190060,1383,12,1,22184,
190071384,5,63,3,109,
190080,345,3,110,0,
19009345,3,111,0,345,
190103,112,0,345,3,
19011113,0,345,3,114,
190120,345,3,115,0,
19013345,3,116,0,345,
190143,117,0,345,3,
19015118,0,345,3,119,
190160,345,3,120,0,
19017345,3,121,0,345,
190183,122,0,345,3,
1901948,0,345,3,49,
190200,345,3,50,0,
19021345,3,51,0,345,
190223,52,0,345,3,
1902353,0,345,3,54,
190240,345,3,55,0,
19025345,3,56,0,345,
190263,57,0,345,3,
1902765,0,345,3,66,
190280,345,3,67,0,
19029345,3,68,0,345,
190303,69,0,345,3,
1903170,0,345,3,71,
190320,345,3,72,0,
19033345,3,73,0,345,
190343,74,0,345,3,
1903575,0,345,3,76,
190360,345,3,77,0,
19037345,3,78,0,345,
190383,79,0,345,3,
1903980,0,345,3,81,
190400,345,3,82,0,
19041345,3,83,0,345,
190423,84,0,345,3,
1904385,0,345,3,86,
190440,345,3,87,0,
19045345,3,88,0,345,
190463,89,0,345,3,
1904790,0,345,3,95,
190480,345,3,97,0,
19049345,3,98,0,345,
190503,99,0,345,3,
19051100,0,345,3,101,
190520,345,3,102,0,
19053345,3,103,0,345,
190543,104,0,345,3,
19055105,0,1385,12,1,
1905622235,1386,5,63,3,
19057109,0,345,3,110,
190580,345,3,111,0,
19059345,3,112,0,345,
190603,113,0,345,3,
19061114,0,345,3,115,
190620,345,3,116,0,
19063345,3,117,0,345,
190643,118,0,345,3,
19065119,0,345,3,120,
190660,345,3,121,0,
19067345,3,122,0,345,
190683,48,0,345,3,
1906949,0,345,3,50,
190700,345,3,51,0,
19071345,3,52,0,345,
190723,53,0,345,3,
1907354,0,345,3,55,
190740,345,3,56,0,
19075345,3,57,0,345,
190763,65,0,345,3,
1907766,0,345,3,67,
190780,345,3,68,0,
19079345,3,69,0,345,
190803,70,0,345,3,
1908171,0,345,3,72,
190820,345,3,73,0,
19083345,3,74,0,345,
190843,75,0,345,3,
1908576,0,345,3,77,
190860,345,3,78,0,
19087345,3,79,0,345,
190883,80,0,345,3,
1908981,0,345,3,82,
190900,345,3,83,0,
19091345,3,84,0,345,
190923,85,0,345,3,
1909386,0,345,3,87,
190940,345,3,88,0,
19095345,3,89,0,345,
190963,90,0,345,3,
1909795,0,345,3,97,
190980,345,3,98,0,
19099345,3,99,0,345,
191003,100,0,345,3,
19101101,0,345,3,102,
191020,345,3,103,0,
19103345,3,104,0,345,
191043,105,0,345,3,
19105106,0,345,3,107,
191060,345,3,108,0,
191071387,12,1,22289,1388,
191085,63,3,109,0,
19109345,3,110,0,345,
191103,111,0,345,3,
19111112,0,345,3,113,
191120,345,3,114,0,
19113345,3,115,0,345,
191143,116,0,345,3,
19115117,0,345,3,118,
191160,345,3,119,0,
19117345,3,120,0,345,
191183,121,0,345,3,
19119122,0,345,3,48,
191200,345,3,49,0,
19121345,3,50,0,345,
191223,51,0,345,3,
1912352,0,345,3,53,
191240,345,3,54,0,
19125345,3,55,0,345,
191263,56,0,345,3,
1912757,0,345,3,65,
191280,345,3,66,0,
19129345,3,67,0,345,
191303,68,0,345,3,
1913169,0,345,3,70,
191320,345,3,71,0,
19133345,3,72,0,345,
191343,73,0,345,3,
1913574,0,345,3,75,
191360,345,3,76,0,
19137345,3,77,0,345,
191383,78,0,345,3,
1913979,0,345,3,80,
191400,345,3,81,0,
19141345,3,82,0,345,
191423,83,0,345,3,
1914384,0,345,3,85,
191440,345,3,86,0,
19145345,3,87,0,345,
191463,88,0,345,3,
1914789,0,345,3,90,
191480,345,3,95,0,
19149345,3,97,0,345,
191503,98,0,345,3,
1915199,0,345,3,100,
191520,345,3,101,0,
191531389,12,1,22336,1390,
191545,63,3,109,0,
19155345,3,110,0,345,
191563,111,0,345,3,
19157112,0,345,3,113,
191580,345,3,114,0,
19159345,3,115,0,345,
191603,116,0,345,3,
19161117,0,345,3,118,
191620,345,3,119,0,
19163345,3,120,0,345,
191643,121,0,345,3,
19165122,0,345,3,48,
191660,345,3,49,0,
19167345,3,50,0,345,
191683,51,0,345,3,
1916952,0,345,3,53,
191700,345,3,54,0,
19171345,3,55,0,345,
191723,56,0,345,3,
1917357,0,345,3,65,
191740,345,3,66,0,
19175345,3,67,0,345,
191763,68,0,345,3,
1917769,0,345,3,70,
191780,345,3,71,0,
19179345,3,72,0,345,
191803,73,0,345,3,
1918174,0,345,3,75,
191820,345,3,76,0,
19183345,3,77,0,345,
191843,78,0,345,3,
1918579,0,345,3,80,
191860,345,3,81,0,
19187345,3,82,0,345,
191883,83,0,345,3,
1918984,0,345,3,85,
191900,345,3,86,0,
19191345,3,87,0,345,
191923,88,0,345,3,
1919389,0,345,3,90,
191940,345,3,95,0,
19195345,3,97,0,345,
191963,98,0,345,3,
1919799,0,345,3,100,
191980,345,3,101,0,
19199345,3,102,0,345,
192003,103,0,345,3,
19201104,0,345,3,105,
192020,345,3,106,0,
19203345,3,107,0,345,
192043,108,0,345,1391,
1920511,1,229,0,1392,
192064,10,87,0,72,
192070,73,0,76,0,
1920869,0,1,-1,3,
19209102,0,345,3,103,
192100,345,3,104,0,
19211345,3,105,0,345,
192123,106,0,345,3,
19213107,0,345,3,108,
192140,345,1393,11,1,
19215867,0,348,1,-1,
192161394,11,1,867,0,
19217348,1,-1,3,106,
192180,345,3,107,0,
19219345,3,108,0,345,
192201395,11,1,867,0,
19221348,1,-1,3,105,
192220,345,3,106,0,
19223345,3,107,0,345,
192243,108,0,345,1396,
1922511,1,867,0,348,
192261,-1,3,120,0,
19227343,3,121,0,343,
192283,122,0,343,3,
19229123,0,1397,12,1,
1923043065,1398,5,0,1399,
1923111,1,51,0,1400,
192324,20,76,0,69,
192330,70,0,84,0,
1923495,0,66,0,82,
192350,65,0,67,0,
1923669,0,1,-1,3,
19237124,0,1401,12,1,
1923845968,1402,5,1,3,
19239124,0,1403,12,1,
1924046080,1404,5,0,1405,
1924111,1,191,0,1406,
192424,26,83,0,84,
192430,82,0,79,0,
1924475,0,69,0,95,
192450,83,0,84,0,
1833282,0,79,0,75, 1924682,0,79,0,75,
183330,69,0,1,-1, 192470,69,0,1,-1,
183343,125,0,1357,12, 192481407,11,1,165,0,
183351,41368,1358,5,0, 192491408,4,12,83,0,
183361359,11,1,56,0, 1925084,0,82,0,79,
183371360,4,22,82,0, 192510,75,0,69,0,
1833873,0,71,0,72, 192521,-1,3,125,0,
183390,84,0,95,0, 192531409,12,1,43430,1410,
1834066,0,82,0,65, 192545,0,1411,11,1,
183410,67,0,69,0, 1925556,0,1412,4,22,
183421,-1,3,126,0, 1925682,0,73,0,71,
183431361,12,1,44147,1362, 192570,72,0,84,0,
183445,0,1363,11,1, 1925895,0,66,0,82,
18345175,0,1364,4,10, 192590,65,0,67,0,
1834684,0,73,0,76, 1926069,0,1,-1,3,
183470,68,0,69,0, 19261126,0,1413,12,1,
183481,-1,0,165,1, 1926246209,1414,5,0,1415,
18349-1,1365,4,12,83, 1926311,1,175,0,1416,
183500,84,0,82,0, 192644,10,84,0,73,
1835173,0,78,0,71, 192650,76,0,68,0,
183520,1366,12,1,45715, 1926669,0,1,-1,0,
183531367,5,119,3,1, 19267165,1,-1,1417,4,
183540,1368,12,1,45716, 1926812,83,0,84,0,
183551369,5,0,1370,11, 1926982,0,73,0,78,
183561,946,0,165,1, 192700,71,0,1418,12,
18357-1,3,9,0,1368, 192711,47777,1419,5,119,
183583,10,0,1371,12, 192723,1,0,1420,12,
183591,45917,1372,5,0, 192731,47778,1421,5,0,
183601373,11,1,952,0, 192741422,11,1,968,0,
18361165,1,-1,3,13, 19275165,1,-1,3,9,
183620,1368,3,0,3, 192760,1420,3,10,0,
183631368,3,96,33,1368, 192771423,12,1,47979,1424,
183643,32,0,1368,3, 192785,0,1425,11,1,
1836533,0,1368,3,34, 19279974,0,165,1,-1,
183660,1374,12,1,46664, 192803,13,0,1420,3,
183671375,5,0,1376,11, 192810,3,1420,3,0,
183681,1010,0,165,1, 192826,1420,3,32,0,
18369-1,3,35,0,1368, 192831420,3,33,0,1420,
183703,36,0,1368,3, 192843,34,0,1426,12,
1837137,0,1368,3,38, 192851,48726,1427,5,0,
183720,1368,3,40,0, 192861428,11,1,1032,0,
183731368,3,41,0,1368, 19287165,1,-1,3,35,
183743,42,0,1368,3, 192880,1420,3,36,0,
1837543,0,1368,3,44, 192891420,3,37,0,1420,
183760,1368,3,45,0, 192903,38,0,1420,3,
183771368,3,46,0,1368, 1929140,0,1420,3,41,
183783,47,0,1368,3, 192920,1420,3,42,0,
183793,9,1368,3,49, 192931420,3,43,0,1420,
183800,1368,3,50,0, 192943,44,0,1420,3,
183811368,3,48,0,1368, 1929545,0,1420,3,46,
183823,52,0,1368,3, 192960,1420,3,47,0,
1838353,0,1368,3,51, 192971420,3,3,9,1420,
183840,1368,3,55,0, 192983,49,0,1420,3,
183851368,3,56,0,1368, 1929950,0,1420,3,48,
183863,54,0,1368,3, 193000,1420,3,52,0,
1838759,0,1368,3,57, 193011420,3,53,0,1420,
183880,1368,3,61,0, 193023,51,0,1420,3,
183891368,3,62,0,1368, 1930355,0,1420,3,56,
183903,60,0,1368,3, 193040,1420,3,54,0,
1839164,0,1368,3,65, 193051420,3,59,0,1420,
183920,1368,3,66,0, 193063,57,0,1420,3,
183931368,3,67,0,1368, 1930761,0,1420,3,62,
183943,68,0,1368,3, 193080,1420,3,60,0,
1839569,0,1368,3,70, 193091420,3,64,0,1420,
183960,1368,3,71,0, 193103,65,0,1420,3,
183971368,3,72,0,1368, 1931166,0,1420,3,67,
183983,73,0,1368,3, 193120,1420,3,68,0,
1839974,0,1368,3,75, 193131420,3,69,0,1420,
184000,1368,3,76,0, 193143,70,0,1420,3,
184011368,3,77,0,1368, 1931571,0,1420,3,72,
184023,78,0,1368,3, 193160,1420,3,73,0,
1840379,0,1368,3,80, 193171420,3,74,0,1420,
184040,1368,3,81,0, 193183,75,0,1420,3,
184051368,3,82,0,1368, 1931976,0,1420,3,77,
184063,83,0,1368,3, 193200,1420,3,78,0,
1840784,0,1368,3,85, 193211420,3,79,0,1420,
184080,1368,3,86,0, 193223,80,0,1420,3,
184091368,3,87,0,1368, 1932381,0,1420,3,82,
184103,88,0,1368,3, 193240,1420,3,83,0,
1841189,0,1368,3,90, 193251420,3,84,0,1420,
184120,1368,3,91,0, 193263,85,0,1420,3,
184131368,3,92,0,1377, 1932786,0,1420,3,87,
1841412,1,46060,1378,5, 193280,1420,3,88,0,
184154,3,110,0,1379, 193291420,3,89,0,1420,
1841612,1,46089,1380,5, 193303,90,0,1420,3,
184170,1381,11,1,957, 1933191,0,1420,3,92,
193320,1429,12,1,48122,
193331430,5,4,3,110,
193340,1431,12,1,48151,
193351432,5,0,1433,11,
193361,979,0,165,1,
19337-1,3,34,0,1434,
1933812,1,48591,1435,5,
193390,1436,11,1,1003,
184180,165,1,-1,3, 193400,165,1,-1,3,
1841934,0,1382,12,1, 1934192,0,1437,12,1,
1842046529,1383,5,0,1384, 1934248467,1438,5,0,1439,
1842111,1,981,0,165, 1934311,1,1015,0,165,
184221,-1,3,92,0, 193441,-1,3,116,0,
184231385,12,1,46405,1386, 193451440,12,1,48277,1441,
184245,0,1387,11,1, 193465,0,1442,11,1,
18425993,0,165,1,-1, 19347991,0,165,1,-1,
184263,116,0,1388,12, 193481443,11,1,1027,0,
184271,46215,1389,5,0, 19349165,1,-1,3,93,
184281390,11,1,969,0, 193500,1420,3,94,0,
18429165,1,-1,1391,11, 193511420,3,95,0,1420,
184301,1005,0,165,1, 193523,96,0,1420,3,
18431-1,3,93,0,1368, 19353238,22,1420,3,98,
184323,94,0,1368,3, 193540,1420,3,99,0,
1843395,0,1368,3,96, 193551420,3,100,0,1420,
184340,1368,3,97,0, 193563,101,0,1420,3,
184351368,3,98,0,1368, 1935797,0,1420,3,103,
184363,99,0,1368,3, 193580,1420,3,104,0,
18437100,0,1368,3,101, 193591420,3,105,0,1420,
184380,1368,3,102,0, 193603,106,0,1420,3,
184391368,3,103,0,1368, 19361102,0,1420,3,108,
184403,104,0,1368,3, 193620,1420,3,109,0,
18441105,0,1368,3,106, 193631420,3,110,0,1420,
184420,1368,3,107,0, 193643,111,0,1420,3,
184431368,3,108,0,1368, 19365112,0,1420,3,113,
184443,109,0,1368,3, 193660,1420,3,114,0,
18445110,0,1368,3,111, 193671420,3,115,0,1420,
184460,1368,3,112,0, 193683,116,0,1420,3,
184471368,3,113,0,1368, 19369117,0,1420,3,118,
184483,114,0,1368,3, 193700,1420,3,119,0,
18449115,0,1368,3,116, 193711420,3,120,0,1420,
184500,1368,3,117,0, 193723,121,0,1420,3,
184511368,3,118,0,1368, 19373122,0,1420,3,123,
184523,119,0,1368,3, 193740,1420,3,124,0,
18453120,0,1368,3,121, 193751420,3,125,0,1420,
184540,1368,3,122,0, 193763,96,6,1420,3,
184551368,3,123,0,1368, 19377107,0,1420,3,126,
184563,124,0,1368,3, 193780,1420,3,58,15,
18457125,0,1368,3,96, 193791420,3,59,15,1420,
184586,1368,3,126,0, 193803,136,4,1420,3,
184591368,3,58,15,1368, 19381160,0,1420,3,170,
184603,59,15,1368,3, 193820,1420,3,171,0,
18461136,4,1368,3,160, 193831420,3,172,0,1420,
184620,1368,3,15,7, 193843,173,0,1420,3,
184631368,3,170,0,1368, 19385178,0,1420,3,176,
184643,171,0,1368,3, 193862,1420,3,187,0,
18465172,0,1368,3,173, 193871420,3,187,1,1420,
184660,1368,3,178,0, 193883,192,0,1420,3,
184671368,3,176,2,1368, 1938941,32,1420,3,197,
184683,187,0,1368,3, 193901,1420,3,0,224,
18469187,1,1368,3,192, 193911420,3,40,32,1420,
184700,1368,3,41,32, 193923,63,32,1420,0,
184711368,3,197,1,1368, 19393165,1,-1,1444,5,
184723,0,224,1368,3, 1939494,251,1445,10,251,
1847340,32,1368,3,63, 193951,19,573,1446,10,
1847432,1368,0,165,1, 19396573,1,47,301,1447,
18475-1,1392,5,93,251, 1939710,301,1,94,1172,
184761393,10,251,1,19, 193981448,10,1172,1,50,
18477573,1394,10,573,1, 193991041,1449,10,1041,1,
1847847,301,1395,10,301, 1940080,1191,1450,10,1191,
184791,93,1172,1396,10, 194011,53,188,1451,10,
184801172,1,50,1041,1397, 19402188,1,37,602,1452,
1848110,1041,1,80,1191, 1940310,602,1,43,700,
184821398,10,1191,1,53, 194041453,10,700,1,51,
18483188,1399,10,188,1, 19405613,1454,10,613,1,
1848437,602,1400,10,602, 1940646,1331,1455,10,1331,
184851,43,700,1401,10, 194071,92,211,1456,10,
18486700,1,51,613,1402, 19408211,1,16,215,1457,
1848710,613,1,46,211, 1940910,215,1,17,672,
184881403,10,211,1,16, 194101458,10,672,1,68,
18489215,1404,10,215,1, 19411901,1459,10,901,1,
1849017,672,1405,10,672, 1941275,361,1460,10,361,
184911,68,901,1406,10, 194131,35,223,1461,10,
18492901,1,75,361,1407, 19414223,1,20,229,1462,
1849310,361,1,35,223, 1941510,229,1,6,199,
184941408,10,223,1,20, 194161463,10,199,1,22,
18495229,1409,10,229,1, 19417286,1464,10,286,1,
184966,199,1410,10,199, 1941821,265,1465,10,265,
184971,22,286,1411,10, 194191,96,1292,1466,10,
18498286,1,21,265,1412, 194201292,1,88,481,1467,
1849910,265,1,95,1292, 1942110,481,1,64,720,
185001413,10,1292,1,88, 194221468,10,720,1,49,
18501481,1414,10,481,1, 19423357,1469,10,357,1,
1850264,720,1415,10,720, 1942428,318,1470,10,318,
185031,49,357,1416,10, 194251,25,709,1471,10,
18504357,1,28,318,1417, 19426709,1,42,792,1472,
1850510,318,1,25,709, 1942710,792,1,69,1231,
185061418,10,709,1,42, 194281473,10,1231,1,48,
18507792,1419,10,792,1, 19429336,1474,10,336,1,
1850869,1231,1420,10,1231, 1943041,850,1475,10,850,
185091,48,336,1421,10, 194311,57,654,1476,10,
18510336,1,41,850,1422, 19432654,1,91,233,1477,
1851110,850,1,57,654, 1943310,233,1,4,342,
185121423,10,654,1,91, 194341478,10,342,1,23,
18513233,1424,10,233,1, 19435493,1479,10,493,1,
185144,342,1425,10,342, 1943663,1246,1480,10,1246,
185151,23,493,1426,10, 194371,84,324,1481,10,
18516493,1,63,1246,1427, 19438324,1,29,245,1482,
1851710,1246,1,84,324, 1943910,245,1,5,316,
185181428,10,324,1,29, 194401483,10,316,1,31,
18519245,1429,10,245,1, 19441624,1484,10,624,1,
185205,316,1430,10,316, 1944252,889,1485,10,889,
185211,31,624,1431,10, 194431,76,1114,1486,10,
18522624,1,52,889,1432, 194441114,1,83,1017,1487,
1852310,889,1,76,1114, 1944510,1017,1,81,995,
185241433,10,1114,1,83, 194461488,10,995,1,77,
185251017,1434,10,1017,1, 19447186,1489,10,186,1,
1852681,995,1435,10,995, 1944830,249,1490,10,249,
185271,77,186,1436,10, 194491,7,847,1491,10,
18528186,1,30,249,1437, 19450847,1,73,197,1492,
1852910,249,1,7,847, 1945110,197,1,10,353,
185301438,10,847,1,73, 194521493,10,353,1,27,
18531197,1439,10,197,1, 19453294,1494,10,294,1,
1853210,353,1440,10,353, 1945495,239,1495,10,239,
185331,27,294,1441,10, 194551,14,269,1496,10,
18534294,1,94,239,1442, 19456269,1,24,731,1497,
1853510,239,1,14,269, 1945710,731,1,54,281,
185361443,10,269,1,24, 194581498,10,281,1,9,
18537731,1444,10,731,1, 194591225,1499,10,1225,1,
1853854,281,1445,10,281, 1946086,498,1500,10,498,
185391,9,1225,1446,10, 194611,62,1501,4,30,
185401225,1,86,498,1447, 1946283,0,84,0,82,
1854110,498,1,62,1448, 194630,73,0,78,0,
185424,30,83,0,84, 1946471,0,95,0,67,
185430,82,0,73,0, 194650,79,0,78,0,
1854478,0,71,0,95, 1946683,0,84,0,65,
185450,67,0,79,0, 194670,78,0,84,0,
1854678,0,83,0,84, 194681502,10,1501,1,3,
185470,65,0,78,0, 194691392,1503,10,1392,1,
1854884,0,1449,10,1448, 1947045,348,1504,10,348,
185491,3,1340,1450,10, 194711,93,551,1505,10,
185501340,1,45,348,1451, 19472551,1,66,1068,1506,
1855110,348,1,92,551, 1947310,1068,1,56,402,
185521452,10,551,1,66, 194741507,10,402,1,58,
185531068,1453,10,1068,1, 194751400,1508,10,1400,1,
1855456,402,1454,10,402, 1947612,531,1509,10,531,
185551,58,1348,1455,10, 194771,44,312,1510,10,
185561348,1,12,531,1456, 19478312,1,40,1154,1511,
1855710,531,1,44,312, 1947910,1154,1,82,591,
185581457,10,312,1,40, 194801512,10,591,1,67,
185591154,1458,10,1154,1, 19481946,1513,10,946,1,
1856082,591,1459,10,591, 1948278,1416,1514,10,1416,
185611,67,946,1460,10, 194831,36,1408,1515,10,
18562946,1,78,1364,1461, 194841408,1,34,787,1516,
1856310,1364,1,36,1356, 1948510,787,1,70,1357,
185641462,10,1356,1,34, 194861517,10,1357,1,87,
18565787,1463,10,787,1, 19487865,1518,10,865,1,
1856670,1305,1464,10,1305, 1948874,338,1519,10,338,
185671,87,865,1465,10, 194891,26,425,1520,10,
18568865,1,74,338,1466, 19490425,1,59,207,1521,
1856910,338,1,26,425, 1949110,207,1,33,306,
185701467,10,425,1,59, 194921522,10,306,1,11,
18571207,1468,10,207,1, 19493205,1523,10,205,1,
1857233,306,1469,10,306, 1949438,519,1524,10,519,
185731,11,205,1470,10, 194951,61,828,1525,10,
18574205,1,38,519,1471, 19496828,1,72,1287,1526,
1857510,519,1,61,828, 1949710,1287,1,90,326,
185761472,10,828,1,72, 194981527,10,326,1,15,
185771287,1473,10,1287,1, 19499969,1528,10,969,1,
1857890,326,1474,10,326, 1950079,1406,1529,10,1406,
185791,15,969,1475,10, 195011,39,332,1530,10,
18580969,1,79,1354,1476, 19502332,1,32,1275,1531,
1858110,1354,1,39,332, 1950310,1275,1,89,375,
185821477,10,332,1,32, 195041532,10,375,1,60,
185831275,1478,10,1275,1, 195051375,1533,10,1375,1,
1858489,375,1479,10,375, 1950655,1412,1534,10,1412,
185851,60,1323,1480,10, 195071,13,1214,1535,10,
185861323,1,55,1360,1481, 195081214,1,85,235,1536,
1858710,1360,1,13,1214, 1950910,235,1,18,221,
185881482,10,1214,1,85, 195101537,10,221,1,8,
18589235,1483,10,235,1, 19511775,1538,10,775,1,
1859018,221,1484,10,221, 1951271,449,1539,10,449,
185911,8,775,1485,10, 195131,65,1540,5,0,0};
18592775,1,71,449,1486,
1859310,449,1,65,1487,
185945,0,0};
18595 new Tfactory(this,"MINUS",new TCreator(MINUS_factory)); 19514 new Tfactory(this,"MINUS",new TCreator(MINUS_factory));
18596 new Tfactory(this,"DEFAULT_STATE",new TCreator(DEFAULT_STATE_factory)); 19515 new Tfactory(this,"DEFAULT_STATE",new TCreator(DEFAULT_STATE_factory));
18597 new Tfactory(this,"INTEGER_CONSTANT",new TCreator(INTEGER_CONSTANT_factory)); 19516 new Tfactory(this,"INTEGER_CONSTANT",new TCreator(INTEGER_CONSTANT_factory));
@@ -18602,6 +19521,7 @@ public class yyLSLTokens : YyLexer {
18602 new Tfactory(this,"ELSE",new TCreator(ELSE_factory)); 19521 new Tfactory(this,"ELSE",new TCreator(ELSE_factory));
18603 new Tfactory(this,"INTEGER_TYPE",new TCreator(INTEGER_TYPE_factory)); 19522 new Tfactory(this,"INTEGER_TYPE",new TCreator(INTEGER_TYPE_factory));
18604 new Tfactory(this,"FOR",new TCreator(FOR_factory)); 19523 new Tfactory(this,"FOR",new TCreator(FOR_factory));
19524 new Tfactory(this,"TRANSACTION_RESULT_EVENT",new TCreator(TRANSACTION_RESULT_EVENT_factory));
18605 new Tfactory(this,"LEFT_PAREN",new TCreator(LEFT_PAREN_factory)); 19525 new Tfactory(this,"LEFT_PAREN",new TCreator(LEFT_PAREN_factory));
18606 new Tfactory(this,"RIGHT_PAREN",new TCreator(RIGHT_PAREN_factory)); 19526 new Tfactory(this,"RIGHT_PAREN",new TCreator(RIGHT_PAREN_factory));
18607 new Tfactory(this,"HTTP_RESPONSE_EVENT",new TCreator(HTTP_RESPONSE_EVENT_factory)); 19527 new Tfactory(this,"HTTP_RESPONSE_EVENT",new TCreator(HTTP_RESPONSE_EVENT_factory));
@@ -18696,6 +19616,7 @@ public static object EXCLAMATION_factory(Lexer yyl) { return new EXCLAMATION(yyl
18696public static object ELSE_factory(Lexer yyl) { return new ELSE(yyl);} 19616public static object ELSE_factory(Lexer yyl) { return new ELSE(yyl);}
18697public static object INTEGER_TYPE_factory(Lexer yyl) { return new INTEGER_TYPE(yyl);} 19617public static object INTEGER_TYPE_factory(Lexer yyl) { return new INTEGER_TYPE(yyl);}
18698public static object FOR_factory(Lexer yyl) { return new FOR(yyl);} 19618public static object FOR_factory(Lexer yyl) { return new FOR(yyl);}
19619public static object TRANSACTION_RESULT_EVENT_factory(Lexer yyl) { return new TRANSACTION_RESULT_EVENT(yyl);}
18699public static object LEFT_PAREN_factory(Lexer yyl) { return new LEFT_PAREN(yyl);} 19620public static object LEFT_PAREN_factory(Lexer yyl) { return new LEFT_PAREN(yyl);}
18700public static object RIGHT_PAREN_factory(Lexer yyl) { return new RIGHT_PAREN(yyl);} 19621public static object RIGHT_PAREN_factory(Lexer yyl) { return new RIGHT_PAREN(yyl);}
18701public static object HTTP_RESPONSE_EVENT_factory(Lexer yyl) { return new HTTP_RESPONSE_EVENT(yyl);} 19622public static object HTTP_RESPONSE_EVENT_factory(Lexer yyl) { return new HTTP_RESPONSE_EVENT(yyl);}
@@ -18782,35 +19703,35 @@ public static object CONTROL_EVENT_factory(Lexer yyl) { return new CONTROL_EVENT
18782public override TOKEN OldAction(Lexer yym,ref string yytext,int action, ref bool reject) { 19703public override TOKEN OldAction(Lexer yym,ref string yytext,int action, ref bool reject) {
18783 switch(action) { 19704 switch(action) {
18784 case -1: break; 19705 case -1: break;
18785 case 946: { ((LSLTokens)yym).str += yytext; } 19706 case 1015: { ((LSLTokens)yym).str += "\\\\"; }
18786 break; 19707 break;
18787 case 1010: { yym.yy_begin("YYINITIAL"); ((LSLTokens)yym).yytext = ((LSLTokens)yym).str; ((LSLTokens)yym).str = String.Empty; return new STRING_CONSTANT(yym); } 19708 case 991: { ((LSLTokens)yym).str += " "; }
18788 break; 19709 break;
18789 case 1015: { yym.yy_begin("COMMENT"); } 19710 case 963: { yym.yy_begin("STRING"); ((LSLTokens)yym).str = "";}
18790 break; 19711 break;
18791 case 1027: { yym.yy_begin("YYINITIAL"); } 19712 case 1037: { yym.yy_begin("COMMENT"); }
18792 break; 19713 break;
18793 case 1041: ; 19714 case 1049: { yym.yy_begin("YYINITIAL"); }
18794 break; 19715 break;
18795 case 1045: ; 19716 case 1027: { ((LSLTokens)yym).str += '\\'; }
18796 break; 19717 break;
18797 case 1054: ; 19718 case 1063: ;
18798 break; 19719 break;
18799 case 1005: { ((LSLTokens)yym).str += '\\'; } 19720 case 1076: ;
18800 break; 19721 break;
18801 case 1050: ; 19722 case 1032: { yym.yy_begin("YYINITIAL"); ((LSLTokens)yym).yytext = ((LSLTokens)yym).str; ((LSLTokens)yym).str = String.Empty; return new STRING_CONSTANT(yym); }
18802 break; 19723 break;
18803 case 941: { yym.yy_begin("STRING"); ((LSLTokens)yym).str = "";} 19724 case 1067: ;
18804 break; 19725 break;
18805 case 957: { ((LSLTokens)yym).str += "\\n"; } 19726 case 1072: ;
18806 break; 19727 break;
18807 case 969: { ((LSLTokens)yym).str += " "; } 19728 case 1003: { ((LSLTokens)yym).str += "\\\""; }
18808 break; 19729 break;
18809 case 981: { ((LSLTokens)yym).str += "\\\""; } 19730 case 974: { ((LSLTokens)yym).str += "\\n"; }
18810 break; 19731 break;
18811 case 952: { ((LSLTokens)yym).str += "\\n"; } 19732 case 979: { ((LSLTokens)yym).str += "\\n"; }
18812 break; 19733 break;
18813 case 993: { ((LSLTokens)yym).str += "\\\\"; } 19734 case 968: { ((LSLTokens)yym).str += yytext; }
18814 break; 19735 break;
18815 } 19736 }
18816 return null; 19737 return null;
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.parser.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.parser.cs
index 44957bd..5fef83c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.parser.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/lsl.parser.cs
@@ -1,6 +1,6 @@
1using System;using Tools; 1using System;using Tools;
2namespace OpenSim.Region.ScriptEngine.Shared.CodeTools { 2namespace OpenSim.Region.ScriptEngine.Shared.CodeTools {
3//%+LSLProgramRoot+96 3//%+LSLProgramRoot+97
4public class LSLProgramRoot : SYMBOL{ 4public class LSLProgramRoot : SYMBOL{
5 public LSLProgramRoot (Parser yyp, States s ):base(((LSLSyntax 5 public LSLProgramRoot (Parser yyp, States s ):base(((LSLSyntax
6)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ()); 6)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ());
@@ -11,9 +11,9 @@ public class LSLProgramRoot : SYMBOL{
11} 11}
12 12
13public override string yyname { get { return "LSLProgramRoot"; }} 13public override string yyname { get { return "LSLProgramRoot"; }}
14public override int yynum { get { return 96; }} 14public override int yynum { get { return 97; }}
15public LSLProgramRoot(Parser yyp):base(yyp){}} 15public LSLProgramRoot(Parser yyp):base(yyp){}}
16//%+GlobalDefinitions+97 16//%+GlobalDefinitions+98
17public class GlobalDefinitions : SYMBOL{ 17public class GlobalDefinitions : SYMBOL{
18 public GlobalDefinitions (Parser yyp, GlobalVariableDeclaration gvd ):base(((LSLSyntax 18 public GlobalDefinitions (Parser yyp, GlobalVariableDeclaration gvd ):base(((LSLSyntax
19)yyp)){ kids . Add ( gvd ); 19)yyp)){ kids . Add ( gvd );
@@ -31,9 +31,9 @@ public class GlobalDefinitions : SYMBOL{
31} 31}
32 32
33public override string yyname { get { return "GlobalDefinitions"; }} 33public override string yyname { get { return "GlobalDefinitions"; }}
34public override int yynum { get { return 97; }} 34public override int yynum { get { return 98; }}
35public GlobalDefinitions(Parser yyp):base(yyp){}} 35public GlobalDefinitions(Parser yyp):base(yyp){}}
36//%+GlobalVariableDeclaration+98 36//%+GlobalVariableDeclaration+99
37public class GlobalVariableDeclaration : SYMBOL{ 37public class GlobalVariableDeclaration : SYMBOL{
38 public GlobalVariableDeclaration (Parser yyp, Declaration d ):base(((LSLSyntax 38 public GlobalVariableDeclaration (Parser yyp, Declaration d ):base(((LSLSyntax
39)yyp)){ kids . Add ( d ); 39)yyp)){ kids . Add ( d );
@@ -43,9 +43,9 @@ public class GlobalVariableDeclaration : SYMBOL{
43} 43}
44 44
45public override string yyname { get { return "GlobalVariableDeclaration"; }} 45public override string yyname { get { return "GlobalVariableDeclaration"; }}
46public override int yynum { get { return 98; }} 46public override int yynum { get { return 99; }}
47public GlobalVariableDeclaration(Parser yyp):base(yyp){}} 47public GlobalVariableDeclaration(Parser yyp):base(yyp){}}
48//%+GlobalFunctionDefinition+99 48//%+GlobalFunctionDefinition+100
49public class GlobalFunctionDefinition : SYMBOL{ 49public class GlobalFunctionDefinition : SYMBOL{
50 private string m_returnType ; 50 private string m_returnType ;
51 private string m_name ; 51 private string m_name ;
@@ -65,9 +65,9 @@ public class GlobalFunctionDefinition : SYMBOL{
65} 65}
66 66
67public override string yyname { get { return "GlobalFunctionDefinition"; }} 67public override string yyname { get { return "GlobalFunctionDefinition"; }}
68public override int yynum { get { return 99; }} 68public override int yynum { get { return 100; }}
69public GlobalFunctionDefinition(Parser yyp):base(yyp){}} 69public GlobalFunctionDefinition(Parser yyp):base(yyp){}}
70//%+States+100 70//%+States+101
71public class States : SYMBOL{ 71public class States : SYMBOL{
72 public States (Parser yyp, State ds ):base(((LSLSyntax 72 public States (Parser yyp, State ds ):base(((LSLSyntax
73)yyp)){ kids . Add ( ds ); 73)yyp)){ kids . Add ( ds );
@@ -78,9 +78,9 @@ public class States : SYMBOL{
78} 78}
79 79
80public override string yyname { get { return "States"; }} 80public override string yyname { get { return "States"; }}
81public override int yynum { get { return 100; }} 81public override int yynum { get { return 101; }}
82public States(Parser yyp):base(yyp){}} 82public States(Parser yyp):base(yyp){}}
83//%+State+101 83//%+State+102
84public class State : SYMBOL{ 84public class State : SYMBOL{
85 private string m_name ; 85 private string m_name ;
86 public State (Parser yyp, string name , StateBody sb ):base(((LSLSyntax 86 public State (Parser yyp, string name , StateBody sb ):base(((LSLSyntax
@@ -94,9 +94,9 @@ public class State : SYMBOL{
94} 94}
95 95
96public override string yyname { get { return "State"; }} 96public override string yyname { get { return "State"; }}
97public override int yynum { get { return 101; }} 97public override int yynum { get { return 102; }}
98public State(Parser yyp):base(yyp){}} 98public State(Parser yyp):base(yyp){}}
99//%+StateBody+102 99//%+StateBody+103
100public class StateBody : SYMBOL{ 100public class StateBody : SYMBOL{
101 public StateBody (Parser yyp, StateBody sb , StateEvent se ):base(((LSLSyntax 101 public StateBody (Parser yyp, StateBody sb , StateEvent se ):base(((LSLSyntax
102)yyp)){ while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ()); 102)yyp)){ while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ());
@@ -107,9 +107,9 @@ public class StateBody : SYMBOL{
107} 107}
108 108
109public override string yyname { get { return "StateBody"; }} 109public override string yyname { get { return "StateBody"; }}
110public override int yynum { get { return 102; }} 110public override int yynum { get { return 103; }}
111public StateBody(Parser yyp):base(yyp){}} 111public StateBody(Parser yyp):base(yyp){}}
112//%+StateEvent+103 112//%+StateEvent+104
113public class StateEvent : SYMBOL{ 113public class StateEvent : SYMBOL{
114 private string m_name ; 114 private string m_name ;
115 public StateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax 115 public StateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax
@@ -128,65 +128,65 @@ public class StateEvent : SYMBOL{
128} 128}
129 129
130public override string yyname { get { return "StateEvent"; }} 130public override string yyname { get { return "StateEvent"; }}
131public override int yynum { get { return 103; }} 131public override int yynum { get { return 104; }}
132public StateEvent(Parser yyp):base(yyp){}} 132public StateEvent(Parser yyp):base(yyp){}}
133//%+VoidArgStateEvent+104 133//%+VoidArgStateEvent+105
134public class VoidArgStateEvent : StateEvent{ 134public class VoidArgStateEvent : StateEvent{
135 public VoidArgStateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax 135 public VoidArgStateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax
136)yyp), name , cs ){} 136)yyp), name , cs ){}
137 137
138public override string yyname { get { return "VoidArgStateEvent"; }} 138public override string yyname { get { return "VoidArgStateEvent"; }}
139public override int yynum { get { return 104; }} 139public override int yynum { get { return 105; }}
140public VoidArgStateEvent(Parser yyp):base(yyp){}} 140public VoidArgStateEvent(Parser yyp):base(yyp){}}
141//%+KeyArgStateEvent+105 141//%+KeyArgStateEvent+106
142public class KeyArgStateEvent : StateEvent{ 142public class KeyArgStateEvent : StateEvent{
143 public KeyArgStateEvent (Parser yyp, string name , KeyArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 143 public KeyArgStateEvent (Parser yyp, string name , KeyArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
144)yyp), name , adl , cs ){} 144)yyp), name , adl , cs ){}
145 145
146public override string yyname { get { return "KeyArgStateEvent"; }} 146public override string yyname { get { return "KeyArgStateEvent"; }}
147public override int yynum { get { return 105; }} 147public override int yynum { get { return 106; }}
148public KeyArgStateEvent(Parser yyp):base(yyp){}} 148public KeyArgStateEvent(Parser yyp):base(yyp){}}
149//%+IntArgStateEvent+106 149//%+IntArgStateEvent+107
150public class IntArgStateEvent : StateEvent{ 150public class IntArgStateEvent : StateEvent{
151 public IntArgStateEvent (Parser yyp, string name , IntArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 151 public IntArgStateEvent (Parser yyp, string name , IntArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
152)yyp), name , adl , cs ){} 152)yyp), name , adl , cs ){}
153 153
154public override string yyname { get { return "IntArgStateEvent"; }} 154public override string yyname { get { return "IntArgStateEvent"; }}
155public override int yynum { get { return 106; }} 155public override int yynum { get { return 107; }}
156public IntArgStateEvent(Parser yyp):base(yyp){}} 156public IntArgStateEvent(Parser yyp):base(yyp){}}
157//%+VectorArgStateEvent+107 157//%+VectorArgStateEvent+108
158public class VectorArgStateEvent : StateEvent{ 158public class VectorArgStateEvent : StateEvent{
159 public VectorArgStateEvent (Parser yyp, string name , VectorArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 159 public VectorArgStateEvent (Parser yyp, string name , VectorArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
160)yyp), name , adl , cs ){} 160)yyp), name , adl , cs ){}
161 161
162public override string yyname { get { return "VectorArgStateEvent"; }} 162public override string yyname { get { return "VectorArgStateEvent"; }}
163public override int yynum { get { return 107; }} 163public override int yynum { get { return 108; }}
164public VectorArgStateEvent(Parser yyp):base(yyp){}} 164public VectorArgStateEvent(Parser yyp):base(yyp){}}
165//%+IntRotRotArgStateEvent+108 165//%+IntRotRotArgStateEvent+109
166public class IntRotRotArgStateEvent : StateEvent{ 166public class IntRotRotArgStateEvent : StateEvent{
167 public IntRotRotArgStateEvent (Parser yyp, string name , IntRotRotArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 167 public IntRotRotArgStateEvent (Parser yyp, string name , IntRotRotArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
168)yyp), name , adl , cs ){} 168)yyp), name , adl , cs ){}
169 169
170public override string yyname { get { return "IntRotRotArgStateEvent"; }} 170public override string yyname { get { return "IntRotRotArgStateEvent"; }}
171public override int yynum { get { return 108; }} 171public override int yynum { get { return 109; }}
172public IntRotRotArgStateEvent(Parser yyp):base(yyp){}} 172public IntRotRotArgStateEvent(Parser yyp):base(yyp){}}
173//%+IntVecVecArgStateEvent+109 173//%+IntVecVecArgStateEvent+110
174public class IntVecVecArgStateEvent : StateEvent{ 174public class IntVecVecArgStateEvent : StateEvent{
175 public IntVecVecArgStateEvent (Parser yyp, string name , IntVecVecArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 175 public IntVecVecArgStateEvent (Parser yyp, string name , IntVecVecArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
176)yyp), name , adl , cs ){} 176)yyp), name , adl , cs ){}
177 177
178public override string yyname { get { return "IntVecVecArgStateEvent"; }} 178public override string yyname { get { return "IntVecVecArgStateEvent"; }}
179public override int yynum { get { return 109; }} 179public override int yynum { get { return 110; }}
180public IntVecVecArgStateEvent(Parser yyp):base(yyp){}} 180public IntVecVecArgStateEvent(Parser yyp):base(yyp){}}
181//%+KeyIntIntArgStateEvent+110 181//%+KeyIntIntArgStateEvent+111
182public class KeyIntIntArgStateEvent : StateEvent{ 182public class KeyIntIntArgStateEvent : StateEvent{
183 public KeyIntIntArgStateEvent (Parser yyp, string name , KeyIntIntArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax 183 public KeyIntIntArgStateEvent (Parser yyp, string name , KeyIntIntArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
184)yyp), name , adl , cs ){} 184)yyp), name , adl , cs ){}
185 185
186public override string yyname { get { return "KeyIntIntArgStateEvent"; }} 186public override string yyname { get { return "KeyIntIntArgStateEvent"; }}
187public override int yynum { get { return 110; }} 187public override int yynum { get { return 111; }}
188public KeyIntIntArgStateEvent(Parser yyp):base(yyp){}} 188public KeyIntIntArgStateEvent(Parser yyp):base(yyp){}}
189//%+ArgumentDeclarationList+111 189//%+ArgumentDeclarationList+112
190public class ArgumentDeclarationList : SYMBOL{ 190public class ArgumentDeclarationList : SYMBOL{
191 public ArgumentDeclarationList (Parser yyp, Declaration d ):base(((LSLSyntax 191 public ArgumentDeclarationList (Parser yyp, Declaration d ):base(((LSLSyntax
192)yyp)){ kids . Add ( d ); 192)yyp)){ kids . Add ( d );
@@ -206,57 +206,57 @@ public class ArgumentDeclarationList : SYMBOL{
206} 206}
207 207
208public override string yyname { get { return "ArgumentDeclarationList"; }} 208public override string yyname { get { return "ArgumentDeclarationList"; }}
209public override int yynum { get { return 111; }} 209public override int yynum { get { return 112; }}
210public ArgumentDeclarationList(Parser yyp):base(yyp){}} 210public ArgumentDeclarationList(Parser yyp):base(yyp){}}
211//%+KeyArgumentDeclarationList+112 211//%+KeyArgumentDeclarationList+113
212public class KeyArgumentDeclarationList : ArgumentDeclarationList{ 212public class KeyArgumentDeclarationList : ArgumentDeclarationList{
213 public KeyArgumentDeclarationList (Parser yyp, KeyDeclaration d ):base(((LSLSyntax 213 public KeyArgumentDeclarationList (Parser yyp, KeyDeclaration d ):base(((LSLSyntax
214)yyp), d ){} 214)yyp), d ){}
215 215
216public override string yyname { get { return "KeyArgumentDeclarationList"; }} 216public override string yyname { get { return "KeyArgumentDeclarationList"; }}
217public override int yynum { get { return 112; }} 217public override int yynum { get { return 113; }}
218public KeyArgumentDeclarationList(Parser yyp):base(yyp){}} 218public KeyArgumentDeclarationList(Parser yyp):base(yyp){}}
219//%+IntArgumentDeclarationList+113 219//%+IntArgumentDeclarationList+114
220public class IntArgumentDeclarationList : ArgumentDeclarationList{ 220public class IntArgumentDeclarationList : ArgumentDeclarationList{
221 public IntArgumentDeclarationList (Parser yyp, IntDeclaration d ):base(((LSLSyntax 221 public IntArgumentDeclarationList (Parser yyp, IntDeclaration d ):base(((LSLSyntax
222)yyp), d ){} 222)yyp), d ){}
223 223
224public override string yyname { get { return "IntArgumentDeclarationList"; }} 224public override string yyname { get { return "IntArgumentDeclarationList"; }}
225public override int yynum { get { return 113; }} 225public override int yynum { get { return 114; }}
226public IntArgumentDeclarationList(Parser yyp):base(yyp){}} 226public IntArgumentDeclarationList(Parser yyp):base(yyp){}}
227//%+VectorArgumentDeclarationList+114 227//%+VectorArgumentDeclarationList+115
228public class VectorArgumentDeclarationList : ArgumentDeclarationList{ 228public class VectorArgumentDeclarationList : ArgumentDeclarationList{
229 public VectorArgumentDeclarationList (Parser yyp, VecDeclaration d ):base(((LSLSyntax 229 public VectorArgumentDeclarationList (Parser yyp, VecDeclaration d ):base(((LSLSyntax
230)yyp), d ){} 230)yyp), d ){}
231 231
232public override string yyname { get { return "VectorArgumentDeclarationList"; }} 232public override string yyname { get { return "VectorArgumentDeclarationList"; }}
233public override int yynum { get { return 114; }} 233public override int yynum { get { return 115; }}
234public VectorArgumentDeclarationList(Parser yyp):base(yyp){}} 234public VectorArgumentDeclarationList(Parser yyp):base(yyp){}}
235//%+IntRotRotArgumentDeclarationList+115 235//%+IntRotRotArgumentDeclarationList+116
236public class IntRotRotArgumentDeclarationList : ArgumentDeclarationList{ 236public class IntRotRotArgumentDeclarationList : ArgumentDeclarationList{
237 public IntRotRotArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax 237 public IntRotRotArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax
238)yyp), d1 , d2 , d3 ){} 238)yyp), d1 , d2 , d3 ){}
239 239
240public override string yyname { get { return "IntRotRotArgumentDeclarationList"; }} 240public override string yyname { get { return "IntRotRotArgumentDeclarationList"; }}
241public override int yynum { get { return 115; }} 241public override int yynum { get { return 116; }}
242public IntRotRotArgumentDeclarationList(Parser yyp):base(yyp){}} 242public IntRotRotArgumentDeclarationList(Parser yyp):base(yyp){}}
243//%+IntVecVecArgumentDeclarationList+116 243//%+IntVecVecArgumentDeclarationList+117
244public class IntVecVecArgumentDeclarationList : ArgumentDeclarationList{ 244public class IntVecVecArgumentDeclarationList : ArgumentDeclarationList{
245 public IntVecVecArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax 245 public IntVecVecArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax
246)yyp), d1 , d2 , d3 ){} 246)yyp), d1 , d2 , d3 ){}
247 247
248public override string yyname { get { return "IntVecVecArgumentDeclarationList"; }} 248public override string yyname { get { return "IntVecVecArgumentDeclarationList"; }}
249public override int yynum { get { return 116; }} 249public override int yynum { get { return 117; }}
250public IntVecVecArgumentDeclarationList(Parser yyp):base(yyp){}} 250public IntVecVecArgumentDeclarationList(Parser yyp):base(yyp){}}
251//%+KeyIntIntArgumentDeclarationList+117 251//%+KeyIntIntArgumentDeclarationList+118
252public class KeyIntIntArgumentDeclarationList : ArgumentDeclarationList{ 252public class KeyIntIntArgumentDeclarationList : ArgumentDeclarationList{
253 public KeyIntIntArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax 253 public KeyIntIntArgumentDeclarationList (Parser yyp, Declaration d1 , Declaration d2 , Declaration d3 ):base(((LSLSyntax
254)yyp), d1 , d2 , d3 ){} 254)yyp), d1 , d2 , d3 ){}
255 255
256public override string yyname { get { return "KeyIntIntArgumentDeclarationList"; }} 256public override string yyname { get { return "KeyIntIntArgumentDeclarationList"; }}
257public override int yynum { get { return 117; }} 257public override int yynum { get { return 118; }}
258public KeyIntIntArgumentDeclarationList(Parser yyp):base(yyp){}} 258public KeyIntIntArgumentDeclarationList(Parser yyp):base(yyp){}}
259//%+Declaration+118 259//%+Declaration+119
260public class Declaration : SYMBOL{ 260public class Declaration : SYMBOL{
261 private string m_datatype ; 261 private string m_datatype ;
262 private string m_id ; 262 private string m_id ;
@@ -276,41 +276,41 @@ public class Declaration : SYMBOL{
276} 276}
277 277
278public override string yyname { get { return "Declaration"; }} 278public override string yyname { get { return "Declaration"; }}
279public override int yynum { get { return 118; }} 279public override int yynum { get { return 119; }}
280public Declaration(Parser yyp):base(yyp){}} 280public Declaration(Parser yyp):base(yyp){}}
281//%+KeyDeclaration+119 281//%+KeyDeclaration+120
282public class KeyDeclaration : Declaration{ 282public class KeyDeclaration : Declaration{
283 public KeyDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax 283 public KeyDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax
284)yyp), type , id ){} 284)yyp), type , id ){}
285 285
286public override string yyname { get { return "KeyDeclaration"; }} 286public override string yyname { get { return "KeyDeclaration"; }}
287public override int yynum { get { return 119; }} 287public override int yynum { get { return 120; }}
288public KeyDeclaration(Parser yyp):base(yyp){}} 288public KeyDeclaration(Parser yyp):base(yyp){}}
289//%+IntDeclaration+120 289//%+IntDeclaration+121
290public class IntDeclaration : Declaration{ 290public class IntDeclaration : Declaration{
291 public IntDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax 291 public IntDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax
292)yyp), type , id ){} 292)yyp), type , id ){}
293 293
294public override string yyname { get { return "IntDeclaration"; }} 294public override string yyname { get { return "IntDeclaration"; }}
295public override int yynum { get { return 120; }} 295public override int yynum { get { return 121; }}
296public IntDeclaration(Parser yyp):base(yyp){}} 296public IntDeclaration(Parser yyp):base(yyp){}}
297//%+VecDeclaration+121 297//%+VecDeclaration+122
298public class VecDeclaration : Declaration{ 298public class VecDeclaration : Declaration{
299 public VecDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax 299 public VecDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax
300)yyp), type , id ){} 300)yyp), type , id ){}
301 301
302public override string yyname { get { return "VecDeclaration"; }} 302public override string yyname { get { return "VecDeclaration"; }}
303public override int yynum { get { return 121; }} 303public override int yynum { get { return 122; }}
304public VecDeclaration(Parser yyp):base(yyp){}} 304public VecDeclaration(Parser yyp):base(yyp){}}
305//%+RotDeclaration+122 305//%+RotDeclaration+123
306public class RotDeclaration : Declaration{ 306public class RotDeclaration : Declaration{
307 public RotDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax 307 public RotDeclaration (Parser yyp, string type , string id ):base(((LSLSyntax
308)yyp), type , id ){} 308)yyp), type , id ){}
309 309
310public override string yyname { get { return "RotDeclaration"; }} 310public override string yyname { get { return "RotDeclaration"; }}
311public override int yynum { get { return 122; }} 311public override int yynum { get { return 123; }}
312public RotDeclaration(Parser yyp):base(yyp){}} 312public RotDeclaration(Parser yyp):base(yyp){}}
313//%+Typename+123 313//%+Typename+124
314public class Typename : SYMBOL{ 314public class Typename : SYMBOL{
315 public string yytext ; 315 public string yytext ;
316 public Typename (Parser yyp, string text ):base(((LSLSyntax 316 public Typename (Parser yyp, string text ):base(((LSLSyntax
@@ -318,9 +318,9 @@ public class Typename : SYMBOL{
318} 318}
319 319
320public override string yyname { get { return "Typename"; }} 320public override string yyname { get { return "Typename"; }}
321public override int yynum { get { return 123; }} 321public override int yynum { get { return 124; }}
322public Typename(Parser yyp):base(yyp){}} 322public Typename(Parser yyp):base(yyp){}}
323//%+Event+124 323//%+Event+125
324public class Event : SYMBOL{ 324public class Event : SYMBOL{
325 public string yytext ; 325 public string yytext ;
326 public Event (Parser yyp, string text ):base(((LSLSyntax 326 public Event (Parser yyp, string text ):base(((LSLSyntax
@@ -328,65 +328,65 @@ public class Event : SYMBOL{
328} 328}
329 329
330public override string yyname { get { return "Event"; }} 330public override string yyname { get { return "Event"; }}
331public override int yynum { get { return 124; }} 331public override int yynum { get { return 125; }}
332public Event(Parser yyp):base(yyp){}} 332public Event(Parser yyp):base(yyp){}}
333//%+VoidArgEvent+125 333//%+VoidArgEvent+126
334public class VoidArgEvent : Event{ 334public class VoidArgEvent : Event{
335 public VoidArgEvent (Parser yyp, string text ):base(((LSLSyntax 335 public VoidArgEvent (Parser yyp, string text ):base(((LSLSyntax
336)yyp), text ){} 336)yyp), text ){}
337 337
338public override string yyname { get { return "VoidArgEvent"; }} 338public override string yyname { get { return "VoidArgEvent"; }}
339public override int yynum { get { return 125; }} 339public override int yynum { get { return 126; }}
340public VoidArgEvent(Parser yyp):base(yyp){}} 340public VoidArgEvent(Parser yyp):base(yyp){}}
341//%+KeyArgEvent+126 341//%+KeyArgEvent+127
342public class KeyArgEvent : Event{ 342public class KeyArgEvent : Event{
343 public KeyArgEvent (Parser yyp, string text ):base(((LSLSyntax 343 public KeyArgEvent (Parser yyp, string text ):base(((LSLSyntax
344)yyp), text ){} 344)yyp), text ){}
345 345
346public override string yyname { get { return "KeyArgEvent"; }} 346public override string yyname { get { return "KeyArgEvent"; }}
347public override int yynum { get { return 126; }} 347public override int yynum { get { return 127; }}
348public KeyArgEvent(Parser yyp):base(yyp){}} 348public KeyArgEvent(Parser yyp):base(yyp){}}
349//%+IntArgEvent+127 349//%+IntArgEvent+128
350public class IntArgEvent : Event{ 350public class IntArgEvent : Event{
351 public IntArgEvent (Parser yyp, string text ):base(((LSLSyntax 351 public IntArgEvent (Parser yyp, string text ):base(((LSLSyntax
352)yyp), text ){} 352)yyp), text ){}
353 353
354public override string yyname { get { return "IntArgEvent"; }} 354public override string yyname { get { return "IntArgEvent"; }}
355public override int yynum { get { return 127; }} 355public override int yynum { get { return 128; }}
356public IntArgEvent(Parser yyp):base(yyp){}} 356public IntArgEvent(Parser yyp):base(yyp){}}
357//%+VectorArgEvent+128 357//%+VectorArgEvent+129
358public class VectorArgEvent : Event{ 358public class VectorArgEvent : Event{
359 public VectorArgEvent (Parser yyp, string text ):base(((LSLSyntax 359 public VectorArgEvent (Parser yyp, string text ):base(((LSLSyntax
360)yyp), text ){} 360)yyp), text ){}
361 361
362public override string yyname { get { return "VectorArgEvent"; }} 362public override string yyname { get { return "VectorArgEvent"; }}
363public override int yynum { get { return 128; }} 363public override int yynum { get { return 129; }}
364public VectorArgEvent(Parser yyp):base(yyp){}} 364public VectorArgEvent(Parser yyp):base(yyp){}}
365//%+IntRotRotArgEvent+129 365//%+IntRotRotArgEvent+130
366public class IntRotRotArgEvent : Event{ 366public class IntRotRotArgEvent : Event{
367 public IntRotRotArgEvent (Parser yyp, string text ):base(((LSLSyntax 367 public IntRotRotArgEvent (Parser yyp, string text ):base(((LSLSyntax
368)yyp), text ){} 368)yyp), text ){}
369 369
370public override string yyname { get { return "IntRotRotArgEvent"; }} 370public override string yyname { get { return "IntRotRotArgEvent"; }}
371public override int yynum { get { return 129; }} 371public override int yynum { get { return 130; }}
372public IntRotRotArgEvent(Parser yyp):base(yyp){}} 372public IntRotRotArgEvent(Parser yyp):base(yyp){}}
373//%+IntVecVecArgEvent+130 373//%+IntVecVecArgEvent+131
374public class IntVecVecArgEvent : Event{ 374public class IntVecVecArgEvent : Event{
375 public IntVecVecArgEvent (Parser yyp, string text ):base(((LSLSyntax 375 public IntVecVecArgEvent (Parser yyp, string text ):base(((LSLSyntax
376)yyp), text ){} 376)yyp), text ){}
377 377
378public override string yyname { get { return "IntVecVecArgEvent"; }} 378public override string yyname { get { return "IntVecVecArgEvent"; }}
379public override int yynum { get { return 130; }} 379public override int yynum { get { return 131; }}
380public IntVecVecArgEvent(Parser yyp):base(yyp){}} 380public IntVecVecArgEvent(Parser yyp):base(yyp){}}
381//%+KeyIntIntArgEvent+131 381//%+KeyIntIntArgEvent+132
382public class KeyIntIntArgEvent : Event{ 382public class KeyIntIntArgEvent : Event{
383 public KeyIntIntArgEvent (Parser yyp, string text ):base(((LSLSyntax 383 public KeyIntIntArgEvent (Parser yyp, string text ):base(((LSLSyntax
384)yyp), text ){} 384)yyp), text ){}
385 385
386public override string yyname { get { return "KeyIntIntArgEvent"; }} 386public override string yyname { get { return "KeyIntIntArgEvent"; }}
387public override int yynum { get { return 131; }} 387public override int yynum { get { return 132; }}
388public KeyIntIntArgEvent(Parser yyp):base(yyp){}} 388public KeyIntIntArgEvent(Parser yyp):base(yyp){}}
389//%+CompoundStatement+132 389//%+CompoundStatement+133
390public class CompoundStatement : SYMBOL{ 390public class CompoundStatement : SYMBOL{
391 public CompoundStatement (Parser yyp):base(((LSLSyntax 391 public CompoundStatement (Parser yyp):base(((LSLSyntax
392)yyp)){} 392)yyp)){}
@@ -395,9 +395,9 @@ public class CompoundStatement : SYMBOL{
395} 395}
396 396
397public override string yyname { get { return "CompoundStatement"; }} 397public override string yyname { get { return "CompoundStatement"; }}
398public override int yynum { get { return 132; }} 398public override int yynum { get { return 133; }}
399} 399}
400//%+StatementList+133 400//%+StatementList+134
401public class StatementList : SYMBOL{ 401public class StatementList : SYMBOL{
402 private void AddStatement ( Statement s ){ if ( s . kids . Top is IfStatement || s . kids . Top is WhileStatement || s . kids . Top is DoWhileStatement || s . kids . Top is ForLoop ) kids . Add ( s . kids . Pop ()); 402 private void AddStatement ( Statement s ){ if ( s . kids . Top is IfStatement || s . kids . Top is WhileStatement || s . kids . Top is DoWhileStatement || s . kids . Top is ForLoop ) kids . Add ( s . kids . Pop ());
403 else kids . Add ( s ); 403 else kids . Add ( s );
@@ -411,9 +411,9 @@ public class StatementList : SYMBOL{
411} 411}
412 412
413public override string yyname { get { return "StatementList"; }} 413public override string yyname { get { return "StatementList"; }}
414public override int yynum { get { return 133; }} 414public override int yynum { get { return 134; }}
415public StatementList(Parser yyp):base(yyp){}} 415public StatementList(Parser yyp):base(yyp){}}
416//%+Statement+134 416//%+Statement+135
417public class Statement : SYMBOL{ 417public class Statement : SYMBOL{
418 public Statement (Parser yyp, Declaration d ):base(((LSLSyntax 418 public Statement (Parser yyp, Declaration d ):base(((LSLSyntax
419)yyp)){ kids . Add ( d ); 419)yyp)){ kids . Add ( d );
@@ -459,9 +459,9 @@ public class Statement : SYMBOL{
459} 459}
460 460
461public override string yyname { get { return "Statement"; }} 461public override string yyname { get { return "Statement"; }}
462public override int yynum { get { return 134; }} 462public override int yynum { get { return 135; }}
463public Statement(Parser yyp):base(yyp){}} 463public Statement(Parser yyp):base(yyp){}}
464//%+EmptyStatement+135 464//%+EmptyStatement+136
465public class EmptyStatement : SYMBOL{ 465public class EmptyStatement : SYMBOL{
466 public EmptyStatement (Parser yyp):base(((LSLSyntax 466 public EmptyStatement (Parser yyp):base(((LSLSyntax
467)yyp)){} 467)yyp)){}
@@ -469,9 +469,9 @@ public class EmptyStatement : SYMBOL{
469} 469}
470 470
471public override string yyname { get { return "EmptyStatement"; }} 471public override string yyname { get { return "EmptyStatement"; }}
472public override int yynum { get { return 135; }} 472public override int yynum { get { return 136; }}
473} 473}
474//%+Assignment+136 474//%+Assignment+137
475public class Assignment : SYMBOL{ 475public class Assignment : SYMBOL{
476 protected string m_assignmentType ; 476 protected string m_assignmentType ;
477 public Assignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax 477 public Assignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax
@@ -491,9 +491,9 @@ public class Assignment : SYMBOL{
491} 491}
492 492
493public override string yyname { get { return "Assignment"; }} 493public override string yyname { get { return "Assignment"; }}
494public override int yynum { get { return 136; }} 494public override int yynum { get { return 137; }}
495public Assignment(Parser yyp):base(yyp){}} 495public Assignment(Parser yyp):base(yyp){}}
496//%+SimpleAssignment+137 496//%+SimpleAssignment+138
497public class SimpleAssignment : Assignment{ 497public class SimpleAssignment : Assignment{
498 public SimpleAssignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax 498 public SimpleAssignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax
499)yyp)){ m_assignmentType = assignmentType ; 499)yyp)){ m_assignmentType = assignmentType ;
@@ -503,9 +503,9 @@ public class SimpleAssignment : Assignment{
503} 503}
504 504
505public override string yyname { get { return "SimpleAssignment"; }} 505public override string yyname { get { return "SimpleAssignment"; }}
506public override int yynum { get { return 137; }} 506public override int yynum { get { return 138; }}
507public SimpleAssignment(Parser yyp):base(yyp){}} 507public SimpleAssignment(Parser yyp):base(yyp){}}
508//%+ReturnStatement+138 508//%+ReturnStatement+139
509public class ReturnStatement : SYMBOL{ 509public class ReturnStatement : SYMBOL{
510 public ReturnStatement (Parser yyp):base(((LSLSyntax 510 public ReturnStatement (Parser yyp):base(((LSLSyntax
511)yyp)){} 511)yyp)){}
@@ -515,9 +515,9 @@ public class ReturnStatement : SYMBOL{
515} 515}
516 516
517public override string yyname { get { return "ReturnStatement"; }} 517public override string yyname { get { return "ReturnStatement"; }}
518public override int yynum { get { return 138; }} 518public override int yynum { get { return 139; }}
519} 519}
520//%+JumpLabel+139 520//%+JumpLabel+140
521public class JumpLabel : SYMBOL{ 521public class JumpLabel : SYMBOL{
522 private string m_labelName ; 522 private string m_labelName ;
523 public JumpLabel (Parser yyp, string labelName ):base(((LSLSyntax 523 public JumpLabel (Parser yyp, string labelName ):base(((LSLSyntax
@@ -530,9 +530,9 @@ public class JumpLabel : SYMBOL{
530} 530}
531 531
532public override string yyname { get { return "JumpLabel"; }} 532public override string yyname { get { return "JumpLabel"; }}
533public override int yynum { get { return 139; }} 533public override int yynum { get { return 140; }}
534public JumpLabel(Parser yyp):base(yyp){}} 534public JumpLabel(Parser yyp):base(yyp){}}
535//%+JumpStatement+140 535//%+JumpStatement+141
536public class JumpStatement : SYMBOL{ 536public class JumpStatement : SYMBOL{
537 private string m_targetName ; 537 private string m_targetName ;
538 public JumpStatement (Parser yyp, string targetName ):base(((LSLSyntax 538 public JumpStatement (Parser yyp, string targetName ):base(((LSLSyntax
@@ -545,9 +545,9 @@ public class JumpStatement : SYMBOL{
545} 545}
546 546
547public override string yyname { get { return "JumpStatement"; }} 547public override string yyname { get { return "JumpStatement"; }}
548public override int yynum { get { return 140; }} 548public override int yynum { get { return 141; }}
549public JumpStatement(Parser yyp):base(yyp){}} 549public JumpStatement(Parser yyp):base(yyp){}}
550//%+StateChange+141 550//%+StateChange+142
551public class StateChange : SYMBOL{ 551public class StateChange : SYMBOL{
552 private string m_newState ; 552 private string m_newState ;
553 public StateChange (Parser yyp, string newState ):base(((LSLSyntax 553 public StateChange (Parser yyp, string newState ):base(((LSLSyntax
@@ -558,9 +558,9 @@ public class StateChange : SYMBOL{
558} 558}
559 559
560public override string yyname { get { return "StateChange"; }} 560public override string yyname { get { return "StateChange"; }}
561public override int yynum { get { return 141; }} 561public override int yynum { get { return 142; }}
562public StateChange(Parser yyp):base(yyp){}} 562public StateChange(Parser yyp):base(yyp){}}
563//%+IfStatement+142 563//%+IfStatement+143
564public class IfStatement : SYMBOL{ 564public class IfStatement : SYMBOL{
565 private void AddStatement ( Statement s ){ if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ()); 565 private void AddStatement ( Statement s ){ if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ());
566 else kids . Add ( s ); 566 else kids . Add ( s );
@@ -577,9 +577,9 @@ public class IfStatement : SYMBOL{
577} 577}
578 578
579public override string yyname { get { return "IfStatement"; }} 579public override string yyname { get { return "IfStatement"; }}
580public override int yynum { get { return 142; }} 580public override int yynum { get { return 143; }}
581public IfStatement(Parser yyp):base(yyp){}} 581public IfStatement(Parser yyp):base(yyp){}}
582//%+WhileStatement+143 582//%+WhileStatement+144
583public class WhileStatement : SYMBOL{ 583public class WhileStatement : SYMBOL{
584 public WhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax 584 public WhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax
585)yyp)){ kids . Add ( s ); 585)yyp)){ kids . Add ( s );
@@ -588,9 +588,9 @@ public class WhileStatement : SYMBOL{
588} 588}
589 589
590public override string yyname { get { return "WhileStatement"; }} 590public override string yyname { get { return "WhileStatement"; }}
591public override int yynum { get { return 143; }} 591public override int yynum { get { return 144; }}
592public WhileStatement(Parser yyp):base(yyp){}} 592public WhileStatement(Parser yyp):base(yyp){}}
593//%+DoWhileStatement+144 593//%+DoWhileStatement+145
594public class DoWhileStatement : SYMBOL{ 594public class DoWhileStatement : SYMBOL{
595 public DoWhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax 595 public DoWhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax
596)yyp)){ if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ()); 596)yyp)){ if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ());
@@ -599,9 +599,9 @@ public class DoWhileStatement : SYMBOL{
599} 599}
600 600
601public override string yyname { get { return "DoWhileStatement"; }} 601public override string yyname { get { return "DoWhileStatement"; }}
602public override int yynum { get { return 144; }} 602public override int yynum { get { return 145; }}
603public DoWhileStatement(Parser yyp):base(yyp){}} 603public DoWhileStatement(Parser yyp):base(yyp){}}
604//%+ForLoop+145 604//%+ForLoop+146
605public class ForLoop : SYMBOL{ 605public class ForLoop : SYMBOL{
606 public ForLoop (Parser yyp, ForLoopStatement flsa , Expression e , ForLoopStatement flsb , Statement s ):base(((LSLSyntax 606 public ForLoop (Parser yyp, ForLoopStatement flsa , Expression e , ForLoopStatement flsb , Statement s ):base(((LSLSyntax
607)yyp)){ kids . Add ( flsa ); 607)yyp)){ kids . Add ( flsa );
@@ -612,9 +612,9 @@ public class ForLoop : SYMBOL{
612} 612}
613 613
614public override string yyname { get { return "ForLoop"; }} 614public override string yyname { get { return "ForLoop"; }}
615public override int yynum { get { return 145; }} 615public override int yynum { get { return 146; }}
616public ForLoop(Parser yyp):base(yyp){}} 616public ForLoop(Parser yyp):base(yyp){}}
617//%+ForLoopStatement+146 617//%+ForLoopStatement+147
618public class ForLoopStatement : SYMBOL{ 618public class ForLoopStatement : SYMBOL{
619 public ForLoopStatement (Parser yyp, Expression e ):base(((LSLSyntax 619 public ForLoopStatement (Parser yyp, Expression e ):base(((LSLSyntax
620)yyp)){ kids . Add ( e ); 620)yyp)){ kids . Add ( e );
@@ -632,9 +632,9 @@ public class ForLoopStatement : SYMBOL{
632} 632}
633 633
634public override string yyname { get { return "ForLoopStatement"; }} 634public override string yyname { get { return "ForLoopStatement"; }}
635public override int yynum { get { return 146; }} 635public override int yynum { get { return 147; }}
636public ForLoopStatement(Parser yyp):base(yyp){}} 636public ForLoopStatement(Parser yyp):base(yyp){}}
637//%+FunctionCall+147 637//%+FunctionCall+148
638public class FunctionCall : SYMBOL{ 638public class FunctionCall : SYMBOL{
639 private string m_id ; 639 private string m_id ;
640 public FunctionCall (Parser yyp, string id , ArgumentList al ):base(((LSLSyntax 640 public FunctionCall (Parser yyp, string id , ArgumentList al ):base(((LSLSyntax
@@ -648,9 +648,9 @@ public class FunctionCall : SYMBOL{
648} 648}
649 649
650public override string yyname { get { return "FunctionCall"; }} 650public override string yyname { get { return "FunctionCall"; }}
651public override int yynum { get { return 147; }} 651public override int yynum { get { return 148; }}
652public FunctionCall(Parser yyp):base(yyp){}} 652public FunctionCall(Parser yyp):base(yyp){}}
653//%+ArgumentList+148 653//%+ArgumentList+149
654public class ArgumentList : SYMBOL{ 654public class ArgumentList : SYMBOL{
655 public ArgumentList (Parser yyp, Argument a ):base(((LSLSyntax 655 public ArgumentList (Parser yyp, Argument a ):base(((LSLSyntax
656)yyp)){ AddArgument ( a ); 656)yyp)){ AddArgument ( a );
@@ -664,14 +664,14 @@ public class ArgumentList : SYMBOL{
664} 664}
665 665
666public override string yyname { get { return "ArgumentList"; }} 666public override string yyname { get { return "ArgumentList"; }}
667public override int yynum { get { return 148; }} 667public override int yynum { get { return 149; }}
668public ArgumentList(Parser yyp):base(yyp){}} 668public ArgumentList(Parser yyp):base(yyp){}}
669//%+Argument+149 669//%+Argument+150
670public class Argument : SYMBOL{ 670public class Argument : SYMBOL{
671public override string yyname { get { return "Argument"; }} 671public override string yyname { get { return "Argument"; }}
672public override int yynum { get { return 149; }} 672public override int yynum { get { return 150; }}
673public Argument(Parser yyp):base(yyp){}} 673public Argument(Parser yyp):base(yyp){}}
674//%+ExpressionArgument+150 674//%+ExpressionArgument+151
675public class ExpressionArgument : Argument{ 675public class ExpressionArgument : Argument{
676 public ExpressionArgument (Parser yyp, Expression e ):base(((LSLSyntax 676 public ExpressionArgument (Parser yyp, Expression e ):base(((LSLSyntax
677)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ()); 677)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ());
@@ -679,9 +679,9 @@ public class ExpressionArgument : Argument{
679} 679}
680 680
681public override string yyname { get { return "ExpressionArgument"; }} 681public override string yyname { get { return "ExpressionArgument"; }}
682public override int yynum { get { return 150; }} 682public override int yynum { get { return 151; }}
683public ExpressionArgument(Parser yyp):base(yyp){}} 683public ExpressionArgument(Parser yyp):base(yyp){}}
684//%+Constant+151 684//%+Constant+152
685public class Constant : SYMBOL{ 685public class Constant : SYMBOL{
686 private string m_type ; 686 private string m_type ;
687 private string m_val ; 687 private string m_val ;
@@ -703,9 +703,9 @@ public class Constant : SYMBOL{
703} 703}
704 704
705public override string yyname { get { return "Constant"; }} 705public override string yyname { get { return "Constant"; }}
706public override int yynum { get { return 151; }} 706public override int yynum { get { return 152; }}
707public Constant(Parser yyp):base(yyp){}} 707public Constant(Parser yyp):base(yyp){}}
708//%+VectorConstant+152 708//%+VectorConstant+153
709public class VectorConstant : Constant{ 709public class VectorConstant : Constant{
710 public VectorConstant (Parser yyp, Expression valX , Expression valY , Expression valZ ):base(((LSLSyntax 710 public VectorConstant (Parser yyp, Expression valX , Expression valY , Expression valZ ):base(((LSLSyntax
711)yyp),"vector", null ){ kids . Add ( valX ); 711)yyp),"vector", null ){ kids . Add ( valX );
@@ -714,9 +714,9 @@ public class VectorConstant : Constant{
714} 714}
715 715
716public override string yyname { get { return "VectorConstant"; }} 716public override string yyname { get { return "VectorConstant"; }}
717public override int yynum { get { return 152; }} 717public override int yynum { get { return 153; }}
718public VectorConstant(Parser yyp):base(yyp){}} 718public VectorConstant(Parser yyp):base(yyp){}}
719//%+RotationConstant+153 719//%+RotationConstant+154
720public class RotationConstant : Constant{ 720public class RotationConstant : Constant{
721 public RotationConstant (Parser yyp, Expression valX , Expression valY , Expression valZ , Expression valS ):base(((LSLSyntax 721 public RotationConstant (Parser yyp, Expression valX , Expression valY , Expression valZ , Expression valS ):base(((LSLSyntax
722)yyp),"rotation", null ){ kids . Add ( valX ); 722)yyp),"rotation", null ){ kids . Add ( valX );
@@ -726,36 +726,36 @@ public class RotationConstant : Constant{
726} 726}
727 727
728public override string yyname { get { return "RotationConstant"; }} 728public override string yyname { get { return "RotationConstant"; }}
729public override int yynum { get { return 153; }} 729public override int yynum { get { return 154; }}
730public RotationConstant(Parser yyp):base(yyp){}} 730public RotationConstant(Parser yyp):base(yyp){}}
731//%+ListConstant+154 731//%+ListConstant+155
732public class ListConstant : Constant{ 732public class ListConstant : Constant{
733 public ListConstant (Parser yyp, ArgumentList al ):base(((LSLSyntax 733 public ListConstant (Parser yyp, ArgumentList al ):base(((LSLSyntax
734)yyp),"list", null ){ kids . Add ( al ); 734)yyp),"list", null ){ kids . Add ( al );
735} 735}
736 736
737public override string yyname { get { return "ListConstant"; }} 737public override string yyname { get { return "ListConstant"; }}
738public override int yynum { get { return 154; }} 738public override int yynum { get { return 155; }}
739public ListConstant(Parser yyp):base(yyp){}} 739public ListConstant(Parser yyp):base(yyp){}}
740//%+Expression+155 740//%+Expression+156
741public class Expression : SYMBOL{ 741public class Expression : SYMBOL{
742 protected void AddExpression ( Expression e ){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ()); 742 protected void AddExpression ( Expression e ){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ());
743 else kids . Add ( e ); 743 else kids . Add ( e );
744} 744}
745 745
746public override string yyname { get { return "Expression"; }} 746public override string yyname { get { return "Expression"; }}
747public override int yynum { get { return 155; }} 747public override int yynum { get { return 156; }}
748public Expression(Parser yyp):base(yyp){}} 748public Expression(Parser yyp):base(yyp){}}
749//%+ConstantExpression+156 749//%+ConstantExpression+157
750public class ConstantExpression : Expression{ 750public class ConstantExpression : Expression{
751 public ConstantExpression (Parser yyp, Constant c ):base(((LSLSyntax 751 public ConstantExpression (Parser yyp, Constant c ):base(((LSLSyntax
752)yyp)){ kids . Add ( c ); 752)yyp)){ kids . Add ( c );
753} 753}
754 754
755public override string yyname { get { return "ConstantExpression"; }} 755public override string yyname { get { return "ConstantExpression"; }}
756public override int yynum { get { return 156; }} 756public override int yynum { get { return 157; }}
757public ConstantExpression(Parser yyp):base(yyp){}} 757public ConstantExpression(Parser yyp):base(yyp){}}
758//%+IdentExpression+157 758//%+IdentExpression+158
759public class IdentExpression : Expression{ 759public class IdentExpression : Expression{
760 protected string m_name ; 760 protected string m_name ;
761 public IdentExpression (Parser yyp, string name ):base(((LSLSyntax 761 public IdentExpression (Parser yyp, string name ):base(((LSLSyntax
@@ -768,9 +768,9 @@ public class IdentExpression : Expression{
768} 768}
769 769
770public override string yyname { get { return "IdentExpression"; }} 770public override string yyname { get { return "IdentExpression"; }}
771public override int yynum { get { return 157; }} 771public override int yynum { get { return 158; }}
772public IdentExpression(Parser yyp):base(yyp){}} 772public IdentExpression(Parser yyp):base(yyp){}}
773//%+IdentDotExpression+158 773//%+IdentDotExpression+159
774public class IdentDotExpression : IdentExpression{ 774public class IdentDotExpression : IdentExpression{
775 private string m_member ; 775 private string m_member ;
776 public IdentDotExpression (Parser yyp, string name , string member ):base(((LSLSyntax 776 public IdentDotExpression (Parser yyp, string name , string member ):base(((LSLSyntax
@@ -784,18 +784,18 @@ public class IdentDotExpression : IdentExpression{
784} 784}
785 785
786public override string yyname { get { return "IdentDotExpression"; }} 786public override string yyname { get { return "IdentDotExpression"; }}
787public override int yynum { get { return 158; }} 787public override int yynum { get { return 159; }}
788public IdentDotExpression(Parser yyp):base(yyp){}} 788public IdentDotExpression(Parser yyp):base(yyp){}}
789//%+FunctionCallExpression+159 789//%+FunctionCallExpression+160
790public class FunctionCallExpression : Expression{ 790public class FunctionCallExpression : Expression{
791 public FunctionCallExpression (Parser yyp, FunctionCall fc ):base(((LSLSyntax 791 public FunctionCallExpression (Parser yyp, FunctionCall fc ):base(((LSLSyntax
792)yyp)){ kids . Add ( fc ); 792)yyp)){ kids . Add ( fc );
793} 793}
794 794
795public override string yyname { get { return "FunctionCallExpression"; }} 795public override string yyname { get { return "FunctionCallExpression"; }}
796public override int yynum { get { return 159; }} 796public override int yynum { get { return 160; }}
797public FunctionCallExpression(Parser yyp):base(yyp){}} 797public FunctionCallExpression(Parser yyp):base(yyp){}}
798//%+BinaryExpression+160 798//%+BinaryExpression+161
799public class BinaryExpression : Expression{ 799public class BinaryExpression : Expression{
800 private string m_expressionSymbol ; 800 private string m_expressionSymbol ;
801 public BinaryExpression (Parser yyp, Expression lhs , Expression rhs , string expressionSymbol ):base(((LSLSyntax 801 public BinaryExpression (Parser yyp, Expression lhs , Expression rhs , string expressionSymbol ):base(((LSLSyntax
@@ -810,9 +810,9 @@ public class BinaryExpression : Expression{
810} 810}
811 811
812public override string yyname { get { return "BinaryExpression"; }} 812public override string yyname { get { return "BinaryExpression"; }}
813public override int yynum { get { return 160; }} 813public override int yynum { get { return 161; }}
814public BinaryExpression(Parser yyp):base(yyp){}} 814public BinaryExpression(Parser yyp):base(yyp){}}
815//%+UnaryExpression+161 815//%+UnaryExpression+162
816public class UnaryExpression : Expression{ 816public class UnaryExpression : Expression{
817 private string m_unarySymbol ; 817 private string m_unarySymbol ;
818 public UnaryExpression (Parser yyp, string unarySymbol , Expression e ):base(((LSLSyntax 818 public UnaryExpression (Parser yyp, string unarySymbol , Expression e ):base(((LSLSyntax
@@ -826,9 +826,9 @@ public class UnaryExpression : Expression{
826} 826}
827 827
828public override string yyname { get { return "UnaryExpression"; }} 828public override string yyname { get { return "UnaryExpression"; }}
829public override int yynum { get { return 161; }} 829public override int yynum { get { return 162; }}
830public UnaryExpression(Parser yyp):base(yyp){}} 830public UnaryExpression(Parser yyp):base(yyp){}}
831//%+TypecastExpression+162 831//%+TypecastExpression+163
832public class TypecastExpression : Expression{ 832public class TypecastExpression : Expression{
833 private string m_typecastType ; 833 private string m_typecastType ;
834 public TypecastExpression (Parser yyp, string typecastType , SYMBOL rhs ):base(((LSLSyntax 834 public TypecastExpression (Parser yyp, string typecastType , SYMBOL rhs ):base(((LSLSyntax
@@ -842,18 +842,18 @@ public class TypecastExpression : Expression{
842} 842}
843 843
844public override string yyname { get { return "TypecastExpression"; }} 844public override string yyname { get { return "TypecastExpression"; }}
845public override int yynum { get { return 162; }} 845public override int yynum { get { return 163; }}
846public TypecastExpression(Parser yyp):base(yyp){}} 846public TypecastExpression(Parser yyp):base(yyp){}}
847//%+ParenthesisExpression+163 847//%+ParenthesisExpression+164
848public class ParenthesisExpression : Expression{ 848public class ParenthesisExpression : Expression{
849 public ParenthesisExpression (Parser yyp, SYMBOL s ):base(((LSLSyntax 849 public ParenthesisExpression (Parser yyp, SYMBOL s ):base(((LSLSyntax
850)yyp)){ kids . Add ( s ); 850)yyp)){ kids . Add ( s );
851} 851}
852 852
853public override string yyname { get { return "ParenthesisExpression"; }} 853public override string yyname { get { return "ParenthesisExpression"; }}
854public override int yynum { get { return 163; }} 854public override int yynum { get { return 164; }}
855public ParenthesisExpression(Parser yyp):base(yyp){}} 855public ParenthesisExpression(Parser yyp):base(yyp){}}
856//%+IncrementDecrementExpression+164 856//%+IncrementDecrementExpression+165
857public class IncrementDecrementExpression : Expression{ 857public class IncrementDecrementExpression : Expression{
858 private string m_name ; 858 private string m_name ;
859 private string m_operation ; 859 private string m_operation ;
@@ -881,7 +881,7 @@ public class IncrementDecrementExpression : Expression{
881} 881}
882 882
883public override string yyname { get { return "IncrementDecrementExpression"; }} 883public override string yyname { get { return "IncrementDecrementExpression"; }}
884public override int yynum { get { return 164; }} 884public override int yynum { get { return 165; }}
885public IncrementDecrementExpression(Parser yyp):base(yyp){}} 885public IncrementDecrementExpression(Parser yyp):base(yyp){}}
886 886
887public class LSLProgramRoot_1 : LSLProgramRoot { 887public class LSLProgramRoot_1 : LSLProgramRoot {
@@ -2234,6 +2234,11 @@ public class Event_8 : Event {
2234 ((HTTP_REQUEST_EVENT)(yyq.StackAt(0).m_value)) 2234 ((HTTP_REQUEST_EVENT)(yyq.StackAt(0).m_value))
2235 .yytext){}} 2235 .yytext){}}
2236 2236
2237public class Event_9 : Event {
2238 public Event_9(Parser yyq):base(yyq,
2239 ((TRANSACTION_RESULT_EVENT)(yyq.StackAt(0).m_value))
2240 .yytext){}}
2241
2237public class VoidArgEvent_1 : VoidArgEvent { 2242public class VoidArgEvent_1 : VoidArgEvent {
2238 public VoidArgEvent_1(Parser yyq):base(yyq, 2243 public VoidArgEvent_1(Parser yyq):base(yyq,
2239 ((STATE_ENTRY_EVENT)(yyq.StackAt(0).m_value)) 2244 ((STATE_ENTRY_EVENT)(yyq.StackAt(0).m_value))
@@ -2376,12 +2381,12 @@ public class ArgumentDeclarationList_3 : ArgumentDeclarationList {
2376public class ArgumentList_3 : ArgumentList { 2381public class ArgumentList_3 : ArgumentList {
2377 public ArgumentList_3(Parser yyq):base(yyq){}} 2382 public ArgumentList_3(Parser yyq):base(yyq){}}
2378 2383
2379public class ArgumentDeclarationList_4 : ArgumentDeclarationList {
2380 public ArgumentDeclarationList_4(Parser yyq):base(yyq){}}
2381
2382public class ArgumentList_4 : ArgumentList { 2384public class ArgumentList_4 : ArgumentList {
2383 public ArgumentList_4(Parser yyq):base(yyq){}} 2385 public ArgumentList_4(Parser yyq):base(yyq){}}
2384 2386
2387public class ArgumentDeclarationList_4 : ArgumentDeclarationList {
2388 public ArgumentDeclarationList_4(Parser yyq):base(yyq){}}
2389
2385public class ArgumentDeclarationList_5 : ArgumentDeclarationList { 2390public class ArgumentDeclarationList_5 : ArgumentDeclarationList {
2386 public ArgumentDeclarationList_5(Parser yyq):base(yyq){}} 2391 public ArgumentDeclarationList_5(Parser yyq):base(yyq){}}
2387public yyLSLSyntax 2392public yyLSLSyntax
@@ -2394,10 +2399,10 @@ public yyLSLSyntax
23940,103,0,114,0, 23990,103,0,114,0,
239597,0,109,0,82, 240097,0,109,0,82,
23960,111,0,111,0, 24010,111,0,111,0,
2397116,0,1,96,1, 2402116,0,1,97,1,
23982,104,18,1,2841, 24032,104,18,1,2845,
2399102,2,0,105,5, 2404102,2,0,105,5,
2400394,1,0,106,18, 2405395,1,0,106,18,
24011,0,0,2,0, 24061,0,0,2,0,
24021,1,107,18,1, 24071,1,107,18,1,
24031,108,20,109,4, 24081,108,20,109,4,
@@ -2458,12 +2463,12 @@ public yyLSLSyntax
2458121,0,112,0,101, 2463121,0,112,0,101,
24590,110,0,97,0, 24640,110,0,97,0,
2460109,0,101,0,1, 2465109,0,101,0,1,
2461123,1,2,2,0, 2466124,1,2,2,0,
24621,9,131,18,1, 24671,9,131,18,1,
24639,132,20,133,4, 24689,132,20,133,4,
246410,73,0,68,0, 246910,73,0,68,0,
246569,0,78,0,84, 247069,0,78,0,84,
24660,1,92,1,1, 24710,1,93,1,1,
24672,0,1,10,134, 24722,0,1,10,134,
246818,1,10,135,20, 247318,1,10,135,20,
2469136,4,20,76,0, 2474136,4,20,76,0,
@@ -2487,48 +2492,50 @@ public yyLSLSyntax
2487105,0,111,0,110, 2492105,0,111,0,110,
24880,76,0,105,0, 24930,76,0,105,0,
2489115,0,116,0,1, 2494115,0,116,0,1,
2490111,1,2,2,0, 2495112,1,2,2,0,
24911,21,142,18,1, 24961,21,142,18,1,
249221,143,20,144,4, 249721,143,20,144,4,
249310,67,0,79,0, 249810,67,0,79,0,
249477,0,77,0,65, 249977,0,77,0,65,
24950,1,14,1,1, 25000,1,14,1,1,
24962,0,1,2807,145, 25012,0,1,1694,145,
249718,1,2807,146,20, 250218,1,1694,146,20,
2498147,4,18,83,0, 2503147,4,32,70,0,
249969,0,77,0,73,
25000,67,0,79,0,
250176,0,79,0,78,
25020,1,11,1,1,
25032,0,1,1694,148,
250418,1,1694,149,20,
2505150,4,32,70,0,
2506111,0,114,0,76, 2504111,0,114,0,76,
25070,111,0,111,0, 25050,111,0,111,0,
2508112,0,83,0,116, 2506112,0,83,0,116,
25090,97,0,116,0, 25070,97,0,116,0,
2510101,0,109,0,101, 2508101,0,109,0,101,
25110,110,0,116,0, 25090,110,0,116,0,
25121,146,1,2,2, 25101,147,1,2,2,
25130,1,1695,151,18, 25110,1,1695,148,18,
25141,1695,143,2,0, 25121,1695,143,2,0,
25131,2811,149,18,1,
25142811,150,20,151,4,
251518,83,0,69,0,
251677,0,73,0,67,
25170,79,0,76,0,
251879,0,78,0,1,
251911,1,1,2,0,
25151,2645,152,18,1, 25201,2645,152,18,1,
25162645,153,20,154,4, 25212645,153,20,154,4,
251734,86,0,111,0, 252232,73,0,110,0,
2518105,0,100,0,65, 2523116,0,65,0,114,
25190,114,0,103,0, 25240,103,0,83,0,
252083,0,116,0,97, 2525116,0,97,0,116,
25210,116,0,101,0, 25260,101,0,69,0,
252269,0,118,0,101, 2527118,0,101,0,110,
25230,110,0,116,0, 25280,116,0,1,107,
25241,104,1,2,2, 25291,2,2,0,1,
25250,1,2646,155,18, 25302646,155,18,1,2646,
25261,2646,156,20,157, 2531156,20,157,4,32,
25274,20,83,0,116, 253275,0,101,0,121,
25330,65,0,114,0,
2534103,0,83,0,116,
25280,97,0,116,0, 25350,97,0,116,0,
2529101,0,69,0,118, 2536101,0,69,0,118,
25300,101,0,110,0, 25370,101,0,110,0,
2531116,0,1,103,1, 2538116,0,1,106,1,
25322,2,0,1,30, 25392,2,0,1,30,
2533158,18,1,30,159, 2540158,18,1,30,159,
253420,160,4,22,68, 254120,160,4,22,68,
@@ -2536,7 +2543,7 @@ public yyLSLSyntax
2536108,0,97,0,114, 2543108,0,97,0,114,
25370,97,0,116,0, 25440,97,0,116,0,
2538105,0,111,0,110, 2545105,0,111,0,110,
25390,1,118,1,2, 25460,1,119,1,2,
25402,0,1,31,161, 25472,0,1,31,161,
254118,1,31,162,20, 254818,1,31,162,20,
2542163,4,22,82,0, 2549163,4,22,82,0,
@@ -2554,728 +2561,753 @@ public yyLSLSyntax
255469,0,1,12,1, 256169,0,1,12,1,
25551,2,0,1,2650, 25621,2,0,1,2650,
2556167,18,1,2650,168, 2563167,18,1,2650,168,
255720,169,4,44,73, 256420,169,4,44,75,
25580,110,0,116,0, 25650,101,0,121,0,
255982,0,111,0,116, 256673,0,110,0,116,
25600,82,0,111,0, 25670,73,0,110,0,
2561116,0,65,0,114, 2568116,0,65,0,114,
25620,103,0,83,0, 25690,103,0,83,0,
2563116,0,97,0,116, 2570116,0,97,0,116,
25640,101,0,69,0, 25710,101,0,69,0,
2565118,0,101,0,110, 2572118,0,101,0,110,
25660,116,0,1,108, 25730,116,0,1,111,
25671,2,2,0,1, 25741,2,2,0,1,
25682819,170,18,1,2819, 25752651,170,18,1,2651,
2569171,20,172,4,34, 2576171,20,172,4,44,
257071,0,108,0,111, 257773,0,110,0,116,
25710,98,0,97,0, 25780,86,0,101,0,
2572108,0,68,0,101, 257999,0,86,0,101,
25800,99,0,65,0,
2581114,0,103,0,83,
25820,116,0,97,0,
2583116,0,101,0,69,
25840,118,0,101,0,
2585110,0,116,0,1,
2586110,1,2,2,0,
25871,1114,173,18,1,
25881114,132,2,0,1,
25892654,174,18,1,2654,
2590153,2,0,1,1152,
2591175,18,1,1152,176,
259220,177,4,32,83,
25930,105,0,109,0,
2594112,0,108,0,101,
25950,65,0,115,0,
2596115,0,105,0,103,
25970,110,0,109,0,
2598101,0,110,0,116,
25990,1,138,1,2,
26002,0,1,1117,178,
260118,1,1117,179,20,
2602180,4,28,80,0,
260369,0,82,0,67,
26040,69,0,78,0,
260584,0,95,0,69,
26060,81,0,85,0,
260765,0,76,0,83,
26080,1,10,1,1,
26092,0,1,40,181,
261018,1,40,132,2,
26110,1,41,182,18,
26121,41,135,2,0,
26131,42,183,18,1,
261442,184,20,185,4,
261520,69,0,120,0,
2616112,0,114,0,101,
26170,115,0,115,0,
2618105,0,111,0,110,
26190,1,156,1,2,
26202,0,1,43,186,
262118,1,43,187,20,
2622188,4,22,82,0,
262373,0,71,0,72,
26240,84,0,95,0,
262583,0,72,0,73,
26260,70,0,84,0,
26271,41,1,1,2,
26280,1,44,189,18,
26291,44,132,2,0,
26301,1159,190,18,1,
26311159,184,2,0,1,
263246,191,18,1,46,
2633192,20,193,4,12,
263480,0,69,0,82,
26350,73,0,79,0,
263668,0,1,24,1,
26371,2,0,1,47,
2638194,18,1,47,132,
26392,0,1,48,195,
264018,1,48,196,20,
2641197,4,18,68,0,
264269,0,67,0,82,
26430,69,0,77,0,
264469,0,78,0,84,
26450,1,5,1,1,
26462,0,1,49,198,
264718,1,49,199,20,
2648200,4,18,73,0,
264978,0,67,0,82,
26500,69,0,77,0,
265169,0,78,0,84,
26520,1,4,1,1,
26532,0,1,50,201,
265418,1,50,196,2,
26550,1,51,202,18,
26561,51,199,2,0,
26571,52,203,18,1,
265852,135,2,0,1,
26592281,204,18,1,2281,
2660176,2,0,1,2841,
2661205,18,1,2841,206,
266220,207,4,48,71,
26630,108,0,111,0,
266498,0,97,0,108,
26650,70,0,117,0,
2666110,0,99,0,116,
26670,105,0,111,0,
2668110,0,68,0,101,
25730,102,0,105,0, 26690,102,0,105,0,
2574110,0,105,0,116, 2670110,0,105,0,116,
25750,105,0,111,0, 26710,105,0,111,0,
2576110,0,115,0,1, 2672110,0,1,100,1,
257797,1,2,2,0, 26732,2,0,1,2842,
25781,2652,173,18,1, 2674208,18,1,2842,209,
25792652,174,20,175,4, 267520,210,4,50,71,
258032,73,0,110,0, 26760,108,0,111,0,
2581116,0,65,0,114, 267798,0,97,0,108,
25820,103,0,83,0, 26780,86,0,97,0,
2583116,0,97,0,116, 2679114,0,105,0,97,
25840,101,0,69,0, 26800,98,0,108,0,
2585118,0,101,0,110, 2681101,0,68,0,101,
25860,116,0,1,106, 26820,99,0,108,0,
25871,2,2,0,1, 268397,0,114,0,97,
25881114,176,18,1,1114, 26840,116,0,105,0,
2589132,2,0,1,2654, 2685111,0,110,0,1,
2590177,18,1,2654,153, 268699,1,2,2,0,
25912,0,1,1152,178, 26871,2755,211,18,1,
259218,1,1152,179,20, 26882755,212,20,213,4,
2593180,4,32,83,0, 268922,82,0,73,0,
2594105,0,109,0,112, 269071,0,72,0,84,
25950,108,0,101,0, 26910,95,0,66,0,
259665,0,115,0,115, 269282,0,65,0,67,
25970,105,0,103,0, 26930,69,0,1,13,
2598110,0,109,0,101, 26941,1,2,0,1,
25990,110,0,116,0, 26951730,214,18,1,1730,
26001,137,1,2,2, 2696176,2,0,1,1731,
26010,1,1117,181,18, 2697215,18,1,1731,150,
26021,1117,182,20,183, 26982,0,1,61,216,
26034,28,80,0,69, 269918,1,61,129,2,
26040,82,0,67,0, 27000,1,62,217,18,
260569,0,78,0,84, 27011,62,162,2,0,
26060,95,0,69,0, 27021,63,218,18,1,
260781,0,85,0,65, 270363,132,2,0,1,
26080,76,0,83,0, 270465,219,18,1,65,
26091,10,1,1,2, 2705192,2,0,1,66,
26100,1,40,184,18, 2706220,18,1,66,132,
26111,40,132,2,0, 27072,0,1,67,221,
26121,41,185,18,1, 270818,1,67,196,2,
261341,135,2,0,1, 27090,1,68,222,18,
261442,186,18,1,42, 27101,68,199,2,0,
2615187,20,188,4,20, 27111,69,223,18,1,
261669,0,120,0,112, 271269,196,2,0,1,
26170,114,0,101,0, 271370,224,18,1,70,
2618115,0,115,0,105, 2714199,2,0,1,71,
26190,111,0,110,0, 2715225,18,1,71,135,
26201,155,1,2,2, 27162,0,1,73,226,
26210,1,43,189,18, 271718,1,73,184,2,
26221,43,190,20,191, 27180,1,74,227,18,
26234,22,82,0,73, 27191,74,162,2,0,
26240,71,0,72,0, 27201,1189,228,18,1,
262584,0,95,0,83, 27211189,229,20,230,4,
26260,72,0,73,0, 272222,83,0,84,0,
262770,0,84,0,1, 272365,0,82,0,95,
262841,1,1,2,0, 27240,69,0,81,0,
26291,44,192,18,1, 272585,0,65,0,76,
263044,132,2,0,1, 27260,83,0,1,8,
26311159,193,18,1,1159, 27271,1,2,0,1,
2632187,2,0,1,46, 272876,231,18,1,76,
2633194,18,1,46,195, 2729232,20,233,4,20,
263420,196,4,12,80, 273076,0,69,0,70,
26350,69,0,82,0, 27310,84,0,95,0,
263673,0,79,0,68, 273283,0,72,0,73,
26370,1,24,1,1, 27330,70,0,84,0,
26382,0,1,47,197, 27341,40,1,1,2,
263918,1,47,132,2, 27350,1,1153,234,18,
26400,1,48,198,18, 27361,1153,235,20,236,
26411,48,199,20,200, 27374,24,83,0,76,
26424,18,68,0,69, 27380,65,0,83,0,
26430,67,0,82,0, 273972,0,95,0,69,
264469,0,77,0,69, 27400,81,0,85,0,
26450,78,0,84,0, 274165,0,76,0,83,
26461,5,1,1,2, 27420,1,9,1,1,
26470,1,49,201,18, 27432,0,1,79,237,
26481,49,202,20,203, 274418,1,79,238,20,
26494,18,73,0,78, 2745239,4,10,84,0,
26500,67,0,82,0, 274673,0,76,0,68,
265169,0,77,0,69, 27470,69,0,1,36,
26520,78,0,84,0, 27481,1,2,0,1,
26531,4,1,1,2, 27491195,240,18,1,1195,
26540,1,50,204,18, 2750184,2,0,1,82,
26551,50,199,2,0, 2751241,18,1,82,184,
26561,51,205,18,1, 27522,0,1,1123,242,
265751,202,2,0,1, 275318,1,1123,184,2,
265852,206,18,1,52, 27540,1,85,243,18,
2659135,2,0,1,2281, 27551,85,244,20,245,
2660207,18,1,2281,179, 27564,26,83,0,84,
26612,0,1,2839,208, 27570,82,0,79,0,
266218,1,2839,209,20, 275875,0,69,0,95,
2663210,4,48,71,0, 27590,83,0,84,0,
2664108,0,111,0,98, 276082,0,79,0,75,
26650,97,0,108,0, 27610,69,0,1,39,
266670,0,117,0,110, 27621,1,2,0,1,
26670,99,0,116,0, 27632547,246,18,1,2547,
2668105,0,111,0,110, 2764247,20,248,4,28,
26690,68,0,101,0, 276582,0,111,0,116,
2670102,0,105,0,110,
26710,105,0,116,0,
2672105,0,111,0,110,
26730,1,99,1,2,
26742,0,1,2840,211,
267518,1,2840,212,20,
2676213,4,50,71,0,
2677108,0,111,0,98,
26780,97,0,108,0,
267986,0,97,0,114,
26800,105,0,97,0,
268198,0,108,0,101,
26820,68,0,101,0, 27660,68,0,101,0,
268399,0,108,0,97, 276799,0,108,0,97,
26840,114,0,97,0, 27680,114,0,97,0,
2685116,0,105,0,111, 2769116,0,105,0,111,
26860,110,0,1,98, 27700,110,0,1,123,
26871,2,2,0,1, 27711,2,2,0,1,
26882841,104,1,2842,214, 277289,249,18,1,89,
268918,1,2842,215,23, 2773250,20,251,4,10,
2690216,4,6,69,0, 277477,0,73,0,78,
269179,0,70,0,1, 27750,85,0,83,0,
26922,1,6,2,0, 27761,19,1,1,2,
26931,1730,217,18,1, 27770,1,2318,252,18,
26941730,179,2,0,1, 27781,2318,150,2,0,
26951731,218,18,1,1731, 27791,93,253,18,1,
2696146,2,0,1,61, 278093,184,2,0,1,
2697219,18,1,61,129, 27812792,254,18,1,2792,
26982,0,1,62,220, 2782184,2,0,1,97,
269918,1,62,162,2, 2783255,18,1,97,256,
27000,1,63,221,18, 278420,257,4,14,65,
27011,63,132,2,0, 27850,77,0,80,0,
27021,65,222,18,1, 278695,0,65,0,77,
270365,195,2,0,1, 27870,80,0,1,38,
270466,223,18,1,66, 27881,1,2,0,1,
2705132,2,0,1,67, 2789102,258,18,1,102,
2706224,18,1,67,199, 2790259,20,260,4,22,
27072,0,1,68,225, 279169,0,88,0,67,
270818,1,68,202,2, 27920,76,0,65,0,
27090,1,69,226,18, 279377,0,65,0,84,
27101,69,199,2,0, 27940,73,0,79,0,
27111,70,227,18,1, 279578,0,1,37,1,
271270,202,2,0,1, 27961,2,0,1,1775,
271371,228,18,1,71, 2797261,18,1,1775,162,
2714135,2,0,1,73, 27982,0,1,107,262,
2715229,18,1,73,187, 279918,1,107,184,2,
27162,0,1,74,230, 28000,1,2337,263,18,
271718,1,74,162,2, 28011,2337,162,2,0,
27180,1,1189,231,18, 28021,1224,264,18,1,
27191,1189,232,20,233, 28031224,176,2,0,1,
27204,22,83,0,84, 28041225,265,18,1,1225,
27210,65,0,82,0, 2805266,20,267,4,24,
280677,0,73,0,78,
28070,85,0,83,0,
272295,0,69,0,81, 280895,0,69,0,81,
27230,85,0,65,0, 28090,85,0,65,0,
272476,0,83,0,1, 281076,0,83,0,1,
27258,1,1,2,0, 28117,1,1,2,0,
27261,76,234,18,1, 28121,112,268,18,1,
272776,235,20,236,4, 2813112,269,20,270,4,
272820,76,0,69,0, 281428,71,0,82,0,
272970,0,84,0,95, 281569,0,65,0,84,
27300,83,0,72,0, 28160,69,0,82,0,
273173,0,70,0,84, 281795,0,69,0,81,
27320,1,40,1,1, 28180,85,0,65,0,
27332,0,1,1153,237, 281976,0,83,0,1,
273418,1,1153,238,20, 282032,1,1,2,0,
2735239,4,24,83,0, 28211,1188,271,18,1,
273676,0,65,0,83, 28221188,176,2,0,1,
27370,72,0,95,0, 28231231,272,18,1,1231,
273869,0,81,0,85, 2824184,2,0,1,118,
27390,65,0,76,0, 2825273,18,1,118,184,
274083,0,1,9,1, 28262,0,1,1737,274,
27411,2,0,1,79, 282718,1,1737,184,2,
2742240,18,1,79,241, 28280,1,124,275,18,
274320,242,4,10,84, 28291,124,276,20,277,
27440,73,0,76,0, 28304,22,76,0,69,
274568,0,69,0,1, 28310,83,0,83,0,
274636,1,1,2,0, 283295,0,69,0,81,
27471,1195,243,18,1, 28330,85,0,65,0,
27481195,187,2,0,1, 283476,0,83,0,1,
274982,244,18,1,82, 283531,1,1,2,0,
2750187,2,0,1,1123, 28361,2657,278,18,1,
2751245,18,1,1123,187, 28372657,279,20,280,4,
27522,0,1,85,246, 283820,83,0,116,0,
275318,1,85,247,20, 283997,0,116,0,101,
2754248,4,26,83,0, 28400,69,0,118,0,
275584,0,82,0,79, 2841101,0,110,0,116,
27560,75,0,69,0, 28420,1,104,1,2,
275795,0,83,0,84, 28432,0,1,2658,281,
27580,82,0,79,0, 284418,1,2658,282,20,
275975,0,69,0,1, 2845283,4,26,68,0,
276039,1,1,2,0, 284669,0,70,0,65,
27611,2547,249,18,1, 28470,85,0,76,0,
27622547,250,20,251,4, 284884,0,95,0,83,
276364,73,0,110,0, 28490,84,0,65,0,
2764116,0,82,0,111, 285084,0,69,0,1,
27650,116,0,82,0, 285147,1,1,2,0,
2766111,0,116,0,65, 28521,2659,284,18,1,
27670,114,0,103,0, 28532659,165,2,0,1,
2768117,0,109,0,101, 2854130,285,18,1,130,
27690,110,0,116,0, 2855184,2,0,1,2843,
277068,0,101,0,99, 2856286,18,1,2843,206,
27710,108,0,97,0, 28572,0,1,1803,287,
2772114,0,97,0,116, 285818,1,1803,288,20,
27730,105,0,111,0, 2859289,4,18,83,0,
2774110,0,76,0,105, 2860116,0,97,0,116,
27750,115,0,116,0, 28610,101,0,109,0,
27761,115,1,2,2, 2862101,0,110,0,116,
27770,1,89,252,18, 28630,1,135,1,2,
27781,89,253,20,254, 28642,0,1,1804,290,
27794,10,77,0,73, 286518,1,1804,291,20,
27800,78,0,85,0, 2866292,4,4,68,0,
278183,0,1,19,1, 286779,0,1,44,1,
27821,2,0,1,2318, 28681,2,0,1,2591,
2783255,18,1,2318,146, 2869293,18,1,2591,140,
27842,0,1,2788,256, 28702,0,1,2364,294,
278518,1,2788,187,2, 287118,1,2364,288,2,
27860,1,93,257,18, 28720,1,137,295,18,
27871,93,187,2,0, 28731,137,296,20,297,
27881,97,258,18,1, 28744,36,69,0,88,
278997,259,20,260,4,
279014,65,0,77,0,
279180,0,95,0,65,
27920,77,0,80,0,
27931,38,1,1,2,
27940,1,102,261,18,
27951,102,262,20,263,
27964,22,69,0,88,
27970,67,0,76,0, 28750,67,0,76,0,
279865,0,77,0,65, 287665,0,77,0,65,
27990,84,0,73,0, 28770,84,0,73,0,
280079,0,78,0,1, 287879,0,78,0,95,
280137,1,1,2,0, 28790,69,0,81,0,
28021,1775,264,18,1, 288085,0,65,0,76,
28031775,162,2,0,1, 28810,83,0,1,30,
2804107,265,18,1,107,
2805187,2,0,1,2337,
2806266,18,1,2337,162,
28072,0,1,1224,267,
280818,1,1224,179,2,
28090,1,1225,268,18,
28101,1225,269,20,270,
28114,24,77,0,73,
28120,78,0,85,0,
281383,0,95,0,69,
28140,81,0,85,0,
281565,0,76,0,83,
28160,1,7,1,1,
28172,0,1,112,271,
281818,1,112,272,20,
2819273,4,28,71,0,
282082,0,69,0,65,
28210,84,0,69,0,
282282,0,95,0,69,
28230,81,0,85,0,
282465,0,76,0,83,
28250,1,32,1,1,
28262,0,1,1188,274,
282718,1,1188,179,2,
28280,1,1231,275,18,
28291,1231,187,2,0,
28301,118,276,18,1,
2831118,187,2,0,1,
28321737,277,18,1,1737,
2833187,2,0,1,2818,
2834278,18,1,2818,146,
28352,0,1,124,279,
283618,1,124,280,20,
2837281,4,22,76,0,
283869,0,83,0,83,
28390,95,0,69,0,
284081,0,85,0,65,
28410,76,0,83,0,
28421,31,1,1,2,
28430,1,2657,282,18,
28441,2657,165,2,0,
28451,130,283,18,1,
2846130,187,2,0,1,
28471803,284,18,1,1803,
2848285,20,286,4,18,
284983,0,116,0,97,
28500,116,0,101,0,
2851109,0,101,0,110,
28520,116,0,1,134,
28531,2,2,0,1,
28541804,287,18,1,1804,
2855288,20,289,4,4,
285668,0,79,0,1,
285744,1,1,2,0,
28581,2830,290,18,1,
28592830,291,20,292,4,
286012,83,0,116,0,
286197,0,116,0,101,
28620,115,0,1,100,
28631,2,2,0,1,
28642364,293,18,1,2364,
2865285,2,0,1,137,
2866294,18,1,137,295,
286720,296,4,36,69,
28680,88,0,67,0,
286976,0,65,0,77,
28700,65,0,84,0,
287173,0,79,0,78,
28720,95,0,69,0,
287381,0,85,0,65,
28740,76,0,83,0,
28751,30,1,1,2,
28760,1,2293,297,18,
28771,2293,146,2,0,
28781,1701,298,18,1,
28791701,187,2,0,1,
28801756,299,18,1,1756,
2881146,2,0,1,2527,
2882300,18,1,2527,132,
28832,0,1,143,301,
288418,1,143,187,2,
28850,1,2299,302,18,
28861,2299,187,2,0,
28871,1260,303,18,1,
28881260,179,2,0,1,
28891261,304,18,1,1261,
2890305,20,306,4,22,
289180,0,76,0,85,
28920,83,0,95,0,
289369,0,81,0,85,
28940,65,0,76,0,
289583,0,1,6,1,
28961,2,0,1,2528,
2897307,18,1,2528,308,
289820,309,4,28,86,
28990,101,0,99,0,
290068,0,101,0,99,
29010,108,0,97,0,
2902114,0,97,0,116,
29030,105,0,111,0,
2904110,0,1,121,1,
29052,2,0,1,151,
2906310,18,1,151,311,
290720,312,4,26,69,
29080,81,0,85,0,
290965,0,76,0,83,
29100,95,0,69,0,
291181,0,85,0,65,
29120,76,0,83,0,
29131,29,1,1,2,
29140,1,1267,313,18,
29151,1267,187,2,0,
29161,2765,314,18,1,
29172765,132,2,0,1,
2918157,315,18,1,157,
2919187,2,0,1,1773,
2920316,18,1,1773,149,
29212,0,1,1832,317,
292218,1,1832,285,2,
29230,1,1833,318,18,
29241,1833,319,20,320,
29254,10,87,0,72,
29260,73,0,76,0,
292769,0,1,45,1,
29281,2,0,1,1834,
2929321,18,1,1834,135,
29302,0,1,166,322,
293118,1,166,323,20,
2932324,4,20,76,0,
293369,0,70,0,84,
29340,95,0,65,0,
293578,0,71,0,76,
29360,69,0,1,25,
29371,1,2,0,1, 28821,1,2,0,1,
29381840,325,18,1,1840, 28832293,298,18,1,2293,
2939187,2,0,1,2779, 2884150,2,0,1,2834,
2940326,18,1,2779,327, 2885299,18,1,2834,300,
294120,328,4,34,67, 288620,301,4,12,83,
29420,111,0,109,0, 28870,116,0,97,0,
2943112,0,111,0,117, 2888116,0,101,0,115,
29440,110,0,100,0, 28890,1,101,1,2,
294583,0,116,0,97, 28902,0,1,1701,302,
29460,116,0,101,0, 289118,1,1701,184,2,
2947109,0,101,0,110, 28920,1,1756,303,18,
29480,116,0,1,132, 28931,1756,150,2,0,
28941,2527,304,18,1,
28952527,114,2,0,1,
2896143,305,18,1,143,
2897184,2,0,1,2299,
2898306,18,1,2299,184,
28992,0,1,1260,307,
290018,1,1260,176,2,
29010,1,1261,308,18,
29021,1261,309,20,310,
29034,22,80,0,76,
29040,85,0,83,0,
290595,0,69,0,81,
29060,85,0,65,0,
290776,0,83,0,1,
29086,1,1,2,0,
29091,2528,311,18,1,
29102528,132,2,0,1,
29112844,312,18,1,2844,
2912209,2,0,1,2845,
2913104,1,151,313,18,
29141,151,314,20,315,
29154,26,69,0,81,
29160,85,0,65,0,
291776,0,83,0,95,
29180,69,0,81,0,
291985,0,65,0,76,
29200,83,0,1,29,
29211,1,2,0,1,
29221267,316,18,1,1267,
2923184,2,0,1,157,
2924317,18,1,157,184,
29252,0,1,2767,318,
292618,1,2767,319,20,
2927320,4,10,83,0,
2928116,0,97,0,116,
29290,101,0,1,102,
29491,2,2,0,1, 29301,2,2,0,1,
2950172,329,18,1,172, 29311773,321,18,1,1773,
2951187,2,0,1,2335, 2932146,2,0,1,1832,
2952330,18,1,2335,149, 2933322,18,1,1832,288,
29532,0,1,1296,331, 29342,0,1,1833,323,
295418,1,1296,179,2, 293518,1,1833,324,20,
29550,1,1297,332,18, 2936325,4,10,87,0,
29561,1297,333,20,334, 293772,0,73,0,76,
29380,69,0,1,45,
29391,1,2,0,1,
29401834,326,18,1,1834,
2941135,2,0,1,166,
2942327,18,1,166,328,
294320,329,4,20,76,
29440,69,0,70,0,
294584,0,95,0,65,
29460,78,0,71,0,
294776,0,69,0,1,
294825,1,1,2,0,
29491,1840,330,18,1,
29501840,184,2,0,1,
29512779,331,18,1,2779,
2952140,2,0,1,172,
2953332,18,1,172,184,
29542,0,1,2785,333,
295518,1,2785,159,2,
29560,1,2786,334,18,
29571,2786,335,20,336,
29574,12,69,0,81, 29584,12,69,0,81,
29580,85,0,65,0, 29590,85,0,65,0,
295976,0,83,0,1, 296076,0,83,0,1,
296015,1,1,2,0, 296115,1,1,2,0,
29611,2413,335,18,1, 29621,2335,337,18,1,
29622413,336,20,337,4, 29632335,146,2,0,1,
296326,83,0,116,0, 29641296,338,18,1,1296,
296497,0,116,0,101, 2965176,2,0,1,1297,
29650,109,0,101,0, 2966339,18,1,1297,335,
2966110,0,116,0,76, 29672,0,1,2413,340,
29670,105,0,115,0, 296818,1,2413,341,20,
2968116,0,1,133,1, 2969342,4,26,83,0,
29692,2,0,1,1859, 2970116,0,97,0,116,
2970338,18,1,1859,162, 29710,101,0,109,0,
29712,0,1,1860,339, 2972101,0,110,0,116,
297218,1,1860,146,2, 29730,76,0,105,0,
29730,1,188,340,18, 2974115,0,116,0,1,
29741,188,187,2,0, 2975134,1,2,2,0,
29751,182,341,18,1, 29761,1859,343,18,1,
2976182,342,20,343,4, 29771859,162,2,0,1,
297722,82,0,73,0, 29781860,344,18,1,1860,
297871,0,72,0,84, 2979150,2,0,1,188,
29790,95,0,65,0, 2980345,18,1,188,184,
298078,0,71,0,76, 29812,0,1,182,346,
29810,69,0,1,26, 298218,1,182,347,20,
29821,1,2,0,1, 2983348,4,22,82,0,
2983199,344,18,1,199, 298473,0,71,0,72,
2984345,20,346,4,10, 29850,84,0,95,0,
298567,0,65,0,82, 298665,0,78,0,71,
29860,69,0,84,0, 29870,76,0,69,0,
29871,35,1,1,2, 29881,26,1,1,2,
29880,1,1871,347,18, 29890,1,199,349,18,
29891,1871,179,2,0, 29901,199,350,20,351,
29901,1872,348,18,1, 29914,10,67,0,65,
29911872,162,2,0,1, 29920,82,0,69,0,
29921873,349,18,1,1873, 299384,0,1,35,1,
2993146,2,0,1,1875, 29941,2,0,1,1871,
2994350,18,1,1875,319, 2995352,18,1,1871,176,
29952,0,1,205,351, 29962,0,1,1872,353,
299618,1,205,187,2, 299718,1,1872,162,2,
29970,1,2581,352,18, 29980,1,1873,354,18,
29981,2581,135,2,0, 29991,1873,150,2,0,
29991,1882,353,18,1, 30001,1875,355,18,1,
30001882,187,2,0,1, 30011875,324,2,0,1,
30012227,354,18,1,2227, 3002205,356,18,1,205,
3002285,2,0,1,2590, 3003184,2,0,1,2581,
3003355,18,1,2590,140, 3004357,18,1,2581,358,
30042,0,1,217,356, 300520,359,4,10,69,
300518,1,217,357,20, 30060,118,0,101,0,
3006358,4,12,83,0, 3007110,0,116,0,1,
3008125,1,2,2,0,
30091,2515,360,18,1,
30102515,143,2,0,1,
30111882,361,18,1,1882,
3012184,2,0,1,2227,
3013362,18,1,2227,288,
30142,0,1,217,363,
301518,1,217,364,20,
3016365,4,12,83,0,
300784,0,82,0,79, 301784,0,82,0,79,
30080,75,0,69,0, 30180,75,0,69,0,
30091,34,1,1,2, 30191,34,1,1,2,
30100,1,1332,359,18, 30200,1,1332,366,18,
30111,1332,179,2,0, 30211,1332,176,2,0,
30121,1335,360,18,1, 30221,1335,367,18,1,
30131335,182,2,0,1, 30231335,179,2,0,1,
3014223,361,18,1,223, 3024223,368,18,1,223,
3015187,2,0,1,1341, 3025184,2,0,1,2846,
3016362,18,1,1341,187, 3026369,18,1,2846,370,
30172,0,1,1901,363, 302723,371,4,6,69,
301818,1,1901,162,2, 30280,79,0,70,0,
30190,1,1303,364,18, 30291,2,1,6,2,
30201,1303,187,2,0, 30300,1,1341,372,18,
30211,2837,365,18,1, 30311,1341,184,2,0,
30222837,209,2,0,1, 30321,1901,373,18,1,
30232838,366,18,1,2838, 30331901,162,2,0,1,
3024212,2,0,1,2462, 30341303,374,18,1,1303,
3025367,18,1,2462,285, 3035184,2,0,1,2462,
30262,0,1,236,368, 3036375,18,1,2462,288,
302718,1,236,369,20, 30372,0,1,236,376,
3028370,4,6,65,0, 303818,1,236,377,20,
3039378,4,6,65,0,
302977,0,80,0,1, 304077,0,80,0,1,
303033,1,1,2,0, 304133,1,1,2,0,
30311,2466,371,18,1, 30421,2466,379,18,1,
30322466,327,2,0,1, 30432466,380,20,381,4,
30332467,372,18,1,2467, 304434,67,0,111,0,
3034159,2,0,1,2468, 3045109,0,112,0,111,
3035373,18,1,2468,374, 30460,117,0,110,0,
303620,375,4,10,83, 3047100,0,83,0,116,
30370,84,0,65,0, 30480,97,0,116,0,
303884,0,69,0,1, 3049101,0,109,0,101,
303948,1,1,2,0, 30500,110,0,116,0,
30401,2469,376,18,1, 30511,133,1,2,2,
30412469,132,2,0,1, 30520,1,2467,382,18,
3042242,377,18,1,242, 30531,2467,159,2,0,
3043187,2,0,1,2471, 30541,2468,383,18,1,
3044378,18,1,2471,379, 30552468,384,20,385,4,
304520,380,4,26,67, 305610,83,0,84,0,
30460,79,0,78,0, 305765,0,84,0,69,
304784,0,82,0,79, 30580,1,48,1,1,
30480,76,0,95,0, 30592,0,1,2469,386,
304969,0,86,0,69, 306018,1,2469,132,2,
30500,78,0,84,0, 30610,1,242,387,18,
30511,65,1,1,2, 30621,242,184,2,0,
30520,1,2472,381,18, 30631,2471,388,18,1,
30531,2472,382,20,383, 30642471,389,20,390,4,
30544,30,65,0,84, 306526,67,0,79,0,
30550,95,0,84,0, 306678,0,84,0,82,
305665,0,82,0,71, 30670,79,0,76,0,
30570,69,0,84,0,
305895,0,69,0,86, 306895,0,69,0,86,
30590,69,0,78,0, 30690,69,0,78,0,
306084,0,1,59,1, 307084,0,1,65,1,
30611,2,0,1,2473, 30711,2,0,1,2472,
3062384,18,1,2473,385, 3072391,18,1,2472,392,
306320,386,4,38,65, 307320,393,4,30,65,
30640,84,0,95,0, 30740,84,0,95,0,
306582,0,79,0,84, 307584,0,65,0,82,
30660,95,0,84,0, 30760,71,0,69,0,
306765,0,82,0,71, 307784,0,95,0,69,
30680,69,0,84,0, 30780,86,0,69,0,
306995,0,69,0,86, 307978,0,84,0,1,
30700,69,0,78,0, 308059,1,1,2,0,
307184,0,1,58,1, 30811,2473,394,18,1,
30721,2,0,1,2474, 30822473,395,20,396,4,
3073387,18,1,2474,388, 308338,65,0,84,0,
307420,389,4,52,76, 308495,0,82,0,79,
30750,65,0,78,0, 30850,84,0,95,0,
307668,0,95,0,67, 308684,0,65,0,82,
30770,79,0,76,0, 30870,71,0,69,0,
307876,0,73,0,83, 308884,0,95,0,69,
30790,73,0,79,0, 30890,86,0,69,0,
308078,0,95,0,83, 309078,0,84,0,1,
30810,84,0,65,0, 309158,1,1,2,0,
308282,0,84,0,95, 30921,2474,397,18,1,
30830,69,0,86,0, 30932474,398,20,399,4,
308469,0,78,0,84, 309452,76,0,65,0,
30850,1,71,1,1,
30862,0,1,2475,390,
308718,1,2475,391,20,
3088392,4,48,76,0,
308965,0,78,0,68,
30900,95,0,67,0,
309179,0,76,0,76,
30920,73,0,83,0,
309373,0,79,0,78,
30940,95,0,69,0,
309578,0,68,0,95, 309578,0,68,0,95,
30960,69,0,86,0, 30960,67,0,79,0,
309769,0,78,0,84, 309776,0,76,0,73,
30980,1,70,1,1, 30980,83,0,73,0,
30992,0,1,2476,393, 309979,0,78,0,95,
310018,1,2476,394,20, 31000,83,0,84,0,
3101395,4,40,76,0, 310165,0,82,0,84,
310265,0,78,0,68,
31030,95,0,67,0,
310479,0,76,0,76,
31050,73,0,83,0,
310673,0,79,0,78,
31070,95,0,69,0, 31020,95,0,69,0,
310886,0,69,0,78, 310386,0,69,0,78,
31090,84,0,1,69, 31040,84,0,1,71,
31101,1,2,0,1, 31051,1,2,0,1,
31112477,396,18,1,2477, 31062475,400,18,1,2475,
3112397,20,398,4,34, 3107401,20,402,4,48,
311384,0,79,0,85, 310876,0,65,0,78,
31140,67,0,72,0, 31090,68,0,95,0,
311595,0,83,0,84, 311067,0,79,0,76,
31160,65,0,82,0, 31110,76,0,73,0,
311784,0,95,0,69, 311283,0,73,0,79,
31180,86,0,69,0, 31130,78,0,95,0,
311978,0,84,0,1, 311469,0,78,0,68,
312089,1,1,2,0,
31211,2478,399,18,1,
31222478,400,20,401,4,
312330,84,0,79,0,
312485,0,67,0,72,
31250,95,0,69,0, 31150,95,0,69,0,
312678,0,68,0,95, 311686,0,69,0,78,
31270,69,0,86,0, 31170,84,0,1,70,
312869,0,78,0,84, 31181,1,2,0,1,
31290,1,90,1,1, 31192476,403,18,1,2476,
31302,0,1,2479,402, 3120404,20,405,4,40,
313118,1,2479,403,20, 312176,0,65,0,78,
3132404,4,22,84,0, 31220,68,0,95,0,
313379,0,85,0,67, 312367,0,79,0,76,
31340,72,0,95,0, 31240,76,0,73,0,
313569,0,86,0,69, 312583,0,73,0,79,
31360,78,0,84,0, 31260,78,0,95,0,
31371,88,1,1,2,
31380,1,2480,405,18,
31391,2480,406,20,407,
31404,24,83,0,69,
31410,78,0,83,0,
314279,0,82,0,95,
31430,69,0,86,0,
314469,0,78,0,84,
31450,1,84,1,1,
31462,0,1,2481,408,
314718,1,2481,409,20,
3148410,4,52,82,0,
314985,0,78,0,95,
31500,84,0,73,0,
315177,0,69,0,95,
31520,80,0,69,0,
315382,0,77,0,73,
31540,83,0,83,0,
315573,0,79,0,78,
31560,83,0,95,0,
315769,0,86,0,69, 312769,0,86,0,69,
31580,78,0,84,0, 31280,78,0,84,0,
31591,83,1,1,2, 31291,69,1,1,2,
31600,1,2482,411,18, 31300,1,2477,406,18,
31611,2482,412,20,413, 31311,2477,407,20,408,
31624,24,79,0,78, 31324,34,84,0,79,
31630,95,0,82,0, 31330,85,0,67,0,
316469,0,90,0,95, 313472,0,95,0,83,
31350,84,0,65,0,
313682,0,84,0,95,
31650,69,0,86,0, 31370,69,0,86,0,
316669,0,78,0,84, 313869,0,78,0,84,
31670,1,81,1,1, 31390,1,89,1,1,
31682,0,1,2483,414, 31402,0,1,2478,409,
316918,1,2483,415,20, 314118,1,2478,410,20,
3170416,4,42,67,0, 3142411,4,30,84,0,
317179,0,76,0,76, 314379,0,85,0,67,
31720,73,0,83,0, 31440,72,0,95,0,
317373,0,79,0,78, 314569,0,78,0,68,
31740,95,0,83,0,
317584,0,65,0,82,
31760,84,0,95,0,
317769,0,86,0,69,
31780,78,0,84,0,
31791,64,1,1,2,
31800,1,256,417,18,
31811,256,418,20,419,
31824,14,80,0,69,
31830,82,0,67,0,
318469,0,78,0,84,
31850,1,22,1,1,
31862,0,1,1371,420,
318718,1,1371,238,2,
31880,1,2486,421,18,
31891,2486,422,20,423,
31904,26,67,0,72,
31910,65,0,78,0,
319271,0,69,0,68,
31930,95,0,69,0, 31460,95,0,69,0,
319486,0,69,0,78, 314786,0,69,0,78,
31950,84,0,1,61, 31480,84,0,1,90,
31961,1,2,0,1, 31491,1,2,0,1,
31972487,424,18,1,2487, 31502479,412,18,1,2479,
3198425,20,426,4,32, 3151413,20,414,4,22,
319979,0,66,0,74, 315284,0,79,0,85,
32000,69,0,67,0, 31530,67,0,72,0,
320184,0,95,0,82,
32020,69,0,90,0,
320395,0,69,0,86, 315495,0,69,0,86,
32040,69,0,78,0, 31550,69,0,78,0,
320584,0,1,80,1, 315684,0,1,88,1,
32061,2,0,1,1931, 31571,2,0,1,2480,
3207427,18,1,1931,285, 3158415,18,1,2480,416,
32082,0,1,1932,428, 315920,417,4,24,83,
320918,1,1932,429,20, 31600,69,0,78,0,
3210430,4,4,73,0, 316183,0,79,0,82,
321170,0,1,42,1, 31620,95,0,69,0,
32121,2,0,1,262, 316386,0,69,0,78,
3213431,18,1,262,187, 31640,84,0,1,84,
32142,0,1,1377,432, 31651,1,2,0,1,
321518,1,1377,187,2, 31662481,418,18,1,2481,
32160,1,2492,433,18, 3167419,20,420,4,52,
32171,2492,434,20,435, 316882,0,85,0,78,
32184,30,78,0,79, 31690,95,0,84,0,
32190,95,0,83,0, 317073,0,77,0,69,
322069,0,78,0,83, 31710,95,0,80,0,
32210,79,0,82,0, 317269,0,82,0,77,
31730,73,0,83,0,
317483,0,73,0,79,
31750,78,0,83,0,
322295,0,69,0,86, 317695,0,69,0,86,
32230,69,0,78,0, 31770,69,0,78,0,
322484,0,1,77,1, 317884,0,1,83,1,
32251,2,0,1,1876, 31791,2,0,1,2482,
3226436,18,1,1876,135, 3180421,18,1,2482,422,
32272,0,1,2494,437, 318120,423,4,24,79,
322818,1,2494,438,20, 31820,78,0,95,0,
3229439,4,32,77,0, 318382,0,69,0,90,
323079,0,86,0,73, 31840,95,0,69,0,
32310,78,0,71,0, 318586,0,69,0,78,
323295,0,69,0,78, 31860,84,0,1,81,
31871,1,2,0,1,
31882483,424,18,1,2483,
3189425,20,426,4,42,
319067,0,79,0,76,
31910,76,0,73,0,
319283,0,73,0,79,
31930,78,0,95,0,
319483,0,84,0,65,
31950,82,0,84,0,
319695,0,69,0,86,
31970,69,0,78,0,
319884,0,1,64,1,
31991,2,0,1,256,
3200427,18,1,256,428,
320120,429,4,14,80,
32020,69,0,82,0,
320367,0,69,0,78,
32040,84,0,1,22,
32051,1,2,0,1,
32061371,430,18,1,1371,
3207235,2,0,1,2486,
3208431,18,1,2486,432,
320920,433,4,26,67,
32100,72,0,65,0,
321178,0,71,0,69,
32330,68,0,95,0, 32120,68,0,95,0,
323469,0,86,0,69, 321369,0,86,0,69,
32350,78,0,84,0, 32140,78,0,84,0,
32361,75,1,1,2, 32151,61,1,1,2,
32370,1,2495,440,18, 32160,1,2487,434,18,
32381,2495,441,20,442, 32171,2487,435,20,436,
32394,32,83,0,84, 32184,32,79,0,66,
32400,65,0,84,0, 32190,74,0,69,0,
324169,0,95,0,69, 322067,0,84,0,95,
32420,88,0,73,0, 32210,82,0,69,0,
324384,0,95,0,69, 322290,0,95,0,69,
32440,86,0,69,0, 32230,86,0,69,0,
324578,0,84,0,1, 322478,0,84,0,1,
324686,1,1,2,0, 322580,1,1,2,0,
32471,1939,443,18,1, 32261,1931,437,18,1,
32481939,187,2,0,1, 32271931,288,2,0,1,
32492497,444,18,1,2497, 32281932,438,18,1,1932,
3250445,20,446,4,36, 3229439,20,440,4,4,
325172,0,84,0,84, 323073,0,70,0,1,
32520,80,0,95,0, 323142,1,1,2,0,
325382,0,69,0,81, 32321,262,441,18,1,
32540,85,0,69,0, 3233262,184,2,0,1,
325583,0,84,0,95, 32341377,442,18,1,1377,
3235184,2,0,1,2492,
3236443,18,1,2492,444,
323720,445,4,30,78,
32380,79,0,95,0,
323983,0,69,0,78,
32400,83,0,79,0,
324182,0,95,0,69,
32420,86,0,69,0,
324378,0,84,0,1,
324477,1,1,2,0,
32451,1876,446,18,1,
32461876,135,2,0,1,
32472494,447,18,1,2494,
3248448,20,449,4,32,
324977,0,79,0,86,
32500,73,0,78,0,
325171,0,95,0,69,
32520,78,0,68,0,
325395,0,69,0,86,
32540,69,0,78,0,
325584,0,1,75,1,
32561,2,0,1,2495,
3257450,18,1,2495,451,
325820,452,4,32,83,
32590,84,0,65,0,
326084,0,69,0,95,
32610,69,0,88,0,
326273,0,84,0,95,
32560,69,0,86,0, 32630,69,0,86,0,
325769,0,78,0,84, 326469,0,78,0,84,
32580,1,91,1,1, 32650,1,86,1,1,
32592,0,1,827,447, 32662,0,1,1939,453,
326018,1,827,187,2, 326718,1,1939,184,2,
32610,1,2499,448,18, 32680,1,2497,454,18,
32621,2499,449,20,450, 32691,2497,455,20,456,
32704,48,84,0,82,
32710,65,0,78,0,
327283,0,65,0,67,
32730,84,0,73,0,
327479,0,78,0,95,
32750,82,0,69,0,
327683,0,85,0,76,
32770,84,0,95,0,
327869,0,86,0,69,
32790,78,0,84,0,
32801,92,1,1,2,
32810,1,827,457,18,
32821,827,184,2,0,
32831,2499,458,18,1,
32842499,459,20,460,4,
328534,82,0,69,0,
328677,0,79,0,84,
32870,69,0,95,0,
328868,0,65,0,84,
32890,65,0,95,0,
329069,0,86,0,69,
32910,78,0,84,0,
32921,82,1,1,2,
32930,1,2500,461,18,
32941,2500,462,20,463,
32634,22,77,0,79, 32954,22,77,0,79,
32640,78,0,69,0, 32960,78,0,69,0,
326589,0,95,0,69, 329789,0,95,0,69,
32660,86,0,69,0, 32980,86,0,69,0,
326778,0,84,0,1, 329978,0,84,0,1,
326874,1,1,2,0, 330074,1,1,2,0,
32691,2500,451,18,1, 33011,2501,464,18,1,
32702500,452,20,453,4, 33022501,465,20,466,4,
327124,76,0,73,0, 330324,76,0,73,0,
327283,0,84,0,69, 330483,0,84,0,69,
32730,78,0,95,0, 33050,78,0,95,0,
327469,0,86,0,69, 330669,0,86,0,69,
32750,78,0,84,0, 33070,78,0,84,0,
32761,73,1,1,2, 33081,73,1,1,2,
32770,1,2501,454,18, 33090,1,2502,467,18,
32781,2501,455,20,456, 33101,2502,468,20,469,
32794,36,76,0,73, 33114,36,76,0,73,
32800,78,0,75,0, 33120,78,0,75,0,
328195,0,77,0,69, 331395,0,77,0,69,
@@ -3285,8 +3317,8 @@ public yyLSLSyntax
328586,0,69,0,78, 331786,0,69,0,78,
32860,84,0,1,72, 33180,84,0,1,72,
32871,1,2,0,1, 33191,1,2,0,1,
32882502,457,18,1,2502, 33202503,470,18,1,2503,
3289458,20,459,4,38, 3321471,20,472,4,38,
329072,0,84,0,84, 332272,0,84,0,84,
32910,80,0,95,0, 33230,80,0,95,0,
329282,0,69,0,83, 332482,0,69,0,83,
@@ -3296,293 +3328,266 @@ public yyLSLSyntax
329686,0,69,0,78, 332886,0,69,0,78,
32970,84,0,1,68, 33290,84,0,1,68,
32981,1,2,0,1, 33301,1,2,0,1,
32992503,460,18,1,2503, 33312504,473,18,1,2504,
3300461,20,462,4,22, 3332474,20,475,4,22,
330169,0,77,0,65, 333369,0,77,0,65,
33020,73,0,76,0, 33340,73,0,76,0,
330395,0,69,0,86, 333595,0,69,0,86,
33040,69,0,78,0, 33360,69,0,78,0,
330584,0,1,67,1, 333784,0,1,67,1,
33061,2,0,1,2504, 33381,2,0,1,277,
3307463,18,1,2504,464, 3339476,18,1,277,477,
330820,465,4,32,68, 334020,478,4,10,83,
33090,65,0,84,0, 33410,76,0,65,0,
331065,0,83,0,69, 334283,0,72,0,1,
33110,82,0,86,0, 334321,1,1,2,0,
331269,0,82,0,95, 33441,2506,479,18,1,
33130,69,0,86,0, 33452506,480,20,481,4,
331469,0,78,0,84, 334634,75,0,101,0,
33150,1,66,1,1,
33162,0,1,277,466,
331718,1,277,467,20,
3318468,4,10,83,0,
331976,0,65,0,83,
33200,72,0,1,21,
33211,1,2,0,1,
33222506,469,18,1,2506,
3323135,2,0,1,2507,
3324470,18,1,2507,117,
33252,0,1,2508,471,
332618,1,2508,132,2,
33270,1,2509,472,18,
33281,2509,473,20,474,
33294,28,75,0,101,
33300,121,0,68,0,
3331101,0,99,0,108,
33320,97,0,114,0,
333397,0,116,0,105,
33340,111,0,110,0,
33351,119,1,2,2,
33360,1,2510,475,18,
33371,2510,143,2,0,
33381,283,476,18,1,
3339283,187,2,0,1,
33402512,477,18,1,2512,
3341132,2,0,1,2513,
3342478,18,1,2513,479,
334320,480,4,28,73,
33440,110,0,116,0,
334568,0,101,0,99,
33460,108,0,97,0,
3347114,0,97,0,116,
33480,105,0,111,0,
3349110,0,1,120,1,
33502,2,0,1,2514,
3351481,18,1,2514,143,
33522,0,1,1958,482,
335318,1,1958,162,2,
33540,1,2516,483,18,
33551,2516,479,2,0,
33561,2517,484,18,1,
33572517,485,20,486,4,
335864,75,0,101,0,
3359121,0,73,0,110, 3347121,0,73,0,110,
33600,116,0,73,0, 33480,116,0,73,0,
3361110,0,116,0,65, 3349110,0,116,0,65,
33620,114,0,103,0, 33500,114,0,103,0,
3363117,0,109,0,101, 335169,0,118,0,101,
33640,110,0,116,0, 33520,110,0,116,0,
33531,132,1,2,2,
33540,1,2507,482,18,
33551,2507,135,2,0,
33561,2508,483,18,1,
33572508,117,2,0,1,
33582509,484,18,1,2509,
3359132,2,0,1,2510,
3360485,18,1,2510,486,
336120,487,4,28,75,
33620,101,0,121,0,
336568,0,101,0,99, 336368,0,101,0,99,
33660,108,0,97,0, 33640,108,0,97,0,
3367114,0,97,0,116, 3365114,0,97,0,116,
33680,105,0,111,0, 33660,105,0,111,0,
3369110,0,76,0,105, 3367110,0,1,120,1,
33700,115,0,116,0, 33682,2,0,1,283,
33711,117,1,2,2, 3369488,18,1,283,184,
33720,1,2518,487,18, 33702,0,1,2512,489,
33731,2518,162,2,0, 337118,1,2512,126,2,
33741,1406,488,18,1, 33720,1,2513,490,18,
33751406,179,2,0,1, 33731,2513,132,2,0,
33761407,489,18,1,1407, 33741,2514,491,18,1,
3377232,2,0,1,2522, 33752514,492,20,493,4,
3378490,18,1,2522,135, 337628,73,0,110,0,
33792,0,1,2524,491, 3377116,0,68,0,101,
338018,1,2524,479,2, 33780,99,0,108,0,
33810,1,2525,492,18, 337997,0,114,0,97,
33821,2525,143,2,0, 33800,116,0,105,0,
33831,2526,493,18,1, 3381111,0,110,0,1,
33842526,114,2,0,1, 3382121,1,2,2,0,
3385299,494,18,1,299, 33831,1958,494,18,1,
3386495,20,496,4,8, 33841958,162,2,0,1,
338783,0,84,0,65, 33852517,495,18,1,2517,
33880,82,0,1,20, 3386492,2,0,1,2518,
33891,1,2,0,1, 3387496,18,1,2518,497,
33901370,497,18,1,1370, 338820,498,4,64,75,
3391179,2,0,1,2529, 33890,101,0,121,0,
3392498,18,1,2529,143, 339073,0,110,0,116,
33932,0,1,2531,499, 33910,73,0,110,0,
339418,1,2531,308,2, 3392116,0,65,0,114,
33950,1,2532,500,18, 33930,103,0,117,0,
33961,2532,501,20,502, 3394109,0,101,0,110,
33974,64,73,0,110, 33950,116,0,68,0,
3396101,0,99,0,108,
33970,97,0,114,0,
339897,0,116,0,105,
33990,111,0,110,0,
340076,0,105,0,115,
34010,116,0,1,118,
34021,2,2,0,1,
34032519,499,18,1,2519,
3404162,2,0,1,1406,
3405500,18,1,1406,176,
34062,0,1,1407,501,
340718,1,1407,229,2,
34080,1,2522,502,18,
34091,2522,503,20,504,
34104,34,73,0,110,
33980,116,0,86,0, 34110,116,0,86,0,
3399101,0,99,0,86, 3412101,0,99,0,86,
34000,101,0,99,0, 34130,101,0,99,0,
340165,0,114,0,103, 341465,0,114,0,103,
34020,117,0,109,0, 34150,69,0,118,0,
3403101,0,110,0,116, 3416101,0,110,0,116,
34040,68,0,101,0, 34170,1,131,1,2,
340599,0,108,0,97, 34182,0,1,2523,505,
34060,114,0,97,0, 341918,1,2523,135,2,
3407116,0,105,0,111, 34200,1,2525,506,18,
34080,110,0,76,0, 34211,2525,492,2,0,
3409105,0,115,0,116, 34221,2526,507,18,1,
34100,1,116,1,2, 34232526,143,2,0,1,
34112,0,1,305,503, 3424299,508,18,1,299,
341218,1,305,187,2, 3425509,20,510,4,8,
34130,1,2535,504,18, 342683,0,84,0,65,
34141,2535,327,2,0, 34270,82,0,1,20,
34151,2458,505,18,1, 34281,1,2,0,1,
34162458,285,2,0,1, 34291370,511,18,1,1370,
34172459,506,18,1,2459, 3430176,2,0,1,2529,
3418507,20,508,4,22, 3431512,18,1,2529,513,
341982,0,73,0,71, 343220,514,4,28,86,
34200,72,0,84,0,
342195,0,66,0,82,
34220,65,0,67,0,
342369,0,1,13,1,
34241,2,0,1,2539,
3425509,18,1,2539,479,
34262,0,1,2540,510,
342718,1,2540,143,2,
34280,1,2541,511,18,
34291,2541,111,2,0,
34301,2542,512,18,1,
34312542,132,2,0,1,
34322464,513,18,1,2464,
3433507,2,0,1,2544,
3434514,18,1,2544,143,
34352,0,1,1989,515,
343618,1,1989,285,2,
34370,1,1990,516,18,
34381,1990,517,20,518,
34394,8,69,0,76,
34400,83,0,69,0,
34411,43,1,1,2,
34420,1,2548,519,18,
34431,2548,162,2,0,
34441,2470,520,18,1,
34452470,165,2,0,1,
3446322,521,18,1,322,
3447253,2,0,1,2551,
3448522,18,1,2551,523,
344920,524,4,28,86,
34500,101,0,99,0, 34330,101,0,99,0,
3451116,0,111,0,114,
34520,65,0,114,0,
3453103,0,69,0,118,
34540,101,0,110,0,
3455116,0,1,128,1,
34562,2,0,1,1933,
3457525,18,1,1933,135,
34582,0,1,883,526,
345918,1,883,187,2,
34600,1,2555,527,18,
34611,2555,528,20,529,
34624,58,86,0,101,
34630,99,0,116,0,
3464111,0,114,0,65,
34650,114,0,103,0,
3466117,0,109,0,101,
34670,110,0,116,0,
346868,0,101,0,99, 343468,0,101,0,99,
34690,108,0,97,0, 34350,108,0,97,0,
3470114,0,97,0,116, 3436114,0,97,0,116,
34710,105,0,111,0, 34370,105,0,111,0,
3472110,0,76,0,105, 3438110,0,1,122,1,
34730,115,0,116,0, 34392,2,0,1,2530,
34741,114,1,2,2, 3440515,18,1,2530,143,
34750,1,328,530,18, 34412,0,1,2532,516,
34761,328,187,2,0, 344218,1,2532,513,2,
34771,1443,531,18,1, 34430,1,305,517,18,
34781443,269,2,0,1, 34441,305,184,2,0,
34792558,532,18,1,2558, 34451,2534,518,18,1,
3480327,2,0,1,2559, 34462534,162,2,0,1,
3481533,18,1,2559,534, 34472822,519,18,1,2822,
348220,535,4,22,73, 3448150,2,0,1,2458,
3449520,18,1,2458,288,
34502,0,1,2459,521,
345118,1,2459,212,2,
34520,1,2538,522,18,
34531,2538,135,2,0,
34541,2540,523,18,1,
34552540,492,2,0,1,
34562541,524,18,1,2541,
3457143,2,0,1,2542,
3458525,18,1,2542,111,
34592,0,1,2464,526,
346018,1,2464,212,2,
34610,1,2544,527,18,
34621,2544,247,2,0,
34631,2545,528,18,1,
34642545,143,2,0,1,
34651989,529,18,1,1989,
3466288,2,0,1,1990,
3467530,18,1,1990,531,
346820,532,4,8,69,
34690,76,0,83,0,
347069,0,1,43,1,
34711,2,0,1,2548,
3472533,18,1,2548,534,
347320,535,4,64,73,
34830,110,0,116,0, 34740,110,0,116,0,
348465,0,114,0,103, 347582,0,111,0,116,
34850,69,0,118,0, 34760,82,0,111,0,
3486101,0,110,0,116, 3477116,0,65,0,114,
34870,1,127,1,2, 34780,103,0,117,0,
34882,0,1,2560,536, 3479109,0,101,0,110,
348918,1,2560,135,2, 34800,116,0,68,0,
34900,1,2562,537,18, 3481101,0,99,0,108,
34911,2562,479,2,0, 34820,97,0,114,0,
34921,1449,538,18,1, 348397,0,116,0,105,
34931449,187,2,0,1, 34840,111,0,110,0,
34942485,539,18,1,2485, 348576,0,105,0,115,
3495540,20,541,4,30, 34860,116,0,1,116,
349667,0,79,0,76, 34871,2,2,0,1,
34970,76,0,73,0, 34882470,536,18,1,2470,
349883,0,73,0,79, 3489165,2,0,1,322,
34990,78,0,95,0, 3490537,18,1,322,250,
350069,0,86,0,69, 34912,0,1,2551,538,
35010,78,0,84,0, 349218,1,2551,380,2,
35021,62,1,1,2, 34930,1,1933,539,18,
35030,1,2566,542,18, 34941,1933,135,2,0,
35041,2566,327,2,0, 34951,2553,540,18,1,
35051,2488,543,18,1, 34962553,135,2,0,1,
35062488,544,20,545,4, 3497883,541,18,1,883,
350724,65,0,84,0, 3498184,2,0,1,2555,
350884,0,65,0,67, 3499542,18,1,2555,513,
35090,72,0,95,0, 35002,0,1,328,543,
351069,0,86,0,69, 350118,1,328,184,2,
35110,78,0,84,0, 35020,1,1443,544,18,
35121,60,1,1,2, 35031,1443,266,2,0,
35130,1,2489,546,18, 35041,2559,545,18,1,
35141,2489,547,20,548, 35052559,380,2,0,1,
35154,22,84,0,73, 35062560,546,18,1,2560,
35160,77,0,69,0, 3507547,20,548,4,22,
351782,0,95,0,69, 350873,0,110,0,116,
35180,86,0,69,0, 35090,65,0,114,0,
351978,0,84,0,1, 3510103,0,69,0,118,
352087,1,1,2,0, 35110,101,0,110,0,
35211,2490,549,18,1, 3512116,0,1,128,1,
35222490,550,20,551,4, 35132,2,0,1,2561,
352338,78,0,79,0, 3514549,18,1,2561,135,
352484,0,95,0,65, 35152,0,1,1449,550,
351618,1,1449,184,2,
35170,1,2485,551,18,
35181,2485,552,20,553,
35194,30,67,0,79,
35200,76,0,76,0,
352173,0,83,0,73,
35220,79,0,78,0,
352395,0,69,0,86,
35240,69,0,78,0,
352584,0,1,62,1,
35261,2,0,1,2565,
3527554,18,1,2565,162,
35282,0,1,2488,555,
352918,1,2488,556,20,
3530557,4,24,65,0,
353184,0,84,0,65,
35320,67,0,72,0,
353395,0,69,0,86,
35340,69,0,78,0,
353584,0,1,60,1,
35361,2,0,1,2489,
3537558,18,1,2489,559,
353820,560,4,22,84,
35390,73,0,77,0,
354069,0,82,0,95,
35410,69,0,86,0,
354269,0,78,0,84,
35430,1,87,1,1,
35442,0,1,2490,561,
354518,1,2490,562,20,
3546563,4,38,78,0,
354779,0,84,0,95,
35480,65,0,84,0,
354995,0,84,0,65,
35500,82,0,71,0,
355169,0,84,0,95,
35520,69,0,86,0,
355369,0,78,0,84,
35540,1,79,1,1,
35552,0,1,2491,564,
355618,1,2491,565,20,
3557566,4,46,78,0,
355879,0,84,0,95,
35590,65,0,84,0,
356095,0,82,0,79,
35250,84,0,95,0, 35610,84,0,95,0,
352684,0,65,0,82, 356284,0,65,0,82,
35270,71,0,69,0, 35630,71,0,69,0,
352884,0,95,0,69, 356484,0,95,0,69,
35290,86,0,69,0, 35650,86,0,69,0,
353078,0,84,0,1, 356678,0,84,0,1,
353179,1,1,2,0, 356778,1,1,2,0,
35321,2491,552,18,1, 35681,2571,567,18,1,
35332491,553,20,554,4, 35692571,486,2,0,1,
353446,78,0,79,0, 35702493,568,18,1,2493,
353584,0,95,0,65, 3571569,20,570,4,36,
35360,84,0,95,0, 357277,0,79,0,86,
353782,0,79,0,84, 35730,73,0,78,0,
35380,95,0,84,0, 357471,0,95,0,83,
353965,0,82,0,71, 35750,84,0,65,0,
35400,69,0,84,0, 357682,0,84,0,95,
354195,0,69,0,86, 35770,69,0,86,0,
35420,69,0,78,0, 357869,0,78,0,84,
354384,0,1,78,1, 35790,1,76,1,1,
35441,2,0,1,2571, 35802,0,1,1413,571,
3545555,18,1,2571,556, 358118,1,1413,184,2,
354620,557,4,52,75, 35820,1,346,572,18,
35470,101,0,121,0, 35831,346,573,20,574,
354865,0,114,0,103, 35844,8,80,0,76,
35490,117,0,109,0, 35850,85,0,83,0,
3550101,0,110,0,116, 35861,18,1,1,2,
35510,68,0,101,0, 35870,1,2575,575,18,
355299,0,108,0,97, 35881,2575,380,2,0,
35530,114,0,97,0, 35891,2496,576,18,1,
3554116,0,105,0,111, 35902496,577,20,578,4,
35550,110,0,76,0,
3556105,0,115,0,116,
35570,1,112,1,2,
35582,0,1,2493,558,
355918,1,2493,559,20,
3560560,4,36,77,0,
356179,0,86,0,73,
35620,78,0,71,0,
356395,0,83,0,84,
35640,65,0,82,0,
356584,0,95,0,69,
35660,86,0,69,0,
356778,0,84,0,1,
356876,1,1,2,0,
35691,1413,561,18,1,
35701413,187,2,0,1,
3571346,562,18,1,346,
3572563,20,564,4,8,
357380,0,76,0,85,
35740,83,0,1,18,
35751,1,2,0,1,
35762575,565,18,1,2575,
3577566,20,567,4,24,
357886,0,111,0,105,
35790,100,0,65,0,
3580114,0,103,0,69,
35810,118,0,101,0,
3582110,0,116,0,1,
3583125,1,2,2,0,
35841,2496,568,18,1,
35852496,569,20,570,4,
358634,83,0,84,0, 359134,83,0,84,0,
358765,0,84,0,69, 359265,0,84,0,69,
35880,95,0,69,0, 35930,95,0,69,0,
@@ -3591,420 +3596,253 @@ public yyLSLSyntax
359169,0,86,0,69, 359669,0,86,0,69,
35920,78,0,84,0, 35970,78,0,84,0,
35931,85,1,1,2, 35981,85,1,1,2,
35940,1,2577,571,18, 35990,1,2577,579,18,
35951,2577,162,2,0, 36001,2577,135,2,0,
35961,2021,572,18,1, 36011,2021,580,18,1,
35972021,285,2,0,1, 36022021,288,2,0,1,
35982022,573,18,1,2022, 36032022,581,18,1,2022,
3599374,2,0,1,352, 3604384,2,0,1,352,
3600574,18,1,352,187, 3605582,18,1,352,184,
36012,0,1,2024,575, 36062,0,1,2024,583,
360218,1,2024,132,2, 360718,1,2024,132,2,
36030,1,2025,576,18, 36080,1,2025,584,18,
36041,2025,577,20,578, 36091,2025,585,20,586,
36054,8,74,0,85, 36104,8,74,0,85,
36060,77,0,80,0, 36110,77,0,80,0,
36071,49,1,1,2, 36121,49,1,1,2,
36080,1,2026,579,18, 36130,1,2026,587,18,
36091,2026,132,2,0, 36141,2026,132,2,0,
36101,2027,580,18,1, 36151,2027,588,18,1,
36112027,581,20,582,4, 36162027,589,20,590,4,
36124,65,0,84,0, 36174,65,0,84,0,
36131,23,1,1,2, 36181,23,1,1,2,
36140,1,2028,583,18, 36190,1,2028,591,18,
36151,2028,132,2,0, 36201,2028,132,2,0,
36161,2029,584,18,1, 36211,2029,592,18,1,
36172029,327,2,0,1, 36222029,380,2,0,1,
36182030,585,18,1,2030, 36232030,593,18,1,2030,
3619586,20,587,4,14, 3624594,20,595,4,14,
362070,0,111,0,114, 362570,0,111,0,114,
36210,76,0,111,0, 36260,76,0,111,0,
3622111,0,112,0,1, 3627111,0,112,0,1,
3623145,1,2,2,0, 3628146,1,2,2,0,
36241,2031,588,18,1, 36291,2031,596,18,1,
36252031,589,20,590,4, 36302031,597,20,598,4,
362632,68,0,111,0, 363132,68,0,111,0,
362787,0,104,0,105, 363287,0,104,0,105,
36280,108,0,101,0, 36330,108,0,101,0,
362983,0,116,0,97, 363483,0,116,0,97,
36300,116,0,101,0, 36350,116,0,101,0,
3631109,0,101,0,110, 3636109,0,101,0,110,
36320,116,0,1,144, 36370,116,0,1,145,
36331,2,2,0,1, 36381,2,2,0,1,
36342032,591,18,1,2032, 36392032,599,18,1,2032,
3635592,20,593,4,28, 3640600,20,601,4,28,
363687,0,104,0,105, 364187,0,104,0,105,
36370,108,0,101,0, 36420,108,0,101,0,
363883,0,116,0,97, 364383,0,116,0,97,
36390,116,0,101,0, 36440,116,0,101,0,
3640109,0,101,0,110, 3645109,0,101,0,110,
36410,116,0,1,143, 36460,116,0,1,144,
36421,2,2,0,1, 36471,2,2,0,1,
36432033,594,18,1,2033, 36482033,602,18,1,2033,
3644595,20,596,4,22, 3649603,20,604,4,22,
364573,0,102,0,83, 365073,0,102,0,83,
36460,116,0,97,0, 36510,116,0,97,0,
3647116,0,101,0,109, 3652116,0,101,0,109,
36480,101,0,110,0, 36530,101,0,110,0,
3649116,0,1,142,1, 3654116,0,1,143,1,
36502,2,0,1,2034, 36552,2,0,1,2034,
3651597,18,1,2034,598, 3656605,18,1,2034,606,
365220,599,4,22,83, 365720,607,4,22,83,
36530,116,0,97,0, 36580,116,0,97,0,
3654116,0,101,0,67, 3659116,0,101,0,67,
36550,104,0,97,0, 36600,104,0,97,0,
3656110,0,103,0,101, 3661110,0,103,0,101,
36570,1,141,1,2, 36620,1,142,1,2,
36582,0,1,1478,600, 36632,0,1,1478,608,
365918,1,1478,179,2, 366418,1,1478,176,2,
36600,1,1479,601,18, 36650,1,1479,609,18,
36611,1479,305,2,0, 36661,1479,309,2,0,
36621,2037,602,18,1, 36671,2037,610,18,1,
36632037,146,2,0,1, 36682037,150,2,0,1,
36642038,603,18,1,2038, 36692038,611,18,1,2038,
3665604,20,605,4,18, 3670612,20,613,4,18,
366674,0,117,0,109, 367174,0,117,0,109,
36670,112,0,76,0, 36720,112,0,76,0,
366897,0,98,0,101, 367397,0,98,0,101,
36690,108,0,1,139, 36740,108,0,1,140,
36701,2,2,0,1, 36751,2,2,0,1,
36712039,606,18,1,2039, 36762039,614,18,1,2039,
3672146,2,0,1,2040, 3677150,2,0,1,2040,
3673607,18,1,2040,608, 3678615,18,1,2040,616,
367420,609,4,30,82, 367920,617,4,30,82,
36750,101,0,116,0, 36800,101,0,116,0,
3676117,0,114,0,110, 3681117,0,114,0,110,
36770,83,0,116,0, 36820,83,0,116,0,
367897,0,116,0,101, 368397,0,116,0,101,
36790,109,0,101,0, 36840,109,0,101,0,
3680110,0,116,0,1, 3685110,0,116,0,1,
3681138,1,2,2,0, 3686139,1,2,2,0,
36821,2041,610,18,1, 36871,2041,618,18,1,
36832041,146,2,0,1, 36882041,150,2,0,1,
36841485,611,18,1,1485, 36891485,619,18,1,1485,
3685187,2,0,1,372, 3690184,2,0,1,372,
3686612,18,1,372,199, 3691620,18,1,372,196,
36872,0,1,373,613, 36922,0,1,373,621,
368818,1,373,132,2, 369318,1,373,132,2,
36890,1,374,614,18, 36940,1,374,622,18,
36901,374,195,2,0, 36951,374,192,2,0,
36911,375,615,18,1, 36961,375,623,18,1,
3692375,132,2,0,1, 3697375,132,2,0,1,
3693376,616,18,1,376, 3698376,624,18,1,376,
3694202,2,0,1,377, 3699199,2,0,1,377,
3695617,18,1,377,132, 3700625,18,1,377,132,
36962,0,1,378,618, 37012,0,1,378,626,
369718,1,378,195,2, 370218,1,378,192,2,
36980,1,379,619,18, 37030,1,379,627,18,
36991,379,132,2,0, 37041,379,132,2,0,
37001,380,620,18,1, 37051,380,628,18,1,
3701380,621,20,622,4, 3706380,629,20,630,4,
370216,67,0,111,0, 370716,67,0,111,0,
3703110,0,115,0,116, 3708110,0,115,0,116,
37040,97,0,110,0, 37090,97,0,110,0,
3705116,0,1,151,1, 3710116,0,1,152,1,
37062,2,0,1,381, 37112,2,0,1,381,
3707623,18,1,381,323, 3712631,18,1,381,328,
37082,0,1,371,624, 37132,0,1,371,632,
370918,1,371,625,20, 371418,1,371,633,20,
3710626,4,24,70,0, 3715634,4,24,70,0,
3711117,0,110,0,99, 3716117,0,110,0,99,
37120,116,0,105,0, 37170,116,0,105,0,
3713111,0,110,0,67, 3718111,0,110,0,67,
37140,97,0,108,0, 37190,97,0,108,0,
3715108,0,1,147,1, 3720108,0,1,148,1,
37162,2,0,1,942, 37212,2,0,1,942,
3717627,18,1,942,187, 3722635,18,1,942,184,
37182,0,1,2533,628, 37232,0,1,2533,636,
371918,1,2533,162,2, 372418,1,2533,637,20,
37200,1,387,629,18, 3725638,4,64,73,0,
37211,387,187,2,0, 3726110,0,116,0,86,
37221,2536,630,18,1, 37270,101,0,99,0,
37232536,631,20,632,4, 372886,0,101,0,99,
372434,73,0,110,0, 37290,65,0,114,0,
3725116,0,82,0,111, 3730103,0,117,0,109,
37260,116,0,82,0, 37310,101,0,110,0,
3727111,0,116,0,65,
37280,114,0,103,0,
372969,0,118,0,101,
37300,110,0,116,0,
37311,129,1,2,2,
37320,1,2537,633,18,
37331,2537,135,2,0,
37341,2543,634,18,1,
37352543,635,20,636,4,
373628,82,0,111,0,
3737116,0,68,0,101, 3732116,0,68,0,101,
37380,99,0,108,0, 37330,99,0,108,0,
373997,0,114,0,97, 373497,0,114,0,97,
37400,116,0,105,0, 37350,116,0,105,0,
3741111,0,110,0,1, 3736111,0,110,0,76,
3742122,1,2,2,0, 37370,105,0,115,0,
37431,2546,637,18,1, 3738116,0,1,117,1,
37442546,635,2,0,1, 37392,2,0,1,387,
37451514,638,18,1,1514, 3740639,18,1,387,184,
3746179,2,0,1,1515, 37412,0,1,2536,640,
3747639,18,1,1515,333, 374218,1,2536,380,2,
37482,0,1,2074,640, 37430,1,2537,641,18,
374918,1,2074,179,2, 37441,2537,642,20,643,
37500,1,2075,641,18, 37454,34,73,0,110,
37511,2075,162,2,0, 37460,116,0,82,0,
37521,2552,642,18,1, 3747111,0,116,0,82,
37532552,135,2,0,1, 37480,111,0,116,0,
3754406,643,18,1,406,
3755143,2,0,1,1521,
3756644,18,1,1521,187,
37572,0,1,2556,645,
375818,1,2556,162,2,
37590,1,2639,646,18,
37601,2639,647,20,648,
37614,44,75,0,101,
37620,121,0,73,0,
3763110,0,116,0,73,
37640,110,0,116,0,
376565,0,114,0,103, 374965,0,114,0,103,
37660,83,0,116,0,
376797,0,116,0,101,
37680,69,0,118,0, 37500,69,0,118,0,
3769101,0,110,0,116, 3751101,0,110,0,116,
37700,1,110,1,2, 37520,1,130,1,2,
37712,0,1,412,649, 37532,0,1,2543,644,
377218,1,412,187,2, 375418,1,2543,132,2,
37730,1,2641,650,18, 37550,1,2823,645,18,
37741,2641,168,2,0, 37561,2823,646,20,647,
37751,2484,651,18,1, 37574,34,71,0,108,
37762484,652,20,653,4, 37580,111,0,98,0,
377738,67,0,79,0, 375997,0,108,0,68,
377876,0,76,0,73, 37600,101,0,102,0,
37790,83,0,73,0, 3761105,0,110,0,105,
378079,0,78,0,95, 37620,116,0,105,0,
37810,69,0,78,0, 3763111,0,110,0,115,
378268,0,95,0,69, 37640,1,98,1,2,
37830,86,0,69,0, 37652,0,1,1514,648,
378478,0,84,0,1, 376618,1,1514,176,2,
378563,1,1,2,0, 37670,1,1515,649,18,
37861,2643,654,18,1, 37681,1515,335,2,0,
37872643,174,2,0,1, 37691,2549,650,18,1,
37882644,655,18,1,2644, 37702549,162,2,0,1,
3789656,20,657,4,32, 37712074,651,18,1,2074,
379075,0,101,0,121, 3772176,2,0,1,2075,
3773652,18,1,2075,162,
37742,0,1,2552,653,
377518,1,2552,654,20,
3776655,4,28,86,0,
3777101,0,99,0,116,
37780,111,0,114,0,
377965,0,114,0,103,
37800,69,0,118,0,
3781101,0,110,0,116,
37820,1,129,1,2,
37832,0,1,406,656,
378418,1,406,143,2,
37850,1,1521,657,18,
37861,1521,184,2,0,
37871,2556,658,18,1,
37882556,659,20,660,4,
378958,86,0,101,0,
379099,0,116,0,111,
37910,114,0,65,0,
3792114,0,103,0,117,
37930,109,0,101,0,
3794110,0,116,0,68,
37950,101,0,99,0,
3796108,0,97,0,114,
37970,97,0,116,0,
3798105,0,111,0,110,
37990,76,0,105,0,
3800115,0,116,0,1,
3801115,1,2,2,0,
38021,2557,661,18,1,
38032557,162,2,0,1,
3804412,662,18,1,412,
3805184,2,0,1,2641,
3806663,18,1,2641,168,
38072,0,1,2484,664,
380818,1,2484,665,20,
3809666,4,38,67,0,
381079,0,76,0,76,
38110,73,0,83,0,
381273,0,79,0,78,
38130,95,0,69,0,
381478,0,68,0,95,
38150,69,0,86,0,
381669,0,78,0,84,
38170,1,63,1,1,
38182,0,1,2643,667,
381918,1,2643,668,20,
3820669,4,44,73,0,
3821110,0,116,0,82,
38220,111,0,116,0,
382382,0,111,0,116,
37910,65,0,114,0, 38240,65,0,114,0,
3792103,0,83,0,116, 3825103,0,83,0,116,
37930,97,0,116,0, 38260,97,0,116,0,
3794101,0,69,0,118, 3827101,0,69,0,118,
37950,101,0,110,0, 38280,101,0,110,0,
3796116,0,1,105,1, 3829116,0,1,109,1,
37972,2,0,1,2023, 38302,2,0,1,2644,
3798658,18,1,2023,659, 3831670,18,1,2644,671,
379920,660,4,26,68, 383220,672,4,38,86,
38000,69,0,70,0,
380165,0,85,0,76,
38020,84,0,95,0,
380383,0,84,0,65,
38040,84,0,69,0,
38051,47,1,1,2,
38060,1,2564,661,18,
38071,2564,162,2,0,
38081,2647,662,18,1,
38092647,507,2,0,1,
38102648,663,18,1,2648,
3811647,2,0,1,2567,
3812664,18,1,2567,665,
381320,666,4,22,75,
38140,101,0,121,0,
381565,0,114,0,103,
38160,69,0,118,0,
3817101,0,110,0,116,
38180,1,126,1,2,
38192,0,1,1442,667,
382018,1,1442,179,2,
38210,1,2651,668,18,
38221,2651,669,20,670,
38234,38,86,0,101,
38240,99,0,116,0,
3825111,0,114,0,65,
38260,114,0,103,0,
382783,0,116,0,97,
38280,116,0,101,0,
382969,0,118,0,101,
38300,110,0,116,0,
38311,107,1,2,2,
38320,1,2570,671,18,
38331,2570,473,2,0,
38341,2653,672,18,1,
38352653,656,2,0,1,
38362572,673,18,1,2572,
3837162,2,0,1,2655,
3838674,18,1,2655,156,
38392,0,1,2574,675,
384018,1,2574,327,2,
38410,1,2035,676,18,
38421,2035,146,2,0,
38431,2036,677,18,1,
38442036,678,20,679,4,
384526,74,0,117,0,
3846109,0,112,0,83,
38470,116,0,97,0,
3848116,0,101,0,109,
38490,101,0,110,0,
3850116,0,1,140,1,
38512,2,0,1,431,
3852680,18,1,431,143,
38532,0,1,2579,681,
385418,1,2579,327,2,
38550,1,2105,682,18,
38561,2105,285,2,0,
38571,2106,683,18,1,
38582106,517,2,0,1,
38591550,684,18,1,1550,
3860179,2,0,1,437,
3861685,18,1,437,187,
38622,0,1,2044,686,
386318,1,2044,687,20,
3864688,4,28,69,0,
3865109,0,112,0,116,
38660,121,0,83,0,
3867116,0,97,0,116,
38680,101,0,109,0,
3869101,0,110,0,116,
38700,1,135,1,2,
38712,0,1,2045,689,
387218,1,2045,146,2,
38730,1,1555,690,18,
38741,1555,187,2,0,
38751,2511,691,18,1,
38762511,126,2,0,1,
38771001,692,18,1,1001,
3878625,2,0,1,1002,
3879693,18,1,1002,621,
38802,0,1,447,694,
388118,1,447,342,2,
38820,1,2594,695,18,
38831,2594,327,2,0,
38841,2596,696,18,1,
38852596,697,20,698,4,
388618,83,0,116,0,
388797,0,116,0,101,
38880,66,0,111,0,
3889100,0,121,0,1,
3890102,1,2,2,0,
38911,2520,699,18,1,
38922520,327,2,0,1,
38931010,700,18,1,1010,
3894179,2,0,1,1011,
3895701,18,1,1011,162,
38962,0,1,1012,702,
389718,1,1012,187,2,
38980,1,1013,703,18,
38991,1013,162,2,0,
39001,459,704,18,1,
3901459,705,20,706,4,
390224,76,0,69,0,
390370,0,84,0,95,
39040,66,0,82,0,
390565,0,67,0,75,
39060,69,0,84,0,
39071,27,1,1,2,
39080,1,1574,707,18,
39091,1574,146,2,0,
39101,461,708,18,1,
3911461,709,20,710,4,
391224,65,0,114,0,
3913103,0,117,0,109,
39140,101,0,110,0,
3915116,0,76,0,105,
39160,115,0,116,0,
39171,148,1,2,2,
39180,1,462,711,18,
39191,462,143,2,0,
39201,464,712,18,1,
3921464,713,20,714,4,
392216,65,0,114,0,
3923103,0,117,0,109,
39240,101,0,110,0,
3925116,0,1,149,1,
39262,2,0,1,2136,
3927715,18,1,2136,285,
39282,0,1,1585,716,
392918,1,1585,717,20,
3930718,4,12,82,0,
393169,0,84,0,85,
39320,82,0,78,0,
39331,50,1,1,2,
39340,1,2700,719,18,
39351,2700,697,2,0,
39361,476,720,18,1,
3937476,721,20,722,4,
393830,83,0,84,0,
393982,0,73,0,78,
39400,71,0,95,0,
394167,0,79,0,78,
39420,83,0,84,0,
394365,0,78,0,84,
39440,1,3,1,1,
39452,0,1,477,723,
394618,1,477,724,20,
3947725,4,28,70,0,
394876,0,79,0,65,
39490,84,0,95,0,
395067,0,79,0,78,
39510,83,0,84,0,
395265,0,78,0,84,
39530,1,95,1,1,
39542,0,1,478,726,
395518,1,478,727,20,
3956728,4,40,72,0,
395769,0,88,0,95,
39580,73,0,78,0,
395984,0,69,0,71,
39600,69,0,82,0,
396195,0,67,0,79,
39620,78,0,83,0,
396384,0,65,0,78,
39640,84,0,1,94,
39651,1,2,0,1,
3966479,729,18,1,479,
3967730,20,731,4,32,
396873,0,78,0,84,
39690,69,0,71,0,
397069,0,82,0,95,
39710,67,0,79,0,
397278,0,83,0,84,
39730,65,0,78,0,
397484,0,1,93,1,
39751,2,0,1,480,
3976732,18,1,480,733,
397720,734,4,26,82,
39780,73,0,71,0,
397972,0,84,0,95,
39800,66,0,82,0,
398165,0,67,0,75,
39820,69,0,84,0,
39831,28,1,1,2,
39840,1,481,735,18,
39851,481,713,2,0,
39861,2550,736,18,1,
39872550,327,2,0,1,
39882554,737,18,1,2554,
3989308,2,0,1,1048,
3990738,18,1,1048,187,
39912,0,1,2640,739,
399218,1,2640,740,20,
3993741,4,44,73,0,
3994110,0,116,0,86,
39950,101,0,99,0, 38330,101,0,99,0,
399686,0,101,0,99, 3834116,0,111,0,114,
39970,65,0,114,0, 38350,65,0,114,0,
3998103,0,83,0,116, 3836103,0,83,0,116,
39990,97,0,116,0, 38370,97,0,116,0,
4000101,0,69,0,118, 3838101,0,69,0,118,
40010,101,0,110,0, 38390,101,0,110,0,
4002116,0,1,109,1, 3840116,0,1,108,1,
40032,2,0,1,2642, 38412,2,0,1,2023,
4004742,18,1,2642,669, 3842673,18,1,2023,282,
40052,0,1,2563,743, 38432,0,1,2564,674,
400618,1,2563,744,20, 384418,1,2564,675,20,
4007745,4,52,73,0, 3845676,4,52,73,0,
4008110,0,116,0,65, 3846110,0,116,0,65,
40090,114,0,103,0, 38470,114,0,103,0,
4010117,0,109,0,101, 3848117,0,109,0,101,
@@ -4015,159 +3853,351 @@ public yyLSLSyntax
40150,105,0,111,0, 38530,105,0,111,0,
4016110,0,76,0,105, 3854110,0,76,0,105,
40170,115,0,116,0, 38550,115,0,116,0,
40181,113,1,2,2, 38561,114,1,2,2,
40190,1,2042,746,18, 38570,1,2647,677,18,
40201,2042,747,20,748, 38581,2647,678,20,679,
40214,20,65,0,115, 38594,34,86,0,111,
40220,115,0,105,0, 38600,105,0,100,0,
4023103,0,110,0,109, 386165,0,114,0,103,
40240,101,0,110,0, 38620,83,0,116,0,
4025116,0,1,136,1,
40262,2,0,1,2043,
4027749,18,1,2043,146,
40282,0,1,2568,750,
402918,1,2568,135,2,
40300,1,2649,751,18,
40311,2649,740,2,0,
40321,1620,752,18,1,
40331620,179,2,0,1,
40341621,753,18,1,1621,
4035159,2,0,1,1622,
4036754,18,1,1622,333,
40372,0,1,509,755,
403818,1,509,143,2,
40390,1,2498,756,18,
40401,2498,757,20,758,
40414,34,82,0,69,
40420,77,0,79,0,
404384,0,69,0,95,
40440,68,0,65,0,
404584,0,65,0,95,
40460,69,0,86,0,
404769,0,78,0,84,
40480,1,82,1,1,
40492,0,1,2576,759,
405018,1,2576,135,2,
40510,1,2656,760,18,
40521,2656,659,2,0,
40531,1628,761,18,1,
40541628,187,2,0,1,
4055515,762,18,1,515,
4056187,2,0,1,2580,
4057763,18,1,2580,764,
405820,765,4,10,69,
40590,118,0,101,0,
4060110,0,116,0,1,
4061124,1,2,2,0,
40621,2505,766,18,1,
40632505,767,20,768,4,
406434,75,0,101,0,
4065121,0,73,0,110,
40660,116,0,73,0,
4067110,0,116,0,65,
40680,114,0,103,0,
406969,0,118,0,101,
40700,110,0,116,0,
40711,131,1,2,2,
40720,1,2751,769,18,
40731,2751,507,2,0,
40741,525,770,18,1,
4075525,342,2,0,1,
40762197,771,18,1,2197,
4077179,2,0,1,2198,
4078772,18,1,2198,162,
40792,0,1,1591,773,
408018,1,1591,187,2,
40810,1,2592,774,18,
40821,2592,162,2,0,
40831,2760,775,18,1,
40842760,291,2,0,1,
40852521,776,18,1,2521,
4086777,20,778,4,34,
408773,0,110,0,116,
40880,86,0,101,0,
408999,0,86,0,101,
40900,99,0,65,0,
4091114,0,103,0,69,
40920,118,0,101,0,
4093110,0,116,0,1,
4094130,1,2,2,0,
40951,2763,779,18,1,
40962763,780,20,781,4,
409710,83,0,116,0,
409897,0,116,0,101, 386397,0,116,0,101,
40990,1,101,1,2, 38640,69,0,118,0,
41002,0,1,2764,782, 3865101,0,110,0,116,
410118,1,2764,780,2, 38660,1,105,1,2,
41020,1,1094,783,18, 38672,0,1,2648,680,
41031,1094,709,2,0, 386818,1,2648,279,2,
41041,2766,784,18,1, 38690,1,2567,681,18,
41052766,135,2,0,1, 38701,2567,380,2,0,
41061096,785,18,1,1096, 38711,1442,682,18,1,
4107162,2,0,1,1657, 38721442,176,2,0,1,
4108786,18,1,1657,146, 38732569,683,18,1,2569,
41092,0,1,1658,787, 3874135,2,0,1,2652,
411018,1,1658,788,20, 3875684,18,1,2652,668,
4111789,4,6,70,0, 38762,0,1,2653,685,
411279,0,82,0,1, 387718,1,2653,671,2,
411346,1,1,2,0, 38780,1,2572,686,18,
41141,1659,790,18,1, 38791,2572,687,20,688,
41151659,135,2,0,1, 38804,52,75,0,101,
41162775,791,18,1,2775, 38810,121,0,65,0,
4117140,2,0,1,2777, 3882114,0,103,0,117,
4118792,18,1,2777,162, 38830,109,0,101,0,
41192,0,1,1665,793, 3884110,0,116,0,68,
412018,1,1665,187,2, 38850,101,0,99,0,
41210,1,2781,794,18, 3886108,0,97,0,114,
41221,2781,159,2,0, 38870,97,0,116,0,
41231,2782,795,18,1, 3888105,0,111,0,110,
41242782,333,2,0,1, 38890,76,0,105,0,
41251113,796,18,1,1113, 3890115,0,116,0,1,
4126195,2,0,797,5, 3891113,1,2,2,0,
41270,798,5,379,1, 38921,2573,689,18,1,
41282,799,19,216,1, 38932573,162,2,0,1,
41292,800,5,6,1, 38942656,690,18,1,2656,
41302764,801,17,802,15, 3895678,2,0,1,2035,
4131803,4,14,37,0, 3896691,18,1,2035,150,
413283,0,116,0,97, 38972,0,1,2036,692,
41330,116,0,101,0, 389818,1,2036,693,20,
4134115,0,1,-1,1, 3899694,4,26,74,0,
41355,804,20,805,4, 3900117,0,109,0,112,
413616,83,0,116,0, 39010,83,0,116,0,
413797,0,116,0,101, 390297,0,116,0,101,
41380,115,0,95,0, 39030,109,0,101,0,
413949,0,1,176,1, 3904110,0,116,0,1,
41403,1,2,1,1, 3905141,1,2,2,0,
4141806,22,1,11,1, 39061,431,695,18,1,
41422751,807,17,808,15, 3907431,143,2,0,1,
4143809,4,12,37,0, 39082578,696,18,1,2578,
3909162,2,0,1,2105,
3910697,18,1,2105,288,
39112,0,1,2106,698,
391218,1,2106,531,2,
39130,1,1550,699,18,
39141,1550,176,2,0,
39151,437,700,18,1,
3916437,184,2,0,1,
39172044,701,18,1,2044,
3918702,20,703,4,28,
391969,0,109,0,112,
39200,116,0,121,0,
414483,0,116,0,97, 392183,0,116,0,97,
41450,116,0,101,0, 39220,116,0,101,0,
41461,-1,1,5,810, 3923109,0,101,0,110,
414720,811,4,14,83, 39240,116,0,1,136,
41480,116,0,97,0, 39251,2,2,0,1,
4149116,0,101,0,95, 39262045,704,18,1,2045,
41500,49,0,1,178, 3927150,2,0,1,1555,
41511,3,1,5,1, 3928705,18,1,1555,184,
41524,812,22,1,13, 39292,0,1,2511,706,
41531,2763,813,17,814, 393018,1,2511,143,2,
415415,803,1,-1,1, 39310,1,1001,707,18,
41555,815,20,816,4, 39321,1001,633,2,0,
415616,83,0,116,0, 39331,1002,708,18,1,
415797,0,116,0,101, 39341002,629,2,0,1,
41580,115,0,95,0, 3935447,709,18,1,447,
415950,0,1,177,1, 3936347,2,0,1,2593,
41603,1,3,1,2, 3937710,18,1,2593,162,
4161817,22,1,12,1, 39382,0,1,2595,711,
41622830,818,17,819,15, 393918,1,2595,380,2,
4163820,4,30,37,0, 39400,1,2597,712,18,
39411,2597,713,20,714,
39424,18,83,0,116,
39430,97,0,116,0,
3944101,0,66,0,111,
39450,100,0,121,0,
39461,103,1,2,2,
39470,1,1010,715,18,
39481,1010,176,2,0,
39491,1011,716,18,1,
39501011,162,2,0,1,
39511012,717,18,1,1012,
3952184,2,0,1,1013,
3953718,18,1,1013,162,
39542,0,1,459,719,
395518,1,459,720,20,
3956721,4,24,76,0,
395769,0,70,0,84,
39580,95,0,66,0,
395982,0,65,0,67,
39600,75,0,69,0,
396184,0,1,27,1,
39621,2,0,1,1574,
3963722,18,1,1574,150,
39642,0,1,461,723,
396518,1,461,724,20,
3966725,4,24,65,0,
3967114,0,103,0,117,
39680,109,0,101,0,
3969110,0,116,0,76,
39700,105,0,115,0,
3971116,0,1,149,1,
39722,2,0,1,462,
3973726,18,1,462,143,
39742,0,1,464,727,
397518,1,464,728,20,
3976729,4,16,65,0,
3977114,0,103,0,117,
39780,109,0,101,0,
3979110,0,116,0,1,
3980150,1,2,2,0,
39811,2136,730,18,1,
39822136,288,2,0,1,
39831585,731,18,1,1585,
3984732,20,733,4,12,
398582,0,69,0,84,
39860,85,0,82,0,
398778,0,1,50,1,
39881,2,0,1,2703,
3989734,18,1,2703,713,
39902,0,1,476,735,
399118,1,476,736,20,
3992737,4,30,83,0,
399384,0,82,0,73,
39940,78,0,71,0,
399595,0,67,0,79,
39960,78,0,83,0,
399784,0,65,0,78,
39980,84,0,1,3,
39991,1,2,0,1,
4000477,738,18,1,477,
4001739,20,740,4,28,
400270,0,76,0,79,
40030,65,0,84,0,
400495,0,67,0,79,
40050,78,0,83,0,
400684,0,65,0,78,
40070,84,0,1,96,
40081,1,2,0,1,
4009478,741,18,1,478,
4010742,20,743,4,40,
401172,0,69,0,88,
40120,95,0,73,0,
401378,0,84,0,69,
40140,71,0,69,0,
401582,0,95,0,67,
40160,79,0,78,0,
401783,0,84,0,65,
40180,78,0,84,0,
40191,95,1,1,2,
40200,1,479,744,18,
40211,479,745,20,746,
40224,32,73,0,78,
40230,84,0,69,0,
402471,0,69,0,82,
40250,95,0,67,0,
402679,0,78,0,83,
40270,84,0,65,0,
402878,0,84,0,1,
402994,1,1,2,0,
40301,480,747,18,1,
4031480,748,20,749,4,
403226,82,0,73,0,
403371,0,72,0,84,
40340,95,0,66,0,
403582,0,65,0,67,
40360,75,0,69,0,
403784,0,1,28,1,
40381,2,0,1,481,
4039750,18,1,481,728,
40402,0,1,1048,751,
404118,1,1048,184,2,
40420,1,2642,752,18,
40431,2642,171,2,0,
40441,2563,753,18,1,
40452563,492,2,0,1,
40462042,754,18,1,2042,
4047755,20,756,4,20,
404865,0,115,0,115,
40490,105,0,103,0,
4050110,0,109,0,101,
40510,110,0,116,0,
40521,137,1,2,2,
40530,1,2043,757,18,
40541,2043,150,2,0,
40551,2568,758,18,1,
40562568,759,20,760,4,
405722,75,0,101,0,
4058121,0,65,0,114,
40590,103,0,69,0,
4060118,0,101,0,110,
40610,116,0,1,127,
40621,2,2,0,1,
40632649,761,18,1,2649,
4064212,2,0,1,1620,
4065762,18,1,1620,176,
40662,0,1,1621,763,
406718,1,1621,159,2,
40680,1,1622,764,18,
40691,1622,335,2,0,
40701,509,765,18,1,
4071509,143,2,0,1,
40722498,766,18,1,2498,
4073767,20,768,4,36,
407472,0,84,0,84,
40750,80,0,95,0,
407682,0,69,0,81,
40770,85,0,69,0,
407883,0,84,0,95,
40790,69,0,86,0,
408069,0,78,0,84,
40810,1,91,1,1,
40822,0,1,2655,769,
408318,1,2655,156,2,
40840,1,2576,770,18,
40851,2576,771,20,772,
40864,24,86,0,111,
40870,105,0,100,0,
408865,0,114,0,103,
40890,69,0,118,0,
4090101,0,110,0,116,
40910,1,126,1,2,
40922,0,1,1628,773,
409318,1,1628,184,2,
40940,1,515,774,18,
40951,515,184,2,0,
40961,2580,775,18,1,
40972580,380,2,0,1,
40982505,776,18,1,2505,
4099777,20,778,4,32,
410068,0,65,0,84,
41010,65,0,83,0,
410269,0,82,0,86,
41030,69,0,82,0,
410495,0,69,0,86,
41050,69,0,78,0,
410684,0,1,66,1,
41071,2,0,1,2582,
4108779,18,1,2582,135,
41092,0,1,525,780,
411018,1,525,347,2,
41110,1,2197,781,18,
41121,2197,176,2,0,
41131,2198,782,18,1,
41142198,162,2,0,1,
41151591,783,18,1,1591,
4116184,2,0,1,2521,
4117784,18,1,2521,380,
41182,0,1,2764,785,
411918,1,2764,300,2,
41200,1,1094,786,18,
41211,1094,724,2,0,
41221,1096,787,18,1,
41231096,162,2,0,1,
41242768,788,18,1,2768,
4125319,2,0,1,2769,
4126789,18,1,2769,132,
41272,0,1,2770,790,
412818,1,2770,135,2,
41290,1,1657,791,18,
41301,1657,150,2,0,
41311,1658,792,18,1,
41321658,793,20,794,4,
41336,70,0,79,0,
413482,0,1,46,1,
41351,2,0,1,1659,
4136795,18,1,1659,135,
41372,0,1,1665,796,
413818,1,1665,184,2,
41390,1,2781,797,18,
41401,2781,162,2,0,
41411,2783,798,18,1,
41422783,380,2,0,1,
41431113,799,18,1,1113,
4144192,2,0,800,5,
41450,801,5,381,1,
41462,802,19,371,1,
41472,803,5,6,1,
41482764,804,17,805,15,
4149806,4,30,37,0,
416476,0,83,0,76, 415076,0,83,0,76,
41650,80,0,114,0, 41510,80,0,114,0,
4166111,0,103,0,114, 4152111,0,103,0,114,
41670,97,0,109,0, 41530,97,0,109,0,
416882,0,111,0,111, 415482,0,111,0,111,
41690,116,0,1,-1, 41550,116,0,1,-1,
41701,5,821,20,822, 41561,5,807,20,808,
41574,32,76,0,83,
41580,76,0,80,0,
4159114,0,111,0,103,
41600,114,0,97,0,
4161109,0,82,0,111,
41620,111,0,116,0,
416395,0,50,0,1,
4164168,1,3,1,2,
41651,1,809,22,1,
41662,1,2768,810,17,
4167811,15,812,4,14,
416837,0,83,0,116,
41690,97,0,116,0,
4170101,0,115,0,1,
4171-1,1,5,813,20,
4172814,4,16,83,0,
4173116,0,97,0,116,
41740,101,0,115,0,
417595,0,49,0,1,
4176177,1,3,1,2,
41771,1,815,22,1,
417811,1,2755,816,17,
4179817,15,818,4,12,
418037,0,83,0,116,
41810,97,0,116,0,
4182101,0,1,-1,1,
41835,819,20,820,4,
418414,83,0,116,0,
418597,0,116,0,101,
41860,95,0,49,0,
41871,179,1,3,1,
41885,1,4,821,22,
41891,13,1,2767,822,
419017,823,15,812,1,
4191-1,1,5,824,20,
4192825,4,16,83,0,
4193116,0,97,0,116,
41940,101,0,115,0,
419595,0,50,0,1,
4196178,1,3,1,3,
41971,2,826,22,1,
419812,1,2834,827,17,
4199828,15,806,1,-1,
42001,5,829,20,830,
41714,32,76,0,83, 42014,32,76,0,83,
41720,76,0,80,0, 42020,76,0,80,0,
4173114,0,111,0,103, 4203114,0,111,0,103,
@@ -4175,233 +4205,221 @@ public yyLSLSyntax
4175109,0,82,0,111, 4205109,0,82,0,111,
41760,111,0,116,0, 42060,111,0,116,0,
417795,0,49,0,1, 420795,0,49,0,1,
4178166,1,3,1,3, 4208167,1,3,1,3,
41791,2,823,22,1, 42091,2,831,22,1,
41801,1,2647,824,17, 42101,1,2649,832,17,
4181825,15,809,1,-1, 4211833,15,818,1,-1,
41821,5,826,20,827, 42121,5,834,20,835,
41834,14,83,0,116, 42134,14,83,0,116,
41840,97,0,116,0, 42140,97,0,116,0,
4185101,0,95,0,50, 4215101,0,95,0,50,
41860,1,179,1,3, 42160,1,180,1,3,
41871,6,1,5,828, 42171,6,1,5,836,
418822,1,14,1,2760, 421822,1,14,1,3,
4189829,17,830,15,820, 4219837,19,737,1,3,
41901,-1,1,5,831, 4220838,5,95,1,256,
419120,832,4,32,76, 4221839,16,0,735,1,
41920,83,0,76,0, 42221261,840,16,0,735,
419380,0,114,0,111, 42231,509,841,16,0,
41940,103,0,114,0, 4224735,1,1515,842,16,
419597,0,109,0,82, 42250,735,1,2021,843,
41960,111,0,111,0, 422617,844,15,845,4,
4197116,0,95,0,50,
41980,1,167,1,3,
41991,2,1,1,833,
420022,1,2,1,3,
4201834,19,722,1,3,
4202835,5,95,1,256,
4203836,16,0,720,1,
42041261,837,16,0,720,
42051,509,838,16,0,
4206720,1,1515,839,16,
42070,720,1,2021,840,
420817,841,15,842,4,
420924,37,0,73,0, 422724,37,0,73,0,
4210102,0,83,0,116, 4228102,0,83,0,116,
42110,97,0,116,0, 42290,97,0,116,0,
4212101,0,109,0,101, 4230101,0,109,0,101,
42130,110,0,116,0, 42310,110,0,116,0,
42141,-1,1,5,843, 42321,-1,1,5,846,
421520,844,4,26,73, 423320,847,4,26,73,
42160,102,0,83,0, 42340,102,0,83,0,
4217116,0,97,0,116, 4235116,0,97,0,116,
42180,101,0,109,0, 42360,101,0,109,0,
4219101,0,110,0,116, 4237101,0,110,0,116,
42200,95,0,50,0, 42380,95,0,50,0,
42211,240,1,3,1, 42391,241,1,3,1,
42228,1,7,845,22, 42408,1,7,848,22,
42231,76,1,1775,846, 42411,76,1,1775,849,
422416,0,720,1,2029, 424216,0,735,1,2029,
4225847,17,848,15,849, 4243850,17,851,15,852,
42264,20,37,0,83, 42444,20,37,0,83,
42270,116,0,97,0, 42450,116,0,97,0,
4228116,0,101,0,109, 4246116,0,101,0,109,
42290,101,0,110,0, 42470,101,0,110,0,
4230116,0,1,-1,1, 4248116,0,1,-1,1,
42315,850,20,851,4, 42495,853,20,854,4,
423224,83,0,116,0, 425024,83,0,116,0,
423397,0,116,0,101, 425197,0,116,0,101,
42340,109,0,101,0, 42520,109,0,101,0,
4235110,0,116,0,95, 4253110,0,116,0,95,
42360,49,0,51,0, 42540,49,0,51,0,
42371,234,1,3,1, 42551,235,1,3,1,
42382,1,1,852,22, 42562,1,1,855,22,
42391,70,1,2030,853, 42571,70,1,2030,856,
424017,854,15,849,1, 425817,857,15,852,1,
4241-1,1,5,855,20, 4259-1,1,5,858,20,
4242856,4,24,83,0, 4260859,4,24,83,0,
4243116,0,97,0,116, 4261116,0,97,0,116,
42440,101,0,109,0, 42620,101,0,109,0,
4245101,0,110,0,116, 4263101,0,110,0,116,
42460,95,0,49,0, 42640,95,0,49,0,
424750,0,1,233,1, 426550,0,1,234,1,
42483,1,2,1,1, 42663,1,2,1,1,
4249857,22,1,69,1, 4267860,22,1,69,1,
42502031,858,17,859,15, 42682031,861,17,862,15,
4251849,1,-1,1,5, 4269852,1,-1,1,5,
4252860,20,861,4,24, 4270863,20,864,4,24,
425383,0,116,0,97, 427183,0,116,0,97,
42540,116,0,101,0, 42720,116,0,101,0,
4255109,0,101,0,110, 4273109,0,101,0,110,
42560,116,0,95,0, 42740,116,0,95,0,
425749,0,49,0,1, 427549,0,49,0,1,
4258232,1,3,1,2, 4276233,1,3,1,2,
42591,1,862,22,1, 42771,1,865,22,1,
426068,1,2032,863,17, 427868,1,2032,866,17,
4261864,15,849,1,-1, 4279867,15,852,1,-1,
42621,5,865,20,866, 42801,5,868,20,869,
42634,24,83,0,116, 42814,24,83,0,116,
42640,97,0,116,0, 42820,97,0,116,0,
4265101,0,109,0,101, 4283101,0,109,0,101,
42660,110,0,116,0, 42840,110,0,116,0,
426795,0,49,0,48, 428595,0,49,0,48,
42680,1,231,1,3, 42860,1,232,1,3,
42691,2,1,1,867, 42871,2,1,1,870,
427022,1,67,1,2033, 428822,1,67,1,2033,
4271868,17,869,15,849, 4289871,17,872,15,852,
42721,-1,1,5,870, 42901,-1,1,5,873,
427320,871,4,22,83, 429120,874,4,22,83,
42740,116,0,97,0, 42920,116,0,97,0,
4275116,0,101,0,109, 4293116,0,101,0,109,
42760,101,0,110,0, 42940,101,0,110,0,
4277116,0,95,0,57, 4295116,0,95,0,57,
42780,1,230,1,3, 42960,1,231,1,3,
42791,2,1,1,872, 42971,2,1,1,875,
428022,1,66,1,277, 429822,1,66,1,277,
4281873,16,0,720,1, 4299876,16,0,735,1,
42822035,874,17,875,15, 43002035,877,17,878,15,
4283849,1,-1,1,5, 4301852,1,-1,1,5,
4284876,20,877,4,22, 4302879,20,880,4,22,
428583,0,116,0,97, 430383,0,116,0,97,
42860,116,0,101,0, 43040,116,0,101,0,
4287109,0,101,0,110, 4305109,0,101,0,110,
42880,116,0,95,0, 43060,116,0,95,0,
428956,0,1,229,1, 430756,0,1,230,1,
42903,1,3,1,2, 43083,1,3,1,2,
4291878,22,1,65,1, 4309881,22,1,65,1,
42922037,879,17,880,15, 43102037,882,17,883,15,
4293849,1,-1,1,5, 4311852,1,-1,1,5,
4294881,20,882,4,22, 4312884,20,885,4,22,
429583,0,116,0,97, 431383,0,116,0,97,
42960,116,0,101,0, 43140,116,0,101,0,
4297109,0,101,0,110, 4315109,0,101,0,110,
42980,116,0,95,0, 43160,116,0,95,0,
429955,0,1,228,1, 431755,0,1,229,1,
43003,1,3,1,2, 43183,1,3,1,2,
4301883,22,1,64,1, 4319886,22,1,64,1,
43022039,884,17,885,15, 43202039,887,17,888,15,
4303849,1,-1,1,5, 4321852,1,-1,1,5,
4304886,20,887,4,22, 4322889,20,890,4,22,
430583,0,116,0,97, 432383,0,116,0,97,
43060,116,0,101,0, 43240,116,0,101,0,
4307109,0,101,0,110, 4325109,0,101,0,110,
43080,116,0,95,0, 43260,116,0,95,0,
430954,0,1,227,1, 432754,0,1,228,1,
43103,1,3,1,2, 43283,1,3,1,2,
4311888,22,1,63,1, 4329891,22,1,63,1,
431232,889,16,0,720, 433032,892,16,0,735,
43131,2041,890,17,891, 43311,2041,893,17,894,
431415,849,1,-1,1, 433215,852,1,-1,1,
43155,892,20,893,4, 43335,895,20,896,4,
431622,83,0,116,0, 433422,83,0,116,0,
431797,0,116,0,101, 433597,0,116,0,101,
43180,109,0,101,0, 43360,109,0,101,0,
4319110,0,116,0,95, 4337110,0,116,0,95,
43200,53,0,1,226, 43380,53,0,1,227,
43211,3,1,3,1, 43391,3,1,3,1,
43222,894,22,1,62, 43402,897,22,1,62,
43231,2293,895,16,0, 43411,2293,898,16,0,
4324720,1,2043,896,17, 4342735,1,2043,899,17,
4325897,15,849,1,-1, 4343900,15,852,1,-1,
43261,5,898,20,899, 43441,5,901,20,902,
43274,22,83,0,116, 43454,22,83,0,116,
43280,97,0,116,0, 43460,97,0,116,0,
4329101,0,109,0,101, 4347101,0,109,0,101,
43300,110,0,116,0, 43480,110,0,116,0,
433195,0,51,0,1, 434995,0,51,0,1,
4332224,1,3,1,3, 4350225,1,3,1,3,
43331,2,900,22,1, 43511,2,903,22,1,
433460,1,2045,901,17, 435260,1,2045,904,17,
4335902,15,849,1,-1, 4353905,15,852,1,-1,
43361,5,903,20,904, 43541,5,906,20,907,
43374,22,83,0,116, 43554,22,83,0,116,
43380,97,0,116,0, 43560,97,0,116,0,
4339101,0,109,0,101, 4357101,0,109,0,101,
43400,110,0,116,0, 43580,110,0,116,0,
434195,0,49,0,1, 435995,0,49,0,1,
4342222,1,3,1,3, 4360223,1,3,1,3,
43431,2,905,22,1, 43611,2,908,22,1,
434458,1,41,906,16, 436258,1,41,909,16,
43450,720,1,1297,907, 43630,735,1,1297,910,
434616,0,720,1,43, 436416,0,735,1,43,
4347908,16,0,720,1, 4365911,16,0,735,1,
43481803,909,17,910,15, 43661803,912,17,913,15,
4349911,4,16,37,0, 4367914,4,16,37,0,
435070,0,111,0,114, 436870,0,111,0,114,
43510,76,0,111,0, 43690,76,0,111,0,
4352111,0,112,0,1, 4370111,0,112,0,1,
4353-1,1,5,912,20, 4371-1,1,5,915,20,
4354913,4,18,70,0, 4372916,4,18,70,0,
4355111,0,114,0,76, 4373111,0,114,0,76,
43560,111,0,111,0, 43740,111,0,111,0,
4357112,0,95,0,49, 4375112,0,95,0,49,
43580,1,247,1,3, 43760,1,248,1,3,
43591,10,1,9,914, 43771,10,1,9,917,
436022,1,83,1,1804, 437822,1,83,1,1804,
4361915,16,0,720,1, 4379918,16,0,735,1,
4362299,916,16,0,720, 4380299,919,16,0,735,
43631,52,917,16,0, 43811,52,920,16,0,
4364720,1,2318,918,16, 4382735,1,2318,921,16,
43650,720,1,62,919, 43830,735,1,62,922,
436616,0,720,1,2075, 438416,0,735,1,2075,
4367920,16,0,720,1, 4385923,16,0,735,1,
43681574,921,17,922,15, 43861574,924,17,925,15,
4369849,1,-1,1,5, 4387852,1,-1,1,5,
4370923,20,924,4,22, 4388926,20,927,4,22,
437183,0,116,0,97, 438983,0,116,0,97,
43720,116,0,101,0, 43900,116,0,101,0,
4373109,0,101,0,110, 4391109,0,101,0,110,
43740,116,0,95,0, 43920,116,0,95,0,
437552,0,1,225,1, 439352,0,1,226,1,
43763,1,3,1,2, 43943,1,3,1,2,
4377925,22,1,61,1, 4395928,22,1,61,1,
437871,926,16,0,720, 439671,929,16,0,735,
43791,76,927,16,0, 43971,76,930,16,0,
4380720,1,1834,928,16, 4398735,1,1834,931,16,
43810,720,1,2337,929, 43990,735,1,2337,932,
438216,0,720,1,79, 440016,0,735,1,79,
4383930,16,0,720,1, 4401933,16,0,735,1,
43841335,931,16,0,720, 44021335,934,16,0,735,
43851,322,932,16,0, 44031,322,935,16,0,
4386720,1,85,933,16, 4404735,1,85,936,16,
43870,720,1,89,934, 44050,735,1,89,937,
438816,0,720,1,346, 440616,0,735,1,346,
4389935,16,0,720,1, 4407938,16,0,735,1,
43902105,936,17,937,15, 44082105,939,17,940,15,
4391842,1,-1,1,5, 4409845,1,-1,1,5,
4392938,20,939,4,26, 4410941,20,942,4,26,
439373,0,102,0,83, 441173,0,102,0,83,
43940,116,0,97,0, 44120,116,0,97,0,
4395116,0,101,0,109, 4413116,0,101,0,109,
43960,101,0,110,0, 44140,101,0,110,0,
4397116,0,95,0,51, 4415116,0,95,0,51,
43980,1,241,1,3, 44160,1,242,1,3,
43991,6,1,5,940, 44171,6,1,5,943,
440022,1,77,1,2106, 441822,1,77,1,2106,
4401941,16,0,720,1, 4419944,16,0,735,1,
440297,942,16,0,720, 442097,945,16,0,735,
44031,1860,943,17,944, 44211,1860,946,17,947,
440415,945,4,34,37, 442215,948,4,34,37,
44050,68,0,111,0, 44230,68,0,111,0,
440687,0,104,0,105, 442487,0,104,0,105,
44070,108,0,101,0, 44250,108,0,101,0,
@@ -4409,7 +4427,7 @@ public yyLSLSyntax
44090,116,0,101,0, 44270,116,0,101,0,
4410109,0,101,0,110, 4428109,0,101,0,110,
44110,116,0,1,-1, 44290,116,0,1,-1,
44121,5,946,20,947, 44301,5,949,20,950,
44134,36,68,0,111, 44314,36,68,0,111,
44140,87,0,104,0, 44320,87,0,104,0,
4415105,0,108,0,101, 4433105,0,108,0,101,
@@ -4417,26 +4435,26 @@ public yyLSLSyntax
441797,0,116,0,101, 443597,0,116,0,101,
44180,109,0,101,0, 44360,109,0,101,0,
4419110,0,116,0,95, 4437110,0,116,0,95,
44200,49,0,1,245, 44380,49,0,1,246,
44211,3,1,8,1, 44391,3,1,8,1,
44227,948,22,1,81, 44407,951,22,1,81,
44231,2364,949,17,950, 44411,2364,952,17,953,
442415,911,1,-1,1, 444215,914,1,-1,1,
44255,951,20,952,4, 44435,954,20,955,4,
442618,70,0,111,0, 444418,70,0,111,0,
4427114,0,76,0,111, 4445114,0,76,0,111,
44280,111,0,112,0, 44460,111,0,112,0,
442995,0,50,0,1, 444795,0,50,0,1,
4430248,1,3,1,9, 4448249,1,3,1,9,
44311,8,953,22,1, 44491,8,956,22,1,
443284,1,102,954,16, 445084,1,102,957,16,
44330,720,1,2782,955, 44510,735,1,112,958,
443416,0,720,1,112, 445216,0,735,1,1117,
4435956,16,0,720,1, 4453959,16,0,735,1,
44361117,957,16,0,720, 44542786,960,16,0,735,
44371,1873,958,17,959, 44551,1873,961,17,962,
443815,945,1,-1,1, 445615,948,1,-1,1,
44395,960,20,961,4, 44575,963,20,964,4,
444036,68,0,111,0, 445836,68,0,111,0,
444187,0,104,0,105, 445987,0,104,0,105,
44420,108,0,101,0, 44600,108,0,101,0,
@@ -4444,39 +4462,39 @@ public yyLSLSyntax
44440,116,0,101,0, 44620,116,0,101,0,
4445109,0,101,0,110, 4463109,0,101,0,110,
44460,116,0,95,0, 44640,116,0,95,0,
444750,0,1,246,1, 446550,0,1,247,1,
44483,1,8,1,7, 44663,1,8,1,7,
4449962,22,1,82,1, 4467965,22,1,82,1,
44501876,963,16,0,720, 44681876,966,16,0,735,
44511,124,964,16,0, 44691,124,967,16,0,
4452720,1,2136,965,17, 4470735,1,2136,968,17,
4453966,15,842,1,-1, 4471969,15,845,1,-1,
44541,5,967,20,968, 44721,5,970,20,971,
44554,26,73,0,102, 44734,26,73,0,102,
44560,83,0,116,0, 44740,83,0,116,0,
445797,0,116,0,101, 447597,0,116,0,101,
44580,109,0,101,0, 44760,109,0,101,0,
4459110,0,116,0,95, 4477110,0,116,0,95,
44600,52,0,1,242, 44780,52,0,1,243,
44611,3,1,8,1, 44791,3,1,8,1,
44627,969,22,1,78, 44807,972,22,1,78,
44631,381,970,16,0, 44811,381,973,16,0,
4464720,1,525,971,16, 4482735,1,525,974,16,
44650,720,1,137,972, 44830,735,1,137,975,
446616,0,720,1,1901, 448416,0,735,1,1901,
4467973,16,0,720,1, 4485976,16,0,735,1,
44681153,974,16,0,720, 44861153,977,16,0,735,
44691,151,975,16,0, 44871,151,978,16,0,
4470720,1,1407,976,16, 4488735,1,1407,979,16,
44710,720,1,1659,977, 44890,735,1,1659,980,
447216,0,720,1,2413, 449016,0,735,1,2413,
4473978,16,0,720,1, 4491981,16,0,735,1,
4474406,979,16,0,720, 4492406,982,16,0,735,
44751,1371,980,16,0, 44931,1371,983,16,0,
4476720,1,166,981,16, 4494735,1,166,984,16,
44770,720,1,1622,982, 44950,735,1,1622,985,
447816,0,720,1,1931, 449616,0,735,1,1931,
4479983,17,984,15,985, 4497986,17,987,15,988,
44804,30,37,0,87, 44984,30,37,0,87,
44810,104,0,105,0, 44990,104,0,105,0,
4482108,0,101,0,83, 4500108,0,101,0,83,
@@ -4484,46 +4502,46 @@ public yyLSLSyntax
4484116,0,101,0,109, 4502116,0,101,0,109,
44850,101,0,110,0, 45030,101,0,110,0,
4486116,0,1,-1,1, 4504116,0,1,-1,1,
44875,986,20,987,4, 45055,989,20,990,4,
448832,87,0,104,0, 450632,87,0,104,0,
4489105,0,108,0,101, 4507105,0,108,0,101,
44900,83,0,116,0, 45080,83,0,116,0,
449197,0,116,0,101, 450997,0,116,0,101,
44920,109,0,101,0, 45100,109,0,101,0,
4493110,0,116,0,95, 4511110,0,116,0,95,
44940,49,0,1,243, 45120,49,0,1,244,
44951,3,1,6,1, 45131,3,1,6,1,
44965,988,22,1,79, 45145,991,22,1,79,
44971,1933,989,16,0, 45151,1933,992,16,0,
4498720,1,431,990,16, 4516735,1,431,993,16,
44990,720,1,1585,991, 45170,735,1,1585,994,
450016,0,720,1,182, 451816,0,735,1,182,
4501992,16,0,720,1, 4519995,16,0,735,1,
45021189,993,16,0,720, 45201189,996,16,0,735,
45031,1443,994,16,0, 45211,1443,997,16,0,
4504720,1,1695,995,16, 4522735,1,1695,998,16,
45050,720,1,2198,996, 45230,735,1,2198,999,
450616,0,720,1,447, 452416,0,735,1,447,
4507997,16,0,720,1, 45251000,16,0,735,1,
45082458,998,17,999,15, 45262458,1001,17,1002,15,
45091000,4,28,37,0, 45271003,4,28,37,0,
451083,0,116,0,97, 452883,0,116,0,97,
45110,116,0,101,0, 45290,116,0,101,0,
4512109,0,101,0,110, 4530109,0,101,0,110,
45130,116,0,76,0, 45310,116,0,76,0,
4514105,0,115,0,116, 4532105,0,115,0,116,
45150,1,-1,1,5, 45330,1,-1,1,5,
45161001,20,1002,4,30, 45341004,20,1005,4,30,
451783,0,116,0,97, 453583,0,116,0,97,
45180,116,0,101,0, 45360,116,0,101,0,
4519109,0,101,0,110, 4537109,0,101,0,110,
45200,116,0,76,0, 45380,116,0,76,0,
4521105,0,115,0,116, 4539105,0,115,0,116,
45220,95,0,50,0, 45400,95,0,50,0,
45231,220,1,3,1, 45411,221,1,3,1,
45243,1,2,1003,22, 45423,1,2,1006,22,
45251,56,1,2459,1004, 45431,56,1,2459,1007,
452617,1005,15,1006,4, 454417,1008,15,1009,4,
452736,37,0,67,0, 454536,37,0,67,0,
4528111,0,109,0,112, 4546111,0,109,0,112,
45290,111,0,117,0, 45470,111,0,117,0,
@@ -4532,7 +4550,7 @@ public yyLSLSyntax
4532116,0,101,0,109, 4550116,0,101,0,109,
45330,101,0,110,0, 45510,101,0,110,0,
4534116,0,1,-1,1, 4552116,0,1,-1,1,
45355,1007,20,1008,4, 45535,1010,20,1011,4,
453638,67,0,111,0, 455438,67,0,111,0,
4537109,0,112,0,111, 4555109,0,112,0,111,
45380,117,0,110,0, 45560,117,0,110,0,
@@ -4541,34 +4559,34 @@ public yyLSLSyntax
4541101,0,109,0,101, 4559101,0,109,0,101,
45420,110,0,116,0, 45600,110,0,116,0,
454395,0,50,0,1, 456195,0,50,0,1,
4544218,1,3,1,4, 4562219,1,3,1,4,
45451,3,1009,22,1, 45631,3,1012,22,1,
454654,1,1958,1010,16, 456454,1,1958,1013,16,
45470,720,1,2462,1011, 45650,735,1,2462,1014,
454817,1012,15,1000,1, 456617,1015,15,1003,1,
4549-1,1,5,1013,20, 4567-1,1,5,1016,20,
45501014,4,30,83,0, 45681017,4,30,83,0,
4551116,0,97,0,116, 4569116,0,97,0,116,
45520,101,0,109,0, 45700,101,0,109,0,
4553101,0,110,0,116, 4571101,0,110,0,116,
45540,76,0,105,0, 45720,76,0,105,0,
4555115,0,116,0,95, 4573115,0,116,0,95,
45560,49,0,1,219, 45740,49,0,1,220,
45571,3,1,2,1, 45751,3,1,2,1,
45581,1015,22,1,55, 45761,1018,22,1,55,
45591,1657,1016,17,1017, 45771,1657,1019,17,1020,
456015,849,1,-1,1, 457815,852,1,-1,1,
45615,1018,20,1019,4, 45795,1021,20,1022,4,
456222,83,0,116,0, 458022,83,0,116,0,
456397,0,116,0,101, 458197,0,116,0,101,
45640,109,0,101,0, 45820,109,0,101,0,
4565110,0,116,0,95, 4583110,0,116,0,95,
45660,50,0,1,223, 45840,50,0,1,224,
45671,3,1,3,1, 45851,3,1,3,1,
45682,1020,22,1,59, 45862,1023,22,1,59,
45691,2464,1021,17,1022, 45871,2464,1024,17,1025,
457015,1006,1,-1,1, 458815,1009,1,-1,1,
45715,1023,20,1024,4, 45895,1026,20,1027,4,
457238,67,0,111,0, 459038,67,0,111,0,
4573109,0,112,0,111, 4591109,0,112,0,111,
45740,117,0,110,0, 45920,117,0,110,0,
@@ -4577,280 +4595,280 @@ public yyLSLSyntax
4577101,0,109,0,101, 4595101,0,109,0,101,
45780,110,0,116,0, 45960,110,0,116,0,
457995,0,49,0,1, 459795,0,49,0,1,
4580217,1,3,1,3, 4598218,1,3,1,3,
45811,2,1025,22,1, 45991,2,1028,22,1,
458253,1,199,1026,16, 460053,1,199,1029,16,
45830,720,1,459,1027, 46010,735,1,459,1030,
458416,0,720,1,462, 460216,0,735,1,462,
45851028,16,0,720,1, 46031031,16,0,735,1,
4586217,1029,16,0,720, 4604217,1032,16,0,735,
45871,2227,1030,17,1031, 46051,2227,1033,17,1034,
458815,985,1,-1,1, 460615,988,1,-1,1,
45895,1032,20,1033,4, 46075,1035,20,1036,4,
459032,87,0,104,0, 460832,87,0,104,0,
4591105,0,108,0,101, 4609105,0,108,0,101,
45920,83,0,116,0, 46100,83,0,116,0,
459397,0,116,0,101, 461197,0,116,0,101,
45940,109,0,101,0, 46120,109,0,101,0,
4595110,0,116,0,95, 4613110,0,116,0,95,
45960,50,0,1,244, 46140,50,0,1,245,
45971,3,1,6,1, 46151,3,1,6,1,
45985,1034,22,1,80, 46165,1037,22,1,80,
45991,1225,1035,16,0, 46171,1225,1038,16,0,
4600720,1,1479,1036,16, 4618735,1,1479,1039,16,
46010,720,1,1731,1037, 46190,735,1,1731,1040,
460216,0,720,1,1989, 462016,0,735,1,1989,
46031038,17,1039,15,842, 46211041,17,1042,15,845,
46041,-1,1,5,1040, 46221,-1,1,5,1043,
460520,1041,4,26,73, 462320,1044,4,26,73,
46060,102,0,83,0, 46240,102,0,83,0,
4607116,0,97,0,116, 4625116,0,97,0,116,
46080,101,0,109,0, 46260,101,0,109,0,
4609101,0,110,0,116, 4627101,0,110,0,116,
46100,95,0,49,0, 46280,95,0,49,0,
46111,239,1,3,1, 46291,240,1,3,1,
46126,1,5,1042,22, 46306,1,5,1045,22,
46131,75,1,1990,1043, 46311,75,1,1990,1046,
461416,0,720,1,236, 463216,0,735,1,236,
46151044,16,0,720,1, 46331047,16,0,735,1,
46161756,1045,16,0,720, 46341756,1048,16,0,735,
46171,4,1046,19,203, 46351,4,1049,19,200,
46181,4,1047,5,100, 46361,4,1050,5,100,
46191,256,1048,16,0, 46371,256,1051,16,0,
4620616,1,1261,1049,16, 4638624,1,1261,1052,16,
46210,616,1,509,1050, 46390,624,1,509,1053,
462216,0,616,1,1515, 464016,0,624,1,1515,
46231051,16,0,616,1, 46411054,16,0,624,1,
46242021,840,1,1775,1052, 46422021,843,1,1775,1055,
462516,0,616,1,2029, 464316,0,624,1,2029,
4626847,1,2030,853,1, 4644850,1,2030,856,1,
46272031,858,1,2032,863, 46452031,861,1,2032,866,
46281,2033,868,1,277, 46461,2033,871,1,277,
46291053,16,0,616,1, 46471056,16,0,624,1,
46302035,874,1,2037,879, 46482035,877,1,2037,882,
46311,2039,884,1,32, 46491,2039,887,1,32,
46321054,16,0,616,1, 46501057,16,0,624,1,
46332041,890,1,2293,1055, 46512041,893,1,2293,1058,
463416,0,616,1,2043, 465216,0,624,1,2043,
4635896,1,2045,901,1, 4653899,1,2045,904,1,
463640,1056,16,0,205, 465440,1059,16,0,202,
46371,41,1057,16,0, 46551,41,1060,16,0,
4638616,1,1297,1058,16, 4656624,1,1297,1061,16,
46390,616,1,43,1059, 46570,624,1,43,1062,
464016,0,616,1,44, 465816,0,624,1,44,
46411060,16,0,205,1, 46591063,16,0,202,1,
46421803,909,1,1804,1061, 46601803,912,1,1804,1064,
464316,0,616,1,299, 466116,0,624,1,299,
46441062,16,0,616,1, 46621065,16,0,624,1,
464547,1063,16,0,201, 466347,1066,16,0,198,
46461,52,1064,16,0, 46641,52,1067,16,0,
4647616,1,2318,1065,16, 4665624,1,2318,1068,16,
46480,616,1,63,1066, 46660,624,1,63,1069,
464916,0,227,1,66, 466716,0,224,1,66,
46501067,16,0,225,1, 46681070,16,0,222,1,
46512075,1068,16,0,616, 46692075,1071,16,0,624,
46521,1574,921,1,71, 46701,1574,924,1,71,
46531069,16,0,616,1, 46711072,16,0,624,1,
465476,1070,16,0,616, 467276,1073,16,0,624,
46551,1834,1071,16,0, 46731,1834,1074,16,0,
4656616,1,2337,1072,16, 4674624,1,2337,1075,16,
46570,616,1,79,1073, 46750,624,1,79,1076,
465816,0,616,1,1335, 467616,0,624,1,1335,
46591074,16,0,616,1, 46771077,16,0,624,1,
4660322,1075,16,0,616, 4678322,1078,16,0,624,
46611,85,1076,16,0, 46791,85,1079,16,0,
4662616,1,89,1077,16, 4680624,1,89,1080,16,
46630,616,1,346,1078, 46810,624,1,346,1081,
466416,0,616,1,97, 468216,0,624,1,97,
46651079,16,0,616,1, 46831082,16,0,624,1,
46662106,1080,16,0,616, 46842106,1083,16,0,624,
46671,102,1081,16,0, 46851,102,1084,16,0,
4668616,1,1860,943,1, 4686624,1,1860,946,1,
46692364,949,1,2782,1082, 46872364,952,1,1114,1085,
467016,0,616,1,1114,
46711083,16,0,201,1,
4672112,1084,16,0,616,
46731,1117,1085,16,0,
4674616,1,1873,958,1,
46751876,1086,16,0,616,
46761,124,1087,16,0,
4677616,1,2136,965,1,
4678381,1088,16,0,616,
46791,525,1089,16,0,
4680616,1,137,1090,16,
46810,616,1,1901,1091,
468216,0,616,1,1153,
46831092,16,0,616,1,
4684151,1093,16,0,616,
46851,1407,1094,16,0,
4686616,1,1659,1095,16,
46870,616,1,2413,1096,
468816,0,616,1,406,
46891097,16,0,616,1,
46901371,1098,16,0,616,
46911,2105,936,1,166,
46921099,16,0,616,1,
46931622,1100,16,0,616,
46941,1931,983,1,1933,
46951101,16,0,616,1,
4696431,1102,16,0,616,
46971,1585,1103,16,0,
4698616,1,182,1104,16,
46990,616,1,1189,1105,
470016,0,616,1,1443,
47011106,16,0,616,1,
47021695,1107,16,0,616,
47031,2198,1108,16,0,
4704616,1,447,1109,16,
47050,616,1,2458,998,
47061,2459,1004,1,1958,
47071110,16,0,616,1,
47082462,1011,1,1657,1016,
47091,2464,1021,1,199,
47101111,16,0,616,1,
4711459,1112,16,0,616,
47121,462,1113,16,0,
4713616,1,217,1114,16,
47140,616,1,2227,1030,
47151,1225,1115,16,0,
4716616,1,1479,1116,16,
47170,616,1,1731,1117,
471816,0,616,1,1989,
47191038,1,1990,1118,16,
47200,616,1,236,1119,
472116,0,616,1,1756,
47221120,16,0,616,1,
47235,1121,19,200,1,
47245,1122,5,100,1,
4725256,1123,16,0,612,
47261,1261,1124,16,0,
4727612,1,509,1125,16,
47280,612,1,1515,1126,
472916,0,612,1,2021,
4730840,1,1775,1127,16,
47310,612,1,2029,847,
47321,2030,853,1,2031,
4733858,1,2032,863,1,
47342033,868,1,277,1128,
473516,0,612,1,2035,
4736874,1,2037,879,1,
47372039,884,1,32,1129,
473816,0,612,1,2041,
4739890,1,2293,1130,16,
47400,612,1,2043,896,
47411,2045,901,1,40,
47421131,16,0,204,1,
474341,1132,16,0,612,
47441,1297,1133,16,0,
4745612,1,43,1134,16,
47460,612,1,44,1135,
474716,0,204,1,1803,
4748909,1,1804,1136,16,
47490,612,1,299,1137,
475016,0,612,1,47,
47511138,16,0,198,1,
475252,1139,16,0,612,
47531,2318,1140,16,0,
4754612,1,63,1141,16,
47550,226,1,66,1142,
475616,0,224,1,2075,
47571143,16,0,612,1,
47581574,921,1,71,1144,
475916,0,612,1,76,
47601145,16,0,612,1,
47611834,1146,16,0,612,
47621,2337,1147,16,0,
4763612,1,79,1148,16,
47640,612,1,1335,1149,
476516,0,612,1,322,
47661150,16,0,612,1,
476785,1151,16,0,612,
47681,89,1152,16,0,
4769612,1,346,1153,16,
47700,612,1,97,1154,
477116,0,612,1,2106,
47721155,16,0,612,1,
4773102,1156,16,0,612,
47741,1860,943,1,2364,
4775949,1,2782,1157,16,
47760,612,1,1114,1158,
477716,0,198,1,112, 468816,0,198,1,112,
47781159,16,0,612,1, 46891086,16,0,624,1,
47791117,1160,16,0,612, 46901117,1087,16,0,624,
47801,1873,958,1,1876, 46911,2786,1088,16,0,
47811161,16,0,612,1, 4692624,1,1873,961,1,
4782124,1162,16,0,612, 46931876,1089,16,0,624,
47831,2136,965,1,381, 46941,124,1090,16,0,
47841163,16,0,612,1, 4695624,1,2136,968,1,
4785525,1164,16,0,612, 4696381,1091,16,0,624,
47861,137,1165,16,0, 46971,525,1092,16,0,
4787612,1,1901,1166,16, 4698624,1,137,1093,16,
47880,612,1,1153,1167, 46990,624,1,1901,1094,
478916,0,612,1,151, 470016,0,624,1,1153,
47901168,16,0,612,1, 47011095,16,0,624,1,
47911407,1169,16,0,612, 4702151,1096,16,0,624,
47921,1659,1170,16,0, 47031,1407,1097,16,0,
4793612,1,2413,1171,16, 4704624,1,1659,1098,16,
47940,612,1,406,1172, 47050,624,1,2413,1099,
479516,0,612,1,1371, 470616,0,624,1,406,
47961173,16,0,612,1, 47071100,16,0,624,1,
47972105,936,1,166,1174, 47081371,1101,16,0,624,
479816,0,612,1,1622, 47091,2105,939,1,166,
47991175,16,0,612,1, 47101102,16,0,624,1,
48001931,983,1,1933,1176, 47111622,1103,16,0,624,
480116,0,612,1,431, 47121,1931,986,1,1933,
48021177,16,0,612,1, 47131104,16,0,624,1,
48031585,1178,16,0,612, 4714431,1105,16,0,624,
48041,182,1179,16,0, 47151,1585,1106,16,0,
4805612,1,1189,1180,16, 4716624,1,182,1107,16,
48060,612,1,1443,1181, 47170,624,1,1189,1108,
480716,0,612,1,1695, 471816,0,624,1,1443,
48081182,16,0,612,1, 47191109,16,0,624,1,
48092198,1183,16,0,612, 47201695,1110,16,0,624,
48101,447,1184,16,0, 47211,2198,1111,16,0,
4811612,1,2458,998,1, 4722624,1,447,1112,16,
48122459,1004,1,1958,1185, 47230,624,1,2458,1001,
481316,0,612,1,2462, 47241,2459,1007,1,1958,
48141011,1,1657,1016,1, 47251113,16,0,624,1,
48152464,1021,1,199,1186, 47262462,1014,1,1657,1019,
481616,0,612,1,459, 47271,2464,1024,1,199,
48171187,16,0,612,1, 47281114,16,0,624,1,
4818462,1188,16,0,612, 4729459,1115,16,0,624,
48191,217,1189,16,0, 47301,462,1116,16,0,
4820612,1,2227,1030,1, 4731624,1,217,1117,16,
48211225,1190,16,0,612, 47320,624,1,2227,1033,
48221,1479,1191,16,0, 47331,1225,1118,16,0,
4823612,1,1731,1192,16, 4734624,1,1479,1119,16,
48240,612,1,1989,1038, 47350,624,1,1731,1120,
48251,1990,1193,16,0, 473616,0,624,1,1989,
4826612,1,236,1194,16, 47371041,1,1990,1121,16,
48270,612,1,1756,1195, 47380,624,1,236,1122,
482816,0,612,1,6, 473916,0,624,1,1756,
48291196,19,306,1,6, 47401123,16,0,624,1,
48301197,5,2,1,1114, 47415,1124,19,197,1,
48311198,16,0,304,1, 47425,1125,5,100,1,
483240,1199,16,0,601, 4743256,1126,16,0,620,
48331,7,1200,19,270, 47441,1261,1127,16,0,
48341,7,1201,5,2, 4745620,1,509,1128,16,
48351,1114,1202,16,0, 47460,620,1,1515,1129,
4836268,1,40,1203,16, 474716,0,620,1,2021,
48370,531,1,8,1204, 4748843,1,1775,1130,16,
483819,233,1,8,1205, 47490,620,1,2029,850,
48395,2,1,1114,1206, 47501,2030,856,1,2031,
484016,0,231,1,40, 4751861,1,2032,866,1,
48411207,16,0,489,1, 47522033,871,1,277,1131,
48429,1208,19,239,1, 475316,0,620,1,2035,
48439,1209,5,2,1, 4754877,1,2037,882,1,
48441114,1210,16,0,237, 47552039,887,1,32,1132,
48451,40,1211,16,0, 475616,0,620,1,2041,
4846420,1,10,1212,19, 4757893,1,2293,1133,16,
4847183,1,10,1213,5, 47580,620,1,2043,899,
48482,1,1114,1214,16, 47591,2045,904,1,40,
48490,181,1,40,1215, 47601134,16,0,201,1,
485016,0,360,1,11, 476141,1135,16,0,620,
48511216,19,147,1,11, 47621,1297,1136,16,0,
48521217,5,146,1,1260, 4763620,1,43,1137,16,
48531218,17,1219,15,1220, 47640,620,1,44,1138,
476516,0,201,1,1803,
4766912,1,1804,1139,16,
47670,620,1,299,1140,
476816,0,620,1,47,
47691141,16,0,195,1,
477052,1142,16,0,620,
47711,2318,1143,16,0,
4772620,1,63,1144,16,
47730,223,1,66,1145,
477416,0,221,1,2075,
47751146,16,0,620,1,
47761574,924,1,71,1147,
477716,0,620,1,76,
47781148,16,0,620,1,
47791834,1149,16,0,620,
47801,2337,1150,16,0,
4781620,1,79,1151,16,
47820,620,1,1335,1152,
478316,0,620,1,322,
47841153,16,0,620,1,
478585,1154,16,0,620,
47861,89,1155,16,0,
4787620,1,346,1156,16,
47880,620,1,97,1157,
478916,0,620,1,2106,
47901158,16,0,620,1,
4791102,1159,16,0,620,
47921,1860,946,1,2364,
4793952,1,1114,1160,16,
47940,195,1,112,1161,
479516,0,620,1,1117,
47961162,16,0,620,1,
47972786,1163,16,0,620,
47981,1873,961,1,1876,
47991164,16,0,620,1,
4800124,1165,16,0,620,
48011,2136,968,1,381,
48021166,16,0,620,1,
4803525,1167,16,0,620,
48041,137,1168,16,0,
4805620,1,1901,1169,16,
48060,620,1,1153,1170,
480716,0,620,1,151,
48081171,16,0,620,1,
48091407,1172,16,0,620,
48101,1659,1173,16,0,
4811620,1,2413,1174,16,
48120,620,1,406,1175,
481316,0,620,1,1371,
48141176,16,0,620,1,
48152105,939,1,166,1177,
481616,0,620,1,1622,
48171178,16,0,620,1,
48181931,986,1,1933,1179,
481916,0,620,1,431,
48201180,16,0,620,1,
48211585,1181,16,0,620,
48221,182,1182,16,0,
4823620,1,1189,1183,16,
48240,620,1,1443,1184,
482516,0,620,1,1695,
48261185,16,0,620,1,
48272198,1186,16,0,620,
48281,447,1187,16,0,
4829620,1,2458,1001,1,
48302459,1007,1,1958,1188,
483116,0,620,1,2462,
48321014,1,1657,1019,1,
48332464,1024,1,199,1189,
483416,0,620,1,459,
48351190,16,0,620,1,
4836462,1191,16,0,620,
48371,217,1192,16,0,
4838620,1,2227,1033,1,
48391225,1193,16,0,620,
48401,1479,1194,16,0,
4841620,1,1731,1195,16,
48420,620,1,1989,1041,
48431,1990,1196,16,0,
4844620,1,236,1197,16,
48450,620,1,1756,1198,
484616,0,620,1,6,
48471199,19,310,1,6,
48481200,5,2,1,1114,
48491201,16,0,308,1,
485040,1202,16,0,609,
48511,7,1203,19,267,
48521,7,1204,5,2,
48531,1114,1205,16,0,
4854265,1,40,1206,16,
48550,544,1,8,1207,
485619,230,1,8,1208,
48575,2,1,1114,1209,
485816,0,228,1,40,
48591210,16,0,501,1,
48609,1211,19,236,1,
48619,1212,5,2,1,
48621114,1213,16,0,234,
48631,40,1214,16,0,
4864430,1,10,1215,19,
4865180,1,10,1216,5,
48662,1,1114,1217,16,
48670,178,1,40,1218,
486816,0,367,1,11,
48691219,19,151,1,11,
48701220,5,146,1,1260,
48711221,17,1222,15,1223,
48544,34,37,0,83, 48724,34,37,0,83,
48550,105,0,109,0, 48730,105,0,109,0,
4856112,0,108,0,101, 4874112,0,108,0,101,
@@ -4859,7 +4877,7 @@ public yyLSLSyntax
48590,110,0,109,0, 48770,110,0,109,0,
4860101,0,110,0,116, 4878101,0,110,0,116,
48610,1,-1,1,5, 48790,1,-1,1,5,
48621221,20,1222,4,38, 48801224,20,1225,4,38,
486383,0,105,0,109, 488183,0,105,0,109,
48640,112,0,108,0, 48820,112,0,108,0,
4865101,0,65,0,115, 4883101,0,65,0,115,
@@ -4867,11 +4885,11 @@ public yyLSLSyntax
4867103,0,110,0,109, 4885103,0,110,0,109,
48680,101,0,110,0, 48860,101,0,110,0,
4869116,0,95,0,50, 4887116,0,95,0,50,
48700,49,0,1,275, 48880,49,0,1,276,
48711,3,1,6,1, 48891,3,1,6,1,
48725,1223,22,1,111, 48905,1226,22,1,111,
48731,1011,1224,17,1225, 48911,1011,1227,17,1228,
487415,1226,4,44,37, 489215,1229,4,44,37,
48750,80,0,97,0, 48930,80,0,97,0,
4876114,0,101,0,110, 4894114,0,101,0,110,
48770,116,0,104,0, 48950,116,0,104,0,
@@ -4881,7 +4899,7 @@ public yyLSLSyntax
48810,101,0,115,0, 48990,101,0,115,0,
4882115,0,105,0,111, 4900115,0,105,0,111,
48830,110,0,1,-1, 49010,110,0,1,-1,
48841,5,1227,20,1228, 49021,5,1230,20,1231,
48854,46,80,0,97, 49034,46,80,0,97,
48860,114,0,101,0, 49040,114,0,101,0,
4887110,0,116,0,104, 4905110,0,116,0,104,
@@ -4891,12 +4909,12 @@ public yyLSLSyntax
4891114,0,101,0,115, 4909114,0,101,0,115,
48920,115,0,105,0, 49100,115,0,105,0,
4893111,0,110,0,95, 4911111,0,110,0,95,
48940,50,0,1,322, 49120,50,0,1,323,
48951,3,1,4,1, 49131,3,1,4,1,
48963,1229,22,1,158, 49143,1232,22,1,158,
48971,1514,1230,17,1231, 49151,1514,1233,17,1234,
489815,1220,1,-1,1, 491615,1223,1,-1,1,
48995,1232,20,1233,4, 49175,1235,20,1236,4,
490038,83,0,105,0, 491838,83,0,105,0,
4901109,0,112,0,108, 4919109,0,112,0,108,
49020,101,0,65,0, 49200,101,0,65,0,
@@ -4905,26 +4923,26 @@ public yyLSLSyntax
4905109,0,101,0,110, 4923109,0,101,0,110,
49060,116,0,95,0, 49240,116,0,95,0,
490749,0,52,0,1, 492549,0,52,0,1,
4908268,1,3,1,4, 4926269,1,3,1,4,
49091,3,1234,22,1, 49271,3,1237,22,1,
4910104,1,9,1235,17, 4928104,1,9,1238,17,
49111236,15,1237,4,24, 49291239,15,1240,4,24,
491237,0,68,0,101, 493037,0,68,0,101,
49130,99,0,108,0, 49310,99,0,108,0,
491497,0,114,0,97, 493297,0,114,0,97,
49150,116,0,105,0, 49330,116,0,105,0,
4916111,0,110,0,1, 4934111,0,110,0,1,
4917-1,1,5,1238,20, 4935-1,1,5,1241,20,
49181239,4,26,68,0, 49361242,4,26,68,0,
4919101,0,99,0,108, 4937101,0,99,0,108,
49200,97,0,114,0, 49380,97,0,114,0,
492197,0,116,0,105, 493997,0,116,0,105,
49220,111,0,110,0, 49400,111,0,110,0,
492395,0,49,0,1, 494195,0,49,0,1,
4924212,1,3,1,3, 4942213,1,3,1,3,
49251,2,1240,22,1, 49431,2,1243,22,1,
492648,1,262,1241,17, 494448,1,262,1244,17,
49271242,15,1243,4,34, 49451245,15,1246,4,34,
492837,0,66,0,105, 494637,0,66,0,105,
49290,110,0,97,0, 49470,110,0,97,0,
4930114,0,121,0,69, 4948114,0,121,0,69,
@@ -4932,8 +4950,8 @@ public yyLSLSyntax
4932114,0,101,0,115, 4950114,0,101,0,115,
49330,115,0,105,0, 49510,115,0,105,0,
4934111,0,110,0,1, 4952111,0,110,0,1,
4935-1,1,5,1244,20, 4953-1,1,5,1247,20,
49361245,4,36,66,0, 49541248,4,36,66,0,
4937105,0,110,0,97, 4955105,0,110,0,97,
49380,114,0,121,0, 49560,114,0,121,0,
493969,0,120,0,112, 495769,0,120,0,112,
@@ -4941,11 +4959,11 @@ public yyLSLSyntax
4941115,0,115,0,105, 4959115,0,115,0,105,
49420,111,0,110,0, 49600,111,0,110,0,
494395,0,53,0,1, 496195,0,53,0,1,
4944304,1,3,1,4, 4962305,1,3,1,4,
49451,3,1246,22,1, 49631,3,1249,22,1,
4946140,1,1267,1247,17, 4964140,1,1267,1250,17,
49471248,15,1220,1,-1, 49651251,15,1223,1,-1,
49481,5,1249,20,1250, 49661,5,1252,20,1253,
49494,36,83,0,105, 49674,36,83,0,105,
49500,109,0,112,0, 49680,109,0,112,0,
4951108,0,101,0,65, 4969108,0,101,0,65,
@@ -4953,13 +4971,13 @@ public yyLSLSyntax
4953105,0,103,0,110, 4971105,0,103,0,110,
49540,109,0,101,0, 49720,109,0,101,0,
4955110,0,116,0,95, 4973110,0,116,0,95,
49560,56,0,1,262, 49740,56,0,1,263,
49571,3,1,6,1, 49751,3,1,6,1,
49585,1251,22,1,98, 49765,1254,22,1,98,
49591,2021,840,1,1521, 49771,2021,843,1,1521,
49601252,17,1253,15,1220, 49781255,17,1256,15,1223,
49611,-1,1,5,1254, 49791,-1,1,5,1257,
496220,1255,4,36,83, 498020,1258,4,36,83,
49630,105,0,109,0, 49810,105,0,109,0,
4964112,0,108,0,101, 4982112,0,108,0,101,
49650,65,0,115,0, 49830,65,0,115,0,
@@ -4967,26 +4985,26 @@ public yyLSLSyntax
49670,110,0,109,0, 49850,110,0,109,0,
4968101,0,110,0,116, 4986101,0,110,0,116,
49690,95,0,49,0, 49870,95,0,49,0,
49701,255,1,3,1, 49881,256,1,3,1,
49714,1,3,1256,22, 49894,1,3,1259,22,
49721,91,1,2024,1257, 49901,91,1,2024,1260,
497317,1258,15,1259,4, 499117,1261,15,1262,4,
497424,37,0,83,0, 499224,37,0,83,0,
4975116,0,97,0,116, 4993116,0,97,0,116,
49760,101,0,67,0, 49940,101,0,67,0,
4977104,0,97,0,110, 4995104,0,97,0,110,
49780,103,0,101,0, 49960,103,0,101,0,
49791,-1,1,5,1260, 49971,-1,1,5,1263,
498020,1261,4,26,83, 499820,1264,4,26,83,
49810,116,0,97,0, 49990,116,0,97,0,
4982116,0,101,0,67, 5000116,0,101,0,67,
49830,104,0,97,0, 50010,104,0,97,0,
4984110,0,103,0,101, 5002110,0,103,0,101,
49850,95,0,49,0, 50030,95,0,49,0,
49861,237,1,3,1, 50041,238,1,3,1,
49873,1,2,1262,22, 50053,1,2,1265,22,
49881,73,1,1775,1263, 50061,73,1,1775,1266,
498917,1264,15,1265,4, 500717,1267,15,1268,4,
499030,37,0,69,0, 500830,37,0,69,0,
4991109,0,112,0,116, 5009109,0,112,0,116,
49920,121,0,83,0, 50100,121,0,83,0,
@@ -4994,34 +5012,34 @@ public yyLSLSyntax
49940,101,0,109,0, 50120,101,0,109,0,
4995101,0,110,0,116, 5013101,0,110,0,116,
49960,1,-1,1,5, 50140,1,-1,1,5,
49971266,20,1267,4,32, 50151269,20,1270,4,32,
499869,0,109,0,112, 501669,0,109,0,112,
49990,116,0,121,0, 50170,116,0,121,0,
500083,0,116,0,97, 501883,0,116,0,97,
50010,116,0,101,0, 50190,116,0,101,0,
5002109,0,101,0,110, 5020109,0,101,0,110,
50030,116,0,95,0, 50210,116,0,95,0,
500449,0,1,221,1, 502249,0,1,222,1,
50053,1,1,1,0, 50233,1,1,1,0,
50061268,22,1,57,1, 50241271,22,1,57,1,
500719,1269,17,1236,1, 502519,1272,17,1239,1,
50082,1240,1,2028,1270, 50262,1243,1,2028,1273,
500917,1271,15,1272,4, 502717,1274,15,1275,4,
501020,37,0,74,0, 502820,37,0,74,0,
5011117,0,109,0,112, 5029117,0,109,0,112,
50120,76,0,97,0, 50300,76,0,97,0,
501398,0,101,0,108, 503198,0,101,0,108,
50140,1,-1,1,5, 50320,1,-1,1,5,
50151273,20,1274,4,22, 50331276,20,1277,4,22,
501674,0,117,0,109, 503474,0,117,0,109,
50170,112,0,76,0, 50350,112,0,76,0,
501897,0,98,0,101, 503697,0,98,0,101,
50190,108,0,95,0, 50370,108,0,95,0,
502049,0,1,235,1, 503849,0,1,236,1,
50213,1,3,1,2, 50393,1,3,1,2,
50221275,22,1,71,1, 50401278,22,1,71,1,
50232029,847,1,2281,1276, 50412029,850,1,2281,1279,
502417,1277,15,1278,4, 504217,1280,15,1281,4,
502534,37,0,70,0, 504334,37,0,70,0,
5026111,0,114,0,76, 5044111,0,114,0,76,
50270,111,0,111,0, 50450,111,0,111,0,
@@ -5029,8 +5047,8 @@ public yyLSLSyntax
50290,97,0,116,0, 50470,97,0,116,0,
5030101,0,109,0,101, 5048101,0,109,0,101,
50310,110,0,116,0, 50490,110,0,116,0,
50321,-1,1,5,1279, 50501,-1,1,5,1282,
503320,1280,4,36,70, 505120,1283,4,36,70,
50340,111,0,114,0, 50520,111,0,114,0,
503576,0,111,0,111, 505376,0,111,0,111,
50360,112,0,83,0, 50540,112,0,83,0,
@@ -5038,125 +5056,95 @@ public yyLSLSyntax
50380,101,0,109,0, 50560,101,0,109,0,
5039101,0,110,0,116, 5057101,0,110,0,116,
50400,95,0,50,0, 50580,95,0,50,0,
50411,250,1,3,1, 50591,251,1,3,1,
50422,1,1,1281,22, 50602,1,1,1284,22,
50431,86,1,2031,858, 50611,86,1,2031,861,
50441,2032,863,1,2033, 50621,2785,1285,16,0,
5045868,1,2034,1282,16, 5063519,1,2033,871,1,
50460,676,1,2788,1283, 50642034,1286,16,0,691,
504716,0,145,1,2036, 50651,2035,877,1,2036,
50481284,16,0,602,1, 50661287,16,0,610,1,
50492037,879,1,2038,1285, 50672037,882,1,2038,1288,
505016,0,606,1,2039, 506816,0,614,1,2792,
5051884,1,32,1286,17, 50691289,16,0,149,1,
50521264,1,0,1268,1, 507032,1290,17,1267,1,
50532041,890,1,2042,1287, 50710,1271,1,2032,866,
505416,0,749,1,2043, 50721,2042,1291,16,0,
5055896,1,2044,1288,16, 5073757,1,2043,899,1,
50560,689,1,2045,901, 50742044,1292,16,0,704,
50571,2299,1289,16,0, 50751,2045,904,1,2299,
5058255,1,1296,1290,17, 50761293,16,0,252,1,
50591291,15,1220,1,-1, 50771296,1294,17,1295,15,
50601,5,1292,20,1293, 50781223,1,-1,1,5,
50614,38,83,0,105, 50791296,20,1297,4,38,
50620,109,0,112,0, 508083,0,105,0,109,
5063108,0,101,0,65, 50810,112,0,108,0,
50640,115,0,115,0, 5082101,0,65,0,115,
5065105,0,103,0,110, 50830,115,0,105,0,
50660,109,0,101,0, 5084103,0,110,0,109,
5067110,0,116,0,95,
50680,50,0,48,0,
50691,274,1,3,1,
50706,1,5,1294,22,
50711,110,1,283,1295,
507217,1296,15,1243,1,
5073-1,1,5,1297,20,
50741298,4,36,66,0,
5075105,0,110,0,97,
50760,114,0,121,0,
507769,0,120,0,112,
50780,114,0,101,0,
5079115,0,115,0,105,
50800,111,0,110,0,
508195,0,52,0,1,
5082303,1,3,1,4,
50831,3,1299,22,1,
5084139,1,40,1300,17,
50851301,15,1302,4,32,
508637,0,73,0,100,
50870,101,0,110,0, 50850,101,0,110,0,
5088116,0,69,0,120, 5086116,0,95,0,50,
50890,112,0,114,0, 50870,48,0,1,275,
5090101,0,115,0,115, 50881,3,1,6,1,
50910,105,0,111,0, 50895,1298,22,1,110,
5092110,0,1,-1,1, 50901,283,1299,17,1300,
50935,1303,20,1304,4, 509115,1246,1,-1,1,
509434,73,0,100,0, 50925,1301,20,1302,4,
5095101,0,110,0,116, 509336,66,0,105,0,
50960,69,0,120,0, 5094110,0,97,0,114,
5097112,0,114,0,101, 50950,121,0,69,0,
50980,115,0,115,0, 5096120,0,112,0,114,
5099105,0,111,0,110, 50970,101,0,115,0,
51000,95,0,49,0, 5098115,0,105,0,111,
51011,289,1,3,1, 50990,110,0,95,0,
51022,1,1,1305,22, 510052,0,1,304,1,
51031,125,1,44,1306, 51013,1,4,1,3,
510417,1301,1,1,1305, 51021303,22,1,139,1,
51051,1803,909,1,47, 510340,1304,17,1305,15,
51061307,17,1308,15,1309, 51041306,4,32,37,0,
51074,38,37,0,73, 510573,0,100,0,101,
51080,100,0,101,0, 51060,110,0,116,0,
5109110,0,116,0,68,
51100,111,0,116,0,
511169,0,120,0,112, 510769,0,120,0,112,
51120,114,0,101,0, 51080,114,0,101,0,
5113115,0,115,0,105, 5109115,0,115,0,105,
51140,111,0,110,0, 51100,111,0,110,0,
51151,-1,1,5,1310, 51111,-1,1,5,1307,
511620,1311,4,40,73, 511220,1308,4,34,73,
51170,100,0,101,0, 51130,100,0,101,0,
5118110,0,116,0,68, 5114110,0,116,0,69,
51190,111,0,116,0, 51150,120,0,112,0,
512069,0,120,0,112, 5116114,0,101,0,115,
51210,114,0,101,0, 51170,115,0,105,0,
5122115,0,115,0,105, 5118111,0,110,0,95,
51230,111,0,110,0, 51190,49,0,1,290,
512495,0,49,0,1, 51201,3,1,2,1,
5125290,1,3,1,4, 51211,1309,22,1,125,
51261,3,1312,22,1, 51221,44,1310,17,1305,
5127126,1,48,1313,17, 51231,1,1309,1,1803,
51281314,15,1315,4,58, 5124912,1,47,1311,17,
512937,0,73,0,110, 51251312,15,1313,4,38,
51300,99,0,114,0, 512637,0,73,0,100,
5131101,0,109,0,101, 51270,101,0,110,0,
51320,110,0,116,0, 5128116,0,68,0,111,
513368,0,101,0,99,
51340,114,0,101,0,
5135109,0,101,0,110,
51360,116,0,69,0, 51290,116,0,69,0,
5137120,0,112,0,114, 5130120,0,112,0,114,
51380,101,0,115,0, 51310,101,0,115,0,
5139115,0,105,0,111, 5132115,0,105,0,111,
51400,110,0,1,-1, 51330,110,0,1,-1,
51411,5,1316,20,1317, 51341,5,1314,20,1315,
51424,60,73,0,110, 51354,40,73,0,100,
51430,99,0,114,0, 51360,101,0,110,0,
5144101,0,109,0,101, 5137116,0,68,0,111,
51450,110,0,116,0,
514668,0,101,0,99,
51470,114,0,101,0,
5148109,0,101,0,110,
51490,116,0,69,0, 51380,116,0,69,0,
5150120,0,112,0,114, 5139120,0,112,0,114,
51510,101,0,115,0, 51400,101,0,115,0,
5152115,0,105,0,111, 5141115,0,105,0,111,
51530,110,0,95,0, 51420,110,0,95,0,
515452,0,1,294,1, 514349,0,1,291,1,
51553,1,5,1,4, 51443,1,4,1,3,
51561318,22,1,130,1, 51451316,22,1,126,1,
515749,1319,17,1320,15, 514648,1317,17,1318,15,
51581315,1,-1,1,5, 51471319,4,58,37,0,
51591321,20,1322,4,60,
516073,0,110,0,99, 514873,0,110,0,99,
51610,114,0,101,0, 51490,114,0,101,0,
5162109,0,101,0,110, 5150109,0,101,0,110,
@@ -5168,13 +5156,26 @@ public yyLSLSyntax
5168112,0,114,0,101, 5156112,0,114,0,101,
51690,115,0,115,0, 51570,115,0,115,0,
5170105,0,111,0,110, 5158105,0,111,0,110,
51710,95,0,51,0, 51590,1,-1,1,5,
51721,293,1,3,1, 51601320,20,1321,4,60,
51735,1,4,1323,22, 516173,0,110,0,99,
51741,129,1,50,1324, 51620,114,0,101,0,
517517,1325,15,1315,1, 5163109,0,101,0,110,
5176-1,1,5,1326,20, 51640,116,0,68,0,
51771327,4,60,73,0, 5165101,0,99,0,114,
51660,101,0,109,0,
5167101,0,110,0,116,
51680,69,0,120,0,
5169112,0,114,0,101,
51700,115,0,115,0,
5171105,0,111,0,110,
51720,95,0,52,0,
51731,295,1,3,1,
51745,1,4,1322,22,
51751,130,1,49,1323,
517617,1324,15,1319,1,
5177-1,1,5,1325,20,
51781326,4,60,73,0,
5178110,0,99,0,114, 5179110,0,99,0,114,
51790,101,0,109,0, 51800,101,0,109,0,
5180101,0,110,0,116, 5181101,0,110,0,116,
@@ -5186,12 +5187,12 @@ public yyLSLSyntax
5186114,0,101,0,115, 5187114,0,101,0,115,
51870,115,0,105,0, 51880,115,0,105,0,
5188111,0,110,0,95, 5189111,0,110,0,95,
51890,50,0,1,292, 51900,51,0,1,294,
51901,3,1,3,1, 51911,3,1,5,1,
51912,1328,22,1,128, 51924,1327,22,1,129,
51921,51,1329,17,1330, 51931,50,1328,17,1329,
519315,1315,1,-1,1, 519415,1319,1,-1,1,
51945,1331,20,1332,4, 51955,1330,20,1331,4,
519560,73,0,110,0, 519660,73,0,110,0,
519699,0,114,0,101, 519799,0,114,0,101,
51970,109,0,101,0, 51980,109,0,101,0,
@@ -5203,67 +5204,71 @@ public yyLSLSyntax
52030,112,0,114,0, 52040,112,0,114,0,
5204101,0,115,0,115, 5205101,0,115,0,115,
52050,105,0,111,0, 52060,105,0,111,0,
5206110,0,95,0,49, 5207110,0,95,0,50,
52070,1,291,1,3, 52080,1,293,1,3,
52081,3,1,2,1333, 52091,3,1,2,1332,
520922,1,127,1,305, 521022,1,128,1,51,
52101334,17,1335,15,1243, 52111333,17,1334,15,1319,
52111,-1,1,5,1336, 52121,-1,1,5,1335,
521220,1337,4,36,66, 521320,1336,4,60,73,
52130,105,0,110,0, 52140,110,0,99,0,
521497,0,114,0,121, 5215114,0,101,0,109,
52150,69,0,120,0, 52160,101,0,110,0,
5216112,0,114,0,101, 5217116,0,68,0,101,
52170,115,0,115,0, 52180,99,0,114,0,
5218105,0,111,0,110, 5219101,0,109,0,101,
52190,95,0,51,0,
52201,302,1,3,1,
52214,1,3,1338,22,
52221,138,1,525,1339,
522317,1340,15,1341,4,
522434,37,0,82,0,
5225111,0,116,0,97,
52260,116,0,105,0,
5227111,0,110,0,67,
52280,111,0,110,0,
5229115,0,116,0,97,
52300,110,0,116,0, 52200,110,0,116,0,
52311,-1,1,5,1342, 522169,0,120,0,112,
523220,1343,4,36,82, 52220,114,0,101,0,
52330,111,0,116,0, 5223115,0,115,0,105,
523497,0,116,0,105,
52350,111,0,110,0, 52240,111,0,110,0,
523667,0,111,0,110, 522595,0,49,0,1,
52370,115,0,116,0, 5226292,1,3,1,3,
523897,0,110,0,116, 52271,2,1337,22,1,
52390,95,0,49,0, 5228127,1,305,1338,17,
52401,287,1,3,1, 52291339,15,1246,1,-1,
524110,1,9,1344,22, 52301,5,1340,20,1341,
52421,123,1,63,1345, 52314,36,66,0,105,
524317,1346,15,1347,4, 52320,110,0,97,0,
524438,37,0,84,0, 5233114,0,121,0,69,
5245121,0,112,0,101,
52460,99,0,97,0,
5247115,0,116,0,69,
52480,120,0,112,0,
5249114,0,101,0,115,
52500,115,0,105,0,
5251111,0,110,0,1,
5252-1,1,5,1348,20,
52531349,4,40,84,0,
5254121,0,112,0,101,
52550,99,0,97,0,
5256115,0,116,0,69,
52570,120,0,112,0, 52340,120,0,112,0,
5258114,0,101,0,115, 5235114,0,101,0,115,
52590,115,0,105,0, 52360,115,0,105,0,
5260111,0,110,0,95, 5237111,0,110,0,95,
52610,50,0,1,324, 52380,51,0,1,303,
52621,3,1,5,1, 52391,3,1,4,1,
52634,1350,22,1,160, 52403,1342,22,1,138,
52641,66,1351,17,1352, 52411,525,1343,17,1344,
526515,1347,1,-1,1, 524215,1345,4,34,37,
52665,1353,20,1354,4, 52430,82,0,111,0,
5244116,0,97,0,116,
52450,105,0,111,0,
5246110,0,67,0,111,
52470,110,0,115,0,
5248116,0,97,0,110,
52490,116,0,1,-1,
52501,5,1346,20,1347,
52514,36,82,0,111,
52520,116,0,97,0,
5253116,0,105,0,111,
52540,110,0,67,0,
5255111,0,110,0,115,
52560,116,0,97,0,
5257110,0,116,0,95,
52580,49,0,1,288,
52591,3,1,10,1,
52609,1348,22,1,123,
52611,63,1349,17,1350,
526215,1351,4,38,37,
52630,84,0,121,0,
5264112,0,101,0,99,
52650,97,0,115,0,
5266116,0,69,0,120,
52670,112,0,114,0,
5268101,0,115,0,115,
52690,105,0,111,0,
5270110,0,1,-1,1,
52715,1352,20,1353,4,
526740,84,0,121,0, 527240,84,0,121,0,
5268112,0,101,0,99, 5273112,0,101,0,99,
52690,97,0,115,0, 52740,97,0,115,0,
@@ -5271,13 +5276,13 @@ public yyLSLSyntax
52710,112,0,114,0, 52760,112,0,114,0,
5272101,0,115,0,115, 5277101,0,115,0,115,
52730,105,0,111,0, 52780,105,0,111,0,
5274110,0,95,0,51, 5279110,0,95,0,50,
52750,1,325,1,3, 52800,1,325,1,3,
52761,7,1,6,1355, 52811,5,1,4,1354,
527722,1,161,1,67, 528222,1,160,1,66,
52781356,17,1357,15,1347, 52831355,17,1356,15,1351,
52791,-1,1,5,1358, 52841,-1,1,5,1357,
528020,1359,4,40,84, 528520,1358,4,40,84,
52810,121,0,112,0, 52860,121,0,112,0,
5282101,0,99,0,97, 5287101,0,99,0,97,
52830,115,0,116,0, 52880,115,0,116,0,
@@ -5285,12 +5290,12 @@ public yyLSLSyntax
52850,114,0,101,0, 52900,114,0,101,0,
5286115,0,115,0,105, 5291115,0,115,0,105,
52870,111,0,110,0, 52920,111,0,110,0,
528895,0,55,0,1, 529395,0,51,0,1,
5289329,1,3,1,8, 5294326,1,3,1,7,
52901,7,1360,22,1, 52951,6,1359,22,1,
5291165,1,68,1361,17, 5296161,1,67,1360,17,
52921362,15,1347,1,-1, 52971361,15,1351,1,-1,
52931,5,1363,20,1364, 52981,5,1362,20,1363,
52944,40,84,0,121, 52994,40,84,0,121,
52950,112,0,101,0, 53000,112,0,101,0,
529699,0,97,0,115, 530199,0,97,0,115,
@@ -5299,12 +5304,12 @@ public yyLSLSyntax
52990,101,0,115,0, 53040,101,0,115,0,
5300115,0,105,0,111, 5305115,0,105,0,111,
53010,110,0,95,0, 53060,110,0,95,0,
530253,0,1,327,1, 530755,0,1,330,1,
53033,1,8,1,7, 53083,1,8,1,7,
53041365,22,1,163,1, 53091364,22,1,165,1,
530569,1366,17,1367,15, 531068,1365,17,1366,15,
53061347,1,-1,1,5, 53111351,1,-1,1,5,
53071368,20,1369,4,40, 53121367,20,1368,4,40,
530884,0,121,0,112, 531384,0,121,0,112,
53090,101,0,99,0, 53140,101,0,99,0,
531097,0,115,0,116, 531597,0,115,0,116,
@@ -5312,13 +5317,13 @@ public yyLSLSyntax
5312112,0,114,0,101, 5317112,0,114,0,101,
53130,115,0,115,0, 53180,115,0,115,0,
5314105,0,111,0,110, 5319105,0,111,0,110,
53150,95,0,54,0, 53200,95,0,53,0,
53161,328,1,3,1, 53211,328,1,3,1,
53176,1,5,1370,22, 53228,1,7,1369,22,
53181,164,1,70,1371, 53231,163,1,69,1370,
531917,1372,15,1347,1, 532417,1371,15,1351,1,
5320-1,1,5,1373,20, 5325-1,1,5,1372,20,
53211374,4,40,84,0, 53261373,4,40,84,0,
5322121,0,112,0,101, 5327121,0,112,0,101,
53230,99,0,97,0, 53280,99,0,97,0,
5324115,0,116,0,69, 5329115,0,116,0,69,
@@ -5326,12 +5331,12 @@ public yyLSLSyntax
5326114,0,101,0,115, 5331114,0,101,0,115,
53270,115,0,105,0, 53320,115,0,105,0,
5328111,0,110,0,95, 5333111,0,110,0,95,
53290,52,0,1,326, 53340,54,0,1,329,
53301,3,1,6,1, 53351,3,1,6,1,
53315,1375,22,1,162, 53365,1374,22,1,164,
53321,74,1376,17,1377, 53371,70,1375,17,1376,
533315,1347,1,-1,1, 533815,1351,1,-1,1,
53345,1378,20,1379,4, 53395,1377,20,1378,4,
533540,84,0,121,0, 534040,84,0,121,0,
5336112,0,101,0,99, 5341112,0,101,0,99,
53370,97,0,115,0, 53420,97,0,115,0,
@@ -5339,191 +5344,251 @@ public yyLSLSyntax
53390,112,0,114,0, 53440,112,0,114,0,
5340101,0,115,0,115, 5345101,0,115,0,115,
53410,105,0,111,0, 53460,105,0,111,0,
5342110,0,95,0,57, 5347110,0,95,0,52,
53430,1,331,1,3, 53480,1,327,1,3,
53441,7,1,6,1380, 53491,6,1,5,1379,
534522,1,167,1,1013, 535022,1,162,1,74,
53461381,17,1382,15,1226, 53511380,17,1381,15,1351,
53471,-1,1,5,1383, 53521,-1,1,5,1382,
534820,1384,4,46,80, 535320,1383,4,40,84,
53490,97,0,114,0, 53540,121,0,112,0,
5350101,0,110,0,116, 5355101,0,99,0,97,
53510,104,0,101,0, 53560,115,0,116,0,
5352115,0,105,0,115,
53530,69,0,120,0,
5354112,0,114,0,101,
53550,115,0,115,0,
5356105,0,111,0,110,
53570,95,0,49,0,
53581,321,1,3,1,
53594,1,3,1385,22,
53601,157,1,1332,1386,
536117,1387,15,1220,1,
5362-1,1,5,1388,20,
53631389,4,38,83,0,
5364105,0,109,0,112,
53650,108,0,101,0,
536665,0,115,0,115,
53670,105,0,103,0,
5368110,0,109,0,101,
53690,110,0,116,0,
537095,0,49,0,57,
53710,1,273,1,3,
53721,6,1,5,1390,
537322,1,109,1,2337,
53741391,17,1264,1,0,
53751268,1,1585,1392,17,
53761393,15,1394,4,32,
537737,0,82,0,101,
53780,116,0,117,0,
5379114,0,110,0,83,
53800,116,0,97,0,
5381116,0,101,0,109,
53820,101,0,110,0,
5383116,0,1,-1,1,
53845,1395,20,1396,4,
538534,82,0,101,0,
5386116,0,117,0,114,
53870,110,0,83,0,
5388116,0,97,0,116,
53890,101,0,109,0,
5390101,0,110,0,116,
53910,95,0,50,0,
53921,280,1,3,1,
53932,1,1,1397,22,
53941,116,1,2023,1398,
539517,1399,15,1259,1,
5396-1,1,5,1400,20,
53971401,4,26,83,0,
5398116,0,97,0,116,
53990,101,0,67,0,
5400104,0,97,0,110,
54010,103,0,101,0,
540295,0,50,0,1,
5403238,1,3,1,3,
54041,2,1402,22,1,
540574,1,2136,965,1,
540682,1403,17,1404,15,
54071405,4,32,37,0,
540885,0,110,0,97,
54090,114,0,121,0,
541069,0,120,0,112, 535769,0,120,0,112,
54110,114,0,101,0, 53580,114,0,101,0,
5412115,0,115,0,105, 5359115,0,115,0,105,
54130,111,0,110,0, 53600,111,0,110,0,
54141,-1,1,5,1406, 536195,0,57,0,1,
541520,1407,4,34,85, 5362332,1,3,1,7,
54160,110,0,97,0, 53631,6,1384,22,1,
5417114,0,121,0,69, 5364167,1,1013,1385,17,
53651386,15,1229,1,-1,
53661,5,1387,20,1388,
53674,46,80,0,97,
53680,114,0,101,0,
5369110,0,116,0,104,
53700,101,0,115,0,
5371105,0,115,0,69,
54180,120,0,112,0, 53720,120,0,112,0,
5419114,0,101,0,115, 5373114,0,101,0,115,
54200,115,0,105,0, 53740,115,0,105,0,
5421111,0,110,0,95, 5375111,0,110,0,95,
54220,51,0,1,320, 53760,49,0,1,322,
54231,3,1,3,1, 53771,3,1,4,1,
54242,1408,22,1,156, 53783,1389,22,1,157,
54251,2026,1409,17,1410, 53791,1332,1390,17,1391,
542615,1411,4,28,37, 538015,1223,1,-1,1,
54270,74,0,117,0, 53815,1392,20,1393,4,
5428109,0,112,0,83, 538238,83,0,105,0,
54290,116,0,97,0,
5430116,0,101,0,109,
54310,101,0,110,0,
5432116,0,1,-1,1,
54335,1412,20,1413,4,
543430,74,0,117,0,
5435109,0,112,0,83,
54360,116,0,97,0,
5437116,0,101,0,109,
54380,101,0,110,0,
5439116,0,95,0,49,
54400,1,236,1,3,
54411,3,1,2,1414,
544222,1,72,1,1591,
54431415,17,1416,15,1394,
54441,-1,1,5,1417,
544520,1418,4,34,82,
54460,101,0,116,0,
5447117,0,114,0,110,
54480,83,0,116,0,
544997,0,116,0,101,
54500,109,0,101,0,
5451110,0,116,0,95,
54520,49,0,1,279,
54531,3,1,3,1,
54542,1419,22,1,115,
54551,1341,1420,17,1421,
545615,1220,1,-1,1,
54575,1422,20,1423,4,
545836,83,0,105,0,
5459109,0,112,0,108, 5383109,0,112,0,108,
54600,101,0,65,0, 53840,101,0,65,0,
5461115,0,115,0,105, 5385115,0,115,0,105,
54620,103,0,110,0, 53860,103,0,110,0,
5463109,0,101,0,110, 5387109,0,101,0,110,
54640,116,0,95,0, 53880,116,0,95,0,
546554,0,1,260,1, 538949,0,57,0,1,
54663,1,4,1,3, 5390274,1,3,1,6,
54671424,22,1,96,1, 53911,5,1394,22,1,
54682030,853,1,328,1425, 5392109,1,2337,1395,17,
546917,1426,15,1243,1, 53931267,1,0,1271,1,
5470-1,1,5,1427,20, 53941585,1396,17,1397,15,
54711428,4,36,66,0, 53951398,4,32,37,0,
5472105,0,110,0,97, 539682,0,101,0,116,
54730,114,0,121,0, 53970,117,0,114,0,
547469,0,120,0,112, 5398110,0,83,0,116,
54750,114,0,101,0, 53990,97,0,116,0,
5476115,0,115,0,105, 5400101,0,109,0,101,
54770,111,0,110,0, 54010,110,0,116,0,
547895,0,50,0,1, 54021,-1,1,5,1399,
5479301,1,3,1,4, 540320,1400,4,34,82,
54801,3,1429,22,1, 54040,101,0,116,0,
5481137,1,1303,1430,17, 5405117,0,114,0,110,
54821431,15,1220,1,-1, 54060,83,0,116,0,
54831,5,1432,20,1433, 540797,0,116,0,101,
54844,36,83,0,105,
54850,109,0,112,0,
5486108,0,101,0,65,
54870,115,0,115,0,
5488105,0,103,0,110,
54890,109,0,101,0, 54080,109,0,101,0,
5490110,0,116,0,95, 5409110,0,116,0,95,
54910,55,0,1,261, 54100,50,0,1,281,
54921,3,1,6,1, 54111,3,1,2,1,
54935,1434,22,1,97, 54121,1401,22,1,116,
54941,2035,874,1,93, 54131,2023,1402,17,1403,
54951435,17,1436,15,1405, 541415,1262,1,-1,1,
54961,-1,1,5,1437, 54155,1404,20,1405,4,
549720,1438,4,34,85, 541626,83,0,116,0,
54980,110,0,97,0, 541797,0,116,0,101,
5499114,0,121,0,69, 54180,67,0,104,0,
55000,120,0,112,0, 541997,0,110,0,103,
5501114,0,101,0,115, 54200,101,0,95,0,
542150,0,1,239,1,
54223,1,3,1,2,
54231406,22,1,74,1,
54242136,968,1,82,1407,
542517,1408,15,1409,4,
542632,37,0,85,0,
5427110,0,97,0,114,
54280,121,0,69,0,
5429120,0,112,0,114,
54300,101,0,115,0,
5431115,0,105,0,111,
54320,110,0,1,-1,
54331,5,1410,20,1411,
54344,34,85,0,110,
54350,97,0,114,0,
5436121,0,69,0,120,
54370,112,0,114,0,
5438101,0,115,0,115,
54390,105,0,111,0,
5440110,0,95,0,51,
54410,1,321,1,3,
54421,3,1,2,1412,
544322,1,156,1,2026,
54441413,17,1414,15,1415,
54454,28,37,0,74,
54460,117,0,109,0,
5447112,0,83,0,116,
54480,97,0,116,0,
5449101,0,109,0,101,
54500,110,0,116,0,
54511,-1,1,5,1416,
545220,1417,4,30,74,
54530,117,0,109,0,
5454112,0,83,0,116,
54550,97,0,116,0,
5456101,0,109,0,101,
54570,110,0,116,0,
545895,0,49,0,1,
5459237,1,3,1,3,
54601,2,1418,22,1,
546172,1,1591,1419,17,
54621420,15,1398,1,-1,
54631,5,1421,20,1422,
54644,34,82,0,101,
54650,116,0,117,0,
5466114,0,110,0,83,
54670,116,0,97,0,
5468116,0,101,0,109,
54690,101,0,110,0,
5470116,0,95,0,49,
54710,1,280,1,3,
54721,3,1,2,1423,
547322,1,115,1,1341,
54741424,17,1425,15,1223,
54751,-1,1,5,1426,
547620,1427,4,36,83,
54770,105,0,109,0,
5478112,0,108,0,101,
54790,65,0,115,0,
5480115,0,105,0,103,
54810,110,0,109,0,
5482101,0,110,0,116,
54830,95,0,54,0,
54841,261,1,3,1,
54854,1,3,1428,22,
54861,96,1,2030,856,
54871,328,1429,17,1430,
548815,1246,1,-1,1,
54895,1431,20,1432,4,
549036,66,0,105,0,
5491110,0,97,0,114,
54920,121,0,69,0,
5493120,0,112,0,114,
54940,101,0,115,0,
5495115,0,105,0,111,
54960,110,0,95,0,
549750,0,1,302,1,
54983,1,4,1,3,
54991433,22,1,137,1,
55001303,1434,17,1435,15,
55011223,1,-1,1,5,
55021436,20,1437,4,36,
550383,0,105,0,109,
55040,112,0,108,0,
5505101,0,65,0,115,
55020,115,0,105,0, 55060,115,0,105,0,
5503111,0,110,0,95, 5507103,0,110,0,109,
55040,50,0,1,319, 55080,101,0,110,0,
55051,3,1,3,1, 5509116,0,95,0,55,
55062,1439,22,1,155, 55100,1,262,1,3,
55071,1550,1440,17,1441, 55111,6,1,5,1438,
550815,1220,1,-1,1, 551222,1,97,1,1096,
55095,1442,20,1443,4, 55131439,17,1440,15,1441,
551038,83,0,105,0, 55144,26,37,0,70,
5511109,0,112,0,108, 55150,117,0,110,0,
55120,101,0,65,0, 551699,0,116,0,105,
5513115,0,115,0,105, 55170,111,0,110,0,
55140,103,0,110,0, 551867,0,97,0,108,
5515109,0,101,0,110, 55190,108,0,1,-1,
55160,116,0,95,0, 55201,5,1442,20,1443,
551749,0,51,0,1, 55214,28,70,0,117,
5518267,1,3,1,4, 55220,110,0,99,0,
55191,3,1444,22,1, 5523116,0,105,0,111,
5520103,1,2040,1445,16, 55240,110,0,67,0,
55210,610,1,2106,1446, 552597,0,108,0,108,
552217,1264,1,0,1268, 55260,95,0,49,0,
55231,1555,1447,16,0, 55271,333,1,3,1,
5524707,1,827,1448,17, 55285,1,4,1444,22,
55251449,15,1243,1,-1, 55291,168,1,93,1445,
55261,5,1450,20,1451, 553017,1446,15,1409,1,
5531-1,1,5,1447,20,
55321448,4,34,85,0,
5533110,0,97,0,114,
55340,121,0,69,0,
5535120,0,112,0,114,
55360,101,0,115,0,
5537115,0,105,0,111,
55380,110,0,95,0,
553950,0,1,320,1,
55403,1,3,1,2,
55411449,22,1,155,1,
55421550,1450,17,1451,15,
55431223,1,-1,1,5,
55441452,20,1453,4,38,
554583,0,105,0,109,
55460,112,0,108,0,
5547101,0,65,0,115,
55480,115,0,105,0,
5549103,0,110,0,109,
55500,101,0,110,0,
5551116,0,95,0,49,
55520,51,0,1,268,
55531,3,1,4,1,
55543,1454,22,1,103,
55551,2039,887,1,2040,
55561455,16,0,618,1,
55572041,893,1,1555,1456,
555816,0,722,1,827,
55591457,17,1458,15,1246,
55601,-1,1,5,1459,
556120,1460,4,38,66,
55620,105,0,110,0,
556397,0,114,0,121,
55640,69,0,120,0,
5565112,0,114,0,101,
55660,115,0,115,0,
5567105,0,111,0,110,
55680,95,0,49,0,
556953,0,1,315,1,
55703,1,4,1,3,
55711461,22,1,150,1,
55721859,1462,16,0,344,
55731,1860,946,1,1804,
55741463,17,1267,1,0,
55751271,1,107,1464,17,
55761465,15,1409,1,-1,
55771,5,1466,20,1467,
55784,34,85,0,110,
55790,97,0,114,0,
5580121,0,69,0,120,
55810,112,0,114,0,
5582101,0,115,0,115,
55830,105,0,111,0,
5584110,0,95,0,49,
55850,1,319,1,3,
55861,3,1,2,1468,
558722,1,154,1,1114,
55881469,17,1312,1,3,
55891316,1,1048,1470,17,
55901471,15,1246,1,-1,
55911,5,1472,20,1473,
55274,38,66,0,105, 55924,38,66,0,105,
55280,110,0,97,0, 55930,110,0,97,0,
5529114,0,121,0,69, 5594114,0,121,0,69,
@@ -5531,31 +5596,27 @@ public yyLSLSyntax
5531114,0,101,0,115, 5596114,0,101,0,115,
55320,115,0,105,0, 55970,115,0,105,0,
5533111,0,110,0,95, 5598111,0,110,0,95,
55340,49,0,53,0, 55990,49,0,56,0,
55351,314,1,3,1, 56001,318,1,3,1,
55364,1,3,1452,22, 56014,1,3,1474,22,
55371,150,1,1859,1453, 56021,153,1,352,1475,
553816,0,339,1,1860, 560317,1476,15,1246,1,
5539943,1,1804,1454,17, 5604-1,1,5,1477,20,
55401264,1,0,1268,1, 56051478,4,36,66,0,
5541107,1455,17,1456,15, 5606105,0,110,0,97,
55421405,1,-1,1,5,
55431457,20,1458,4,34,
554485,0,110,0,97,
55450,114,0,121,0, 56070,114,0,121,0,
554669,0,120,0,112, 560869,0,120,0,112,
55470,114,0,101,0, 56090,114,0,101,0,
5548115,0,115,0,105, 5610115,0,115,0,105,
55490,111,0,110,0, 56110,111,0,110,0,
555095,0,49,0,1, 561295,0,49,0,1,
5551318,1,3,1,3, 5613301,1,3,1,4,
55521,2,1459,22,1, 56141,3,1479,22,1,
5553154,1,2781,1460,16, 5615136,1,1872,1480,16,
55540,278,1,1114,1461, 56160,354,1,1873,961,
555517,1308,1,3,1312, 56171,118,1481,17,1482,
55561,1048,1462,17,1463, 561815,1246,1,-1,1,
555715,1243,1,-1,1, 56195,1483,20,1484,4,
55585,1464,20,1465,4,
555938,66,0,105,0, 562038,66,0,105,0,
5560110,0,97,0,114, 5621110,0,97,0,114,
55610,121,0,69,0, 56220,121,0,69,0,
@@ -5563,126 +5624,63 @@ public yyLSLSyntax
55630,101,0,115,0, 56240,101,0,115,0,
5564115,0,105,0,111, 5625115,0,105,0,111,
55650,110,0,95,0, 56260,110,0,95,0,
556649,0,56,0,1, 562749,0,52,0,1,
5567317,1,3,1,4, 5628314,1,3,1,4,
55681,3,1466,22,1, 56291,3,1485,22,1,
5569153,1,352,1467,17, 5630149,1,1123,1486,17,
55701468,15,1243,1,-1, 56311487,15,1223,1,-1,
55711,5,1469,20,1470, 56321,5,1488,20,1489,
55724,36,66,0,105, 56334,38,83,0,105,
55730,110,0,97,0, 56340,109,0,112,0,
5574114,0,121,0,69, 5635108,0,101,0,65,
55750,120,0,112,0, 56360,115,0,115,0,
5576114,0,101,0,115, 5637105,0,103,0,110,
55770,115,0,105,0, 56380,109,0,101,0,
5578111,0,110,0,95, 5639110,0,116,0,95,
55790,49,0,1,300, 56400,49,0,50,0,
55801,3,1,4,1, 56411,267,1,3,1,
55813,1471,22,1,136, 56426,1,5,1490,22,
55821,1872,1472,16,0, 56431,102,1,371,1491,
5583349,1,1873,958,1, 564417,1492,15,1493,4,
5584118,1473,17,1474,15, 564546,37,0,70,0,
55851243,1,-1,1,5, 5646117,0,110,0,99,
55861475,20,1476,4,38, 56470,116,0,105,0,
558766,0,105,0,110, 5648111,0,110,0,67,
55880,97,0,114,0, 56490,97,0,108,0,
5589121,0,69,0,120, 5650108,0,69,0,120,
55900,112,0,114,0, 56510,112,0,114,0,
5591101,0,115,0,115, 5652101,0,115,0,115,
55920,105,0,111,0, 56530,105,0,111,0,
5593110,0,95,0,49, 5654110,0,1,-1,1,
55940,52,0,1,313, 56555,1494,20,1495,4,
55951,3,1,4,1, 565648,70,0,117,0,
55963,1477,22,1,149, 5657110,0,99,0,116,
55971,1123,1478,17,1479, 56580,105,0,111,0,
559815,1220,1,-1,1, 5659110,0,67,0,97,
55995,1480,20,1481,4, 56600,108,0,108,0,
560038,83,0,105,0, 566169,0,120,0,112,
5601109,0,112,0,108,
56020,101,0,65,0,
5603115,0,115,0,105,
56040,103,0,110,0,
5605109,0,101,0,110,
56060,116,0,95,0,
560749,0,50,0,1,
5608266,1,3,1,6,
56091,5,1482,22,1,
5610102,1,371,1483,17,
56111484,15,1485,4,46,
561237,0,70,0,117,
56130,110,0,99,0,
5614116,0,105,0,111,
56150,110,0,67,0,
561697,0,108,0,108,
56170,69,0,120,0,
5618112,0,114,0,101,
56190,115,0,115,0,
5620105,0,111,0,110,
56210,1,-1,1,5,
56221486,20,1487,4,48,
562370,0,117,0,110,
56240,99,0,116,0,
5625105,0,111,0,110,
56260,67,0,97,0,
5627108,0,108,0,69,
56280,120,0,112,0,
5629114,0,101,0,115,
56300,115,0,105,0,
5631111,0,110,0,95,
56320,49,0,1,299,
56331,3,1,2,1,
56341,1488,22,1,135,
56351,1377,1489,17,1490,
563615,1220,1,-1,1,
56375,1491,20,1492,4,
563836,83,0,105,0,
5639109,0,112,0,108,
56400,101,0,65,0,
5641115,0,115,0,105,
56420,103,0,110,0,
5643109,0,101,0,110,
56440,116,0,95,0,
564553,0,1,259,1,
56463,1,4,1,3,
56471493,22,1,95,1,
5648375,1494,17,1495,15,
56491315,1,-1,1,5,
56501496,20,1497,4,60,
565173,0,110,0,99,
56520,114,0,101,0, 56620,114,0,101,0,
5653109,0,101,0,110, 5663115,0,115,0,105,
56540,116,0,68,0, 56640,111,0,110,0,
5655101,0,99,0,114, 566595,0,49,0,1,
56560,101,0,109,0, 5666300,1,3,1,2,
5657101,0,110,0,116, 56671,1,1496,22,1,
56580,69,0,120,0, 5668135,1,1377,1497,17,
5659112,0,114,0,101, 56691498,15,1223,1,-1,
56701,5,1499,20,1500,
56714,36,83,0,105,
56720,109,0,112,0,
5673108,0,101,0,65,
56600,115,0,115,0, 56740,115,0,115,0,
5661105,0,111,0,110, 5675105,0,103,0,110,
56620,95,0,56,0,
56631,298,1,3,1,
56645,1,4,1498,22,
56651,134,1,377,1499,
566617,1500,15,1315,1,
5667-1,1,5,1501,20,
56681502,4,60,73,0,
5669110,0,99,0,114,
56700,101,0,109,0,
5671101,0,110,0,116,
56720,68,0,101,0,
567399,0,114,0,101,
56740,109,0,101,0, 56760,109,0,101,0,
5675110,0,116,0,69, 5677110,0,116,0,95,
56760,120,0,112,0, 56780,53,0,1,260,
5677114,0,101,0,115, 56791,3,1,4,1,
56780,115,0,105,0, 56803,1501,22,1,95,
5679111,0,110,0,95, 56811,375,1502,17,1503,
56800,53,0,1,295, 568215,1319,1,-1,1,
56811,3,1,3,1, 56835,1504,20,1505,4,
56822,1503,22,1,131,
56831,379,1504,17,1505,
568415,1315,1,-1,1,
56855,1506,20,1507,4,
568660,73,0,110,0, 568460,73,0,110,0,
568799,0,114,0,101, 568599,0,114,0,101,
56880,109,0,101,0, 56860,109,0,101,0,
@@ -5694,64 +5692,30 @@ public yyLSLSyntax
56940,112,0,114,0, 56920,112,0,114,0,
5695101,0,115,0,115, 5693101,0,115,0,115,
56960,105,0,111,0, 56940,105,0,111,0,
5697110,0,95,0,55, 5695110,0,95,0,56,
56980,1,297,1,3, 56960,1,299,1,3,
56991,5,1,4,1508, 56971,5,1,4,1506,
570022,1,133,1,380, 569822,1,134,1,377,
57011509,17,1510,15,1511, 56991507,17,1508,15,1319,
57024,38,37,0,67, 57001,-1,1,5,1509,
57030,111,0,110,0, 570120,1510,4,60,73,
5704115,0,116,0,97, 57020,110,0,99,0,
57050,110,0,116,0, 5703114,0,101,0,109,
570669,0,120,0,112, 57040,101,0,110,0,
57070,114,0,101,0, 5705116,0,68,0,101,
5708115,0,115,0,105, 57060,99,0,114,0,
57090,111,0,110,0, 5707101,0,109,0,101,
57101,-1,1,5,1512,
571120,1513,4,40,67,
57120,111,0,110,0,
5713115,0,116,0,97,
57140,110,0,116,0, 57080,110,0,116,0,
571569,0,120,0,112, 570969,0,120,0,112,
57160,114,0,101,0, 57100,114,0,101,0,
5717115,0,115,0,105, 5711115,0,115,0,105,
57180,111,0,110,0, 57120,111,0,110,0,
571995,0,49,0,1, 571395,0,53,0,1,
5720288,1,3,1,2, 5714296,1,3,1,3,
57211,1,1514,22,1, 57151,2,1511,22,1,
5722124,1,883,1515,17, 5716131,1,379,1512,17,
57231516,15,1243,1,-1, 57171513,15,1319,1,-1,
57241,5,1517,20,1518, 57181,5,1514,20,1515,
57254,38,66,0,105,
57260,110,0,97,0,
5727114,0,121,0,69,
57280,120,0,112,0,
5729114,0,101,0,115,
57300,115,0,105,0,
5731111,0,110,0,95,
57320,49,0,54,0,
57331,315,1,3,1,
57344,1,3,1519,22,
57351,151,1,1628,1520,
573617,1521,15,1522,4,
573722,37,0,65,0,
5738115,0,115,0,105,
57390,103,0,110,0,
5740109,0,101,0,110,
57410,116,0,1,-1,
57421,5,1523,20,1524,
57434,24,65,0,115,
57440,115,0,105,0,
5745103,0,110,0,109,
57460,101,0,110,0,
5747116,0,95,0,49,
57480,1,253,1,3,
57491,4,1,3,1525,
575022,1,89,1,2075,
57511526,17,1264,1,0,
57521268,1,373,1527,17,
57531528,15,1315,1,-1,
57541,5,1529,20,1530,
57554,60,73,0,110, 57194,60,73,0,110,
57560,99,0,114,0, 57200,99,0,114,0,
5757101,0,109,0,101, 5721101,0,109,0,101,
@@ -5764,25 +5728,81 @@ public yyLSLSyntax
57640,101,0,115,0, 57280,101,0,115,0,
5765115,0,105,0,111, 5729115,0,105,0,111,
57660,110,0,95,0, 57300,110,0,95,0,
576754,0,1,296,1, 573155,0,1,298,1,
57683,1,3,1,2, 57323,1,5,1,4,
57691531,22,1,132,1, 57331516,22,1,133,1,
5770130,1532,17,1533,15, 5734380,1517,17,1518,15,
57711243,1,-1,1,5, 57351519,4,38,37,0,
57721534,20,1535,4,38, 573667,0,111,0,110,
577366,0,105,0,110, 57370,115,0,116,0,
57740,97,0,114,0, 573897,0,110,0,116,
5775121,0,69,0,120, 57390,69,0,120,0,
57760,112,0,114,0, 5740112,0,114,0,101,
5777101,0,115,0,115, 57410,115,0,115,0,
57780,105,0,111,0, 5742105,0,111,0,110,
5779110,0,95,0,49, 57430,1,-1,1,5,
57800,51,0,1,312, 57441520,20,1521,4,40,
57811,3,1,4,1, 574567,0,111,0,110,
57823,1536,22,1,148, 57460,115,0,116,0,
57831,143,1537,17,1538, 574797,0,110,0,116,
578415,1243,1,-1,1, 57480,69,0,120,0,
57855,1539,20,1540,4, 5749112,0,114,0,101,
57500,115,0,115,0,
5751105,0,111,0,110,
57520,95,0,49,0,
57531,289,1,3,1,
57542,1,1,1522,22,
57551,124,1,883,1523,
575617,1524,15,1246,1,
5757-1,1,5,1525,20,
57581526,4,38,66,0,
5759105,0,110,0,97,
57600,114,0,121,0,
576169,0,120,0,112,
57620,114,0,101,0,
5763115,0,115,0,105,
57640,111,0,110,0,
576595,0,49,0,54,
57660,1,316,1,3,
57671,4,1,3,1527,
576822,1,151,1,1628,
57691528,17,1529,15,1530,
57704,22,37,0,65,
57710,115,0,115,0,
5772105,0,103,0,110,
57730,109,0,101,0,
5774110,0,116,0,1,
5775-1,1,5,1531,20,
57761532,4,24,65,0,
5777115,0,115,0,105,
57780,103,0,110,0,
5779109,0,101,0,110,
57800,116,0,95,0,
578149,0,1,254,1,
57823,1,4,1,3,
57831533,22,1,89,1,
57842075,1534,17,1267,1,
57850,1271,1,373,1535,
578617,1536,15,1319,1,
5787-1,1,5,1537,20,
57881538,4,60,73,0,
5789110,0,99,0,114,
57900,101,0,109,0,
5791101,0,110,0,116,
57920,68,0,101,0,
579399,0,114,0,101,
57940,109,0,101,0,
5795110,0,116,0,69,
57960,120,0,112,0,
5797114,0,101,0,115,
57980,115,0,105,0,
5799111,0,110,0,95,
58000,54,0,1,297,
58011,3,1,3,1,
58022,1539,22,1,132,
58031,130,1540,17,1541,
580415,1246,1,-1,1,
58055,1542,20,1543,4,
578638,66,0,105,0, 580638,66,0,105,0,
5787110,0,97,0,114, 5807110,0,97,0,114,
57880,121,0,69,0, 58080,121,0,69,0,
@@ -5790,43 +5810,27 @@ public yyLSLSyntax
57900,101,0,115,0, 58100,101,0,115,0,
5791115,0,105,0,111, 5811115,0,105,0,111,
57920,110,0,95,0, 58120,110,0,95,0,
579349,0,50,0,1, 581349,0,51,0,1,
5794311,1,3,1,4, 5814313,1,3,1,4,
57951,3,1541,22,1, 58151,3,1544,22,1,
5796147,1,1901,1542,17, 5816148,1,143,1545,17,
57971264,1,0,1268,1, 58171546,15,1246,1,-1,
57981152,1543,17,1544,15, 58181,5,1547,20,1548,
57991220,1,-1,1,5, 58194,38,66,0,105,
58001545,20,1546,4,38, 58200,110,0,97,0,
580183,0,105,0,109, 5821114,0,121,0,69,
58020,112,0,108,0, 58220,120,0,112,0,
5803101,0,65,0,115, 5823114,0,101,0,115,
58040,115,0,105,0, 58240,115,0,105,0,
5805103,0,110,0,109, 5825111,0,110,0,95,
58060,101,0,110,0, 58260,49,0,50,0,
5807116,0,95,0,50, 58271,312,1,3,1,
58080,52,0,1,278, 58284,1,3,1549,22,
58091,3,1,6,1, 58291,147,1,1901,1550,
58105,1547,22,1,114, 583017,1267,1,0,1271,
58111,1406,1548,17,1549, 58311,1152,1551,17,1552,
581215,1220,1,-1,1, 583215,1223,1,-1,1,
58135,1550,20,1551,4, 58335,1553,20,1554,4,
581438,83,0,105,0,
5815109,0,112,0,108,
58160,101,0,65,0,
5817115,0,115,0,105,
58180,103,0,110,0,
5819109,0,101,0,110,
58200,116,0,95,0,
582149,0,55,0,1,
5822271,1,3,1,4,
58231,3,1552,22,1,
5824107,1,1659,1553,16,
58250,297,1,2413,1554,
582617,1264,1,0,1268,
58271,1159,1555,17,1556,
582815,1220,1,-1,1,
58295,1557,20,1558,4,
583038,83,0,105,0, 583438,83,0,105,0,
5831109,0,112,0,108, 5835109,0,112,0,108,
58320,101,0,65,0, 58360,101,0,65,0,
@@ -5834,38 +5838,12 @@ public yyLSLSyntax
58340,103,0,110,0, 58380,103,0,110,0,
5835109,0,101,0,110, 5839109,0,101,0,110,
58360,116,0,95,0, 58400,116,0,95,0,
583749,0,49,0,1, 584150,0,52,0,1,
5838265,1,3,1,6, 5842279,1,3,1,6,
58391,5,1559,22,1, 58431,5,1555,22,1,
5840101,1,157,1560,17, 5844114,1,1406,1556,17,
58411561,15,1243,1,-1, 58451557,15,1223,1,-1,
58421,5,1562,20,1563, 58461,5,1558,20,1559,
58434,38,66,0,105,
58440,110,0,97,0,
5845114,0,121,0,69,
58460,120,0,112,0,
5847114,0,101,0,115,
58480,115,0,105,0,
5849111,0,110,0,95,
58500,49,0,49,0,
58511,310,1,3,1,
58524,1,3,1564,22,
58531,146,1,1413,1565,
585417,1566,15,1220,1,
5855-1,1,5,1567,20,
58561568,4,36,83,0,
5857105,0,109,0,112,
58580,108,0,101,0,
585965,0,115,0,115,
58600,105,0,103,0,
5861110,0,109,0,101,
58620,110,0,116,0,
586395,0,52,0,1,
5864258,1,3,1,4,
58651,3,1569,22,1,
586694,1,1370,1570,17,
58671571,15,1220,1,-1,
58681,5,1572,20,1573,
58694,38,83,0,105, 58474,38,83,0,105,
58700,109,0,112,0, 58480,109,0,112,0,
5871108,0,101,0,65, 5849108,0,101,0,65,
@@ -5873,79 +5851,165 @@ public yyLSLSyntax
5873105,0,103,0,110, 5851105,0,103,0,110,
58740,109,0,101,0, 58520,109,0,101,0,
5875110,0,116,0,95, 5853110,0,116,0,95,
58760,49,0,56,0, 58540,49,0,55,0,
58771,272,1,3,1, 58551,272,1,3,1,
58784,1,3,1574,22, 58564,1,3,1560,22,
58791,108,1,1478,1575, 58571,107,1,1659,1561,
588017,1576,15,1220,1, 585816,0,298,1,2413,
5881-1,1,5,1577,20, 58591562,17,1267,1,0,
58821578,4,38,83,0, 58601271,1,1159,1563,17,
58611564,15,1223,1,-1,
58621,5,1565,20,1566,
58634,38,83,0,105,
58640,109,0,112,0,
5865108,0,101,0,65,
58660,115,0,115,0,
5867105,0,103,0,110,
58680,109,0,101,0,
5869110,0,116,0,95,
58700,49,0,49,0,
58711,266,1,3,1,
58726,1,5,1567,22,
58731,101,1,157,1568,
587417,1569,15,1246,1,
5875-1,1,5,1570,20,
58761571,4,38,66,0,
5877105,0,110,0,97,
58780,114,0,121,0,
587969,0,120,0,112,
58800,114,0,101,0,
5881115,0,115,0,105,
58820,111,0,110,0,
588395,0,49,0,49,
58840,1,311,1,3,
58851,4,1,3,1572,
588622,1,146,1,1413,
58871573,17,1574,15,1223,
58881,-1,1,5,1575,
588920,1576,4,36,83,
58900,105,0,109,0,
5891112,0,108,0,101,
58920,65,0,115,0,
5893115,0,105,0,103,
58940,110,0,109,0,
5895101,0,110,0,116,
58960,95,0,52,0,
58971,259,1,3,1,
58984,1,3,1577,22,
58991,94,1,1370,1578,
590017,1579,15,1223,1,
5901-1,1,5,1580,20,
59021581,4,38,83,0,
5883105,0,109,0,112, 5903105,0,109,0,112,
58840,108,0,101,0, 59040,108,0,101,0,
588565,0,115,0,115, 590565,0,115,0,115,
58860,105,0,103,0, 59060,105,0,103,0,
5887110,0,109,0,101, 5907110,0,109,0,101,
58880,110,0,116,0, 59080,110,0,116,0,
588995,0,49,0,53, 590995,0,49,0,56,
58900,1,269,1,3, 59100,1,273,1,3,
58911,4,1,3,1579, 59111,4,1,3,1582,
589222,1,105,1,1620, 591222,1,108,1,1478,
58931580,17,1581,15,1522, 59131583,17,1584,15,1223,
58941,-1,1,5,1582, 59141,-1,1,5,1585,
589520,1583,4,24,65, 591520,1586,4,38,83,
58960,115,0,115,0, 59160,105,0,109,0,
5897105,0,103,0,110, 5917112,0,108,0,101,
58980,109,0,101,0, 59180,65,0,115,0,
5899110,0,116,0,95, 5919115,0,105,0,103,
59000,50,0,1,254, 59200,110,0,109,0,
59011,3,1,2,1,
59021,1584,22,1,90,
59031,1621,1585,16,0,
5904786,1,1574,921,1,
5905172,1586,17,1587,15,
59061243,1,-1,1,5,
59071588,20,1589,4,38,
590866,0,105,0,110,
59090,97,0,114,0,
5910121,0,69,0,120,
59110,112,0,114,0,
5912101,0,115,0,115,
59130,105,0,111,0,
5914110,0,95,0,49,
59150,48,0,1,309,
59161,3,1,4,1,
59173,1590,22,1,145,
59181,1931,983,1,1665,
59191591,17,1592,15,1278,
59201,-1,1,5,1593,
592120,1594,4,36,70,
59220,111,0,114,0,
592376,0,111,0,111,
59240,112,0,83,0,
5925116,0,97,0,116,
59260,101,0,109,0,
5927101,0,110,0,116, 5921101,0,110,0,116,
59280,95,0,49,0, 59220,95,0,49,0,
59291,249,1,3,1, 592353,0,1,270,1,
59302,1,1,1595,22, 59243,1,4,1,3,
59311,85,1,2364,949, 59251587,22,1,105,1,
59321,2105,936,1,1188, 59262106,1588,17,1267,1,
59331596,17,1597,15,1220, 59270,1271,1,1620,1589,
59341,-1,1,5,1598, 592817,1590,15,1530,1,
593520,1599,4,38,83, 5929-1,1,5,1591,20,
59301592,4,24,65,0,
5931115,0,115,0,105,
59320,103,0,110,0,
5933109,0,101,0,110,
59340,116,0,95,0,
593550,0,1,255,1,
59363,1,2,1,1,
59371593,22,1,90,1,
59381621,1594,16,0,791,
59391,1574,924,1,172,
59401595,17,1596,15,1246,
59411,-1,1,5,1597,
594220,1598,4,38,66,
59430,105,0,110,0,
594497,0,114,0,121,
59450,69,0,120,0,
5946112,0,114,0,101,
59470,115,0,115,0,
5948105,0,111,0,110,
59490,95,0,49,0,
595048,0,1,310,1,
59513,1,4,1,3,
59521599,22,1,145,1,
59531931,986,1,1665,1600,
595417,1601,15,1281,1,
5955-1,1,5,1602,20,
59561603,4,36,70,0,
5957111,0,114,0,76,
59580,111,0,111,0,
5959112,0,83,0,116,
59600,97,0,116,0,
5961101,0,109,0,101,
59620,110,0,116,0,
596395,0,49,0,1,
5964250,1,3,1,2,
59651,1,1604,22,1,
596685,1,2364,952,1,
59672105,939,1,1188,1605,
596817,1606,15,1223,1,
5969-1,1,5,1607,20,
59701608,4,38,83,0,
5971105,0,109,0,112,
59720,108,0,101,0,
597365,0,115,0,115,
59740,105,0,103,0,
5975110,0,109,0,101,
59760,110,0,116,0,
597795,0,50,0,51,
59780,1,278,1,3,
59791,6,1,5,1609,
598022,1,113,1,1442,
59811610,17,1611,15,1223,
59821,-1,1,5,1612,
598320,1613,4,38,83,
59360,105,0,109,0, 59840,105,0,109,0,
5937112,0,108,0,101, 5985112,0,108,0,101,
59380,65,0,115,0, 59860,65,0,115,0,
5939115,0,105,0,103, 5987115,0,105,0,103,
59400,110,0,109,0, 59880,110,0,109,0,
5941101,0,110,0,116, 5989101,0,110,0,116,
59420,95,0,50,0, 59900,95,0,49,0,
594351,0,1,277,1, 599154,0,1,271,1,
59443,1,6,1,5, 59923,1,4,1,3,
59451600,22,1,113,1, 59931614,22,1,106,1,
59461442,1601,17,1602,15, 59941694,1615,16,0,215,
59471220,1,-1,1,5, 59951,942,1616,17,1617,
59481603,20,1604,4,38, 599615,1246,1,-1,1,
59975,1618,20,1619,4,
599838,66,0,105,0,
5999110,0,97,0,114,
60000,121,0,69,0,
6001120,0,112,0,114,
60020,101,0,115,0,
6003115,0,105,0,111,
60040,110,0,95,0,
600549,0,55,0,1,
6006317,1,3,1,4,
60071,3,1620,22,1,
6008152,1,2198,1621,17,
60091267,1,0,1271,1,
60101195,1622,17,1623,15,
60111223,1,-1,1,5,
60121624,20,1625,4,38,
594983,0,105,0,109, 601383,0,105,0,109,
59500,112,0,108,0, 60140,112,0,108,0,
5951101,0,65,0,115, 6015101,0,65,0,115,
@@ -5953,88 +6017,100 @@ public yyLSLSyntax
5953103,0,110,0,109, 6017103,0,110,0,109,
59540,101,0,110,0, 60180,101,0,110,0,
5955116,0,95,0,49, 6019116,0,95,0,49,
59560,54,0,1,270, 60200,48,0,1,265,
59571,3,1,4,1, 60211,3,1,6,1,
59583,1605,22,1,106, 60225,1626,22,1,100,
59591,1694,1606,16,0, 60231,1449,1627,17,1628,
5960218,1,942,1607,17, 602415,1223,1,-1,1,
59611608,15,1243,1,-1, 60255,1629,20,1630,4,
59621,5,1609,20,1610, 602636,83,0,105,0,
59634,38,66,0,105,
59640,110,0,97,0,
5965114,0,121,0,69,
59660,120,0,112,0,
5967114,0,101,0,115,
59680,115,0,105,0,
5969111,0,110,0,95,
59700,49,0,55,0,
59711,316,1,3,1,
59724,1,3,1611,22,
59731,152,1,2198,1612,
597417,1264,1,0,1268,
59751,1195,1613,17,1614,
597615,1220,1,-1,1,
59775,1615,20,1616,4,
597838,83,0,105,0,
5979109,0,112,0,108, 6027109,0,112,0,108,
59800,101,0,65,0, 60280,101,0,65,0,
5981115,0,115,0,105, 6029115,0,115,0,105,
59820,103,0,110,0, 60300,103,0,110,0,
5983109,0,101,0,110, 6031109,0,101,0,110,
59840,116,0,95,0, 60320,116,0,95,0,
598549,0,48,0,1, 603351,0,1,258,1,
5986264,1,3,1,6,
59871,5,1617,22,1,
5988100,1,1449,1618,17,
59891619,15,1220,1,-1,
59901,5,1620,20,1621,
59914,36,83,0,105,
59920,109,0,112,0,
5993108,0,101,0,65,
59940,115,0,115,0,
5995105,0,103,0,110,
59960,109,0,101,0,
5997110,0,116,0,95,
59980,51,0,1,257,
59991,3,1,4,1,
60003,1622,22,1,93,
60011,1701,1623,17,1624,
600215,1278,1,-1,1,
60035,1625,20,1626,4,
600436,70,0,111,0,
6005114,0,76,0,111,
60060,111,0,112,0,
600783,0,116,0,97,
60080,116,0,101,0,
6009109,0,101,0,110,
60100,116,0,95,0,
601151,0,1,251,1,
60123,1,4,1,3, 60343,1,4,1,3,
60131627,22,1,87,1, 60351631,22,1,93,1,
6014447,1628,17,1629,15, 60361701,1632,17,1633,15,
60151630,4,30,37,0, 60371281,1,-1,1,5,
601686,0,101,0,99, 60381634,20,1635,4,36,
60170,116,0,111,0, 603970,0,111,0,114,
6018114,0,67,0,111, 60400,76,0,111,0,
60190,110,0,115,0, 6041111,0,112,0,83,
6020116,0,97,0,110, 60420,116,0,97,0,
60210,116,0,1,-1, 6043116,0,101,0,109,
60221,5,1631,20,1632, 60440,101,0,110,0,
60234,32,86,0,101, 6045116,0,95,0,51,
60240,99,0,116,0, 60460,1,252,1,3,
6025111,0,114,0,67, 60471,4,1,3,1636,
604822,1,87,1,447,
60491637,17,1638,15,1639,
60504,30,37,0,86,
60510,101,0,99,0,
6052116,0,111,0,114,
60530,67,0,111,0,
6054110,0,115,0,116,
60550,97,0,110,0,
6056116,0,1,-1,1,
60575,1640,20,1641,4,
605832,86,0,101,0,
605999,0,116,0,111,
60600,114,0,67,0,
6061111,0,110,0,115,
60620,116,0,97,0,
6063110,0,116,0,95,
60640,49,0,1,287,
60651,3,1,8,1,
60667,1642,22,1,122,
60671,2458,1001,1,2459,
60681007,1,1958,1643,17,
60691267,1,0,1271,1,
6070188,1644,17,1645,15,
60711246,1,-1,1,5,
60721646,20,1647,4,36,
607366,0,105,0,110,
60740,97,0,114,0,
6075121,0,69,0,120,
60760,112,0,114,0,
6077101,0,115,0,115,
60780,105,0,111,0,
6079110,0,95,0,57,
60800,1,309,1,3,
60811,4,1,3,1648,
608222,1,144,1,2462,
60831014,1,1657,1019,1,
60842464,1024,1,205,1649,
608517,1650,15,1246,1,
6086-1,1,5,1651,20,
60871652,4,36,66,0,
6088105,0,110,0,97,
60890,114,0,121,0,
609069,0,120,0,112,
60910,114,0,101,0,
6092115,0,115,0,105,
60260,111,0,110,0, 60930,111,0,110,0,
6027115,0,116,0,97, 609495,0,56,0,1,
60280,110,0,116,0, 6095308,1,3,1,4,
602995,0,49,0,1, 60961,3,1653,22,1,
6030286,1,3,1,8, 6097143,1,2227,1033,1,
60311,7,1633,22,1, 60981224,1654,17,1655,15,
6032122,1,2458,998,1, 60991223,1,-1,1,5,
60332459,1004,1,1958,1634, 61001656,20,1657,4,38,
603417,1264,1,0,1268, 610183,0,105,0,109,
60351,188,1635,17,1636, 61020,112,0,108,0,
603615,1243,1,-1,1, 6103101,0,65,0,115,
60375,1637,20,1638,4, 61040,115,0,105,0,
6105103,0,110,0,109,
61060,101,0,110,0,
6107116,0,95,0,50,
61080,50,0,1,277,
61091,3,1,6,1,
61105,1658,22,1,112,
61111,223,1659,17,1660,
611215,1246,1,-1,1,
61135,1661,20,1662,4,
603836,66,0,105,0, 611436,66,0,105,0,
6039110,0,97,0,114, 6115110,0,97,0,114,
60400,121,0,69,0, 61160,121,0,69,0,
@@ -6042,89 +6118,87 @@ public yyLSLSyntax
60420,101,0,115,0, 61180,101,0,115,0,
6043115,0,105,0,111, 6119115,0,105,0,111,
60440,110,0,95,0, 61200,110,0,95,0,
604557,0,1,308,1, 612155,0,1,307,1,
60463,1,4,1,3, 61223,1,4,1,3,
60471639,22,1,144,1, 61231663,22,1,142,1,
60482462,1011,1,1657,1016, 61241730,1664,17,1665,15,
60491,2464,1021,1,205, 61251281,1,-1,1,5,
60501640,17,1641,15,1243, 61261666,20,1667,4,36,
60511,-1,1,5,1642, 612770,0,111,0,114,
605220,1643,4,36,66, 61280,76,0,111,0,
60530,105,0,110,0, 6129111,0,112,0,83,
605497,0,114,0,121, 61300,116,0,97,0,
60550,69,0,120,0, 6131116,0,101,0,109,
6056112,0,114,0,101, 61320,101,0,110,0,
60570,115,0,115,0, 6133116,0,95,0,52,
6058105,0,111,0,110, 61340,1,253,1,3,
60590,95,0,56,0, 61351,4,1,3,1668,
60601,307,1,3,1, 613622,1,88,1,476,
60614,1,3,1644,22, 61371669,17,1670,15,1671,
60621,143,1,2227,1030, 61384,18,37,0,67,
60631,1224,1645,17,1646, 61390,111,0,110,0,
606415,1220,1,-1,1, 6140115,0,116,0,97,
60655,1647,20,1648,4, 61410,110,0,116,0,
606638,83,0,105,0, 61421,-1,1,5,1672,
6067109,0,112,0,108, 614320,1673,4,20,67,
60680,101,0,65,0, 61440,111,0,110,0,
6069115,0,115,0,105, 6145115,0,116,0,97,
60700,103,0,110,0, 61460,110,0,116,0,
6071109,0,101,0,110, 614795,0,52,0,1,
6148285,1,3,1,2,
61491,1,1674,22,1,
6150120,1,477,1675,17,
61511676,15,1671,1,-1,
61521,5,1677,20,1678,
61534,20,67,0,111,
61540,110,0,115,0,
6155116,0,97,0,110,
60720,116,0,95,0, 61560,116,0,95,0,
607350,0,50,0,1, 615751,0,1,284,1,
6074276,1,3,1,6, 61583,1,2,1,1,
60751,5,1649,22,1, 61591679,22,1,119,1,
6076112,1,223,1650,17, 61601231,1680,17,1681,15,
60771651,15,1243,1,-1, 61611223,1,-1,1,5,
60781,5,1652,20,1653, 61621682,20,1683,4,36,
60794,36,66,0,105, 616383,0,105,0,109,
60800,110,0,97,0, 61640,112,0,108,0,
6081114,0,121,0,69, 6165101,0,65,0,115,
60820,120,0,112,0,
6083114,0,101,0,115,
60840,115,0,105,0, 61660,115,0,105,0,
6085111,0,110,0,95, 6167103,0,110,0,109,
60860,55,0,1,306, 61680,101,0,110,0,
60871,3,1,4,1, 6169116,0,95,0,57,
60883,1654,22,1,142, 61700,1,264,1,3,
60891,1730,1655,17,1656, 61711,6,1,5,1684,
609015,1278,1,-1,1, 617222,1,99,1,479,
60915,1657,20,1658,4, 61731685,17,1686,15,1671,
609236,70,0,111,0, 61741,-1,1,5,1687,
6093114,0,76,0,111, 617520,1688,4,20,67,
60940,111,0,112,0, 61760,111,0,110,0,
609583,0,116,0,97, 6177115,0,116,0,97,
60960,116,0,101,0, 61780,110,0,116,0,
6097109,0,101,0,110, 617995,0,49,0,1,
60980,116,0,95,0, 6180282,1,3,1,2,
609952,0,1,252,1, 61811,1,1689,22,1,
61003,1,4,1,3, 6182117,1,480,1690,17,
61011659,22,1,88,1, 61831691,15,1692,4,26,
6102476,1660,17,1661,15, 618437,0,76,0,105,
61031662,4,18,37,0,
610467,0,111,0,110,
61050,115,0,116,0, 61850,115,0,116,0,
610697,0,110,0,116,
61070,1,-1,1,5,
61081663,20,1664,4,20,
610967,0,111,0,110, 618667,0,111,0,110,
61100,115,0,116,0, 61870,115,0,116,0,
611197,0,110,0,116, 618897,0,110,0,116,
61120,95,0,52,0, 61890,1,-1,1,5,
61131,284,1,3,1, 61901693,20,1694,4,28,
61142,1,1,1665,22, 619176,0,105,0,115,
61151,120,1,477,1666, 61920,116,0,67,0,
611617,1667,15,1662,1,
6117-1,1,5,1668,20,
61181669,4,20,67,0,
6119111,0,110,0,115, 6193111,0,110,0,115,
61200,116,0,97,0, 61940,116,0,97,0,
6121110,0,116,0,95, 6195110,0,116,0,95,
61220,51,0,1,283, 61960,49,0,1,286,
61231,3,1,2,1, 61971,3,1,4,1,
61241,1670,22,1,119, 61983,1695,22,1,121,
61251,1231,1671,17,1672, 61991,1485,1696,17,1697,
612615,1220,1,-1,1, 620015,1223,1,-1,1,
61275,1673,20,1674,4, 62015,1698,20,1699,4,
612836,83,0,105,0, 620236,83,0,105,0,
6129109,0,112,0,108, 6203109,0,112,0,108,
61300,101,0,65,0, 62040,101,0,65,0,
@@ -6132,71 +6206,15 @@ public yyLSLSyntax
61320,103,0,110,0, 62060,103,0,110,0,
6133109,0,101,0,110, 6207109,0,101,0,110,
61340,116,0,95,0, 62080,116,0,95,0,
613557,0,1,263,1, 620950,0,1,257,1,
61363,1,6,1,5, 62103,1,4,1,3,
61371675,22,1,99,1, 62111700,22,1,92,1,
6138479,1676,17,1677,15, 62121737,1701,16,0,303,
61391662,1,-1,1,5, 62131,1989,1041,1,1990,
61401678,20,1679,4,20, 62141702,17,1267,1,0,
614167,0,111,0,110, 62151271,1,242,1703,17,
61420,115,0,116,0, 62161704,15,1246,1,-1,
614397,0,110,0,116, 62171,5,1705,20,1706,
61440,95,0,49,0,
61451,281,1,3,1,
61462,1,1,1680,22,
61471,117,1,480,1681,
614817,1682,15,1683,4,
614926,37,0,76,0,
6150105,0,115,0,116,
61510,67,0,111,0,
6152110,0,115,0,116,
61530,97,0,110,0,
6154116,0,1,-1,1,
61555,1684,20,1685,4,
615628,76,0,105,0,
6157115,0,116,0,67,
61580,111,0,110,0,
6159115,0,116,0,97,
61600,110,0,116,0,
616195,0,49,0,1,
6162285,1,3,1,4,
61631,3,1686,22,1,
6164121,1,1485,1687,17,
61651688,15,1220,1,-1,
61661,5,1689,20,1690,
61674,36,83,0,105,
61680,109,0,112,0,
6169108,0,101,0,65,
61700,115,0,115,0,
6171105,0,103,0,110,
61720,109,0,101,0,
6173110,0,116,0,95,
61740,50,0,1,256,
61751,3,1,4,1,
61763,1691,22,1,92,
61771,1737,1692,16,0,
6178299,1,1989,1038,1,
61791990,1693,17,1264,1,
61800,1268,1,1096,1694,
618117,1695,15,1696,4,
618226,37,0,70,0,
6183117,0,110,0,99,
61840,116,0,105,0,
6185111,0,110,0,67,
61860,97,0,108,0,
6187108,0,1,-1,1,
61885,1697,20,1698,4,
618928,70,0,117,0,
6190110,0,99,0,116,
61910,105,0,111,0,
6192110,0,67,0,97,
61930,108,0,108,0,
619495,0,49,0,1,
6195332,1,3,1,5,
61961,4,1699,22,1,
6197168,1,242,1700,17,
61981701,15,1243,1,-1,
61991,5,1702,20,1703,
62004,36,66,0,105, 62184,36,66,0,105,
62010,110,0,97,0, 62190,110,0,97,0,
6202114,0,121,0,69, 6220114,0,121,0,69,
@@ -6204,22 +6222,22 @@ public yyLSLSyntax
6204114,0,101,0,115, 6222114,0,101,0,115,
62050,115,0,105,0, 62230,115,0,105,0,
6206111,0,110,0,95, 6224111,0,110,0,95,
62070,54,0,1,305, 62250,54,0,1,306,
62081,3,1,4,1, 62261,3,1,4,1,
62093,1704,22,1,141, 62273,1707,22,1,141,
62101,478,1705,17,1706, 62281,478,1708,17,1709,
621115,1662,1,-1,1, 622915,1671,1,-1,1,
62125,1707,20,1708,4, 62305,1710,20,1711,4,
621320,67,0,111,0, 623120,67,0,111,0,
6214110,0,115,0,116, 6232110,0,115,0,116,
62150,97,0,110,0, 62330,97,0,110,0,
6216116,0,95,0,50, 6234116,0,95,0,50,
62170,1,282,1,3, 62350,1,283,1,3,
62181,2,1,1,1709, 62361,2,1,1,1712,
621922,1,118,1,1001, 623722,1,118,1,1001,
62201710,17,1711,15,1347, 62381713,17,1714,15,1351,
62211,-1,1,5,1712, 62391,-1,1,5,1715,
622220,1713,4,40,84, 624020,1716,4,40,84,
62230,121,0,112,0, 62410,121,0,112,0,
6224101,0,99,0,97, 6242101,0,99,0,97,
62250,115,0,116,0, 62430,115,0,116,0,
@@ -6228,11 +6246,11 @@ public yyLSLSyntax
6228115,0,115,0,105, 6246115,0,115,0,105,
62290,111,0,110,0, 62470,111,0,110,0,
623095,0,56,0,1, 624895,0,56,0,1,
6231330,1,3,1,5, 6249331,1,3,1,5,
62321,4,1714,22,1, 62501,4,1717,22,1,
6233166,1,1002,1715,17, 6251166,1,1002,1718,17,
62341716,15,1347,1,-1, 62521719,15,1351,1,-1,
62351,5,1717,20,1718, 62531,5,1720,20,1721,
62364,40,84,0,121, 62544,40,84,0,121,
62370,112,0,101,0, 62550,112,0,101,0,
623899,0,97,0,115, 625699,0,97,0,115,
@@ -6241,153 +6259,58 @@ public yyLSLSyntax
62410,101,0,115,0, 62590,101,0,115,0,
6242115,0,105,0,111, 6260115,0,105,0,111,
62430,110,0,95,0, 62610,110,0,95,0,
624449,0,1,323,1, 626249,0,1,324,1,
62453,1,5,1,4, 62633,1,5,1,4,
62461719,22,1,159,1, 62641722,22,1,159,1,
624712,1720,19,166,1, 626512,1723,19,166,1,
624812,1721,5,50,1, 626612,1724,5,50,1,
62491901,1722,16,0,164, 62671901,1725,16,0,164,
62501,2075,1723,16,0, 62681,2075,1726,16,0,
6251164,1,1860,943,1, 6269164,1,1860,946,1,
62521803,909,1,1804,1724, 62701803,912,1,1804,1727,
625316,0,164,1,2518, 627116,0,164,1,2519,
62541725,16,0,164,1, 62721728,16,0,164,1,
62552413,1726,16,0,164, 62732549,1729,16,0,164,
62561,2198,1727,16,0, 62741,2413,1730,16,0,
6257164,1,1873,958,1, 6275164,1,2198,1731,16,
62581657,1016,1,2136,965, 62760,164,1,1873,961,
62591,2032,863,1,1989, 62771,1657,1019,1,2534,
62601038,1,1990,1728,16, 62781732,16,0,164,1,
62610,164,1,31,1729, 62791990,1733,16,0,164,
626216,0,164,1,32, 62801,31,1734,16,0,
62631730,16,0,164,1, 6281164,1,32,1735,16,
62642105,936,1,2106,1731, 62820,164,1,2105,939,
626516,0,164,1,2656, 62831,2106,1736,16,0,
62661732,16,0,282,1, 6284164,1,2573,1737,16,
62672548,1733,16,0,164, 62850,164,1,2658,1738,
62681,2227,1030,1,2337, 628616,0,284,1,2578,
62691734,16,0,164,1, 62871739,16,0,164,1,
62702556,1735,16,0,164, 62882227,1033,1,2337,1740,
62711,2777,1736,16,0, 628916,0,164,1,2557,
6272164,1,2564,1737,16, 62901741,16,0,164,1,
62730,164,1,2021,840, 62912781,1742,16,0,164,
62741,2458,998,1,2459, 62921,2565,1743,16,0,
62751004,1,2462,1011,1, 6293164,1,2021,843,1,
62762572,1738,16,0,164, 62942458,1001,1,2459,1007,
62771,2464,1021,1,2029, 62951,2462,1014,1,2136,
6278847,1,2030,853,1, 6296968,1,2464,1024,1,
62792031,858,1,2577,1739, 62972029,850,1,2030,856,
628016,0,164,1,2469, 62981,2031,861,1,2032,
62811740,16,0,520,1, 6299866,1,2469,1744,16,
62822035,874,1,2364,949, 63000,536,1,2035,877,
62831,2039,884,1,1931, 63011,2364,952,1,2039,
6284983,1,2041,890,1, 6302887,1,1931,986,1,
62852043,896,1,2045,901, 63032041,893,1,2043,899,
62861,2592,1741,16,0, 63041,2045,904,1,2593,
6287164,1,1775,1742,16, 63051745,16,0,164,1,
62880,164,1,2033,868, 63061775,1746,16,0,164,
62891,2037,879,1,1574, 63071,1989,1041,1,2033,
6290921,1,1958,1743,16, 6308871,1,2037,882,1,
62910,164,1,2533,1744, 63091574,924,1,1958,1747,
629216,0,164,1,13, 631016,0,164,1,13,
62931745,19,508,1,13, 63111748,19,213,1,13,
62941746,5,55,1,2643, 63121749,5,55,1,2536,
62951747,17,1748,15,1749, 63131750,17,1751,15,1752,
62964,20,37,0,83,
62970,116,0,97,0,
6298116,0,101,0,66,
62990,111,0,100,0,
6300121,0,1,-1,1,
63015,1750,20,1751,4,
630222,83,0,116,0,
630397,0,116,0,101,
63040,66,0,111,0,
6305100,0,121,0,95,
63060,56,0,1,187,
63071,3,1,3,1,
63082,1752,22,1,22,
63091,2644,1753,17,1754,
631015,1749,1,-1,1,
63115,1755,20,1756,4,
631222,83,0,116,0,
631397,0,116,0,101,
63140,66,0,111,0,
6315100,0,121,0,95,
63160,54,0,1,185,
63171,3,1,3,1,
63182,1757,22,1,20,
63191,1860,943,1,1803,
6320909,1,2520,1758,17,
63211759,15,1760,4,46,
632237,0,75,0,101,
63230,121,0,73,0,
6324110,0,116,0,73,
63250,110,0,116,0,
632665,0,114,0,103,
63270,83,0,116,0,
632897,0,116,0,101,
63290,69,0,118,0,
6330101,0,110,0,116,
63310,1,-1,1,5,
63321761,20,1762,4,48,
633375,0,101,0,121,
63340,73,0,110,0,
6335116,0,73,0,110,
63360,116,0,65,0,
6337114,0,103,0,83,
63380,116,0,97,0,
6339116,0,101,0,69,
63400,118,0,101,0,
6341110,0,116,0,95,
63420,49,0,1,203,
63431,3,1,6,1,
63445,1763,22,1,38,
63451,2413,1764,16,0,
6346506,1,1873,958,1,
63471657,1016,1,2639,1765,
634817,1766,15,1749,1,
6349-1,1,5,1767,20,
63501768,4,24,83,0,
6351116,0,97,0,116,
63520,101,0,66,0,
6353111,0,100,0,121,
63540,95,0,49,0,
635554,0,1,195,1,
63563,1,3,1,2,
63571769,22,1,30,1,
63582640,1770,17,1771,15,
63591749,1,-1,1,5,
63601772,20,1773,4,24,
636183,0,116,0,97,
63620,116,0,101,0,
636366,0,111,0,100,
63640,121,0,95,0,
636549,0,52,0,1,
6366193,1,3,1,3,
63671,2,1774,22,1,
636828,1,2641,1775,17,
63691776,15,1749,1,-1,
63701,5,1777,20,1778,
63714,24,83,0,116,
63720,97,0,116,0,
6373101,0,66,0,111,
63740,100,0,121,0,
637595,0,49,0,50,
63760,1,191,1,3,
63771,3,1,2,1779,
637822,1,26,1,2642,
63791780,17,1781,15,1749,
63801,-1,1,5,1782,
638120,1783,4,24,83,
63820,116,0,97,0,
6383116,0,101,0,66,
63840,111,0,100,0,
6385121,0,95,0,49,
63860,48,0,1,189,
63871,3,1,3,1,
63882,1784,22,1,24,
63891,1989,1038,1,2535,
63901785,17,1786,15,1787,
63914,46,37,0,73, 63144,46,37,0,73,
63920,110,0,116,0, 63150,110,0,116,0,
639386,0,101,0,99, 631686,0,101,0,99,
@@ -6398,7 +6321,7 @@ public yyLSLSyntax
63980,101,0,69,0, 63210,101,0,69,0,
6399118,0,101,0,110, 6322118,0,101,0,110,
64000,116,0,1,-1, 63230,116,0,1,-1,
64011,5,1788,20,1789, 63241,5,1753,20,1754,
64024,48,73,0,110, 63254,48,73,0,110,
64030,116,0,86,0, 63260,116,0,86,0,
6404101,0,99,0,86, 6327101,0,99,0,86,
@@ -6409,181 +6332,228 @@ public yyLSLSyntax
64090,69,0,118,0, 63320,69,0,118,0,
6410101,0,110,0,116, 6333101,0,110,0,116,
64110,95,0,49,0, 63340,95,0,49,0,
64121,202,1,3,1, 63351,203,1,3,1,
64136,1,5,1790,22, 63366,1,5,1755,22,
64141,37,1,2645,1791, 63371,37,1,2643,1756,
641517,1792,15,1749,1, 633817,1757,15,1758,4,
6416-1,1,5,1793,20, 633920,37,0,83,0,
64171794,4,22,83,0,
6418116,0,97,0,116, 6340116,0,97,0,116,
64190,101,0,66,0, 63410,101,0,66,0,
6420111,0,100,0,121, 6342111,0,100,0,121,
64210,95,0,52,0, 63430,1,-1,1,5,
64221,183,1,3,1, 63441759,20,1760,4,24,
64233,1,2,1795,22, 634583,0,116,0,97,
64241,18,1,2646,1796, 63460,116,0,101,0,
642517,1797,15,1749,1, 634766,0,111,0,100,
6426-1,1,5,1798,20, 63480,121,0,95,0,
64271799,4,22,83,0, 634949,0,50,0,1,
6350192,1,3,1,3,
63511,2,1761,22,1,
635226,1,2647,1762,17,
63531763,15,1758,1,-1,
63541,5,1764,20,1765,
63554,22,83,0,116,
63560,97,0,116,0,
6357101,0,66,0,111,
63580,100,0,121,0,
635995,0,52,0,1,
6360184,1,3,1,3,
63611,2,1766,22,1,
636218,1,1860,946,1,
63631803,912,1,2521,1767,
636417,1768,15,1769,4,
636546,37,0,75,0,
6366101,0,121,0,73,
63670,110,0,116,0,
636873,0,110,0,116,
63690,65,0,114,0,
6370103,0,83,0,116,
63710,97,0,116,0,
6372101,0,69,0,118,
63730,101,0,110,0,
6374116,0,1,-1,1,
63755,1770,20,1771,4,
637648,75,0,101,0,
6377121,0,73,0,110,
63780,116,0,73,0,
6379110,0,116,0,65,
63800,114,0,103,0,
638183,0,116,0,97,
63820,116,0,101,0,
638369,0,118,0,101,
63840,110,0,116,0,
638595,0,49,0,1,
6386204,1,3,1,6,
63871,5,1772,22,1,
638838,1,2413,1773,16,
63890,521,1,2657,1774,
639017,1775,15,1758,1,
6391-1,1,5,1776,20,
63921777,4,22,83,0,
6428116,0,97,0,116, 6393116,0,97,0,116,
64290,101,0,66,0, 63940,101,0,66,0,
6430111,0,100,0,121, 6395111,0,100,0,121,
64310,95,0,50,0, 63960,95,0,49,0,
64321,181,1,3,1, 63971,181,1,3,1,
64333,1,2,1800,22, 63982,1,1,1778,22,
64341,16,1,2037,879, 63991,15,1,1873,961,
64351,32,1801,16,0, 64001,1657,1019,1,2641,
6436513,1,2649,1802,17, 64011779,17,1780,15,1758,
64371803,15,1749,1,-1, 64021,-1,1,5,1781,
64381,5,1804,20,1805, 640320,1782,4,24,83,
64394,24,83,0,116,
64400,97,0,116,0,
6441101,0,66,0,111,
64420,100,0,121,0,
644395,0,49,0,51,
64440,1,192,1,3,
64451,2,1,1,1806,
644622,1,27,1,2650,
64471807,17,1808,15,1749,
64481,-1,1,5,1809,
644920,1810,4,24,83,
64500,116,0,97,0, 64040,116,0,97,0,
6451116,0,101,0,66, 6405116,0,101,0,66,
64520,111,0,100,0, 64060,111,0,100,0,
6453121,0,95,0,49, 6407121,0,95,0,49,
64540,49,0,1,190, 64080,54,0,1,196,
64551,3,1,2,1, 64091,3,1,3,1,
64561,1811,22,1,25, 64102,1783,22,1,30,
64571,2651,1812,17,1813, 64111,2642,1784,17,1785,
645815,1749,1,-1,1, 641215,1758,1,-1,1,
64595,1814,20,1815,4, 64135,1786,20,1787,4,
646022,83,0,116,0, 641424,83,0,116,0,
646197,0,116,0,101,
64620,66,0,111,0,
6463100,0,121,0,95,
64640,57,0,1,188,
64651,3,1,2,1,
64661,1816,22,1,23,
64671,2652,1817,17,1818,
646815,1749,1,-1,1,
64695,1819,20,1820,4,
647022,83,0,116,0,
647197,0,116,0,101,
64720,66,0,111,0,
6473100,0,121,0,95,
64740,55,0,1,186,
64751,3,1,2,1,
64761,1821,22,1,21,
64771,2653,1822,17,1823,
647815,1749,1,-1,1,
64795,1824,20,1825,4,
648022,83,0,116,0,
648197,0,116,0,101,
64820,66,0,111,0,
6483100,0,121,0,95,
64840,53,0,1,184,
64851,3,1,2,1,
64861,1826,22,1,19,
64871,2654,1827,17,1828,
648815,1749,1,-1,1,
64895,1829,20,1830,4,
649022,83,0,116,0,
649197,0,116,0,101, 641597,0,116,0,101,
64920,66,0,111,0, 64160,66,0,111,0,
6493100,0,121,0,95, 6417100,0,121,0,95,
64940,51,0,1,182, 64180,49,0,52,0,
64951,3,1,2,1, 64191,194,1,3,1,
64961,1831,22,1,17, 64203,1,2,1788,22,
64971,2655,1832,17,1833, 64211,28,1,1989,1041,
649815,1749,1,-1,1, 64221,2644,1789,17,1790,
64995,1834,20,1835,4, 642315,1758,1,-1,1,
650022,83,0,116,0, 64245,1791,20,1792,4,
642524,83,0,116,0,
650197,0,116,0,101, 642697,0,116,0,101,
65020,66,0,111,0, 64270,66,0,111,0,
6503100,0,121,0,95, 6428100,0,121,0,95,
65040,49,0,1,180, 64290,49,0,48,0,
65051,3,1,2,1, 64301,190,1,3,1,
65061,1836,22,1,15, 64313,1,2,1793,22,
65071,2574,1837,17,1838, 64321,24,1,2645,1794,
650815,1839,4,34,37, 643317,1795,15,1758,1,
65090,75,0,101,0, 6434-1,1,5,1796,20,
6510121,0,65,0,114, 64351797,4,22,83,0,
65110,103,0,83,0,
6512116,0,97,0,116, 6436116,0,97,0,116,
65130,101,0,69,0, 64370,101,0,66,0,
6514118,0,101,0,110, 6438111,0,100,0,121,
65150,116,0,1,-1, 64390,95,0,56,0,
65161,5,1840,20,1841, 64401,188,1,3,1,
65174,36,75,0,101, 64413,1,2,1798,22,
65180,121,0,65,0, 64421,22,1,2646,1799,
644317,1800,15,1758,1,
6444-1,1,5,1801,20,
64451802,4,22,83,0,
6446116,0,97,0,116,
64470,101,0,66,0,
6448111,0,100,0,121,
64490,95,0,54,0,
64501,186,1,3,1,
64513,1,2,1803,22,
64521,20,1,2037,882,
64531,32,1804,16,0,
6454526,1,2567,1805,17,
64551806,15,1807,4,34,
645637,0,73,0,110,
64570,116,0,65,0,
6519114,0,103,0,83, 6458114,0,103,0,83,
65200,116,0,97,0, 64590,116,0,97,0,
6521116,0,101,0,69, 6460116,0,101,0,69,
65220,118,0,101,0, 64610,118,0,101,0,
6523110,0,116,0,95, 6462110,0,116,0,1,
65240,49,0,1,198, 6463-1,1,5,1808,20,
65251,3,1,6,1, 64641809,4,36,73,0,
65265,1842,22,1,33, 6465110,0,116,0,65,
65271,2550,1843,17,1844,
652815,1845,4,46,37,
65290,73,0,110,0,
6530116,0,82,0,111,
65310,116,0,82,0,
6532111,0,116,0,65,
65330,114,0,103,0, 64660,114,0,103,0,
653483,0,116,0,97, 646783,0,116,0,97,
65350,116,0,101,0, 64680,116,0,101,0,
653669,0,118,0,101, 646969,0,118,0,101,
65370,110,0,116,0, 64700,110,0,116,0,
65381,-1,1,5,1846, 647195,0,49,0,1,
653920,1847,4,48,73, 6472200,1,3,1,6,
65400,110,0,116,0, 64731,5,1810,22,1,
654182,0,111,0,116, 647434,1,2650,1811,17,
65420,82,0,111,0, 64751812,15,1758,1,-1,
6543116,0,65,0,114, 64761,5,1813,20,1814,
65440,103,0,83,0, 64774,24,83,0,116,
6545116,0,97,0,116, 64780,97,0,116,0,
65460,101,0,69,0, 6479101,0,66,0,111,
6547118,0,101,0,110, 64800,100,0,121,0,
65480,116,0,95,0, 648195,0,49,0,53,
654949,0,1,201,1, 64820,1,195,1,3,
65503,1,6,1,5, 64831,2,1,1,1815,
65511848,22,1,36,1, 648422,1,29,1,2651,
65522227,1030,1,1574,921, 64851816,17,1817,15,1758,
65531,2558,1849,17,1850, 64861,-1,1,5,1818,
655415,1851,4,40,37, 648720,1819,4,24,83,
65550,86,0,101,0,
655699,0,116,0,111,
65570,114,0,65,0,
6558114,0,103,0,83,
65590,116,0,97,0, 64880,116,0,97,0,
6560116,0,101,0,69, 6489116,0,101,0,66,
65610,118,0,101,0, 64900,111,0,100,0,
6562110,0,116,0,1, 6491121,0,95,0,49,
6563-1,1,5,1852,20, 64920,51,0,1,193,
65641853,4,42,86,0, 64931,3,1,2,1,
6565101,0,99,0,116, 64941,1820,22,1,27,
65660,111,0,114,0, 64951,2652,1821,17,1822,
656765,0,114,0,103, 649615,1758,1,-1,1,
65680,83,0,116,0, 64975,1823,20,1824,4,
649824,83,0,116,0,
656997,0,116,0,101, 649997,0,116,0,101,
65700,69,0,118,0, 65000,66,0,111,0,
6571101,0,110,0,116, 6501100,0,121,0,95,
65720,95,0,49,0, 65020,49,0,49,0,
65731,200,1,3,1, 65031,191,1,3,1,
65746,1,5,1854,22, 65042,1,1,1825,22,
65751,35,1,2566,1855, 65051,25,1,2653,1826,
657617,1856,15,1857,4, 650617,1827,15,1758,1,
657734,37,0,73,0, 6507-1,1,5,1828,20,
6578110,0,116,0,65, 65081829,4,22,83,0,
6509116,0,97,0,116,
65100,101,0,66,0,
6511111,0,100,0,121,
65120,95,0,57,0,
65131,189,1,3,1,
65142,1,1,1830,22,
65151,23,1,2654,1831,
651617,1832,15,1758,1,
6517-1,1,5,1833,20,
65181834,4,22,83,0,
6519116,0,97,0,116,
65200,101,0,66,0,
6521111,0,100,0,121,
65220,95,0,55,0,
65231,187,1,3,1,
65242,1,1,1835,22,
65251,21,1,2655,1836,
652617,1837,15,1758,1,
6527-1,1,5,1838,20,
65281839,4,22,83,0,
6529116,0,97,0,116,
65300,101,0,66,0,
6531111,0,100,0,121,
65320,95,0,53,0,
65331,185,1,3,1,
65342,1,1,1840,22,
65351,19,1,2656,1841,
653617,1842,15,1758,1,
6537-1,1,5,1843,20,
65381844,4,22,83,0,
6539116,0,97,0,116,
65400,101,0,66,0,
6541111,0,100,0,121,
65420,95,0,51,0,
65431,183,1,3,1,
65442,1,1,1845,22,
65451,17,1,2575,1846,
654617,1847,15,1848,4,
654734,37,0,75,0,
6548101,0,121,0,65,
65790,114,0,103,0, 65490,114,0,103,0,
658083,0,116,0,97, 655083,0,116,0,97,
65810,116,0,101,0, 65510,116,0,101,0,
658269,0,118,0,101, 655269,0,118,0,101,
65830,110,0,116,0, 65530,110,0,116,0,
65841,-1,1,5,1858, 65541,-1,1,5,1849,
658520,1859,4,36,73, 655520,1850,4,36,75,
65860,110,0,116,0, 65560,101,0,121,0,
658765,0,114,0,103, 655765,0,114,0,103,
65880,83,0,116,0, 65580,83,0,116,0,
658997,0,116,0,101, 655997,0,116,0,101,
@@ -6591,137 +6561,166 @@ public yyLSLSyntax
6591101,0,110,0,116, 6561101,0,110,0,116,
65920,95,0,49,0, 65620,95,0,49,0,
65931,199,1,3,1, 65631,199,1,3,1,
65946,1,5,1860,22, 65646,1,5,1851,22,
65951,34,1,2458,998, 65651,33,1,2551,1852,
65961,2459,1004,1,2462, 656617,1853,15,1854,4,
65971011,1,2136,965,1, 656746,37,0,73,0,
65982464,1021,1,2029,847, 6568110,0,116,0,82,
65991,2030,853,1,2031, 65690,111,0,116,0,
6600858,1,2032,863,1, 657082,0,111,0,116,
66012033,868,1,2579,1861,
660217,1862,15,1863,4,
660336,37,0,86,0,
6604111,0,105,0,100,
66050,65,0,114,0, 65710,65,0,114,0,
6606103,0,83,0,116, 6572103,0,83,0,116,
66070,97,0,116,0, 65730,97,0,116,0,
6608101,0,69,0,118, 6574101,0,69,0,118,
66090,101,0,110,0, 65750,101,0,110,0,
6610116,0,1,-1,1, 6576116,0,1,-1,1,
66115,1864,20,1865,4, 65775,1855,20,1856,4,
661238,86,0,111,0, 657848,73,0,110,0,
6613105,0,100,0,65, 6579116,0,82,0,111,
65800,116,0,82,0,
6581111,0,116,0,65,
66140,114,0,103,0, 65820,114,0,103,0,
661583,0,116,0,97, 658383,0,116,0,97,
66160,116,0,101,0, 65840,116,0,101,0,
661769,0,118,0,101, 658569,0,118,0,101,
66180,110,0,116,0, 65860,110,0,116,0,
661995,0,49,0,1, 658795,0,49,0,1,
6620197,1,3,1,5, 6588202,1,3,1,6,
66211,4,1866,22,1, 65891,5,1857,22,1,
662232,1,2035,874,1, 659036,1,2580,1858,17,
66232364,949,1,2039,884, 65911859,15,1860,4,36,
66241,1931,983,1,2041, 659237,0,86,0,111,
6625890,1,2021,840,1, 65930,105,0,100,0,
66262043,896,1,2045,901, 659465,0,114,0,103,
66271,2700,1867,16,0, 65950,83,0,116,0,
6628769,1,2594,1868,17,
66291869,15,1870,4,22,
663037,0,83,0,116,
66310,97,0,116,0,
6632101,0,69,0,118,
66330,101,0,110,0,
6634116,0,1,-1,1,
66355,1871,20,1872,4,
663624,83,0,116,0,
663797,0,116,0,101, 659697,0,116,0,101,
66380,69,0,118,0, 65970,69,0,118,0,
6639101,0,110,0,116, 6598101,0,110,0,116,
66400,95,0,49,0, 65990,1,-1,1,5,
66411,196,1,3,1, 66001861,20,1862,4,38,
66426,1,5,1873,22, 660186,0,111,0,105,
66431,31,1,2596,1874, 66020,100,0,65,0,
664416,0,662,1,2648, 6603114,0,103,0,83,
66451875,17,1876,15,1749,
66461,-1,1,5,1877,
664720,1878,4,24,83,
66480,116,0,97,0, 66040,116,0,97,0,
6649116,0,101,0,66, 6605116,0,101,0,69,
66500,111,0,100,0, 66060,118,0,101,0,
6651121,0,95,0,49, 6607110,0,116,0,95,
66520,53,0,1,194, 66080,49,0,1,198,
66531,3,1,2,1, 66091,3,1,5,1,
66541,1879,22,1,29, 66104,1863,22,1,32,
66551,2105,936,1,14, 66111,2227,1033,1,1574,
66561880,19,144,1,14, 6612924,1,2559,1864,17,
66571881,5,115,1,2512, 66131865,15,1866,4,40,
66581882,17,1883,15,1884, 661437,0,86,0,101,
66594,30,37,0,73, 66150,99,0,116,0,
66600,110,0,116,0, 6616111,0,114,0,65,
666168,0,101,0,99,
66620,108,0,97,0,
6663114,0,97,0,116,
66640,105,0,111,0,
6665110,0,1,-1,1,
66665,1885,20,1886,4,
666732,73,0,110,0,
6668116,0,68,0,101,
66690,99,0,108,0,
667097,0,114,0,97,
66710,116,0,105,0,
6672111,0,110,0,95,
66730,49,0,1,214,
66741,3,1,3,1,
66752,1887,22,1,50,
66761,2513,1888,16,0,
6677481,1,1260,1218,1,
66781011,1224,1,1514,1230,
66791,9,1235,1,10,
66801889,17,1890,15,1891,
66814,48,37,0,65,
66820,114,0,103,0, 66170,114,0,103,0,
6683117,0,109,0,101, 661883,0,116,0,97,
66190,116,0,101,0,
662069,0,118,0,101,
66840,110,0,116,0, 66210,110,0,116,0,
668568,0,101,0,99, 66221,-1,1,5,1867,
66860,108,0,97,0, 662320,1868,4,42,86,
6687114,0,97,0,116, 66240,101,0,99,0,
66880,105,0,111,0, 6625116,0,111,0,114,
6689110,0,76,0,105, 66260,65,0,114,0,
66900,115,0,116,0, 6627103,0,83,0,116,
66911,-1,1,5,140, 66280,97,0,116,0,
66921,0,1,0,1892, 6629101,0,69,0,118,
669322,1,39,1,262, 66300,101,0,110,0,
66941241,1,1267,1247,1, 6631116,0,95,0,49,
66952524,1893,16,0,492, 66320,1,201,1,3,
66961,1521,1252,1,1773, 66331,6,1,5,1869,
66971894,16,0,151,1, 663422,1,35,1,2021,
66982527,1895,17,1896,15, 6635843,1,2458,1001,1,
66991897,4,30,37,0, 66362459,1007,1,2462,1014,
670086,0,101,0,99, 66371,2136,968,1,2464,
66381024,1,2029,850,1,
66392030,856,1,2031,861,
66401,2032,866,1,2033,
6641871,1,2035,877,1,
66422364,952,1,2039,887,
66431,1931,986,1,2041,
6644893,1,2043,899,1,
66452045,904,1,2703,1870,
664616,0,211,1,2595,
66471871,17,1872,15,1873,
66484,22,37,0,83,
66490,116,0,97,0,
6650116,0,101,0,69,
66510,118,0,101,0,
6652110,0,116,0,1,
6653-1,1,5,1874,20,
66541875,4,24,83,0,
6655116,0,97,0,116,
66560,101,0,69,0,
6657118,0,101,0,110,
66580,116,0,95,0,
665949,0,1,197,1,
66603,1,6,1,5,
66611876,22,1,31,1,
66622597,1877,16,0,761,
66631,2648,1878,17,1879,
666415,1758,1,-1,1,
66655,1880,20,1881,4,
666622,83,0,116,0,
666797,0,116,0,101,
66680,66,0,111,0,
6669100,0,121,0,95,
66700,50,0,1,182,
66711,3,1,3,1,
66722,1882,22,1,16,
66731,2105,939,1,14,
66741883,19,144,1,14,
66751884,5,115,1,2510,
66761885,16,0,706,1,
66772513,1886,17,1887,15,
66781888,4,30,37,0,
667973,0,110,0,116,
67010,68,0,101,0, 66800,68,0,101,0,
670299,0,108,0,97, 668199,0,108,0,97,
67030,114,0,97,0, 66820,114,0,97,0,
6704116,0,105,0,111, 6683116,0,105,0,111,
67050,110,0,1,-1, 66840,110,0,1,-1,
67061,5,1898,20,1899, 66851,5,1889,20,1890,
67074,32,86,0,101, 66864,32,73,0,110,
67080,99,0,68,0, 66870,116,0,68,0,
6709101,0,99,0,108, 6688101,0,99,0,108,
67100,97,0,114,0, 66890,97,0,114,0,
671197,0,116,0,105, 669097,0,116,0,105,
67120,111,0,110,0, 66910,111,0,110,0,
671395,0,49,0,1, 669295,0,49,0,1,
6714215,1,3,1,3, 6693215,1,3,1,3,
67151,2,1900,22,1, 66941,2,1891,22,1,
671651,1,2528,1901,16, 669550,1,2514,1892,16,
67170,498,1,19,1269, 66960,360,1,1260,1221,
67181,20,1902,16,0, 66971,1011,1227,1,1514,
6719142,1,2281,1276,1, 66981233,1,9,1238,1,
6720525,1339,1,2539,1903, 669910,1893,17,1894,15,
672116,0,510,1,30, 67001895,4,48,37,0,
67221904,17,1905,15,1891, 670165,0,114,0,103,
67231,-1,1,5,1906, 67020,117,0,109,0,
672420,1907,4,50,65, 6703101,0,110,0,116,
67040,68,0,101,0,
670599,0,108,0,97,
67060,114,0,97,0,
6707116,0,105,0,111,
67080,110,0,76,0,
6709105,0,115,0,116,
67100,1,-1,1,5,
6711140,1,0,1,0,
67121896,22,1,39,1,
6713262,1244,1,1267,1250,
67141,2525,1897,16,0,
6715507,1,1773,1898,16,
67160,148,1,2779,1899,
671716,0,142,1,19,
67181272,1,20,1900,16,
67190,142,1,2281,1279,
67201,525,1343,1,30,
67211901,17,1902,15,1895,
67221,-1,1,5,1903,
672320,1904,4,50,65,
67250,114,0,103,0, 67240,114,0,103,0,
6726117,0,109,0,101, 6725117,0,109,0,101,
67270,110,0,116,0, 67260,110,0,116,0,
@@ -6732,18 +6731,18 @@ public yyLSLSyntax
6732110,0,76,0,105, 6731110,0,76,0,105,
67330,115,0,116,0, 67320,115,0,116,0,
673495,0,50,0,1, 673395,0,50,0,1,
6735205,1,3,1,4, 6734206,1,3,1,4,
67361,3,1908,22,1, 67351,3,1905,22,1,
673741,1,1002,1715,1, 673641,1,283,1299,1,
67382542,1909,17,1910,15, 67372543,1906,17,1907,15,
67391911,4,30,37,0, 67381908,4,30,37,0,
674082,0,111,0,116, 673982,0,111,0,116,
67410,68,0,101,0, 67400,68,0,101,0,
674299,0,108,0,97, 674199,0,108,0,97,
67430,114,0,97,0, 67420,114,0,97,0,
6744116,0,105,0,111, 6743116,0,105,0,111,
67450,110,0,1,-1, 67440,110,0,1,-1,
67461,5,1912,20,1913, 67451,5,1909,20,1910,
67474,32,82,0,111, 67464,32,82,0,111,
67480,116,0,68,0, 67470,116,0,68,0,
6749101,0,99,0,108, 6748101,0,99,0,108,
@@ -6751,21 +6750,21 @@ public yyLSLSyntax
675197,0,116,0,105, 675097,0,116,0,105,
67520,111,0,110,0, 67510,111,0,110,0,
675395,0,49,0,1, 675295,0,49,0,1,
6754216,1,3,1,3, 6753217,1,3,1,3,
67551,2,1914,22,1, 67541,2,1911,22,1,
675652,1,2543,1915,16, 675552,1,2544,1912,16,
67570,514,1,40,1300, 67560,528,1,40,1304,
67581,41,1916,17,1917, 67571,41,1913,17,1914,
675915,1918,4,26,37, 675815,1915,4,26,37,
67600,65,0,114,0, 67590,65,0,114,0,
6761103,0,117,0,109, 6760103,0,117,0,109,
67620,101,0,110,0, 67610,101,0,110,0,
6763116,0,76,0,105, 6762116,0,76,0,105,
67640,115,0,116,0, 67630,115,0,116,0,
67651,-1,1,5,709, 67641,-1,1,5,724,
67661,0,1,0,1919, 67651,0,1,0,1916,
676722,1,169,1,42, 676622,1,169,1,42,
67681920,17,1921,15,1922, 67671917,17,1918,15,1919,
67694,38,37,0,69, 67684,38,37,0,69,
67700,120,0,112,0, 67690,120,0,112,0,
6771114,0,101,0,115, 6770114,0,101,0,115,
@@ -6774,8 +6773,8 @@ public yyLSLSyntax
67740,114,0,103,0, 67730,114,0,103,0,
6775117,0,109,0,101, 6774117,0,109,0,101,
67760,110,0,116,0, 67750,110,0,116,0,
67771,-1,1,5,1923, 67761,-1,1,5,1920,
677820,1924,4,40,69, 677720,1921,4,40,69,
67790,120,0,112,0, 67780,120,0,112,0,
6780114,0,101,0,115, 6779114,0,101,0,115,
67810,115,0,105,0, 67800,115,0,105,0,
@@ -6784,317 +6783,336 @@ public yyLSLSyntax
6784117,0,109,0,101, 6783117,0,109,0,101,
67850,110,0,116,0, 67840,110,0,116,0,
678695,0,49,0,1, 678595,0,49,0,1,
6787335,1,3,1,2, 6786336,1,3,1,2,
67881,1,1925,22,1, 67871,1,1922,22,1,
6789172,1,44,1306,1, 6788172,1,44,1310,1,
679047,1307,1,48,1313, 678947,1311,1,48,1317,
67911,49,1319,1,50, 67901,49,1323,1,50,
67921324,1,51,1329,1, 67911328,1,51,1333,1,
6793283,1295,1,305,1334, 6792305,1338,1,63,1349,
67941,63,1345,1,66, 67931,1521,1255,1,66,
67951351,1,67,1356,1, 67941355,1,67,1360,1,
67961478,1575,1,69,1366, 67951478,1583,1,69,1370,
67971,70,1371,1,2581, 67961,70,1375,1,68,
67981926,17,1927,15,1891, 67971365,1,74,1380,1,
67991,-1,1,5,140, 67981013,1385,1,2335,1923,
68001,0,1,0,1892, 679916,0,148,1,1332,
68011,68,1361,1,74, 68001390,1,1048,1470,1,
68021376,1,1013,1381,1, 68012591,1924,16,0,142,
68032335,1928,16,0,151, 68021,82,1407,1,1296,
68041,1332,1386,1,1048, 68031294,1,1341,1424,1,
68051462,1,2590,1929,16, 6804328,1429,1,1303,1434,
68060,142,1,82,1403, 68051,1096,1439,1,93,
68071,1296,1290,1,1341, 68061445,1,1550,1450,1,
68081420,1,328,1425,1, 68072770,1925,17,1926,15,
68091303,1430,1,1096,1694, 68081895,1,-1,1,5,
68101,93,1435,1,1550, 6809140,1,0,1,0,
68111440,1,352,1467,1, 68101896,1,2528,1927,17,
68122775,1930,16,0,142, 68111928,15,1929,4,30,
68131,107,1455,1,1114, 681237,0,86,0,101,
68141461,1,1370,1570,1, 68130,99,0,68,0,
6815118,1473,1,1123,1478, 6814101,0,99,0,108,
68161,371,1483,1,1377, 68150,97,0,114,0,
68171489,1,375,1494,1, 681697,0,116,0,105,
6818377,1499,1,827,1448, 68170,111,0,110,0,
68191,380,1509,1,883, 68181,-1,1,5,1930,
68201515,1,373,1527,1, 681920,1931,4,32,86,
6821130,1532,1,379,1504, 68200,101,0,99,0,
68221,143,1537,1,1152,
68231543,1,387,1931,16,
68240,643,1,1406,1548,
68251,1159,1555,1,157,
68261560,1,1413,1565,1,
68271665,1591,1,412,1932,
682816,0,680,1,1094,
68291933,16,0,711,1,
6830172,1586,1,2766,1934,
683117,1935,15,1891,1,
6832-1,1,5,140,1,
68330,1,0,1892,1,
68341188,1596,1,437,1936,
683516,0,755,1,1442,
68361601,1,1694,1937,16,
68370,151,1,942,1607,
68381,1195,1613,1,1449,
68391618,1,1701,1623,1,
6840447,1628,1,188,1635,
68411,205,1640,1,2467,
68421938,17,1939,15,1891,
68431,-1,1,5,1940,
684420,1941,4,50,65,
68450,114,0,103,0,
6846117,0,109,0,101,
68470,110,0,116,0,
684868,0,101,0,99, 682168,0,101,0,99,
68490,108,0,97,0, 68220,108,0,97,0,
6850114,0,97,0,116, 6823114,0,97,0,116,
68510,105,0,111,0, 68240,105,0,111,0,
6852110,0,76,0,105, 6825110,0,95,0,49,
68530,115,0,116,0, 68260,1,216,1,3,
685495,0,49,0,1, 68271,3,1,2,1932,
6855204,1,3,1,2, 682822,1,51,1,2529,
68561,1,1942,22,1, 68291933,16,0,515,1,
685740,1,461,1943,16, 6830352,1475,1,107,1464,
68580,711,1,464,1944, 68311,1114,1469,1,2540,
685917,1945,15,1918,1, 68321934,16,0,524,1,
6860-1,1,5,1946,20, 68331370,1578,1,118,1481,
68611947,4,28,65,0, 68341,1123,1486,1,371,
6862114,0,103,0,117, 68351491,1,1377,1497,1,
68630,109,0,101,0, 6836375,1502,1,377,1507,
6864110,0,116,0,76, 68371,827,1457,1,380,
68650,105,0,115,0, 68381517,1,883,1523,1,
6866116,0,95,0,50, 6839373,1535,1,130,1540,
68670,1,334,1,3, 68401,379,1512,1,143,
68681,4,1,3,1948, 68411545,1,1152,1551,1,
686922,1,171,1,1224, 6842387,1935,16,0,656,
68701645,1,223,1650,1, 68431,1406,1556,1,2582,
68711730,1655,1,476,1660, 68441936,17,1937,15,1895,
68721,477,1666,1,1231, 68451,-1,1,5,140,
68731671,1,479,1676,1, 68461,0,1,0,1896,
6874480,1681,1,1485,1687, 68471,1159,1563,1,157,
68751,459,1949,17,1950, 68481568,1,1413,1573,1,
687615,1918,1,-1,1, 68491665,1600,1,412,1938,
68775,709,1,0,1, 685016,0,695,1,1094,
68780,1919,1,242,1700, 68511939,16,0,726,1,
68791,478,1705,1,481, 6852172,1595,1,1188,1605,
68801951,17,1952,15,1918, 68531,437,1940,16,0,
68811,-1,1,5,1953, 6854765,1,1442,1610,1,
688220,1954,4,28,65, 68551694,1941,16,0,148,
68830,114,0,103,0, 68561,942,1616,1,1195,
6884117,0,109,0,101, 68571622,1,1449,1627,1,
68850,110,0,116,0, 68581701,1632,1,447,1637,
68591,188,1644,1,205,
68601649,1,2467,1942,17,
68611943,15,1895,1,-1,
68621,5,1944,20,1945,
68634,50,65,0,114,
68640,103,0,117,0,
6865109,0,101,0,110,
68660,116,0,68,0,
6867101,0,99,0,108,
68680,97,0,114,0,
686997,0,116,0,105,
68700,111,0,110,0,
688676,0,105,0,115, 687176,0,105,0,115,
68870,116,0,95,0, 68720,116,0,95,0,
688849,0,1,333,1, 687349,0,1,205,1,
68893,1,2,1,1, 68743,1,2,1,1,
68901955,22,1,170,1, 68751946,22,1,40,1,
68911001,1710,1,2508,1956, 6876461,1947,16,0,726,
689217,1957,15,1958,4, 68771,464,1948,17,1949,
689330,37,0,75,0, 687815,1915,1,-1,1,
6894101,0,121,0,68, 68795,1950,20,1951,4,
68950,101,0,99,0, 688028,65,0,114,0,
6896108,0,97,0,114, 6881103,0,117,0,109,
68970,97,0,116,0, 68820,101,0,110,0,
6898105,0,111,0,110, 6883116,0,76,0,105,
68990,1,-1,1,5, 68840,115,0,116,0,
69001959,20,1960,4,32, 688595,0,50,0,1,
690175,0,101,0,121, 6886335,1,3,1,4,
69020,68,0,101,0, 68871,3,1952,22,1,
690399,0,108,0,97, 6888171,1,1224,1654,1,
69040,114,0,97,0, 6889223,1659,1,1730,1664,
6905116,0,105,0,111, 68901,476,1669,1,477,
69060,110,0,95,0, 68911675,1,1231,1680,1,
690749,0,1,213,1, 6892479,1685,1,480,1690,
69083,1,3,1,2, 68931,1485,1696,1,459,
69091961,22,1,49,1, 68941953,17,1954,15,1915,
69102509,1962,16,0,475, 68951,-1,1,5,724,
69111,15,1963,19,334, 68961,0,1,0,1916,
69121,15,1964,5,6, 68971,242,1703,1,478,
69131,1114,1965,16,0, 68981708,1,481,1955,17,
6914332,1,1621,1966,16, 68991956,15,1915,1,-1,
69150,754,1,2781,1967, 69001,5,1957,20,1958,
691616,0,795,1,40, 69014,28,65,0,114,
69171968,16,0,639,1, 69020,103,0,117,0,
691819,1269,1,9,1235, 6903109,0,101,0,110,
69191,16,1969,19,136, 69040,116,0,76,0,
69201,16,1970,5,146, 6905105,0,115,0,116,
69211,2765,1971,16,0, 69060,95,0,49,0,
6922784,1,256,1972,16, 69071,334,1,3,1,
69230,206,1,1261,1973, 69082,1,1,1959,22,
692416,0,206,1,509, 69091,170,1,1001,1713,
69251974,16,0,206,1, 69101,1002,1718,1,2509,
69269,1975,16,0,134, 69111960,17,1961,15,1962,
69271,2521,1976,16,0, 69124,30,37,0,75,
6928490,1,2021,840,1, 69130,101,0,121,0,
69291775,1977,16,0,206, 691468,0,101,0,99,
69301,2029,847,1,2030, 69150,108,0,97,0,
6931853,1,2031,858,1, 6916114,0,97,0,116,
69322032,863,1,2033,868, 69170,105,0,111,0,
69331,277,1978,16,0, 6918110,0,1,-1,1,
6934206,1,2035,874,1, 69195,1963,20,1964,4,
69352037,879,1,2039,884, 692032,75,0,101,0,
69361,32,1979,16,0, 6921121,0,68,0,101,
6937206,1,2041,890,1, 69220,99,0,108,0,
69382293,1980,16,0,206, 692397,0,114,0,97,
69391,2043,896,1,2045, 69240,116,0,105,0,
6940901,1,40,1981,16, 6925111,0,110,0,95,
69410,185,1,41,1982, 69260,49,0,1,214,
694216,0,206,1,1297, 69271,3,1,3,1,
69431983,16,0,206,1, 69282,1965,22,1,49,
694443,1984,16,0,206, 69291,15,1966,19,336,
69451,44,1985,16,0, 69301,15,1967,5,6,
6946185,1,1803,909,1, 69311,2785,1968,16,0,
69471804,1986,16,0,206, 6932334,1,1114,1969,16,
69481,299,1987,16,0, 69330,339,1,1621,1970,
6949206,1,2480,1988,17, 693416,0,764,1,40,
69501989,15,1990,4,24, 69351971,16,0,649,1,
695137,0,73,0,110, 693619,1272,1,9,1238,
69520,116,0,65,0, 69371,16,1972,19,136,
6953114,0,103,0,69, 69381,16,1973,5,147,
69540,118,0,101,0, 69391,256,1974,16,0,
6955110,0,116,0,1, 6940203,1,1261,1975,16,
6956-1,1,5,1991,20, 69410,203,1,509,1976,
69571992,4,26,73,0, 694216,0,203,1,2769,
69431977,16,0,790,1,
69449,1978,16,0,134,
69451,2522,1979,16,0,
6946505,1,2021,843,1,
69471775,1980,16,0,203,
69481,2029,850,1,2030,
6949856,1,2031,861,1,
69502032,866,1,2786,1981,
695116,0,203,1,277,
69521982,16,0,203,1,
69532537,1983,16,0,522,
69541,2037,882,1,2039,
6955887,1,32,1984,16,
69560,203,1,2041,893,
69571,2293,1985,16,0,
6958203,1,2043,899,1,
69592045,904,1,40,1986,
696016,0,182,1,41,
69611987,16,0,203,1,
69621297,1988,16,0,203,
69631,43,1989,16,0,
6964203,1,44,1990,16,
69650,182,1,1803,912,
69661,1804,1991,16,0,
6967203,1,299,1992,16,
69680,203,1,2480,1993,
696917,1994,15,1995,4,
697024,37,0,73,0,
6958110,0,116,0,65, 6971110,0,116,0,65,
69590,114,0,103,0, 69720,114,0,103,0,
696069,0,118,0,101, 697369,0,118,0,101,
69610,110,0,116,0, 69740,110,0,116,0,
696295,0,55,0,1, 69751,-1,1,5,1996,
6963367,1,3,1,2, 697620,1997,4,26,73,
69641,1,1993,22,1,
6965204,1,52,1994,16,
69660,206,1,2484,1995,
696717,1996,15,1990,1,
6968-1,1,5,1997,20,
69691998,4,26,73,0,
6970110,0,116,0,65,
69710,114,0,103,0,
697269,0,118,0,101,
69730,110,0,116,0, 69770,110,0,116,0,
697495,0,51,0,1, 697865,0,114,0,103,
6975363,1,3,1,2, 69790,69,0,118,0,
69761,1,1999,22,1, 6980101,0,110,0,116,
6977200,1,2567,2000,16, 69810,95,0,55,0,
69780,750,1,1515,2001, 69821,369,1,3,1,
697916,0,206,1,2318, 69832,1,1,1998,22,
69802002,16,0,206,1, 69841,205,1,2560,1999,
69812491,2003,17,2004,15, 698516,0,549,1,52,
69822005,4,26,37,0, 69862000,16,0,203,1,
698386,0,111,0,105, 69872484,2001,17,2002,15,
69840,100,0,65,0, 69881995,1,-1,1,5,
6985114,0,103,0,69, 69892003,20,2004,4,26,
69860,118,0,101,0, 699073,0,110,0,116,
6987110,0,116,0,1,
6988-1,1,5,2006,20,
69892007,4,28,86,0,
6990111,0,105,0,100,
69910,65,0,114,0, 69910,65,0,114,0,
6992103,0,69,0,118, 6992103,0,69,0,118,
69930,101,0,110,0, 69930,101,0,110,0,
6994116,0,95,0,54, 6994116,0,95,0,51,
69950,1,356,1,3, 69950,1,365,1,3,
69961,2,1,1,2008, 69961,2,1,1,2005,
699722,1,193,1,62, 699722,1,201,1,1515,
69982009,16,0,228,1, 69982006,16,0,203,1,
699963,2010,16,0,185, 69992318,2007,16,0,203,
70001,2495,2011,17,2012, 70001,2491,2008,17,2009,
700115,2005,1,-1,1, 700115,2010,4,26,37,
70025,2013,20,2014,4, 70020,86,0,111,0,
700328,86,0,111,0,
7004105,0,100,0,65, 7003105,0,100,0,65,
70050,114,0,103,0, 70040,114,0,103,0,
700669,0,118,0,101, 700569,0,118,0,101,
70070,110,0,116,0, 70060,110,0,116,0,
700895,0,50,0,1, 70071,-1,1,5,2011,
7009352,1,3,1,2, 700820,2012,4,28,86,
70101,1,2015,22,1, 70090,111,0,105,0,
7011189,1,2575,2016,16, 7010100,0,65,0,114,
70120,759,1,2075,2017, 70110,103,0,69,0,
701316,0,206,1,1574, 7012118,0,101,0,110,
7014921,1,1479,2018,16, 70130,116,0,95,0,
70150,206,1,2580,2019, 701454,0,1,358,1,
701616,0,352,1,71, 70153,1,2,1,1,
70172020,16,0,206,1, 70162013,22,1,194,1,
70181658,2021,16,0,790, 701762,2014,16,0,225,
70191,1833,2022,16,0, 70181,63,2015,16,0,
7020321,1,1834,2023,16, 7019182,1,2495,2016,17,
70210,206,1,2337,2024, 70202017,15,2010,1,-1,
702216,0,206,1,79, 70211,5,2018,20,2019,
70232025,16,0,206,1, 70224,28,86,0,111,
70241335,2026,16,0,206, 70230,105,0,100,0,
70251,322,2027,16,0, 702465,0,114,0,103,
7026206,1,76,2028,16, 70250,69,0,118,0,
70270,206,1,85,2029, 7026101,0,110,0,116,
702816,0,206,1,89, 70270,95,0,50,0,
70292030,16,0,206,1, 70281,354,1,3,1,
7030346,2031,16,0,206, 70292,1,1,2020,22,
70311,97,2032,16,0, 70301,190,1,2576,2021,
7032206,1,2106,2033,16, 703116,0,579,1,2075,
70330,206,1,102,2034, 70322022,16,0,203,1,
703416,0,206,1,1860, 70331574,924,1,1479,2023,
7035943,1,2458,998,1, 703416,0,203,1,71,
70362364,949,1,2536,2035, 70352024,16,0,203,1,
703716,0,633,1,2782, 70361658,2025,16,0,795,
70382036,16,0,206,1, 70371,1833,2026,16,0,
70391990,2037,16,0,206, 7038326,1,1834,2027,16,
70401,112,2038,16,0, 70390,203,1,2337,2028,
7041206,1,1117,2039,16, 704016,0,203,1,79,
70420,206,1,1873,958, 70412029,16,0,203,1,
70431,1875,2040,16,0, 70421335,2030,16,0,203,
7044436,1,1876,2041,16, 70431,322,2031,16,0,
70450,206,1,2551,2042, 7044203,1,76,2032,16,
704616,0,642,1,124, 70450,203,1,85,2033,
70472043,16,0,206,1, 704616,0,203,1,89,
70482478,2044,17,2045,15, 70472034,16,0,203,1,
70491990,1,-1,1,5, 70482033,871,1,2035,877,
70502046,20,2047,4,26, 70491,346,2035,16,0,
705173,0,110,0,116, 7050203,1,97,2036,16,
70520,65,0,114,0, 70510,203,1,2106,2037,
7053103,0,69,0,118, 705216,0,203,1,102,
70540,101,0,110,0, 70532038,16,0,203,1,
7055116,0,95,0,57, 70541860,946,1,2458,1001,
70560,1,369,1,3, 70551,2364,952,1,1990,
70571,2,1,1,2048, 70562039,16,0,203,1,
705822,1,206,1,2136, 7057112,2040,16,0,203,
7059965,1,2559,2049,16, 70581,1117,2041,16,0,
70600,536,1,525,2050, 7059203,1,1873,961,1,
706116,0,206,1,137, 70601875,2042,16,0,446,
70622051,16,0,206,1, 70611,1876,2043,16,0,
7063381,2052,16,0,206, 7062203,1,2552,2044,16,
70641,1901,2053,16,0, 70630,540,1,124,2045,
7065206,1,1153,2054,16, 706416,0,203,1,2478,
70660,206,1,151,2055, 70652046,17,2047,15,1995,
706716,0,206,1,1407, 70661,-1,1,5,2048,
70682056,16,0,206,1, 706720,2049,4,26,73,
70691659,2057,16,0,206, 70680,110,0,116,0,
70701,2413,2058,16,0, 706965,0,114,0,103,
7071206,1,406,2059,16, 70700,69,0,118,0,
70720,206,1,1371,2060, 7071101,0,110,0,116,
707316,0,206,1,2105, 70720,95,0,57,0,
7074936,1,166,2061,16, 70731,371,1,3,1,
70750,206,1,1622,2062, 70742,1,1,2050,22,
707616,0,206,1,1931, 70751,207,1,2136,968,
7077983,1,1932,2063,16, 70761,381,2051,16,0,
70780,525,1,1933,2064, 7077203,1,525,2052,16,
707916,0,206,1,431, 70780,203,1,137,2053,
70802065,16,0,206,1, 707916,0,203,1,2568,
70811585,2066,16,0,206, 70802054,16,0,683,1,
70821,182,2067,16,0, 70811901,2055,16,0,203,
7083206,1,1189,2068,16, 70821,1153,2056,16,0,
70840,206,1,1443,2069, 7083203,1,151,2057,16,
708516,0,206,1,1695, 70840,203,1,1407,2058,
70862070,16,0,206,1, 708516,0,203,1,2581,
70872198,2071,16,0,206, 70862059,16,0,779,1,
70881,447,2072,16,0, 70872413,2060,16,0,203,
7089206,1,199,2073,16, 70881,406,2061,16,0,
70900,206,1,2459,1004, 7089203,1,1371,2062,16,
70911,1958,2074,16,0, 70900,203,1,2105,939,
7092206,1,2462,1011,1, 70911,166,2063,16,0,
70931657,1016,1,2464,1021, 7092203,1,1622,2064,16,
70941,459,2075,16,0, 70930,203,1,1931,986,
7095206,1,462,2076,16, 70941,1932,2065,16,0,
70960,206,1,2471,2077, 7095539,1,1933,2066,16,
709717,2078,15,2079,4, 70960,203,1,431,2067,
709716,0,203,1,1585,
70982068,16,0,203,1,
7099182,2069,16,0,203,
71001,1189,2070,16,0,
7101203,1,1443,2071,16,
71020,203,1,1695,2072,
710316,0,203,1,2198,
71042073,16,0,203,1,
7105447,2074,16,0,203,
71061,199,2075,16,0,
7107203,1,2459,1007,1,
71081958,2076,16,0,203,
71091,2462,1014,1,1657,
71101019,1,2464,1024,1,
71111659,2077,16,0,203,
71121,459,2078,16,0,
7113203,1,462,2079,16,
71140,203,1,2471,2080,
711517,2081,15,2082,4,
709836,37,0,75,0, 711636,37,0,75,0,
7099101,0,121,0,73, 7117101,0,121,0,73,
71000,110,0,116,0, 71180,110,0,116,0,
@@ -7103,7 +7121,7 @@ public yyLSLSyntax
7103103,0,69,0,118, 7121103,0,69,0,118,
71040,101,0,110,0, 71220,101,0,110,0,
7105116,0,1,-1,1, 7123116,0,1,-1,1,
71065,2080,20,2081,4, 71245,2083,20,2084,4,
710738,75,0,101,0, 712538,75,0,101,0,
7108121,0,73,0,110, 7126121,0,73,0,110,
71090,116,0,73,0, 71270,116,0,73,0,
@@ -7112,10 +7130,10 @@ public yyLSLSyntax
711269,0,118,0,101, 713069,0,118,0,101,
71130,110,0,116,0, 71310,110,0,116,0,
711495,0,49,0,1, 713295,0,49,0,1,
7115376,1,3,1,2, 7133378,1,3,1,2,
71161,1,2082,22,1, 71341,1,2085,22,1,
7117213,1,2472,2083,17, 7135214,1,2472,2086,17,
71182084,15,2085,4,36, 71362087,15,2088,4,36,
711937,0,73,0,110, 713737,0,73,0,110,
71200,116,0,86,0, 71380,116,0,86,0,
7121101,0,99,0,86, 7139101,0,99,0,86,
@@ -7124,7 +7142,7 @@ public yyLSLSyntax
71240,69,0,118,0, 71420,69,0,118,0,
7125101,0,110,0,116, 7143101,0,110,0,116,
71260,1,-1,1,5, 71440,1,-1,1,5,
71272086,20,2087,4,38, 71452089,20,2090,4,38,
712873,0,110,0,116, 714673,0,110,0,116,
71290,86,0,101,0, 71470,86,0,101,0,
713099,0,86,0,101, 714899,0,86,0,101,
@@ -7132,11 +7150,11 @@ public yyLSLSyntax
7132114,0,103,0,69, 7150114,0,103,0,69,
71330,118,0,101,0, 71510,118,0,101,0,
7134110,0,116,0,95, 7152110,0,116,0,95,
71350,49,0,1,375, 71530,49,0,1,377,
71361,3,1,2,1, 71541,3,1,2,1,
71371,2088,22,1,212, 71551,2091,22,1,213,
71381,2473,2089,17,2090, 71561,2473,2092,17,2093,
713915,2091,4,36,37, 715715,2094,4,36,37,
71400,73,0,110,0, 71580,73,0,110,0,
7141116,0,82,0,111, 7159116,0,82,0,111,
71420,116,0,82,0, 71600,116,0,82,0,
@@ -7144,8 +7162,8 @@ public yyLSLSyntax
71440,114,0,103,0, 71620,114,0,103,0,
714569,0,118,0,101, 716369,0,118,0,101,
71460,110,0,116,0, 71640,110,0,116,0,
71471,-1,1,5,2092, 71651,-1,1,5,2095,
714820,2093,4,38,73, 716620,2096,4,38,73,
71490,110,0,116,0, 71670,110,0,116,0,
715082,0,111,0,116, 716882,0,111,0,116,
71510,82,0,111,0, 71690,82,0,111,0,
@@ -7153,18 +7171,18 @@ public yyLSLSyntax
71530,103,0,69,0, 71710,103,0,69,0,
7154118,0,101,0,110, 7172118,0,101,0,110,
71550,116,0,95,0, 71730,116,0,95,0,
715649,0,1,374,1, 717449,0,1,376,1,
71573,1,2,1,1, 71753,1,2,1,1,
71582094,22,1,211,1, 71762097,22,1,212,1,
71592474,2095,17,2096,15, 71772474,2098,17,2099,15,
71602097,4,30,37,0, 71782100,4,30,37,0,
716186,0,101,0,99, 717986,0,101,0,99,
71620,116,0,111,0, 71800,116,0,111,0,
7163114,0,65,0,114, 7181114,0,65,0,114,
71640,103,0,69,0, 71820,103,0,69,0,
7165118,0,101,0,110, 7183118,0,101,0,110,
71660,116,0,1,-1, 71840,116,0,1,-1,
71671,5,2098,20,2099, 71851,5,2101,20,2102,
71684,32,86,0,101, 71864,32,86,0,101,
71690,99,0,116,0, 71870,99,0,116,0,
7170111,0,114,0,65, 7188111,0,114,0,65,
@@ -7172,11 +7190,11 @@ public yyLSLSyntax
717269,0,118,0,101, 719069,0,118,0,101,
71730,110,0,116,0, 71910,110,0,116,0,
717495,0,51,0,1, 719295,0,51,0,1,
7175373,1,3,1,2, 7193375,1,3,1,2,
71761,1,2100,22,1, 71941,1,2103,22,1,
7177210,1,2475,2101,17, 7195211,1,2475,2104,17,
71782102,15,2097,1,-1, 71962105,15,2100,1,-1,
71791,5,2103,20,2104, 71971,5,2106,20,2107,
71804,32,86,0,101, 71984,32,86,0,101,
71810,99,0,116,0, 71990,99,0,116,0,
7182111,0,114,0,65, 7200111,0,114,0,65,
@@ -7184,11 +7202,11 @@ public yyLSLSyntax
718469,0,118,0,101, 720269,0,118,0,101,
71850,110,0,116,0, 72030,110,0,116,0,
718695,0,50,0,1, 720495,0,50,0,1,
7187372,1,3,1,2, 7205374,1,3,1,2,
71881,1,2105,22,1, 72061,1,2108,22,1,
7189209,1,2476,2106,17, 7207210,1,2476,2109,17,
71902107,15,2097,1,-1, 72082110,15,2100,1,-1,
71911,5,2108,20,2109, 72091,5,2111,20,2112,
71924,32,86,0,101, 72104,32,86,0,101,
71930,99,0,116,0, 72110,99,0,116,0,
7194111,0,114,0,65, 7212111,0,114,0,65,
@@ -7196,380 +7214,352 @@ public yyLSLSyntax
719669,0,118,0,101, 721469,0,118,0,101,
71970,110,0,116,0, 72150,110,0,116,0,
719895,0,49,0,1, 721695,0,49,0,1,
7199371,1,3,1,2, 7217373,1,3,1,2,
72001,1,2110,22,1, 72181,1,2113,22,1,
7201208,1,2477,2111,17, 7219209,1,2477,2114,17,
72022112,15,1990,1,-1, 72202115,15,1995,1,-1,
72031,5,2113,20,2114, 72211,5,2116,20,2117,
72044,28,73,0,110, 72224,28,73,0,110,
72050,116,0,65,0, 72230,116,0,65,0,
7206114,0,103,0,69, 7224114,0,103,0,69,
72070,118,0,101,0, 72250,118,0,101,0,
7208110,0,116,0,95, 7226110,0,116,0,95,
72090,49,0,48,0, 72270,49,0,48,0,
72101,370,1,3,1, 72281,372,1,3,1,
72112,1,1,2115,22, 72292,1,1,2118,22,
72121,207,1,2227,1030, 72301,208,1,2227,1033,
72131,2479,2116,17,2117, 72311,2479,2119,17,2120,
721415,1990,1,-1,1, 723215,1995,1,-1,1,
72155,2118,20,2119,4, 72335,2121,20,2122,4,
721626,73,0,110,0, 723426,73,0,110,0,
7217116,0,65,0,114, 7235116,0,65,0,114,
72180,103,0,69,0, 72360,103,0,69,0,
7219118,0,101,0,110, 7237118,0,101,0,110,
72200,116,0,95,0, 72380,116,0,95,0,
722156,0,1,368,1, 723956,0,1,370,1,
72223,1,2,1,1, 72403,1,2,1,1,
72232120,22,1,205,1, 72412123,22,1,206,1,
72241225,2121,16,0,206, 72421225,2124,16,0,203,
72251,2481,2122,17,2123, 72431,2481,2125,17,2126,
722615,1990,1,-1,1, 724415,1995,1,-1,1,
72275,2124,20,2125,4, 72455,2127,20,2128,4,
722826,73,0,110,0, 724626,73,0,110,0,
7229116,0,65,0,114, 7247116,0,65,0,114,
72300,103,0,69,0, 72480,103,0,69,0,
7231118,0,101,0,110, 7249118,0,101,0,110,
72320,116,0,95,0, 72500,116,0,95,0,
723354,0,1,366,1, 725154,0,1,368,1,
72343,1,2,1,1, 72523,1,2,1,1,
72352126,22,1,203,1, 72532129,22,1,204,1,
72362482,2127,17,2128,15, 72542482,2130,17,2131,15,
72371990,1,-1,1,5, 72551995,1,-1,1,5,
72382129,20,2130,4,26, 72562132,20,2133,4,26,
723973,0,110,0,116, 725773,0,110,0,116,
72400,65,0,114,0, 72580,65,0,114,0,
7241103,0,69,0,118, 7259103,0,69,0,118,
72420,101,0,110,0, 72600,101,0,110,0,
7243116,0,95,0,53, 7261116,0,95,0,53,
72440,1,365,1,3, 72620,1,367,1,3,
72451,2,1,1,2131, 72631,2,1,1,2134,
724622,1,202,1,2483, 726422,1,203,1,2483,
72472132,17,2133,15,1990, 72652135,17,2136,15,1995,
72481,-1,1,5,2134, 72661,-1,1,5,2137,
724920,2135,4,26,73, 726720,2138,4,26,73,
72500,110,0,116,0, 72680,110,0,116,0,
725165,0,114,0,103, 726965,0,114,0,103,
72520,69,0,118,0, 72700,69,0,118,0,
7253101,0,110,0,116, 7271101,0,110,0,116,
72540,95,0,52,0, 72720,95,0,52,0,
72551,364,1,3,1, 72731,366,1,3,1,
72562,1,1,2136,22, 72742,1,1,2139,22,
72571,201,1,1731,2137, 72751,202,1,1731,2140,
725816,0,206,1,2485, 727616,0,203,1,2485,
72592138,17,2139,15,1990, 72772141,17,2142,15,1995,
72601,-1,1,5,2140, 72781,-1,1,5,2143,
726120,2141,4,26,73, 727920,2144,4,26,73,
72620,110,0,116,0, 72800,110,0,116,0,
726365,0,114,0,103, 728165,0,114,0,103,
72640,69,0,118,0, 72820,69,0,118,0,
7265101,0,110,0,116, 7283101,0,110,0,116,
72660,95,0,50,0, 72840,95,0,50,0,
72671,362,1,3,1, 72851,364,1,3,1,
72682,1,1,2142,22, 72862,1,1,2145,22,
72691,199,1,2486,2143, 72871,200,1,2486,2146,
727017,2144,15,1990,1, 728817,2147,15,1995,1,
7271-1,1,5,2145,20, 7289-1,1,5,2148,20,
72722146,4,26,73,0, 72902149,4,26,73,0,
7273110,0,116,0,65, 7291110,0,116,0,65,
72740,114,0,103,0, 72920,114,0,103,0,
727569,0,118,0,101, 729369,0,118,0,101,
72760,110,0,116,0, 72940,110,0,116,0,
727795,0,49,0,1, 729595,0,49,0,1,
7278361,1,3,1,2, 7296363,1,3,1,2,
72791,1,2147,22,1, 72971,1,2150,22,1,
7280198,1,2487,2148,17, 7298199,1,2487,2151,17,
72812149,15,2150,4,24, 72992152,15,2153,4,24,
728237,0,75,0,101, 730037,0,75,0,101,
72830,121,0,65,0, 73010,121,0,65,0,
7284114,0,103,0,69, 7302114,0,103,0,69,
72850,118,0,101,0, 73030,118,0,101,0,
7286110,0,116,0,1, 7304110,0,116,0,1,
7287-1,1,5,2151,20, 7305-1,1,5,2154,20,
72882152,4,26,75,0, 73062155,4,26,75,0,
7289101,0,121,0,65, 7307101,0,121,0,65,
72900,114,0,103,0, 73080,114,0,103,0,
729169,0,118,0,101, 730969,0,118,0,101,
72920,110,0,116,0, 73100,110,0,116,0,
729395,0,50,0,1, 731195,0,50,0,1,
7294360,1,3,1,2, 7312362,1,3,1,2,
72951,1,2153,22,1, 73131,1,2156,22,1,
7296197,1,2488,2154,17, 7314198,1,2488,2157,17,
72972155,15,2150,1,-1, 73152158,15,2153,1,-1,
72981,5,2156,20,2157, 73161,5,2159,20,2160,
72994,26,75,0,101, 73174,26,75,0,101,
73000,121,0,65,0, 73180,121,0,65,0,
7301114,0,103,0,69, 7319114,0,103,0,69,
73020,118,0,101,0, 73200,118,0,101,0,
7303110,0,116,0,95, 7321110,0,116,0,95,
73040,49,0,1,359, 73220,49,0,1,361,
73051,3,1,2,1, 73231,3,1,2,1,
73061,2158,22,1,196, 73241,2161,22,1,197,
73071,2489,2159,17,2160, 73251,2489,2162,17,2163,
730815,2005,1,-1,1, 732615,2010,1,-1,1,
73095,2161,20,2162,4, 73275,2164,20,2165,4,
731028,86,0,111,0, 732828,86,0,111,0,
7311105,0,100,0,65, 7329105,0,100,0,65,
73120,114,0,103,0, 73300,114,0,103,0,
731369,0,118,0,101, 733169,0,118,0,101,
73140,110,0,116,0, 73320,110,0,116,0,
731595,0,56,0,1, 733395,0,56,0,1,
7316358,1,3,1,2, 7334360,1,3,1,2,
73171,1,2163,22,1, 73351,1,2166,22,1,
7318195,1,2490,2164,17, 7336196,1,2490,2167,17,
73192165,15,2005,1,-1, 73372168,15,2010,1,-1,
73201,5,2166,20,2167, 73381,5,2169,20,2170,
73214,28,86,0,111, 73394,28,86,0,111,
73220,105,0,100,0, 73400,105,0,100,0,
732365,0,114,0,103, 734165,0,114,0,103,
73240,69,0,118,0, 73420,69,0,118,0,
7325101,0,110,0,116, 7343101,0,110,0,116,
73260,95,0,55,0, 73440,95,0,55,0,
73271,357,1,3,1, 73451,359,1,3,1,
73282,1,1,2168,22, 73462,1,1,2171,22,
73291,194,1,1989,1038, 73471,195,1,1989,1041,
73301,2492,2169,17,2170, 73481,2492,2172,17,2173,
733115,2005,1,-1,1, 734915,2010,1,-1,1,
73325,2171,20,2172,4, 73505,2174,20,2175,4,
733328,86,0,111,0, 735128,86,0,111,0,
7334105,0,100,0,65, 7352105,0,100,0,65,
73350,114,0,103,0, 73530,114,0,103,0,
733669,0,118,0,101, 735469,0,118,0,101,
73370,110,0,116,0, 73550,110,0,116,0,
733895,0,53,0,1, 735695,0,53,0,1,
7339355,1,3,1,2, 7357357,1,3,1,2,
73401,1,2173,22,1, 73581,1,2176,22,1,
7341192,1,2493,2174,17, 7359193,1,2493,2177,17,
73422175,15,2005,1,-1, 73602178,15,2010,1,-1,
73431,5,2176,20,2177, 73611,5,2179,20,2180,
73444,28,86,0,111, 73624,28,86,0,111,
73450,105,0,100,0, 73630,105,0,100,0,
734665,0,114,0,103, 736465,0,114,0,103,
73470,69,0,118,0, 73650,69,0,118,0,
7348101,0,110,0,116, 7366101,0,110,0,116,
73490,95,0,52,0, 73670,95,0,52,0,
73501,354,1,3,1, 73681,356,1,3,1,
73512,1,1,2178,22, 73692,1,1,2181,22,
73521,191,1,2494,2179, 73701,192,1,2494,2182,
735317,2180,15,2005,1, 737117,2183,15,2010,1,
7354-1,1,5,2181,20, 7372-1,1,5,2184,20,
73552182,4,28,86,0, 73732185,4,28,86,0,
7356111,0,105,0,100, 7374111,0,105,0,100,
73570,65,0,114,0, 73750,65,0,114,0,
7358103,0,69,0,118, 7376103,0,69,0,118,
73590,101,0,110,0, 73770,101,0,110,0,
7360116,0,95,0,51, 7378116,0,95,0,51,
73610,1,353,1,3, 73790,1,355,1,3,
73621,2,1,1,2183, 73801,2,1,1,2186,
736322,1,190,1,236, 738122,1,191,1,236,
73642184,16,0,206,1, 73822187,16,0,203,1,
73652496,2185,17,2186,15, 73832496,2188,17,2189,15,
73662005,1,-1,1,5, 73842010,1,-1,1,5,
73672187,20,2188,4,28, 73852190,20,2191,4,28,
736886,0,111,0,105, 738686,0,111,0,105,
73690,100,0,65,0, 73870,100,0,65,0,
7370114,0,103,0,69, 7388114,0,103,0,69,
73710,118,0,101,0, 73890,118,0,101,0,
7372110,0,116,0,95, 7390110,0,116,0,95,
73730,49,0,1,351, 73910,49,0,1,353,
73741,3,1,2,1, 73921,3,1,2,1,
73751,2189,22,1,188, 73931,2192,22,1,189,
73761,2497,2190,17,2191, 73941,2497,2193,17,2194,
737715,2192,4,12,37, 739515,2195,4,12,37,
73780,69,0,118,0, 73960,69,0,118,0,
7379101,0,110,0,116, 7397101,0,110,0,116,
73800,1,-1,1,5, 73980,1,-1,1,5,
73812193,20,2194,4,14, 73992196,20,2197,4,14,
738269,0,118,0,101, 740069,0,118,0,101,
73830,110,0,116,0, 74010,110,0,116,0,
738495,0,56,0,1, 740295,0,57,0,1,
7385350,1,3,1,2, 7403352,1,3,1,2,
73861,1,2195,22,1, 74041,1,2198,22,1,
7387187,1,2498,2196,17, 7405188,1,2498,2199,17,
73882197,15,2192,1,-1, 74062200,15,2195,1,-1,
73891,5,2198,20,2199, 74071,5,2201,20,2202,
73904,14,69,0,118, 74084,14,69,0,118,
73910,101,0,110,0, 74090,101,0,110,0,
7392116,0,95,0,55, 7410116,0,95,0,56,
73930,1,349,1,3, 74110,1,351,1,3,
73941,2,1,1,2200, 74121,2,1,1,2203,
739522,1,186,1,2499, 741322,1,187,1,2499,
73962201,17,2202,15,2192, 74142204,17,2205,15,2195,
73971,-1,1,5,2203, 74151,-1,1,5,2206,
739820,2204,4,14,69, 741620,2207,4,14,69,
73990,118,0,101,0, 74170,118,0,101,0,
7400110,0,116,0,95, 7418110,0,116,0,95,
74010,54,0,1,348, 74190,55,0,1,350,
74021,3,1,2,1, 74201,3,1,2,1,
74031,2205,22,1,185, 74211,2208,22,1,186,
74041,2500,2206,17,2207, 74221,2500,2209,17,2210,
740515,2192,1,-1,1, 742315,2195,1,-1,1,
74065,2208,20,2209,4, 74245,2211,20,2212,4,
740714,69,0,118,0, 742514,69,0,118,0,
7408101,0,110,0,116, 7426101,0,110,0,116,
74090,95,0,53,0, 74270,95,0,54,0,
74101,347,1,3,1, 74281,349,1,3,1,
74112,1,1,2210,22, 74292,1,1,2213,22,
74121,184,1,2501,2211, 74301,185,1,2501,2214,
741317,2212,15,2192,1, 743117,2215,15,2195,1,
7414-1,1,5,2213,20, 7432-1,1,5,2216,20,
74152214,4,14,69,0, 74332217,4,14,69,0,
7416118,0,101,0,110, 7434118,0,101,0,110,
74170,116,0,95,0, 74350,116,0,95,0,
741852,0,1,346,1, 743653,0,1,348,1,
74193,1,2,1,1, 74373,1,2,1,1,
74202215,22,1,183,1, 74382218,22,1,184,1,
74212502,2216,17,2217,15, 74392502,2219,17,2220,15,
74222192,1,-1,1,5, 74402195,1,-1,1,5,
74232218,20,2219,4,14, 74412221,20,2222,4,14,
742469,0,118,0,101, 744269,0,118,0,101,
74250,110,0,116,0, 74430,110,0,116,0,
742695,0,51,0,1, 744495,0,52,0,1,
7427345,1,3,1,2, 7445347,1,3,1,2,
74281,1,2220,22,1, 74461,1,2223,22,1,
7429182,1,2503,2221,17, 7447183,1,2503,2224,17,
74302222,15,2192,1,-1, 74482225,15,2195,1,-1,
74311,5,2223,20,2224, 74491,5,2226,20,2227,
74324,14,69,0,118, 74504,14,69,0,118,
74330,101,0,110,0, 74510,101,0,110,0,
7434116,0,95,0,50, 7452116,0,95,0,51,
74350,1,344,1,3, 74530,1,346,1,3,
74361,2,1,1,2225, 74541,2,1,1,2228,
743722,1,181,1,2504, 745522,1,182,1,2504,
74382226,17,2227,15,2192, 74562229,17,2230,15,2195,
74391,-1,1,5,2228, 74571,-1,1,5,2231,
744020,2229,4,14,69, 745820,2232,4,14,69,
74410,118,0,101,0, 74590,118,0,101,0,
7442110,0,116,0,95, 7460110,0,116,0,95,
74430,49,0,1,343, 74610,50,0,1,345,
74441,3,1,2,1, 74621,3,1,2,1,
74451,2230,22,1,180, 74631,2233,22,1,181,
74461,2505,2231,16,0, 74641,2505,2234,17,2235,
7447469,1,217,2232,16, 746515,2195,1,-1,1,
74480,206,1,1756,2233, 74665,2236,20,2237,4,
744916,0,206,1,17, 746714,69,0,118,0,
74502234,19,163,1,17, 7468101,0,110,0,116,
74512235,5,134,1,1, 74690,95,0,49,0,
74522236,17,2237,15,2238, 74701,344,1,3,1,
74534,18,37,0,84, 74712,1,1,2238,22,
74540,121,0,112,0, 74721,180,1,2506,2239,
7455101,0,110,0,97, 747316,0,482,1,217,
74560,109,0,101,0, 74742240,16,0,203,1,
74571,-1,1,5,2239, 74751756,2241,16,0,203,
745820,2240,4,20,84, 74761,17,2242,19,163,
74771,17,2243,5,134,
74781,1,2244,17,2245,
747915,2246,4,18,37,
74800,84,0,121,0,
7481112,0,101,0,110,
74820,97,0,109,0,
7483101,0,1,-1,1,
74845,2247,20,2248,4,
748520,84,0,121,0,
7486112,0,101,0,110,
74870,97,0,109,0,
7488101,0,95,0,55,
74890,1,343,1,3,
74901,2,1,1,2249,
749122,1,179,1,2,
74922250,17,2251,15,2246,
74931,-1,1,5,2252,
749420,2253,4,20,84,
74590,121,0,112,0, 74950,121,0,112,0,
7460101,0,110,0,97, 7496101,0,110,0,97,
74610,109,0,101,0, 74970,109,0,101,0,
746295,0,55,0,1, 749895,0,54,0,1,
7463342,1,3,1,2, 7499342,1,3,1,2,
74641,1,2241,22,1, 75001,1,2254,22,1,
7465179,1,2,2242,17, 7501178,1,3,2255,17,
74662243,15,2238,1,-1, 75022256,15,2246,1,-1,
74671,5,2244,20,2245, 75031,5,2257,20,2258,
74684,20,84,0,121, 75044,20,84,0,121,
74690,112,0,101,0, 75050,112,0,101,0,
7470110,0,97,0,109, 7506110,0,97,0,109,
74710,101,0,95,0, 75070,101,0,95,0,
747254,0,1,341,1, 750853,0,1,341,1,
74733,1,2,1,1, 75093,1,2,1,1,
74742246,22,1,178,1, 75102259,22,1,177,1,
74753,2247,17,2248,15, 75114,2260,17,2261,15,
74762238,1,-1,1,5, 75122246,1,-1,1,5,
74772249,20,2250,4,20, 75132262,20,2263,4,20,
747884,0,121,0,112, 751484,0,121,0,112,
74790,101,0,110,0, 75150,101,0,110,0,
748097,0,109,0,101, 751697,0,109,0,101,
74810,95,0,53,0, 75170,95,0,52,0,
74821,340,1,3,1, 75181,340,1,3,1,
74832,1,1,2251,22, 75192,1,1,2264,22,
74841,177,1,4,2252, 75201,176,1,5,2265,
748517,2253,15,2238,1, 752117,2266,15,2246,1,
7486-1,1,5,2254,20, 7522-1,1,5,2267,20,
74872255,4,20,84,0, 75232268,4,20,84,0,
7488121,0,112,0,101, 7524121,0,112,0,101,
74890,110,0,97,0, 75250,110,0,97,0,
7490109,0,101,0,95, 7526109,0,101,0,95,
74910,52,0,1,339, 75270,51,0,1,339,
74921,3,1,2,1, 75281,3,1,2,1,
74931,2256,22,1,176, 75291,2269,22,1,175,
74941,5,2257,17,2258, 75301,6,2270,17,2271,
749515,2238,1,-1,1, 753115,2246,1,-1,1,
74965,2259,20,2260,4, 75325,2272,20,2273,4,
749720,84,0,121,0, 753320,84,0,121,0,
7498112,0,101,0,110, 7534112,0,101,0,110,
74990,97,0,109,0, 75350,97,0,109,0,
7500101,0,95,0,51, 7536101,0,95,0,50,
75010,1,338,1,3, 75370,1,338,1,3,
75021,2,1,1,2261, 75381,2,1,1,2274,
750322,1,175,1,6, 753922,1,174,1,7,
75042262,17,2263,15,2238, 75402275,17,2276,15,2246,
75051,-1,1,5,2264, 75411,-1,1,5,2277,
750620,2265,4,20,84, 754220,2278,4,20,84,
75070,121,0,112,0, 75430,121,0,112,0,
7508101,0,110,0,97, 7544101,0,110,0,97,
75090,109,0,101,0, 75450,109,0,101,0,
751095,0,50,0,1, 754695,0,49,0,1,
7511337,1,3,1,2, 7547337,1,3,1,2,
75121,1,2266,22,1, 75481,1,2279,22,1,
7513174,1,7,2267,17, 7549173,1,2518,2280,16,
75142268,15,2238,1,-1, 75500,499,1,9,1238,
75151,5,2269,20,2270, 75511,10,1893,1,262,
75164,20,84,0,121, 75521244,1,1267,1250,1,
75170,112,0,101,0, 75531521,1255,1,1773,2281,
7518110,0,97,0,109, 755416,0,261,1,2528,
75190,101,0,95,0, 75551927,1,19,1272,1,
752049,0,1,336,1, 755620,2282,16,0,161,
75213,1,2,1,1, 75571,2532,2283,17,2284,
75222271,22,1,173,1, 755815,2285,4,66,37,
75231514,1230,1,9,1235,
75241,10,1889,1,262,
75251241,1,1267,1247,1,
75262775,2272,16,0,792,
75271,1521,1252,1,1773,
75282273,16,0,264,1,
75292527,1895,1,19,1269,
75301,20,2274,16,0,
7531161,1,2531,2275,17,
75322276,15,2277,4,66,
753337,0,73,0,110,
75340,116,0,86,0,
7535101,0,99,0,86,
75360,101,0,99,0,
753765,0,114,0,103,
75380,117,0,109,0,
7539101,0,110,0,116,
75400,68,0,101,0,
754199,0,108,0,97,
75420,114,0,97,0,
7543116,0,105,0,111,
75440,110,0,76,0,
7545105,0,115,0,116,
75460,1,-1,1,5,
75472278,20,2279,4,68,
754873,0,110,0,116,
75490,86,0,101,0,
755099,0,86,0,101,
75510,99,0,65,0,
7552114,0,103,0,117,
75530,109,0,101,0,
7554110,0,116,0,68,
75550,101,0,99,0,
7556108,0,97,0,114,
75570,97,0,116,0,
7558105,0,111,0,110,
75590,76,0,105,0,
7560115,0,116,0,95,
75610,49,0,1,210,
75621,3,1,6,1,
75635,2280,22,1,46,
75641,2281,1276,1,525,
75651339,1,30,1904,1,
75661002,1715,1,283,1295,
75671,2546,2281,17,2282,
756815,2283,4,66,37,
75690,73,0,110,0, 75590,73,0,110,0,
7570116,0,82,0,111, 7560116,0,86,0,101,
75710,116,0,82,0, 75610,99,0,86,0,
7572111,0,116,0,65, 7562101,0,99,0,65,
75730,114,0,103,0, 75630,114,0,103,0,
7574117,0,109,0,101, 7564117,0,109,0,101,
75750,110,0,116,0, 75650,110,0,116,0,
@@ -7579,12 +7569,12 @@ public yyLSLSyntax
75790,105,0,111,0, 75690,105,0,111,0,
7580110,0,76,0,105, 7570110,0,76,0,105,
75810,115,0,116,0, 75710,115,0,116,0,
75821,-1,1,5,2284, 75721,-1,1,5,2286,
758320,2285,4,68,73, 757320,2287,4,68,73,
75840,110,0,116,0, 75740,110,0,116,0,
758582,0,111,0,116, 757586,0,101,0,99,
75860,82,0,111,0, 75760,86,0,101,0,
7587116,0,65,0,114, 757799,0,65,0,114,
75880,103,0,117,0, 75780,103,0,117,0,
7589109,0,101,0,110, 7579109,0,101,0,110,
75900,116,0,68,0, 75800,116,0,68,0,
@@ -7594,34 +7584,54 @@ public yyLSLSyntax
75940,111,0,110,0, 75840,111,0,110,0,
759576,0,105,0,115, 758576,0,105,0,115,
75960,116,0,95,0, 75860,116,0,95,0,
759749,0,1,209,1, 758749,0,1,211,1,
75983,1,6,1,5, 75883,1,6,1,5,
75992286,22,1,45,1, 75892288,22,1,46,1,
76002547,2287,16,0,519, 75902533,2289,16,0,518,
76011,1010,2288,16,0, 75911,30,1901,1,283,
7602701,1,40,1300,1, 75921299,1,2543,1906,1,
760341,1916,1,42,1920, 75932547,2290,17,2291,15,
76041,44,1306,1,2555, 75942292,4,66,37,0,
76052289,16,0,645,1, 759573,0,110,0,116,
76061260,1218,1,47,1307, 75960,82,0,111,0,
76071,48,1313,1,49, 7597116,0,82,0,111,
76081319,1,50,1324,1, 75980,116,0,65,0,
760951,1329,1,2562,2290, 7599114,0,103,0,117,
761017,2291,15,2292,4, 76000,109,0,101,0,
761154,37,0,73,0, 7601110,0,116,0,68,
7612110,0,116,0,65, 76020,101,0,99,0,
76130,114,0,103,0, 7603108,0,97,0,114,
7614117,0,109,0,101, 76040,97,0,116,0,
76150,110,0,116,0, 7605105,0,111,0,110,
761668,0,101,0,99, 76060,76,0,105,0,
76170,108,0,97,0, 7607115,0,116,0,1,
7618114,0,97,0,116, 7608-1,1,5,2293,20,
76190,105,0,111,0, 76092294,4,68,73,0,
7620110,0,76,0,105, 7610110,0,116,0,82,
76210,115,0,116,0, 76110,111,0,116,0,
76221,-1,1,5,2293, 761282,0,111,0,116,
762320,2294,4,56,73, 76130,65,0,114,0,
76240,110,0,116,0, 7614103,0,117,0,109,
76150,101,0,110,0,
7616116,0,68,0,101,
76170,99,0,108,0,
761897,0,114,0,97,
76190,116,0,105,0,
7620111,0,110,0,76,
76210,105,0,115,0,
7622116,0,95,0,49,
76230,1,210,1,3,
76241,6,1,5,2295,
762522,1,45,1,2548,
76262296,16,0,650,1,
76271010,2297,16,0,716,
76281,40,1304,1,41,
76291913,1,42,1917,1,
763044,1310,1,2555,2298,
763117,2299,15,2300,4,
763260,37,0,86,0,
7633101,0,99,0,116,
76340,111,0,114,0,
762565,0,114,0,103, 763565,0,114,0,103,
76260,117,0,109,0, 76360,117,0,109,0,
7627101,0,110,0,116, 7637101,0,110,0,116,
@@ -7631,16 +7641,30 @@ public yyLSLSyntax
7631116,0,105,0,111, 7641116,0,105,0,111,
76320,110,0,76,0, 76420,110,0,76,0,
7633105,0,115,0,116, 7643105,0,115,0,116,
76340,95,0,49,0, 76440,1,-1,1,5,
76351,207,1,3,1, 76452301,20,2302,4,62,
76362,1,1,2295,22, 764686,0,101,0,99,
76371,43,1,2563,2296, 76470,116,0,111,0,
763816,0,661,1,305, 7648114,0,65,0,114,
76391334,1,2576,2297,16, 76490,103,0,117,0,
76400,571,1,2570,2298, 7650109,0,101,0,110,
764117,2299,15,2300,4, 76510,116,0,68,0,
764254,37,0,75,0, 7652101,0,99,0,108,
7643101,0,121,0,65, 76530,97,0,114,0,
765497,0,116,0,105,
76550,111,0,110,0,
765676,0,105,0,115,
76570,116,0,95,0,
765849,0,1,209,1,
76593,1,2,1,1,
76602303,22,1,44,1,
76611260,1221,1,47,1311,
76621,48,1317,1,49,
76631323,1,50,1328,1,
766451,1333,1,2563,2304,
766517,2305,15,2306,4,
766654,37,0,73,0,
7667110,0,116,0,65,
76440,114,0,103,0, 76680,114,0,103,0,
7645117,0,109,0,101, 7669117,0,109,0,101,
76460,110,0,116,0, 76700,110,0,116,0,
@@ -7650,9 +7674,9 @@ public yyLSLSyntax
76500,105,0,111,0, 76740,105,0,111,0,
7651110,0,76,0,105, 7675110,0,76,0,105,
76520,115,0,116,0, 76760,115,0,116,0,
76531,-1,1,5,2301, 76771,-1,1,5,2307,
765420,2302,4,56,75, 767820,2308,4,56,73,
76550,101,0,121,0, 76790,110,0,116,0,
765665,0,114,0,103, 768065,0,114,0,103,
76570,117,0,109,0, 76810,117,0,109,0,
7658101,0,110,0,116, 7682101,0,110,0,116,
@@ -7663,23 +7687,26 @@ public yyLSLSyntax
76630,110,0,76,0, 76870,110,0,76,0,
7664105,0,115,0,116, 7688105,0,115,0,116,
76650,95,0,49,0, 76890,95,0,49,0,
76661,206,1,3,1, 76901,208,1,3,1,
76672,1,1,2303,22, 76912,1,1,2309,22,
76681,42,1,61,2304, 76921,43,1,305,1338,
766916,0,220,1,63, 76931,1514,1233,1,525,
76701345,1,66,1351,1, 76941343,1,61,2310,16,
767167,1356,1,68,1361, 76950,217,1,2572,2311,
76721,69,1366,1,70, 769616,0,689,1,63,
76731371,1,2581,1926,1, 76971349,1,66,1355,1,
767473,2305,16,0,230, 769867,1360,1,68,1365,
76751,74,1376,1,1013, 76991,69,1370,1,70,
76761381,1,2335,2306,16, 77001375,1,2582,1936,1,
76770,266,1,1332,1386, 770173,2312,16,0,227,
76781,1048,1462,1,2590, 77021,827,1457,1,1013,
76792307,16,0,774,1, 77031385,1,2335,2313,16,
768082,1403,1,1840,2308, 77040,263,1,1332,1390,
768116,0,338,1,2516, 77051,74,1380,1,2591,
76822309,17,2310,15,2311, 77062314,16,0,710,1,
770782,1407,1,2513,1886,
77081,1341,1424,1,2517,
77092315,17,2316,15,2317,
76834,66,37,0,75, 77104,66,37,0,75,
76840,101,0,121,0, 77110,101,0,121,0,
768573,0,110,0,116, 771273,0,110,0,116,
@@ -7694,7 +7721,7 @@ public yyLSLSyntax
76940,111,0,110,0, 77210,111,0,110,0,
769576,0,105,0,115, 772276,0,105,0,115,
76960,116,0,1,-1, 77230,116,0,1,-1,
76971,5,2312,20,2313, 77241,5,2318,20,2319,
76984,68,75,0,101, 77254,68,75,0,101,
76990,121,0,73,0, 77260,121,0,73,0,
7700110,0,116,0,73, 7727110,0,116,0,73,
@@ -7709,63 +7736,55 @@ public yyLSLSyntax
77090,110,0,76,0, 77360,110,0,76,0,
7710105,0,115,0,116, 7737105,0,115,0,116,
77110,95,0,49,0, 77380,95,0,49,0,
77121,211,1,3,1, 77391,212,1,3,1,
77136,1,5,2314,22, 77406,1,5,2320,22,
77141,47,1,2517,2315, 77411,47,1,328,1429,
771516,0,487,1,328, 77421,1303,1434,1,1096,
77161425,1,1303,1430,1, 77431439,1,93,1445,1,
77171096,1694,1,93,1435, 77441550,1450,1,2281,1279,
77181,1550,1440,1,827, 77451,2770,1925,1,352,
77191448,1,2532,2316,16, 77461475,1,2779,2321,16,
77200,628,1,1011,1224, 77470,797,1,107,1464,
77211,107,1455,1,1114, 77481,1114,1469,1,1048,
77221461,1,2542,1909,1, 77491470,1,1871,2322,16,
77231871,2317,16,0,348, 77500,353,1,1370,1578,
77241,1370,1570,1,1478, 77511,1478,1583,1,118,
77251575,1,118,1473,1, 77521481,1,1123,1486,1,
77261123,1478,1,371,1483, 7753371,1491,1,1377,1497,
77271,1377,1489,1,375, 77541,375,1502,1,1882,
77281494,1,1882,2318,16, 77552323,16,0,373,1,
77290,363,1,377,1499, 7756377,1507,1,2556,2324,
77301,352,1467,1,379, 775716,0,661,1,379,
77311504,1,1341,1420,1, 77581512,1,380,1517,1,
7732130,1532,1,2074,2319, 7759130,1540,1,2074,2325,
773316,0,641,1,373, 776016,0,652,1,373,
77341527,1,1012,2320,16, 77611535,1,2564,2326,16,
77350,703,1,380,1509, 77620,554,1,1011,1227,
77361,143,1537,1,1152, 77631,1012,2327,16,0,
77371543,1,1406,1548,1, 7764718,1,1840,2328,16,
77381159,1555,1,157,1560, 77650,343,1,143,1545,
77391,1413,1565,1,883, 77661,1152,1551,1,2577,
77401515,1,2512,1882,1, 77672329,16,0,696,1,
77411296,1290,1,172,1586, 77681406,1556,1,1159,1563,
77421,1665,1591,1,2766, 77691,157,1568,1,1413,
77431934,1,1939,2321,16, 77701573,1,883,1523,1,
77440,482,1,1188,1596, 77711094,2330,16,0,787,
77451,1442,1601,1,188, 77721,1296,1294,1,172,
77461635,1,942,1607,1, 77731595,1,1665,1600,1,
77471195,1613,1,1449,1618, 77741939,2331,16,0,494,
77481,1701,1623,1,447, 77751,1188,1605,1,1442,
77491628,1,1094,2322,16, 77761610,1,188,1644,1,
77500,785,1,205,1640, 7777942,1616,1,1195,1622,
77511,2554,2323,17,2324, 77781,1449,1627,1,1701,
775215,2325,4,60,37, 77791632,1,447,1637,1,
77530,86,0,101,0, 7780205,1649,1,2467,1942,
775499,0,116,0,111, 77811,464,1948,1,2197,
77550,114,0,65,0, 77822332,16,0,782,1,
7756114,0,103,0,117, 77831224,1654,1,223,1659,
77570,109,0,101,0, 77841,1730,1664,1,2571,
7758110,0,116,0,68, 77852333,17,2334,15,2335,
77590,101,0,99,0, 77864,54,37,0,75,
7760108,0,97,0,114, 77870,101,0,121,0,
77610,97,0,116,0,
7762105,0,111,0,110,
77630,76,0,105,0,
7764115,0,116,0,1,
7765-1,1,5,2326,20,
77662327,4,62,86,0,
7767101,0,99,0,116,
77680,111,0,114,0,
776965,0,114,0,103, 778865,0,114,0,103,
77700,117,0,109,0, 77890,117,0,109,0,
7771101,0,110,0,116, 7790101,0,110,0,116,
@@ -7775,2175 +7794,2120 @@ public yyLSLSyntax
7775116,0,105,0,111, 7794116,0,105,0,111,
77760,110,0,76,0, 77950,110,0,76,0,
7777105,0,115,0,116, 7796105,0,115,0,116,
77780,95,0,49,0, 77970,1,-1,1,5,
77791,208,1,3,1, 77982336,20,2337,4,56,
77802,1,1,2328,22, 779975,0,101,0,121,
77811,44,1,2467,1938, 78000,65,0,114,0,
77821,464,1944,1,2197, 7801103,0,117,0,109,
77832329,16,0,772,1, 78020,101,0,110,0,
77841224,1645,1,223,1650, 7803116,0,68,0,101,
77851,1730,1655,1,2571, 78040,99,0,108,0,
77862330,16,0,673,1, 780597,0,114,0,97,
7787477,1666,1,1231,1671, 78060,116,0,105,0,
77881,479,1676,1,480, 7807111,0,110,0,76,
77891681,1,1485,1687,1, 78080,105,0,115,0,
7790459,1949,1,476,1660, 7809116,0,95,0,49,
77911,242,1700,1,478, 78100,1,207,1,3,
77921705,1,481,1951,1, 78111,2,1,1,2338,
77931001,1710,1,2508,1956, 781222,1,42,1,477,
77941,18,2331,19,564, 78131675,1,1231,1680,1,
77951,18,2332,5,84, 7814479,1685,1,480,1690,
77961,1011,1224,1,1012, 78151,1485,1696,1,459,
77972333,16,0,562,1, 78161953,1,476,1669,1,
77981013,1381,1,262,1241, 7817242,1703,1,478,1708,
77991,1267,2334,16,0, 78181,481,1955,1,1001,
7800562,1,515,2335,16, 78191713,1,1002,1718,1,
78010,562,1,1521,2336, 78202509,1960,1,18,2339,
780216,0,562,1,525, 782119,574,1,18,2340,
78031339,1,2788,2337,16, 78225,84,1,1011,1227,
78040,562,1,283,1295, 78231,1012,2341,16,0,
78051,2299,2338,16,0, 7824572,1,1013,1385,1,
7806562,1,42,2339,16, 7825262,1244,1,1267,2342,
78070,562,1,40,1300, 782616,0,572,1,515,
78081,44,1306,1,47, 78272343,16,0,572,1,
78091307,1,1303,2340,16, 78281521,2344,16,0,572,
78100,562,1,1555,2341, 78291,525,1343,1,2792,
781116,0,562,1,50, 78302345,16,0,572,1,
78121324,1,48,1313,1, 7831283,1299,1,2299,2346,
781349,1319,1,51,1329, 783216,0,572,1,42,
78141,63,1345,1,305, 78332347,16,0,572,1,
78151334,1,66,1351,1, 783440,1304,1,44,1310,
781667,1356,1,68,1361, 78351,47,1311,1,1303,
78171,69,1366,1,70, 78362348,16,0,572,1,
78181371,1,73,2342,16, 78371555,2349,16,0,572,
78190,562,1,74,1376, 78381,50,1328,1,48,
78201,328,1425,1,1048, 78391317,1,49,1323,1,
78212343,16,0,562,1, 784051,1333,1,63,1349,
782282,2344,16,0,562, 78411,305,1338,1,66,
78231,1840,2345,16,0, 78421355,1,67,1360,1,
7824562,1,1591,2346,16, 784368,1365,1,69,1370,
78250,562,1,1341,2347, 78441,70,1375,1,73,
782616,0,562,1,1096, 78452350,16,0,572,1,
78271694,1,93,1435,1, 784674,1380,1,328,1429,
7828352,1467,1,107,2348, 78471,1048,2351,16,0,
782916,0,562,1,1114, 7848572,1,82,2352,16,
78301461,1,118,2349,16, 78490,572,1,1840,2353,
78310,562,1,1123,2350, 785016,0,572,1,1591,
783216,0,562,1,371, 78512354,16,0,572,1,
78331483,1,1628,2351,16, 78521341,2355,16,0,572,
78340,562,1,375,1494, 78531,1096,1439,1,93,
78351,1882,2352,16,0, 78541445,1,352,1475,1,
7836562,1,377,1499,1, 7855107,2356,16,0,572,
7837379,1504,1,380,1509, 78561,1114,1469,1,118,
78381,883,2353,16,0, 78572357,16,0,572,1,
7839562,1,373,1527,1, 78581123,2358,16,0,572,
7840130,2354,16,0,562, 78591,371,1491,1,1628,
78411,143,2355,16,0, 78602359,16,0,572,1,
7842562,1,387,2356,16, 7861375,1502,1,1882,2360,
78430,562,1,1159,2357, 786216,0,572,1,377,
784416,0,562,1,157, 78631507,1,379,1512,1,
78452358,16,0,562,1, 7864380,1517,1,883,2361,
78461413,2359,16,0,562, 786516,0,572,1,373,
78471,1665,2360,16,0, 78661535,1,130,2362,16,
7848562,1,412,2361,16, 78670,572,1,143,2363,
78490,562,1,1377,2362, 786816,0,572,1,387,
785016,0,562,1,172, 78692364,16,0,572,1,
78512363,16,0,562,1, 78701159,2365,16,0,572,
78521939,2364,16,0,562, 78711,157,2366,16,0,
78531,437,2365,16,0, 7872572,1,1413,2367,16,
7854562,1,188,2366,16, 78730,572,1,1665,2368,
78550,562,1,942,2367, 787416,0,572,1,412,
785616,0,562,1,1195, 78752369,16,0,572,1,
78572368,16,0,562,1, 78761377,2370,16,0,572,
78581449,2369,16,0,562, 78771,172,2371,16,0,
78591,1701,2370,16,0, 7878572,1,1939,2372,16,
7860562,1,447,1628,1, 78790,572,1,437,2373,
7861205,2371,16,0,562, 788016,0,572,1,188,
78621,827,2372,16,0, 78812374,16,0,572,1,
7863562,1,223,2373,16, 7882942,2375,16,0,572,
78640,562,1,476,1660, 78831,1195,2376,16,0,
78651,477,1666,1,1231, 7884572,1,1449,2377,16,
78662374,16,0,562,1, 78850,572,1,1701,2378,
7867479,1676,1,480,1681, 788616,0,572,1,447,
78681,1485,2375,16,0, 78871637,1,205,2379,16,
7869562,1,1737,2376,16, 78880,572,1,827,2380,
78700,562,1,242,2377, 788916,0,572,1,223,
787116,0,562,1,478, 78902381,16,0,572,1,
78721705,1,1001,1710,1, 7891476,1669,1,477,1675,
78731002,1715,1,19,2378, 78921,1231,2382,16,0,
787419,254,1,19,2379, 7893572,1,479,1685,1,
78755,176,1,256,2380, 7894480,1690,1,1485,2383,
787616,0,252,1,1261, 789516,0,572,1,1737,
78772381,16,0,252,1, 78962384,16,0,572,1,
78781011,1224,1,1012,2382, 7897242,2385,16,0,572,
787916,0,521,1,2458, 78981,478,1708,1,1001,
7880998,1,262,1241,1, 78991713,1,1002,1718,1,
78811267,2383,16,0,521, 790019,2386,19,251,1,
78821,2021,840,1,1521, 790119,2387,5,176,1,
78832384,16,0,521,1, 7902942,2388,16,0,537,
78841775,2385,16,0,252, 79031,256,2389,16,0,
78851,2029,847,1,2030, 7904249,1,1261,2390,16,
7886853,1,2031,858,1, 79050,249,1,1011,1227,
78872032,863,1,2033,868, 79061,1012,2391,16,0,
78881,277,2386,16,0, 7907537,1,2458,1001,1,
7889252,1,2788,2387,16, 7908262,1244,1,1267,2392,
78900,521,1,2037,879, 790916,0,537,1,2021,
78911,2039,884,1,32, 7910843,1,1521,2393,16,
78922388,16,0,252,1, 79110,537,1,1775,2394,
78932464,1021,1,2293,2389, 791216,0,249,1,2029,
789416,0,252,1,2043, 7913850,1,2030,856,1,
7895896,1,2045,901,1, 79142031,861,1,2032,866,
78962299,2390,16,0,521, 79151,2786,2395,16,0,
78971,41,2391,16,0, 7916249,1,277,2396,16,
7898252,1,42,2392,16, 79170,249,1,2035,877,
78990,521,1,40,1300, 79181,2037,882,1,2792,
79001,44,1306,1,43, 79192397,16,0,537,1,
79012393,16,0,252,1, 792032,2398,16,0,249,
79021804,2394,16,0,252, 79211,2464,1024,1,2293,
79031,48,1313,1,49, 79222399,16,0,249,1,
79041319,1,47,1307,1, 79232043,899,1,2045,904,
790551,1329,1,52,2395, 79241,2299,2400,16,0,
790616,0,252,1,50, 7925537,1,41,2401,16,
79071324,1,305,1334,1, 79260,249,1,42,2402,
79081096,1694,1,1515,2396, 792716,0,537,1,40,
790916,0,252,1,2318, 79281304,1,44,1310,1,
79102397,16,0,252,1, 792943,2403,16,0,249,
7911283,1295,1,63,1345, 79301,1804,2404,16,0,
79121,66,1351,1,67, 7931249,1,48,1317,1,
79131356,1,68,1361,1, 793249,1323,1,47,1311,
791469,1366,1,70,1371, 79331,51,1333,1,52,
79151,71,2398,16,0, 79342405,16,0,249,1,
7916252,1,73,2399,16, 793550,1328,1,305,1338,
79170,521,1,74,1376, 79361,1096,1439,1,1515,
79181,1013,1381,1,76, 79372406,16,0,249,1,
79192400,16,0,252,1, 79382318,2407,16,0,249,
79201834,2401,16,0,252, 79391,283,1299,1,63,
79211,2337,2402,16,0, 79401349,1,66,1355,1,
7922252,1,79,2403,16, 794167,1360,1,68,1365,
79230,252,1,1335,2404, 79421,69,1370,1,70,
792416,0,252,1,299, 79431375,1,71,2408,16,
79252405,16,0,252,1, 79440,249,1,73,2409,
792682,2406,16,0,521, 794516,0,537,1,74,
79271,1840,2407,16,0, 79461380,1,1013,1385,1,
7928521,1,1297,2408,16, 794776,2410,16,0,249,
79290,252,1,85,2409, 79481,1834,2411,16,0,
793016,0,252,1,1341, 7949249,1,2337,2412,16,
79312410,16,0,521,1, 79500,249,1,79,2413,
793289,2411,16,0,252, 795116,0,249,1,1335,
79331,1303,2412,16,0, 79522414,16,0,249,1,
7934521,1,2035,874,1, 7953299,2415,16,0,249,
793593,1435,1,322,2413, 79541,82,2416,16,0,
793616,0,252,1,97, 7955537,1,1840,2417,16,
79372414,16,0,252,1, 79560,537,1,1297,2418,
79382041,890,1,1555,2415, 795716,0,249,1,85,
793916,0,521,1,827, 79582419,16,0,249,1,
79402416,16,0,521,1, 79591341,2420,16,0,537,
7941102,2417,16,0,252, 79601,89,2421,16,0,
79421,1860,943,1,1803, 7961249,1,1303,2422,16,
7943909,1,2364,949,1, 79620,537,1,509,2423,
7944107,2418,16,0,521, 796316,0,249,1,93,
79451,509,2419,16,0, 79641445,1,322,2424,16,
7946252,1,1114,1461,1, 79650,249,1,2039,887,
7947112,2420,16,0,252, 79661,97,2425,16,0,
79481,1117,2421,16,0, 7967249,1,2041,893,1,
7949252,1,352,1467,1, 79681555,2426,16,0,537,
79501873,958,1,118,2422, 79691,827,2427,16,0,
795116,0,521,1,1123, 7970537,1,102,2428,16,
79522423,16,0,521,1, 79710,249,1,1860,946,
7953371,1483,1,515,2424, 79721,1803,912,1,2364,
795416,0,521,1,1377, 7973952,1,107,2429,16,
79552425,16,0,521,1, 79740,537,1,1114,1469,
7956124,2426,16,0,252, 79751,112,2430,16,0,
79571,1882,2427,16,0, 7976249,1,1117,2431,16,
7958521,1,377,1499,1, 79770,249,1,352,1475,
7959379,1504,1,380,1509, 79781,1873,961,1,118,
79601,130,2428,16,0, 79792432,16,0,537,1,
7961521,1,346,2429,16, 79801123,2433,16,0,537,
79620,252,1,2075,2430, 79811,371,1491,1,515,
796316,0,252,1,373, 79822434,16,0,537,1,
79641527,1,387,2431,16, 79831377,2435,16,0,537,
79650,521,1,137,2432, 79841,124,2436,16,0,
796616,0,252,1,143, 7985249,1,1882,2437,16,
79672433,16,0,521,1, 79860,537,1,377,1507,
79681901,2434,16,0,252, 79871,379,1512,1,380,
79691,1048,2435,16,0, 79881517,1,130,2438,16,
7970521,1,1153,2436,16, 79890,537,1,346,2439,
79710,252,1,375,1494, 799016,0,249,1,2075,
79721,151,2437,16,0, 79912440,16,0,249,1,
7973252,1,1407,2438,16, 7992373,1535,1,387,2441,
79740,252,1,1659,2439, 799316,0,537,1,137,
797516,0,252,1,2413, 79942442,16,0,249,1,
79762440,16,0,252,1, 7995143,2443,16,0,537,
79771159,2441,16,0,521, 79961,1901,2444,16,0,
79781,381,2442,16,0, 7997249,1,1048,2445,16,
7979252,1,157,2443,16, 79980,537,1,1153,2446,
79800,521,1,1413,2444, 799916,0,249,1,375,
798116,0,521,1,883, 80001502,1,151,2447,16,
79822445,16,0,521,1, 80010,249,1,1407,2448,
79831371,2446,16,0,252, 800216,0,249,1,1659,
79841,328,1425,1,2105, 80032449,16,0,249,1,
7985936,1,2106,2447,16, 80042413,2450,16,0,249,
79860,252,1,166,2448, 80051,1159,2451,16,0,
798716,0,252,1,525, 8006537,1,381,2452,16,
79882449,16,0,252,1, 80070,249,1,157,2453,
79891622,2450,16,0,252, 800816,0,537,1,1413,
79901,406,2451,16,0, 80092454,16,0,537,1,
7991252,1,1574,921,1, 8010883,2455,16,0,537,
7992172,2452,16,0,521, 80111,1371,2456,16,0,
79931,1931,983,1,412, 8012249,1,328,1429,1,
79942453,16,0,521,1, 80132105,939,1,2106,2457,
79951933,2454,16,0,252, 801416,0,249,1,166,
79961,1876,2455,16,0, 80152458,16,0,249,1,
7997252,1,431,2456,16, 8016525,2459,16,0,249,
79980,252,1,1585,2457, 80171,1622,2460,16,0,
799916,0,252,1,182, 8018249,1,406,2461,16,
80002458,16,0,252,1, 80190,249,1,1574,924,
80011628,2459,16,0,521, 80201,172,2462,16,0,
80021,1189,2460,16,0, 8021537,1,1931,986,1,
8003252,1,437,2461,16, 8022412,2463,16,0,537,
80040,521,1,1591,2462, 80231,1933,2464,16,0,
800516,0,521,1,188, 8024249,1,1876,2465,16,
80062463,16,0,521,1, 80250,249,1,431,2466,
80071695,2464,16,0,252, 802616,0,249,1,1585,
80081,2198,2465,16,0, 80272467,16,0,249,1,
8009252,1,1195,2466,16, 8028182,2468,16,0,249,
80100,521,1,1449,2467, 80291,1628,2469,16,0,
801116,0,521,1,1701, 8030537,1,1189,2470,16,
80122468,16,0,521,1, 80310,249,1,437,2471,
8013447,2469,16,0,252, 803216,0,537,1,1591,
80141,2782,2470,16,0, 80332472,16,0,537,1,
8015252,1,199,2471,16, 8034188,2473,16,0,537,
80160,252,1,2459,1004, 80351,1695,2474,16,0,
80171,1958,2472,16,0, 8036249,1,2198,2475,16,
8018252,1,2462,1011,1, 80370,249,1,1195,2476,
80191657,1016,1,205,2473, 803816,0,537,1,1449,
802016,0,521,1,459, 80392477,16,0,537,1,
80212474,16,0,252,1, 80401701,2478,16,0,537,
8022462,2475,16,0,252, 80411,447,2479,16,0,
80231,1665,2476,16,0, 8042249,1,199,2480,16,
8024521,1,217,2477,16, 80430,249,1,2459,1007,
80250,252,1,2227,1030, 80441,1958,2481,16,0,
80261,942,2478,16,0, 8045249,1,2462,1014,1,
8027521,1,1225,2479,16, 80461657,1019,1,205,2482,
80280,252,1,223,2480, 804716,0,537,1,459,
802916,0,521,1,1479, 80482483,16,0,249,1,
80302481,16,0,252,1, 8049462,2484,16,0,249,
80311731,2482,16,0,252, 80501,1665,2485,16,0,
80321,477,1666,1,1231, 8051537,1,217,2486,16,
80332483,16,0,521,1, 80520,249,1,2227,1033,
8034479,1676,1,480,1681, 80531,2033,871,1,1225,
80351,1485,2484,16,0, 80542487,16,0,249,1,
8036521,1,1737,2485,16, 8055223,2488,16,0,537,
80370,521,1,1989,1038, 80561,1479,2489,16,0,
80381,1990,2486,16,0, 8057249,1,1731,2490,16,
8039252,1,1443,2487,16, 80580,249,1,477,1675,
80400,252,1,236,2488, 80591,1231,2491,16,0,
804116,0,252,1,2136, 8060537,1,479,1685,1,
8042965,1,476,1660,1, 8061480,1690,1,1485,2492,
8043242,2489,16,0,521, 806216,0,537,1,1737,
80441,478,1705,1,1939, 80632493,16,0,537,1,
80452490,16,0,521,1, 80641989,1041,1,1990,2494,
80461001,1710,1,1002,1715, 806516,0,249,1,1443,
80471,1756,2491,16,0, 80662495,16,0,249,1,
8048252,1,20,2492,19, 8067236,2496,16,0,249,
8049496,1,20,2493,5, 80681,2136,968,1,476,
805084,1,1011,1224,1, 80691669,1,242,2497,16,
80511012,2494,16,0,494, 80700,537,1,478,1708,
80521,1013,1381,1,262, 80711,1939,2498,16,0,
80531241,1,1267,2495,16, 8072537,1,1001,1713,1,
80540,494,1,515,2496, 80731002,1718,1,1756,2499,
805516,0,494,1,1521, 807416,0,249,1,20,
80562497,16,0,494,1, 80752500,19,510,1,20,
8057525,1339,1,2788,2498, 80762501,5,84,1,1011,
805816,0,494,1,283, 80771227,1,1012,2502,16,
80591295,1,2299,2499,16, 80780,508,1,1013,1385,
80600,494,1,42,2500, 80791,262,1244,1,1267,
806116,0,494,1,40, 80802503,16,0,508,1,
80621300,1,44,1306,1, 8081515,2504,16,0,508,
806347,1307,1,1303,2501, 80821,1521,2505,16,0,
806416,0,494,1,1555, 8083508,1,525,1343,1,
80652502,16,0,494,1, 80842792,2506,16,0,508,
806650,1324,1,48,1313, 80851,283,1299,1,2299,
80671,49,1319,1,51, 80862507,16,0,508,1,
80681329,1,63,1345,1, 808742,2508,16,0,508,
8069305,1334,1,66,1351, 80881,40,1304,1,44,
80701,67,1356,1,68, 80891310,1,47,1311,1,
80711361,1,69,1366,1, 80901303,2509,16,0,508,
807270,1371,1,73,2503, 80911,1555,2510,16,0,
807316,0,494,1,74, 8092508,1,50,1328,1,
80741376,1,328,2504,16, 809348,1317,1,49,1323,
80750,494,1,1048,2505, 80941,51,1333,1,63,
807616,0,494,1,82, 80951349,1,305,1338,1,
80772506,16,0,494,1, 809666,1355,1,67,1360,
80781840,2507,16,0,494, 80971,68,1365,1,69,
80791,1591,2508,16,0, 80981370,1,70,1375,1,
8080494,1,1341,2509,16, 809973,2511,16,0,508,
80810,494,1,1096,1694, 81001,74,1380,1,328,
80821,93,1435,1,352, 81012512,16,0,508,1,
80832510,16,0,494,1, 81021048,2513,16,0,508,
8084107,2511,16,0,494, 81031,82,2514,16,0,
80851,1114,1461,1,118, 8104508,1,1840,2515,16,
80862512,16,0,494,1, 81050,508,1,1591,2516,
80871123,2513,16,0,494, 810616,0,508,1,1341,
80881,371,1483,1,1628, 81072517,16,0,508,1,
80892514,16,0,494,1, 81081096,1439,1,93,1445,
8090375,1494,1,1882,2515, 81091,352,2518,16,0,
809116,0,494,1,377, 8110508,1,107,2519,16,
80921499,1,379,1504,1, 81110,508,1,1114,1469,
8093380,1509,1,883,2516, 81121,118,2520,16,0,
809416,0,494,1,373, 8113508,1,1123,2521,16,
80951527,1,130,2517,16, 81140,508,1,371,1491,
80960,494,1,143,2518, 81151,1628,2522,16,0,
809716,0,494,1,387, 8116508,1,375,1502,1,
80982519,16,0,494,1, 81171882,2523,16,0,508,
80991159,2520,16,0,494, 81181,377,1507,1,379,
81001,157,2521,16,0, 81191512,1,380,1517,1,
8101494,1,1413,2522,16, 8120883,2524,16,0,508,
81020,494,1,1665,2523, 81211,373,1535,1,130,
810316,0,494,1,412, 81222525,16,0,508,1,
81042524,16,0,494,1, 8123143,2526,16,0,508,
81051377,2525,16,0,494, 81241,387,2527,16,0,
81061,172,2526,16,0, 8125508,1,1159,2528,16,
8107494,1,1939,2527,16, 81260,508,1,157,2529,
81080,494,1,437,2528, 812716,0,508,1,1413,
810916,0,494,1,188, 81282530,16,0,508,1,
81102529,16,0,494,1, 81291665,2531,16,0,508,
8111942,2530,16,0,494, 81301,412,2532,16,0,
81121,1195,2531,16,0, 8131508,1,1377,2533,16,
8113494,1,1449,2532,16, 81320,508,1,172,2534,
81140,494,1,1701,2533, 813316,0,508,1,1939,
811516,0,494,1,447, 81342535,16,0,508,1,
81161628,1,205,2534,16, 8135437,2536,16,0,508,
81170,494,1,827,2535, 81361,188,2537,16,0,
811816,0,494,1,223, 8137508,1,942,2538,16,
81192536,16,0,494,1, 81380,508,1,1195,2539,
8120476,1660,1,477,1666, 813916,0,508,1,1449,
81211,1231,2537,16,0, 81402540,16,0,508,1,
8122494,1,479,1676,1, 81411701,2541,16,0,508,
8123480,1681,1,1485,2538, 81421,447,1637,1,205,
812416,0,494,1,1737, 81432542,16,0,508,1,
81252539,16,0,494,1, 8144827,2543,16,0,508,
8126242,2540,16,0,494, 81451,223,2544,16,0,
81271,478,1705,1,1001, 8146508,1,476,1669,1,
81281710,1,1002,1715,1, 8147477,1675,1,1231,2545,
812921,2541,19,468,1, 814816,0,508,1,479,
813021,2542,5,84,1, 81491685,1,480,1690,1,
81311011,1224,1,1012,2543, 81501485,2546,16,0,508,
813216,0,466,1,1013, 81511,1737,2547,16,0,
81331381,1,262,1241,1, 8152508,1,242,2548,16,
81341267,2544,16,0,466, 81530,508,1,478,1708,
81351,515,2545,16,0, 81541,1001,1713,1,1002,
8136466,1,1521,2546,16, 81551718,1,21,2549,19,
81370,466,1,525,1339, 8156478,1,21,2550,5,
81381,2788,2547,16,0, 815784,1,1011,1227,1,
8139466,1,283,1295,1, 81581012,2551,16,0,476,
81402299,2548,16,0,466, 81591,1013,1385,1,262,
81411,42,2549,16,0, 81601244,1,1267,2552,16,
8142466,1,40,1300,1, 81610,476,1,515,2553,
814344,1306,1,47,1307, 816216,0,476,1,1521,
81441,1303,2550,16,0, 81632554,16,0,476,1,
8145466,1,1555,2551,16, 8164525,1343,1,2792,2555,
81460,466,1,50,1324, 816516,0,476,1,283,
81471,48,1313,1,49, 81661299,1,2299,2556,16,
81481319,1,51,1329,1, 81670,476,1,42,2557,
814963,1345,1,305,1334, 816816,0,476,1,40,
81501,66,1351,1,67, 81691304,1,44,1310,1,
81511356,1,68,1361,1, 817047,1311,1,1303,2558,
815269,1366,1,70,1371, 817116,0,476,1,1555,
81531,73,2552,16,0, 81722559,16,0,476,1,
8154466,1,74,1376,1, 817350,1328,1,48,1317,
8155328,2553,16,0,466, 81741,49,1323,1,51,
81561,1048,2554,16,0, 81751333,1,63,1349,1,
8157466,1,82,2555,16, 8176305,1338,1,66,1355,
81580,466,1,1840,2556, 81771,67,1360,1,68,
815916,0,466,1,1591, 81781365,1,69,1370,1,
81602557,16,0,466,1, 817970,1375,1,73,2560,
81611341,2558,16,0,466, 818016,0,476,1,74,
81621,1096,1694,1,93, 81811380,1,328,2561,16,
81631435,1,352,2559,16, 81820,476,1,1048,2562,
81640,466,1,107,2560, 818316,0,476,1,82,
816516,0,466,1,1114, 81842563,16,0,476,1,
81661461,1,118,2561,16, 81851840,2564,16,0,476,
81670,466,1,1123,2562, 81861,1591,2565,16,0,
816816,0,466,1,371, 8187476,1,1341,2566,16,
81691483,1,1628,2563,16, 81880,476,1,1096,1439,
81700,466,1,375,1494, 81891,93,1445,1,352,
81711,1882,2564,16,0, 81902567,16,0,476,1,
8172466,1,377,1499,1, 8191107,2568,16,0,476,
8173379,1504,1,380,1509, 81921,1114,1469,1,118,
81741,883,2565,16,0, 81932569,16,0,476,1,
8175466,1,373,1527,1, 81941123,2570,16,0,476,
8176130,2566,16,0,466, 81951,371,1491,1,1628,
81771,143,2567,16,0, 81962571,16,0,476,1,
8178466,1,387,2568,16, 8197375,1502,1,1882,2572,
81790,466,1,1159,2569, 819816,0,476,1,377,
818016,0,466,1,157, 81991507,1,379,1512,1,
81812570,16,0,466,1, 8200380,1517,1,883,2573,
81821413,2571,16,0,466, 820116,0,476,1,373,
81831,1665,2572,16,0, 82021535,1,130,2574,16,
8184466,1,412,2573,16, 82030,476,1,143,2575,
81850,466,1,1377,2574, 820416,0,476,1,387,
818616,0,466,1,172, 82052576,16,0,476,1,
81872575,16,0,466,1, 82061159,2577,16,0,476,
81881939,2576,16,0,466, 82071,157,2578,16,0,
81891,437,2577,16,0, 8208476,1,1413,2579,16,
8190466,1,188,2578,16, 82090,476,1,1665,2580,
81910,466,1,942,2579, 821016,0,476,1,412,
819216,0,466,1,1195, 82112581,16,0,476,1,
81932580,16,0,466,1, 82121377,2582,16,0,476,
81941449,2581,16,0,466, 82131,172,2583,16,0,
81951,1701,2582,16,0, 8214476,1,1939,2584,16,
8196466,1,447,1628,1, 82150,476,1,437,2585,
8197205,2583,16,0,466, 821616,0,476,1,188,
81981,827,2584,16,0, 82172586,16,0,476,1,
8199466,1,223,2585,16, 8218942,2587,16,0,476,
82000,466,1,476,1660, 82191,1195,2588,16,0,
82011,477,1666,1,1231, 8220476,1,1449,2589,16,
82022586,16,0,466,1, 82210,476,1,1701,2590,
8203479,1676,1,480,1681, 822216,0,476,1,447,
82041,1485,2587,16,0, 82231637,1,205,2591,16,
8205466,1,1737,2588,16, 82240,476,1,827,2592,
82060,466,1,242,2589, 822516,0,476,1,223,
820716,0,466,1,478, 82262593,16,0,476,1,
82081705,1,1001,1710,1, 8227476,1669,1,477,1675,
82091002,1715,1,22,2590, 82281,1231,2594,16,0,
821019,419,1,22,2591, 8229476,1,479,1685,1,
82115,84,1,1011,1224, 8230480,1690,1,1485,2595,
82121,1012,2592,16,0, 823116,0,476,1,1737,
8213417,1,1013,1381,1, 82322596,16,0,476,1,
8214262,1241,1,1267,2593, 8233242,2597,16,0,476,
821516,0,417,1,515, 82341,478,1708,1,1001,
82162594,16,0,417,1, 82351713,1,1002,1718,1,
82171521,2595,16,0,417, 823622,2598,19,429,1,
82181,525,1339,1,2788, 823722,2599,5,84,1,
82192596,16,0,417,1, 82381011,1227,1,1012,2600,
8220283,1295,1,2299,2597, 823916,0,427,1,1013,
822116,0,417,1,42, 82401385,1,262,1244,1,
82222598,16,0,417,1, 82411267,2601,16,0,427,
822340,1300,1,44,1306, 82421,515,2602,16,0,
82241,47,1307,1,1303, 8243427,1,1521,2603,16,
82252599,16,0,417,1, 82440,427,1,525,1343,
82261555,2600,16,0,417, 82451,2792,2604,16,0,
82271,50,1324,1,48, 8246427,1,283,1299,1,
82281313,1,49,1319,1, 82472299,2605,16,0,427,
822951,1329,1,63,1345, 82481,42,2606,16,0,
82301,305,1334,1,66, 8249427,1,40,1304,1,
82311351,1,67,1356,1, 825044,1310,1,47,1311,
823268,1361,1,69,1366, 82511,1303,2607,16,0,
82331,70,1371,1,73, 8252427,1,1555,2608,16,
82342601,16,0,417,1, 82530,427,1,50,1328,
823574,1376,1,328,2602, 82541,48,1317,1,49,
823616,0,417,1,1048, 82551323,1,51,1333,1,
82372603,16,0,417,1, 825663,1349,1,305,1338,
823882,2604,16,0,417, 82571,66,1355,1,67,
82391,1840,2605,16,0, 82581360,1,68,1365,1,
8240417,1,1591,2606,16, 825969,1370,1,70,1375,
82410,417,1,1341,2607, 82601,73,2609,16,0,
824216,0,417,1,1096, 8261427,1,74,1380,1,
82431694,1,93,1435,1, 8262328,2610,16,0,427,
8244352,2608,16,0,417, 82631,1048,2611,16,0,
82451,107,2609,16,0, 8264427,1,82,2612,16,
8246417,1,1114,1461,1, 82650,427,1,1840,2613,
8247118,2610,16,0,417, 826616,0,427,1,1591,
82481,1123,2611,16,0, 82672614,16,0,427,1,
8249417,1,371,1483,1, 82681341,2615,16,0,427,
82501628,2612,16,0,417, 82691,1096,1439,1,93,
82511,375,1494,1,1882, 82701445,1,352,2616,16,
82522613,16,0,417,1, 82710,427,1,107,2617,
8253377,1499,1,379,1504, 827216,0,427,1,1114,
82541,380,1509,1,883, 82731469,1,118,2618,16,
82552614,16,0,417,1, 82740,427,1,1123,2619,
8256373,1527,1,130,2615, 827516,0,427,1,371,
825716,0,417,1,143, 82761491,1,1628,2620,16,
82582616,16,0,417,1, 82770,427,1,375,1502,
8259387,2617,16,0,417, 82781,1882,2621,16,0,
82601,1159,2618,16,0, 8279427,1,377,1507,1,
8261417,1,157,2619,16, 8280379,1512,1,380,1517,
82620,417,1,1413,2620, 82811,883,2622,16,0,
826316,0,417,1,1665, 8282427,1,373,1535,1,
82642621,16,0,417,1, 8283130,2623,16,0,427,
8265412,2622,16,0,417, 82841,143,2624,16,0,
82661,1377,2623,16,0, 8285427,1,387,2625,16,
8267417,1,172,2624,16, 82860,427,1,1159,2626,
82680,417,1,1939,2625, 828716,0,427,1,157,
826916,0,417,1,437, 82882627,16,0,427,1,
82702626,16,0,417,1, 82891413,2628,16,0,427,
8271188,2627,16,0,417, 82901,1665,2629,16,0,
82721,942,2628,16,0, 8291427,1,412,2630,16,
8273417,1,1195,2629,16, 82920,427,1,1377,2631,
82740,417,1,1449,2630, 829316,0,427,1,172,
827516,0,417,1,1701, 82942632,16,0,427,1,
82762631,16,0,417,1, 82951939,2633,16,0,427,
8277447,1628,1,205,2632, 82961,437,2634,16,0,
827816,0,417,1,827, 8297427,1,188,2635,16,
82792633,16,0,417,1, 82980,427,1,942,2636,
8280223,2634,16,0,417, 829916,0,427,1,1195,
82811,476,1660,1,477, 83002637,16,0,427,1,
82821666,1,1231,2635,16, 83011449,2638,16,0,427,
82830,417,1,479,1676, 83021,1701,2639,16,0,
82841,480,1681,1,1485, 8303427,1,447,1637,1,
82852636,16,0,417,1, 8304205,2640,16,0,427,
82861737,2637,16,0,417, 83051,827,2641,16,0,
82871,242,2638,16,0, 8306427,1,223,2642,16,
8288417,1,478,1705,1, 83070,427,1,476,1669,
82891001,1710,1,1002,1715, 83081,477,1675,1,1231,
82901,23,2639,19,582, 83092643,16,0,427,1,
82911,23,2640,5,38, 8310479,1685,1,480,1690,
82921,1901,2641,16,0, 83111,1485,2644,16,0,
8293580,1,2075,2642,16, 8312427,1,1737,2645,16,
82940,580,1,1860,943, 83130,427,1,242,2646,
82951,1803,909,1,1804, 831416,0,427,1,478,
82962643,16,0,580,1, 83151708,1,1001,1713,1,
82972413,2644,16,0,580, 83161002,1718,1,23,2647,
82981,2198,2645,16,0, 831719,590,1,23,2648,
8299580,1,1873,958,1, 83185,38,1,1901,2649,
83001657,1016,1,1989,1038, 831916,0,588,1,2075,
83011,1990,2646,16,0, 83202650,16,0,588,1,
8302580,1,1775,2647,16, 83211860,946,1,1803,912,
83030,580,1,32,2648, 83221,1804,2651,16,0,
830416,0,580,1,2105, 8323588,1,2413,2652,16,
8305936,1,2106,2649,16, 83240,588,1,2198,2653,
83060,580,1,2364,949, 832516,0,588,1,1873,
83071,2227,1030,1,2337, 8326961,1,1657,1019,1,
83082650,16,0,580,1, 83271989,1041,1,1990,2654,
83092021,840,1,2458,998, 832816,0,588,1,1775,
83101,2459,1004,1,2462, 83292655,16,0,588,1,
83111011,1,2136,965,1, 833032,2656,16,0,588,
83122464,1021,1,2029,847, 83311,2105,939,1,2106,
83131,2030,853,1,2031, 83322657,16,0,588,1,
8314858,1,2032,863,1, 83332364,952,1,2227,1033,
83152033,868,1,2035,874, 83341,2337,2658,16,0,
83161,2037,879,1,2039, 8335588,1,2021,843,1,
8317884,1,1931,983,1, 83362458,1001,1,2459,1007,
83182041,890,1,2043,896, 83371,2462,1014,1,2136,
83191,2045,901,1,1574, 8338968,1,2464,1024,1,
8320921,1,1958,2651,16, 83392029,850,1,2030,856,
83210,580,1,24,2652, 83401,2031,861,1,2032,
832219,196,1,24,2653, 8341866,1,2033,871,1,
83235,5,1,44,2654, 83422035,877,1,2037,882,
832416,0,194,1,377, 83431,2039,887,1,1931,
83252655,16,0,618,1, 8344986,1,2041,893,1,
832640,2656,16,0,796, 83452043,899,1,2045,904,
83271,63,2657,16,0, 83461,1574,924,1,1958,
8328222,1,373,2658,16, 83472659,16,0,588,1,
83290,614,1,25,2659, 834824,2660,19,193,1,
833019,324,1,25,2660, 834924,2661,5,5,1,
83315,177,1,256,2661, 835044,2662,16,0,191,
833216,0,623,1,1261, 83511,377,2663,16,0,
83332662,16,0,623,1, 8352626,1,40,2664,16,
83341011,1224,1,1012,2663, 83530,799,1,63,2665,
833516,0,322,1,2458, 835416,0,219,1,373,
8336998,1,262,1241,1, 83552666,16,0,622,1,
83371267,2664,16,0,322, 835625,2667,19,329,1,
83381,2021,840,1,1521, 835725,2668,5,177,1,
83392665,16,0,322,1, 8358942,1616,1,256,2669,
83401775,2666,16,0,623, 835916,0,631,1,1261,
83411,2029,847,1,2030, 83602670,16,0,631,1,
8342853,1,2031,858,1, 83611011,1227,1,1012,2671,
83432032,863,1,2033,868, 836216,0,327,1,2458,
83441,277,2667,16,0, 83631001,1,262,1244,1,
8345623,1,2788,2668,16, 83641267,2672,16,0,327,
83460,322,1,2037,879, 83651,2021,843,1,1521,
83471,2039,884,1,32, 83662673,16,0,327,1,
83482669,16,0,623,1, 83671775,2674,16,0,631,
83492464,1021,1,2293,2670, 83681,2029,850,1,2030,
835016,0,623,1,2043, 8369856,1,2031,861,1,
8351896,1,2045,901,1, 83702032,866,1,2786,2675,
83522299,2671,16,0,322, 837116,0,631,1,277,
83531,41,2672,16,0, 83722676,16,0,631,1,
8354623,1,42,2673,16, 83732035,877,1,2037,882,
83550,322,1,40,1300, 83741,2792,2677,16,0,
83561,44,1306,1,43, 8375327,1,32,2678,16,
83572674,16,0,623,1, 83760,631,1,2464,1024,
83581804,2675,16,0,623, 83771,2293,2679,16,0,
83591,48,1313,1,49, 8378631,1,2043,899,1,
83601319,1,47,1307,1, 83792045,904,1,2299,2680,
836151,1329,1,52,2676, 838016,0,327,1,41,
836216,0,623,1,50, 83812681,16,0,631,1,
83631324,1,305,1334,1, 838242,2682,16,0,327,
83641096,1694,1,1515,2677, 83831,40,1304,1,44,
836516,0,623,1,2318, 83841310,1,43,2683,16,
83662678,16,0,623,1, 83850,631,1,1804,2684,
836762,2679,16,0,623, 838616,0,631,1,48,
83681,63,1345,1,66, 83871317,1,49,1323,1,
83691351,1,67,1356,1, 838847,1311,1,51,1333,
837068,1361,1,69,1366, 83891,52,2685,16,0,
83711,70,1371,1,71, 8390631,1,50,1328,1,
83722680,16,0,623,1, 8391305,1338,1,1096,1439,
8373283,1295,1,73,2681, 83921,1515,2686,16,0,
837416,0,322,1,74, 8393631,1,2318,2687,16,
83751376,1,1013,1381,1, 83940,631,1,62,2688,
837676,2682,16,0,623, 839516,0,631,1,63,
83771,1834,2683,16,0, 83961349,1,66,1355,1,
8378623,1,2337,2684,16, 839767,1360,1,68,1365,
83790,623,1,79,2685, 83981,69,1370,1,70,
838016,0,623,1,1335, 83991375,1,71,2689,16,
83812686,16,0,623,1, 84000,631,1,283,1299,
8382299,2687,16,0,623, 84011,73,2690,16,0,
83831,82,2688,16,0, 8402327,1,74,1380,1,
8384322,1,1840,2689,16, 84031013,1385,1,76,2691,
83850,322,1,1297,2690, 840416,0,631,1,1834,
838616,0,623,1,85, 84052692,16,0,631,1,
83872691,16,0,623,1, 84062337,2693,16,0,631,
83881341,2692,16,0,322, 84071,79,2694,16,0,
83891,89,2693,16,0, 8408631,1,1335,2695,16,
8390623,1,1303,2694,16, 84090,631,1,299,2696,
83910,322,1,2035,874, 841016,0,631,1,82,
83921,93,1435,1,322, 84112697,16,0,327,1,
83932695,16,0,623,1, 84121840,2698,16,0,327,
839497,2696,16,0,623, 84131,1297,2699,16,0,
83951,2041,890,1,1555, 8414631,1,85,2700,16,
83962697,16,0,322,1, 84150,631,1,1341,2701,
8397827,2698,16,0,322, 841616,0,327,1,89,
83981,102,2699,16,0, 84172702,16,0,631,1,
8399623,1,1860,943,1, 84181303,2703,16,0,327,
84001803,909,1,2364,949, 84191,509,2704,16,0,
84011,107,2700,16,0, 8420631,1,93,1445,1,
8402322,1,509,2701,16, 8421322,2705,16,0,631,
84030,623,1,1114,1461, 84221,2039,887,1,97,
84041,112,2702,16,0, 84232706,16,0,631,1,
8405623,1,1117,2703,16, 84242041,893,1,1555,2707,
84060,623,1,352,1467, 842516,0,327,1,827,
84071,1873,958,1,118, 84262708,16,0,327,1,
84081473,1,1123,2704,16, 8427102,2709,16,0,631,
84090,322,1,371,1483, 84281,1860,946,1,1803,
84101,515,2705,16,0, 8429912,1,2364,952,1,
8411322,1,1377,2706,16, 8430107,2710,16,0,327,
84120,322,1,124,2707, 84311,1114,1469,1,112,
841316,0,623,1,1882, 84322711,16,0,631,1,
84142708,16,0,322,1, 84331117,2712,16,0,631,
8415377,1499,1,379,1504, 84341,352,1475,1,1873,
84161,380,1509,1,130, 8435961,1,118,1481,1,
84171532,1,346,2709,16, 84361123,2713,16,0,327,
84180,623,1,2075,2710, 84371,371,1491,1,515,
841916,0,623,1,373, 84382714,16,0,327,1,
84201527,1,387,2711,16, 84391377,2715,16,0,327,
84210,322,1,137,2712, 84401,124,2716,16,0,
842216,0,623,1,143, 8441631,1,1882,2717,16,
84232713,16,0,322,1, 84420,327,1,377,1507,
84241901,2714,16,0,623, 84431,379,1512,1,380,
84251,1048,1462,1,1153, 84441517,1,130,1540,1,
84262715,16,0,623,1, 8445346,2718,16,0,631,
8427375,1494,1,151,2716, 84461,2075,2719,16,0,
842816,0,623,1,1407, 8447631,1,373,1535,1,
84292717,16,0,623,1, 8448387,2720,16,0,327,
84301659,2718,16,0,623, 84491,137,2721,16,0,
84311,2413,2719,16,0, 8450631,1,143,2722,16,
8432623,1,1159,2720,16, 84510,327,1,1901,2723,
84330,322,1,381,2721, 845216,0,631,1,1048,
843416,0,623,1,157, 84531470,1,1153,2724,16,
84352722,16,0,322,1, 84540,631,1,375,1502,
84361413,2723,16,0,322, 84551,151,2725,16,0,
84371,883,2724,16,0, 8456631,1,1407,2726,16,
8438322,1,1371,2725,16, 84570,631,1,1659,2727,
84390,623,1,328,1425, 845816,0,631,1,2413,
84401,2105,936,1,2106, 84592728,16,0,631,1,
84412726,16,0,623,1, 84601159,2729,16,0,327,
8442166,2727,16,0,623, 84611,381,2730,16,0,
84431,525,2728,16,0, 8462631,1,157,2731,16,
8444623,1,1622,2729,16, 84630,327,1,1413,2732,
84450,623,1,406,2730, 846416,0,327,1,883,
844616,0,623,1,1574, 84652733,16,0,327,1,
8447921,1,172,1586,1, 84661371,2734,16,0,631,
84481931,983,1,412,2731, 84671,328,1429,1,2105,
844916,0,322,1,1933, 8468939,1,2106,2735,16,
84502732,16,0,623,1, 84690,631,1,166,2736,
84511876,2733,16,0,623, 847016,0,631,1,525,
84521,431,2734,16,0, 84712737,16,0,631,1,
8453623,1,1585,2735,16, 84721622,2738,16,0,631,
84540,623,1,182,2736, 84731,406,2739,16,0,
845516,0,623,1,1628, 8474631,1,1574,924,1,
84562737,16,0,322,1, 8475172,1595,1,1931,986,
84571189,2738,16,0,623, 84761,412,2740,16,0,
84581,437,2739,16,0, 8477327,1,1933,2741,16,
8459322,1,1591,2740,16, 84780,631,1,1876,2742,
84600,322,1,188,1635, 847916,0,631,1,431,
84611,1695,2741,16,0, 84802743,16,0,631,1,
8462623,1,2198,2742,16, 84811585,2744,16,0,631,
84630,623,1,1195,2743, 84821,182,2745,16,0,
846416,0,322,1,1449, 8483631,1,1628,2746,16,
84652744,16,0,322,1, 84840,327,1,1189,2747,
84661701,2745,16,0,322, 848516,0,631,1,437,
84671,447,2746,16,0, 84862748,16,0,327,1,
8468623,1,2782,2747,16, 84871591,2749,16,0,327,
84690,623,1,199,2748, 84881,188,1644,1,1695,
847016,0,623,1,2459, 84892750,16,0,631,1,
84711004,1,1958,2749,16, 84902198,2751,16,0,631,
84720,623,1,2462,1011, 84911,1195,2752,16,0,
84731,1657,1016,1,205, 8492327,1,1449,2753,16,
84742750,16,0,322,1, 84930,327,1,1701,2754,
8475459,2751,16,0,623, 849416,0,327,1,447,
84761,462,2752,16,0, 84952755,16,0,631,1,
8477623,1,1665,2753,16, 8496199,2756,16,0,631,
84780,322,1,217,2754, 84971,2459,1007,1,1958,
847916,0,623,1,2227, 84982757,16,0,631,1,
84801030,1,942,1607,1, 84992462,1014,1,1657,1019,
84811225,2755,16,0,623, 85001,205,2758,16,0,
84821,223,2756,16,0, 8501327,1,459,2759,16,
8483322,1,1479,2757,16, 85020,631,1,462,2760,
84840,623,1,1731,2758, 850316,0,631,1,1665,
848516,0,623,1,477, 85042761,16,0,327,1,
84861666,1,1231,2759,16, 8505217,2762,16,0,631,
84870,322,1,479,1676, 85061,2227,1033,1,2033,
84881,480,1681,1,1485, 8507871,1,1225,2763,16,
84892760,16,0,322,1, 85080,631,1,223,2764,
84901737,2761,16,0,322, 850916,0,327,1,1479,
84911,1989,1038,1,1990, 85102765,16,0,631,1,
84922762,16,0,623,1, 85111731,2766,16,0,631,
84931443,2763,16,0,623, 85121,477,1675,1,1231,
84941,236,2764,16,0, 85132767,16,0,327,1,
8495623,1,2136,965,1, 8514479,1685,1,480,1690,
8496476,1660,1,242,2765, 85151,1485,2768,16,0,
849716,0,322,1,478, 8516327,1,1737,2769,16,
84981705,1,1939,2766,16, 85170,327,1,1989,1041,
84990,322,1,1001,1710, 85181,1990,2770,16,0,
85001,1002,1715,1,1756, 8519631,1,1443,2771,16,
85012767,16,0,623,1, 85200,631,1,236,2772,
850226,2768,19,343,1, 852116,0,631,1,2136,
850326,2769,5,84,1, 8522968,1,476,1669,1,
85041011,1224,1,1012,2770, 8523242,2773,16,0,327,
850516,0,341,1,1013, 85241,478,1708,1,1939,
85061381,1,262,1241,1, 85252774,16,0,327,1,
85071267,2771,16,0,341, 85261001,1713,1,1002,1718,
85081,515,2772,16,0, 85271,1756,2775,16,0,
8509770,1,1521,2773,16, 8528631,1,26,2776,19,
85100,341,1,525,1339, 8529348,1,26,2777,5,
85111,2788,2774,16,0, 853084,1,1011,1227,1,
8512341,1,283,1295,1, 85311012,2778,16,0,346,
85132299,2775,16,0,341, 85321,1013,1385,1,262,
85141,42,2776,16,0, 85331244,1,1267,2779,16,
8515341,1,40,1300,1, 85340,346,1,515,2780,
851644,1306,1,47,1307, 853516,0,780,1,1521,
85171,1303,2777,16,0, 85362781,16,0,346,1,
8518341,1,1555,2778,16, 8537525,1343,1,2792,2782,
85190,341,1,50,1324, 853816,0,346,1,283,
85201,48,1313,1,49, 85391299,1,2299,2783,16,
85211319,1,51,1329,1, 85400,346,1,42,2784,
852263,1345,1,305,1334, 854116,0,346,1,40,
85231,66,1351,1,67, 85421304,1,44,1310,1,
85241356,1,68,1361,1, 854347,1311,1,1303,2785,
852569,1366,1,70,1371, 854416,0,346,1,1555,
85261,73,2779,16,0, 85452786,16,0,346,1,
8527341,1,74,1376,1, 854650,1328,1,48,1317,
8528328,1425,1,1048,1462, 85471,49,1323,1,51,
85291,82,2780,16,0, 85481333,1,63,1349,1,
8530341,1,1840,2781,16, 8549305,1338,1,66,1355,
85310,341,1,1591,2782, 85501,67,1360,1,68,
853216,0,341,1,1341, 85511365,1,69,1370,1,
85332783,16,0,341,1, 855270,1375,1,73,2787,
85341096,1694,1,93,1435, 855316,0,346,1,74,
85351,352,1467,1,107, 85541380,1,328,1429,1,
85362784,16,0,341,1, 85551048,1470,1,82,2788,
85371114,1461,1,118,1473, 855616,0,346,1,1840,
85381,1123,2785,16,0, 85572789,16,0,346,1,
8539341,1,371,1483,1, 85581591,2790,16,0,346,
85401628,2786,16,0,341, 85591,1341,2791,16,0,
85411,375,1494,1,1882, 8560346,1,1096,1439,1,
85422787,16,0,341,1, 856193,1445,1,352,1475,
8543377,1499,1,379,1504, 85621,107,2792,16,0,
85441,380,1509,1,883, 8563346,1,1114,1469,1,
85452788,16,0,341,1, 8564118,1481,1,1123,2793,
8546373,1527,1,130,1532, 856516,0,346,1,371,
85471,143,2789,16,0, 85661491,1,1628,2794,16,
8548341,1,387,2790,16, 85670,346,1,375,1502,
85490,341,1,1159,2791, 85681,1882,2795,16,0,
855016,0,341,1,157, 8569346,1,377,1507,1,
85512792,16,0,341,1, 8570379,1512,1,380,1517,
85521413,2793,16,0,341, 85711,883,2796,16,0,
85531,1665,2794,16,0, 8572346,1,373,1535,1,
8554341,1,412,2795,16, 8573130,1540,1,143,2797,
85550,341,1,1377,2796, 857416,0,346,1,387,
855616,0,341,1,172, 85752798,16,0,346,1,
85571586,1,1939,2797,16, 85761159,2799,16,0,346,
85580,341,1,437,2798, 85771,157,2800,16,0,
855916,0,694,1,188, 8578346,1,1413,2801,16,
85601635,1,942,1607,1, 85790,346,1,1665,2802,
85611195,2799,16,0,341, 858016,0,346,1,412,
85621,1449,2800,16,0, 85812803,16,0,346,1,
8563341,1,1701,2801,16, 85821377,2804,16,0,346,
85640,341,1,447,1628, 85831,172,1595,1,1939,
85651,205,2802,16,0, 85842805,16,0,346,1,
8566341,1,827,2803,16, 8585437,2806,16,0,709,
85670,341,1,223,2804, 85861,188,1644,1,942,
856816,0,341,1,476, 85871616,1,1195,2807,16,
85691660,1,477,1666,1, 85880,346,1,1449,2808,
85701231,2805,16,0,341, 858916,0,346,1,1701,
85711,479,1676,1,480, 85902809,16,0,346,1,
85721681,1,1485,2806,16, 8591447,1637,1,205,2810,
85730,341,1,1737,2807, 859216,0,346,1,827,
857416,0,341,1,242, 85932811,16,0,346,1,
85752808,16,0,341,1, 8594223,2812,16,0,346,
8576478,1705,1,1001,1710, 85951,476,1669,1,477,
85771,1002,1715,1,27, 85961675,1,1231,2813,16,
85782809,19,706,1,27, 85970,346,1,479,1685,
85792810,5,95,1,256, 85981,480,1690,1,1485,
85802811,16,0,704,1, 85992814,16,0,346,1,
85811261,2812,16,0,704, 86001737,2815,16,0,346,
85821,509,2813,16,0, 86011,242,2816,16,0,
8583704,1,1515,2814,16, 8602346,1,478,1708,1,
85840,704,1,2021,840, 86031001,1713,1,1002,1718,
85851,1775,2815,16,0, 86041,27,2817,19,721,
8586704,1,2029,847,1, 86051,27,2818,5,95,
85872030,853,1,2031,858, 86061,256,2819,16,0,
85881,2032,863,1,2033, 8607719,1,1261,2820,16,
8589868,1,277,2816,16, 86080,719,1,509,2821,
85900,704,1,2035,874, 860916,0,719,1,1515,
85911,2037,879,1,2039, 86102822,16,0,719,1,
8592884,1,32,2817,16, 86112021,843,1,1775,2823,
85930,704,1,2041,890, 861216,0,719,1,2029,
85941,2293,2818,16,0, 8613850,1,2030,856,1,
8595704,1,2043,896,1, 86142031,861,1,2032,866,
85962045,901,1,41,2819, 86151,2033,871,1,277,
859716,0,704,1,1297, 86162824,16,0,719,1,
85982820,16,0,704,1, 86172035,877,1,2037,882,
859943,2821,16,0,704, 86181,2039,887,1,32,
86001,1803,909,1,1804, 86192825,16,0,719,1,
86012822,16,0,704,1, 86202041,893,1,2293,2826,
8602299,2823,16,0,704, 862116,0,719,1,2043,
86031,52,2824,16,0, 8622899,1,2045,904,1,
8604704,1,2318,2825,16, 862341,2827,16,0,719,
86050,704,1,62,2826, 86241,1297,2828,16,0,
860616,0,704,1,2075, 8625719,1,43,2829,16,
86072827,16,0,704,1, 86260,719,1,1803,912,
86081574,921,1,71,2828, 86271,1804,2830,16,0,
860916,0,704,1,76, 8628719,1,299,2831,16,
86102829,16,0,704,1, 86290,719,1,52,2832,
86111834,2830,16,0,704, 863016,0,719,1,2318,
86121,2337,2831,16,0, 86312833,16,0,719,1,
8613704,1,79,2832,16, 863262,2834,16,0,719,
86140,704,1,1335,2833, 86331,2075,2835,16,0,
861516,0,704,1,322, 8634719,1,1574,924,1,
86162834,16,0,704,1, 863571,2836,16,0,719,
861785,2835,16,0,704, 86361,76,2837,16,0,
86181,89,2836,16,0, 8637719,1,1834,2838,16,
8619704,1,346,2837,16, 86380,719,1,2337,2839,
86200,704,1,2105,936, 863916,0,719,1,79,
86211,2106,2838,16,0, 86402840,16,0,719,1,
8622704,1,97,2839,16, 86411335,2841,16,0,719,
86230,704,1,1860,943, 86421,322,2842,16,0,
86241,2364,949,1,102, 8643719,1,85,2843,16,
86252840,16,0,704,1, 86440,719,1,89,2844,
86262782,2841,16,0,704, 864516,0,719,1,346,
86271,112,2842,16,0, 86462845,16,0,719,1,
8628704,1,1117,2843,16, 86472105,939,1,2106,2846,
86290,704,1,1873,958, 864816,0,719,1,97,
86301,1876,2844,16,0, 86492847,16,0,719,1,
8631704,1,124,2845,16, 86501860,946,1,2364,952,
86320,704,1,2136,965, 86511,102,2848,16,0,
86331,381,2846,16,0, 8652719,1,112,2849,16,
8634704,1,525,2847,16, 86530,719,1,1117,2850,
86350,704,1,137,2848, 865416,0,719,1,2786,
863616,0,704,1,1901, 86552851,16,0,719,1,
86372849,16,0,704,1, 86561873,961,1,1876,2852,
86381153,2850,16,0,704, 865716,0,719,1,124,
86391,151,2851,16,0, 86582853,16,0,719,1,
8640704,1,1407,2852,16, 86592136,968,1,381,2854,
86410,704,1,1659,2853, 866016,0,719,1,525,
864216,0,704,1,2413, 86612855,16,0,719,1,
86432854,16,0,704,1, 8662137,2856,16,0,719,
8644406,2855,16,0,704, 86631,1901,2857,16,0,
86451,1371,2856,16,0, 8664719,1,1153,2858,16,
8646704,1,166,2857,16, 86650,719,1,151,2859,
86470,704,1,1622,2858, 866616,0,719,1,1407,
864816,0,704,1,1931, 86672860,16,0,719,1,
8649983,1,1933,2859,16, 86681659,2861,16,0,719,
86500,704,1,431,2860, 86691,2413,2862,16,0,
865116,0,704,1,1585, 8670719,1,406,2863,16,
86522861,16,0,704,1, 86710,719,1,1371,2864,
8653182,2862,16,0,704, 867216,0,719,1,166,
86541,1189,2863,16,0, 86732865,16,0,719,1,
8655704,1,1443,2864,16, 86741622,2866,16,0,719,
86560,704,1,1695,2865, 86751,1931,986,1,1933,
865716,0,704,1,2198, 86762867,16,0,719,1,
86582866,16,0,704,1, 8677431,2868,16,0,719,
8659447,2867,16,0,704, 86781,1585,2869,16,0,
86601,2458,998,1,2459, 8679719,1,182,2870,16,
86611004,1,1958,2868,16, 86800,719,1,1189,2871,
86620,704,1,2462,1011, 868116,0,719,1,1443,
86631,1657,1016,1,2464, 86822872,16,0,719,1,
86641021,1,199,2869,16, 86831695,2873,16,0,719,
86650,704,1,459,2870, 86841,2198,2874,16,0,
866616,0,704,1,462, 8685719,1,447,2875,16,
86672871,16,0,704,1, 86860,719,1,2458,1001,
8668217,2872,16,0,704, 86871,2459,1007,1,1958,
86691,2227,1030,1,1225, 86882876,16,0,719,1,
86702873,16,0,704,1, 86892462,1014,1,1657,1019,
86711479,2874,16,0,704, 86901,2464,1024,1,199,
86721,1731,2875,16,0, 86912877,16,0,719,1,
8673704,1,1989,1038,1, 8692459,2878,16,0,719,
86741990,2876,16,0,704, 86931,462,2879,16,0,
86751,236,2877,16,0, 8694719,1,217,2880,16,
8676704,1,1756,2878,16, 86950,719,1,2227,1033,
86770,704,1,28,2879, 86961,1225,2881,16,0,
867819,734,1,28,2880, 8697719,1,1479,2882,16,
86795,60,1,328,1425, 86980,719,1,1731,2883,
86801,223,1650,1,1096, 869916,0,719,1,1989,
86811694,1,118,1473,1, 87001041,1,1990,2884,16,
8682883,1515,1,525,1339, 87010,719,1,236,2885,
86831,1001,1710,1,130, 870216,0,719,1,1756,
86841532,1,459,1949,1, 87032886,16,0,719,1,
86851114,1461,1,352,1467, 870428,2887,19,749,1,
86861,447,1628,1,464, 870528,2888,5,60,1,
86871944,1,1011,1224,1, 8706328,1429,1,223,1659,
86881013,1381,1,242,1700, 87071,1096,1439,1,118,
86891,143,1537,1,40, 87081481,1,883,1523,1,
86901300,1,41,1916,1, 8709525,1343,1,1001,1713,
869142,1920,1,479,1676, 87101,130,1540,1,459,
86921,44,1306,1,481, 87111953,1,1114,1469,1,
86931951,1,373,1527,1, 8712352,1475,1,447,1637,
869447,1307,1,157,1560, 87131,464,1948,1,1011,
86951,49,1319,1,50, 87141227,1,1013,1385,1,
86961324,1,48,1313,1, 8715242,1703,1,143,1545,
8697379,1504,1,380,1509, 87161,40,1304,1,41,
86981,51,1329,1,476, 87171913,1,42,1917,1,
86991660,1,371,1483,1, 8718479,1685,1,44,1310,
8700478,1705,1,1048,1462, 87191,481,1955,1,373,
87011,375,1494,1,172, 87201535,1,47,1311,1,
87021586,1,262,1241,1, 8721157,1568,1,49,1323,
8703283,1295,1,63,1345, 87221,50,1328,1,48,
87041,67,1356,1,68, 87231317,1,379,1512,1,
87051361,1,69,1366,1, 8724380,1517,1,51,1333,
870666,1351,1,461,2881, 87251,476,1669,1,371,
870716,0,732,1,74, 87261491,1,478,1708,1,
87081376,1,377,1499,1, 87271048,1470,1,375,1502,
87091002,1715,1,70,1371, 87281,172,1595,1,262,
87101,188,1635,1,82, 87291244,1,283,1299,1,
87111403,1,305,1334,1, 873063,1349,1,67,1360,
8712477,1666,1,827,1448, 87311,68,1365,1,69,
87131,93,1435,1,480, 87321370,1,66,1355,1,
87141681,1,205,1640,1, 8733461,2889,16,0,747,
8715942,1607,1,107,1455, 87341,74,1380,1,377,
87161,29,2882,19,312, 87351507,1,1002,1718,1,
87171,29,2883,5,84, 873670,1375,1,188,1644,
87181,1011,1224,1,1012, 87371,82,1407,1,305,
87192884,16,0,310,1, 87381338,1,477,1675,1,
87201013,1381,1,262,1241, 8739827,1457,1,93,1445,
87211,1267,2885,16,0, 87401,480,1690,1,205,
8722310,1,515,2886,16, 87411649,1,942,1616,1,
87230,310,1,1521,2887, 8742107,1464,1,29,2890,
872416,0,310,1,525, 874319,315,1,29,2891,
87251339,1,2788,2888,16, 87445,84,1,1011,1227,
87260,310,1,283,1295, 87451,1012,2892,16,0,
87271,2299,2889,16,0, 8746313,1,1013,1385,1,
8728310,1,42,2890,16, 8747262,1244,1,1267,2893,
87290,310,1,40,1300, 874816,0,313,1,515,
87301,44,1306,1,47, 87492894,16,0,313,1,
87311307,1,1303,2891,16, 87501521,2895,16,0,313,
87320,310,1,1555,2892, 87511,525,1343,1,2792,
873316,0,310,1,50, 87522896,16,0,313,1,
87341324,1,48,1313,1, 8753283,1299,1,2299,2897,
873549,1319,1,51,1329, 875416,0,313,1,42,
87361,63,1345,1,305, 87552898,16,0,313,1,
87371334,1,66,1351,1, 875640,1304,1,44,1310,
873867,1356,1,68,1361, 87571,47,1311,1,1303,
87391,69,1366,1,70, 87582899,16,0,313,1,
87401371,1,73,2893,16, 87591555,2900,16,0,313,
87410,310,1,74,1376, 87601,50,1328,1,48,
87421,328,1425,1,1048, 87611317,1,49,1323,1,
87431462,1,82,2894,16, 876251,1333,1,63,1349,
87440,310,1,1840,2895, 87631,305,1338,1,66,
874516,0,310,1,1591, 87641355,1,67,1360,1,
87462896,16,0,310,1, 876568,1365,1,69,1370,
87471341,2897,16,0,310, 87661,70,1375,1,73,
87481,1096,1694,1,93, 87672901,16,0,313,1,
87491435,1,352,1467,1, 876874,1380,1,328,1429,
8750107,2898,16,0,310, 87691,1048,1470,1,82,
87511,1114,1461,1,118, 87702902,16,0,313,1,
87521473,1,1123,2899,16, 87711840,2903,16,0,313,
87530,310,1,371,1483, 87721,1591,2904,16,0,
87541,1628,2900,16,0, 8773313,1,1341,2905,16,
8755310,1,375,1494,1, 87740,313,1,1096,1439,
87561882,2901,16,0,310, 87751,93,1445,1,352,
87571,377,1499,1,379, 87761475,1,107,2906,16,
87581504,1,380,1509,1, 87770,313,1,1114,1469,
8759883,2902,16,0,310, 87781,118,1481,1,1123,
87601,373,1527,1,130, 87792907,16,0,313,1,
87611532,1,143,1537,1, 8780371,1491,1,1628,2908,
8762387,2903,16,0,310, 878116,0,313,1,375,
87631,1159,2904,16,0, 87821502,1,1882,2909,16,
8764310,1,157,1560,1, 87830,313,1,377,1507,
87651413,2905,16,0,310, 87841,379,1512,1,380,
87661,1665,2906,16,0, 87851517,1,883,2910,16,
8767310,1,412,2907,16, 87860,313,1,373,1535,
87680,310,1,1377,2908, 87871,130,1540,1,143,
876916,0,310,1,172, 87881545,1,387,2911,16,
87701586,1,1939,2909,16, 87890,313,1,1159,2912,
87710,310,1,437,2910, 879016,0,313,1,157,
877216,0,310,1,188, 87911568,1,1413,2913,16,
87731635,1,942,1607,1, 87920,313,1,1665,2914,
87741195,2911,16,0,310, 879316,0,313,1,412,
87751,1449,2912,16,0, 87942915,16,0,313,1,
8776310,1,1701,2913,16, 87951377,2916,16,0,313,
87770,310,1,447,1628, 87961,172,1595,1,1939,
87781,205,2914,16,0, 87972917,16,0,313,1,
8779310,1,827,2915,16, 8798437,2918,16,0,313,
87800,310,1,223,2916, 87991,188,1644,1,942,
878116,0,310,1,476, 88001616,1,1195,2919,16,
87821660,1,477,1666,1, 88010,313,1,1449,2920,
87831231,2917,16,0,310, 880216,0,313,1,1701,
87841,479,1676,1,480, 88032921,16,0,313,1,
87851681,1,1485,2918,16, 8804447,1637,1,205,2922,
87860,310,1,1737,2919, 880516,0,313,1,827,
878716,0,310,1,242, 88062923,16,0,313,1,
87882920,16,0,310,1, 8807223,2924,16,0,313,
8789478,1705,1,1001,1710, 88081,476,1669,1,477,
87901,1002,1715,1,30, 88091675,1,1231,2925,16,
87912921,19,296,1,30, 88100,313,1,479,1685,
87922922,5,84,1,1011, 88111,480,1690,1,1485,
87931224,1,1012,2923,16, 88122926,16,0,313,1,
87940,294,1,1013,1381, 88131737,2927,16,0,313,
87951,262,1241,1,1267, 88141,242,2928,16,0,
87962924,16,0,294,1, 8815313,1,478,1708,1,
8797515,2925,16,0,294, 88161001,1713,1,1002,1718,
87981,1521,2926,16,0, 88171,30,2929,19,297,
8799294,1,525,1339,1, 88181,30,2930,5,84,
88002788,2927,16,0,294, 88191,1011,1227,1,1012,
88011,283,1295,1,2299, 88202931,16,0,295,1,
88022928,16,0,294,1, 88211013,1385,1,262,1244,
880342,2929,16,0,294, 88221,1267,2932,16,0,
88041,40,1300,1,44, 8823295,1,515,2933,16,
88051306,1,47,1307,1, 88240,295,1,1521,2934,
88061303,2930,16,0,294, 882516,0,295,1,525,
88071,1555,2931,16,0, 88261343,1,2792,2935,16,
8808294,1,50,1324,1, 88270,295,1,283,1299,
880948,1313,1,49,1319, 88281,2299,2936,16,0,
88101,51,1329,1,63, 8829295,1,42,2937,16,
88111345,1,305,1334,1, 88300,295,1,40,1304,
881266,1351,1,67,1356, 88311,44,1310,1,47,
88131,68,1361,1,69, 88321311,1,1303,2938,16,
88141366,1,70,1371,1, 88330,295,1,1555,2939,
881573,2932,16,0,294, 883416,0,295,1,50,
88161,74,1376,1,328, 88351328,1,48,1317,1,
88171425,1,1048,1462,1, 883649,1323,1,51,1333,
881882,2933,16,0,294, 88371,63,1349,1,305,
88191,1840,2934,16,0, 88381338,1,66,1355,1,
8820294,1,1591,2935,16, 883967,1360,1,68,1365,
88210,294,1,1341,2936, 88401,69,1370,1,70,
882216,0,294,1,1096, 88411375,1,73,2940,16,
88231694,1,93,1435,1, 88420,295,1,74,1380,
8824352,1467,1,107,2937, 88431,328,1429,1,1048,
882516,0,294,1,1114, 88441470,1,82,2941,16,
88261461,1,118,1473,1, 88450,295,1,1840,2942,
88271123,2938,16,0,294, 884616,0,295,1,1591,
88281,371,1483,1,1628, 88472943,16,0,295,1,
88292939,16,0,294,1, 88481341,2944,16,0,295,
8830375,1494,1,1882,2940, 88491,1096,1439,1,93,
883116,0,294,1,377, 88501445,1,352,1475,1,
88321499,1,379,1504,1, 8851107,2945,16,0,295,
8833380,1509,1,883,2941, 88521,1114,1469,1,118,
883416,0,294,1,373, 88531481,1,1123,2946,16,
88351527,1,130,1532,1, 88540,295,1,371,1491,
8836143,1537,1,387,2942, 88551,1628,2947,16,0,
883716,0,294,1,1159, 8856295,1,375,1502,1,
88382943,16,0,294,1, 88571882,2948,16,0,295,
8839157,1560,1,1413,2944, 88581,377,1507,1,379,
884016,0,294,1,1665, 88591512,1,380,1517,1,
88412945,16,0,294,1, 8860883,2949,16,0,295,
8842412,2946,16,0,294, 88611,373,1535,1,130,
88431,1377,2947,16,0, 88621540,1,143,1545,1,
8844294,1,172,1586,1, 8863387,2950,16,0,295,
88451939,2948,16,0,294, 88641,1159,2951,16,0,
88461,437,2949,16,0, 8865295,1,157,1568,1,
8847294,1,188,1635,1, 88661413,2952,16,0,295,
8848942,1607,1,1195,2950, 88671,1665,2953,16,0,
884916,0,294,1,1449, 8868295,1,412,2954,16,
88502951,16,0,294,1, 88690,295,1,1377,2955,
88511701,2952,16,0,294, 887016,0,295,1,172,
88521,447,1628,1,205, 88711595,1,1939,2956,16,
88532953,16,0,294,1, 88720,295,1,437,2957,
8854827,2954,16,0,294, 887316,0,295,1,188,
88551,223,2955,16,0, 88741644,1,942,1616,1,
8856294,1,476,1660,1, 88751195,2958,16,0,295,
8857477,1666,1,1231,2956, 88761,1449,2959,16,0,
885816,0,294,1,479, 8877295,1,1701,2960,16,
88591676,1,480,1681,1, 88780,295,1,447,1637,
88601485,2957,16,0,294, 88791,205,2961,16,0,
88611,1737,2958,16,0, 8880295,1,827,2962,16,
8862294,1,242,2959,16, 88810,295,1,223,2963,
88630,294,1,478,1705, 888216,0,295,1,476,
88641,1001,1710,1,1002, 88831669,1,477,1675,1,
88651715,1,31,2960,19, 88841231,2964,16,0,295,
8866281,1,31,2961,5, 88851,479,1685,1,480,
886784,1,1011,1224,1, 88861690,1,1485,2965,16,
88681012,2962,16,0,279, 88870,295,1,1737,2966,
88691,1013,1381,1,262, 888816,0,295,1,242,
88701241,1,1267,2963,16, 88892967,16,0,295,1,
88710,279,1,515,2964, 8890478,1708,1,1001,1713,
887216,0,279,1,1521, 88911,1002,1718,1,31,
88732965,16,0,279,1, 88922968,19,277,1,31,
8874525,1339,1,2788,2966, 88932969,5,84,1,1011,
887516,0,279,1,283, 88941227,1,1012,2970,16,
88761295,1,2299,2967,16, 88950,275,1,1013,1385,
88770,279,1,42,2968, 88961,262,1244,1,1267,
887816,0,279,1,40, 88972971,16,0,275,1,
88791300,1,44,1306,1, 8898515,2972,16,0,275,
888047,1307,1,1303,2969, 88991,1521,2973,16,0,
888116,0,279,1,1555, 8900275,1,525,1343,1,
88822970,16,0,279,1, 89012792,2974,16,0,275,
888350,1324,1,48,1313, 89021,283,1299,1,2299,
88841,49,1319,1,51, 89032975,16,0,275,1,
88851329,1,63,1345,1, 890442,2976,16,0,275,
8886305,1334,1,66,1351, 89051,40,1304,1,44,
88871,67,1356,1,68, 89061310,1,47,1311,1,
88881361,1,69,1366,1, 89071303,2977,16,0,275,
888970,1371,1,73,2971, 89081,1555,2978,16,0,
889016,0,279,1,74, 8909275,1,50,1328,1,
88911376,1,328,1425,1, 891048,1317,1,49,1323,
88921048,1462,1,82,2972, 89111,51,1333,1,63,
889316,0,279,1,1840, 89121349,1,305,1338,1,
88942973,16,0,279,1, 891366,1355,1,67,1360,
88951591,2974,16,0,279, 89141,68,1365,1,69,
88961,1341,2975,16,0, 89151370,1,70,1375,1,
8897279,1,1096,1694,1, 891673,2979,16,0,275,
889893,1435,1,352,1467, 89171,74,1380,1,328,
88991,107,2976,16,0, 89181429,1,1048,1470,1,
8900279,1,1114,1461,1, 891982,2980,16,0,275,
8901118,1473,1,1123,2977, 89201,1840,2981,16,0,
890216,0,279,1,371, 8921275,1,1591,2982,16,
89031483,1,1628,2978,16, 89220,275,1,1341,2983,
89040,279,1,375,1494, 892316,0,275,1,1096,
89051,1882,2979,16,0, 89241439,1,93,1445,1,
8906279,1,377,1499,1, 8925352,1475,1,107,2984,
8907379,1504,1,380,1509, 892616,0,275,1,1114,
89081,883,2980,16,0, 89271469,1,118,1481,1,
8909279,1,373,1527,1, 89281123,2985,16,0,275,
8910130,1532,1,143,2981, 89291,371,1491,1,1628,
891116,0,279,1,387, 89302986,16,0,275,1,
89122982,16,0,279,1, 8931375,1502,1,1882,2987,
89131159,2983,16,0,279, 893216,0,275,1,377,
89141,157,2984,16,0, 89331507,1,379,1512,1,
8915279,1,1413,2985,16, 8934380,1517,1,883,2988,
89160,279,1,1665,2986, 893516,0,275,1,373,
891716,0,279,1,412, 89361535,1,130,1540,1,
89182987,16,0,279,1, 8937143,2989,16,0,275,
89191377,2988,16,0,279, 89381,387,2990,16,0,
89201,172,1586,1,1939, 8939275,1,1159,2991,16,
89212989,16,0,279,1, 89400,275,1,157,2992,
8922437,2990,16,0,279, 894116,0,275,1,1413,
89231,188,1635,1,942, 89422993,16,0,275,1,
89241607,1,1195,2991,16, 89431665,2994,16,0,275,
89250,279,1,1449,2992, 89441,412,2995,16,0,
892616,0,279,1,1701, 8945275,1,1377,2996,16,
89272993,16,0,279,1, 89460,275,1,172,1595,
8928447,1628,1,205,2994, 89471,1939,2997,16,0,
892916,0,279,1,827, 8948275,1,437,2998,16,
89302995,16,0,279,1, 89490,275,1,188,1644,
8931223,2996,16,0,279, 89501,942,1616,1,1195,
89321,476,1660,1,477, 89512999,16,0,275,1,
89331666,1,1231,2997,16, 89521449,3000,16,0,275,
89340,279,1,479,1676, 89531,1701,3001,16,0,
89351,480,1681,1,1485, 8954275,1,447,1637,1,
89362998,16,0,279,1, 8955205,3002,16,0,275,
89371737,2999,16,0,279, 89561,827,3003,16,0,
89381,242,3000,16,0, 8957275,1,223,3004,16,
8939279,1,478,1705,1, 89580,275,1,476,1669,
89401001,1710,1,1002,1715, 89591,477,1675,1,1231,
89411,32,3001,19,273, 89603005,16,0,275,1,
89421,32,3002,5,84, 8961479,1685,1,480,1690,
89431,1011,1224,1,1012, 89621,1485,3006,16,0,
89443003,16,0,271,1, 8963275,1,1737,3007,16,
89451013,1381,1,262,1241, 89640,275,1,242,3008,
89461,1267,3004,16,0, 896516,0,275,1,478,
8947271,1,515,3005,16, 89661708,1,1001,1713,1,
89480,271,1,1521,3006, 89671002,1718,1,32,3009,
894916,0,271,1,525, 896819,270,1,32,3010,
89501339,1,2788,3007,16, 89695,84,1,1011,1227,
89510,271,1,283,1295, 89701,1012,3011,16,0,
89521,2299,3008,16,0, 8971268,1,1013,1385,1,
8953271,1,42,3009,16, 8972262,1244,1,1267,3012,
89540,271,1,40,1300, 897316,0,268,1,515,
89551,44,1306,1,47, 89743013,16,0,268,1,
89561307,1,1303,3010,16, 89751521,3014,16,0,268,
89570,271,1,1555,3011, 89761,525,1343,1,2792,
895816,0,271,1,50, 89773015,16,0,268,1,
89591324,1,48,1313,1, 8978283,1299,1,2299,3016,
896049,1319,1,51,1329, 897916,0,268,1,42,
89611,63,1345,1,305, 89803017,16,0,268,1,
89621334,1,66,1351,1, 898140,1304,1,44,1310,
896367,1356,1,68,1361, 89821,47,1311,1,1303,
89641,69,1366,1,70, 89833018,16,0,268,1,
89651371,1,73,3012,16, 89841555,3019,16,0,268,
89660,271,1,74,1376, 89851,50,1328,1,48,
89671,328,1425,1,1048, 89861317,1,49,1323,1,
89681462,1,82,3013,16, 898751,1333,1,63,1349,
89690,271,1,1840,3014, 89881,305,1338,1,66,
897016,0,271,1,1591, 89891355,1,67,1360,1,
89713015,16,0,271,1, 899068,1365,1,69,1370,
89721341,3016,16,0,271, 89911,70,1375,1,73,
89731,1096,1694,1,93, 89923020,16,0,268,1,
89741435,1,352,1467,1, 899374,1380,1,328,1429,
8975107,3017,16,0,271, 89941,1048,1470,1,82,
89761,1114,1461,1,118, 89953021,16,0,268,1,
89771473,1,1123,3018,16, 89961840,3022,16,0,268,
89780,271,1,371,1483, 89971,1591,3023,16,0,
89791,1628,3019,16,0, 8998268,1,1341,3024,16,
8980271,1,375,1494,1, 89990,268,1,1096,1439,
89811882,3020,16,0,271, 90001,93,1445,1,352,
89821,377,1499,1,379, 90011475,1,107,3025,16,
89831504,1,380,1509,1, 90020,268,1,1114,1469,
8984883,3021,16,0,271, 90031,118,1481,1,1123,
89851,373,1527,1,130, 90043026,16,0,268,1,
89861532,1,143,3022,16, 9005371,1491,1,1628,3027,
89870,271,1,387,3023, 900616,0,268,1,375,
898816,0,271,1,1159, 90071502,1,1882,3028,16,
89893024,16,0,271,1, 90080,268,1,377,1507,
8990157,3025,16,0,271, 90091,379,1512,1,380,
89911,1413,3026,16,0, 90101517,1,883,3029,16,
8992271,1,1665,3027,16, 90110,268,1,373,1535,
89930,271,1,412,3028, 90121,130,1540,1,143,
899416,0,271,1,1377, 90133030,16,0,268,1,
89953029,16,0,271,1, 9014387,3031,16,0,268,
8996172,1586,1,1939,3030, 90151,1159,3032,16,0,
899716,0,271,1,437, 9016268,1,157,3033,16,
89983031,16,0,271,1, 90170,268,1,1413,3034,
8999188,1635,1,942,1607, 901816,0,268,1,1665,
90001,1195,3032,16,0, 90193035,16,0,268,1,
9001271,1,1449,3033,16, 9020412,3036,16,0,268,
90020,271,1,1701,3034, 90211,1377,3037,16,0,
900316,0,271,1,447, 9022268,1,172,1595,1,
90041628,1,205,3035,16, 90231939,3038,16,0,268,
90050,271,1,827,3036, 90241,437,3039,16,0,
900616,0,271,1,223, 9025268,1,188,1644,1,
90073037,16,0,271,1, 9026942,1616,1,1195,3040,
9008476,1660,1,477,1666, 902716,0,268,1,1449,
90091,1231,3038,16,0, 90283041,16,0,268,1,
9010271,1,479,1676,1, 90291701,3042,16,0,268,
9011480,1681,1,1485,3039, 90301,447,1637,1,205,
901216,0,271,1,1737, 90313043,16,0,268,1,
90133040,16,0,271,1, 9032827,3044,16,0,268,
9014242,3041,16,0,271, 90331,223,3045,16,0,
90151,478,1705,1,1001, 9034268,1,476,1669,1,
90161710,1,1002,1715,1, 9035477,1675,1,1231,3046,
901733,3042,19,370,1, 903616,0,268,1,479,
901833,3043,5,84,1, 90371685,1,480,1690,1,
90191011,1224,1,1012,3044, 90381485,3047,16,0,268,
902016,0,368,1,1013, 90391,1737,3048,16,0,
90211381,1,262,1241,1, 9040268,1,242,3049,16,
90221267,3045,16,0,368, 90410,268,1,478,1708,
90231,515,3046,16,0, 90421,1001,1713,1,1002,
9024368,1,1521,3047,16, 90431718,1,33,3050,19,
90250,368,1,525,1339, 9044378,1,33,3051,5,
90261,2788,3048,16,0, 904584,1,1011,1227,1,
9027368,1,283,1295,1, 90461012,3052,16,0,376,
90282299,3049,16,0,368, 90471,1013,1385,1,262,
90291,42,3050,16,0, 90481244,1,1267,3053,16,
9030368,1,40,1300,1, 90490,376,1,515,3054,
903144,1306,1,47,1307, 905016,0,376,1,1521,
90321,1303,3051,16,0, 90513055,16,0,376,1,
9033368,1,1555,3052,16, 9052525,1343,1,2792,3056,
90340,368,1,50,1324, 905316,0,376,1,283,
90351,48,1313,1,49, 90541299,1,2299,3057,16,
90361319,1,51,1329,1, 90550,376,1,42,3058,
903763,1345,1,305,1334, 905616,0,376,1,40,
90381,66,1351,1,67, 90571304,1,44,1310,1,
90391356,1,68,1361,1, 905847,1311,1,1303,3059,
904069,1366,1,70,1371, 905916,0,376,1,1555,
90411,73,3053,16,0, 90603060,16,0,376,1,
9042368,1,74,1376,1, 906150,1328,1,48,1317,
9043328,1425,1,1048,1462, 90621,49,1323,1,51,
90441,82,3054,16,0, 90631333,1,63,1349,1,
9045368,1,1840,3055,16, 9064305,1338,1,66,1355,
90460,368,1,1591,3056, 90651,67,1360,1,68,
904716,0,368,1,1341, 90661365,1,69,1370,1,
90483057,16,0,368,1, 906770,1375,1,73,3061,
90491096,1694,1,93,1435, 906816,0,376,1,74,
90501,352,1467,1,107, 90691380,1,328,1429,1,
90513058,16,0,368,1, 90701048,1470,1,82,3062,
90521114,1461,1,118,1473, 907116,0,376,1,1840,
90531,1123,3059,16,0, 90723063,16,0,376,1,
9054368,1,371,1483,1, 90731591,3064,16,0,376,
90551628,3060,16,0,368, 90741,1341,3065,16,0,
90561,375,1494,1,1882, 9075376,1,1096,1439,1,
90573061,16,0,368,1, 907693,1445,1,352,1475,
9058377,1499,1,379,1504, 90771,107,3066,16,0,
90591,380,1509,1,883, 9078376,1,1114,1469,1,
90603062,16,0,368,1, 9079118,1481,1,1123,3067,
9061373,1527,1,130,1532, 908016,0,376,1,371,
90621,143,1537,1,387, 90811491,1,1628,3068,16,
90633063,16,0,368,1, 90820,376,1,375,1502,
90641159,3064,16,0,368, 90831,1882,3069,16,0,
90651,157,1560,1,1413, 9084376,1,377,1507,1,
90663065,16,0,368,1, 9085379,1512,1,380,1517,
90671665,3066,16,0,368, 90861,883,3070,16,0,
90681,412,3067,16,0, 9087376,1,373,1535,1,
9069368,1,1377,3068,16, 9088130,1540,1,143,1545,
90700,368,1,172,1586, 90891,387,3071,16,0,
90711,1939,3069,16,0, 9090376,1,1159,3072,16,
9072368,1,437,3070,16, 90910,376,1,157,1568,
90730,368,1,188,1635, 90921,1413,3073,16,0,
90741,942,1607,1,1195, 9093376,1,1665,3074,16,
90753071,16,0,368,1, 90940,376,1,412,3075,
90761449,3072,16,0,368, 909516,0,376,1,1377,
90771,1701,3073,16,0, 90963076,16,0,376,1,
9078368,1,447,1628,1, 9097172,1595,1,1939,3077,
9079205,3074,16,0,368, 909816,0,376,1,437,
90801,827,3075,16,0, 90993078,16,0,376,1,
9081368,1,223,3076,16, 9100188,1644,1,942,1616,
90820,368,1,476,1660, 91011,1195,3079,16,0,
90831,477,1666,1,1231, 9102376,1,1449,3080,16,
90843077,16,0,368,1, 91030,376,1,1701,3081,
9085479,1676,1,480,1681, 910416,0,376,1,447,
90861,1485,3078,16,0, 91051637,1,205,3082,16,
9087368,1,1737,3079,16, 91060,376,1,827,3083,
90880,368,1,242,1700, 910716,0,376,1,223,
90891,478,1705,1,1001, 91083084,16,0,376,1,
90901710,1,1002,1715,1, 9109476,1669,1,477,1675,
909134,3080,19,358,1, 91101,1231,3085,16,0,
909234,3081,5,84,1, 9111376,1,479,1685,1,
90931011,1224,1,1012,3082, 9112480,1690,1,1485,3086,
909416,0,356,1,1013, 911316,0,376,1,1737,
90951381,1,262,1241,1, 91143087,16,0,376,1,
90961267,3083,16,0,356, 9115242,1703,1,478,1708,
90971,515,3084,16,0, 91161,1001,1713,1,1002,
9098356,1,1521,3085,16, 91171718,1,34,3088,19,
90990,356,1,525,1339, 9118365,1,34,3089,5,
91001,2788,3086,16,0, 911984,1,1011,1227,1,
9101356,1,283,1295,1, 91201012,3090,16,0,363,
91022299,3087,16,0,356, 91211,1013,1385,1,262,
91031,42,3088,16,0, 91221244,1,1267,3091,16,
9104356,1,40,1300,1, 91230,363,1,515,3092,
910544,1306,1,47,1307, 912416,0,363,1,1521,
91061,1303,3089,16,0, 91253093,16,0,363,1,
9107356,1,1555,3090,16, 9126525,1343,1,2792,3094,
91080,356,1,50,1324, 912716,0,363,1,283,
91091,48,1313,1,49, 91281299,1,2299,3095,16,
91101319,1,51,1329,1, 91290,363,1,42,3096,
911163,1345,1,305,1334, 913016,0,363,1,40,
91121,66,1351,1,67, 91311304,1,44,1310,1,
91131356,1,68,1361,1, 913247,1311,1,1303,3097,
911469,1366,1,70,1371, 913316,0,363,1,1555,
91151,73,3091,16,0, 91343098,16,0,363,1,
9116356,1,74,1376,1, 913550,1328,1,48,1317,
9117328,1425,1,1048,1462, 91361,49,1323,1,51,
91181,82,3092,16,0, 91371333,1,63,1349,1,
9119356,1,1840,3093,16, 9138305,1338,1,66,1355,
91200,356,1,1591,3094, 91391,67,1360,1,68,
912116,0,356,1,1341, 91401365,1,69,1370,1,
91223095,16,0,356,1, 914170,1375,1,73,3099,
91231096,1694,1,93,1435, 914216,0,363,1,74,
91241,352,1467,1,107, 91431380,1,328,1429,1,
91253096,16,0,356,1, 91441048,1470,1,82,3100,
91261114,1461,1,118,1473, 914516,0,363,1,1840,
91271,1123,3097,16,0, 91463101,16,0,363,1,
9128356,1,371,1483,1, 91471591,3102,16,0,363,
91291628,3098,16,0,356, 91481,1341,3103,16,0,
91301,375,1494,1,1882, 9149363,1,1096,1439,1,
91313099,16,0,356,1, 915093,1445,1,352,1475,
9132377,1499,1,379,1504, 91511,107,3104,16,0,
91331,380,1509,1,883, 9152363,1,1114,1469,1,
91343100,16,0,356,1, 9153118,1481,1,1123,3105,
9135373,1527,1,130,1532, 915416,0,363,1,371,
91361,143,1537,1,387, 91551491,1,1628,3106,16,
91373101,16,0,356,1, 91560,363,1,375,1502,
91381159,3102,16,0,356, 91571,1882,3107,16,0,
91391,157,1560,1,1413, 9158363,1,377,1507,1,
91403103,16,0,356,1, 9159379,1512,1,380,1517,
91411665,3104,16,0,356, 91601,883,3108,16,0,
91421,412,3105,16,0, 9161363,1,373,1535,1,
9143356,1,1377,3106,16, 9162130,1540,1,143,1545,
91440,356,1,172,1586, 91631,387,3109,16,0,
91451,1939,3107,16,0, 9164363,1,1159,3110,16,
9146356,1,437,3108,16, 91650,363,1,157,1568,
91470,356,1,188,1635, 91661,1413,3111,16,0,
91481,942,1607,1,1195, 9167363,1,1665,3112,16,
91493109,16,0,356,1, 91680,363,1,412,3113,
91501449,3110,16,0,356, 916916,0,363,1,1377,
91511,1701,3111,16,0, 91703114,16,0,363,1,
9152356,1,447,1628,1, 9171172,1595,1,1939,3115,
9153205,1640,1,827,3112, 917216,0,363,1,437,
915416,0,356,1,223, 91733116,16,0,363,1,
91551650,1,476,1660,1, 9174188,1644,1,942,1616,
9156477,1666,1,1231,3113, 91751,1195,3117,16,0,
915716,0,356,1,479, 9176363,1,1449,3118,16,
91581676,1,480,1681,1, 91770,363,1,1701,3119,
91591485,3114,16,0,356, 917816,0,363,1,447,
91601,1737,3115,16,0, 91791637,1,205,1649,1,
9161356,1,242,1700,1, 9180827,3120,16,0,363,
9162478,1705,1,1001,1710, 91811,223,1659,1,476,
91631,1002,1715,1,35, 91821669,1,477,1675,1,
91643116,19,346,1,35, 91831231,3121,16,0,363,
91653117,5,84,1,1011, 91841,479,1685,1,480,
91661224,1,1012,3118,16, 91851690,1,1485,3122,16,
91670,344,1,1013,1381, 91860,363,1,1737,3123,
91681,262,1241,1,1267, 918716,0,363,1,242,
91693119,16,0,344,1, 91881703,1,478,1708,1,
9170515,3120,16,0,344, 91891001,1713,1,1002,1718,
91711,1521,3121,16,0, 91901,35,3124,19,351,
9172344,1,525,1339,1, 91911,35,3125,5,84,
91732788,3122,16,0,344, 91921,1011,1227,1,1012,
91741,283,1295,1,2299, 91933126,16,0,349,1,
91753123,16,0,344,1, 91941013,1385,1,262,1244,
917642,3124,16,0,344, 91951,1267,3127,16,0,
91771,40,1300,1,44, 9196349,1,515,3128,16,
91781306,1,47,1307,1, 91970,349,1,1521,3129,
91791303,3125,16,0,344, 919816,0,349,1,525,
91801,1555,3126,16,0, 91991343,1,2792,3130,16,
9181344,1,50,1324,1, 92000,349,1,283,1299,
918248,1313,1,49,1319, 92011,2299,3131,16,0,
91831,51,1329,1,63, 9202349,1,42,3132,16,
91841345,1,305,1334,1, 92030,349,1,40,1304,
918566,1351,1,67,1356, 92041,44,1310,1,47,
91861,68,1361,1,69, 92051311,1,1303,3133,16,
91871366,1,70,1371,1, 92060,349,1,1555,3134,
918873,3127,16,0,344, 920716,0,349,1,50,
91891,74,1376,1,328, 92081328,1,48,1317,1,
91901425,1,1048,1462,1, 920949,1323,1,51,1333,
919182,3128,16,0,344, 92101,63,1349,1,305,
91921,1840,3129,16,0, 92111338,1,66,1355,1,
9193344,1,1591,3130,16, 921267,1360,1,68,1365,
91940,344,1,1341,3131, 92131,69,1370,1,70,
919516,0,344,1,1096, 92141375,1,73,3135,16,
91961694,1,93,1435,1, 92150,349,1,74,1380,
9197352,1467,1,107,3132, 92161,328,1429,1,1048,
919816,0,344,1,1114, 92171470,1,82,3136,16,
91991461,1,118,1473,1, 92180,349,1,1840,3137,
92001123,3133,16,0,344, 921916,0,349,1,1591,
92011,371,1483,1,1628, 92203138,16,0,349,1,
92023134,16,0,344,1, 92211341,3139,16,0,349,
9203375,1494,1,1882,3135, 92221,1096,1439,1,93,
920416,0,344,1,377, 92231445,1,352,1475,1,
92051499,1,379,1504,1, 9224107,3140,16,0,349,
9206380,1509,1,883,3136, 92251,1114,1469,1,118,
920716,0,344,1,373, 92261481,1,1123,3141,16,
92081527,1,130,1532,1, 92270,349,1,371,1491,
9209143,1537,1,387,3137, 92281,1628,3142,16,0,
921016,0,344,1,1159, 9229349,1,375,1502,1,
92113138,16,0,344,1, 92301882,3143,16,0,349,
9212157,1560,1,1413,3139, 92311,377,1507,1,379,
921316,0,344,1,1665, 92321512,1,380,1517,1,
92143140,16,0,344,1, 9233883,3144,16,0,349,
9215412,3141,16,0,344, 92341,373,1535,1,130,
92161,1377,3142,16,0, 92351540,1,143,1545,1,
9217344,1,172,1586,1, 9236387,3145,16,0,349,
92181939,3143,16,0,344, 92371,1159,3146,16,0,
92191,437,3144,16,0, 9238349,1,157,1568,1,
9220344,1,188,1635,1, 92391413,3147,16,0,349,
9221942,1607,1,1195,3145, 92401,1665,3148,16,0,
922216,0,344,1,1449, 9241349,1,412,3149,16,
92233146,16,0,344,1, 92420,349,1,1377,3150,
92241701,3147,16,0,344, 924316,0,349,1,172,
92251,447,1628,1,205, 92441595,1,1939,3151,16,
92261640,1,827,3148,16, 92450,349,1,437,3152,
92270,344,1,223,3149, 924616,0,349,1,188,
922816,0,344,1,476, 92471644,1,942,1616,1,
92291660,1,477,1666,1, 92481195,3153,16,0,349,
92301231,3150,16,0,344, 92491,1449,3154,16,0,
92311,479,1676,1,480, 9250349,1,1701,3155,16,
92321681,1,1485,3151,16, 92510,349,1,447,1637,
92330,344,1,1737,3152, 92521,205,1649,1,827,
923416,0,344,1,242, 92533156,16,0,349,1,
92351700,1,478,1705,1, 9254223,3157,16,0,349,
92361001,1710,1,1002,1715, 92551,476,1669,1,477,
92371,36,3153,19,242, 92561675,1,1231,3158,16,
92381,36,3154,5,94, 92570,349,1,479,1685,
92391,256,3155,16,0, 92581,480,1690,1,1485,
9240240,1,1261,3156,16, 92593159,16,0,349,1,
92410,240,1,509,3157, 92601737,3160,16,0,349,
924216,0,240,1,1515, 92611,242,1703,1,478,
92433158,16,0,240,1, 92621708,1,1001,1713,1,
92442021,840,1,1775,3159, 92631002,1718,1,36,3161,
924516,0,240,1,2029, 926419,239,1,36,3162,
9246847,1,2030,853,1, 92655,94,1,256,3163,
92472031,858,1,2032,863, 926616,0,237,1,1261,
92481,2033,868,1,277, 92673164,16,0,237,1,
92493160,16,0,240,1, 9268509,3165,16,0,237,
92502035,874,1,2037,879, 92691,1515,3166,16,0,
92511,2039,884,1,32, 9270237,1,2021,843,1,
92523161,16,0,240,1, 92711775,3167,16,0,237,
92532041,890,1,2293,3162, 92721,2029,850,1,2030,
925416,0,240,1,2043, 9273856,1,2031,861,1,
9255896,1,2045,901,1, 92742032,866,1,2033,871,
925641,3163,16,0,240, 92751,277,3168,16,0,
92571,1297,3164,16,0, 9276237,1,2035,877,1,
9258240,1,43,3165,16, 92772037,882,1,2039,887,
92590,240,1,1803,909, 92781,32,3169,16,0,
92601,1804,3166,16,0, 9279237,1,2041,893,1,
9261240,1,299,3167,16, 92802293,3170,16,0,237,
92620,240,1,52,3168, 92811,2043,899,1,2045,
926316,0,240,1,2318, 9282904,1,41,3171,16,
92643169,16,0,240,1, 92830,237,1,1297,3172,
92652075,3170,16,0,240, 928416,0,237,1,43,
92661,1574,921,1,71, 92853173,16,0,237,1,
92673171,16,0,240,1, 92861803,912,1,1804,3174,
926876,3172,16,0,240, 928716,0,237,1,299,
92691,1834,3173,16,0, 92883175,16,0,237,1,
9270240,1,2337,3174,16, 928952,3176,16,0,237,
92710,240,1,79,3175, 92901,2318,3177,16,0,
927216,0,240,1,1335, 9291237,1,2075,3178,16,
92733176,16,0,240,1, 92920,237,1,1574,924,
9274322,3177,16,0,240, 92931,71,3179,16,0,
92751,85,3178,16,0, 9294237,1,76,3180,16,
9276240,1,89,3179,16, 92950,237,1,1834,3181,
92770,240,1,346,3180, 929616,0,237,1,2337,
927816,0,240,1,2105, 92973182,16,0,237,1,
9279936,1,2106,3181,16, 929879,3183,16,0,237,
92800,240,1,97,3182, 92991,1335,3184,16,0,
928116,0,240,1,1860, 9300237,1,322,3185,16,
9282943,1,2364,949,1, 93010,237,1,85,3186,
9283102,3183,16,0,240, 930216,0,237,1,89,
92841,2782,3184,16,0, 93033187,16,0,237,1,
9285240,1,112,3185,16, 9304346,3188,16,0,237,
92860,240,1,1117,3186, 93051,2105,939,1,2106,
928716,0,240,1,1873, 93063189,16,0,237,1,
9288958,1,1876,3187,16, 930797,3190,16,0,237,
92890,240,1,124,3188, 93081,1860,946,1,2364,
929016,0,240,1,2136, 9309952,1,102,3191,16,
9291965,1,381,3189,16, 93100,237,1,112,3192,
92920,240,1,525,3190, 931116,0,237,1,1117,
929316,0,240,1,137, 93123193,16,0,237,1,
92943191,16,0,240,1, 93132786,3194,16,0,237,
92951901,3192,16,0,240, 93141,1873,961,1,1876,
92961,1153,3193,16,0, 93153195,16,0,237,1,
9297240,1,151,3194,16, 9316124,3196,16,0,237,
92980,240,1,1407,3195, 93171,2136,968,1,381,
929916,0,240,1,1659, 93183197,16,0,237,1,
93003196,16,0,240,1, 9319525,3198,16,0,237,
93012413,3197,16,0,240, 93201,137,3199,16,0,
93021,406,3198,16,0, 9321237,1,1901,3200,16,
9303240,1,1371,3199,16, 93220,237,1,1153,3201,
93040,240,1,166,3200, 932316,0,237,1,151,
930516,0,240,1,1622, 93243202,16,0,237,1,
93063201,16,0,240,1, 93251407,3203,16,0,237,
93071931,983,1,1933,3202, 93261,1659,3204,16,0,
930816,0,240,1,431, 9327237,1,2413,3205,16,
93093203,16,0,240,1, 93280,237,1,406,3206,
93101585,3204,16,0,240, 932916,0,237,1,1371,
93111,182,3205,16,0, 93303207,16,0,237,1,
9312240,1,1189,3206,16, 9331166,3208,16,0,237,
93130,240,1,1443,3207, 93321,1622,3209,16,0,
931416,0,240,1,1695, 9333237,1,1931,986,1,
93153208,16,0,240,1, 93341933,3210,16,0,237,
93162198,3209,16,0,240, 93351,431,3211,16,0,
93171,447,3210,16,0, 9336237,1,1585,3212,16,
9318240,1,2458,998,1, 93370,237,1,182,3213,
93192459,1004,1,1958,3211, 933816,0,237,1,1189,
932016,0,240,1,2462, 93393214,16,0,237,1,
93211011,1,1657,1016,1, 93401443,3215,16,0,237,
93222464,1021,1,199,3212, 93411,1695,3216,16,0,
932316,0,240,1,459, 9342237,1,2198,3217,16,
93243213,16,0,240,1, 93430,237,1,447,3218,
9325462,3214,16,0,240, 934416,0,237,1,2458,
93261,217,3215,16,0, 93451001,1,2459,1007,1,
9327240,1,2227,1030,1, 93461958,3219,16,0,237,
93281225,3216,16,0,240, 93471,2462,1014,1,1657,
93291,1479,3217,16,0, 93481019,1,2464,1024,1,
9330240,1,1731,3218,16, 9349199,3220,16,0,237,
93310,240,1,1989,1038, 93501,459,3221,16,0,
93321,1990,3219,16,0, 9351237,1,462,3222,16,
9333240,1,236,3220,16, 93520,237,1,217,3223,
93340,240,1,1756,3221, 935316,0,237,1,2227,
933516,0,240,1,37, 93541033,1,1225,3224,16,
93363222,19,263,1,37, 93550,237,1,1479,3225,
93373223,5,94,1,256, 935616,0,237,1,1731,
93383224,16,0,261,1, 93573226,16,0,237,1,
93391261,3225,16,0,261, 93581989,1041,1,1990,3227,
93401,509,3226,16,0, 935916,0,237,1,236,
9341261,1,1515,3227,16, 93603228,16,0,237,1,
93420,261,1,2021,840, 93611756,3229,16,0,237,
93431,1775,3228,16,0, 93621,37,3230,19,260,
9344261,1,2029,847,1, 93631,37,3231,5,94,
93452030,853,1,2031,858, 93641,256,3232,16,0,
93461,2032,863,1,2033, 9365258,1,1261,3233,16,
9347868,1,277,3229,16, 93660,258,1,509,3234,
93480,261,1,2035,874, 936716,0,258,1,1515,
93491,2037,879,1,2039, 93683235,16,0,258,1,
9350884,1,32,3230,16, 93692021,843,1,1775,3236,
93510,261,1,2041,890, 937016,0,258,1,2029,
93521,2293,3231,16,0, 9371850,1,2030,856,1,
9353261,1,2043,896,1, 93722031,861,1,2032,866,
93542045,901,1,41,3232, 93731,2033,871,1,277,
935516,0,261,1,1297, 93743237,16,0,258,1,
93563233,16,0,261,1, 93752035,877,1,2037,882,
935743,3234,16,0,261, 93761,2039,887,1,32,
93581,1803,909,1,1804, 93773238,16,0,258,1,
93593235,16,0,261,1, 93782041,893,1,2293,3239,
9360299,3236,16,0,261, 937916,0,258,1,2043,
93611,52,3237,16,0, 9380899,1,2045,904,1,
9362261,1,2318,3238,16, 938141,3240,16,0,258,
93630,261,1,2075,3239, 93821,1297,3241,16,0,
936416,0,261,1,1574, 9383258,1,43,3242,16,
9365921,1,71,3240,16, 93840,258,1,1803,912,
93660,261,1,76,3241, 93851,1804,3243,16,0,
936716,0,261,1,1834, 9386258,1,299,3244,16,
93683242,16,0,261,1, 93870,258,1,52,3245,
93692337,3243,16,0,261, 938816,0,258,1,2318,
93701,79,3244,16,0, 93893246,16,0,258,1,
9371261,1,1335,3245,16, 93902075,3247,16,0,258,
93720,261,1,322,3246, 93911,1574,924,1,71,
937316,0,261,1,85, 93923248,16,0,258,1,
93743247,16,0,261,1, 939376,3249,16,0,258,
937589,3248,16,0,261, 93941,1834,3250,16,0,
93761,346,3249,16,0, 9395258,1,2337,3251,16,
9377261,1,2105,936,1, 93960,258,1,79,3252,
93782106,3250,16,0,261, 939716,0,258,1,1335,
93791,97,3251,16,0, 93983253,16,0,258,1,
9380261,1,1860,943,1, 9399322,3254,16,0,258,
93812364,949,1,102,3252, 94001,85,3255,16,0,
938216,0,261,1,2782, 9401258,1,89,3256,16,
93833253,16,0,261,1, 94020,258,1,346,3257,
9384112,3254,16,0,261, 940316,0,258,1,2105,
93851,1117,3255,16,0, 9404939,1,2106,3258,16,
9386261,1,1873,958,1, 94050,258,1,97,3259,
93871876,3256,16,0,261, 940616,0,258,1,1860,
93881,124,3257,16,0, 9407946,1,2364,952,1,
9389261,1,2136,965,1, 9408102,3260,16,0,258,
9390381,3258,16,0,261, 94091,112,3261,16,0,
93911,525,3259,16,0, 9410258,1,1117,3262,16,
9392261,1,137,3260,16, 94110,258,1,2786,3263,
93930,261,1,1901,3261, 941216,0,258,1,1873,
939416,0,261,1,1153, 9413961,1,1876,3264,16,
93953262,16,0,261,1, 94140,258,1,124,3265,
9396151,3263,16,0,261, 941516,0,258,1,2136,
93971,1407,3264,16,0, 9416968,1,381,3266,16,
9398261,1,1659,3265,16, 94170,258,1,525,3267,
93990,261,1,2413,3266, 941816,0,258,1,137,
940016,0,261,1,406, 94193268,16,0,258,1,
94013267,16,0,261,1, 94201901,3269,16,0,258,
94021371,3268,16,0,261, 94211,1153,3270,16,0,
94031,166,3269,16,0, 9422258,1,151,3271,16,
9404261,1,1622,3270,16, 94230,258,1,1407,3272,
94050,261,1,1931,983, 942416,0,258,1,1659,
94061,1933,3271,16,0, 94253273,16,0,258,1,
9407261,1,431,3272,16, 94262413,3274,16,0,258,
94080,261,1,1585,3273, 94271,406,3275,16,0,
940916,0,261,1,182, 9428258,1,1371,3276,16,
94103274,16,0,261,1, 94290,258,1,166,3277,
94111189,3275,16,0,261, 943016,0,258,1,1622,
94121,1443,3276,16,0, 94313278,16,0,258,1,
9413261,1,1695,3277,16, 94321931,986,1,1933,3279,
94140,261,1,2198,3278, 943316,0,258,1,431,
941516,0,261,1,447, 94343280,16,0,258,1,
94163279,16,0,261,1, 94351585,3281,16,0,258,
94172458,998,1,2459,1004, 94361,182,3282,16,0,
94181,1958,3280,16,0, 9437258,1,1189,3283,16,
9419261,1,2462,1011,1, 94380,258,1,1443,3284,
94201657,1016,1,2464,1021, 943916,0,258,1,1695,
94211,199,3281,16,0, 94403285,16,0,258,1,
9422261,1,459,3282,16, 94412198,3286,16,0,258,
94230,261,1,462,3283, 94421,447,3287,16,0,
942416,0,261,1,217, 9443258,1,2458,1001,1,
94253284,16,0,261,1, 94442459,1007,1,1958,3288,
94262227,1030,1,1225,3285, 944516,0,258,1,2462,
942716,0,261,1,1479, 94461014,1,1657,1019,1,
94283286,16,0,261,1, 94472464,1024,1,199,3289,
94291731,3287,16,0,261, 944816,0,258,1,459,
94301,1989,1038,1,1990, 94493290,16,0,258,1,
94313288,16,0,261,1, 9450462,3291,16,0,258,
9432236,3289,16,0,261, 94511,217,3292,16,0,
94331,1756,3290,16,0, 9452258,1,2227,1033,1,
9434261,1,38,3291,19, 94531225,3293,16,0,258,
9435260,1,38,3292,5, 94541,1479,3294,16,0,
943684,1,1011,1224,1, 9455258,1,1731,3295,16,
94371012,3293,16,0,258, 94560,258,1,1989,1041,
94381,1013,1381,1,262, 94571,1990,3296,16,0,
94391241,1,1267,3294,16, 9458258,1,236,3297,16,
94400,258,1,515,3295, 94590,258,1,1756,3298,
944116,0,258,1,1521, 946016,0,258,1,38,
94423296,16,0,258,1, 94613299,19,257,1,38,
9443525,1339,1,2788,3297, 94623300,5,84,1,1011,
944416,0,258,1,283, 94631227,1,1012,3301,16,
94451295,1,2299,3298,16, 94640,255,1,1013,1385,
94460,258,1,42,3299, 94651,262,1244,1,1267,
944716,0,258,1,40, 94663302,16,0,255,1,
94481300,1,44,1306,1, 9467515,3303,16,0,255,
944947,1307,1,1303,3300, 94681,1521,3304,16,0,
945016,0,258,1,1555, 9469255,1,525,1343,1,
94513301,16,0,258,1, 94702792,3305,16,0,255,
945250,1324,1,48,1313, 94711,283,1299,1,2299,
94531,49,1319,1,51, 94723306,16,0,255,1,
94541329,1,63,1345,1, 947342,3307,16,0,255,
9455305,1334,1,66,1351, 94741,40,1304,1,44,
94561,67,1356,1,68, 94751310,1,47,1311,1,
94571361,1,69,1366,1, 94761303,3308,16,0,255,
945870,1371,1,73,3302, 94771,1555,3309,16,0,
945916,0,258,1,74, 9478255,1,50,1328,1,
94601376,1,328,1425,1, 947948,1317,1,49,1323,
94611048,1462,1,82,3303, 94801,51,1333,1,63,
946216,0,258,1,1840, 94811349,1,305,1338,1,
94633304,16,0,258,1, 948266,1355,1,67,1360,
94641591,3305,16,0,258, 94831,68,1365,1,69,
94651,1341,3306,16,0, 94841370,1,70,1375,1,
9466258,1,1096,1694,1, 948573,3310,16,0,255,
946793,1435,1,352,1467, 94861,74,1380,1,328,
94681,107,3307,16,0, 94871429,1,1048,1470,1,
9469258,1,1114,1461,1, 948882,3311,16,0,255,
9470118,1473,1,1123,3308, 94891,1840,3312,16,0,
947116,0,258,1,371, 9490255,1,1591,3313,16,
94721483,1,1628,3309,16, 94910,255,1,1341,3314,
94730,258,1,375,1494, 949216,0,255,1,1096,
94741,1882,3310,16,0, 94931439,1,93,1445,1,
9475258,1,377,1499,1, 9494352,1475,1,107,3315,
9476379,1504,1,380,1509, 949516,0,255,1,1114,
94771,883,1515,1,373, 94961469,1,118,1481,1,
94781527,1,130,1532,1, 94971123,3316,16,0,255,
9479143,1537,1,387,3311, 94981,371,1491,1,1628,
948016,0,258,1,1159, 94993317,16,0,255,1,
94813312,16,0,258,1, 9500375,1502,1,1882,3318,
9482157,1560,1,1413,3313, 950116,0,255,1,377,
948316,0,258,1,1665, 95021507,1,379,1512,1,
94843314,16,0,258,1, 9503380,1517,1,883,1523,
9485412,3315,16,0,258, 95041,373,1535,1,130,
94861,1377,3316,16,0, 95051540,1,143,1545,1,
9487258,1,172,1586,1, 9506387,3319,16,0,255,
94881939,3317,16,0,258, 95071,1159,3320,16,0,
94891,437,3318,16,0, 9508255,1,157,1568,1,
9490258,1,188,1635,1, 95091413,3321,16,0,255,
9491942,1607,1,1195,3319, 95101,1665,3322,16,0,
949216,0,258,1,1449, 9511255,1,412,3323,16,
94933320,16,0,258,1, 95120,255,1,1377,3324,
94941701,3321,16,0,258, 951316,0,255,1,172,
94951,447,1628,1,205, 95141595,1,1939,3325,16,
94961640,1,827,1448,1, 95150,255,1,437,3326,
9497223,1650,1,476,1660, 951616,0,255,1,188,
94981,477,1666,1,1231, 95171644,1,942,1616,1,
94993322,16,0,258,1, 95181195,3327,16,0,255,
9500479,1676,1,480,1681, 95191,1449,3328,16,0,
95011,1485,3323,16,0, 9520255,1,1701,3329,16,
9502258,1,1737,3324,16, 95210,255,1,447,1637,
95030,258,1,242,1700, 95221,205,1649,1,827,
95041,478,1705,1,1001, 95231457,1,223,1659,1,
95051710,1,1002,1715,1, 9524476,1669,1,477,1675,
950639,3325,19,248,1, 95251,1231,3330,16,0,
950739,3326,5,84,1, 9526255,1,479,1685,1,
95081011,1224,1,1012,3327, 9527480,1690,1,1485,3331,
950916,0,246,1,1013, 952816,0,255,1,1737,
95101381,1,262,1241,1, 95293332,16,0,255,1,
95111267,3328,16,0,246, 9530242,1703,1,478,1708,
95121,515,3329,16,0, 95311,1001,1713,1,1002,
9513246,1,1521,3330,16, 95321718,1,39,3333,19,
95140,246,1,525,1339, 9533245,1,39,3334,5,
95151,2788,3331,16,0, 953484,1,1011,1227,1,
9516246,1,283,1295,1, 95351012,3335,16,0,243,
95172299,3332,16,0,246, 95361,1013,1385,1,262,
95181,42,3333,16,0, 95371244,1,1267,3336,16,
9519246,1,40,1300,1, 95380,243,1,515,3337,
952044,1306,1,47,1307, 953916,0,243,1,1521,
95211,1303,3334,16,0, 95403338,16,0,243,1,
9522246,1,1555,3335,16, 9541525,1343,1,2792,3339,
95230,246,1,50,1324, 954216,0,243,1,283,
95241,48,1313,1,49, 95431299,1,2299,3340,16,
95251319,1,51,1329,1, 95440,243,1,42,3341,
952663,1345,1,305,1334, 954516,0,243,1,40,
95271,66,1351,1,67, 95461304,1,44,1310,1,
95281356,1,68,1361,1, 954747,1311,1,1303,3342,
952969,1366,1,70,1371, 954816,0,243,1,1555,
95301,73,3336,16,0, 95493343,16,0,243,1,
9531246,1,74,1376,1, 955050,1328,1,48,1317,
9532328,1425,1,1048,1462, 95511,49,1323,1,51,
95331,82,3337,16,0, 95521333,1,63,1349,1,
9534246,1,1840,3338,16, 9553305,1338,1,66,1355,
95350,246,1,1591,3339, 95541,67,1360,1,68,
953616,0,246,1,1341, 95551365,1,69,1370,1,
95373340,16,0,246,1, 955670,1375,1,73,3344,
95381096,1694,1,93,1435, 955716,0,243,1,74,
95391,352,1467,1,107, 95581380,1,328,1429,1,
95403341,16,0,246,1, 95591048,1470,1,82,3345,
95411114,1461,1,118,1473, 956016,0,243,1,1840,
95421,1123,3342,16,0, 95613346,16,0,243,1,
9543246,1,371,1483,1, 95621591,3347,16,0,243,
95441628,3343,16,0,246, 95631,1341,3348,16,0,
95451,375,1494,1,1882, 9564243,1,1096,1439,1,
95463344,16,0,246,1, 956593,1445,1,352,1475,
9547377,1499,1,379,1504, 95661,107,3349,16,0,
95481,380,1509,1,883, 9567243,1,1114,1469,1,
95491515,1,373,1527,1, 9568118,1481,1,1123,3350,
9550130,1532,1,143,1537, 956916,0,243,1,371,
95511,387,3345,16,0, 95701491,1,1628,3351,16,
9552246,1,1159,3346,16, 95710,243,1,375,1502,
95530,246,1,157,1560, 95721,1882,3352,16,0,
95541,1413,3347,16,0, 9573243,1,377,1507,1,
9555246,1,1665,3348,16, 9574379,1512,1,380,1517,
95560,246,1,412,3349, 95751,883,1523,1,373,
955716,0,246,1,1377, 95761535,1,130,1540,1,
95583350,16,0,246,1, 9577143,1545,1,387,3353,
9559172,1586,1,1939,3351, 957816,0,243,1,1159,
956016,0,246,1,437, 95793354,16,0,243,1,
95613352,16,0,246,1, 9580157,1568,1,1413,3355,
9562188,1635,1,942,1607, 958116,0,243,1,1665,
95631,1195,3353,16,0, 95823356,16,0,243,1,
9564246,1,1449,3354,16, 9583412,3357,16,0,243,
95650,246,1,1701,3355, 95841,1377,3358,16,0,
956616,0,246,1,447, 9585243,1,172,1595,1,
95671628,1,205,1640,1, 95861939,3359,16,0,243,
9568827,1448,1,223,1650, 95871,437,3360,16,0,
95691,476,1660,1,477, 9588243,1,188,1644,1,
95701666,1,1231,3356,16, 9589942,1616,1,1195,3361,
95710,246,1,479,1676, 959016,0,243,1,1449,
95721,480,1681,1,1485, 95913362,16,0,243,1,
95733357,16,0,246,1, 95921701,3363,16,0,243,
95741737,3358,16,0,246, 95931,447,1637,1,205,
95751,242,1700,1,478, 95941649,1,827,1457,1,
95761705,1,1001,1710,1, 9595223,1659,1,476,1669,
95771002,1715,1,40,3359, 95961,477,1675,1,1231,
957819,236,1,40,3360, 95973364,16,0,243,1,
95795,84,1,1011,1224, 9598479,1685,1,480,1690,
95801,1012,3361,16,0, 95991,1485,3365,16,0,
9581234,1,1013,1381,1, 9600243,1,1737,3366,16,
9582262,1241,1,1267,3362, 96010,243,1,242,1703,
958316,0,234,1,515, 96021,478,1708,1,1001,
95843363,16,0,234,1, 96031713,1,1002,1718,1,
95851521,3364,16,0,234, 960440,3367,19,233,1,
95861,525,1339,1,2788, 960540,3368,5,84,1,
95873365,16,0,234,1, 96061011,1227,1,1012,3369,
9588283,1295,1,2299,3366, 960716,0,231,1,1013,
958916,0,234,1,42, 96081385,1,262,1244,1,
95903367,16,0,234,1, 96091267,3370,16,0,231,
959140,1300,1,44,1306, 96101,515,3371,16,0,
95921,47,1307,1,1303, 9611231,1,1521,3372,16,
95933368,16,0,234,1, 96120,231,1,525,1343,
95941555,3369,16,0,234, 96131,2792,3373,16,0,
95951,50,1324,1,48, 9614231,1,283,1299,1,
95961313,1,49,1319,1, 96152299,3374,16,0,231,
959751,1329,1,63,1345, 96161,42,3375,16,0,
95981,305,1334,1,66, 9617231,1,40,1304,1,
95991351,1,67,1356,1, 961844,1310,1,47,1311,
960068,1361,1,69,1366, 96191,1303,3376,16,0,
96011,70,1371,1,73, 9620231,1,1555,3377,16,
96023370,16,0,234,1, 96210,231,1,50,1328,
960374,1376,1,328,1425, 96221,48,1317,1,49,
96041,1048,1462,1,82, 96231323,1,51,1333,1,
96053371,16,0,234,1, 962463,1349,1,305,1338,
96061840,3372,16,0,234, 96251,66,1355,1,67,
96071,1591,3373,16,0, 96261360,1,68,1365,1,
9608234,1,1341,3374,16, 962769,1370,1,70,1375,
96090,234,1,1096,1694, 96281,73,3378,16,0,
96101,93,1435,1,352, 9629231,1,74,1380,1,
96111467,1,107,3375,16, 9630328,1429,1,1048,1470,
96120,234,1,1114,1461, 96311,82,3379,16,0,
96131,118,3376,16,0, 9632231,1,1840,3380,16,
9614234,1,1123,3377,16, 96330,231,1,1591,3381,
96150,234,1,371,1483, 963416,0,231,1,1341,
96161,1628,3378,16,0, 96353382,16,0,231,1,
9617234,1,375,1494,1, 96361096,1439,1,93,1445,
96181882,3379,16,0,234, 96371,352,1475,1,107,
96191,377,1499,1,379, 96383383,16,0,231,1,
96201504,1,380,1509,1, 96391114,1469,1,118,3384,
9621883,3380,16,0,234, 964016,0,231,1,1123,
96221,373,1527,1,130, 96413385,16,0,231,1,
96233381,16,0,234,1, 9642371,1491,1,1628,3386,
9624143,3382,16,0,234, 964316,0,231,1,375,
96251,387,3383,16,0, 96441502,1,1882,3387,16,
9626234,1,1159,3384,16, 96450,231,1,377,1507,
96270,234,1,157,3385, 96461,379,1512,1,380,
962816,0,234,1,1413, 96471517,1,883,3388,16,
96293386,16,0,234,1, 96480,231,1,373,1535,
96301665,3387,16,0,234, 96491,130,3389,16,0,
96311,412,3388,16,0, 9650231,1,143,3390,16,
9632234,1,1377,3389,16, 96510,231,1,387,3391,
96330,234,1,172,3390, 965216,0,231,1,1159,
963416,0,234,1,1939, 96533392,16,0,231,1,
96353391,16,0,234,1, 9654157,3393,16,0,231,
9636437,3392,16,0,234, 96551,1413,3394,16,0,
96371,188,3393,16,0, 9656231,1,1665,3395,16,
9638234,1,942,1607,1, 96570,231,1,412,3396,
96391195,3394,16,0,234, 965816,0,231,1,1377,
96401,1449,3395,16,0, 96593397,16,0,231,1,
9641234,1,1701,3396,16, 9660172,3398,16,0,231,
96420,234,1,447,1628, 96611,1939,3399,16,0,
96431,205,3397,16,0, 9662231,1,437,3400,16,
9644234,1,827,3398,16, 96630,231,1,188,3401,
96450,234,1,223,3399, 966416,0,231,1,942,
964616,0,234,1,476, 96651616,1,1195,3402,16,
96471660,1,477,1666,1, 96660,231,1,1449,3403,
96481231,3400,16,0,234, 966716,0,231,1,1701,
96491,479,1676,1,480, 96683404,16,0,231,1,
96501681,1,1485,3401,16, 9669447,1637,1,205,3405,
96510,234,1,1737,3402, 967016,0,231,1,827,
965216,0,234,1,242, 96713406,16,0,231,1,
96533403,16,0,234,1, 9672223,3407,16,0,231,
9654478,1705,1,1001,1710, 96731,476,1669,1,477,
96551,1002,1715,1,41, 96741675,1,1231,3408,16,
96563404,19,191,1,41, 96750,231,1,479,1685,
96573405,5,84,1,1011, 96761,480,1690,1,1485,
96581224,1,1012,3406,16, 96773409,16,0,231,1,
96590,189,1,1013,1381, 96781737,3410,16,0,231,
96601,262,1241,1,1267, 96791,242,3411,16,0,
96613407,16,0,189,1, 9680231,1,478,1708,1,
9662515,3408,16,0,189, 96811001,1713,1,1002,1718,
96631,1521,3409,16,0, 96821,41,3412,19,188,
9664189,1,525,1339,1, 96831,41,3413,5,84,
96652788,3410,16,0,189, 96841,1011,1227,1,1012,
96661,283,1295,1,2299, 96853414,16,0,186,1,
96673411,16,0,189,1, 96861013,1385,1,262,1244,
966842,3412,16,0,189, 96871,1267,3415,16,0,
96691,40,1300,1,44, 9688186,1,515,3416,16,
96701306,1,47,1307,1, 96890,186,1,1521,3417,
96711303,3413,16,0,189, 969016,0,186,1,525,
96721,1555,3414,16,0, 96911343,1,2792,3418,16,
9673189,1,50,1324,1, 96920,186,1,283,1299,
967448,1313,1,49,1319, 96931,2299,3419,16,0,
96751,51,1329,1,63, 9694186,1,42,3420,16,
96761345,1,305,1334,1, 96950,186,1,40,1304,
967766,1351,1,67,1356, 96961,44,1310,1,47,
96781,68,1361,1,69, 96971311,1,1303,3421,16,
96791366,1,70,1371,1, 96980,186,1,1555,3422,
968073,3415,16,0,189, 969916,0,186,1,50,
96811,74,1376,1,328, 97001328,1,48,1317,1,
96821425,1,1048,1462,1, 970149,1323,1,51,1333,
968382,3416,16,0,189, 97021,63,1349,1,305,
96841,1840,3417,16,0, 97031338,1,66,1355,1,
9685189,1,1591,3418,16, 970467,1360,1,68,1365,
96860,189,1,1341,3419, 97051,69,1370,1,70,
968716,0,189,1,1096, 97061375,1,73,3423,16,
96881694,1,93,1435,1, 97070,186,1,74,1380,
9689352,1467,1,107,3420, 97081,328,1429,1,1048,
969016,0,189,1,1114, 97091470,1,82,3424,16,
96911461,1,118,3421,16, 97100,186,1,1840,3425,
96920,189,1,1123,3422, 971116,0,186,1,1591,
969316,0,189,1,371, 97123426,16,0,186,1,
96941483,1,1628,3423,16, 97131341,3427,16,0,186,
96950,189,1,375,1494, 97141,1096,1439,1,93,
96961,1882,3424,16,0, 97151445,1,352,1475,1,
9697189,1,377,1499,1, 9716107,3428,16,0,186,
9698379,1504,1,380,1509, 97171,1114,1469,1,118,
96991,883,3425,16,0, 97183429,16,0,186,1,
9700189,1,373,1527,1, 97191123,3430,16,0,186,
9701130,3426,16,0,189, 97201,371,1491,1,1628,
97021,143,3427,16,0, 97213431,16,0,186,1,
9703189,1,387,3428,16, 9722375,1502,1,1882,3432,
97040,189,1,1159,3429, 972316,0,186,1,377,
970516,0,189,1,157, 97241507,1,379,1512,1,
97063430,16,0,189,1, 9725380,1517,1,883,3433,
97071413,3431,16,0,189, 972616,0,186,1,373,
97081,1665,3432,16,0, 97271535,1,130,3434,16,
9709189,1,412,3433,16, 97280,186,1,143,3435,
97100,189,1,1377,3434, 972916,0,186,1,387,
971116,0,189,1,172, 97303436,16,0,186,1,
97123435,16,0,189,1, 97311159,3437,16,0,186,
97131939,3436,16,0,189, 97321,157,3438,16,0,
97141,437,3437,16,0, 9733186,1,1413,3439,16,
9715189,1,188,3438,16, 97340,186,1,1665,3440,
97160,189,1,942,1607, 973516,0,186,1,412,
97171,1195,3439,16,0, 97363441,16,0,186,1,
9718189,1,1449,3440,16, 97371377,3442,16,0,186,
97190,189,1,1701,3441, 97381,172,3443,16,0,
972016,0,189,1,447, 9739186,1,1939,3444,16,
97211628,1,205,3442,16, 97400,186,1,437,3445,
97220,189,1,827,3443, 974116,0,186,1,188,
972316,0,189,1,223, 97423446,16,0,186,1,
97243444,16,0,189,1, 9743942,1616,1,1195,3447,
9725476,1660,1,477,1666, 974416,0,186,1,1449,
97261,1231,3445,16,0, 97453448,16,0,186,1,
9727189,1,479,1676,1, 97461701,3449,16,0,186,
9728480,1681,1,1485,3446, 97471,447,1637,1,205,
972916,0,189,1,1737, 97483450,16,0,186,1,
97303447,16,0,189,1, 9749827,3451,16,0,186,
9731242,3448,16,0,189, 97501,223,3452,16,0,
97321,478,1705,1,1001, 9751186,1,476,1669,1,
97331710,1,1002,1715,1, 9752477,1675,1,1231,3453,
973442,3449,19,430,1, 975316,0,186,1,479,
973542,3450,5,38,1, 97541685,1,480,1690,1,
97361901,3451,16,0,428, 97551485,3454,16,0,186,
97371,2075,3452,16,0, 97561,1737,3455,16,0,
9738428,1,1860,943,1, 9757186,1,242,3456,16,
97391803,909,1,1804,3453, 97580,186,1,478,1708,
974016,0,428,1,2413, 97591,1001,1713,1,1002,
97413454,16,0,428,1, 97601718,1,42,3457,19,
97422198,3455,16,0,428, 9761440,1,42,3458,5,
97431,1873,958,1,1657, 976238,1,1901,3459,16,
97441016,1,1989,1038,1, 97630,438,1,2075,3460,
97451990,3456,16,0,428, 976416,0,438,1,1860,
97461,1775,3457,16,0, 9765946,1,1803,912,1,
9747428,1,32,3458,16, 97661804,3461,16,0,438,
97480,428,1,2105,936, 97671,2413,3462,16,0,
97491,2106,3459,16,0, 9768438,1,2198,3463,16,
9750428,1,2364,949,1, 97690,438,1,1873,961,
97512227,1030,1,2337,3460, 97701,1657,1019,1,1989,
975216,0,428,1,2021, 97711041,1,1990,3464,16,
9753840,1,2458,998,1, 97720,438,1,1775,3465,
97542459,1004,1,2462,1011, 977316,0,438,1,32,
97551,2136,965,1,2464, 97743466,16,0,438,1,
97561021,1,2029,847,1, 97752105,939,1,2106,3467,
97572030,853,1,2031,858, 977616,0,438,1,2364,
97581,2032,863,1,2033, 9777952,1,2227,1033,1,
9759868,1,2035,874,1, 97782337,3468,16,0,438,
97602037,879,1,2039,884, 97791,2021,843,1,2458,
97611,1931,983,1,2041, 97801001,1,2459,1007,1,
9762890,1,2043,896,1, 97812462,1014,1,2136,968,
97632045,901,1,1574,921, 97821,2464,1024,1,2029,
97641,1958,3461,16,0, 9783850,1,2030,856,1,
9765428,1,43,3462,19, 97842031,861,1,2032,866,
9766518,1,43,3463,5, 97851,2033,871,1,2035,
976725,1,2035,874,1, 9786877,1,2037,882,1,
97682037,879,1,2039,884, 97872039,887,1,1931,986,
97691,2041,890,1,2227, 97881,2041,893,1,2043,
97701030,1,2043,896,1, 9789899,1,2045,904,1,
97711657,1016,1,1860,943, 97901574,924,1,1958,3469,
97721,2136,965,1,2021, 979116,0,438,1,43,
9773840,1,2459,1004,1, 97923470,19,532,1,43,
97741574,921,1,2105,3464, 97933471,5,25,1,2035,
977516,0,683,1,1931, 9794877,1,2037,882,1,
9776983,1,1873,958,1, 97952039,887,1,2041,893,
97772031,858,1,1803,909, 97961,2227,1033,1,2043,
97781,1989,3465,16,0, 9797899,1,1657,1019,1,
9779516,1,2464,1021,1, 97981860,946,1,2136,968,
97802029,847,1,2030,853, 97991,2021,843,1,2459,
97811,2364,949,1,2032, 98001007,1,1574,924,1,
9782863,1,2033,868,1, 98012105,3472,16,0,698,
97832045,901,1,44,3466, 98021,1931,986,1,1873,
978419,289,1,44,3467, 9803961,1,2031,861,1,
97855,38,1,1901,3468, 98041803,912,1,1989,3473,
978616,0,287,1,2075, 980516,0,530,1,2464,
97873469,16,0,287,1, 98061024,1,2029,850,1,
97881860,943,1,1803,909, 98072030,856,1,2364,952,
97891,1804,3470,16,0, 98081,2032,866,1,2033,
9790287,1,2413,3471,16, 9809871,1,2045,904,1,
97910,287,1,2198,3472, 981044,3474,19,292,1,
979216,0,287,1,1873, 981144,3475,5,38,1,
9793958,1,1657,1016,1, 98121901,3476,16,0,290,
97941989,1038,1,1990,3473, 98131,2075,3477,16,0,
979516,0,287,1,1775, 9814290,1,1860,946,1,
97963474,16,0,287,1, 98151803,912,1,1804,3478,
979732,3475,16,0,287, 981616,0,290,1,2413,
97981,2105,936,1,2106, 98173479,16,0,290,1,
97993476,16,0,287,1, 98182198,3480,16,0,290,
98002364,949,1,2227,1030, 98191,1873,961,1,1657,
98011,2337,3477,16,0, 98201019,1,1989,1041,1,
9802287,1,2021,840,1, 98211990,3481,16,0,290,
98032458,998,1,2459,1004, 98221,1775,3482,16,0,
98041,2462,1011,1,2136, 9823290,1,32,3483,16,
9805965,1,2464,1021,1, 98240,290,1,2105,939,
98062029,847,1,2030,853, 98251,2106,3484,16,0,
98071,2031,858,1,2032, 9826290,1,2364,952,1,
9808863,1,2033,868,1, 98272227,1033,1,2337,3485,
98092035,874,1,2037,879, 982816,0,290,1,2021,
98101,2039,884,1,1931, 9829843,1,2458,1001,1,
9811983,1,2041,890,1, 98302459,1007,1,2462,1014,
98122043,896,1,2045,901, 98311,2136,968,1,2464,
98131,1574,921,1,1958, 98321024,1,2029,850,1,
98143478,16,0,287,1, 98332030,856,1,2031,861,
981545,3479,19,320,1, 98341,2032,866,1,2033,
981645,3480,5,39,1, 9835871,1,2035,877,1,
98171901,3481,16,0,350, 98362037,882,1,2039,887,
98181,2075,3482,16,0, 98371,1931,986,1,2041,
9819350,1,1860,943,1, 9838893,1,2043,899,1,
98201803,909,1,1804,3483, 98392045,904,1,1574,924,
982116,0,350,1,2413, 98401,1958,3486,16,0,
98223484,16,0,350,1, 9841290,1,45,3487,19,
98232198,3485,16,0,350, 9842325,1,45,3488,5,
98241,1873,958,1,1657, 984339,1,1901,3489,16,
98251016,1,1989,1038,1, 98440,355,1,2075,3490,
98261990,3486,16,0,350, 984516,0,355,1,1860,
98271,1775,3487,16,0, 9846946,1,1803,912,1,
9828350,1,32,3488,16, 98471804,3491,16,0,355,
98290,350,1,2105,936, 98481,2413,3492,16,0,
98301,2106,3489,16,0, 9849355,1,2198,3493,16,
9831350,1,2364,949,1, 98500,355,1,1873,961,
98322227,1030,1,2337,3490, 98511,1657,1019,1,1989,
983316,0,350,1,2021, 98521041,1,1990,3494,16,
9834840,1,2458,998,1, 98530,355,1,1775,3495,
98352459,1004,1,2462,1011, 985416,0,355,1,32,
98361,2136,965,1,2464, 98553496,16,0,355,1,
98371021,1,2029,847,1, 98562105,939,1,2106,3497,
98382030,853,1,2031,858, 985716,0,355,1,2364,
98391,2032,863,1,2033, 9858952,1,2227,1033,1,
9840868,1,2035,874,1, 98592337,3498,16,0,355,
98412037,879,1,2039,884, 98601,2021,843,1,2458,
98421,1931,983,1,2041, 98611001,1,2459,1007,1,
9843890,1,2043,896,1, 98622462,1014,1,2136,968,
98442045,901,1,1832,3491, 98631,2464,1024,1,2029,
984516,0,318,1,1574, 9864850,1,2030,856,1,
9846921,1,1958,3492,16, 98652031,861,1,2032,866,
98470,350,1,46,3493, 98661,2033,871,1,2035,
984819,789,1,46,3494, 9867877,1,2037,882,1,
98495,38,1,1901,3495, 98682039,887,1,1931,986,
985016,0,787,1,2075, 98691,2041,893,1,2043,
98513496,16,0,787,1, 9870899,1,2045,904,1,
98521860,943,1,1803,909, 98711832,3499,16,0,323,
98531,1804,3497,16,0, 98721,1574,924,1,1958,
9854787,1,2413,3498,16, 98733500,16,0,355,1,
98550,787,1,2198,3499, 987446,3501,19,794,1,
985616,0,787,1,1873, 987546,3502,5,38,1,
9857958,1,1657,1016,1, 98761901,3503,16,0,792,
98581989,1038,1,1990,3500, 98771,2075,3504,16,0,
985916,0,787,1,1775, 9878792,1,1860,946,1,
98603501,16,0,787,1, 98791803,912,1,1804,3505,
986132,3502,16,0,787, 988016,0,792,1,2413,
98621,2105,936,1,2106, 98813506,16,0,792,1,
98633503,16,0,787,1, 98822198,3507,16,0,792,
98642364,949,1,2227,1030, 98831,1873,961,1,1657,
98651,2337,3504,16,0, 98841019,1,1989,1041,1,
9866787,1,2021,840,1, 98851990,3508,16,0,792,
98672458,998,1,2459,1004, 98861,1775,3509,16,0,
98681,2462,1011,1,2136, 9887792,1,32,3510,16,
9869965,1,2464,1021,1, 98880,792,1,2105,939,
98702029,847,1,2030,853, 98891,2106,3511,16,0,
98711,2031,858,1,2032, 9890792,1,2364,952,1,
9872863,1,2033,868,1, 98912227,1033,1,2337,3512,
98732035,874,1,2037,879, 989216,0,792,1,2021,
98741,2039,884,1,1931, 9893843,1,2458,1001,1,
9875983,1,2041,890,1, 98942459,1007,1,2462,1014,
98762043,896,1,2045,901, 98951,2136,968,1,2464,
98771,1574,921,1,1958, 98961024,1,2029,850,1,
98783505,16,0,787,1, 98972030,856,1,2031,861,
987947,3506,19,660,1, 98981,2032,866,1,2033,
988047,3507,5,19,1, 9899871,1,2035,877,1,
98810,3508,16,0,760, 99002037,882,1,2039,887,
98821,2760,3509,16,0, 99011,1931,986,1,2041,
9883760,1,2779,3510,17, 9902893,1,2043,899,1,
98843511,15,3512,4,50, 99032045,904,1,1574,924,
988537,0,71,0,108, 99041,1958,3513,16,0,
98860,111,0,98,0, 9905792,1,47,3514,19,
988797,0,108,0,70, 9906283,1,47,3515,5,
98880,117,0,110,0, 990719,1,0,3516,16,
988999,0,116,0,105, 99080,281,1,2783,3517,
98900,111,0,110,0, 990917,3518,15,3519,4,
989168,0,101,0,102, 991050,37,0,71,0,
98920,105,0,110,0,
9893105,0,116,0,105,
98940,111,0,110,0,
98951,-1,1,5,3513,
989620,3514,4,52,71,
98970,108,0,111,0,
989898,0,97,0,108,
98990,70,0,117,0,
9900110,0,99,0,116,
99010,105,0,111,0,
9902110,0,68,0,101,
99030,102,0,105,0,
9904110,0,105,0,116,
99050,105,0,111,0,
9906110,0,95,0,49,
99070,1,174,1,3,
99081,6,1,5,3515,
990922,1,9,1,2764,
9910801,1,2818,3516,17,
99113517,15,3518,4,52,
991237,0,71,0,108,
99130,111,0,98,0,
991497,0,108,0,86,
99150,97,0,114,0,
9916105,0,97,0,98,
99170,108,0,101,0,
991868,0,101,0,99,
99190,108,0,97,0,
9920114,0,97,0,116,
99210,105,0,111,0,
9922110,0,1,-1,1,
99235,3519,20,3520,4,
992454,71,0,108,0,
9925111,0,98,0,97,
99260,108,0,86,0,
992797,0,114,0,105,
99280,97,0,98,0,
9929108,0,101,0,68,
99300,101,0,99,0,
9931108,0,97,0,114,
99320,97,0,116,0,
9933105,0,111,0,110,
99340,95,0,49,0,
99351,172,1,3,1,
99363,1,2,3521,22,
99371,7,1,2819,3522,
993816,0,760,1,2751,
9939807,1,2022,3523,16,
99400,658,1,2459,1004,
99411,2830,3524,16,0,
9942760,1,2647,824,1,
99432464,1021,1,2466,3525,
994417,3526,15,3512,1,
9945-1,1,5,3527,20,
99463528,4,52,71,0,
9947108,0,111,0,98, 9911108,0,111,0,98,
99480,97,0,108,0, 99120,97,0,108,0,
994970,0,117,0,110, 991370,0,117,0,110,
@@ -9953,60 +9917,96 @@ public yyLSLSyntax
9953102,0,105,0,110, 9917102,0,105,0,110,
99540,105,0,116,0, 99180,105,0,116,0,
9955105,0,111,0,110, 9919105,0,111,0,110,
99560,95,0,50,0, 99200,1,-1,1,5,
99571,175,1,3,1, 99213520,20,3521,4,52,
99587,1,6,3529,22, 992271,0,108,0,111,
99591,10,1,2837,3530, 99230,98,0,97,0,
996017,3531,15,3532,4, 9924108,0,70,0,117,
996136,37,0,71,0, 99250,110,0,99,0,
9962108,0,111,0,98, 9926116,0,105,0,111,
99630,97,0,108,0, 99270,110,0,68,0,
996468,0,101,0,102,
99650,105,0,110,0,
9966105,0,116,0,105,
99670,111,0,110,0,
9968115,0,1,-1,1,
99695,3533,20,3534,4,
997038,71,0,108,0,
9971111,0,98,0,97,
99720,108,0,68,0,
9973101,0,102,0,105, 9928101,0,102,0,105,
99740,110,0,105,0, 99290,110,0,105,0,
9975116,0,105,0,111, 9930116,0,105,0,111,
99760,110,0,115,0, 99310,110,0,95,0,
997795,0,52,0,1, 993249,0,1,175,1,
9978171,1,3,1,3, 99333,1,6,1,5,
99791,2,3535,22,1, 99343522,22,1,9,1,
99806,1,2838,3536,17, 99352464,1024,1,2767,822,
99813537,15,3532,1,-1, 99361,2768,810,1,2822,
99821,5,3538,20,3539, 99373523,17,3524,15,3525,
99834,38,71,0,108, 99384,52,37,0,71,
99840,111,0,98,0, 99390,108,0,111,0,
998597,0,108,0,68, 994098,0,97,0,108,
99860,101,0,102,0, 99410,86,0,97,0,
9987105,0,110,0,105, 9942114,0,105,0,97,
99430,98,0,108,0,
9944101,0,68,0,101,
99450,99,0,108,0,
994697,0,114,0,97,
99880,116,0,105,0, 99470,116,0,105,0,
9989111,0,110,0,115, 9948111,0,110,0,1,
99900,95,0,50,0, 9949-1,1,5,3526,20,
99911,169,1,3,1, 99503527,4,54,71,0,
99923,1,2,3540,22, 9951108,0,111,0,98,
99931,4,1,2839,3541, 99520,97,0,108,0,
999417,3542,15,3532,1, 995386,0,97,0,114,
9995-1,1,5,3543,20, 99540,105,0,97,0,
99963544,4,38,71,0, 995598,0,108,0,101,
99560,68,0,101,0,
995799,0,108,0,97,
99580,114,0,97,0,
9959116,0,105,0,111,
99600,110,0,95,0,
996149,0,1,173,1,
99623,1,3,1,2,
99633528,22,1,7,1,
99642823,3529,16,0,281,
99651,2022,3530,16,0,
9966673,1,2755,816,1,
99672834,3531,16,0,281,
99681,2459,1007,1,2466,
99693532,17,3533,15,3519,
99701,-1,1,5,3534,
997120,3535,4,52,71,
99720,108,0,111,0,
997398,0,97,0,108,
99740,70,0,117,0,
9975110,0,99,0,116,
99760,105,0,111,0,
9977110,0,68,0,101,
99780,102,0,105,0,
9979110,0,105,0,116,
99800,105,0,111,0,
9981110,0,95,0,50,
99820,1,176,1,3,
99831,7,1,6,3536,
998422,1,10,1,2764,
99853537,16,0,281,1,
99862841,3538,17,3539,15,
99873540,4,36,37,0,
998871,0,108,0,111,
99890,98,0,97,0,
9990108,0,68,0,101,
99910,102,0,105,0,
9992110,0,105,0,116,
99930,105,0,111,0,
9994110,0,115,0,1,
9995-1,1,5,3541,20,
99963542,4,38,71,0,
9997108,0,111,0,98, 9997108,0,111,0,98,
99980,97,0,108,0, 99980,97,0,108,0,
999968,0,101,0,102, 999968,0,101,0,102,
100000,105,0,110,0, 100000,105,0,110,0,
10001105,0,116,0,105, 10001105,0,116,0,105,
100020,111,0,110,0, 100020,111,0,110,0,
10003115,0,95,0,51, 10003115,0,95,0,52,
100040,1,170,1,3, 100040,1,172,1,3,
100051,2,1,1,3545, 100051,3,1,2,3543,
1000622,1,5,1,2840, 1000622,1,6,1,2842,
100073546,17,3547,15,3532, 100073544,17,3545,15,3540,
100081,-1,1,5,3548, 100081,-1,1,5,3546,
1000920,3549,4,38,71, 1000920,3547,4,38,71,
100100,108,0,111,0, 100100,108,0,111,0,
1001198,0,97,0,108, 1001198,0,97,0,108,
100120,68,0,101,0, 100120,68,0,101,0,
@@ -10014,12 +10014,39 @@ public yyLSLSyntax
100140,105,0,116,0, 100140,105,0,116,0,
10015105,0,111,0,110, 10015105,0,111,0,110,
100160,115,0,95,0, 100160,115,0,95,0,
1001749,0,1,168,1, 1001750,0,1,170,1,
100183,1,2,1,1, 100183,1,3,1,2,
100193550,22,1,3,1, 100193548,22,1,4,1,
100202807,3551,17,3552,15, 100202843,3549,17,3550,15,
100213518,1,-1,1,5, 100213540,1,-1,1,5,
100223553,20,3554,4,54, 100223551,20,3552,4,38,
1002371,0,108,0,111,
100240,98,0,97,0,
10025108,0,68,0,101,
100260,102,0,105,0,
10027110,0,105,0,116,
100280,105,0,111,0,
10029110,0,115,0,95,
100300,51,0,1,171,
100311,3,1,2,1,
100321,3553,22,1,5,
100331,2844,3554,17,3555,
1003415,3540,1,-1,1,
100355,3556,20,3557,4,
1003638,71,0,108,0,
10037111,0,98,0,97,
100380,108,0,68,0,
10039101,0,102,0,105,
100400,110,0,105,0,
10041116,0,105,0,111,
100420,110,0,115,0,
1004395,0,49,0,1,
10044169,1,3,1,2,
100451,1,3558,22,1,
100463,1,2649,832,1,
100472811,3559,17,3560,15,
100483525,1,-1,1,5,
100493561,20,3562,4,54,
1002371,0,108,0,111, 1005071,0,108,0,111,
100240,98,0,97,0, 100510,98,0,97,0,
10025108,0,86,0,97, 10052108,0,86,0,97,
@@ -10031,2846 +10058,2877 @@ public yyLSLSyntax
1003197,0,116,0,105, 1005897,0,116,0,105,
100320,111,0,110,0, 100590,111,0,110,0,
1003395,0,50,0,1, 1006095,0,50,0,1,
10034173,1,3,1,5, 10061174,1,3,1,5,
100351,4,3555,22,1, 100621,4,3563,22,1,
100368,1,2763,813,1, 100638,1,48,3564,19,
1003748,3556,19,375,1, 10064385,1,48,3565,5,
1003848,3557,5,54,1, 1006554,1,0,3566,16,
100390,3558,16,0,373, 100660,383,1,2075,3567,
100401,2837,3530,1,2838, 1006716,0,581,1,1860,
100413536,1,2839,3541,1, 10068946,1,2842,3544,1,
100422840,3546,1,1860,943, 100691804,3568,16,0,581,
100431,1958,3559,16,0, 100701,2844,3554,1,2413,
10044573,1,2760,3560,16, 100713569,16,0,581,1,
100450,373,1,2413,3561, 100722198,3570,16,0,581,
1004616,0,573,1,2198, 100731,1873,961,1,1657,
100473562,16,0,573,1, 100741019,1,2030,856,1,
100481873,958,1,1657,1016, 100751989,1041,1,1990,3571,
100491,2030,853,1,2751, 1007616,0,581,1,2755,
10050807,1,1989,1038,1, 10077816,1,1775,3572,16,
100511990,3563,16,0,573, 100780,581,1,32,3573,
100521,2458,998,1,2459, 1007916,0,581,1,2649,
100531004,1,1775,3564,16, 10080832,1,2105,939,1,
100540,573,1,32,3565, 100812106,3574,16,0,581,
1005516,0,573,1,2105, 100821,2764,3575,16,0,
10056936,1,2106,3566,16, 10083383,1,2841,3538,1,
100570,573,1,2763,813, 100841574,924,1,2767,822,
100581,2764,801,1,2227, 100851,2768,810,1,2227,
100591030,1,2337,3567,16, 100861033,1,2337,3576,16,
100600,573,1,2075,3568, 100870,581,1,2783,3517,
1006116,0,573,1,2779, 100881,1803,912,1,2458,
100623510,1,1803,909,1, 100891001,1,1901,3577,16,
100631804,3569,16,0,573, 100900,581,1,2462,1014,
100641,1901,3570,16,0, 100911,2136,968,1,2464,
10065573,1,2462,1011,1, 100921024,1,2029,850,1,
100662136,965,1,2464,1021, 100932466,3532,1,2031,861,
100671,2029,847,1,2466, 100941,2032,866,1,2033,
100683525,1,2031,858,1, 10095871,1,2035,877,1,
100692032,863,1,2033,868, 100962364,952,1,2039,887,
100701,2035,874,1,2364, 100971,1931,986,1,2041,
10071949,1,2039,884,1, 10098893,1,2021,843,1,
100721931,983,1,2041,890, 100992043,899,1,2045,904,
100731,2021,840,1,2043, 101001,2811,3559,1,2834,
10074896,1,2807,3551,1, 101013578,16,0,383,1,
100752045,901,1,2647,824, 101022037,882,1,2822,3523,
100761,2818,3516,1,2819, 101031,2823,3579,16,0,
100773571,16,0,373,1, 10104383,1,2843,3549,1,
100782037,879,1,1574,921, 101051958,3580,16,0,581,
100791,2830,3572,16,0, 101061,2459,1007,1,49,
10080373,1,49,3573,19, 101073581,19,586,1,49,
10081578,1,49,3574,5, 101083582,5,38,1,1901,
1008238,1,1901,3575,16, 101093583,16,0,584,1,
100830,576,1,2075,3576, 101102075,3584,16,0,584,
1008416,0,576,1,1860, 101111,1860,946,1,1803,
10085943,1,1803,909,1, 10112912,1,1804,3585,16,
100861804,3577,16,0,576, 101130,584,1,2413,3586,
100871,2413,3578,16,0, 1011416,0,584,1,2198,
10088576,1,2198,3579,16, 101153587,16,0,584,1,
100890,576,1,1873,958, 101161873,961,1,1657,1019,
100901,1657,1016,1,1989, 101171,1989,1041,1,1990,
100911038,1,1990,3580,16, 101183588,16,0,584,1,
100920,576,1,1775,3581, 101191775,3589,16,0,584,
1009316,0,576,1,32, 101201,32,3590,16,0,
100943582,16,0,576,1, 10121584,1,2105,939,1,
100952105,936,1,2106,3583, 101222106,3591,16,0,584,
1009616,0,576,1,2364, 101231,2364,952,1,2227,
10097949,1,2227,1030,1, 101241033,1,2337,3592,16,
100982337,3584,16,0,576, 101250,584,1,2021,843,
100991,2021,840,1,2458, 101261,2458,1001,1,2459,
10100998,1,2459,1004,1, 101271007,1,2462,1014,1,
101012462,1011,1,2136,965, 101282136,968,1,2464,1024,
101021,2464,1021,1,2029, 101291,2029,850,1,2030,
10103847,1,2030,853,1, 10130856,1,2031,861,1,
101042031,858,1,2032,863, 101312032,866,1,2033,871,
101051,2033,868,1,2035, 101321,2035,877,1,2037,
10106874,1,2037,879,1, 10133882,1,2039,887,1,
101072039,884,1,1931,983, 101341931,986,1,2041,893,
101081,2041,890,1,2043, 101351,2043,899,1,2045,
10109896,1,2045,901,1, 10136904,1,1574,924,1,
101101574,921,1,1958,3585, 101371958,3593,16,0,584,
1011116,0,576,1,50, 101381,50,3594,19,733,
101123586,19,718,1,50, 101391,50,3595,5,38,
101133587,5,38,1,1901, 101401,1901,3596,16,0,
101143588,16,0,716,1, 10141731,1,2075,3597,16,
101152075,3589,16,0,716, 101420,731,1,1860,946,
101161,1860,943,1,1803, 101431,1803,912,1,1804,
10117909,1,1804,3590,16, 101443598,16,0,731,1,
101180,716,1,2413,3591, 101452413,3599,16,0,731,
1011916,0,716,1,2198, 101461,2198,3600,16,0,
101203592,16,0,716,1, 10147731,1,1873,961,1,
101211873,958,1,1657,1016, 101481657,1019,1,1989,1041,
101221,1989,1038,1,1990, 101491,1990,3601,16,0,
101233593,16,0,716,1, 10150731,1,1775,3602,16,
101241775,3594,16,0,716, 101510,731,1,32,3603,
101251,32,3595,16,0, 1015216,0,731,1,2105,
10126716,1,2105,936,1, 10153939,1,2106,3604,16,
101272106,3596,16,0,716, 101540,731,1,2364,952,
101281,2364,949,1,2227, 101551,2227,1033,1,2337,
101291030,1,2337,3597,16, 101563605,16,0,731,1,
101300,716,1,2021,840, 101572021,843,1,2458,1001,
101311,2458,998,1,2459, 101581,2459,1007,1,2462,
101321004,1,2462,1011,1, 101591014,1,2136,968,1,
101332136,965,1,2464,1021, 101602464,1024,1,2029,850,
101341,2029,847,1,2030, 101611,2030,856,1,2031,
10135853,1,2031,858,1, 10162861,1,2032,866,1,
101362032,863,1,2033,868, 101632033,871,1,2035,877,
101371,2035,874,1,2037, 101641,2037,882,1,2039,
10138879,1,2039,884,1, 10165887,1,1931,986,1,
101391931,983,1,2041,890, 101662041,893,1,2043,899,
101401,2043,896,1,2045, 101671,2045,904,1,1574,
10141901,1,1574,921,1, 10168924,1,1958,3606,16,
101421958,3598,16,0,716, 101690,731,1,51,3607,
101431,51,3599,19,127, 1017019,127,1,51,3608,
101441,51,3600,5,58, 101715,58,1,0,3609,
101451,0,3601,16,0, 1017216,0,125,1,2538,
10146125,1,2537,3602,16, 101733610,16,0,489,1,
101470,691,1,2837,3530, 101742075,3611,16,0,125,
101481,2838,3536,1,2839, 101751,2841,3538,1,2515,
101493541,1,2840,3546,1, 101763612,16,0,489,1,
101501860,943,1,10,3603, 101772843,3549,1,10,3613,
1015116,0,125,1,2413, 1017816,0,125,1,2413,
101523604,16,0,125,1, 101793614,16,0,125,1,
101532198,3605,16,0,125, 101802523,3615,16,0,489,
101541,1873,958,1,21, 101811,2198,3616,16,0,
101553606,16,0,125,1, 10182125,1,1873,961,1,
101561657,1016,1,2030,853, 1018321,3617,16,0,125,
101571,1989,1038,1,1990, 101841,1657,1019,1,2029,
101583607,16,0,125,1, 10185850,1,2030,856,1,
101592458,998,1,2459,1004, 101861989,1041,1,1990,3618,
101601,1775,3608,16,0, 1018716,0,125,1,2458,
10161125,1,32,3609,16, 101881001,1,2459,1007,1,
101620,125,1,2105,936, 101891775,3619,16,0,125,
101631,2106,3610,16,0, 101901,32,3620,16,0,
10164125,1,2045,901,1, 10191125,1,2105,939,1,
101652766,3611,16,0,125, 101922106,3621,16,0,125,
101661,2227,1030,1,2337, 101931,2823,3622,16,0,
101673612,16,0,125,1, 10194125,1,2770,3623,16,
101682075,3613,16,0,125, 101950,125,1,2227,1033,
101691,52,3614,16,0, 101961,2337,3624,16,0,
10170125,1,2560,3615,16, 10197125,1,52,3625,16,
101710,691,1,2779,3510, 101980,125,1,2561,3626,
101721,1803,909,1,1804, 1019916,0,489,1,2783,
101733616,16,0,125,1, 102003517,1,1803,912,1,
101741901,3617,16,0,125, 102011804,3627,16,0,125,
101751,2462,1011,1,2136, 102021,1901,3628,16,0,
10176965,1,2464,1021,1, 10203125,1,2462,1014,1,
101772029,847,1,2466,3525, 102042136,968,1,2464,1024,
101781,2031,858,1,2032, 102051,1860,946,1,2466,
10179863,1,2033,868,1, 102063532,1,2031,861,1,
101802035,874,1,2581,3618, 102072032,866,1,2033,871,
1018116,0,125,1,2364, 102081,2035,877,1,2364,
10182949,1,2039,884,1, 10209952,1,2039,887,1,
101831931,983,1,2041,890, 102101931,986,1,2041,893,
101841,2021,840,1,2043, 102111,2021,843,1,2043,
10185896,1,2807,3551,1, 10212899,1,2045,904,1,
101862510,3619,16,0,691, 102132511,3629,16,0,489,
101871,2514,3620,16,0, 102141,2811,3559,1,2037,
10188691,1,2818,3516,1, 10215882,1,2822,3523,1,
101892819,3621,16,0,125, 102162842,3544,1,1574,924,
101901,2522,3622,16,0, 102171,2844,3554,1,2582,
10191691,1,2037,879,1, 102183630,16,0,125,1,
101921574,921,1,1958,3623, 102191958,3631,16,0,125,
1019316,0,125,1,52, 102201,52,3632,19,124,
101943624,19,124,1,52, 102211,52,3633,5,53,
101953625,5,53,1,0, 102221,0,3634,16,0,
101963626,16,0,122,1, 10223122,1,2075,3635,16,
101972837,3530,1,2838,3536, 102240,122,1,2841,3538,
101981,2839,3541,1,2840, 102251,2842,3544,1,1804,
101993546,1,1860,943,1, 102263636,16,0,122,1,
1020010,3627,16,0,122, 1022710,3637,16,0,122,
102011,2413,3628,16,0, 102281,2413,3638,16,0,
10202122,1,2198,3629,16, 10229122,1,2198,3639,16,
102030,122,1,1873,958, 102300,122,1,1873,961,
102041,21,3630,16,0, 102311,21,3640,16,0,
10205122,1,1657,1016,1, 10232122,1,1657,1019,1,
102062030,853,1,1989,1038, 102332029,850,1,2030,856,
102071,1990,3631,16,0, 102341,1989,1041,1,1990,
10208122,1,2458,998,1, 102353641,16,0,122,1,
102092459,1004,1,1775,3632, 102362459,1007,1,1775,3642,
1021016,0,122,1,32, 1023716,0,122,1,32,
102113633,16,0,122,1, 102383643,16,0,122,1,
102122105,936,1,2106,3634, 102392105,939,1,2106,3644,
1021316,0,122,1,2766, 1024016,0,122,1,1574,
102143635,16,0,122,1, 10241924,1,2770,3645,16,
102152227,1030,1,2337,3636, 102420,122,1,2227,1033,
1021616,0,122,1,2075, 102431,2337,3646,16,0,
102173637,16,0,122,1, 10244122,1,52,3647,16,
1021852,3638,16,0,122, 102450,122,1,2783,3517,
102191,2779,3510,1,1803, 102461,1803,912,1,2458,
10220909,1,1804,3639,16, 102471001,1,1901,3648,16,
102210,122,1,1901,3640, 102480,122,1,2462,1014,
1022216,0,122,1,2462, 102491,2136,968,1,2464,
102231011,1,2136,965,1, 102501024,1,1860,946,1,
102242464,1021,1,2029,847, 102512466,3532,1,2031,861,
102251,2466,3525,1,2031, 102521,2032,866,1,2033,
10226858,1,2032,863,1, 10253871,1,2035,877,1,
102272033,868,1,2035,874, 102542364,952,1,2039,887,
102281,2581,3641,16,0, 102551,1931,986,1,2041,
10229122,1,2364,949,1, 10256893,1,2021,843,1,
102302039,884,1,1931,983, 102572043,899,1,2045,904,
102311,2041,890,1,2021, 102581,2811,3559,1,2037,
10232840,1,2043,896,1, 10259882,1,2822,3523,1,
102332807,3551,1,2045,901, 102602823,3649,16,0,122,
102341,2818,3516,1,2819, 102611,2843,3549,1,2844,
102353642,16,0,122,1, 102623554,1,2582,3650,16,
102362037,879,1,1574,921, 102630,122,1,1958,3651,
102371,1958,3643,16,0, 1026416,0,122,1,53,
10238122,1,53,3644,19, 102653652,19,121,1,53,
10239121,1,53,3645,5, 102663653,5,53,1,0,
1024053,1,0,3646,16, 102673654,16,0,119,1,
102410,119,1,2837,3530, 102682075,3655,16,0,119,
102421,2838,3536,1,2839, 102691,2841,3538,1,2842,
102433541,1,2840,3546,1, 102703544,1,1804,3656,16,
102441860,943,1,10,3647, 102710,119,1,10,3657,
1024516,0,119,1,2413, 1027216,0,119,1,2413,
102463648,16,0,119,1, 102733658,16,0,119,1,
102472198,3649,16,0,119, 102742198,3659,16,0,119,
102481,1873,958,1,21, 102751,1873,961,1,21,
102493650,16,0,119,1, 102763660,16,0,119,1,
102501657,1016,1,2030,853, 102771657,1019,1,2029,850,
102511,1989,1038,1,1990, 102781,2030,856,1,1989,
102523651,16,0,119,1, 102791041,1,1990,3661,16,
102532458,998,1,2459,1004, 102800,119,1,2459,1007,
102541,1775,3652,16,0, 102811,1775,3662,16,0,
10255119,1,32,3653,16, 10282119,1,32,3663,16,
102560,119,1,2105,936, 102830,119,1,2105,939,
102571,2106,3654,16,0, 102841,2106,3664,16,0,
10258119,1,2766,3655,16, 10285119,1,1574,924,1,
102590,119,1,2227,1030, 102862770,3665,16,0,119,
102601,2337,3656,16,0, 102871,2227,1033,1,2337,
10261119,1,2075,3657,16, 102883666,16,0,119,1,
102620,119,1,52,3658, 1028952,3667,16,0,119,
1026316,0,119,1,2779, 102901,2783,3517,1,1803,
102643510,1,1803,909,1, 10291912,1,2458,1001,1,
102651804,3659,16,0,119, 102921901,3668,16,0,119,
102661,1901,3660,16,0, 102931,2462,1014,1,2136,
10267119,1,2462,1011,1, 10294968,1,2464,1024,1,
102682136,965,1,2464,1021, 102951860,946,1,2466,3532,
102691,2029,847,1,2466, 102961,2031,861,1,2032,
102703525,1,2031,858,1, 10297866,1,2033,871,1,
102712032,863,1,2033,868, 102982035,877,1,2364,952,
102721,2035,874,1,2581, 102991,2039,887,1,1931,
102733661,16,0,119,1, 10300986,1,2041,893,1,
102742364,949,1,2039,884, 103012021,843,1,2043,899,
102751,1931,983,1,2041, 103021,2045,904,1,2811,
10276890,1,2021,840,1, 103033559,1,2037,882,1,
102772043,896,1,2807,3551, 103042822,3523,1,2823,3669,
102781,2045,901,1,2818, 1030516,0,119,1,2843,
102793516,1,2819,3662,16, 103063549,1,2844,3554,1,
102800,119,1,2037,879, 103072582,3670,16,0,119,
102811,1574,921,1,1958, 103081,1958,3671,16,0,
102823663,16,0,119,1, 10309119,1,54,3672,19,
1028354,3664,19,118,1, 10310118,1,54,3673,5,
1028454,3665,5,55,1, 1031155,1,0,3674,16,
102850,3666,16,0,116, 103120,116,1,2075,3675,
102861,2837,3530,1,2838, 1031316,0,116,1,2841,
102873536,1,2839,3541,1, 103143538,1,2842,3544,1,
102882840,3546,1,1860,943, 103151804,3676,16,0,116,
102891,10,3667,16,0, 103161,10,3677,16,0,
10290116,1,2413,3668,16, 10317116,1,2413,3678,16,
102910,116,1,2198,3669, 103180,116,1,2198,3679,
1029216,0,116,1,1873, 1031916,0,116,1,1873,
10293958,1,21,3670,16, 10320961,1,21,3680,16,
102940,116,1,1657,1016, 103210,116,1,1657,1019,
102951,2030,853,1,1989, 103221,2029,850,1,2030,
102961038,1,1990,3671,16, 10323856,1,1989,1041,1,
102970,116,1,2458,998, 103241990,3681,16,0,116,
102981,2459,1004,1,1775, 103251,2459,1007,1,1775,
102993672,16,0,116,1, 103263682,16,0,116,1,
1030032,3673,16,0,116, 1032732,3683,16,0,116,
103011,2105,936,1,2106, 103281,2105,939,1,2106,
103023674,16,0,116,1, 103293684,16,0,116,1,
103032766,3675,16,0,116, 103302021,843,1,1574,924,
103041,2227,1030,1,2337, 103311,2770,3685,16,0,
103053676,16,0,116,1, 10332116,1,2227,1033,1,
103062075,3677,16,0,116, 103332337,3686,16,0,116,
103071,52,3678,16,0, 103341,52,3687,16,0,
10308116,1,2779,3510,1, 10335116,1,2783,3517,1,
103091803,909,1,1804,3679, 103361803,912,1,2458,1001,
1031016,0,116,1,1901, 103371,1901,3688,16,0,
103113680,16,0,116,1, 10338116,1,2569,3689,16,
103122462,1011,1,2136,965, 103390,483,1,2462,1014,
103131,2464,1021,1,2029, 103401,2136,968,1,2464,
10314847,1,2466,3525,1, 103411024,1,1860,946,1,
103152031,858,1,2032,863, 103422466,3532,1,2031,861,
103161,2033,868,1,2035, 103431,2032,866,1,2033,
10317874,1,2581,3681,16, 10344871,1,2035,877,1,
103180,116,1,2364,949, 103452364,952,1,2039,887,
103191,2039,884,1,1931, 103461,1931,986,1,2041,
10320983,1,2041,890,1, 10347893,1,2507,3690,16,
103212021,840,1,2043,896, 103480,483,1,2043,899,
103221,2807,3551,1,2045, 103491,2045,904,1,2811,
10323901,1,2568,3682,16, 103503559,1,2037,882,1,
103240,470,1,2818,3516, 103512822,3523,1,2823,3691,
103251,2819,3683,16,0, 1035216,0,116,1,2843,
10326116,1,2037,879,1, 103533549,1,2844,3554,1,
103271574,921,1,1958,3684, 103542582,3692,16,0,116,
1032816,0,116,1,2506, 103551,1958,3693,16,0,
103293685,16,0,470,1, 10356116,1,55,3694,19,
1033055,3686,19,115,1, 10357115,1,55,3695,5,
1033155,3687,5,56,1, 1035856,1,0,3696,16,
103320,3688,16,0,113, 103590,113,1,2075,3697,
103331,2837,3530,1,2838, 1036016,0,113,1,2841,
103343536,1,2839,3541,1, 103613538,1,2842,3544,1,
103352840,3546,1,1860,943, 103622843,3549,1,10,3698,
103361,10,3689,16,0, 1036316,0,113,1,2413,
10337113,1,2413,3690,16, 103643699,16,0,113,1,
103380,113,1,2525,3691, 103652198,3700,16,0,113,
1033916,0,493,1,1657, 103661,2526,3701,16,0,
103401016,1,1873,958,1, 10367304,1,1873,961,1,
1034121,3692,16,0,113, 1036821,3702,16,0,113,
103421,2529,3693,16,0, 103691,1657,1019,1,2530,
10343493,1,2030,853,1, 103703703,16,0,304,1,
103441989,1038,1,1990,3694, 103712030,856,1,1989,1041,
1034516,0,113,1,2458, 103721,1990,3704,16,0,
10346998,1,2459,1004,1, 10373113,1,2458,1001,1,
103471775,3695,16,0,113, 103742459,1007,1,1775,3705,
103481,32,3696,16,0, 1037516,0,113,1,32,
10349113,1,2105,936,1,
103502106,3697,16,0,113,
103511,2766,3698,16,0,
10352113,1,2552,3699,16,
103530,493,1,2227,1030,
103541,2337,3700,16,0,
10355113,1,2075,3701,16,
103560,113,1,52,3702,
1035716,0,113,1,2779,
103583510,1,1803,909,1,
103591804,3703,16,0,113,
103601,1901,3704,16,0,
10361113,1,2462,1011,1,
103622136,965,1,2464,1021,
103631,2029,847,1,2466,
103643525,1,2031,858,1,
103652032,863,1,2033,868,
103661,2035,874,1,2581,
103673705,16,0,113,1,
103682364,949,1,2039,884,
103691,1931,983,1,2041,
10370890,1,2021,840,1,
103712043,896,1,2807,3551,
103721,2045,901,1,2198,
103733706,16,0,113,1, 103763706,16,0,113,1,
103742818,3516,1,2819,3707, 103772105,939,1,2106,3707,
1037516,0,113,1,2037, 1037816,0,113,1,2770,
10376879,1,1574,921,1, 103793708,16,0,113,1,
103771958,3708,16,0,113, 103802553,3709,16,0,304,
103781,56,3709,19,112, 103811,2227,1033,1,2337,
103791,56,3710,5,55, 103823710,16,0,113,1,
103801,0,3711,16,0, 1038352,3711,16,0,113,
10381110,1,2837,3530,1, 103841,2783,3517,1,1803,
103822838,3536,1,2839,3541, 10385912,1,1804,3712,16,
103831,2840,3546,1,1860, 103860,113,1,1901,3713,
10384943,1,10,3712,16, 1038716,0,113,1,2462,
103850,110,1,2413,3713, 103881014,1,2136,968,1,
103892464,1024,1,1860,946,
103901,2466,3532,1,2031,
10391861,1,2032,866,1,
103922033,871,1,2035,877,
103931,2364,952,1,2039,
10394887,1,1931,986,1,
103952041,893,1,2021,843,
103961,2043,899,1,2045,
10397904,1,2811,3559,1,
103982029,850,1,2037,882,
103991,2822,3523,1,2823,
104003714,16,0,113,1,
104011574,924,1,2844,3554,
104021,2582,3715,16,0,
10403113,1,1958,3716,16,
104040,113,1,56,3717,
1040519,112,1,56,3718,
104065,55,1,0,3719,
1040716,0,110,1,2075,
104083720,16,0,110,1,
104092841,3538,1,2842,3544,
104101,1804,3721,16,0,
10411110,1,10,3722,16,
104120,110,1,2413,3723,
1038616,0,110,1,2198, 1041316,0,110,1,2198,
103873714,16,0,110,1, 104143724,16,0,110,1,
103881873,958,1,21,3715, 104151873,961,1,21,3725,
1038916,0,110,1,1657, 1041616,0,110,1,1657,
103901016,1,2030,853,1, 104171019,1,2029,850,1,
103911989,1038,1,1990,3716, 104182030,856,1,1989,1041,
1039216,0,110,1,2458, 104191,1990,3726,16,0,
10393998,1,2459,1004,1, 10420110,1,2459,1007,1,
103941775,3717,16,0,110, 104211775,3727,16,0,110,
103951,32,3718,16,0, 104221,32,3728,16,0,
10396110,1,2540,3719,16, 10423110,1,2541,3729,16,
103970,511,1,2105,936, 104240,525,1,2106,3730,
103981,2106,3720,16,0, 1042516,0,110,1,2545,
10399110,1,2544,3721,16, 104263731,16,0,525,1,
104000,511,1,2766,3722, 104271574,924,1,2770,3732,
1040116,0,110,1,2227, 1042816,0,110,1,2227,
104021030,1,2337,3723,16, 104291033,1,2337,3733,16,
104030,110,1,2075,3724, 104300,110,1,52,3734,
1040416,0,110,1,52, 1043116,0,110,1,2783,
104053725,16,0,110,1, 104323517,1,1803,912,1,
104062779,3510,1,1803,909, 104332458,1001,1,1901,3735,
104071,1804,3726,16,0, 1043416,0,110,1,2462,
10408110,1,1901,3727,16, 104351014,1,2136,968,1,
104090,110,1,2462,1011, 104362464,1024,1,1860,946,
104101,2136,965,1,2464, 104371,2466,3532,1,2031,
104111021,1,2029,847,1, 10438861,1,2032,866,1,
104122466,3525,1,2031,858, 104392033,871,1,2035,877,
104131,2032,863,1,2033, 104401,2364,952,1,2039,
10414868,1,2035,874,1, 10441887,1,1931,986,1,
104152581,3728,16,0,110, 104422041,893,1,2021,843,
104161,2364,949,1,2039, 104431,2043,899,1,2045,
10417884,1,1931,983,1, 10444904,1,2811,3559,1,
104182041,890,1,2021,840, 104452037,882,1,2822,3523,
104191,2043,896,1,2807, 104461,2823,3736,16,0,
104203551,1,2045,901,1, 10447110,1,2843,3549,1,
104212818,3516,1,2819,3729, 104482844,3554,1,2105,939,
1042216,0,110,1,2037, 104491,2582,3737,16,0,
10423879,1,1574,921,1, 10450110,1,1958,3738,16,
104241958,3730,16,0,110, 104510,110,1,57,3739,
104251,57,3731,19,109, 1045219,109,1,57,3740,
104261,57,3732,5,53, 104535,53,1,0,3741,
104271,0,3733,16,0, 1045416,0,107,1,2075,
10428107,1,2837,3530,1, 104553742,16,0,107,1,
104292838,3536,1,2839,3541, 104562841,3538,1,2842,3544,
104301,2840,3546,1,1860, 104571,1804,3743,16,0,
10431943,1,10,3734,16, 10458107,1,10,3744,16,
104320,107,1,2413,3735, 104590,107,1,2413,3745,
1043316,0,107,1,2198, 1046016,0,107,1,2198,
104343736,16,0,107,1,
104351873,958,1,21,3737,
1043616,0,107,1,1657,
104371016,1,2030,853,1,
104381989,1038,1,1990,3738,
1043916,0,107,1,2458,
10440998,1,2459,1004,1,
104411775,3739,16,0,107,
104421,32,3740,16,0,
10443107,1,2105,936,1,
104442106,3741,16,0,107,
104451,2766,3742,16,0,
10446107,1,2227,1030,1,
104472337,3743,16,0,107,
104481,2075,3744,16,0,
10449107,1,52,3745,16,
104500,107,1,2779,3510,
104511,1803,909,1,1804,
104523746,16,0,107,1, 104613746,16,0,107,1,
104531901,3747,16,0,107, 104621873,961,1,21,3747,
104541,2462,1011,1,2136, 1046316,0,107,1,1657,
10455965,1,2464,1021,1, 104641019,1,2029,850,1,
104562029,847,1,2466,3525, 104652030,856,1,1989,1041,
104571,2031,858,1,2032, 104661,1990,3748,16,0,
10458863,1,2033,868,1, 10467107,1,2459,1007,1,
104592035,874,1,2581,3748, 104681775,3749,16,0,107,
1046016,0,107,1,2364, 104691,32,3750,16,0,
10461949,1,2039,884,1, 10470107,1,2105,939,1,
104621931,983,1,2041,890, 104712106,3751,16,0,107,
104631,2021,840,1,2043, 104721,1574,924,1,2770,
10464896,1,2807,3551,1, 104733752,16,0,107,1,
104652045,901,1,2818,3516, 104742227,1033,1,2337,3753,
104661,2819,3749,16,0, 1047516,0,107,1,52,
10467107,1,2037,879,1, 104763754,16,0,107,1,
104681574,921,1,1958,3750, 104772783,3517,1,1803,912,
1046916,0,107,1,58, 104781,2458,1001,1,1901,
104703751,19,386,1,58, 104793755,16,0,107,1,
104713752,5,30,1,2644, 104802462,1014,1,2136,968,
104721753,1,2520,1758,1, 104811,2464,1024,1,1860,
104732639,1765,1,2640,1770, 10482946,1,2466,3532,1,
104741,2641,1775,1,2642, 104832031,861,1,2032,866,
104751780,1,2643,1747,1, 104841,2033,871,1,2035,
104762535,1785,1,2645,1791, 10485877,1,2364,952,1,
104771,2646,1796,1,2648, 104862039,887,1,1931,986,
104781875,1,2649,1802,1, 104871,2041,893,1,2021,
104792650,1807,1,2651,1812, 10488843,1,2043,899,1,
104801,2652,1817,1,2653, 104892045,904,1,2811,3559,
104811822,1,2654,1827,1, 104901,2037,882,1,2822,
104822655,1832,1,2657,3753, 104913523,1,2823,3756,16,
1048316,0,384,1,2550, 104920,107,1,2843,3549,
104841843,1,2579,1861,1, 104931,2844,3554,1,2582,
104852558,1849,1,2566,1855, 104943757,16,0,107,1,
104861,2459,1004,1,2464, 104951958,3758,16,0,107,
104871021,1,2574,1837,1, 104961,58,3759,19,396,
104882470,3754,16,0,384, 104971,58,3760,5,30,
104891,2700,3755,16,0, 104981,2536,1750,1,2521,
10490384,1,2594,1868,1, 104991767,1,2641,1779,1,
104912596,3756,16,0,384, 105002642,1784,1,2643,1756,
104921,59,3757,19,383, 105011,2644,1789,1,2645,
104931,59,3758,5,30, 105021794,1,2646,1799,1,
104941,2644,1753,1,2520, 105032647,1762,1,2648,1878,
104951758,1,2639,1765,1, 105041,2650,1811,1,2651,
104962640,1770,1,2641,1775, 105051816,1,2652,1821,1,
104971,2642,1780,1,2643, 105062653,1826,1,2654,1831,
104981747,1,2535,1785,1, 105071,2655,1836,1,2656,
104992645,1791,1,2646,1796, 105081841,1,2657,1774,1,
105001,2648,1875,1,2649, 105092659,3761,16,0,394,
105011802,1,2650,1807,1, 105101,2551,1852,1,2559,
105022651,1812,1,2652,1817, 105111864,1,2567,1805,1,
105031,2653,1822,1,2654, 105122459,1007,1,2464,1024,
105041827,1,2655,1832,1, 105131,2575,1846,1,2470,
105052657,3759,16,0,381, 105143762,16,0,394,1,
105061,2550,1843,1,2579, 105152580,1858,1,2703,3763,
105071861,1,2558,1849,1, 1051616,0,394,1,2595,
105082566,1855,1,2459,1004, 105171871,1,2597,3764,16,
105091,2464,1021,1,2574, 105180,394,1,59,3765,
105101837,1,2470,3760,16, 1051919,393,1,59,3766,
105110,381,1,2700,3761, 105205,30,1,2536,1750,
1051216,0,381,1,2594, 105211,2521,1767,1,2641,
105131868,1,2596,3762,16, 105221779,1,2642,1784,1,
105140,381,1,60,3763, 105232643,1756,1,2644,1789,
1051519,545,1,60,3764, 105241,2645,1794,1,2646,
105165,30,1,2644,1753, 105251799,1,2647,1762,1,
105171,2520,1758,1,2639, 105262648,1878,1,2650,1811,
105181765,1,2640,1770,1, 105271,2651,1816,1,2652,
105192641,1775,1,2642,1780, 105281821,1,2653,1826,1,
105201,2643,1747,1,2535, 105292654,1831,1,2655,1836,
105211785,1,2645,1791,1, 105301,2656,1841,1,2657,
105222646,1796,1,2648,1875, 105311774,1,2659,3767,16,
105231,2649,1802,1,2650, 105320,391,1,2551,1852,
105241807,1,2651,1812,1, 105331,2559,1864,1,2567,
105252652,1817,1,2653,1822, 105341805,1,2459,1007,1,
105261,2654,1827,1,2655, 105352464,1024,1,2575,1846,
105271832,1,2657,3765,16, 105361,2470,3768,16,0,
105280,543,1,2550,1843, 10537391,1,2580,1858,1,
105291,2579,1861,1,2558, 105382703,3769,16,0,391,
105301849,1,2566,1855,1, 105391,2595,1871,1,2597,
105312459,1004,1,2464,1021, 105403770,16,0,391,1,
105321,2574,1837,1,2470, 1054160,3771,19,557,1,
105333766,16,0,543,1, 1054260,3772,5,30,1,
105342700,3767,16,0,543, 105432536,1750,1,2521,1767,
105351,2594,1868,1,2596, 105441,2641,1779,1,2642,
105363768,16,0,543,1, 105451784,1,2643,1756,1,
1053761,3769,19,423,1, 105462644,1789,1,2645,1794,
1053861,3770,5,30,1, 105471,2646,1799,1,2647,
105392644,1753,1,2520,1758, 105481762,1,2648,1878,1,
105401,2639,1765,1,2640, 105492650,1811,1,2651,1816,
105411770,1,2641,1775,1, 105501,2652,1821,1,2653,
105422642,1780,1,2643,1747, 105511826,1,2654,1831,1,
105431,2535,1785,1,2645, 105522655,1836,1,2656,1841,
105441791,1,2646,1796,1, 105531,2657,1774,1,2659,
105452648,1875,1,2649,1802, 105543773,16,0,555,1,
105461,2650,1807,1,2651, 105552551,1852,1,2559,1864,
105471812,1,2652,1817,1, 105561,2567,1805,1,2459,
105482653,1822,1,2654,1827, 105571007,1,2464,1024,1,
105491,2655,1832,1,2657, 105582575,1846,1,2470,3774,
105503771,16,0,421,1, 1055916,0,555,1,2580,
105512550,1843,1,2579,1861, 105601858,1,2703,3775,16,
105521,2558,1849,1,2566, 105610,555,1,2595,1871,
105531855,1,2459,1004,1, 105621,2597,3776,16,0,
105542464,1021,1,2574,1837, 10563555,1,61,3777,19,
105551,2470,3772,16,0, 10564433,1,61,3778,5,
10556421,1,2700,3773,16, 1056530,1,2536,1750,1,
105570,421,1,2594,1868, 105662521,1767,1,2641,1779,
105581,2596,3774,16,0, 105671,2642,1784,1,2643,
10559421,1,62,3775,19, 105681756,1,2644,1789,1,
10560541,1,62,3776,5, 105692645,1794,1,2646,1799,
1056130,1,2644,1753,1, 105701,2647,1762,1,2648,
105622520,1758,1,2639,1765, 105711878,1,2650,1811,1,
105631,2640,1770,1,2641, 105722651,1816,1,2652,1821,
105641775,1,2642,1780,1, 105731,2653,1826,1,2654,
105652643,1747,1,2535,1785, 105741831,1,2655,1836,1,
105661,2645,1791,1,2646, 105752656,1841,1,2657,1774,
105671796,1,2648,1875,1, 105761,2659,3779,16,0,
105682649,1802,1,2650,1807, 10577431,1,2551,1852,1,
105691,2651,1812,1,2652, 105782559,1864,1,2567,1805,
105701817,1,2653,1822,1, 105791,2459,1007,1,2464,
105712654,1827,1,2655,1832, 105801024,1,2575,1846,1,
105721,2657,3777,16,0, 105812470,3780,16,0,431,
10573539,1,2550,1843,1, 105821,2580,1858,1,2703,
105742579,1861,1,2558,1849, 105833781,16,0,431,1,
105751,2566,1855,1,2459, 105842595,1871,1,2597,3782,
105761004,1,2464,1021,1, 1058516,0,431,1,62,
105772574,1837,1,2470,3778, 105863783,19,553,1,62,
1057816,0,539,1,2700, 105873784,5,30,1,2536,
105793779,16,0,539,1, 105881750,1,2521,1767,1,
105802594,1868,1,2596,3780, 105892641,1779,1,2642,1784,
1058116,0,539,1,63, 105901,2643,1756,1,2644,
105823781,19,653,1,63, 105911789,1,2645,1794,1,
105833782,5,30,1,2644, 105922646,1799,1,2647,1762,
105841753,1,2520,1758,1, 105931,2648,1878,1,2650,
105852639,1765,1,2640,1770, 105941811,1,2651,1816,1,
105861,2641,1775,1,2642, 105952652,1821,1,2653,1826,
105871780,1,2643,1747,1, 105961,2654,1831,1,2655,
105882535,1785,1,2645,1791, 105971836,1,2656,1841,1,
105891,2646,1796,1,2648, 105982657,1774,1,2659,3785,
105901875,1,2649,1802,1, 1059916,0,551,1,2551,
105912650,1807,1,2651,1812, 106001852,1,2559,1864,1,
105921,2652,1817,1,2653, 106012567,1805,1,2459,1007,
105931822,1,2654,1827,1, 106021,2464,1024,1,2575,
105942655,1832,1,2657,3783, 106031846,1,2470,3786,16,
1059516,0,651,1,2550, 106040,551,1,2580,1858,
105961843,1,2579,1861,1, 106051,2703,3787,16,0,
105972558,1849,1,2566,1855, 10606551,1,2595,1871,1,
105981,2459,1004,1,2464, 106072597,3788,16,0,551,
105991021,1,2574,1837,1, 106081,63,3789,19,666,
106002470,3784,16,0,651, 106091,63,3790,5,30,
106011,2700,3785,16,0, 106101,2536,1750,1,2521,
10602651,1,2594,1868,1, 106111767,1,2641,1779,1,
106032596,3786,16,0,651, 106122642,1784,1,2643,1756,
106041,64,3787,19,416, 106131,2644,1789,1,2645,
106051,64,3788,5,30, 106141794,1,2646,1799,1,
106061,2644,1753,1,2520, 106152647,1762,1,2648,1878,
106071758,1,2639,1765,1, 106161,2650,1811,1,2651,
106082640,1770,1,2641,1775, 106171816,1,2652,1821,1,
106091,2642,1780,1,2643, 106182653,1826,1,2654,1831,
106101747,1,2535,1785,1, 106191,2655,1836,1,2656,
106112645,1791,1,2646,1796, 106201841,1,2657,1774,1,
106121,2648,1875,1,2649, 106212659,3791,16,0,664,
106131802,1,2650,1807,1, 106221,2551,1852,1,2559,
106142651,1812,1,2652,1817, 106231864,1,2567,1805,1,
106151,2653,1822,1,2654, 106242459,1007,1,2464,1024,
106161827,1,2655,1832,1, 106251,2575,1846,1,2470,
106172657,3789,16,0,414, 106263792,16,0,664,1,
106181,2550,1843,1,2579, 106272580,1858,1,2703,3793,
106191861,1,2558,1849,1, 1062816,0,664,1,2595,
106202566,1855,1,2459,1004, 106291871,1,2597,3794,16,
106211,2464,1021,1,2574, 106300,664,1,64,3795,
106221837,1,2470,3790,16, 1063119,426,1,64,3796,
106230,414,1,2700,3791, 106325,30,1,2536,1750,
1062416,0,414,1,2594, 106331,2521,1767,1,2641,
106251868,1,2596,3792,16, 106341779,1,2642,1784,1,
106260,414,1,65,3793, 106352643,1756,1,2644,1789,
1062719,380,1,65,3794, 106361,2645,1794,1,2646,
106285,30,1,2644,1753, 106371799,1,2647,1762,1,
106291,2520,1758,1,2639, 106382648,1878,1,2650,1811,
106301765,1,2640,1770,1, 106391,2651,1816,1,2652,
106312641,1775,1,2642,1780, 106401821,1,2653,1826,1,
106321,2643,1747,1,2535, 106412654,1831,1,2655,1836,
106331785,1,2645,1791,1, 106421,2656,1841,1,2657,
106342646,1796,1,2648,1875, 106431774,1,2659,3797,16,
106351,2649,1802,1,2650, 106440,424,1,2551,1852,
106361807,1,2651,1812,1, 106451,2559,1864,1,2567,
106372652,1817,1,2653,1822, 106461805,1,2459,1007,1,
106381,2654,1827,1,2655, 106472464,1024,1,2575,1846,
106391832,1,2657,3795,16, 106481,2470,3798,16,0,
106400,378,1,2550,1843, 10649424,1,2580,1858,1,
106411,2579,1861,1,2558, 106502703,3799,16,0,424,
106421849,1,2566,1855,1, 106511,2595,1871,1,2597,
106432459,1004,1,2464,1021, 106523800,16,0,424,1,
106441,2574,1837,1,2470, 1065365,3801,19,390,1,
106453796,16,0,378,1, 1065465,3802,5,30,1,
106462700,3797,16,0,378, 106552536,1750,1,2521,1767,
106471,2594,1868,1,2596, 106561,2641,1779,1,2642,
106483798,16,0,378,1, 106571784,1,2643,1756,1,
1064966,3799,19,465,1, 106582644,1789,1,2645,1794,
1065066,3800,5,30,1, 106591,2646,1799,1,2647,
106512644,1753,1,2520,1758, 106601762,1,2648,1878,1,
106521,2639,1765,1,2640, 106612650,1811,1,2651,1816,
106531770,1,2641,1775,1, 106621,2652,1821,1,2653,
106542642,1780,1,2643,1747, 106631826,1,2654,1831,1,
106551,2535,1785,1,2645, 106642655,1836,1,2656,1841,
106561791,1,2646,1796,1, 106651,2657,1774,1,2659,
106572648,1875,1,2649,1802, 106663803,16,0,388,1,
106581,2650,1807,1,2651, 106672551,1852,1,2559,1864,
106591812,1,2652,1817,1, 106681,2567,1805,1,2459,
106602653,1822,1,2654,1827, 106691007,1,2464,1024,1,
106611,2655,1832,1,2657, 106702575,1846,1,2470,3804,
106623801,16,0,463,1, 1067116,0,388,1,2580,
106632550,1843,1,2579,1861, 106721858,1,2703,3805,16,
106641,2558,1849,1,2566, 106730,388,1,2595,1871,
106651855,1,2459,1004,1, 106741,2597,3806,16,0,
106662464,1021,1,2574,1837, 10675388,1,66,3807,19,
106671,2470,3802,16,0, 10676778,1,66,3808,5,
10668463,1,2700,3803,16, 1067730,1,2536,1750,1,
106690,463,1,2594,1868, 106782521,1767,1,2641,1779,
106701,2596,3804,16,0, 106791,2642,1784,1,2643,
10671463,1,67,3805,19, 106801756,1,2644,1789,1,
10672462,1,67,3806,5, 106812645,1794,1,2646,1799,
1067330,1,2644,1753,1, 106821,2647,1762,1,2648,
106742520,1758,1,2639,1765, 106831878,1,2650,1811,1,
106751,2640,1770,1,2641, 106842651,1816,1,2652,1821,
106761775,1,2642,1780,1, 106851,2653,1826,1,2654,
106772643,1747,1,2535,1785, 106861831,1,2655,1836,1,
106781,2645,1791,1,2646, 106872656,1841,1,2657,1774,
106791796,1,2648,1875,1, 106881,2659,3809,16,0,
106802649,1802,1,2650,1807, 10689776,1,2551,1852,1,
106811,2651,1812,1,2652, 106902559,1864,1,2567,1805,
106821817,1,2653,1822,1, 106911,2459,1007,1,2464,
106832654,1827,1,2655,1832, 106921024,1,2575,1846,1,
106841,2657,3807,16,0, 106932470,3810,16,0,776,
10685460,1,2550,1843,1, 106941,2580,1858,1,2703,
106862579,1861,1,2558,1849, 106953811,16,0,776,1,
106871,2566,1855,1,2459, 106962595,1871,1,2597,3812,
106881004,1,2464,1021,1, 1069716,0,776,1,67,
106892574,1837,1,2470,3808, 106983813,19,475,1,67,
1069016,0,460,1,2700, 106993814,5,30,1,2536,
106913809,16,0,460,1, 107001750,1,2521,1767,1,
106922594,1868,1,2596,3810, 107012641,1779,1,2642,1784,
1069316,0,460,1,68, 107021,2643,1756,1,2644,
106943811,19,459,1,68, 107031789,1,2645,1794,1,
106953812,5,30,1,2644, 107042646,1799,1,2647,1762,
106961753,1,2520,1758,1, 107051,2648,1878,1,2650,
106972639,1765,1,2640,1770, 107061811,1,2651,1816,1,
106981,2641,1775,1,2642, 107072652,1821,1,2653,1826,
106991780,1,2643,1747,1, 107081,2654,1831,1,2655,
107002535,1785,1,2645,1791, 107091836,1,2656,1841,1,
107011,2646,1796,1,2648, 107102657,1774,1,2659,3815,
107021875,1,2649,1802,1, 1071116,0,473,1,2551,
107032650,1807,1,2651,1812, 107121852,1,2559,1864,1,
107041,2652,1817,1,2653, 107132567,1805,1,2459,1007,
107051822,1,2654,1827,1, 107141,2464,1024,1,2575,
107062655,1832,1,2657,3813, 107151846,1,2470,3816,16,
1070716,0,457,1,2550, 107160,473,1,2580,1858,
107081843,1,2579,1861,1, 107171,2703,3817,16,0,
107092558,1849,1,2566,1855, 10718473,1,2595,1871,1,
107101,2459,1004,1,2464, 107192597,3818,16,0,473,
107111021,1,2574,1837,1, 107201,68,3819,19,472,
107122470,3814,16,0,457, 107211,68,3820,5,30,
107131,2700,3815,16,0, 107221,2536,1750,1,2521,
10714457,1,2594,1868,1, 107231767,1,2641,1779,1,
107152596,3816,16,0,457, 107242642,1784,1,2643,1756,
107161,69,3817,19,395, 107251,2644,1789,1,2645,
107171,69,3818,5,30, 107261794,1,2646,1799,1,
107181,2644,1753,1,2520, 107272647,1762,1,2648,1878,
107191758,1,2639,1765,1, 107281,2650,1811,1,2651,
107202640,1770,1,2641,1775, 107291816,1,2652,1821,1,
107211,2642,1780,1,2643, 107302653,1826,1,2654,1831,
107221747,1,2535,1785,1, 107311,2655,1836,1,2656,
107232645,1791,1,2646,1796, 107321841,1,2657,1774,1,
107241,2648,1875,1,2649, 107332659,3821,16,0,470,
107251802,1,2650,1807,1, 107341,2551,1852,1,2559,
107262651,1812,1,2652,1817, 107351864,1,2567,1805,1,
107271,2653,1822,1,2654, 107362459,1007,1,2464,1024,
107281827,1,2655,1832,1, 107371,2575,1846,1,2470,
107292657,3819,16,0,393, 107383822,16,0,470,1,
107301,2550,1843,1,2579, 107392580,1858,1,2703,3823,
107311861,1,2558,1849,1, 1074016,0,470,1,2595,
107322566,1855,1,2459,1004, 107411871,1,2597,3824,16,
107331,2464,1021,1,2574, 107420,470,1,69,3825,
107341837,1,2470,3820,16, 1074319,405,1,69,3826,
107350,393,1,2700,3821, 107445,30,1,2536,1750,
1073616,0,393,1,2594, 107451,2521,1767,1,2641,
107371868,1,2596,3822,16, 107461779,1,2642,1784,1,
107380,393,1,70,3823, 107472643,1756,1,2644,1789,
1073919,392,1,70,3824, 107481,2645,1794,1,2646,
107405,30,1,2644,1753, 107491799,1,2647,1762,1,
107411,2520,1758,1,2639, 107502648,1878,1,2650,1811,
107421765,1,2640,1770,1, 107511,2651,1816,1,2652,
107432641,1775,1,2642,1780, 107521821,1,2653,1826,1,
107441,2643,1747,1,2535, 107532654,1831,1,2655,1836,
107451785,1,2645,1791,1, 107541,2656,1841,1,2657,
107462646,1796,1,2648,1875, 107551774,1,2659,3827,16,
107471,2649,1802,1,2650, 107560,403,1,2551,1852,
107481807,1,2651,1812,1, 107571,2559,1864,1,2567,
107492652,1817,1,2653,1822, 107581805,1,2459,1007,1,
107501,2654,1827,1,2655, 107592464,1024,1,2575,1846,
107511832,1,2657,3825,16, 107601,2470,3828,16,0,
107520,390,1,2550,1843, 10761403,1,2580,1858,1,
107531,2579,1861,1,2558, 107622703,3829,16,0,403,
107541849,1,2566,1855,1, 107631,2595,1871,1,2597,
107552459,1004,1,2464,1021, 107643830,16,0,403,1,
107561,2574,1837,1,2470, 1076570,3831,19,402,1,
107573826,16,0,390,1, 1076670,3832,5,30,1,
107582700,3827,16,0,390, 107672536,1750,1,2521,1767,
107591,2594,1868,1,2596, 107681,2641,1779,1,2642,
107603828,16,0,390,1, 107691784,1,2643,1756,1,
1076171,3829,19,389,1, 107702644,1789,1,2645,1794,
1076271,3830,5,30,1, 107711,2646,1799,1,2647,
107632644,1753,1,2520,1758, 107721762,1,2648,1878,1,
107641,2639,1765,1,2640, 107732650,1811,1,2651,1816,
107651770,1,2641,1775,1, 107741,2652,1821,1,2653,
107662642,1780,1,2643,1747, 107751826,1,2654,1831,1,
107671,2535,1785,1,2645, 107762655,1836,1,2656,1841,
107681791,1,2646,1796,1, 107771,2657,1774,1,2659,
107692648,1875,1,2649,1802, 107783833,16,0,400,1,
107701,2650,1807,1,2651, 107792551,1852,1,2559,1864,
107711812,1,2652,1817,1, 107801,2567,1805,1,2459,
107722653,1822,1,2654,1827, 107811007,1,2464,1024,1,
107731,2655,1832,1,2657, 107822575,1846,1,2470,3834,
107743831,16,0,387,1, 1078316,0,400,1,2580,
107752550,1843,1,2579,1861, 107841858,1,2703,3835,16,
107761,2558,1849,1,2566, 107850,400,1,2595,1871,
107771855,1,2459,1004,1, 107861,2597,3836,16,0,
107782464,1021,1,2574,1837, 10787400,1,71,3837,19,
107791,2470,3832,16,0, 10788399,1,71,3838,5,
10780387,1,2700,3833,16, 1078930,1,2536,1750,1,
107810,387,1,2594,1868, 107902521,1767,1,2641,1779,
107821,2596,3834,16,0, 107911,2642,1784,1,2643,
10783387,1,72,3835,19, 107921756,1,2644,1789,1,
10784456,1,72,3836,5, 107932645,1794,1,2646,1799,
1078530,1,2644,1753,1, 107941,2647,1762,1,2648,
107862520,1758,1,2639,1765, 107951878,1,2650,1811,1,
107871,2640,1770,1,2641, 107962651,1816,1,2652,1821,
107881775,1,2642,1780,1, 107971,2653,1826,1,2654,
107892643,1747,1,2535,1785, 107981831,1,2655,1836,1,
107901,2645,1791,1,2646, 107992656,1841,1,2657,1774,
107911796,1,2648,1875,1, 108001,2659,3839,16,0,
107922649,1802,1,2650,1807, 10801397,1,2551,1852,1,
107931,2651,1812,1,2652, 108022559,1864,1,2567,1805,
107941817,1,2653,1822,1, 108031,2459,1007,1,2464,
107952654,1827,1,2655,1832, 108041024,1,2575,1846,1,
107961,2657,3837,16,0, 108052470,3840,16,0,397,
10797454,1,2550,1843,1, 108061,2580,1858,1,2703,
107982579,1861,1,2558,1849, 108073841,16,0,397,1,
107991,2566,1855,1,2459, 108082595,1871,1,2597,3842,
108001004,1,2464,1021,1, 1080916,0,397,1,72,
108012574,1837,1,2470,3838, 108103843,19,469,1,72,
1080216,0,454,1,2700, 108113844,5,30,1,2536,
108033839,16,0,454,1, 108121750,1,2521,1767,1,
108042594,1868,1,2596,3840, 108132641,1779,1,2642,1784,
1080516,0,454,1,73, 108141,2643,1756,1,2644,
108063841,19,453,1,73, 108151789,1,2645,1794,1,
108073842,5,30,1,2644, 108162646,1799,1,2647,1762,
108081753,1,2520,1758,1, 108171,2648,1878,1,2650,
108092639,1765,1,2640,1770, 108181811,1,2651,1816,1,
108101,2641,1775,1,2642, 108192652,1821,1,2653,1826,
108111780,1,2643,1747,1, 108201,2654,1831,1,2655,
108122535,1785,1,2645,1791, 108211836,1,2656,1841,1,
108131,2646,1796,1,2648, 108222657,1774,1,2659,3845,
108141875,1,2649,1802,1, 1082316,0,467,1,2551,
108152650,1807,1,2651,1812, 108241852,1,2559,1864,1,
108161,2652,1817,1,2653, 108252567,1805,1,2459,1007,
108171822,1,2654,1827,1, 108261,2464,1024,1,2575,
108182655,1832,1,2657,3843, 108271846,1,2470,3846,16,
1081916,0,451,1,2550, 108280,467,1,2580,1858,
108201843,1,2579,1861,1, 108291,2703,3847,16,0,
108212558,1849,1,2566,1855, 10830467,1,2595,1871,1,
108221,2459,1004,1,2464, 108312597,3848,16,0,467,
108231021,1,2574,1837,1, 108321,73,3849,19,466,
108242470,3844,16,0,451, 108331,73,3850,5,30,
108251,2700,3845,16,0, 108341,2536,1750,1,2521,
10826451,1,2594,1868,1, 108351767,1,2641,1779,1,
108272596,3846,16,0,451, 108362642,1784,1,2643,1756,
108281,74,3847,19,450, 108371,2644,1789,1,2645,
108291,74,3848,5,30, 108381794,1,2646,1799,1,
108301,2644,1753,1,2520, 108392647,1762,1,2648,1878,
108311758,1,2639,1765,1, 108401,2650,1811,1,2651,
108322640,1770,1,2641,1775, 108411816,1,2652,1821,1,
108331,2642,1780,1,2643, 108422653,1826,1,2654,1831,
108341747,1,2535,1785,1, 108431,2655,1836,1,2656,
108352645,1791,1,2646,1796, 108441841,1,2657,1774,1,
108361,2648,1875,1,2649, 108452659,3851,16,0,464,
108371802,1,2650,1807,1, 108461,2551,1852,1,2559,
108382651,1812,1,2652,1817, 108471864,1,2567,1805,1,
108391,2653,1822,1,2654, 108482459,1007,1,2464,1024,
108401827,1,2655,1832,1, 108491,2575,1846,1,2470,
108412657,3849,16,0,448, 108503852,16,0,464,1,
108421,2550,1843,1,2579, 108512580,1858,1,2703,3853,
108431861,1,2558,1849,1, 1085216,0,464,1,2595,
108442566,1855,1,2459,1004, 108531871,1,2597,3854,16,
108451,2464,1021,1,2574, 108540,464,1,74,3855,
108461837,1,2470,3850,16, 1085519,463,1,74,3856,
108470,448,1,2700,3851, 108565,30,1,2536,1750,
1084816,0,448,1,2594, 108571,2521,1767,1,2641,
108491868,1,2596,3852,16, 108581779,1,2642,1784,1,
108500,448,1,75,3853, 108592643,1756,1,2644,1789,
1085119,439,1,75,3854, 108601,2645,1794,1,2646,
108525,30,1,2644,1753, 108611799,1,2647,1762,1,
108531,2520,1758,1,2639, 108622648,1878,1,2650,1811,
108541765,1,2640,1770,1, 108631,2651,1816,1,2652,
108552641,1775,1,2642,1780, 108641821,1,2653,1826,1,
108561,2643,1747,1,2535, 108652654,1831,1,2655,1836,
108571785,1,2645,1791,1, 108661,2656,1841,1,2657,
108582646,1796,1,2648,1875, 108671774,1,2659,3857,16,
108591,2649,1802,1,2650, 108680,461,1,2551,1852,
108601807,1,2651,1812,1, 108691,2559,1864,1,2567,
108612652,1817,1,2653,1822, 108701805,1,2459,1007,1,
108621,2654,1827,1,2655, 108712464,1024,1,2575,1846,
108631832,1,2657,3855,16, 108721,2470,3858,16,0,
108640,437,1,2550,1843, 10873461,1,2580,1858,1,
108651,2579,1861,1,2558, 108742703,3859,16,0,461,
108661849,1,2566,1855,1, 108751,2595,1871,1,2597,
108672459,1004,1,2464,1021, 108763860,16,0,461,1,
108681,2574,1837,1,2470, 1087775,3861,19,449,1,
108693856,16,0,437,1, 1087875,3862,5,30,1,
108702700,3857,16,0,437, 108792536,1750,1,2521,1767,
108711,2594,1868,1,2596, 108801,2641,1779,1,2642,
108723858,16,0,437,1, 108811784,1,2643,1756,1,
1087376,3859,19,560,1, 108822644,1789,1,2645,1794,
1087476,3860,5,30,1, 108831,2646,1799,1,2647,
108752644,1753,1,2520,1758, 108841762,1,2648,1878,1,
108761,2639,1765,1,2640, 108852650,1811,1,2651,1816,
108771770,1,2641,1775,1, 108861,2652,1821,1,2653,
108782642,1780,1,2643,1747, 108871826,1,2654,1831,1,
108791,2535,1785,1,2645, 108882655,1836,1,2656,1841,
108801791,1,2646,1796,1, 108891,2657,1774,1,2659,
108812648,1875,1,2649,1802, 108903863,16,0,447,1,
108821,2650,1807,1,2651, 108912551,1852,1,2559,1864,
108831812,1,2652,1817,1, 108921,2567,1805,1,2459,
108842653,1822,1,2654,1827, 108931007,1,2464,1024,1,
108851,2655,1832,1,2657, 108942575,1846,1,2470,3864,
108863861,16,0,558,1, 1089516,0,447,1,2580,
108872550,1843,1,2579,1861, 108961858,1,2703,3865,16,
108881,2558,1849,1,2566, 108970,447,1,2595,1871,
108891855,1,2459,1004,1, 108981,2597,3866,16,0,
108902464,1021,1,2574,1837, 10899447,1,76,3867,19,
108911,2470,3862,16,0, 10900570,1,76,3868,5,
10892558,1,2700,3863,16, 1090130,1,2536,1750,1,
108930,558,1,2594,1868, 109022521,1767,1,2641,1779,
108941,2596,3864,16,0, 109031,2642,1784,1,2643,
10895558,1,77,3865,19, 109041756,1,2644,1789,1,
10896435,1,77,3866,5, 109052645,1794,1,2646,1799,
1089730,1,2644,1753,1, 109061,2647,1762,1,2648,
108982520,1758,1,2639,1765, 109071878,1,2650,1811,1,
108991,2640,1770,1,2641, 109082651,1816,1,2652,1821,
109001775,1,2642,1780,1, 109091,2653,1826,1,2654,
109012643,1747,1,2535,1785, 109101831,1,2655,1836,1,
109021,2645,1791,1,2646, 109112656,1841,1,2657,1774,
109031796,1,2648,1875,1, 109121,2659,3869,16,0,
109042649,1802,1,2650,1807, 10913568,1,2551,1852,1,
109051,2651,1812,1,2652, 109142559,1864,1,2567,1805,
109061817,1,2653,1822,1, 109151,2459,1007,1,2464,
109072654,1827,1,2655,1832, 109161024,1,2575,1846,1,
109081,2657,3867,16,0, 109172470,3870,16,0,568,
10909433,1,2550,1843,1, 109181,2580,1858,1,2703,
109102579,1861,1,2558,1849, 109193871,16,0,568,1,
109111,2566,1855,1,2459, 109202595,1871,1,2597,3872,
109121004,1,2464,1021,1, 1092116,0,568,1,77,
109132574,1837,1,2470,3868, 109223873,19,445,1,77,
1091416,0,433,1,2700, 109233874,5,30,1,2536,
109153869,16,0,433,1, 109241750,1,2521,1767,1,
109162594,1868,1,2596,3870, 109252641,1779,1,2642,1784,
1091716,0,433,1,78, 109261,2643,1756,1,2644,
109183871,19,554,1,78, 109271789,1,2645,1794,1,
109193872,5,30,1,2644, 109282646,1799,1,2647,1762,
109201753,1,2520,1758,1, 109291,2648,1878,1,2650,
109212639,1765,1,2640,1770, 109301811,1,2651,1816,1,
109221,2641,1775,1,2642, 109312652,1821,1,2653,1826,
109231780,1,2643,1747,1, 109321,2654,1831,1,2655,
109242535,1785,1,2645,1791, 109331836,1,2656,1841,1,
109251,2646,1796,1,2648, 109342657,1774,1,2659,3875,
109261875,1,2649,1802,1, 1093516,0,443,1,2551,
109272650,1807,1,2651,1812, 109361852,1,2559,1864,1,
109281,2652,1817,1,2653, 109372567,1805,1,2459,1007,
109291822,1,2654,1827,1, 109381,2464,1024,1,2575,
109302655,1832,1,2657,3873, 109391846,1,2470,3876,16,
1093116,0,552,1,2550, 109400,443,1,2580,1858,
109321843,1,2579,1861,1, 109411,2703,3877,16,0,
109332558,1849,1,2566,1855, 10942443,1,2595,1871,1,
109341,2459,1004,1,2464, 109432597,3878,16,0,443,
109351021,1,2574,1837,1, 109441,78,3879,19,566,
109362470,3874,16,0,552, 109451,78,3880,5,30,
109371,2700,3875,16,0, 109461,2536,1750,1,2521,
10938552,1,2594,1868,1, 109471767,1,2641,1779,1,
109392596,3876,16,0,552, 109482642,1784,1,2643,1756,
109401,79,3877,19,551, 109491,2644,1789,1,2645,
109411,79,3878,5,30, 109501794,1,2646,1799,1,
109421,2644,1753,1,2520, 109512647,1762,1,2648,1878,
109431758,1,2639,1765,1, 109521,2650,1811,1,2651,
109442640,1770,1,2641,1775, 109531816,1,2652,1821,1,
109451,2642,1780,1,2643, 109542653,1826,1,2654,1831,
109461747,1,2535,1785,1, 109551,2655,1836,1,2656,
109472645,1791,1,2646,1796, 109561841,1,2657,1774,1,
109481,2648,1875,1,2649, 109572659,3881,16,0,564,
109491802,1,2650,1807,1, 109581,2551,1852,1,2559,
109502651,1812,1,2652,1817, 109591864,1,2567,1805,1,
109511,2653,1822,1,2654, 109602459,1007,1,2464,1024,
109521827,1,2655,1832,1, 109611,2575,1846,1,2470,
109532657,3879,16,0,549, 109623882,16,0,564,1,
109541,2550,1843,1,2579, 109632580,1858,1,2703,3883,
109551861,1,2558,1849,1, 1096416,0,564,1,2595,
109562566,1855,1,2459,1004, 109651871,1,2597,3884,16,
109571,2464,1021,1,2574, 109660,564,1,79,3885,
109581837,1,2470,3880,16, 1096719,563,1,79,3886,
109590,549,1,2700,3881, 109685,30,1,2536,1750,
1096016,0,549,1,2594, 109691,2521,1767,1,2641,
109611868,1,2596,3882,16, 109701779,1,2642,1784,1,
109620,549,1,80,3883, 109712643,1756,1,2644,1789,
1096319,426,1,80,3884, 109721,2645,1794,1,2646,
109645,30,1,2644,1753, 109731799,1,2647,1762,1,
109651,2520,1758,1,2639, 109742648,1878,1,2650,1811,
109661765,1,2640,1770,1, 109751,2651,1816,1,2652,
109672641,1775,1,2642,1780, 109761821,1,2653,1826,1,
109681,2643,1747,1,2535, 109772654,1831,1,2655,1836,
109691785,1,2645,1791,1, 109781,2656,1841,1,2657,
109702646,1796,1,2648,1875, 109791774,1,2659,3887,16,
109711,2649,1802,1,2650, 109800,561,1,2551,1852,
109721807,1,2651,1812,1, 109811,2559,1864,1,2567,
109732652,1817,1,2653,1822, 109821805,1,2459,1007,1,
109741,2654,1827,1,2655, 109832464,1024,1,2575,1846,
109751832,1,2657,3885,16, 109841,2470,3888,16,0,
109760,424,1,2550,1843, 10985561,1,2580,1858,1,
109771,2579,1861,1,2558, 109862703,3889,16,0,561,
109781849,1,2566,1855,1, 109871,2595,1871,1,2597,
109792459,1004,1,2464,1021, 109883890,16,0,561,1,
109801,2574,1837,1,2470, 1098980,3891,19,436,1,
109813886,16,0,424,1, 1099080,3892,5,30,1,
109822700,3887,16,0,424, 109912536,1750,1,2521,1767,
109831,2594,1868,1,2596, 109921,2641,1779,1,2642,
109843888,16,0,424,1, 109931784,1,2643,1756,1,
1098581,3889,19,413,1, 109942644,1789,1,2645,1794,
1098681,3890,5,30,1, 109951,2646,1799,1,2647,
109872644,1753,1,2520,1758, 109961762,1,2648,1878,1,
109881,2639,1765,1,2640, 109972650,1811,1,2651,1816,
109891770,1,2641,1775,1, 109981,2652,1821,1,2653,
109902642,1780,1,2643,1747, 109991826,1,2654,1831,1,
109911,2535,1785,1,2645, 110002655,1836,1,2656,1841,
109921791,1,2646,1796,1, 110011,2657,1774,1,2659,
109932648,1875,1,2649,1802, 110023893,16,0,434,1,
109941,2650,1807,1,2651, 110032551,1852,1,2559,1864,
109951812,1,2652,1817,1, 110041,2567,1805,1,2459,
109962653,1822,1,2654,1827, 110051007,1,2464,1024,1,
109971,2655,1832,1,2657, 110062575,1846,1,2470,3894,
109983891,16,0,411,1, 1100716,0,434,1,2580,
109992550,1843,1,2579,1861, 110081858,1,2703,3895,16,
110001,2558,1849,1,2566, 110090,434,1,2595,1871,
110011855,1,2459,1004,1, 110101,2597,3896,16,0,
110022464,1021,1,2574,1837, 11011434,1,81,3897,19,
110031,2470,3892,16,0, 11012423,1,81,3898,5,
11004411,1,2700,3893,16, 1101330,1,2536,1750,1,
110050,411,1,2594,1868, 110142521,1767,1,2641,1779,
110061,2596,3894,16,0, 110151,2642,1784,1,2643,
11007411,1,82,3895,19, 110161756,1,2644,1789,1,
11008758,1,82,3896,5, 110172645,1794,1,2646,1799,
1100930,1,2644,1753,1, 110181,2647,1762,1,2648,
110102520,1758,1,2639,1765, 110191878,1,2650,1811,1,
110111,2640,1770,1,2641, 110202651,1816,1,2652,1821,
110121775,1,2642,1780,1, 110211,2653,1826,1,2654,
110132643,1747,1,2535,1785, 110221831,1,2655,1836,1,
110141,2645,1791,1,2646, 110232656,1841,1,2657,1774,
110151796,1,2648,1875,1, 110241,2659,3899,16,0,
110162649,1802,1,2650,1807, 11025421,1,2551,1852,1,
110171,2651,1812,1,2652, 110262559,1864,1,2567,1805,
110181817,1,2653,1822,1, 110271,2459,1007,1,2464,
110192654,1827,1,2655,1832, 110281024,1,2575,1846,1,
110201,2657,3897,16,0, 110292470,3900,16,0,421,
11021756,1,2550,1843,1, 110301,2580,1858,1,2703,
110222579,1861,1,2558,1849, 110313901,16,0,421,1,
110231,2566,1855,1,2459, 110322595,1871,1,2597,3902,
110241004,1,2464,1021,1, 1103316,0,421,1,82,
110252574,1837,1,2470,3898, 110343903,19,460,1,82,
1102616,0,756,1,2700, 110353904,5,30,1,2536,
110273899,16,0,756,1, 110361750,1,2521,1767,1,
110282594,1868,1,2596,3900, 110372641,1779,1,2642,1784,
1102916,0,756,1,83, 110381,2643,1756,1,2644,
110303901,19,410,1,83, 110391789,1,2645,1794,1,
110313902,5,30,1,2644, 110402646,1799,1,2647,1762,
110321753,1,2520,1758,1, 110411,2648,1878,1,2650,
110332639,1765,1,2640,1770, 110421811,1,2651,1816,1,
110341,2641,1775,1,2642, 110432652,1821,1,2653,1826,
110351780,1,2643,1747,1, 110441,2654,1831,1,2655,
110362535,1785,1,2645,1791, 110451836,1,2656,1841,1,
110371,2646,1796,1,2648, 110462657,1774,1,2659,3905,
110381875,1,2649,1802,1, 1104716,0,458,1,2551,
110392650,1807,1,2651,1812, 110481852,1,2559,1864,1,
110401,2652,1817,1,2653, 110492567,1805,1,2459,1007,
110411822,1,2654,1827,1, 110501,2464,1024,1,2575,
110422655,1832,1,2657,3903, 110511846,1,2470,3906,16,
1104316,0,408,1,2550, 110520,458,1,2580,1858,
110441843,1,2579,1861,1, 110531,2703,3907,16,0,
110452558,1849,1,2566,1855, 11054458,1,2595,1871,1,
110461,2459,1004,1,2464, 110552597,3908,16,0,458,
110471021,1,2574,1837,1, 110561,83,3909,19,420,
110482470,3904,16,0,408, 110571,83,3910,5,30,
110491,2700,3905,16,0, 110581,2536,1750,1,2521,
11050408,1,2594,1868,1, 110591767,1,2641,1779,1,
110512596,3906,16,0,408, 110602642,1784,1,2643,1756,
110521,84,3907,19,407, 110611,2644,1789,1,2645,
110531,84,3908,5,30, 110621794,1,2646,1799,1,
110541,2644,1753,1,2520, 110632647,1762,1,2648,1878,
110551758,1,2639,1765,1, 110641,2650,1811,1,2651,
110562640,1770,1,2641,1775, 110651816,1,2652,1821,1,
110571,2642,1780,1,2643, 110662653,1826,1,2654,1831,
110581747,1,2535,1785,1, 110671,2655,1836,1,2656,
110592645,1791,1,2646,1796, 110681841,1,2657,1774,1,
110601,2648,1875,1,2649, 110692659,3911,16,0,418,
110611802,1,2650,1807,1, 110701,2551,1852,1,2559,
110622651,1812,1,2652,1817, 110711864,1,2567,1805,1,
110631,2653,1822,1,2654, 110722459,1007,1,2464,1024,
110641827,1,2655,1832,1, 110731,2575,1846,1,2470,
110652657,3909,16,0,405, 110743912,16,0,418,1,
110661,2550,1843,1,2579, 110752580,1858,1,2703,3913,
110671861,1,2558,1849,1, 1107616,0,418,1,2595,
110682566,1855,1,2459,1004, 110771871,1,2597,3914,16,
110691,2464,1021,1,2574, 110780,418,1,84,3915,
110701837,1,2470,3910,16, 1107919,417,1,84,3916,
110710,405,1,2700,3911, 110805,30,1,2536,1750,
1107216,0,405,1,2594, 110811,2521,1767,1,2641,
110731868,1,2596,3912,16, 110821779,1,2642,1784,1,
110740,405,1,85,3913, 110832643,1756,1,2644,1789,
1107519,570,1,85,3914, 110841,2645,1794,1,2646,
110765,30,1,2644,1753, 110851799,1,2647,1762,1,
110771,2520,1758,1,2639, 110862648,1878,1,2650,1811,
110781765,1,2640,1770,1, 110871,2651,1816,1,2652,
110792641,1775,1,2642,1780, 110881821,1,2653,1826,1,
110801,2643,1747,1,2535, 110892654,1831,1,2655,1836,
110811785,1,2645,1791,1, 110901,2656,1841,1,2657,
110822646,1796,1,2648,1875, 110911774,1,2659,3917,16,
110831,2649,1802,1,2650, 110920,415,1,2551,1852,
110841807,1,2651,1812,1, 110931,2559,1864,1,2567,
110852652,1817,1,2653,1822, 110941805,1,2459,1007,1,
110861,2654,1827,1,2655, 110952464,1024,1,2575,1846,
110871832,1,2657,3915,16, 110961,2470,3918,16,0,
110880,568,1,2550,1843, 11097415,1,2580,1858,1,
110891,2579,1861,1,2558, 110982703,3919,16,0,415,
110901849,1,2566,1855,1, 110991,2595,1871,1,2597,
110912459,1004,1,2464,1021, 111003920,16,0,415,1,
110921,2574,1837,1,2470, 1110185,3921,19,578,1,
110933916,16,0,568,1, 1110285,3922,5,30,1,
110942700,3917,16,0,568, 111032536,1750,1,2521,1767,
110951,2594,1868,1,2596, 111041,2641,1779,1,2642,
110963918,16,0,568,1, 111051784,1,2643,1756,1,
1109786,3919,19,442,1, 111062644,1789,1,2645,1794,
1109886,3920,5,30,1, 111071,2646,1799,1,2647,
110992644,1753,1,2520,1758, 111081762,1,2648,1878,1,
111001,2639,1765,1,2640, 111092650,1811,1,2651,1816,
111011770,1,2641,1775,1, 111101,2652,1821,1,2653,
111022642,1780,1,2643,1747, 111111826,1,2654,1831,1,
111031,2535,1785,1,2645, 111122655,1836,1,2656,1841,
111041791,1,2646,1796,1, 111131,2657,1774,1,2659,
111052648,1875,1,2649,1802, 111143923,16,0,576,1,
111061,2650,1807,1,2651, 111152551,1852,1,2559,1864,
111071812,1,2652,1817,1, 111161,2567,1805,1,2459,
111082653,1822,1,2654,1827, 111171007,1,2464,1024,1,
111091,2655,1832,1,2657, 111182575,1846,1,2470,3924,
111103921,16,0,440,1, 1111916,0,576,1,2580,
111112550,1843,1,2579,1861, 111201858,1,2703,3925,16,
111121,2558,1849,1,2566, 111210,576,1,2595,1871,
111131855,1,2459,1004,1, 111221,2597,3926,16,0,
111142464,1021,1,2574,1837, 11123576,1,86,3927,19,
111151,2470,3922,16,0, 11124452,1,86,3928,5,
11116440,1,2700,3923,16, 1112530,1,2536,1750,1,
111170,440,1,2594,1868, 111262521,1767,1,2641,1779,
111181,2596,3924,16,0, 111271,2642,1784,1,2643,
11119440,1,87,3925,19, 111281756,1,2644,1789,1,
11120548,1,87,3926,5, 111292645,1794,1,2646,1799,
1112130,1,2644,1753,1, 111301,2647,1762,1,2648,
111222520,1758,1,2639,1765, 111311878,1,2650,1811,1,
111231,2640,1770,1,2641, 111322651,1816,1,2652,1821,
111241775,1,2642,1780,1, 111331,2653,1826,1,2654,
111252643,1747,1,2535,1785, 111341831,1,2655,1836,1,
111261,2645,1791,1,2646, 111352656,1841,1,2657,1774,
111271796,1,2648,1875,1, 111361,2659,3929,16,0,
111282649,1802,1,2650,1807, 11137450,1,2551,1852,1,
111291,2651,1812,1,2652, 111382559,1864,1,2567,1805,
111301817,1,2653,1822,1, 111391,2459,1007,1,2464,
111312654,1827,1,2655,1832, 111401024,1,2575,1846,1,
111321,2657,3927,16,0, 111412470,3930,16,0,450,
11133546,1,2550,1843,1, 111421,2580,1858,1,2703,
111342579,1861,1,2558,1849, 111433931,16,0,450,1,
111351,2566,1855,1,2459, 111442595,1871,1,2597,3932,
111361004,1,2464,1021,1, 1114516,0,450,1,87,
111372574,1837,1,2470,3928, 111463933,19,560,1,87,
1113816,0,546,1,2700, 111473934,5,30,1,2536,
111393929,16,0,546,1, 111481750,1,2521,1767,1,
111402594,1868,1,2596,3930, 111492641,1779,1,2642,1784,
1114116,0,546,1,88, 111501,2643,1756,1,2644,
111423931,19,404,1,88, 111511789,1,2645,1794,1,
111433932,5,30,1,2644, 111522646,1799,1,2647,1762,
111441753,1,2520,1758,1, 111531,2648,1878,1,2650,
111452639,1765,1,2640,1770, 111541811,1,2651,1816,1,
111461,2641,1775,1,2642, 111552652,1821,1,2653,1826,
111471780,1,2643,1747,1, 111561,2654,1831,1,2655,
111482535,1785,1,2645,1791, 111571836,1,2656,1841,1,
111491,2646,1796,1,2648, 111582657,1774,1,2659,3935,
111501875,1,2649,1802,1, 1115916,0,558,1,2551,
111512650,1807,1,2651,1812, 111601852,1,2559,1864,1,
111521,2652,1817,1,2653, 111612567,1805,1,2459,1007,
111531822,1,2654,1827,1, 111621,2464,1024,1,2575,
111542655,1832,1,2657,3933, 111631846,1,2470,3936,16,
1115516,0,402,1,2550, 111640,558,1,2580,1858,
111561843,1,2579,1861,1, 111651,2703,3937,16,0,
111572558,1849,1,2566,1855, 11166558,1,2595,1871,1,
111581,2459,1004,1,2464, 111672597,3938,16,0,558,
111591021,1,2574,1837,1, 111681,88,3939,19,414,
111602470,3934,16,0,402, 111691,88,3940,5,30,
111611,2700,3935,16,0, 111701,2536,1750,1,2521,
11162402,1,2594,1868,1, 111711767,1,2641,1779,1,
111632596,3936,16,0,402, 111722642,1784,1,2643,1756,
111641,89,3937,19,398, 111731,2644,1789,1,2645,
111651,89,3938,5,30, 111741794,1,2646,1799,1,
111661,2644,1753,1,2520, 111752647,1762,1,2648,1878,
111671758,1,2639,1765,1, 111761,2650,1811,1,2651,
111682640,1770,1,2641,1775, 111771816,1,2652,1821,1,
111691,2642,1780,1,2643, 111782653,1826,1,2654,1831,
111701747,1,2535,1785,1, 111791,2655,1836,1,2656,
111712645,1791,1,2646,1796, 111801841,1,2657,1774,1,
111721,2648,1875,1,2649, 111812659,3941,16,0,412,
111731802,1,2650,1807,1, 111821,2551,1852,1,2559,
111742651,1812,1,2652,1817, 111831864,1,2567,1805,1,
111751,2653,1822,1,2654, 111842459,1007,1,2464,1024,
111761827,1,2655,1832,1, 111851,2575,1846,1,2470,
111772657,3939,16,0,396, 111863942,16,0,412,1,
111781,2550,1843,1,2579, 111872580,1858,1,2703,3943,
111791861,1,2558,1849,1, 1118816,0,412,1,2595,
111802566,1855,1,2459,1004, 111891871,1,2597,3944,16,
111811,2464,1021,1,2574, 111900,412,1,89,3945,
111821837,1,2470,3940,16, 1119119,408,1,89,3946,
111830,396,1,2700,3941, 111925,30,1,2536,1750,
1118416,0,396,1,2594, 111931,2521,1767,1,2641,
111851868,1,2596,3942,16, 111941779,1,2642,1784,1,
111860,396,1,90,3943, 111952643,1756,1,2644,1789,
1118719,401,1,90,3944, 111961,2645,1794,1,2646,
111885,30,1,2644,1753, 111971799,1,2647,1762,1,
111891,2520,1758,1,2639, 111982648,1878,1,2650,1811,
111901765,1,2640,1770,1, 111991,2651,1816,1,2652,
111912641,1775,1,2642,1780, 112001821,1,2653,1826,1,
111921,2643,1747,1,2535, 112012654,1831,1,2655,1836,
111931785,1,2645,1791,1, 112021,2656,1841,1,2657,
111942646,1796,1,2648,1875, 112031774,1,2659,3947,16,
111951,2649,1802,1,2650, 112040,406,1,2551,1852,
111961807,1,2651,1812,1, 112051,2559,1864,1,2567,
111972652,1817,1,2653,1822, 112061805,1,2459,1007,1,
111981,2654,1827,1,2655, 112072464,1024,1,2575,1846,
111991832,1,2657,3945,16, 112081,2470,3948,16,0,
112000,399,1,2550,1843, 11209406,1,2580,1858,1,
112011,2579,1861,1,2558, 112102703,3949,16,0,406,
112021849,1,2566,1855,1, 112111,2595,1871,1,2597,
112032459,1004,1,2464,1021, 112123950,16,0,406,1,
112041,2574,1837,1,2470, 1121390,3951,19,411,1,
112053946,16,0,399,1, 1121490,3952,5,30,1,
112062700,3947,16,0,399, 112152536,1750,1,2521,1767,
112071,2594,1868,1,2596, 112161,2641,1779,1,2642,
112083948,16,0,399,1, 112171784,1,2643,1756,1,
1120991,3949,19,446,1, 112182644,1789,1,2645,1794,
1121091,3950,5,30,1, 112191,2646,1799,1,2647,
112112644,1753,1,2520,1758, 112201762,1,2648,1878,1,
112121,2639,1765,1,2640, 112212650,1811,1,2651,1816,
112131770,1,2641,1775,1, 112221,2652,1821,1,2653,
112142642,1780,1,2643,1747, 112231826,1,2654,1831,1,
112151,2535,1785,1,2645, 112242655,1836,1,2656,1841,
112161791,1,2646,1796,1, 112251,2657,1774,1,2659,
112172648,1875,1,2649,1802, 112263953,16,0,409,1,
112181,2650,1807,1,2651, 112272551,1852,1,2559,1864,
112191812,1,2652,1817,1, 112281,2567,1805,1,2459,
112202653,1822,1,2654,1827, 112291007,1,2464,1024,1,
112211,2655,1832,1,2657, 112302575,1846,1,2470,3954,
112223951,16,0,444,1, 1123116,0,409,1,2580,
112232550,1843,1,2579,1861, 112321858,1,2703,3955,16,
112241,2558,1849,1,2566, 112330,409,1,2595,1871,
112251855,1,2459,1004,1, 112341,2597,3956,16,0,
112262464,1021,1,2574,1837, 11235409,1,91,3957,19,
112271,2470,3952,16,0, 11236768,1,91,3958,5,
11228444,1,2700,3953,16, 1123730,1,2536,1750,1,
112290,444,1,2594,1868, 112382521,1767,1,2641,1779,
112301,2596,3954,16,0, 112391,2642,1784,1,2643,
11231444,1,92,3955,19, 112401756,1,2644,1789,1,
11232133,1,92,3956,5, 112412645,1794,1,2646,1799,
11233129,1,0,3957,16, 112421,2647,1762,1,2648,
112340,314,1,1,2236, 112431878,1,2650,1811,1,
112351,2,2242,1,3, 112442651,1816,1,2652,1821,
112362247,1,4,2252,1, 112451,2653,1826,1,2654,
112375,2257,1,6,2262, 112461831,1,2655,1836,1,
112381,7,2267,1,8, 112472656,1841,1,2657,1774,
112393958,16,0,131,1, 112481,2659,3959,16,0,
112401515,3959,16,0,184, 11249766,1,2551,1852,1,
112411,2021,840,1,2022, 112502559,1864,1,2567,1805,
112423960,16,0,575,1, 112511,2459,1007,1,2464,
11243256,3961,16,0,192, 112521024,1,2575,1846,1,
112441,2526,3962,16,0, 112532470,3960,16,0,766,
11245300,1,2025,3963,16, 112541,2580,1858,1,2703,
112460,579,1,18,3964, 112553961,16,0,766,1,
1124716,0,138,1,2027, 112562595,1871,1,2597,3962,
112483965,16,0,583,1, 1125716,0,766,1,92,
112492029,847,1,2030,853, 112583963,19,456,1,92,
112501,2031,858,1,2032, 112593964,5,30,1,2536,
11251863,1,2033,868,1, 112601750,1,2521,1767,1,
11252277,3966,16,0,192, 112612641,1779,1,2642,1784,
112531,2035,874,1,2037, 112621,2643,1756,1,2644,
11254879,1,2541,3967,16, 112631789,1,2645,1794,1,
112550,512,1,32,3968, 112642646,1799,1,2647,1762,
1125616,0,184,1,2041, 112651,2648,1878,1,2650,
11257890,1,2293,3969,16, 112661811,1,2651,1816,1,
112580,192,1,2043,896, 112672652,1821,1,2653,1826,
112591,2045,901,1,41, 112681,2654,1831,1,2655,
112603970,16,0,192,1, 112691836,1,2656,1841,1,
112611297,3971,16,0,184, 112702657,1774,1,2659,3965,
112621,43,3972,16,0, 1127116,0,454,1,2551,
11263192,1,46,3973,16, 112721852,1,2559,1864,1,
112640,197,1,1804,3974, 112732567,1805,1,2459,1007,
1126516,0,184,1,299, 112741,2464,1024,1,2575,
112663975,16,0,192,1, 112751846,1,2470,3966,16,
1126752,3976,16,0,184, 112760,454,1,2580,1858,
112681,2818,3516,1,2819, 112771,2703,3967,16,0,
112693977,16,0,314,1, 11278454,1,2595,1871,1,
112702318,3978,16,0,184, 112792597,3968,16,0,454,
112711,62,3979,16,0, 112801,93,3969,19,133,
11272221,1,65,3980,16, 112811,93,3970,5,129,
112730,223,1,2075,3981, 112821,0,3971,16,0,
1127416,0,184,1,1574, 11283789,1,1,2244,1,
11275921,1,71,3982,16, 112842,2250,1,3,2255,
112760,192,1,1775,3983, 112851,4,2260,1,5,
1127716,0,184,1,2837, 112862265,1,6,2270,1,
112783530,1,2838,3536,1, 112877,2275,1,8,3972,
112792337,3984,16,0,184, 1128816,0,131,1,1515,
112801,79,3985,16,0, 112893973,16,0,181,1,
11281192,1,1335,3986,16, 112902021,843,1,2022,3974,
112820,184,1,2511,3987, 1129116,0,583,1,256,
1128316,0,477,1,322, 112923975,16,0,189,1,
112843988,16,0,192,1, 112932527,3976,16,0,311,
1128576,3989,16,0,192, 112941,18,3977,16,0,
112861,85,3990,16,0, 11295138,1,2027,3978,16,
11287192,1,1261,3991,16, 112960,591,1,2029,850,
112880,184,1,89,3992, 112971,2030,856,1,2031,
1128916,0,192,1,509, 11298861,1,2032,866,1,
112903993,16,0,192,1, 112992786,3979,16,0,189,
11291346,3994,16,0,192, 113001,277,3980,16,0,
112921,2039,884,1,97, 11301189,1,2035,877,1,
112933995,16,0,192,1, 113022037,882,1,2039,887,
112942106,3996,16,0,184, 113031,32,3981,16,0,
112951,102,3997,16,0, 11304181,1,2041,893,1,
11296192,1,1860,943,1, 113052293,3982,16,0,189,
112971803,909,1,2364,949, 113061,2043,899,1,2045,
112981,2779,3510,1,2782, 11307904,1,41,3983,16,
112993998,16,0,192,1, 113080,189,1,1297,3984,
11300112,3999,16,0,192, 1130916,0,181,1,43,
113011,1117,4000,16,0, 113103985,16,0,189,1,
11302184,1,1873,958,1, 1131146,3986,16,0,194,
113031876,4001,16,0,184, 113121,1804,3987,16,0,
113041,372,4002,16,0, 11313181,1,299,3988,16,
11305613,1,374,4003,16, 113140,189,1,2811,3559,
113060,615,1,124,4004, 113151,52,3989,16,0,
1130716,0,192,1,376, 11316181,1,509,3990,16,
113084005,16,0,617,1, 113170,189,1,2318,3991,
11309378,4006,16,0,619, 1131816,0,181,1,2822,
113101,2136,965,1,381, 113193523,1,62,3992,16,
113114007,16,0,192,1, 113200,218,1,65,3993,
11312525,4008,16,0,192, 1132116,0,220,1,2075,
113131,2807,3551,1,1834, 113223994,16,0,181,1,
113144009,16,0,184,1, 113231574,924,1,71,3995,
11315137,4010,16,0,192, 1132416,0,189,1,1775,
113161,1901,4011,16,0, 113253996,16,0,181,1,
11317184,1,1113,4012,16, 1132676,3997,16,0,189,
113180,176,1,1153,4013, 113271,1834,3998,16,0,
1131916,0,184,1,151, 11328181,1,2337,3999,16,
113204014,16,0,192,1, 113290,181,1,79,4000,
113211407,4015,16,0,184, 1133016,0,189,1,1335,
113221,1659,4016,16,0, 113314001,16,0,181,1,
11323184,1,2413,4017,16, 113322842,3544,1,2843,3549,
113240,184,1,406,4018, 113331,2844,3554,1,85,
1132516,0,192,1,1371, 113344002,16,0,189,1,
113264019,16,0,184,1, 113351261,4003,16,0,181,
113272105,936,1,166,4020, 113361,89,4004,16,0,
1132816,0,192,1,2839, 11337189,1,2033,871,1,
113293541,1,2840,3546,1, 11338322,4005,16,0,189,
113301931,983,1,1933,4021, 113391,97,4006,16,0,
1133116,0,184,1,431, 11340189,1,2106,4007,16,
113324022,16,0,192,1, 113410,181,1,102,4008,
113331585,4023,16,0,192, 1134216,0,189,1,1860,
113341,182,4024,16,0, 11343946,1,1803,912,1,
11335192,1,1189,4025,16, 113442364,952,1,346,4009,
113360,184,1,1443,4026, 1134516,0,189,1,1113,
1133716,0,184,1,1695, 113464010,16,0,173,1,
113384027,16,0,184,1, 113472783,3517,1,112,4011,
113392198,4028,16,0,184, 1134816,0,189,1,1117,
113401,447,4029,16,0, 113494012,16,0,181,1,
11341192,1,2458,998,1, 113501371,4013,16,0,181,
113422459,1004,1,1958,4030, 113511,1876,4014,16,0,
1134316,0,184,1,2462, 11352181,1,372,4015,16,
113441011,1,1657,1016,1, 113530,621,1,374,4016,
113452464,1021,1,2466,3525, 1135416,0,623,1,124,
113461,459,4031,16,0, 113554017,16,0,189,1,
11347192,1,2468,4032,16, 11356376,4018,16,0,625,
113480,376,1,462,4033, 113571,378,4019,16,0,
1134916,0,192,1,199, 11358627,1,2136,968,1,
113504034,16,0,192,1, 11359381,4020,16,0,189,
11351217,4035,16,0,192, 113601,525,4021,16,0,
113521,2227,1030,1,1622, 11361189,1,137,4022,16,
113534036,16,0,192,1, 113620,189,1,1901,4023,
113541225,4037,16,0,184, 1136316,0,181,1,2025,
113551,1479,4038,16,0, 113644024,16,0,587,1,
11356184,1,1731,4039,16, 113651153,4025,16,0,181,
113570,192,1,1989,1038, 113661,151,4026,16,0,
113581,1990,4040,16,0, 11367189,1,1407,4027,16,
11359184,1,236,4041,16, 113680,181,1,1659,4028,
113600,192,1,2507,4042, 1136916,0,181,1,2413,
1136116,0,471,1,1756, 113704029,16,0,181,1,
113624043,16,0,184,1, 11371406,4030,16,0,189,
1136393,4044,19,731,1, 113721,2512,4031,16,0,
1136493,4045,5,95,1, 11373490,1,2105,939,1,
11365256,4046,16,0,729, 11374166,4032,16,0,189,
113661,1261,4047,16,0, 113751,1622,4033,16,0,
11367729,1,509,4048,16, 11376189,1,2841,3538,1,
113680,729,1,1515,4049, 113771931,986,1,1873,961,
1136916,0,729,1,2021, 113781,431,4034,16,0,
11370840,1,1775,4050,16, 11379189,1,1585,4035,16,
113710,729,1,2029,847, 113800,189,1,182,4036,
113721,2030,853,1,2031, 1138116,0,189,1,1189,
11373858,1,2032,863,1, 113824037,16,0,181,1,
113742033,868,1,277,4051, 113831443,4038,16,0,181,
1137516,0,729,1,2035, 113841,1695,4039,16,0,
11376874,1,2037,879,1, 11385181,1,2198,4040,16,
113772039,884,1,32,4052, 113860,181,1,2542,4041,
1137816,0,729,1,2041, 1138716,0,644,1,447,
11379890,1,2293,4053,16, 113884042,16,0,189,1,
113800,729,1,2043,896, 113892458,1001,1,2459,1007,
113811,2045,901,1,41, 113901,1958,4043,16,0,
113824054,16,0,729,1, 11391181,1,2462,1014,1,
113831297,4055,16,0,729, 113921657,1019,1,2464,1024,
113841,43,4056,16,0, 113931,2466,3532,1,459,
11385729,1,1803,909,1, 113944044,16,0,189,1,
113861804,4057,16,0,729, 113952468,4045,16,0,386,
113871,299,4058,16,0, 113961,462,4046,16,0,
11388729,1,52,4059,16, 11397189,1,199,4047,16,
113890,729,1,2318,4060, 113980,189,1,217,4048,
1139016,0,729,1,62, 1139916,0,189,1,2227,
113914061,16,0,729,1, 114001033,1,1225,4049,16,
113922075,4062,16,0,729, 114010,181,1,1479,4050,
113931,1574,921,1,71, 1140216,0,181,1,1731,
113944063,16,0,729,1, 114034051,16,0,189,1,
1139576,4064,16,0,729, 114041989,1041,1,1990,4052,
113961,1834,4065,16,0, 1140516,0,181,1,236,
11397729,1,2337,4066,16, 114064053,16,0,189,1,
113980,729,1,79,4067, 114071933,4054,16,0,181,
1139916,0,729,1,1335, 114081,2823,4055,16,0,
114004068,16,0,729,1, 11409789,1,2508,4056,16,
11401322,4069,16,0,729, 114100,484,1,1756,4057,
114021,85,4070,16,0, 1141116,0,181,1,94,
11403729,1,89,4071,16, 114124058,19,746,1,94,
114040,729,1,346,4072, 114134059,5,95,1,256,
1140516,0,729,1,2105, 114144060,16,0,744,1,
11406936,1,2106,4073,16, 114151261,4061,16,0,744,
114070,729,1,97,4074, 114161,509,4062,16,0,
1140816,0,729,1,1860, 11417744,1,1515,4063,16,
11409943,1,2364,949,1, 114180,744,1,2021,843,
11410102,4075,16,0,729, 114191,1775,4064,16,0,
114111,2782,4076,16,0, 11420744,1,2029,850,1,
11412729,1,112,4077,16, 114212030,856,1,2031,861,
114130,729,1,1117,4078, 114221,2032,866,1,2033,
1141416,0,729,1,1873, 11423871,1,277,4065,16,
11415958,1,1876,4079,16, 114240,744,1,2035,877,
114160,729,1,124,4080, 114251,2037,882,1,2039,
1141716,0,729,1,2136, 11426887,1,32,4066,16,
11418965,1,381,4081,16, 114270,744,1,2041,893,
114190,729,1,525,4082, 114281,2293,4067,16,0,
1142016,0,729,1,137, 11429744,1,2043,899,1,
114214083,16,0,729,1, 114302045,904,1,41,4068,
114221901,4084,16,0,729, 1143116,0,744,1,1297,
114231,1153,4085,16,0, 114324069,16,0,744,1,
11424729,1,151,4086,16, 1143343,4070,16,0,744,
114250,729,1,1407,4087, 114341,1803,912,1,1804,
1142616,0,729,1,1659, 114354071,16,0,744,1,
114274088,16,0,729,1, 11436299,4072,16,0,744,
114282413,4089,16,0,729, 114371,52,4073,16,0,
114291,406,4090,16,0, 11438744,1,2318,4074,16,
11430729,1,1371,4091,16, 114390,744,1,62,4075,
114310,729,1,166,4092, 1144016,0,744,1,2075,
1143216,0,729,1,1622, 114414076,16,0,744,1,
114334093,16,0,729,1, 114421574,924,1,71,4077,
114341931,983,1,1933,4094, 1144316,0,744,1,76,
1143516,0,729,1,431, 114444078,16,0,744,1,
114364095,16,0,729,1, 114451834,4079,16,0,744,
114371585,4096,16,0,729, 114461,2337,4080,16,0,
114381,182,4097,16,0, 11447744,1,79,4081,16,
11439729,1,1189,4098,16, 114480,744,1,1335,4082,
114400,729,1,1443,4099, 1144916,0,744,1,322,
1144116,0,729,1,1695, 114504083,16,0,744,1,
114424100,16,0,729,1, 1145185,4084,16,0,744,
114432198,4101,16,0,729, 114521,89,4085,16,0,
114441,447,4102,16,0, 11453744,1,346,4086,16,
11445729,1,2458,998,1, 114540,744,1,2105,939,
114462459,1004,1,1958,4103, 114551,2106,4087,16,0,
1144716,0,729,1,2462, 11456744,1,97,4088,16,
114481011,1,1657,1016,1, 114570,744,1,1860,946,
114492464,1021,1,199,4104, 114581,2364,952,1,102,
1145016,0,729,1,459, 114594089,16,0,744,1,
114514105,16,0,729,1, 11460112,4090,16,0,744,
11452462,4106,16,0,729, 114611,1117,4091,16,0,
114531,217,4107,16,0, 11462744,1,2786,4092,16,
11454729,1,2227,1030,1, 114630,744,1,1873,961,
114551225,4108,16,0,729, 114641,1876,4093,16,0,
114561,1479,4109,16,0, 11465744,1,124,4094,16,
11457729,1,1731,4110,16, 114660,744,1,2136,968,
114580,729,1,1989,1038, 114671,381,4095,16,0,
114591,1990,4111,16,0, 11468744,1,525,4096,16,
11460729,1,236,4112,16, 114690,744,1,137,4097,
114610,729,1,1756,4113, 1147016,0,744,1,1901,
1146216,0,729,1,94, 114714098,16,0,744,1,
114634114,19,728,1,94, 114721153,4099,16,0,744,
114644115,5,95,1,256, 114731,151,4100,16,0,
114654116,16,0,726,1, 11474744,1,1407,4101,16,
114661261,4117,16,0,726, 114750,744,1,1659,4102,
114671,509,4118,16,0, 1147616,0,744,1,2413,
11468726,1,1515,4119,16, 114774103,16,0,744,1,
114690,726,1,2021,840, 11478406,4104,16,0,744,
114701,1775,4120,16,0, 114791,1371,4105,16,0,
11471726,1,2029,847,1, 11480744,1,166,4106,16,
114722030,853,1,2031,858, 114810,744,1,1622,4107,
114731,2032,863,1,2033, 1148216,0,744,1,1931,
11474868,1,277,4121,16, 11483986,1,1933,4108,16,
114750,726,1,2035,874, 114840,744,1,431,4109,
114761,2037,879,1,2039, 1148516,0,744,1,1585,
11477884,1,32,4122,16, 114864110,16,0,744,1,
114780,726,1,2041,890, 11487182,4111,16,0,744,
114791,2293,4123,16,0, 114881,1189,4112,16,0,
11480726,1,2043,896,1, 11489744,1,1443,4113,16,
114812045,901,1,41,4124, 114900,744,1,1695,4114,
1148216,0,726,1,1297, 1149116,0,744,1,2198,
114834125,16,0,726,1, 114924115,16,0,744,1,
1148443,4126,16,0,726, 11493447,4116,16,0,744,
114851,1803,909,1,1804, 114941,2458,1001,1,2459,
114864127,16,0,726,1, 114951007,1,1958,4117,16,
11487299,4128,16,0,726, 114960,744,1,2462,1014,
114881,52,4129,16,0, 114971,1657,1019,1,2464,
11489726,1,2318,4130,16, 114981024,1,199,4118,16,
114900,726,1,62,4131, 114990,744,1,459,4119,
1149116,0,726,1,2075, 1150016,0,744,1,462,
114924132,16,0,726,1, 115014120,16,0,744,1,
114931574,921,1,71,4133, 11502217,4121,16,0,744,
1149416,0,726,1,76, 115031,2227,1033,1,1225,
114954134,16,0,726,1, 115044122,16,0,744,1,
114961834,4135,16,0,726, 115051479,4123,16,0,744,
114971,2337,4136,16,0, 115061,1731,4124,16,0,
11498726,1,79,4137,16, 11507744,1,1989,1041,1,
114990,726,1,1335,4138, 115081990,4125,16,0,744,
1150016,0,726,1,322, 115091,236,4126,16,0,
115014139,16,0,726,1, 11510744,1,1756,4127,16,
1150285,4140,16,0,726, 115110,744,1,95,4128,
115031,89,4141,16,0, 1151219,743,1,95,4129,
11504726,1,346,4142,16, 115135,95,1,256,4130,
115050,726,1,2105,936, 1151416,0,741,1,1261,
115061,2106,4143,16,0, 115154131,16,0,741,1,
11507726,1,97,4144,16, 11516509,4132,16,0,741,
115080,726,1,1860,943, 115171,1515,4133,16,0,
115091,2364,949,1,102, 11518741,1,2021,843,1,
115104145,16,0,726,1, 115191775,4134,16,0,741,
115112782,4146,16,0,726, 115201,2029,850,1,2030,
115121,112,4147,16,0, 11521856,1,2031,861,1,
11513726,1,1117,4148,16, 115222032,866,1,2033,871,
115140,726,1,1873,958, 115231,277,4135,16,0,
115151,1876,4149,16,0, 11524741,1,2035,877,1,
11516726,1,124,4150,16, 115252037,882,1,2039,887,
115170,726,1,2136,965, 115261,32,4136,16,0,
115181,381,4151,16,0, 11527741,1,2041,893,1,
11519726,1,525,4152,16, 115282293,4137,16,0,741,
115200,726,1,137,4153, 115291,2043,899,1,2045,
1152116,0,726,1,1901, 11530904,1,41,4138,16,
115224154,16,0,726,1, 115310,741,1,1297,4139,
115231153,4155,16,0,726, 1153216,0,741,1,43,
115241,151,4156,16,0, 115334140,16,0,741,1,
11525726,1,1407,4157,16, 115341803,912,1,1804,4141,
115260,726,1,1659,4158, 1153516,0,741,1,299,
1152716,0,726,1,2413, 115364142,16,0,741,1,
115284159,16,0,726,1, 1153752,4143,16,0,741,
11529406,4160,16,0,726, 115381,2318,4144,16,0,
115301,1371,4161,16,0, 11539741,1,62,4145,16,
11531726,1,166,4162,16, 115400,741,1,2075,4146,
115320,726,1,1622,4163, 1154116,0,741,1,1574,
1153316,0,726,1,1931, 11542924,1,71,4147,16,
11534983,1,1933,4164,16, 115430,741,1,76,4148,
115350,726,1,431,4165, 1154416,0,741,1,1834,
1153616,0,726,1,1585, 115454149,16,0,741,1,
115374166,16,0,726,1, 115462337,4150,16,0,741,
11538182,4167,16,0,726, 115471,79,4151,16,0,
115391,1189,4168,16,0, 11548741,1,1335,4152,16,
11540726,1,1443,4169,16, 115490,741,1,322,4153,
115410,726,1,1695,4170, 1155016,0,741,1,85,
1154216,0,726,1,2198, 115514154,16,0,741,1,
115434171,16,0,726,1, 1155289,4155,16,0,741,
11544447,4172,16,0,726, 115531,346,4156,16,0,
115451,2458,998,1,2459, 11554741,1,2105,939,1,
115461004,1,1958,4173,16, 115552106,4157,16,0,741,
115470,726,1,2462,1011, 115561,97,4158,16,0,
115481,1657,1016,1,2464, 11557741,1,1860,946,1,
115491021,1,199,4174,16, 115582364,952,1,102,4159,
115500,726,1,459,4175, 1155916,0,741,1,112,
1155116,0,726,1,462, 115604160,16,0,741,1,
115524176,16,0,726,1, 115611117,4161,16,0,741,
11553217,4177,16,0,726, 115621,2786,4162,16,0,
115541,2227,1030,1,1225, 11563741,1,1873,961,1,
115554178,16,0,726,1, 115641876,4163,16,0,741,
115561479,4179,16,0,726, 115651,124,4164,16,0,
115571,1731,4180,16,0, 11566741,1,2136,968,1,
11558726,1,1989,1038,1, 11567381,4165,16,0,741,
115591990,4181,16,0,726, 115681,525,4166,16,0,
115601,236,4182,16,0, 11569741,1,137,4167,16,
11561726,1,1756,4183,16, 115700,741,1,1901,4168,
115620,726,1,95,4184, 1157116,0,741,1,1153,
1156319,725,1,95,4185, 115724169,16,0,741,1,
115645,95,1,256,4186, 11573151,4170,16,0,741,
1156516,0,723,1,1261, 115741,1407,4171,16,0,
115664187,16,0,723,1, 11575741,1,1659,4172,16,
11567509,4188,16,0,723, 115760,741,1,2413,4173,
115681,1515,4189,16,0, 1157716,0,741,1,406,
11569723,1,2021,840,1, 115784174,16,0,741,1,
115701775,4190,16,0,723, 115791371,4175,16,0,741,
115711,2029,847,1,2030, 115801,166,4176,16,0,
11572853,1,2031,858,1, 11581741,1,1622,4177,16,
115732032,863,1,2033,868, 115820,741,1,1931,986,
115741,277,4191,16,0, 115831,1933,4178,16,0,
11575723,1,2035,874,1, 11584741,1,431,4179,16,
115762037,879,1,2039,884, 115850,741,1,1585,4180,
115771,32,4192,16,0, 1158616,0,741,1,182,
11578723,1,2041,890,1, 115874181,16,0,741,1,
115792293,4193,16,0,723, 115881189,4182,16,0,741,
115801,2043,896,1,2045, 115891,1443,4183,16,0,
11581901,1,41,4194,16, 11590741,1,1695,4184,16,
115820,723,1,1297,4195, 115910,741,1,2198,4185,
1158316,0,723,1,43, 1159216,0,741,1,447,
115844196,16,0,723,1, 115934186,16,0,741,1,
115851803,909,1,1804,4197, 115942458,1001,1,2459,1007,
1158616,0,723,1,299, 115951,1958,4187,16,0,
115874198,16,0,723,1, 11596741,1,2462,1014,1,
1158852,4199,16,0,723, 115971657,1019,1,2464,1024,
115891,2318,4200,16,0, 115981,199,4188,16,0,
11590723,1,62,4201,16, 11599741,1,459,4189,16,
115910,723,1,2075,4202, 116000,741,1,462,4190,
1159216,0,723,1,1574, 1160116,0,741,1,217,
11593921,1,71,4203,16, 116024191,16,0,741,1,
115940,723,1,76,4204, 116032227,1033,1,1225,4192,
1159516,0,723,1,1834, 1160416,0,741,1,1479,
115964205,16,0,723,1, 116054193,16,0,741,1,
115972337,4206,16,0,723, 116061731,4194,16,0,741,
115981,79,4207,16,0, 116071,1989,1041,1,1990,
11599723,1,1335,4208,16, 116084195,16,0,741,1,
116000,723,1,322,4209, 11609236,4196,16,0,741,
1160116,0,723,1,85, 116101,1756,4197,16,0,
116024210,16,0,723,1, 11611741,1,96,4198,19,
1160389,4211,16,0,723, 11612740,1,96,4199,5,
116041,346,4212,16,0, 1161395,1,256,4200,16,
11605723,1,2105,936,1, 116140,738,1,1261,4201,
116062106,4213,16,0,723, 1161516,0,738,1,509,
116071,97,4214,16,0, 116164202,16,0,738,1,
11608723,1,1860,943,1, 116171515,4203,16,0,738,
116092364,949,1,102,4215, 116181,2021,843,1,1775,
1161016,0,723,1,2782, 116194204,16,0,738,1,
116114216,16,0,723,1, 116202029,850,1,2030,856,
11612112,4217,16,0,723, 116211,2031,861,1,2032,
116131,1117,4218,16,0, 11622866,1,2033,871,1,
11614723,1,1873,958,1, 11623277,4205,16,0,738,
116151876,4219,16,0,723, 116241,2035,877,1,2037,
116161,124,4220,16,0, 11625882,1,2039,887,1,
11617723,1,2136,965,1, 1162632,4206,16,0,738,
11618381,4221,16,0,723, 116271,2041,893,1,2293,
116191,525,4222,16,0, 116284207,16,0,738,1,
11620723,1,137,4223,16, 116292043,899,1,2045,904,
116210,723,1,1901,4224, 116301,41,4208,16,0,
1162216,0,723,1,1153, 11631738,1,1297,4209,16,
116234225,16,0,723,1, 116320,738,1,43,4210,
11624151,4226,16,0,723, 1163316,0,738,1,1803,
116251,1407,4227,16,0, 11634912,1,1804,4211,16,
11626723,1,1659,4228,16, 116350,738,1,299,4212,
116270,723,1,2413,4229, 1163616,0,738,1,52,
1162816,0,723,1,406, 116374213,16,0,738,1,
116294230,16,0,723,1, 116382318,4214,16,0,738,
116301371,4231,16,0,723, 116391,62,4215,16,0,
116311,166,4232,16,0, 11640738,1,2075,4216,16,
11632723,1,1622,4233,16, 116410,738,1,1574,924,
116330,723,1,1931,983, 116421,71,4217,16,0,
116341,1933,4234,16,0, 11643738,1,76,4218,16,
11635723,1,431,4235,16, 116440,738,1,1834,4219,
116360,723,1,1585,4236, 1164516,0,738,1,2337,
1163716,0,723,1,182, 116464220,16,0,738,1,
116384237,16,0,723,1, 1164779,4221,16,0,738,
116391189,4238,16,0,723, 116481,1335,4222,16,0,
116401,1443,4239,16,0, 11649738,1,322,4223,16,
11641723,1,1695,4240,16, 116500,738,1,85,4224,
116420,723,1,2198,4241, 1165116,0,738,1,89,
1164316,0,723,1,447, 116524225,16,0,738,1,
116444242,16,0,723,1, 11653346,4226,16,0,738,
116452458,998,1,2459,1004, 116541,2105,939,1,2106,
116461,1958,4243,16,0, 116554227,16,0,738,1,
11647723,1,2462,1011,1, 1165697,4228,16,0,738,
116481657,1016,1,2464,1021, 116571,1860,946,1,2364,
116491,199,4244,16,0, 11658952,1,102,4229,16,
11650723,1,459,4245,16, 116590,738,1,112,4230,
116510,723,1,462,4246, 1166016,0,738,1,1117,
1165216,0,723,1,217, 116614231,16,0,738,1,
116534247,16,0,723,1, 116622786,4232,16,0,738,
116542227,1030,1,1225,4248, 116631,1873,961,1,1876,
1165516,0,723,1,1479, 116644233,16,0,738,1,
116564249,16,0,723,1, 11665124,4234,16,0,738,
116571731,4250,16,0,723, 116661,2136,968,1,381,
116581,1989,1038,1,1990, 116674235,16,0,738,1,
116594251,16,0,723,1, 11668525,4236,16,0,738,
11660236,4252,16,0,723, 116691,137,4237,16,0,
116611,1756,4253,16,0, 11670738,1,1901,4238,16,
11662723,1,96,4254,19, 116710,738,1,1153,4239,
11663103,1,96,4255,5, 1167216,0,738,1,151,
116641,1,0,4256,16, 116734240,16,0,738,1,
116650,104,1,97,4257, 116741407,4241,16,0,738,
1166619,172,1,97,4258, 116751,1659,4242,16,0,
116675,1,1,0,4259, 11676738,1,2413,4243,16,
1166816,0,170,1,98, 116770,738,1,406,4244,
116694260,19,213,1,98, 1167816,0,738,1,1371,
116704261,5,2,1,0, 116794245,16,0,738,1,
116714262,16,0,211,1, 11680166,4246,16,0,738,
116722819,4263,16,0,366, 116811,1622,4247,16,0,
116731,99,4264,19,210, 11682738,1,1931,986,1,
116741,99,4265,5,2, 116831933,4248,16,0,738,
116751,0,4266,16,0, 116841,431,4249,16,0,
11676208,1,2819,4267,16, 11685738,1,1585,4250,16,
116770,365,1,100,4268, 116860,738,1,182,4251,
1167819,292,1,100,4269, 1168716,0,738,1,1189,
116795,2,1,0,4270, 116884252,16,0,738,1,
1168016,0,775,1,2819, 116891443,4253,16,0,738,
116814271,16,0,290,1, 116901,1695,4254,16,0,
11682101,4272,19,781,1, 11691738,1,2198,4255,16,
11683101,4273,5,4,1, 116920,738,1,447,4256,
116840,4274,16,0,782, 1169316,0,738,1,2458,
116851,2830,4275,16,0, 116941001,1,2459,1007,1,
11686779,1,2819,4276,16, 116951958,4257,16,0,738,
116870,782,1,2760,4277, 116961,2462,1014,1,1657,
1168816,0,779,1,102, 116971019,1,2464,1024,1,
116894278,19,698,1,102, 11698199,4258,16,0,738,
116904279,5,2,1,2470, 116991,459,4259,16,0,
116914280,16,0,696,1, 11700738,1,462,4260,16,
116922657,4281,16,0,719, 117010,738,1,217,4261,
116931,103,4282,19,157, 1170216,0,738,1,2227,
116941,103,4283,5,4, 117031033,1,1225,4262,16,
116951,2596,4284,16,0, 117040,738,1,1479,4263,
11696155,1,2470,4285,16, 1170516,0,738,1,1731,
116970,674,1,2700,4286, 117064264,16,0,738,1,
1169816,0,155,1,2657, 117071989,1041,1,1990,4265,
116994287,16,0,674,1, 1170816,0,738,1,236,
11700104,4288,19,154,1, 117094266,16,0,738,1,
11701104,4289,5,4,1, 117101756,4267,16,0,738,
117022596,4290,16,0,152, 117111,97,4268,19,103,
117031,2470,4291,16,0, 117121,97,4269,5,1,
11704177,1,2700,4292,16, 117131,0,4270,16,0,
117050,152,1,2657,4293, 11714104,1,98,4271,19,
1170616,0,177,1,105, 11715647,1,98,4272,5,
117074294,19,657,1,105, 117161,1,0,4273,16,
117084295,5,4,1,2596, 117170,645,1,99,4274,
117094296,16,0,655,1, 1171819,210,1,99,4275,
117102470,4297,16,0,672, 117195,2,1,0,4276,
117111,2700,4298,16,0, 1172016,0,312,1,2823,
11712655,1,2657,4299,16, 117214277,16,0,208,1,
117130,672,1,106,4300, 11722100,4278,19,207,1,
1171419,175,1,106,4301, 11723100,4279,5,2,1,
117155,4,1,2596,4302, 117240,4280,16,0,286,
1171616,0,654,1,2470, 117251,2823,4281,16,0,
117174303,16,0,173,1, 11726205,1,101,4282,19,
117182700,4304,16,0,654, 11727301,1,101,4283,5,
117191,2657,4305,16,0, 117282,1,0,4284,16,
11720173,1,107,4306,19, 117290,785,1,2823,4285,
11721670,1,107,4307,5, 1173016,0,299,1,102,
117224,1,2596,4308,16, 117314286,19,320,1,102,
117230,742,1,2470,4309, 117324287,5,4,1,0,
1172416,0,668,1,2700, 117334288,16,0,788,1,
117254310,16,0,742,1, 117342764,4289,16,0,318,
117262657,4311,16,0,668, 117351,2823,4290,16,0,
117271,108,4312,19,169, 11736788,1,2834,4291,16,
117281,108,4313,5,4, 117370,318,1,103,4292,
117291,2596,4314,16,0, 1173819,714,1,103,4293,
11730650,1,2470,4315,16, 117395,2,1,2470,4294,
117310,167,1,2700,4316, 1174016,0,712,1,2659,
1173216,0,650,1,2657, 117414295,16,0,734,1,
117334317,16,0,167,1, 11742104,4296,19,280,1,
11734109,4318,19,741,1, 11743104,4297,5,4,1,
11735109,4319,5,4,1, 117442597,4298,16,0,680,
117362596,4320,16,0,739, 117451,2703,4299,16,0,
117371,2470,4321,16,0, 11746680,1,2470,4300,16,
11738751,1,2700,4322,16, 117470,278,1,2659,4301,
117390,739,1,2657,4323, 1174816,0,278,1,105,
1174016,0,751,1,110, 117494302,19,679,1,105,
117414324,19,648,1,110, 117504303,5,4,1,2597,
117424325,5,4,1,2596, 117514304,16,0,677,1,
117434326,16,0,646,1, 117522703,4305,16,0,677,
117442470,4327,16,0,663, 117531,2470,4306,16,0,
117451,2700,4328,16,0, 11754690,1,2659,4307,16,
11746646,1,2657,4329,16, 117550,690,1,106,4308,
117470,663,1,111,4330, 1175619,157,1,106,4309,
1174819,141,1,111,4331, 117575,4,1,2597,4310,
117495,3,1,2766,4332, 1175816,0,155,1,2703,
1175016,0,791,1,2581, 117594311,16,0,155,1,
117514333,16,0,355,1, 117602470,4312,16,0,769,
1175210,4334,16,0,139, 117611,2659,4313,16,0,
117531,112,4335,19,557, 11762769,1,107,4314,19,
117541,112,4336,5,1, 11763154,1,107,4315,5,
117551,2568,4337,16,0, 117644,1,2597,4316,16,
11756555,1,113,4338,19, 117650,152,1,2703,4317,
11757745,1,113,4339,5, 1176616,0,152,1,2470,
117581,1,2560,4340,16, 117674318,16,0,174,1,
117590,743,1,114,4341, 117682659,4319,16,0,174,
1176019,529,1,114,4342, 117691,108,4320,19,672,
117615,1,1,2552,4343, 117701,108,4321,5,4,
1176216,0,527,1,115, 117711,2597,4322,16,0,
117634344,19,251,1,115, 11772670,1,2703,4323,16,
117644345,5,1,1,2537, 117730,670,1,2470,4324,
117654346,16,0,249,1, 1177416,0,685,1,2659,
11766116,4347,19,502,1, 117754325,16,0,685,1,
11767116,4348,5,1,1, 11776109,4326,19,669,1,
117682522,4349,16,0,500, 11777109,4327,5,4,1,
117691,117,4350,19,486, 117782597,4328,16,0,667,
117701,117,4351,5,1, 117791,2703,4329,16,0,
117711,2506,4352,16,0, 11780667,1,2470,4330,16,
11772484,1,118,4353,19, 117810,684,1,2659,4331,
11773160,1,118,4354,5, 1178216,0,684,1,110,
1177417,1,0,4355,16, 117834332,19,172,1,110,
117750,794,1,2581,4356, 117844333,5,4,1,2597,
1177616,0,372,1,2075, 117854334,16,0,752,1,
117774357,16,0,753,1, 117862703,4335,16,0,752,
117782337,4358,16,0,753, 117871,2470,4336,16,0,
117791,2819,4359,16,0, 11788170,1,2659,4337,16,
11780794,1,2413,4360,16, 117890,170,1,111,4338,
117810,753,1,10,4361, 1179019,169,1,111,4339,
1178216,0,372,1,1901, 117915,4,1,2597,4340,
117834362,16,0,753,1, 1179216,0,663,1,2703,
117842198,4363,16,0,753, 117934341,16,0,663,1,
117851,21,4364,16,0, 117942470,4342,16,0,167,
11786158,1,2106,4365,16, 117951,2659,4343,16,0,
117870,753,1,2766,4366, 11796167,1,112,4344,19,
1178816,0,372,1,1804, 11797141,1,112,4345,5,
117894367,16,0,753,1, 117983,1,2582,4346,16,
117901990,4368,16,0,753, 117990,293,1,2770,4347,
117911,32,4369,16,0, 1180016,0,331,1,10,
11792753,1,1958,4370,16, 118014348,16,0,139,1,
117930,753,1,1775,4371, 11802113,4349,19,688,1,
1179416,0,753,1,119, 11803113,4350,5,1,1,
117954372,19,474,1,119, 118042569,4351,16,0,686,
117964373,5,2,1,2568, 118051,114,4352,19,676,
117974374,16,0,671,1, 118061,114,4353,5,1,
117982506,4375,16,0,472, 118071,2561,4354,16,0,
117991,120,4376,19,480, 11808674,1,115,4355,19,
118001,120,4377,5,5, 11809660,1,115,4356,5,
118011,2510,4378,16,0, 118101,1,2553,4357,16,
11802478,1,2522,4379,16, 118110,658,1,116,4358,
118030,491,1,2514,4380, 1181219,535,1,116,4359,
1180416,0,483,1,2537, 118135,1,1,2538,4360,
118054381,16,0,509,1, 1181416,0,533,1,117,
118062560,4382,16,0,537, 118154361,19,638,1,117,
118071,121,4383,19,309, 118164362,5,1,1,2523,
118081,121,4384,5,3, 118174363,16,0,636,1,
118091,2552,4385,16,0, 11818118,4364,19,498,1,
11810737,1,2525,4386,16, 11819118,4365,5,1,1,
118110,307,1,2529,4387, 118202507,4366,16,0,496,
1181216,0,499,1,122, 118211,119,4367,19,160,
118134388,19,636,1,122, 118221,119,4368,5,17,
118144389,5,2,1,2544, 118231,0,4369,16,0,
118154390,16,0,637,1, 11824333,1,2582,4370,16,
118162540,4391,16,0,634, 118250,382,1,2075,4371,
118171,123,4392,19,130, 1182616,0,763,1,2337,
118181,123,4393,5,18, 118274372,16,0,763,1,
118191,0,4394,16,0, 118282413,4373,16,0,763,
11820128,1,2581,4395,16, 118291,10,4374,16,0,
118210,137,1,2075,4396, 11830382,1,2823,4375,16,
1182216,0,137,1,2337, 118310,333,1,1901,4376,
118234397,16,0,137,1, 1183216,0,763,1,2198,
118242819,4398,16,0,128, 118334377,16,0,763,1,
118251,2413,4399,16,0, 1183421,4378,16,0,158,
11826137,1,10,4400,16, 118351,2106,4379,16,0,
118270,137,1,2198,4401, 11836763,1,2770,4380,16,
1182816,0,137,1,1901, 118370,382,1,1804,4381,
118294402,16,0,137,1, 1183816,0,763,1,1990,
1183052,4403,16,0,219, 118394382,16,0,763,1,
118311,21,4404,16,0, 1184032,4383,16,0,763,
11832137,1,2106,4405,16, 118411,1958,4384,16,0,
118330,137,1,2766,4406, 11842763,1,1775,4385,16,
1183416,0,137,1,1804, 118430,763,1,120,4386,
118354407,16,0,137,1, 1184419,487,1,120,4387,
118361990,4408,16,0,137, 118455,2,1,2569,4388,
118371,32,4409,16,0, 1184616,0,567,1,2507,
11838137,1,1958,4410,16, 118474389,16,0,485,1,
118390,137,1,1775,4411, 11848121,4390,19,493,1,
1184016,0,137,1,124, 11849121,4391,5,5,1,
118414412,19,765,1,124, 118502511,4392,16,0,491,
118424413,5,4,1,2596, 118511,2523,4393,16,0,
118434414,16,0,763,1, 11852506,1,2515,4394,16,
118442470,4415,16,0,763, 118530,495,1,2538,4395,
118451,2700,4416,16,0, 1185416,0,523,1,2561,
11846763,1,2657,4417,16, 118554396,16,0,753,1,
118470,763,1,125,4418, 11856122,4397,19,514,1,
1184819,567,1,125,4419, 11857122,4398,5,3,1,
118495,4,1,2596,4420, 118582530,4399,16,0,516,
1185016,0,565,1,2470, 118591,2553,4400,16,0,
118514421,16,0,565,1, 11860542,1,2526,4401,16,
118522700,4422,16,0,565, 118610,512,1,123,4402,
118531,2657,4423,16,0, 1186219,248,1,123,4403,
11854565,1,126,4424,19, 118635,2,1,2541,4404,
11855666,1,126,4425,5, 1186416,0,527,1,2545,
118564,1,2596,4426,16, 118654405,16,0,246,1,
118570,664,1,2470,4427, 11866124,4406,19,130,1,
1185816,0,664,1,2700, 11867124,4407,5,18,1,
118594428,16,0,664,1, 118680,4408,16,0,128,
118602657,4429,16,0,664, 118691,2582,4409,16,0,
118611,127,4430,19,535, 11870137,1,2075,4410,16,
118621,127,4431,5,4, 118710,137,1,2337,4411,
118631,2596,4432,16,0, 1187216,0,137,1,2413,
11864533,1,2470,4433,16, 118734412,16,0,137,1,
118650,533,1,2700,4434, 1187410,4413,16,0,137,
1186616,0,533,1,2657, 118751,2823,4414,16,0,
118674435,16,0,533,1, 11876128,1,2198,4415,16,
11868128,4436,19,524,1, 118770,137,1,1901,4416,
11869128,4437,5,4,1, 1187816,0,137,1,52,
118702596,4438,16,0,522, 118794417,16,0,216,1,
118711,2470,4439,16,0, 1188021,4418,16,0,137,
11872522,1,2700,4440,16, 118811,2106,4419,16,0,
118730,522,1,2657,4441, 11882137,1,2770,4420,16,
1187416,0,522,1,129, 118830,137,1,1804,4421,
118754442,19,632,1,129, 1188416,0,137,1,1990,
118764443,5,4,1,2596, 118854422,16,0,137,1,
118774444,16,0,630,1, 1188632,4423,16,0,137,
118782470,4445,16,0,630, 118871,1958,4424,16,0,
118791,2700,4446,16,0, 11888137,1,1775,4425,16,
11880630,1,2657,4447,16, 118890,137,1,125,4426,
118810,630,1,130,4448, 1189019,359,1,125,4427,
1188219,778,1,130,4449, 118915,4,1,2597,4428,
118835,4,1,2596,4450, 1189216,0,357,1,2703,
1188416,0,776,1,2470, 118934429,16,0,357,1,
118854451,16,0,776,1, 118942470,4430,16,0,357,
118862700,4452,16,0,776, 118951,2659,4431,16,0,
118871,2657,4453,16,0, 11896357,1,126,4432,19,
11888776,1,131,4454,19, 11897772,1,126,4433,5,
11889768,1,131,4455,5, 118984,1,2597,4434,16,
118904,1,2596,4456,16, 118990,770,1,2703,4435,
118910,766,1,2470,4457, 1190016,0,770,1,2470,
1189216,0,766,1,2700, 119014436,16,0,770,1,
118934458,16,0,766,1, 119022659,4437,16,0,770,
118942657,4459,16,0,766, 119031,127,4438,19,760,
118951,132,4460,19,328, 119041,127,4439,5,4,
118961,132,4461,5,21, 119051,2597,4440,16,0,
118971,2518,4462,16,0, 11906758,1,2703,4441,16,
11898699,1,2075,4463,16, 119070,758,1,2470,4442,
118990,584,1,2548,4464, 1190816,0,758,1,2659,
1190016,0,736,1,2337, 119094443,16,0,758,1,
119014465,16,0,584,1, 11910128,4444,19,548,1,
119022413,4466,16,0,584, 11911128,4445,5,4,1,
119031,2564,4467,16,0, 119122597,4446,16,0,546,
11904542,1,2556,4468,16, 119131,2703,4447,16,0,
119050,532,1,2592,4469, 11914546,1,2470,4448,16,
1190616,0,695,1,1901, 119150,546,1,2659,4449,
119074470,16,0,584,1, 1191616,0,546,1,129,
119082198,4471,16,0,584, 119174450,19,655,1,129,
119091,2533,4472,16,0, 119184451,5,4,1,2597,
11910504,1,2777,4473,16, 119194452,16,0,653,1,
119110,326,1,2572,4474, 119202703,4453,16,0,653,
1191216,0,675,1,2106, 119211,2470,4454,16,0,
119134475,16,0,584,1, 11922653,1,2659,4455,16,
119142577,4476,16,0,681, 119230,653,1,130,4456,
119151,1804,4477,16,0, 1192419,643,1,130,4457,
11916584,1,1990,4478,16, 119255,4,1,2597,4458,
119170,584,1,31,4479, 1192616,0,641,1,2703,
1191816,0,371,1,32, 119274459,16,0,641,1,
119194480,16,0,584,1, 119282470,4460,16,0,641,
119201958,4481,16,0,584, 119291,2659,4461,16,0,
119211,1775,4482,16,0, 11930641,1,131,4462,19,
11922584,1,133,4483,19, 11931504,1,131,4463,5,
11923337,1,133,4484,5, 119324,1,2597,4464,16,
119241,1,32,4485,16, 119330,502,1,2703,4465,
119250,335,1,134,4486, 1193416,0,502,1,2470,
1192619,286,1,134,4487, 119354466,16,0,502,1,
119275,11,1,2075,4488, 119362659,4467,16,0,502,
1192816,0,682,1,2337, 119371,132,4468,19,481,
119294489,16,0,293,1, 119381,132,4469,5,4,
119302413,4490,16,0,505, 119391,2597,4470,16,0,
119311,1901,4491,16,0, 11940479,1,2703,4471,16,
11932427,1,2198,4492,16, 119410,479,1,2470,4472,
119330,354,1,2106,4493, 1194216,0,479,1,2659,
119434473,16,0,479,1,
11944133,4474,19,381,1,
11945133,4475,5,21,1,
119462781,4476,16,0,798,
119471,2519,4477,16,0,
11948784,1,2557,4478,16,
119490,545,1,2337,4479,
1195016,0,592,1,2413,
119514480,16,0,592,1,
119522593,4481,16,0,711,
119531,2565,4482,16,0,
11954681,1,1901,4483,16,
119550,592,1,2198,4484,
1195616,0,592,1,2534,
119574485,16,0,640,1,
119582573,4486,16,0,575,
119591,2106,4487,16,0,
11960592,1,2578,4488,16,
119610,775,1,2075,4489,
1196216,0,592,1,1804,
119634490,16,0,592,1,
119641990,4491,16,0,592,
119651,31,4492,16,0,
11966379,1,32,4493,16,
119670,592,1,2549,4494,
1196816,0,538,1,1958,
119694495,16,0,592,1,
119701775,4496,16,0,592,
119711,134,4497,19,342,
119721,134,4498,5,1,
119731,32,4499,16,0,
11974340,1,135,4500,19,
11975289,1,135,4501,5,
1197611,1,2075,4502,16,
119770,697,1,2337,4503,
1197816,0,294,1,2413,
119794504,16,0,520,1,
119801901,4505,16,0,437,
119811,2198,4506,16,0,
11982362,1,2106,4507,16,
119830,730,1,1804,4508,
1198416,0,322,1,1990,
119854509,16,0,580,1,
1198632,4510,16,0,375,
119871,1958,4511,16,0,
11988529,1,1775,4512,16,
119890,287,1,136,4513,
1199019,703,1,136,4514,
119915,11,1,2075,4515,
1199216,0,701,1,2337,
119934516,16,0,701,1,
119942413,4517,16,0,701,
119951,1901,4518,16,0,
11996701,1,2198,4519,16,
119970,701,1,2106,4520,
1199816,0,701,1,1804,
119994521,16,0,701,1,
120001990,4522,16,0,701,
120011,32,4523,16,0,
12002701,1,1958,4524,16,
120030,701,1,1775,4525,
1200416,0,701,1,137,
120054526,19,756,1,137,
120064527,5,11,1,2075,
120074528,16,0,754,1,
120082337,4529,16,0,754,
120091,2413,4530,16,0,
12010754,1,1901,4531,16,
120110,754,1,2198,4532,
1201216,0,754,1,2106,
120134533,16,0,754,1,
120141804,4534,16,0,754,
120151,1990,4535,16,0,
12016754,1,32,4536,16,
120170,754,1,1958,4537,
1201816,0,754,1,1775,
120194538,16,0,754,1,
12020138,4539,19,177,1,
12021138,4540,5,31,1,
120221901,4541,16,0,762,
120231,1479,4542,16,0,
12024648,1,2075,4543,16,
120250,762,1,1695,4544,
1202616,0,214,1,1756,
120274545,16,0,204,1,
120282413,4546,16,0,762,
120291,2198,4547,16,0,
12030762,1,1876,4548,16,
120310,781,1,1659,4549,
1203216,0,204,1,1443,
120334550,16,0,608,1,
120341117,4551,16,0,175,
120351,1990,4552,16,0,
12036762,1,1189,4553,16,
120370,264,1,1775,4554,
1203816,0,762,1,32,
120394555,16,0,762,1,
120402106,4556,16,0,762,
120411,1515,4557,16,0,
12042699,1,2337,4558,16,
120430,762,1,52,4559,
1193416,0,715,1,1804, 1204416,0,715,1,1804,
119354494,16,0,317,1, 120454560,16,0,762,1,
119361990,4495,16,0,572, 120461261,4561,16,0,338,
119371,32,4496,16,0, 120471,1153,4562,16,0,
11938367,1,1958,4497,16, 12048271,1,1225,4563,16,
119390,515,1,1775,4498, 120490,307,1,1335,4564,
1194016,0,284,1,135, 1205016,0,511,1,1933,
119414499,19,688,1,135, 120514565,16,0,651,1,
119424500,5,11,1,2075, 120521834,4566,16,0,352,
119434501,16,0,686,1, 120531,1297,4567,16,0,
119442337,4502,16,0,686, 12054366,1,1407,4568,16,
119451,2413,4503,16,0, 120550,682,1,2318,4569,
11946686,1,1901,4504,16, 1205616,0,204,1,1958,
119470,686,1,2198,4505, 120574570,16,0,762,1,
1194816,0,686,1,2106, 120581371,4571,16,0,500,
119494506,16,0,686,1, 120591,139,4572,19,617,
119501804,4507,16,0,686, 120601,139,4573,5,11,
119511,1990,4508,16,0, 120611,2075,4574,16,0,
11952686,1,32,4509,16, 12062615,1,2337,4575,16,
119530,686,1,1958,4510, 120630,615,1,2413,4576,
1195416,0,686,1,1775, 1206416,0,615,1,1901,
119554511,16,0,686,1, 120654577,16,0,615,1,
11956136,4512,19,748,1, 120662198,4578,16,0,615,
11957136,4513,5,11,1, 120671,2106,4579,16,0,
119582075,4514,16,0,746, 12068615,1,1804,4580,16,
119591,2337,4515,16,0, 120690,615,1,1990,4581,
11960746,1,2413,4516,16, 1207016,0,615,1,32,
119610,746,1,1901,4517, 120714582,16,0,615,1,
1196216,0,746,1,2198, 120721958,4583,16,0,615,
119634518,16,0,746,1, 120731,1775,4584,16,0,
119642106,4519,16,0,746, 12074615,1,140,4585,19,
119651,1804,4520,16,0, 12075613,1,140,4586,5,
11966746,1,1990,4521,16, 1207611,1,2075,4587,16,
119670,746,1,32,4522, 120770,611,1,2337,4588,
1196816,0,746,1,1958, 1207816,0,611,1,2413,
119694523,16,0,746,1, 120794589,16,0,611,1,
119701775,4524,16,0,746, 120801901,4590,16,0,611,
119711,137,4525,19,180, 120811,2198,4591,16,0,
119721,137,4526,5,31, 12082611,1,2106,4592,16,
119731,1901,4527,16,0, 120830,611,1,1804,4593,
11974752,1,1479,4528,16, 1208416,0,611,1,1990,
119750,638,1,2075,4529, 120854594,16,0,611,1,
1197616,0,752,1,1695, 1208632,4595,16,0,611,
119774530,16,0,217,1, 120871,1958,4596,16,0,
119781756,4531,16,0,207, 12088611,1,1775,4597,16,
119791,2413,4532,16,0, 120890,611,1,141,4598,
11980752,1,2198,4533,16, 1209019,694,1,141,4599,
119810,752,1,1876,4534, 120915,11,1,2075,4600,
1198216,0,771,1,1659, 1209216,0,692,1,2337,
119834535,16,0,207,1, 120934601,16,0,692,1,
119841443,4536,16,0,600, 120942413,4602,16,0,692,
119851,1117,4537,16,0, 120951,1901,4603,16,0,
11986178,1,1990,4538,16, 12096692,1,2198,4604,16,
119870,752,1,1189,4539, 120970,692,1,2106,4605,
1198816,0,267,1,1775, 1209816,0,692,1,1804,
119894540,16,0,752,1, 120994606,16,0,692,1,
1199032,4541,16,0,752, 121001990,4607,16,0,692,
119911,2106,4542,16,0, 121011,32,4608,16,0,
11992752,1,1515,4543,16, 12102692,1,1958,4609,16,
119930,684,1,2337,4544, 121030,692,1,1775,4610,
1199416,0,752,1,52, 1210416,0,692,1,142,
119954545,16,0,700,1, 121054611,19,607,1,142,
119961804,4546,16,0,752, 121064612,5,11,1,2075,
119971,1261,4547,16,0, 121074613,16,0,605,1,
11998331,1,1153,4548,16, 121082337,4614,16,0,605,
119990,274,1,1225,4549, 121091,2413,4615,16,0,
1200016,0,303,1,1335, 12110605,1,1901,4616,16,
120014550,16,0,497,1, 121110,605,1,2198,4617,
120021933,4551,16,0,640, 1211216,0,605,1,2106,
120031,1834,4552,16,0, 121134618,16,0,605,1,
12004347,1,1297,4553,16, 121141804,4619,16,0,605,
120050,359,1,1407,4554, 121151,1990,4620,16,0,
1200616,0,667,1,2318, 12116605,1,32,4621,16,
120074555,16,0,207,1, 121170,605,1,1958,4622,
120081958,4556,16,0,752, 1211816,0,605,1,1775,
120091,1371,4557,16,0, 121194623,16,0,605,1,
12010488,1,138,4558,19, 12120143,4624,19,604,1,
12011609,1,138,4559,5, 12121143,4625,5,11,1,
1201211,1,2075,4560,16, 121222075,4626,16,0,602,
120130,607,1,2337,4561, 121231,2337,4627,16,0,
1201416,0,607,1,2413, 12124602,1,2413,4628,16,
120154562,16,0,607,1, 121250,602,1,1901,4629,
120161901,4563,16,0,607, 1212616,0,602,1,2198,
120171,2198,4564,16,0, 121274630,16,0,602,1,
12018607,1,2106,4565,16, 121282106,4631,16,0,602,
120190,607,1,1804,4566, 121291,1804,4632,16,0,
1202016,0,607,1,1990, 12130602,1,1990,4633,16,
120214567,16,0,607,1, 121310,602,1,32,4634,
1202232,4568,16,0,607, 1213216,0,602,1,1958,
120231,1958,4569,16,0, 121334635,16,0,602,1,
12024607,1,1775,4570,16, 121341775,4636,16,0,602,
120250,607,1,139,4571, 121351,144,4637,19,601,
1202619,605,1,139,4572, 121361,144,4638,5,11,
120275,11,1,2075,4573, 121371,2075,4639,16,0,
1202816,0,603,1,2337, 12138599,1,2337,4640,16,
120294574,16,0,603,1, 121390,599,1,2413,4641,
120302413,4575,16,0,603, 1214016,0,599,1,1901,
120311,1901,4576,16,0, 121414642,16,0,599,1,
12032603,1,2198,4577,16, 121422198,4643,16,0,599,
120330,603,1,2106,4578, 121431,2106,4644,16,0,
1203416,0,603,1,1804, 12144599,1,1804,4645,16,
120354579,16,0,603,1, 121450,599,1,1990,4646,
120361990,4580,16,0,603, 1214616,0,599,1,32,
120371,32,4581,16,0, 121474647,16,0,599,1,
12038603,1,1958,4582,16, 121481958,4648,16,0,599,
120390,603,1,1775,4583, 121491,1775,4649,16,0,
1204016,0,603,1,140, 12150599,1,145,4650,19,
120414584,19,679,1,140, 12151598,1,145,4651,5,
120424585,5,11,1,2075, 1215211,1,2075,4652,16,
120434586,16,0,677,1, 121530,596,1,2337,4653,
120442337,4587,16,0,677, 1215416,0,596,1,2413,
120451,2413,4588,16,0, 121554654,16,0,596,1,
12046677,1,1901,4589,16, 121561901,4655,16,0,596,
120470,677,1,2198,4590, 121571,2198,4656,16,0,
1204816,0,677,1,2106, 12158596,1,2106,4657,16,
120494591,16,0,677,1, 121590,596,1,1804,4658,
120501804,4592,16,0,677, 1216016,0,596,1,1990,
120511,1990,4593,16,0, 121614659,16,0,596,1,
12052677,1,32,4594,16, 1216232,4660,16,0,596,
120530,677,1,1958,4595, 121631,1958,4661,16,0,
1205416,0,677,1,1775, 12164596,1,1775,4662,16,
120554596,16,0,677,1, 121650,596,1,146,4663,
12056141,4597,19,599,1, 1216619,595,1,146,4664,
12057141,4598,5,11,1, 121675,11,1,2075,4665,
120582075,4599,16,0,597, 1216816,0,593,1,2337,
120591,2337,4600,16,0, 121694666,16,0,593,1,
12060597,1,2413,4601,16, 121702413,4667,16,0,593,
120610,597,1,1901,4602, 121711,1901,4668,16,0,
1206216,0,597,1,2198, 12172593,1,2198,4669,16,
120634603,16,0,597,1, 121730,593,1,2106,4670,
120642106,4604,16,0,597, 1217416,0,593,1,1804,
120651,1804,4605,16,0, 121754671,16,0,593,1,
12066597,1,1990,4606,16, 121761990,4672,16,0,593,
120670,597,1,32,4607, 121771,32,4673,16,0,
1206816,0,597,1,1958, 12178593,1,1958,4674,16,
120694608,16,0,597,1, 121790,593,1,1775,4675,
120701775,4609,16,0,597, 1218016,0,593,1,147,
120711,142,4610,19,596, 121814676,19,147,1,147,
120721,142,4611,5,11, 121824677,5,3,1,1756,
120731,2075,4612,16,0, 121834678,16,0,321,1,
12074594,1,2337,4613,16, 121842318,4679,16,0,337,
120750,594,1,2413,4614, 121851,1659,4680,16,0,
1207616,0,594,1,1901, 12186145,1,148,4681,19,
120774615,16,0,594,1, 12187634,1,148,4682,5,
120782198,4616,16,0,594, 1218868,1,1901,4683,16,
120791,2106,4617,16,0, 121890,632,1,1479,4684,
12080594,1,1804,4618,16, 1219016,0,632,1,112,
120810,594,1,1990,4619, 121914685,16,0,632,1,
1208216,0,594,1,32, 121922293,4686,16,0,632,
120834620,16,0,594,1, 121931,1804,4687,16,0,
120841958,4621,16,0,594, 12194632,1,431,4688,16,
120851,1775,4622,16,0, 121950,632,1,1443,4689,
12086594,1,143,4623,19, 1219616,0,632,1,1756,
12087593,1,143,4624,5, 121974690,16,0,632,1,
1208811,1,2075,4625,16, 12198124,4691,16,0,632,
120890,591,1,2337,4626, 121991,525,4692,16,0,
1209016,0,591,1,2413, 12200632,1,236,4693,16,
120914627,16,0,591,1, 122010,632,1,346,4694,
120921901,4628,16,0,591, 1220216,0,632,1,1876,
120931,2198,4629,16,0, 122034695,16,0,632,1,
12094591,1,2106,4630,16, 122041659,4696,16,0,632,
120950,591,1,1804,4631, 122051,1225,4697,16,0,
1209616,0,591,1,1990, 12206632,1,1117,4698,16,
120974632,16,0,591,1, 122070,632,1,137,4699,
1209832,4633,16,0,591, 1220816,0,632,1,2318,
120991,1958,4634,16,0, 122094700,16,0,632,1,
12100591,1,1775,4635,16, 122101775,4701,16,0,632,
121010,591,1,144,4636, 122111,32,4702,16,0,
1210219,590,1,144,4637, 12212632,1,1407,4703,16,
121035,11,1,2075,4638, 122130,632,1,256,4704,
1210416,0,588,1,2337, 1221416,0,632,1,459,
121054639,16,0,588,1, 122154705,16,0,632,1,
121062413,4640,16,0,588, 12216406,4706,16,0,632,
121071,1901,4641,16,0, 122171,41,4707,16,0,
12108588,1,2198,4642,16, 12218632,1,151,4708,16,
121090,588,1,2106,4643, 122190,632,1,43,4709,
1211016,0,588,1,1804, 1222016,0,632,1,1585,
121114644,16,0,588,1, 122214710,16,0,632,1,
121121990,4645,16,0,588, 122221990,4711,16,0,632,
121131,32,4646,16,0, 122231,2337,4712,16,0,
12114588,1,1958,4647,16, 12224632,1,509,4713,16,
121150,588,1,1775,4648, 122250,632,1,52,4714,
1211616,0,588,1,145, 1222616,0,632,1,381,
121174649,19,587,1,145, 122274715,16,0,632,1,
121184650,5,11,1,2075, 12228447,4716,16,0,632,
121194651,16,0,585,1, 122291,166,4717,16,0,
121202337,4652,16,0,585, 12230632,1,462,4718,16,
121211,2413,4653,16,0, 122310,632,1,277,4719,
12122585,1,1901,4654,16, 1223216,0,632,1,1695,
121230,585,1,2198,4655, 122334720,16,0,632,1,
1212416,0,585,1,2106, 122342786,4721,16,0,632,
121254656,16,0,585,1, 122351,62,4722,16,0,
121261804,4657,16,0,585, 12236707,1,1153,4723,16,
121271,1990,4658,16,0, 122370,632,1,2106,4724,
12128585,1,32,4659,16, 1223816,0,632,1,1335,
121290,585,1,1958,4660, 122394725,16,0,632,1,
1213016,0,585,1,1775, 1224071,4726,16,0,632,
121314661,16,0,585,1, 122411,182,4727,16,0,
12132146,4662,19,150,1, 12242632,1,76,4728,16,
12133146,4663,5,3,1, 122430,632,1,79,4729,
121341756,4664,16,0,316, 1224416,0,632,1,1933,
121351,2318,4665,16,0, 122454730,16,0,632,1,
12136330,1,1659,4666,16, 12246299,4731,16,0,632,
121370,148,1,147,4667, 122471,85,4732,16,0,
1213819,626,1,147,4668, 12248632,1,1515,4733,16,
121395,68,1,1901,4669, 122490,632,1,2198,4734,
1214016,0,624,1,1479, 1225016,0,632,1,89,
121414670,16,0,624,1, 122514735,16,0,632,1,
12142112,4671,16,0,624, 122521834,4736,16,0,632,
121431,2293,4672,16,0, 122531,1622,4737,16,0,
12144624,1,1804,4673,16, 12254632,1,2413,4738,16,
121450,624,1,431,4674, 122550,632,1,2075,4739,
1214616,0,624,1,1443, 1225616,0,632,1,1731,
121474675,16,0,624,1, 122574740,16,0,632,1,
121481756,4676,16,0,624, 1225897,4741,16,0,632,
121491,124,4677,16,0, 122591,1297,4742,16,0,
12150624,1,525,4678,16, 12260632,1,1189,4743,16,
121510,624,1,236,4679, 122610,632,1,102,4744,
1215216,0,624,1,346, 1226216,0,632,1,1261,
121534680,16,0,624,1, 122634745,16,0,632,1,
121541876,4681,16,0,624, 12264322,4746,16,0,632,
121551,1659,4682,16,0, 122651,1958,4747,16,0,
12156624,1,1225,4683,16, 12266632,1,199,4748,16,
121570,624,1,1117,4684, 122670,632,1,1371,4749,
1215816,0,624,1,137, 1226816,0,632,1,217,
121594685,16,0,624,1, 122694750,16,0,632,1,
121602318,4686,16,0,624, 12270149,4751,19,725,1,
121611,1775,4687,16,0, 12271149,4752,5,2,1,
12162624,1,32,4688,16, 12272459,4753,16,0,723,
121630,624,1,1407,4689, 122731,41,4754,16,0,
1216416,0,624,1,2782, 12274786,1,150,4755,19,
121654690,16,0,624,1, 12275729,1,150,4756,5,
12166256,4691,16,0,624, 122763,1,462,4757,16,
121671,459,4692,16,0, 122770,727,1,459,4758,
12168624,1,406,4693,16, 1227816,0,750,1,41,
121690,624,1,41,4694, 122794759,16,0,750,1,
1217016,0,624,1,151, 12280151,4760,19,4761,4,
121714695,16,0,624,1, 1228136,69,0,120,0,
1217243,4696,16,0,624, 12282112,0,114,0,101,
121731,1585,4697,16,0, 122830,115,0,115,0,
12174624,1,1990,4698,16, 12284105,0,111,0,110,
121750,624,1,2337,4699, 122850,65,0,114,0,
1217616,0,624,1,509, 12286103,0,117,0,109,
121774700,16,0,624,1, 122870,101,0,110,0,
1217852,4701,16,0,624, 12288116,0,1,151,4756,
121791,381,4702,16,0, 122891,152,4762,19,630,
12180624,1,447,4703,16, 122901,152,4763,5,68,
121810,624,1,166,4704, 122911,1901,4764,16,0,
1218216,0,624,1,462, 12292628,1,1479,4765,16,
121834705,16,0,624,1, 122930,628,1,112,4766,
12184277,4706,16,0,624, 1229416,0,628,1,2293,
121851,1695,4707,16,0, 122954767,16,0,628,1,
12186624,1,62,4708,16, 122961804,4768,16,0,628,
121870,692,1,1153,4709, 122971,431,4769,16,0,
1218816,0,624,1,2106, 12298628,1,1443,4770,16,
121894710,16,0,624,1, 122990,628,1,1756,4771,
121901335,4711,16,0,624, 1230016,0,628,1,124,
121911,71,4712,16,0, 123014772,16,0,628,1,
12192624,1,182,4713,16, 12302525,4773,16,0,628,
121930,624,1,76,4714, 123031,236,4774,16,0,
1219416,0,624,1,79, 12304628,1,346,4775,16,
121954715,16,0,624,1, 123050,628,1,1876,4776,
121961933,4716,16,0,624, 1230616,0,628,1,1659,
121971,299,4717,16,0, 123074777,16,0,628,1,
12198624,1,85,4718,16, 123081225,4778,16,0,628,
121990,624,1,1515,4719, 123091,1117,4779,16,0,
1220016,0,624,1,2198, 12310628,1,137,4780,16,
122014720,16,0,624,1, 123110,628,1,2318,4781,
1220289,4721,16,0,624, 1231216,0,628,1,1775,
122031,1834,4722,16,0, 123134782,16,0,628,1,
12204624,1,1622,4723,16, 1231432,4783,16,0,628,
122050,624,1,2413,4724, 123151,1407,4784,16,0,
1220616,0,624,1,2075, 12316628,1,256,4785,16,
122074725,16,0,624,1, 123170,628,1,459,4786,
122081731,4726,16,0,624, 1231816,0,628,1,406,
122091,97,4727,16,0, 123194787,16,0,628,1,
12210624,1,1297,4728,16, 1232041,4788,16,0,628,
122110,624,1,1189,4729, 123211,151,4789,16,0,
1221216,0,624,1,102, 12322628,1,43,4790,16,
122134730,16,0,624,1, 123230,628,1,1585,4791,
122141261,4731,16,0,624, 1232416,0,628,1,1990,
122151,322,4732,16,0, 123254792,16,0,628,1,
12216624,1,1958,4733,16, 123262337,4793,16,0,628,
122170,624,1,199,4734, 123271,509,4794,16,0,
1221816,0,624,1,1371, 12328628,1,52,4795,16,
122194735,16,0,624,1, 123290,628,1,381,4796,
12220217,4736,16,0,624, 1233016,0,628,1,447,
122211,148,4737,19,710, 123314797,16,0,628,1,
122221,148,4738,5,2, 12332166,4798,16,0,628,
122231,459,4739,16,0, 123331,462,4799,16,0,
12224708,1,41,4740,16, 12334628,1,277,4800,16,
122250,783,1,149,4741, 123350,628,1,1695,4801,
1222619,714,1,149,4742, 1233616,0,628,1,2786,
122275,3,1,462,4743, 123374802,16,0,628,1,
1222816,0,712,1,459, 1233862,4803,16,0,708,
122294744,16,0,735,1, 123391,1153,4804,16,0,
1223041,4745,16,0,735, 12340628,1,2106,4805,16,
122311,150,4746,19,4747, 123410,628,1,1335,4806,
122324,36,69,0,120, 1234216,0,628,1,71,
122330,112,0,114,0, 123434807,16,0,628,1,
12234101,0,115,0,115, 12344182,4808,16,0,628,
122350,105,0,111,0, 123451,76,4809,16,0,
12236110,0,65,0,114, 12346628,1,79,4810,16,
122370,103,0,117,0, 123470,628,1,1933,4811,
12238109,0,101,0,110, 1234816,0,628,1,299,
122390,116,0,1,150, 123494812,16,0,628,1,
122404742,1,151,4748,19, 1235085,4813,16,0,628,
12241622,1,151,4749,5, 123511,1515,4814,16,0,
1224268,1,1901,4750,16, 12352628,1,2198,4815,16,
122430,620,1,1479,4751, 123530,628,1,89,4816,
1224416,0,620,1,112, 1235416,0,628,1,1834,
122454752,16,0,620,1, 123554817,16,0,628,1,
122462293,4753,16,0,620, 123561622,4818,16,0,628,
122471,1804,4754,16,0, 123571,2413,4819,16,0,
12248620,1,431,4755,16, 12358628,1,2075,4820,16,
122490,620,1,1443,4756, 123590,628,1,1731,4821,
1225016,0,620,1,1756, 1236016,0,628,1,97,
122514757,16,0,620,1, 123614822,16,0,628,1,
12252124,4758,16,0,620, 123621297,4823,16,0,628,
122531,525,4759,16,0, 123631,1189,4824,16,0,
12254620,1,236,4760,16, 12364628,1,102,4825,16,
122550,620,1,346,4761, 123650,628,1,1261,4826,
1225616,0,620,1,1876, 1236616,0,628,1,322,
122574762,16,0,620,1, 123674827,16,0,628,1,
122581659,4763,16,0,620, 123681958,4828,16,0,628,
122591,1225,4764,16,0, 123691,199,4829,16,0,
12260620,1,1117,4765,16, 12370628,1,1371,4830,16,
122610,620,1,137,4766, 123710,628,1,217,4831,
1226216,0,620,1,2318, 1237216,0,628,1,153,
122634767,16,0,620,1, 123734832,19,4833,4,28,
122641775,4768,16,0,620, 1237486,0,101,0,99,
122651,32,4769,16,0, 123750,116,0,111,0,
12266620,1,1407,4770,16, 12376114,0,67,0,111,
122670,620,1,2782,4771, 123770,110,0,115,0,
1226816,0,620,1,256, 12378116,0,97,0,110,
122694772,16,0,620,1, 123790,116,0,1,153,
12270459,4773,16,0,620, 123804763,1,154,4834,19,
122711,406,4774,16,0, 123814835,4,32,82,0,
12272620,1,41,4775,16, 12382111,0,116,0,97,
122730,620,1,151,4776, 123830,116,0,105,0,
1227416,0,620,1,43, 12384111,0,110,0,67,
122754777,16,0,620,1,
122761585,4778,16,0,620,
122771,1990,4779,16,0,
12278620,1,2337,4780,16,
122790,620,1,509,4781,
1228016,0,620,1,52,
122814782,16,0,620,1,
12282381,4783,16,0,620,
122831,447,4784,16,0,
12284620,1,166,4785,16,
122850,620,1,462,4786,
1228616,0,620,1,277,
122874787,16,0,620,1,
122881695,4788,16,0,620,
122891,62,4789,16,0,
12290693,1,1153,4790,16,
122910,620,1,2106,4791,
1229216,0,620,1,1335,
122934792,16,0,620,1,
1229471,4793,16,0,620,
122951,182,4794,16,0,
12296620,1,76,4795,16,
122970,620,1,79,4796,
1229816,0,620,1,1933,
122994797,16,0,620,1,
12300299,4798,16,0,620,
123011,85,4799,16,0,
12302620,1,1515,4800,16,
123030,620,1,2198,4801,
1230416,0,620,1,89,
123054802,16,0,620,1,
123061834,4803,16,0,620,
123071,1622,4804,16,0,
12308620,1,2413,4805,16,
123090,620,1,2075,4806,
1231016,0,620,1,1731,
123114807,16,0,620,1,
1231297,4808,16,0,620,
123131,1297,4809,16,0,
12314620,1,1189,4810,16,
123150,620,1,102,4811,
1231616,0,620,1,1261,
123174812,16,0,620,1,
12318322,4813,16,0,620,
123191,1958,4814,16,0,
12320620,1,199,4815,16,
123210,620,1,1371,4816,
1232216,0,620,1,217,
123234817,16,0,620,1,
12324152,4818,19,4819,4,
1232528,86,0,101,0,
1232699,0,116,0,111,
123270,114,0,67,0,
12328111,0,110,0,115,
123290,116,0,97,0,
12330110,0,116,0,1,
12331152,4749,1,153,4820,
1233219,4821,4,32,82,
123330,111,0,116,0,
1233497,0,116,0,105,
123350,111,0,110,0,
1233667,0,111,0,110,
123370,115,0,116,0,
1233897,0,110,0,116,
123390,1,153,4749,1,
12340154,4822,19,4823,4,
1234124,76,0,105,0,
12342115,0,116,0,67,
123430,111,0,110,0, 123850,111,0,110,0,
12344115,0,116,0,97, 12386115,0,116,0,97,
123450,110,0,116,0, 123870,110,0,116,0,
123461,154,4749,1,155, 123881,154,4763,1,155,
123474824,19,188,1,155, 123894836,19,4837,4,24,
123484825,5,67,1,1901, 1239076,0,105,0,115,
123494826,16,0,690,1, 123910,116,0,67,0,
123501479,4827,16,0,611, 12392111,0,110,0,115,
123511,112,4828,16,0, 123930,116,0,97,0,
12352276,1,2293,4829,16, 12394110,0,116,0,1,
123530,302,1,1804,4830, 12395155,4763,1,156,4838,
1235416,0,690,1,431, 1239619,185,1,156,4839,
123554831,16,0,685,1, 123975,67,1,1901,4840,
123561443,4832,16,0,538, 1239816,0,705,1,1479,
123571,1756,4833,16,0, 123994841,16,0,619,1,
12358793,1,124,4834,16, 12400112,4842,16,0,273,
123590,283,1,525,4835, 124011,2293,4843,16,0,
1236016,0,340,1,236, 12402306,1,1804,4844,16,
123614836,16,0,377,1, 124030,705,1,431,4845,
12362346,4837,16,0,574, 1240416,0,700,1,1443,
123631,1876,4838,16,0, 124054846,16,0,550,1,
12364353,1,1659,4839,16, 124061756,4847,16,0,796,
123650,793,1,1225,4840, 124071,124,4848,16,0,
1236616,0,275,1,1117, 12408285,1,525,4849,16,
123674841,16,0,245,1, 124090,345,1,236,4850,
12368137,4842,16,0,301, 1241016,0,387,1,346,
123691,2318,4843,16,0, 124114851,16,0,582,1,
12370793,1,1775,4844,16, 124121876,4852,16,0,361,
123710,690,1,32,4845, 124131,1659,4853,16,0,
1237216,0,690,1,1407, 12414796,1,1225,4854,16,
123734846,16,0,561,1, 124150,272,1,1117,4855,
123742782,4847,16,0,256, 1241616,0,242,1,137,
123751,256,4848,16,0, 124174856,16,0,305,1,
12376431,1,459,4849,16, 124182318,4857,16,0,796,
123770,186,1,406,4850, 124191,1775,4858,16,0,
1237816,0,649,1,41, 12420705,1,32,4859,16,
123794851,16,0,186,1, 124210,705,1,1407,4860,
12380151,4852,16,0,315, 1242216,0,571,1,256,
123811,43,4853,16,0, 124234861,16,0,441,1,
12382738,1,1990,4854,16, 12424459,4862,16,0,183,
123830,690,1,2337,4855, 124251,406,4863,16,0,
1238416,0,690,1,509, 12426662,1,41,4864,16,
123854856,16,0,762,1, 124270,183,1,151,4865,
1238652,4857,16,0,702, 1242816,0,317,1,43,
123871,381,4858,16,0, 124294866,16,0,751,1,
12388629,1,447,4859,16, 124301990,4867,16,0,705,
123890,340,1,166,4860, 124311,2337,4868,16,0,
1239016,0,329,1,462, 12432705,1,509,4869,16,
123914861,16,0,186,1, 124330,774,1,52,4870,
12392277,4862,16,0,476, 1243416,0,717,1,381,
123931,1695,4863,16,0, 124354871,16,0,639,1,
12394298,1,1261,4864,16, 12436447,4872,16,0,345,
123950,313,1,1153,4865, 124371,166,4873,16,0,
1239616,0,193,1,2106, 12438332,1,462,4874,16,
123974866,16,0,690,1, 124390,183,1,277,4875,
123981335,4867,16,0,362, 1244016,0,488,1,1695,
123991,71,4868,16,0, 124414876,16,0,302,1,
12400229,1,182,4869,16, 124422786,4877,16,0,254,
124010,340,1,76,4870, 124431,1261,4878,16,0,
1240216,0,627,1,79, 12444316,1,1153,4879,16,
124034871,16,0,244,1, 124450,190,1,2106,4880,
124041933,4872,16,0,443, 1244616,0,705,1,1335,
124051,299,4873,16,0, 124474881,16,0,372,1,
12406503,1,85,4874,16, 1244871,4882,16,0,226,
124070,526,1,1515,4875, 124491,182,4883,16,0,
1240816,0,644,1,2198, 12450345,1,76,4884,16,
124094876,16,0,690,1, 124510,635,1,79,4885,
1241089,4877,16,0,257, 1245216,0,241,1,1933,
124111,1834,4878,16,0, 124534886,16,0,453,1,
12412325,1,1622,4879,16, 12454299,4887,16,0,517,
124130,761,1,2413,4880, 124551,85,4888,16,0,
1241416,0,690,1,2075, 12456541,1,1515,4889,16,
124154881,16,0,690,1, 124570,657,1,2198,4890,
124161731,4882,16,0,277, 1245816,0,705,1,89,
124171,97,4883,16,0, 124594891,16,0,253,1,
12418447,1,1297,4884,16, 124601834,4892,16,0,330,
124190,364,1,1189,4885, 124611,1622,4893,16,0,
1242016,0,243,1,102, 12462773,1,2413,4894,16,
124214886,16,0,265,1, 124630,705,1,2075,4895,
124221585,4887,16,0,773, 1246416,0,705,1,1731,
124231,322,4888,16,0, 124654896,16,0,274,1,
12424530,1,1958,4889,16, 1246697,4897,16,0,457,
124250,690,1,199,4890, 124671,1297,4898,16,0,
1242616,0,351,1,1371, 12468374,1,1189,4899,16,
124274891,16,0,432,1, 124690,240,1,102,4900,
12428217,4892,16,0,361, 1247016,0,262,1,1585,
124291,156,4893,19,4894, 124714901,16,0,783,1,
124304,36,67,0,111, 12472322,4902,16,0,543,
124310,110,0,115,0, 124731,1958,4903,16,0,
12432116,0,97,0,110, 12474705,1,199,4904,16,
124330,116,0,69,0, 124750,356,1,1371,4905,
12434120,0,112,0,114, 1247616,0,442,1,217,
124350,101,0,115,0, 124774906,16,0,368,1,
12436115,0,105,0,111, 12478157,4907,19,4908,4,
124370,110,0,1,156, 1247936,67,0,111,0,
124384825,1,157,4895,19, 12480110,0,115,0,116,
124394896,4,30,73,0, 124810,97,0,110,0,
12440100,0,101,0,110, 12482116,0,69,0,120,
124830,112,0,114,0,
12484101,0,115,0,115,
124850,105,0,111,0,
12486110,0,1,157,4839,
124871,158,4909,19,4910,
124884,30,73,0,100,
124890,101,0,110,0,
12490116,0,69,0,120,
124910,112,0,114,0,
12492101,0,115,0,115,
124930,105,0,111,0,
12494110,0,1,158,4839,
124951,159,4911,19,4912,
124964,36,73,0,100,
124970,101,0,110,0,
12498116,0,68,0,111,
124410,116,0,69,0, 124990,116,0,69,0,
12442120,0,112,0,114, 12500120,0,112,0,114,
124430,101,0,115,0, 125010,101,0,115,0,
12444115,0,105,0,111, 12502115,0,105,0,111,
124450,110,0,1,157, 125030,110,0,1,159,
124464825,1,158,4897,19, 125044839,1,160,4913,19,
124474898,4,36,73,0, 125054914,4,44,70,0,
12448100,0,101,0,110, 12506117,0,110,0,99,
124490,116,0,68,0, 125070,116,0,105,0,
12450111,0,116,0,69, 12508111,0,110,0,67,
125090,97,0,108,0,
12510108,0,69,0,120,
125110,112,0,114,0,
12512101,0,115,0,115,
125130,105,0,111,0,
12514110,0,1,160,4839,
125151,161,4915,19,4916,
125164,32,66,0,105,
125170,110,0,97,0,
12518114,0,121,0,69,
124510,120,0,112,0, 125190,120,0,112,0,
12452114,0,101,0,115, 12520114,0,101,0,115,
124530,115,0,105,0, 125210,115,0,105,0,
12454111,0,110,0,1, 12522111,0,110,0,1,
12455158,4825,1,159,4899, 12523161,4839,1,162,4917,
1245619,4900,4,44,70, 1252419,4918,4,30,85,
124570,117,0,110,0, 125250,110,0,97,0,
1245899,0,116,0,105, 12526114,0,121,0,69,
124590,111,0,110,0, 125270,120,0,112,0,
1246067,0,97,0,108, 12528114,0,101,0,115,
124610,108,0,69,0, 125290,115,0,105,0,
12462120,0,112,0,114, 12530111,0,110,0,1,
124630,101,0,115,0, 12531162,4839,1,163,4919,
12464115,0,105,0,111, 1253219,4920,4,36,84,
124650,110,0,1,159, 125330,121,0,112,0,
124664825,1,160,4901,19, 12534101,0,99,0,97,
124674902,4,32,66,0, 125350,115,0,116,0,
12468105,0,110,0,97,
124690,114,0,121,0,
1247069,0,120,0,112, 1253669,0,120,0,112,
124710,114,0,101,0, 125370,114,0,101,0,
12472115,0,115,0,105, 12538115,0,115,0,105,
124730,111,0,110,0, 125390,111,0,110,0,
124741,160,4825,1,161, 125401,163,4839,1,164,
124754903,19,4904,4,30, 125414921,19,4922,4,42,
1247685,0,110,0,97, 1254280,0,97,0,114,
124770,114,0,121,0, 125430,101,0,110,0,
1247869,0,120,0,112, 12544116,0,104,0,101,
125450,115,0,105,0,
12546115,0,69,0,120,
125470,112,0,114,0,
12548101,0,115,0,115,
125490,105,0,111,0,
12550110,0,1,164,4839,
125511,165,4923,19,4924,
125524,56,73,0,110,
125530,99,0,114,0,
12554101,0,109,0,101,
125550,110,0,116,0,
1255668,0,101,0,99,
124790,114,0,101,0, 125570,114,0,101,0,
12480115,0,115,0,105, 12558109,0,101,0,110,
124810,111,0,110,0, 125590,116,0,69,0,
124821,161,4825,1,162,
124834905,19,4906,4,36,
1248484,0,121,0,112,
124850,101,0,99,0,
1248697,0,115,0,116,
124870,69,0,120,0,
12488112,0,114,0,101,
124890,115,0,115,0,
12490105,0,111,0,110,
124910,1,162,4825,1,
12492163,4907,19,4908,4,
1249342,80,0,97,0,
12494114,0,101,0,110,
124950,116,0,104,0,
12496101,0,115,0,105,
124970,115,0,69,0,
12498120,0,112,0,114, 12560120,0,112,0,114,
124990,101,0,115,0, 125610,101,0,115,0,
12500115,0,105,0,111, 12562115,0,105,0,111,
125010,110,0,1,163, 125630,110,0,1,165,
125024825,1,164,4909,19, 125644839,1,167,4925,19,
125034910,4,56,73,0, 12565830,1,167,4269,1,
12504110,0,99,0,114, 12566168,4926,19,808,1,
125050,101,0,109,0, 12567168,4269,1,169,4927,
12506101,0,110,0,116, 1256819,3557,1,169,4272,
125070,68,0,101,0, 125691,170,4928,19,3547,
1250899,0,114,0,101, 125701,170,4272,1,171,
125090,109,0,101,0, 125714929,19,3552,1,171,
12510110,0,116,0,69, 125724272,1,172,4930,19,
125110,120,0,112,0, 125733542,1,172,4272,1,
12512114,0,101,0,115, 12574173,4931,19,3527,1,
125130,115,0,105,0, 12575173,4275,1,174,4932,
12514111,0,110,0,1, 1257619,3562,1,174,4275,
12515164,4825,1,166,4911, 125771,175,4933,19,3521,
1251619,822,1,166,4255, 125781,175,4279,1,176,
125171,167,4912,19,832, 125794934,19,3535,1,176,
125181,167,4255,1,168, 125804279,1,177,4935,19,
125194913,19,3549,1,168, 12581814,1,177,4283,1,
125204258,1,169,4914,19, 12582178,4936,19,825,1,
125213539,1,169,4258,1, 12583178,4283,1,179,4937,
12522170,4915,19,3544,1, 1258419,820,1,179,4287,
12523170,4258,1,171,4916, 125851,180,4938,19,835,
1252419,3534,1,171,4258, 125861,180,4287,1,181,
125251,172,4917,19,3520, 125874939,19,1777,1,181,
125261,172,4261,1,173, 125884293,1,182,4940,19,
125274918,19,3554,1,173, 125891881,1,182,4293,1,
125284261,1,174,4919,19, 12590183,4941,19,1844,1,
125293514,1,174,4265,1, 12591183,4293,1,184,4942,
12530175,4920,19,3528,1, 1259219,1765,1,184,4293,
12531175,4265,1,176,4921, 125931,185,4943,19,1839,
1253219,805,1,176,4269, 125941,185,4293,1,186,
125331,177,4922,19,816, 125954944,19,1802,1,186,
125341,177,4269,1,178, 125964293,1,187,4945,19,
125354923,19,811,1,178, 125971834,1,187,4293,1,
125364273,1,179,4924,19, 12598188,4946,19,1797,1,
12537827,1,179,4273,1, 12599188,4293,1,189,4947,
12538180,4925,19,1835,1, 1260019,1829,1,189,4293,
12539180,4279,1,181,4926, 126011,190,4948,19,1792,
1254019,1799,1,181,4279, 126021,190,4293,1,191,
125411,182,4927,19,1830, 126034949,19,1824,1,191,
125421,182,4279,1,183, 126044293,1,192,4950,19,
125434928,19,1794,1,183, 126051760,1,192,4293,1,
125444279,1,184,4929,19, 12606193,4951,19,1819,1,
125451825,1,184,4279,1, 12607193,4293,1,194,4952,
12546185,4930,19,1756,1, 1260819,1787,1,194,4293,
12547185,4279,1,186,4931, 126091,195,4953,19,1814,
1254819,1820,1,186,4279, 126101,195,4293,1,196,
125491,187,4932,19,1751, 126114954,19,1782,1,196,
125501,187,4279,1,188, 126124293,1,197,4955,19,
125514933,19,1815,1,188, 126131875,1,197,4297,1,
125524279,1,189,4934,19, 12614198,4956,19,1862,1,
125531783,1,189,4279,1, 12615198,4303,1,199,4957,
12554190,4935,19,1810,1, 1261619,1850,1,199,4309,
12555190,4279,1,191,4936, 126171,200,4958,19,1809,
1255619,1778,1,191,4279, 126181,200,4315,1,201,
125571,192,4937,19,1805, 126194959,19,1868,1,201,
125581,192,4279,1,193, 126204321,1,202,4960,19,
125594938,19,1773,1,193, 126211856,1,202,4327,1,
125604279,1,194,4939,19, 12622203,4961,19,1754,1,
125611878,1,194,4279,1, 12623203,4333,1,204,4962,
12562195,4940,19,1768,1, 1262419,1771,1,204,4339,
12563195,4279,1,196,4941, 126251,205,4963,19,1945,
1256419,1872,1,196,4283, 126261,205,4345,1,206,
125651,197,4942,19,1865, 126274964,19,1904,1,206,
125661,197,4289,1,198, 126284345,1,207,4965,19,
125674943,19,1841,1,198, 126292337,1,207,4350,1,
125684295,1,199,4944,19, 12630208,4966,19,2308,1,
125691859,1,199,4301,1, 12631208,4353,1,209,4967,
12570200,4945,19,1853,1, 1263219,2302,1,209,4356,
12571200,4307,1,201,4946, 126331,210,4968,19,2294,
1257219,1847,1,201,4313, 126341,210,4359,1,211,
125731,202,4947,19,1789, 126354969,19,2287,1,211,
125741,202,4319,1,203, 126364362,1,212,4970,19,
125754948,19,1762,1,203, 126372319,1,212,4365,1,
125764325,1,204,4949,19, 12638213,4971,19,1242,1,
125771941,1,204,4331,1, 12639213,4368,1,214,4972,
12578205,4950,19,1907,1, 1264019,1964,1,214,4387,
12579205,4331,1,206,4951, 126411,215,4973,19,1890,
1258019,2302,1,206,4336, 126421,215,4391,1,216,
125811,207,4952,19,2294, 126434974,19,1931,1,216,
125821,207,4339,1,208, 126444398,1,217,4975,19,
125834953,19,2327,1,208, 126451910,1,217,4403,1,
125844342,1,209,4954,19, 12646218,4976,19,1027,1,
125852285,1,209,4345,1, 12647218,4475,1,219,4977,
12586210,4955,19,2279,1, 1264819,1011,1,219,4475,
12587210,4348,1,211,4956, 126491,220,4978,19,1017,
1258819,2313,1,211,4351, 126501,220,4498,1,221,
125891,212,4957,19,1239, 126514979,19,1005,1,221,
125901,212,4354,1,213, 126524498,1,222,4980,19,
125914958,19,1960,1,213, 126531270,1,222,4514,1,
125924373,1,214,4959,19, 12654223,4981,19,907,1,
125931886,1,214,4377,1, 12655223,4501,1,224,4982,
12594215,4960,19,1899,1, 1265619,1022,1,224,4501,
12595215,4384,1,216,4961, 126571,225,4983,19,902,
1259619,1913,1,216,4389, 126581,225,4501,1,226,
125971,217,4962,19,1024, 126594984,19,927,1,226,
125981,217,4461,1,218, 126604501,1,227,4985,19,
125994963,19,1008,1,218, 12661896,1,227,4501,1,
126004461,1,219,4964,19, 12662228,4986,19,890,1,
126011014,1,219,4484,1, 12663228,4501,1,229,4987,
12602220,4965,19,1002,1, 1266419,885,1,229,4501,
12603220,4484,1,221,4966, 126651,230,4988,19,880,
1260419,1267,1,221,4500, 126661,230,4501,1,231,
126051,222,4967,19,904, 126674989,19,874,1,231,
126061,222,4487,1,223, 126684501,1,232,4990,19,
126074968,19,1019,1,223, 12669869,1,232,4501,1,
126084487,1,224,4969,19, 12670233,4991,19,864,1,
12609899,1,224,4487,1, 12671233,4501,1,234,4992,
12610225,4970,19,924,1, 1267219,859,1,234,4501,
12611225,4487,1,226,4971, 126731,235,4993,19,854,
1261219,893,1,226,4487, 126741,235,4501,1,236,
126131,227,4972,19,887, 126754994,19,1277,1,236,
126141,227,4487,1,228, 126764586,1,237,4995,19,
126154973,19,882,1,228, 126771417,1,237,4599,1,
126164487,1,229,4974,19, 12678238,4996,19,1264,1,
12617877,1,229,4487,1, 12679238,4612,1,239,4997,
12618230,4975,19,871,1, 1268019,1405,1,239,4612,
12619230,4487,1,231,4976, 126811,240,4998,19,1044,
1262019,866,1,231,4487, 126821,240,4625,1,241,
126211,232,4977,19,861, 126834999,19,847,1,241,
126221,232,4487,1,233, 126844625,1,242,5000,19,
126234978,19,856,1,233, 12685942,1,242,4625,1,
126244487,1,234,4979,19, 12686243,5001,19,971,1,
12625851,1,234,4487,1, 12687243,4625,1,244,5002,
12626235,4980,19,1274,1, 1268819,990,1,244,4638,
12627235,4572,1,236,4981, 126891,245,5003,19,1036,
1262819,1413,1,236,4585, 126901,245,4638,1,246,
126291,237,4982,19,1261, 126915004,19,950,1,246,
126301,237,4598,1,238, 126924651,1,247,5005,19,
126314983,19,1401,1,238, 12693964,1,247,4651,1,
126324598,1,239,4984,19, 12694248,5006,19,916,1,
126331041,1,239,4611,1, 12695248,4664,1,249,5007,
12634240,4985,19,844,1, 1269619,955,1,249,4664,
12635240,4611,1,241,4986, 126971,250,5008,19,1603,
1263619,939,1,241,4611, 126981,250,4677,1,251,
126371,242,4987,19,968, 126995009,19,1283,1,251,
126381,242,4611,1,243, 127004677,1,252,5010,19,
126394988,19,987,1,243, 127011635,1,252,4677,1,
126404624,1,244,4989,19, 12702253,5011,19,1667,1,
126411033,1,244,4624,1, 12703253,4677,1,254,5012,
12642245,4990,19,947,1, 1270419,1532,1,254,4527,
12643245,4637,1,246,4991, 127051,255,5013,19,1592,
1264419,961,1,246,4637, 127061,255,4527,1,256,
126451,247,4992,19,913, 127075014,19,1258,1,256,
126461,247,4650,1,248, 127084540,1,257,5015,19,
126474993,19,952,1,248, 127091699,1,257,4540,1,
126484650,1,249,4994,19, 12710258,5016,19,1630,1,
126491594,1,249,4663,1, 12711258,4540,1,259,5017,
12650250,4995,19,1280,1, 1271219,1576,1,259,4540,
12651250,4663,1,251,4996, 127131,260,5018,19,1500,
1265219,1626,1,251,4663, 127141,260,4540,1,261,
126531,252,4997,19,1658, 127155019,19,1427,1,261,
126541,252,4663,1,253, 127164540,1,262,5020,19,
126554998,19,1524,1,253, 127171437,1,262,4540,1,
126564513,1,254,4999,19, 12718263,5021,19,1253,1,
126571583,1,254,4513,1, 12719263,4540,1,264,5022,
12658255,5000,19,1255,1, 1272019,1683,1,264,4540,
12659255,4526,1,256,5001, 127211,265,5023,19,1625,
1266019,1690,1,256,4526, 127221,265,4540,1,266,
126611,257,5002,19,1621, 127235024,19,1566,1,266,
126621,257,4526,1,258, 127244540,1,267,5025,19,
126635003,19,1568,1,258, 127251489,1,267,4540,1,
126644526,1,259,5004,19, 12726268,5026,19,1453,1,
126651492,1,259,4526,1, 12727268,4540,1,269,5027,
12666260,5005,19,1423,1, 1272819,1236,1,269,4540,
12667260,4526,1,261,5006, 127291,270,5028,19,1586,
1266819,1433,1,261,4526, 127301,270,4540,1,271,
126691,262,5007,19,1250, 127315029,19,1613,1,271,
126701,262,4526,1,263, 127324540,1,272,5030,19,
126715008,19,1674,1,263, 127331559,1,272,4540,1,
126724526,1,264,5009,19, 12734273,5031,19,1581,1,
126731616,1,264,4526,1, 12735273,4540,1,274,5032,
12674265,5010,19,1558,1, 1273619,1393,1,274,4540,
12675265,4526,1,266,5011, 127371,275,5033,19,1297,
1267619,1481,1,266,4526, 127381,275,4540,1,276,
126771,267,5012,19,1443, 127395034,19,1225,1,276,
126781,267,4526,1,268, 127404540,1,277,5035,19,
126795013,19,1233,1,268, 127411657,1,277,4540,1,
126804526,1,269,5014,19, 12742278,5036,19,1608,1,
126811578,1,269,4526,1, 12743278,4540,1,279,5037,
12682270,5015,19,1604,1, 1274419,1554,1,279,4540,
12683270,4526,1,271,5016, 127451,280,5038,19,1422,
1268419,1551,1,271,4526, 127461,280,4573,1,281,
126851,272,5017,19,1573, 127475039,19,1400,1,281,
126861,272,4526,1,273, 127484573,1,282,5040,19,
126875018,19,1389,1,273, 127491688,1,282,4763,1,
126884526,1,274,5019,19, 12750283,5041,19,1711,1,
126891293,1,274,4526,1, 12751283,4763,1,284,5042,
12690275,5020,19,1222,1, 1275219,1678,1,284,4763,
12691275,4526,1,276,5021, 127531,285,5043,19,1673,
1269219,1648,1,276,4526, 127541,285,4763,1,286,
126931,277,5022,19,1599, 127555044,19,1694,1,286,
126941,277,4526,1,278, 127564763,1,287,5045,19,
126955023,19,1546,1,278, 127571641,1,287,4763,1,
126964526,1,279,5024,19, 12758288,5046,19,1347,1,
126971418,1,279,4559,1, 12759288,4763,1,289,5047,
12698280,5025,19,1396,1, 1276019,1521,1,289,4839,
12699280,4559,1,281,5026, 127611,290,5048,19,1308,
1270019,1679,1,281,4749, 127621,290,4839,1,291,
127011,282,5027,19,1708, 127635049,19,1315,1,291,
127021,282,4749,1,283, 127644839,1,292,5050,19,
127035028,19,1669,1,283, 127651336,1,292,4839,1,
127044749,1,284,5029,19, 12766293,5051,19,1331,1,
127051664,1,284,4749,1, 12767293,4839,1,294,5052,
12706285,5030,19,1685,1, 1276819,1326,1,294,4839,
12707285,4749,1,286,5031, 127691,295,5053,19,1321,
1270819,1632,1,286,4749, 127701,295,4839,1,296,
127091,287,5032,19,1343, 127715054,19,1510,1,296,
127101,287,4749,1,288, 127724839,1,297,5055,19,
127115033,19,1513,1,288, 127731538,1,297,4839,1,
127124825,1,289,5034,19, 12774298,5056,19,1515,1,
127131304,1,289,4825,1, 12775298,4839,1,299,5057,
12714290,5035,19,1311,1, 1277619,1505,1,299,4839,
12715290,4825,1,291,5036, 127771,300,5058,19,1495,
1271619,1332,1,291,4825, 127781,300,4839,1,301,
127171,292,5037,19,1327, 127795059,19,1478,1,301,
127181,292,4825,1,293, 127804839,1,302,5060,19,
127195038,19,1322,1,293, 127811432,1,302,4839,1,
127204825,1,294,5039,19, 12782303,5061,19,1341,1,
127211317,1,294,4825,1, 12783303,4839,1,304,5062,
12722295,5040,19,1502,1, 1278419,1302,1,304,4839,
12723295,4825,1,296,5041, 127851,305,5063,19,1248,
1272419,1530,1,296,4825, 127861,305,4839,1,306,
127251,297,5042,19,1507, 127875064,19,1706,1,306,
127261,297,4825,1,298, 127884839,1,307,5065,19,
127275043,19,1497,1,298, 127891662,1,307,4839,1,
127284825,1,299,5044,19, 12790308,5066,19,1652,1,
127291487,1,299,4825,1, 12791308,4839,1,309,5067,
12730300,5045,19,1470,1, 1279219,1647,1,309,4839,
12731300,4825,1,301,5046, 127931,310,5068,19,1598,
1273219,1428,1,301,4825, 127941,310,4839,1,311,
127331,302,5047,19,1337, 127955069,19,1571,1,311,
127341,302,4825,1,303, 127964839,1,312,5070,19,
127355048,19,1298,1,303, 127971548,1,312,4839,1,
127364825,1,304,5049,19, 12798313,5071,19,1543,1,
127371245,1,304,4825,1, 12799313,4839,1,314,5072,
12738305,5050,19,1703,1, 1280019,1484,1,314,4839,
12739305,4825,1,306,5051, 128011,315,5073,19,1460,
1274019,1653,1,306,4825, 128021,315,4839,1,316,
127411,307,5052,19,1643, 128035074,19,1526,1,316,
127421,307,4825,1,308, 128044839,1,317,5075,19,
127435053,19,1638,1,308, 128051619,1,317,4839,1,
127444825,1,309,5054,19, 12806318,5076,19,1473,1,
127451589,1,309,4825,1, 12807318,4839,1,319,5077,
12746310,5055,19,1563,1, 1280819,1467,1,319,4839,
12747310,4825,1,311,5056, 128091,320,5078,19,1448,
1274819,1540,1,311,4825, 128101,320,4839,1,321,
127491,312,5057,19,1535, 128115079,19,1411,1,321,
127501,312,4825,1,313, 128124839,1,322,5080,19,
127515058,19,1476,1,313, 128131388,1,322,4839,1,
127524825,1,314,5059,19, 12814323,5081,19,1231,1,
127531451,1,314,4825,1, 12815323,4839,1,324,5082,
12754315,5060,19,1518,1, 1281619,1721,1,324,4839,
12755315,4825,1,316,5061, 128171,325,5083,19,1353,
1275619,1610,1,316,4825, 128181,325,4839,1,326,
127571,317,5062,19,1465, 128195084,19,1358,1,326,
127581,317,4825,1,318, 128204839,1,327,5085,19,
127595063,19,1458,1,318, 128211378,1,327,4839,1,
127604825,1,319,5064,19, 12822328,5086,19,1368,1,
127611438,1,319,4825,1, 12823328,4839,1,329,5087,
12762320,5065,19,1407,1, 1282419,1373,1,329,4839,
12763320,4825,1,321,5066, 128251,330,5088,19,1363,
1276419,1384,1,321,4825, 128261,330,4839,1,331,
127651,322,5067,19,1228, 128275089,19,1716,1,331,
127661,322,4825,1,323, 128284839,1,332,5090,19,
127675068,19,1718,1,323, 128291383,1,332,4839,1,
127684825,1,324,5069,19, 12830333,5091,19,1443,1,
127691349,1,324,4825,1, 12831333,4682,1,334,5092,
12770325,5070,19,1354,1, 1283219,1958,1,334,4752,
12771325,4825,1,326,5071, 128331,335,5093,19,1951,
1277219,1374,1,326,4825, 128341,335,4752,1,336,
127731,327,5072,19,1364, 128355094,19,1921,1,336,
127741,327,4825,1,328, 128364756,1,337,5095,19,
127755073,19,1369,1,328, 128372278,1,337,4407,1,
127764825,1,329,5074,19, 12838338,5096,19,2273,1,
127771359,1,329,4825,1, 12839338,4407,1,339,5097,
12778330,5075,19,1713,1, 1284019,2268,1,339,4407,
12779330,4825,1,331,5076, 128411,340,5098,19,2263,
1278019,1379,1,331,4825, 128421,340,4407,1,341,
127811,332,5077,19,1698, 128435099,19,2258,1,341,
127821,332,4668,1,333, 128444407,1,342,5100,19,
127835078,19,1954,1,333, 128452253,1,342,4407,1,
127844738,1,334,5079,19, 12846343,5101,19,2248,1,
127851947,1,334,4738,1, 12847343,4407,1,344,5102,
12786335,5080,19,1924,1, 1284819,2237,1,344,4427,
12787335,4742,1,336,5081, 128491,345,5103,19,2232,
1278819,2270,1,336,4393, 128501,345,4427,1,346,
127891,337,5082,19,2265, 128515104,19,2227,1,346,
127901,337,4393,1,338, 128524427,1,347,5105,19,
127915083,19,2260,1,338, 128532222,1,347,4427,1,
127924393,1,339,5084,19, 12854348,5106,19,2217,1,
127932255,1,339,4393,1, 12855348,4427,1,349,5107,
12794340,5085,19,2250,1, 1285619,2212,1,349,4427,
12795340,4393,1,341,5086, 128571,350,5108,19,2207,
1279619,2245,1,341,4393, 128581,350,4427,1,351,
127971,342,5087,19,2240, 128595109,19,2202,1,351,
127981,342,4393,1,343, 128604427,1,352,5110,19,
127995088,19,2229,1,343, 128612197,1,352,4427,1,
128004413,1,344,5089,19, 12862353,5111,19,2191,1,
128012224,1,344,4413,1, 12863353,4433,1,354,5112,
12802345,5090,19,2219,1, 1286419,2019,1,354,4433,
12803345,4413,1,346,5091, 128651,355,5113,19,2185,
1280419,2214,1,346,4413, 128661,355,4433,1,356,
128051,347,5092,19,2209, 128675114,19,2180,1,356,
128061,347,4413,1,348, 128684433,1,357,5115,19,
128075093,19,2204,1,348, 128692175,1,357,4433,1,
128084413,1,349,5094,19, 12870358,5116,19,2012,1,
128092199,1,349,4413,1, 12871358,4433,1,359,5117,
12810350,5095,19,2194,1, 1287219,2170,1,359,4433,
12811350,4413,1,351,5096, 128731,360,5118,19,2165,
1281219,2188,1,351,4419, 128741,360,4433,1,361,
128131,352,5097,19,2014, 128755119,19,2160,1,361,
128141,352,4419,1,353, 128764439,1,362,5120,19,
128155098,19,2182,1,353, 128772155,1,362,4439,1,
128164419,1,354,5099,19, 12878363,5121,19,2149,1,
128172177,1,354,4419,1, 12879363,4445,1,364,5122,
12818355,5100,19,2172,1, 1288019,2144,1,364,4445,
12819355,4419,1,356,5101, 128811,365,5123,19,2004,
1282019,2007,1,356,4419, 128821,365,4445,1,366,
128211,357,5102,19,2167, 128835124,19,2138,1,366,
128221,357,4419,1,358, 128844445,1,367,5125,19,
128235103,19,2162,1,358, 128852133,1,367,4445,1,
128244419,1,359,5104,19, 12886368,5126,19,2128,1,
128252157,1,359,4425,1, 12887368,4445,1,369,5127,
12826360,5105,19,2152,1, 1288819,1997,1,369,4445,
12827360,4425,1,361,5106, 128891,370,5128,19,2122,
1282819,2146,1,361,4431, 128901,370,4445,1,371,
128291,362,5107,19,2141, 128915129,19,2049,1,371,
128301,362,4431,1,363, 128924445,1,372,5130,19,
128315108,19,1998,1,363, 128932117,1,372,4445,1,
128324431,1,364,5109,19, 12894373,5131,19,2112,1,
128332135,1,364,4431,1, 12895373,4451,1,374,5132,
12834365,5110,19,2130,1, 1289619,2107,1,374,4451,
12835365,4431,1,366,5111, 128971,375,5133,19,2102,
1283619,2125,1,366,4431, 128981,375,4451,1,376,
128371,367,5112,19,1992, 128995134,19,2096,1,376,
128381,367,4431,1,368, 129004457,1,377,5135,19,
128395113,19,2119,1,368, 129012090,1,377,4463,1,
128404431,1,369,5114,19, 12902378,5136,19,2084,1,
128412047,1,369,4431,1, 12903378,4469,1,379,5137,
12842370,5115,19,2114,1, 1290419,5138,4,50,65,
12843370,4431,1,371,5116, 129050,114,0,103,0,
1284419,2109,1,371,4437, 12906117,0,109,0,101,
128451,372,5117,19,2104, 129070,110,0,116,0,
128461,372,4437,1,373, 1290868,0,101,0,99,
128475118,19,2099,1,373, 129090,108,0,97,0,
128484437,1,374,5119,19, 12910114,0,97,0,116,
128492093,1,374,4443,1, 129110,105,0,111,0,
12850375,5120,19,2087,1, 12912110,0,76,0,105,
12851375,4449,1,376,5121, 129130,115,0,116,0,
1285219,2081,1,376,4455, 1291495,0,51,0,1,
128531,377,5122,19,5123, 12915379,4345,1,380,5139,
128544,50,65,0,114, 1291619,5140,4,28,65,
128550,103,0,117,0, 129170,114,0,103,0,
12856109,0,101,0,110, 12918117,0,109,0,101,
128570,116,0,68,0, 129190,110,0,116,0,
12858101,0,99,0,108,
128590,97,0,114,0,
1286097,0,116,0,105,
128610,111,0,110,0,
1286276,0,105,0,115, 1292076,0,105,0,115,
128630,116,0,95,0, 129210,116,0,95,0,
1286451,0,1,377,4331, 1292251,0,1,380,4752,
128651,378,5124,19,5125, 129231,381,5141,19,5142,
128664,28,65,0,114, 129244,28,65,0,114,
128670,103,0,117,0, 129250,103,0,117,0,
12868109,0,101,0,110, 12926109,0,101,0,110,
128690,116,0,76,0, 129270,116,0,76,0,
12870105,0,115,0,116, 12928105,0,115,0,116,
128710,95,0,51,0, 129290,95,0,52,0,
128721,378,4738,1,379, 129301,381,4752,1,382,
128735126,19,5127,4,50, 129315143,19,5144,4,50,
1287465,0,114,0,103, 1293265,0,114,0,103,
128750,117,0,109,0, 129330,117,0,109,0,
12876101,0,110,0,116, 12934101,0,110,0,116,
@@ -12881,27 +12939,19 @@ public yyLSLSyntax
128810,110,0,76,0, 129390,110,0,76,0,
12882105,0,115,0,116, 12940105,0,115,0,116,
128830,95,0,52,0, 129410,95,0,52,0,
128841,379,4331,1,380, 129421,382,4345,1,383,
128855128,19,5129,4,28, 129435145,19,5146,4,50,
1288665,0,114,0,103, 1294465,0,114,0,103,
128870,117,0,109,0, 129450,117,0,109,0,
12888101,0,110,0,116, 12946101,0,110,0,116,
128890,76,0,105,0, 129470,68,0,101,0,
12890115,0,116,0,95, 1294899,0,108,0,97,
128910,52,0,1,380, 129490,114,0,97,0,
128924738,1,381,5130,19, 12950116,0,105,0,111,
128935131,4,50,65,0, 129510,110,0,76,0,
12894114,0,103,0,117, 12952105,0,115,0,116,
128950,109,0,101,0, 129530,95,0,53,0,
12896110,0,116,0,68, 129541,383,4345,2,0,0};
128970,101,0,99,0,
12898108,0,97,0,114,
128990,97,0,116,0,
12900105,0,111,0,110,
129010,76,0,105,0,
12902115,0,116,0,95,
129030,53,0,1,381,
129044331,2,0,0};
12905new Sfactory(this,"ExpressionArgument_1",new SCreator(ExpressionArgument_1_factory)); 12955new Sfactory(this,"ExpressionArgument_1",new SCreator(ExpressionArgument_1_factory));
12906new Sfactory(this,"VectorArgStateEvent",new SCreator(VectorArgStateEvent_factory)); 12956new Sfactory(this,"VectorArgStateEvent",new SCreator(VectorArgStateEvent_factory));
12907new Sfactory(this,"IntVecVecArgStateEvent",new SCreator(IntVecVecArgStateEvent_factory)); 12957new Sfactory(this,"IntVecVecArgStateEvent",new SCreator(IntVecVecArgStateEvent_factory));
@@ -12998,7 +13048,7 @@ new Sfactory(this,"SimpleAssignment_22",new SCreator(SimpleAssignment_22_factory
12998new Sfactory(this,"KeyIntIntArgStateEvent",new SCreator(KeyIntIntArgStateEvent_factory)); 13048new Sfactory(this,"KeyIntIntArgStateEvent",new SCreator(KeyIntIntArgStateEvent_factory));
12999new Sfactory(this,"TypecastExpression_9",new SCreator(TypecastExpression_9_factory)); 13049new Sfactory(this,"TypecastExpression_9",new SCreator(TypecastExpression_9_factory));
13000new Sfactory(this,"VoidArgEvent_2",new SCreator(VoidArgEvent_2_factory)); 13050new Sfactory(this,"VoidArgEvent_2",new SCreator(VoidArgEvent_2_factory));
13001new Sfactory(this,"VoidArgEvent_3",new SCreator(VoidArgEvent_3_factory)); 13051new Sfactory(this,"Event_9",new SCreator(Event_9_factory));
13002new Sfactory(this,"ArgumentDeclarationList_1",new SCreator(ArgumentDeclarationList_1_factory)); 13052new Sfactory(this,"ArgumentDeclarationList_1",new SCreator(ArgumentDeclarationList_1_factory));
13003new Sfactory(this,"ArgumentDeclarationList_2",new SCreator(ArgumentDeclarationList_2_factory)); 13053new Sfactory(this,"ArgumentDeclarationList_2",new SCreator(ArgumentDeclarationList_2_factory));
13004new Sfactory(this,"GlobalDefinitions_1",new SCreator(GlobalDefinitions_1_factory)); 13054new Sfactory(this,"GlobalDefinitions_1",new SCreator(GlobalDefinitions_1_factory));
@@ -13142,6 +13192,7 @@ new Sfactory(this,"BinaryExpression_13",new SCreator(BinaryExpression_13_factory
13142new Sfactory(this,"GlobalFunctionDefinition_2",new SCreator(GlobalFunctionDefinition_2_factory)); 13192new Sfactory(this,"GlobalFunctionDefinition_2",new SCreator(GlobalFunctionDefinition_2_factory));
13143new Sfactory(this,"StateChange_2",new SCreator(StateChange_2_factory)); 13193new Sfactory(this,"StateChange_2",new SCreator(StateChange_2_factory));
13144new Sfactory(this,"VoidArgEvent_1",new SCreator(VoidArgEvent_1_factory)); 13194new Sfactory(this,"VoidArgEvent_1",new SCreator(VoidArgEvent_1_factory));
13195new Sfactory(this,"VoidArgEvent_3",new SCreator(VoidArgEvent_3_factory));
13145new Sfactory(this,"BinaryExpression_10",new SCreator(BinaryExpression_10_factory)); 13196new Sfactory(this,"BinaryExpression_10",new SCreator(BinaryExpression_10_factory));
13146new Sfactory(this,"VoidArgEvent_5",new SCreator(VoidArgEvent_5_factory)); 13197new Sfactory(this,"VoidArgEvent_5",new SCreator(VoidArgEvent_5_factory));
13147new Sfactory(this,"VoidArgEvent_6",new SCreator(VoidArgEvent_6_factory)); 13198new Sfactory(this,"VoidArgEvent_6",new SCreator(VoidArgEvent_6_factory));
@@ -13285,7 +13336,7 @@ public static object SimpleAssignment_22_factory(Parser yyp) { return new Simple
13285public static object KeyIntIntArgStateEvent_factory(Parser yyp) { return new KeyIntIntArgStateEvent(yyp); } 13336public static object KeyIntIntArgStateEvent_factory(Parser yyp) { return new KeyIntIntArgStateEvent(yyp); }
13286public static object TypecastExpression_9_factory(Parser yyp) { return new TypecastExpression_9(yyp); } 13337public static object TypecastExpression_9_factory(Parser yyp) { return new TypecastExpression_9(yyp); }
13287public static object VoidArgEvent_2_factory(Parser yyp) { return new VoidArgEvent_2(yyp); } 13338public static object VoidArgEvent_2_factory(Parser yyp) { return new VoidArgEvent_2(yyp); }
13288public static object VoidArgEvent_3_factory(Parser yyp) { return new VoidArgEvent_3(yyp); } 13339public static object Event_9_factory(Parser yyp) { return new Event_9(yyp); }
13289public static object ArgumentDeclarationList_1_factory(Parser yyp) { return new ArgumentDeclarationList_1(yyp); } 13340public static object ArgumentDeclarationList_1_factory(Parser yyp) { return new ArgumentDeclarationList_1(yyp); }
13290public static object ArgumentDeclarationList_2_factory(Parser yyp) { return new ArgumentDeclarationList_2(yyp); } 13341public static object ArgumentDeclarationList_2_factory(Parser yyp) { return new ArgumentDeclarationList_2(yyp); }
13291public static object GlobalDefinitions_1_factory(Parser yyp) { return new GlobalDefinitions_1(yyp); } 13342public static object GlobalDefinitions_1_factory(Parser yyp) { return new GlobalDefinitions_1(yyp); }
@@ -13429,6 +13480,7 @@ public static object BinaryExpression_13_factory(Parser yyp) { return new Binary
13429public static object GlobalFunctionDefinition_2_factory(Parser yyp) { return new GlobalFunctionDefinition_2(yyp); } 13480public static object GlobalFunctionDefinition_2_factory(Parser yyp) { return new GlobalFunctionDefinition_2(yyp); }
13430public static object StateChange_2_factory(Parser yyp) { return new StateChange_2(yyp); } 13481public static object StateChange_2_factory(Parser yyp) { return new StateChange_2(yyp); }
13431public static object VoidArgEvent_1_factory(Parser yyp) { return new VoidArgEvent_1(yyp); } 13482public static object VoidArgEvent_1_factory(Parser yyp) { return new VoidArgEvent_1(yyp); }
13483public static object VoidArgEvent_3_factory(Parser yyp) { return new VoidArgEvent_3(yyp); }
13432public static object BinaryExpression_10_factory(Parser yyp) { return new BinaryExpression_10(yyp); } 13484public static object BinaryExpression_10_factory(Parser yyp) { return new BinaryExpression_10(yyp); }
13433public static object VoidArgEvent_5_factory(Parser yyp) { return new VoidArgEvent_5(yyp); } 13485public static object VoidArgEvent_5_factory(Parser yyp) { return new VoidArgEvent_5(yyp); }
13434public static object VoidArgEvent_6_factory(Parser yyp) { return new VoidArgEvent_6(yyp); } 13486public static object VoidArgEvent_6_factory(Parser yyp) { return new VoidArgEvent_6(yyp); }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs
index 815d11b..3eaaed0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.8.0.*")] 32[assembly: AssemblyVersion("0.8.2.*")]
33 33
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 275b608..49df5e7 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -52,6 +52,7 @@ using OpenSim.Region.ScriptEngine.Shared.Api.Runtime;
52using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 52using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
53using OpenSim.Region.ScriptEngine.Shared.CodeTools; 53using OpenSim.Region.ScriptEngine.Shared.CodeTools;
54using OpenSim.Region.ScriptEngine.Interfaces; 54using OpenSim.Region.ScriptEngine.Interfaces;
55using System.Diagnostics;
55 56
56namespace OpenSim.Region.ScriptEngine.Shared.Instance 57namespace OpenSim.Region.ScriptEngine.Shared.Instance
57{ 58{
@@ -59,6 +60,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
59 { 60 {
60 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 61 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
61 62
63 public bool StatePersistedHere { get { return m_AttachedAvatar == UUID.Zero; } }
64
62 /// <summary> 65 /// <summary>
63 /// The current work item if an event for this script is running or waiting to run, 66 /// The current work item if an event for this script is running or waiting to run,
64 /// </summary> 67 /// </summary>
@@ -72,14 +75,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
72 private bool m_TimerQueued; 75 private bool m_TimerQueued;
73 private DateTime m_EventStart; 76 private DateTime m_EventStart;
74 private bool m_InEvent; 77 private bool m_InEvent;
75 private string m_Assembly; 78 private string m_assemblyPath;
79 private string m_dataPath;
76 private string m_CurrentEvent = String.Empty; 80 private string m_CurrentEvent = String.Empty;
77 private bool m_InSelfDelete; 81 private bool m_InSelfDelete;
78 private int m_MaxScriptQueue; 82 private int m_MaxScriptQueue;
79 private bool m_SaveState = true; 83 private bool m_SaveState;
80 private int m_ControlEventsInQueue; 84 private int m_ControlEventsInQueue;
81 private int m_LastControlLevel; 85 private int m_LastControlLevel;
82 private bool m_CollisionInQueue; 86 private bool m_CollisionInQueue;
87 private bool m_StateChangeInProgress;
83 88
84 // The following is for setting a minimum delay between events 89 // The following is for setting a minimum delay between events
85 private double m_minEventDelay; 90 private double m_minEventDelay;
@@ -96,6 +101,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
96 101
97 public int DebugLevel { get; set; } 102 public int DebugLevel { get; set; }
98 103
104 public WaitHandle CoopWaitHandle { get; private set; }
105 public Stopwatch ExecutionTimer { get; private set; }
106
99 public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> LineMap { get; set; } 107 public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> LineMap { get; set; }
100 108
101 private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); 109 private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>();
@@ -122,7 +130,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
122 } 130 }
123 } 131 }
124 132
125 public bool Running { get; set; } 133 public bool Running
134 {
135 get { return m_running; }
136
137 set
138 {
139 m_running = value;
140 if (m_running)
141 StayStopped = false;
142 }
143 }
144 private bool m_running;
126 145
127 public bool Suspended 146 public bool Suspended
128 { 147 {
@@ -154,6 +173,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
154 173
155 public string State { get; set; } 174 public string State { get; set; }
156 175
176 public bool StayStopped { get; set; }
177
157 public IScriptEngine Engine { get; private set; } 178 public IScriptEngine Engine { get; private set; }
158 179
159 public UUID AppDomain { get; set; } 180 public UUID AppDomain { get; set; }
@@ -195,11 +216,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
195 216
196 public DateTime TimeStarted { get; private set; } 217 public DateTime TimeStarted { get; private set; }
197 218
198 public long MeasurementPeriodTickStart { get; private set; } 219 public MetricsCollectorTime ExecutionTime { get; private set; }
199
200 public long MeasurementPeriodExecutionTime { get; private set; }
201 220
202 public static readonly long MaxMeasurementPeriod = 30 * TimeSpan.TicksPerMinute; 221 private static readonly int MeasurementWindow = 30 * 1000; // show the *recent* time used by the script, to find currently active scripts
203 222
204 private bool m_coopTermination; 223 private bool m_coopTermination;
205 224
@@ -208,6 +227,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
208 public void ClearQueue() 227 public void ClearQueue()
209 { 228 {
210 m_TimerQueued = false; 229 m_TimerQueued = false;
230 m_StateChangeInProgress = false;
211 EventQueue.Clear(); 231 EventQueue.Clear();
212 } 232 }
213 233
@@ -218,6 +238,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
218 { 238 {
219 State = "default"; 239 State = "default";
220 EventQueue = new Queue(32); 240 EventQueue = new Queue(32);
241 ExecutionTimer = new Stopwatch();
221 242
222 Engine = engine; 243 Engine = engine;
223 Part = part; 244 Part = part;
@@ -240,11 +261,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
240 m_AttachedAvatar = part.ParentGroup.AttachedAvatar; 261 m_AttachedAvatar = part.ParentGroup.AttachedAvatar;
241 m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; 262 m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID;
242 263
243 if (Engine.Config.GetString("ScriptStopStrategy", "abort") == "co-op") 264 m_SaveState = StatePersistedHere;
244 { 265
245 m_coopTermination = true; 266 ExecutionTime = new MetricsCollectorTime(MeasurementWindow, 10);
246 m_coopSleepHandle = new XEngineEventWaitHandle(false, EventResetMode.AutoReset); 267
247 } 268// m_log.DebugFormat(
269// "[SCRIPT INSTANCE]: Instantiated script instance {0} (id {1}) in part {2} (id {3}) in object {4} attached avatar {5} in {6}",
270// ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, m_AttachedAvatar, Engine.World.Name);
248 } 271 }
249 272
250 /// <summary> 273 /// <summary>
@@ -252,86 +275,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
252 /// </summary> 275 /// </summary>
253 /// <param name='dom'></param> 276 /// <param name='dom'></param>
254 /// <param name='assembly'></param> 277 /// <param name='assembly'></param>
278 /// <param name='dataPath'>
279 /// Path for all script associated data (state, etc.). In a multi-region set up
280 /// with all scripts loading into the same AppDomain this may not be the same place as the DLL itself.
281 /// </param>
255 /// <param name='stateSource'></param> 282 /// <param name='stateSource'></param>
256 /// <returns>false if load failed, true if suceeded</returns> 283 /// <returns>false if load failed, true if suceeded</returns>
257 public bool Load(AppDomain dom, string assembly, StateSource stateSource) 284 public bool Load(
285 IScript script, EventWaitHandle coopSleepHandle, string assemblyPath,
286 string dataPath, StateSource stateSource, bool coopTermination)
258 { 287 {
259 m_Assembly = assembly; 288 m_Script = script;
289 m_coopSleepHandle = coopSleepHandle;
290 m_assemblyPath = assemblyPath;
291 m_dataPath = dataPath;
260 m_stateSource = stateSource; 292 m_stateSource = stateSource;
293 m_coopTermination = coopTermination;
294
295 if (m_coopTermination)
296 CoopWaitHandle = coopSleepHandle;
297 else
298 CoopWaitHandle = null;
261 299
262 ApiManager am = new ApiManager(); 300 ApiManager am = new ApiManager();
263 301
264 foreach (string api in am.GetApis()) 302 foreach (string api in am.GetApis())
265 { 303 {
266 m_Apis[api] = am.CreateApi(api); 304 m_Apis[api] = am.CreateApi(api);
267 m_Apis[api].Initialize(Engine, Part, ScriptTask, m_coopSleepHandle); 305 m_Apis[api].Initialize(Engine, Part, ScriptTask);
268 }
269
270 try
271 {
272 object[] constructorParams;
273
274 Assembly scriptAssembly = dom.Load(Path.GetFileNameWithoutExtension(assembly));
275 Type scriptType = scriptAssembly.GetType("SecondLife.XEngineScript");
276
277 if (scriptType != null)
278 {
279 constructorParams = new object[] { m_coopSleepHandle };
280 }
281 else if (!m_coopTermination)
282 {
283 scriptType = scriptAssembly.GetType("SecondLife.Script");
284 constructorParams = null;
285 }
286 else
287 {
288 m_log.ErrorFormat(
289 "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. You must remove all existing {6}* script DLL files before using enabling co-op termination"
290 + ", either by setting DeleteScriptsOnStartup = true in [XEngine] for one run"
291 + " or by deleting these files manually.",
292 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, assembly);
293
294 return false;
295 }
296
297// m_log.DebugFormat(
298// "[SCRIPT INSTANCE]: Looking to load {0} from assembly {1} in {2}",
299// scriptType.FullName, Path.GetFileNameWithoutExtension(assembly), Engine.World.Name);
300
301 if (dom != System.AppDomain.CurrentDomain)
302 m_Script
303 = (IScript)dom.CreateInstanceAndUnwrap(
304 Path.GetFileNameWithoutExtension(assembly),
305 scriptType.FullName,
306 false,
307 BindingFlags.Default,
308 null,
309 constructorParams,
310 null,
311 null,
312 null);
313 else
314 m_Script
315 = (IScript)scriptAssembly.CreateInstance(
316 scriptType.FullName,
317 false,
318 BindingFlags.Default,
319 null,
320 constructorParams,
321 null,
322 null);
323
324 //ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
325 //RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
326// lease.Register(this);
327 }
328 catch (Exception e)
329 {
330 m_log.ErrorFormat(
331 "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. Error loading assembly {6}. Exception {7}{8}",
332 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, assembly, e.Message, e.StackTrace);
333
334 return false;
335 } 306 }
336 307
337 try 308 try
@@ -341,10 +312,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
341 m_Script.InitApi(kv.Key, kv.Value); 312 m_Script.InitApi(kv.Key, kv.Value);
342 } 313 }
343 314
344// // m_log.Debug("[Script] Script instance created"); 315 // // m_log.Debug("[Script] Script instance created");
345 316
346 Part.SetScriptEvents(ItemID, 317 Part.SetScriptEvents(ItemID, (int)m_Script.GetStateEventFlags(State));
347 (int)m_Script.GetStateEventFlags(State));
348 } 318 }
349 catch (Exception e) 319 catch (Exception e)
350 { 320 {
@@ -355,12 +325,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
355 return false; 325 return false;
356 } 326 }
357 327
358 m_SaveState = true; 328 // For attachments, XEngine saves the state into a .state file when XEngine.SetXMLState() is called.
329 string savedState = Path.Combine(m_dataPath, ItemID.ToString() + ".state");
359 330
360 string savedState = Path.Combine(Path.GetDirectoryName(assembly),
361 ItemID.ToString() + ".state");
362 if (File.Exists(savedState)) 331 if (File.Exists(savedState))
363 { 332 {
333 // m_log.DebugFormat(
334 // "[SCRIPT INSTANCE]: Found state for script {0} for {1} ({2}) at {3} in {4}",
335 // ItemID, savedState, Part.Name, Part.ParentGroup.Name, Part.ParentGroup.Scene.Name);
336
364 string xml = String.Empty; 337 string xml = String.Empty;
365 338
366 try 339 try
@@ -380,13 +353,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
380 ScriptSerializer.Deserialize(xml, this); 353 ScriptSerializer.Deserialize(xml, this);
381 354
382 AsyncCommandManager.CreateFromData(Engine, 355 AsyncCommandManager.CreateFromData(Engine,
383 LocalID, ItemID, ObjectID, 356 LocalID, ItemID, ObjectID,
384 PluginData); 357 PluginData);
385 358
386// m_log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", PrimName, m_ScriptName); 359 // m_log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", PrimName, m_ScriptName);
387 360
388 Part.SetScriptEvents(ItemID, 361 Part.SetScriptEvents(ItemID,
389 (int)m_Script.GetStateEventFlags(State)); 362 (int)m_Script.GetStateEventFlags(State));
390 363
391 if (!Running) 364 if (!Running)
392 m_startOnInit = false; 365 m_startOnInit = false;
@@ -401,29 +374,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
401 m_SaveState = false; 374 m_SaveState = false;
402 m_startedFromSavedState = true; 375 m_startedFromSavedState = true;
403 } 376 }
377
378 // If this script is in an attachment then we no longer need the state file.
379 if (!StatePersistedHere)
380 RemoveState();
404 } 381 }
405 else 382 // else
406 { 383 // {
407 m_log.WarnFormat( 384 // m_log.WarnFormat(
408 "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. Unable to load script state file {6}. Memory limit exceeded.", 385 // "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. Unable to load script state file {6}. Memory limit exceeded.",
409 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, savedState); 386 // ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, savedState);
410 } 387 // }
411 } 388 }
412 catch (Exception e) 389 catch (Exception e)
413 { 390 {
414 m_log.ErrorFormat( 391 m_log.ErrorFormat(
415 "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. Unable to load script state file {6}. XML is {7}. Exception {8}{9}", 392 "[SCRIPT INSTANCE]: Not starting script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}. Unable to load script state file {6}. XML is {7}. Exception {8}{9}",
416 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, savedState, xml, e.Message, e.StackTrace); 393 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name, savedState, xml, e.Message, e.StackTrace);
417 } 394 }
418 } 395 }
419// else 396 // else
420// { 397 // {
421// ScenePresence presence = Engine.World.GetScenePresence(part.OwnerID); 398 // m_log.DebugFormat(
422 399 // "[SCRIPT INSTANCE]: Did not find state for script {0} for {1} ({2}) at {3} in {4}",
423// if (presence != null && (!postOnRez)) 400 // ItemID, savedState, Part.Name, Part.ParentGroup.Name, Part.ParentGroup.Scene.Name);
424// presence.ControllingClient.SendAgentAlertMessage("Compile successful", false); 401 // }
425
426// }
427 402
428 return true; 403 return true;
429 } 404 }
@@ -522,8 +497,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
522 497
523 public void RemoveState() 498 public void RemoveState()
524 { 499 {
525 string savedState = Path.Combine(Path.GetDirectoryName(m_Assembly), 500 string savedState = Path.Combine(m_dataPath, ItemID.ToString() + ".state");
526 ItemID.ToString() + ".state"); 501
502// m_log.DebugFormat(
503// "[SCRIPT INSTANCE]: Deleting state {0} for script {1} (id {2}) in part {3} (id {4}) in object {5} in {6}.",
504// savedState, ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name);
527 505
528 try 506 try
529 { 507 {
@@ -558,8 +536,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
558 Running = true; 536 Running = true;
559 537
560 TimeStarted = DateTime.Now; 538 TimeStarted = DateTime.Now;
561 MeasurementPeriodTickStart = Util.EnvironmentTickCount(); 539
562 MeasurementPeriodExecutionTime = 0; 540 // Note: we don't reset ExecutionTime. The reason is that runaway scripts are stopped and restarted
541 // automatically, and we *do* want to show that they had high CPU in that case. If we had reset
542 // ExecutionTime here then runaway scripts, paradoxically, would never show up in the "Top Scripts" dialog.
563 543
564 if (EventQueue.Count > 0) 544 if (EventQueue.Count > 0)
565 { 545 {
@@ -571,7 +551,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
571 } 551 }
572 } 552 }
573 553
574 public bool Stop(int timeout) 554 public bool Stop(int timeout, bool clearEventQueue = false)
575 { 555 {
576 if (DebugLevel >= 1) 556 if (DebugLevel >= 1)
577 m_log.DebugFormat( 557 m_log.DebugFormat(
@@ -582,6 +562,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
582 562
583 lock (EventQueue) 563 lock (EventQueue)
584 { 564 {
565 if (clearEventQueue)
566 ClearQueue();
567
585 if (!Running) 568 if (!Running)
586 return true; 569 return true;
587 570
@@ -671,6 +654,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
671 if (state == State) 654 if (state == State)
672 return; 655 return;
673 656
657<<<<<<< HEAD
658 EventParams lastTimerEv = null;
659
660 lock (EventQueue)
661 {
662 // Remove all queued events, remembering the last timer event
663 while (EventQueue.Count > 0)
664 {
665 EventParams tempv = (EventParams)EventQueue.Dequeue();
666 if (tempv.EventName == "timer") lastTimerEv = tempv;
667 }
668
669 // Post events
670 PostEvent(new EventParams("state_exit", new Object[0],
671 new DetectParams[0]));
672 PostEvent(new EventParams("state", new Object[] { state },
673 new DetectParams[0]));
674 PostEvent(new EventParams("state_entry", new Object[0],
675 new DetectParams[0]));
676
677 // Requeue the timer event after the state changing events
678 if (lastTimerEv != null) EventQueue.Enqueue(lastTimerEv);
679
680 // This will stop events from being queued and processed
681 // until the new state is started
682 m_StateChangeInProgress = true;
683 }
684
685=======
674 PostEvent(new EventParams("state_exit", new Object[0], 686 PostEvent(new EventParams("state_exit", new Object[0],
675 new DetectParams[0])); 687 new DetectParams[0]));
676 PostEvent(new EventParams("state", new Object[] { state }, 688 PostEvent(new EventParams("state", new Object[] { state },
@@ -678,6 +690,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
678 PostEvent(new EventParams("state_entry", new Object[0], 690 PostEvent(new EventParams("state_entry", new Object[0],
679 new DetectParams[0])); 691 new DetectParams[0]));
680 692
693>>>>>>> avn/ubitvar
681 throw new EventAbortException(); 694 throw new EventAbortException();
682 } 695 }
683 696
@@ -708,6 +721,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
708 721
709 lock (EventQueue) 722 lock (EventQueue)
710 { 723 {
724 // The only events that persist across state changes are timers
725 if (m_StateChangeInProgress && data.EventName != "timer")
726 return;
727
711 if (EventQueue.Count >= m_MaxScriptQueue) 728 if (EventQueue.Count >= m_MaxScriptQueue)
712 return; 729 return;
713 730
@@ -774,12 +791,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
774 791
775// m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName); 792// m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName);
776 793
794<<<<<<< HEAD
795 if (Suspended)
796 return 0;
797
798 ExecutionTimer.Restart();
799
800 try
801 {
802 return EventProcessorInt();
803 }
804 finally
805 {
806 ExecutionTimer.Stop();
807 ExecutionTime.AddSample(ExecutionTimer);
808 Part.ParentGroup.Scene.AddScriptExecutionTime(ExecutionTimer.ElapsedTicks);
809 }
810 }
811 }
812
813 private object EventProcessorInt()
814 {
815 EventParams data = null;
816
817 lock (EventQueue)
818 {
819 data = (EventParams)EventQueue.Dequeue();
820=======
777 if (Suspended) 821 if (Suspended)
778 return 0; 822 return 0;
779 823
780 lock (EventQueue) 824 lock (EventQueue)
781 { 825 {
782 data = (EventParams) EventQueue.Dequeue(); 826 data = (EventParams) EventQueue.Dequeue();
827>>>>>>> avn/ubitvar
783 if (data == null) // Shouldn't happen 828 if (data == null) // Shouldn't happen
784 { 829 {
785 if (EventQueue.Count > 0 && Running && !ShuttingDown) 830 if (EventQueue.Count > 0 && Running && !ShuttingDown)
@@ -804,6 +849,37 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
804 m_CollisionInQueue = false; 849 m_CollisionInQueue = false;
805 } 850 }
806 851
852<<<<<<< HEAD
853 if (DebugLevel >= 2)
854 m_log.DebugFormat(
855 "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}",
856 data.EventName,
857 ScriptName,
858 Part.Name,
859 Part.LocalId,
860 Part.ParentGroup.Name,
861 Part.ParentGroup.UUID,
862 Part.AbsolutePosition,
863 Part.ParentGroup.Scene.Name);
864
865 m_DetectParams = data.DetectParams;
866
867 if (data.EventName == "state") // Hardcoded state change
868 {
869 State = data.Params[0].ToString();
870
871 if (DebugLevel >= 1)
872 m_log.DebugFormat(
873 "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}",
874 State,
875 ScriptName,
876 Part.Name,
877 Part.LocalId,
878 Part.ParentGroup.Name,
879 Part.ParentGroup.UUID,
880 Part.AbsolutePosition,
881 Part.ParentGroup.Scene.Name);
882=======
807 lock(m_Script) 883 lock(m_Script)
808 { 884 {
809 885
@@ -821,13 +897,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
821 part.ParentGroup.UUID, 897 part.ParentGroup.UUID,
822 part.AbsolutePosition, 898 part.AbsolutePosition,
823 part.ParentGroup.Scene.Name); 899 part.ParentGroup.Scene.Name);
900>>>>>>> avn/ubitvar
824 901
825 m_DetectParams = data.DetectParams; 902 AsyncCommandManager.StateChange(Engine,
903 LocalID, ItemID);
904 // we are effectively in the new state now, so we can resume queueing
905 // and processing other non-timer events
906 m_StateChangeInProgress = false;
826 907
827 if (data.EventName == "state") // Hardcoded state change 908 Part.SetScriptEvents(ItemID, (int)m_Script.GetStateEventFlags(State));
909 }
910 else
911 {
912 if (Engine.World.PipeEventsForScript(LocalID) ||
913 data.EventName == "control") // Don't freeze avies!
828 { 914 {
829 State = data.Params[0].ToString(); 915 // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}",
916 // PrimName, ScriptName, data.EventName, State);
830 917
918<<<<<<< HEAD
919 try
920=======
831 if (DebugLevel >= 1) 921 if (DebugLevel >= 1)
832 m_log.DebugFormat( 922 m_log.DebugFormat(
833 "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", 923 "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}",
@@ -853,41 +943,68 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
853 { 943 {
854 if (Engine.World.PipeEventsForScript(LocalID) || 944 if (Engine.World.PipeEventsForScript(LocalID) ||
855 data.EventName == "control") // Don't freeze avies! 945 data.EventName == "control") // Don't freeze avies!
946>>>>>>> avn/ubitvar
856 { 947 {
857 // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", 948 m_CurrentEvent = data.EventName;
858 // PrimName, ScriptName, data.EventName, State); 949 m_EventStart = DateTime.Now;
950 m_InEvent = true;
859 951
860 try 952 try
861 { 953 {
862 m_CurrentEvent = data.EventName;
863 m_EventStart = DateTime.Now;
864 m_InEvent = true;
865
866 int start = Util.EnvironmentTickCount();
867
868 // Reset the measurement period when we reach the end of the current one.
869 if (start - MeasurementPeriodTickStart > MaxMeasurementPeriod)
870 MeasurementPeriodTickStart = start;
871
872 m_Script.ExecuteEvent(State, data.EventName, data.Params); 954 m_Script.ExecuteEvent(State, data.EventName, data.Params);
873 955 }
874 MeasurementPeriodExecutionTime += Util.EnvironmentTickCount() - start; 956 finally
875 957 {
876 m_InEvent = false; 958 m_InEvent = false;
877 m_CurrentEvent = String.Empty; 959 m_CurrentEvent = String.Empty;
960 }
878 961
879 if (m_SaveState) 962 if (m_SaveState)
880 { 963 {
881 // This will be the very first event we deliver 964 // This will be the very first event we deliver
882 // (state_entry) in default state 965 // (state_entry) in default state
883 // 966 //
884 SaveState(m_Assembly); 967 SaveState();
885 968
886 m_SaveState = false; 969 m_SaveState = false;
887 }
888 } 970 }
889 catch (Exception e) 971 }
972 catch (Exception e)
973 {
974 // m_log.DebugFormat(
975 // "[SCRIPT] Exception in script {0} {1}: {2}{3}",
976 // ScriptName, ItemID, e.Message, e.StackTrace);
977
978 if ((!(e is TargetInvocationException)
979 || (!(e.InnerException is SelfDeleteException)
980 && !(e.InnerException is ScriptDeleteException)
981 && !(e.InnerException is ScriptCoopStopException)))
982 && !(e is ThreadAbortException))
890 { 983 {
984<<<<<<< HEAD
985 try
986 {
987 // DISPLAY ERROR INWORLD
988 string text = FormatException(e);
989
990 if (text.Length > 1000)
991 text = text.Substring(0, 1000);
992 Engine.World.SimChat(Utils.StringToBytes(text),
993 ChatTypeEnum.DebugChannel, 2147483647,
994 Part.AbsolutePosition,
995 Part.Name, Part.UUID, false);
996
997
998 m_log.Debug(string.Format(
999 "[SCRIPT INSTANCE]: Runtime error in script {0} (event {1}), part {2} {3} at {4} in {5} ",
1000 ScriptName,
1001 data.EventName,
1002 PrimName,
1003 Part.UUID,
1004 Part.AbsolutePosition,
1005 Part.ParentGroup.Scene.Name),
1006 e);
1007=======
891// m_log.DebugFormat( 1008// m_log.DebugFormat(
892// "[SCRIPT] Exception in script {0} {1}: {2}{3}", 1009// "[SCRIPT] Exception in script {0} {1}: {2}{3}",
893// ScriptName, ItemID, e.Message, e.StackTrace); 1010// ScriptName, ItemID, e.Message, e.StackTrace);
@@ -942,9 +1059,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
942 m_InSelfDelete = true; 1059 m_InSelfDelete = true;
943 if (part != null) 1060 if (part != null)
944 Engine.World.DeleteSceneObject(part.ParentGroup, false); 1061 Engine.World.DeleteSceneObject(part.ParentGroup, false);
1062>>>>>>> avn/ubitvar
945 } 1063 }
946 else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException)) 1064 catch (Exception)
947 { 1065 {
1066<<<<<<< HEAD
1067=======
948 m_InSelfDelete = true; 1068 m_InSelfDelete = true;
949 if (part != null) 1069 if (part != null)
950 part.Inventory.RemoveInventoryItem(ItemID); 1070 part.Inventory.RemoveInventoryItem(ItemID);
@@ -955,31 +1075,68 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
955 m_log.DebugFormat( 1075 m_log.DebugFormat(
956 "[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.", 1076 "[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.",
957 PrimName, ScriptName, data.EventName, State); 1077 PrimName, ScriptName, data.EventName, State);
1078>>>>>>> avn/ubitvar
958 } 1079 }
1080 // catch (Exception e2) // LEGIT: User Scripting
1081 // {
1082 // m_log.Error("[SCRIPT]: "+
1083 // "Error displaying error in-world: " +
1084 // e2.ToString());
1085 // m_log.Error("[SCRIPT]: " +
1086 // "Errormessage: Error compiling script:\r\n" +
1087 // e.ToString());
1088 // }
1089 }
1090 else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException))
1091 {
1092 m_InSelfDelete = true;
1093 Engine.World.DeleteSceneObject(Part.ParentGroup, false);
1094 }
1095 else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException))
1096 {
1097 m_InSelfDelete = true;
1098 Part.Inventory.RemoveInventoryItem(ItemID);
1099 }
1100 else if ((e is TargetInvocationException) && (e.InnerException is ScriptCoopStopException))
1101 {
1102 if (DebugLevel >= 1)
1103 m_log.DebugFormat(
1104 "[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.",
1105 PrimName, ScriptName, data.EventName, State);
959 } 1106 }
960 } 1107 }
961 } 1108 }
1109 }
962 1110
963 // If there are more events and we are currently running and not shutting down, then ask the 1111 // If there are more events and we are currently running and not shutting down, then ask the
964 // script engine to run the next event. 1112 // script engine to run the next event.
965 lock (EventQueue) 1113 lock (EventQueue)
1114 {
1115 // Increase processed events counter and prevent wrap;
1116 if (++EventsProcessed == 1000000)
1117 EventsProcessed = 100000;
1118
1119 if ((EventsProcessed % 100000) == 0 && DebugLevel > 0)
966 { 1120 {
967 EventsProcessed++; 1121 m_log.DebugFormat("[SCRIPT INSTANCE]: Script \"{0}\" (Object \"{1}\" {2} @ {3}.{4}, Item ID {5}, Asset {6}) in event {7}: processed {8:n0} script events",
1122 ScriptTask.Name,
1123 Part.ParentGroup.Name, Part.ParentGroup.UUID, Part.ParentGroup.AbsolutePosition, Part.ParentGroup.Scene.Name,
1124 ScriptTask.ItemID, ScriptTask.AssetID, data.EventName, EventsProcessed);
1125 }
968 1126
969 if (EventQueue.Count > 0 && Running && !ShuttingDown) 1127 if (EventQueue.Count > 0 && Running && !ShuttingDown)
970 { 1128 {
971 m_CurrentWorkItem = Engine.QueueEventHandler(this); 1129 m_CurrentWorkItem = Engine.QueueEventHandler(this);
972 } 1130 }
973 else 1131 else
974 { 1132 {
975 m_CurrentWorkItem = null; 1133 m_CurrentWorkItem = null;
976 }
977 } 1134 }
1135 }
978 1136
979 m_DetectParams = null; 1137 m_DetectParams = null;
980 1138
981 return 0; 1139 return 0;
982 }
983 } 1140 }
984 1141
985 public int EventTime() 1142 public int EventTime()
@@ -1008,13 +1165,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
1008 AsyncCommandManager.RemoveScript(Engine, LocalID, ItemID); 1165 AsyncCommandManager.RemoveScript(Engine, LocalID, ItemID);
1009 EventQueue.Clear(); 1166 EventQueue.Clear();
1010 m_Script.ResetVars(); 1167 m_Script.ResetVars();
1168 StartParam = 0;
1011 State = "default"; 1169 State = "default";
1012 1170
1013 part.SetScriptEvents(ItemID, 1171 part.SetScriptEvents(ItemID,
1014 (int)m_Script.GetStateEventFlags(State)); 1172 (int)m_Script.GetStateEventFlags(State));
1015 if (running) 1173 if (running)
1016 Start(); 1174 Start();
1017 m_SaveState = true; 1175
1176 m_SaveState = StatePersistedHere;
1177
1018 PostEvent(new EventParams("state_entry", 1178 PostEvent(new EventParams("state_entry",
1019 new Object[0], new DetectParams[0])); 1179 new Object[0], new DetectParams[0]));
1020 } 1180 }
@@ -1036,14 +1196,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
1036 1196
1037 EventQueue.Clear(); 1197 EventQueue.Clear();
1038 m_Script.ResetVars(); 1198 m_Script.ResetVars();
1199 string oldState = State;
1200 StartParam = 0;
1039 State = "default"; 1201 State = "default";
1040 1202
1041 part.SetScriptEvents(ItemID, 1203 part.SetScriptEvents(ItemID,
1042 (int)m_Script.GetStateEventFlags(State)); 1204 (int)m_Script.GetStateEventFlags(State));
1043 1205
1044 if (m_CurrentEvent != "state_entry") 1206 if (m_CurrentEvent != "state_entry" || oldState != "default")
1045 { 1207 {
1046 m_SaveState = true; 1208 m_SaveState = StatePersistedHere;
1047 PostEvent(new EventParams("state_entry", 1209 PostEvent(new EventParams("state_entry",
1048 new Object[0], new DetectParams[0])); 1210 new Object[0], new DetectParams[0]));
1049 throw new EventAbortException(); 1211 throw new EventAbortException();
@@ -1057,6 +1219,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
1057 1219
1058 public void SetVars(Dictionary<string, object> vars) 1220 public void SetVars(Dictionary<string, object> vars)
1059 { 1221 {
1222// foreach (KeyValuePair<string, object> kvp in vars)
1223// m_log.DebugFormat("[SCRIPT INSTANCE]: Setting var {0}={1}", kvp.Key, kvp.Value);
1224
1060 m_Script.SetVars(vars); 1225 m_Script.SetVars(vars);
1061 } 1226 }
1062 1227
@@ -1080,42 +1245,63 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
1080 return m_DetectParams[idx].Key; 1245 return m_DetectParams[idx].Key;
1081 } 1246 }
1082 1247
1083 public void SaveState(string assembly) 1248 public void SaveState()
1084 { 1249 {
1085 // If we're currently in an event, just tell it to save upon return 1250 if (!Running && !StayStopped)
1086 //
1087 if (m_InEvent)
1088 {
1089 m_SaveState = true;
1090 return; 1251 return;
1091 }
1092 1252
1253 // We cannot call this inside the EventQueue lock since it will currently take AsyncCommandManager.staticLock.
1254 // This may already be held by AsyncCommandManager.DoOneCmdHandlerPass() which in turn can take EventQueue
1255 // lock via ScriptInstance.PostEvent().
1093 PluginData = AsyncCommandManager.GetSerializationData(Engine, ItemID); 1256 PluginData = AsyncCommandManager.GetSerializationData(Engine, ItemID);
1094 1257
1095 string xml = ScriptSerializer.Serialize(this); 1258 // We need to lock here to avoid any race with a thread that is removing this script.
1096 1259 lock (EventQueue)
1097 // Compare hash of the state we just just created with the state last written to disk
1098 // If the state is different, update the disk file.
1099 UUID hash = UUID.Parse(Utils.MD5String(xml));
1100
1101 if (hash != m_CurrentStateHash)
1102 { 1260 {
1103 try 1261 // Check again to avoid a race with a thread in Stop()
1262 if (!Running && !StayStopped)
1263 return;
1264
1265 // If we're currently in an event, just tell it to save upon return
1266 //
1267 if (m_InEvent)
1104 { 1268 {
1105 FileStream fs = File.Create(Path.Combine(Path.GetDirectoryName(assembly), ItemID.ToString() + ".state")); 1269 m_SaveState = true;
1106 Byte[] buf = Util.UTF8NoBomEncoding.GetBytes(xml); 1270 return;
1107 fs.Write(buf, 0, buf.Length);
1108 fs.Close();
1109 } 1271 }
1110 catch(Exception) 1272
1273 // m_log.DebugFormat(
1274 // "[SCRIPT INSTANCE]: Saving state for script {0} (id {1}) in part {2} (id {3}) in object {4} in {5}",
1275 // ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name);
1276
1277 string xml = ScriptSerializer.Serialize(this);
1278
1279 // Compare hash of the state we just just created with the state last written to disk
1280 // If the state is different, update the disk file.
1281 UUID hash = UUID.Parse(Utils.MD5String(xml));
1282
1283 if (hash != m_CurrentStateHash)
1111 { 1284 {
1112 // m_log.Error("Unable to save xml\n"+e.ToString()); 1285 try
1286 {
1287 using (FileStream fs = File.Create(Path.Combine(m_dataPath, ItemID.ToString() + ".state")))
1288 {
1289 Byte[] buf = Util.UTF8NoBomEncoding.GetBytes(xml);
1290 fs.Write(buf, 0, buf.Length);
1291 }
1292 }
1293 catch(Exception)
1294 {
1295 // m_log.Error("Unable to save xml\n"+e.ToString());
1296 }
1297 //if (!File.Exists(Path.Combine(Path.GetDirectoryName(assembly), ItemID.ToString() + ".state")))
1298 //{
1299 // throw new Exception("Completed persistence save, but no file was created");
1300 //}
1301 m_CurrentStateHash = hash;
1113 } 1302 }
1114 //if (!File.Exists(Path.Combine(Path.GetDirectoryName(assembly), ItemID.ToString() + ".state"))) 1303
1115 //{ 1304 StayStopped = false;
1116 // throw new Exception("Completed persistence save, but no file was created");
1117 //}
1118 m_CurrentStateHash = hash;
1119 } 1305 }
1120 } 1306 }
1121 1307
@@ -1185,7 +1371,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
1185 1371
1186 public string GetAssemblyName() 1372 public string GetAssemblyName()
1187 { 1373 {
1188 return m_Assembly; 1374 return m_assemblyPath;
1189 } 1375 }
1190 1376
1191 public string GetXMLState() 1377 public string GetXMLState()
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/Tests/CoopTerminationTests.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/Tests/CoopTerminationTests.cs
index ac822c6..5b9794b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/Tests/CoopTerminationTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/Tests/CoopTerminationTests.cs
@@ -37,7 +37,6 @@ using OpenSim.Region.Framework.Scenes;
37using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
38using OpenSim.Region.ScriptEngine.XEngine; 38using OpenSim.Region.ScriptEngine.XEngine;
39using OpenSim.Tests.Common; 39using OpenSim.Tests.Common;
40using OpenSim.Tests.Common.Mock;
41 40
42namespace OpenSim.Region.ScriptEngine.Shared.Instance.Tests 41namespace OpenSim.Region.ScriptEngine.Shared.Instance.Tests
43{ 42{
@@ -77,6 +76,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance.Tests
77 //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin"); 76 //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
78// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); 77// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
79 m_xEngine = new OpenSim.Region.ScriptEngine.XEngine.XEngine(); 78 m_xEngine = new OpenSim.Region.ScriptEngine.XEngine.XEngine();
79 m_xEngine.DebugLevel = 1;
80 80
81 IniConfigSource configSource = new IniConfigSource(); 81 IniConfigSource configSource = new IniConfigSource();
82 82
@@ -337,7 +337,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance.Tests
337 public void TestStopOnInfiniteJumpLoop() 337 public void TestStopOnInfiniteJumpLoop()
338 { 338 {
339 TestHelpers.InMethod(); 339 TestHelpers.InMethod();
340// TestHelpers.EnableLogging(); 340 TestHelpers.EnableLogging();
341 341
342 string script = 342 string script =
343@"default 343@"default
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 8f02230..885559a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -102,19 +102,31 @@ namespace OpenSim.Region.ScriptEngine.Shared
102 102
103 public override string ToString() 103 public override string ToString()
104 { 104 {
105<<<<<<< HEAD
106 string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", x, y, z);
107=======
105 string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z); 108 string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z);
109>>>>>>> avn/ubitvar
106 return s; 110 return s;
107 } 111 }
108 112
109 public static explicit operator LSLString(Vector3 vec) 113 public static explicit operator LSLString(Vector3 vec)
110 { 114 {
115<<<<<<< HEAD
116 string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z);
117=======
111 string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); 118 string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z);
119>>>>>>> avn/ubitvar
112 return new LSLString(s); 120 return new LSLString(s);
113 } 121 }
114 122
115 public static explicit operator string(Vector3 vec) 123 public static explicit operator string(Vector3 vec)
116 { 124 {
125<<<<<<< HEAD
126 string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z);
127=======
117 string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); 128 string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z);
129>>>>>>> avn/ubitvar
118 return s; 130 return s;
119 } 131 }
120 132
@@ -502,7 +514,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
502 } 514 }
503 515
504 [Serializable] 516 [Serializable]
505 public class list 517 public struct list
506 { 518 {
507 private object[] m_data; 519 private object[] m_data;
508 520
@@ -583,7 +595,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
583 /// <param name='itemIndex'></param> 595 /// <param name='itemIndex'></param>
584 public Type GetLSLListItemType(int itemIndex) 596 public Type GetLSLListItemType(int itemIndex)
585 { 597 {
586 return m_data[itemIndex].GetType(); 598 return Data[itemIndex].GetType();
587 } 599 }
588 600
589 /// <summary> 601 /// <summary>
@@ -600,107 +612,107 @@ namespace OpenSim.Region.ScriptEngine.Shared
600 /// <param name='itemIndex'></param> 612 /// <param name='itemIndex'></param>
601 public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex) 613 public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex)
602 { 614 {
603 if (m_data[itemIndex] is LSL_Types.LSLInteger) 615 if (Data[itemIndex] is LSL_Types.LSLInteger)
604 { 616 {
605 return (LSL_Types.LSLInteger)m_data[itemIndex]; 617 return (LSL_Types.LSLInteger)Data[itemIndex];
606 } 618 }
607 else if (m_data[itemIndex] is Int32) 619 else if (Data[itemIndex] is Int32)
608 { 620 {
609 return new LSL_Types.LSLFloat((int)m_data[itemIndex]); 621 return new LSL_Types.LSLFloat((int)Data[itemIndex]);
610 } 622 }
611 else if (m_data[itemIndex] is float) 623 else if (Data[itemIndex] is float)
612 { 624 {
613 return new LSL_Types.LSLFloat((float)m_data[itemIndex]); 625 return new LSL_Types.LSLFloat((float)Data[itemIndex]);
614 } 626 }
615 else if (m_data[itemIndex] is Double) 627 else if (Data[itemIndex] is Double)
616 { 628 {
617 return new LSL_Types.LSLFloat((Double)m_data[itemIndex]); 629 return new LSL_Types.LSLFloat((Double)Data[itemIndex]);
618 } 630 }
619 else if (m_data[itemIndex] is LSL_Types.LSLString) 631 else if (Data[itemIndex] is LSL_Types.LSLString)
620 { 632 {
621 return new LSL_Types.LSLFloat(m_data[itemIndex].ToString()); 633 return new LSL_Types.LSLFloat(Data[itemIndex].ToString());
622 } 634 }
623 else 635 else
624 { 636 {
625 return (LSL_Types.LSLFloat)m_data[itemIndex]; 637 return (LSL_Types.LSLFloat)Data[itemIndex];
626 } 638 }
627 } 639 }
628 640
629 public LSL_Types.LSLString GetLSLStringItem(int itemIndex) 641 public LSL_Types.LSLString GetLSLStringItem(int itemIndex)
630 { 642 {
631 if (m_data[itemIndex] is LSL_Types.key) 643 if (Data[itemIndex] is LSL_Types.key)
632 { 644 {
633 return (LSL_Types.key)m_data[itemIndex]; 645 return (LSL_Types.key)Data[itemIndex];
634 } 646 }
635 else 647 else
636 { 648 {
637 return new LSL_Types.LSLString(m_data[itemIndex].ToString()); 649 return new LSL_Types.LSLString(Data[itemIndex].ToString());
638 } 650 }
639 } 651 }
640 652
641 public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) 653 public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex)
642 { 654 {
643 if (m_data[itemIndex] is LSL_Types.LSLInteger) 655 if (Data[itemIndex] is LSL_Types.LSLInteger)
644 return (LSL_Types.LSLInteger)m_data[itemIndex]; 656 return (LSL_Types.LSLInteger)Data[itemIndex];
645 if (m_data[itemIndex] is LSL_Types.LSLFloat) 657 if (Data[itemIndex] is LSL_Types.LSLFloat)
646 return new LSLInteger((int)m_data[itemIndex]); 658 return new LSLInteger((int)Data[itemIndex]);
647 else if (m_data[itemIndex] is Int32) 659 else if (Data[itemIndex] is Int32)
648 return new LSLInteger((int)m_data[itemIndex]); 660 return new LSLInteger((int)Data[itemIndex]);
649 else if (m_data[itemIndex] is LSL_Types.LSLString) 661 else if (Data[itemIndex] is LSL_Types.LSLString)
650 return new LSLInteger(m_data[itemIndex].ToString()); 662 return new LSLInteger(Data[itemIndex].ToString());
651 else 663 else
652 throw new InvalidCastException(string.Format( 664 throw new InvalidCastException(string.Format(
653 "{0} expected but {1} given", 665 "{0} expected but {1} given",
654 typeof(LSL_Types.LSLInteger).Name, 666 typeof(LSL_Types.LSLInteger).Name,
655 m_data[itemIndex] != null ? 667 Data[itemIndex] != null ?
656 m_data[itemIndex].GetType().Name : "null")); 668 Data[itemIndex].GetType().Name : "null"));
657 } 669 }
658 670
659 public LSL_Types.Vector3 GetVector3Item(int itemIndex) 671 public LSL_Types.Vector3 GetVector3Item(int itemIndex)
660 { 672 {
661 if (m_data[itemIndex] is LSL_Types.Vector3) 673 if (Data[itemIndex] is LSL_Types.Vector3)
662 { 674 {
663 return (LSL_Types.Vector3)m_data[itemIndex]; 675 return (LSL_Types.Vector3)Data[itemIndex];
664 } 676 }
665 else if(m_data[itemIndex] is OpenMetaverse.Vector3) 677 else if(Data[itemIndex] is OpenMetaverse.Vector3)
666 { 678 {
667 return new LSL_Types.Vector3( 679 return new LSL_Types.Vector3(
668 (OpenMetaverse.Vector3)m_data[itemIndex]); 680 (OpenMetaverse.Vector3)Data[itemIndex]);
669 } 681 }
670 else 682 else
671 { 683 {
672 throw new InvalidCastException(string.Format( 684 throw new InvalidCastException(string.Format(
673 "{0} expected but {1} given", 685 "{0} expected but {1} given",
674 typeof(LSL_Types.Vector3).Name, 686 typeof(LSL_Types.Vector3).Name,
675 m_data[itemIndex] != null ? 687 Data[itemIndex] != null ?
676 m_data[itemIndex].GetType().Name : "null")); 688 Data[itemIndex].GetType().Name : "null"));
677 } 689 }
678 } 690 }
679 691
680 public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) 692 public LSL_Types.Quaternion GetQuaternionItem(int itemIndex)
681 { 693 {
682 if (m_data[itemIndex] is LSL_Types.Quaternion) 694 if (Data[itemIndex] is LSL_Types.Quaternion)
683 { 695 {
684 return (LSL_Types.Quaternion)m_data[itemIndex]; 696 return (LSL_Types.Quaternion)Data[itemIndex];
685 } 697 }
686 else if(m_data[itemIndex] is OpenMetaverse.Quaternion) 698 else if(Data[itemIndex] is OpenMetaverse.Quaternion)
687 { 699 {
688 return new LSL_Types.Quaternion( 700 return new LSL_Types.Quaternion(
689 (OpenMetaverse.Quaternion)m_data[itemIndex]); 701 (OpenMetaverse.Quaternion)Data[itemIndex]);
690 } 702 }
691 else 703 else
692 { 704 {
693 throw new InvalidCastException(string.Format( 705 throw new InvalidCastException(string.Format(
694 "{0} expected but {1} given", 706 "{0} expected but {1} given",
695 typeof(LSL_Types.Quaternion).Name, 707 typeof(LSL_Types.Quaternion).Name,
696 m_data[itemIndex] != null ? 708 Data[itemIndex] != null ?
697 m_data[itemIndex].GetType().Name : "null")); 709 Data[itemIndex].GetType().Name : "null"));
698 } 710 }
699 } 711 }
700 712
701 public LSL_Types.key GetKeyItem(int itemIndex) 713 public LSL_Types.key GetKeyItem(int itemIndex)
702 { 714 {
703 return (LSL_Types.key)m_data[itemIndex]; 715 return (LSL_Types.key)Data[itemIndex];
704 } 716 }
705 717
706 public static list operator +(list a, list b) 718 public static list operator +(list a, list b)
@@ -715,10 +727,17 @@ namespace OpenSim.Region.ScriptEngine.Shared
715 private void ExtendAndAdd(object o) 727 private void ExtendAndAdd(object o)
716 { 728 {
717 object[] tmp; 729 object[] tmp;
730<<<<<<< HEAD
731 tmp = new object[Data.Length + 1];
732 Data.CopyTo(tmp, 0);
733 tmp.SetValue(o, tmp.Length - 1);
734 Data = tmp;
735=======
718 tmp = new object[m_data.Length + 1]; 736 tmp = new object[m_data.Length + 1];
719 m_data.CopyTo(tmp, 0); 737 m_data.CopyTo(tmp, 0);
720 tmp.SetValue(o, tmp.Length - 1); 738 tmp.SetValue(o, tmp.Length - 1);
721 m_data = tmp; 739 m_data = tmp;
740>>>>>>> avn/ubitvar
722 } 741 }
723 742
724 public static list operator +(list a, LSLString s) 743 public static list operator +(list a, LSLString s)
@@ -758,10 +777,10 @@ namespace OpenSim.Region.ScriptEngine.Shared
758 public void Add(object o) 777 public void Add(object o)
759 { 778 {
760 object[] tmp; 779 object[] tmp;
761 tmp = new object[m_data.Length + 1]; 780 tmp = new object[Data.Length + 1];
762 m_data.CopyTo(tmp, 0); 781 Data.CopyTo(tmp, 0);
763 tmp[m_data.Length] = o; 782 tmp[Data.Length] = o; // Since this is tmp.Length - 1
764 m_data = tmp; 783 Data = tmp;
765 } 784 }
766 785
767 public bool Contains(object o) 786 public bool Contains(object o)
@@ -788,53 +807,53 @@ namespace OpenSim.Region.ScriptEngine.Shared
788 Object[] ret; 807 Object[] ret;
789 808
790 if (start < 0) 809 if (start < 0)
791 start=m_data.Length+start; 810 start=Data.Length+start;
792 811
793 if (start < 0) 812 if (start < 0)
794 start=0; 813 start=0;
795 814
796 if (end < 0) 815 if (end < 0)
797 end=m_data.Length+end; 816 end=Data.Length+end;
798 if (end < 0) 817 if (end < 0)
799 end=0; 818 end=0;
800 819
801 if (start > end) 820 if (start > end)
802 { 821 {
803 if (end >= m_data.Length) 822 if (end >= Data.Length)
804 return new list(new Object[0]); 823 return new list(new Object[0]);
805 824
806 if (start >= m_data.Length) 825 if (start >= Data.Length)
807 start=m_data.Length-1; 826 start=Data.Length-1;
808 827
809 return GetSublist(end, start); 828 return GetSublist(end, start);
810 } 829 }
811 830
812 // start >= 0 && end >= 0 here 831 // start >= 0 && end >= 0 here
813 if (start >= m_data.Length) 832 if (start >= Data.Length)
814 { 833 {
815 ret=new Object[m_data.Length]; 834 ret=new Object[Data.Length];
816 Array.Copy(m_data, 0, ret, 0, m_data.Length); 835 Array.Copy(Data, 0, ret, 0, Data.Length);
817 836
818 return new list(ret); 837 return new list(ret);
819 } 838 }
820 839
821 if (end >= m_data.Length) 840 if (end >= Data.Length)
822 end=m_data.Length-1; 841 end=Data.Length-1;
823 842
824 // now, this makes the math easier 843 // now, this makes the math easier
825 int remove=end+1-start; 844 int remove=end+1-start;
826 845
827 ret=new Object[m_data.Length-remove]; 846 ret=new Object[Data.Length-remove];
828 if (ret.Length == 0) 847 if (ret.Length == 0)
829 return new list(ret); 848 return new list(ret);
830 849
831 int src; 850 int src;
832 int dest=0; 851 int dest=0;
833 852
834 for (src = 0; src < m_data.Length; src++) 853 for (src = 0; src < Data.Length; src++)
835 { 854 {
836 if (src < start || src > end) 855 if (src < start || src > end)
837 ret[dest++]=m_data[src]; 856 ret[dest++]=Data[src];
838 } 857 }
839 858
840 return new list(ret); 859 return new list(ret);
@@ -854,12 +873,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
854 873
855 if (start < 0) 874 if (start < 0)
856 { 875 {
857 start = m_data.Length + start; 876 start = Data.Length + start;
858 } 877 }
859 878
860 if (end < 0) 879 if (end < 0)
861 { 880 {
862 end = m_data.Length + end; 881 end = Data.Length + end;
863 } 882 }
864 883
865 // The conventional case is start <= end 884 // The conventional case is start <= end
@@ -873,15 +892,15 @@ namespace OpenSim.Region.ScriptEngine.Shared
873 892
874 // Start sublist beyond length 893 // Start sublist beyond length
875 // Also deals with start AND end still negative 894 // Also deals with start AND end still negative
876 if (start >= m_data.Length || end < 0) 895 if (start >= Data.Length || end < 0)
877 { 896 {
878 return new list(); 897 return new list();
879 } 898 }
880 899
881 // Sublist extends beyond the end of the supplied list 900 // Sublist extends beyond the end of the supplied list
882 if (end >= m_data.Length) 901 if (end >= Data.Length)
883 { 902 {
884 end = m_data.Length - 1; 903 end = Data.Length - 1;
885 } 904 }
886 905
887 // Sublist still starts before the beginning of the list 906 // Sublist still starts before the beginning of the list
@@ -892,7 +911,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
892 911
893 ret = new object[end - start + 1]; 912 ret = new object[end - start + 1];
894 913
895 Array.Copy(m_data, start, ret, 0, end - start + 1); 914 Array.Copy(Data, start, ret, 0, end - start + 1);
896 915
897 return new list(ret); 916 return new list(ret);
898 917
@@ -903,7 +922,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
903 else 922 else
904 { 923 {
905 924
906 list result = null; 925 list result;
907 926
908 // If end is negative, then prefix list is empty 927 // If end is negative, then prefix list is empty
909 if (end < 0) 928 if (end < 0)
@@ -925,7 +944,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
925 944
926 // If start is outside of list, then just return 945 // If start is outside of list, then just return
927 // the prefix, whatever it is. 946 // the prefix, whatever it is.
928 if (start >= m_data.Length) 947 if (start >= Data.Length)
929 { 948 {
930 return result; 949 return result;
931 } 950 }
@@ -1106,11 +1125,11 @@ namespace OpenSim.Region.ScriptEngine.Shared
1106 { 1125 {
1107 string output; 1126 string output;
1108 output = String.Empty; 1127 output = String.Empty;
1109 if (m_data.Length == 0) 1128 if (Data.Length == 0)
1110 { 1129 {
1111 return String.Empty; 1130 return String.Empty;
1112 } 1131 }
1113 foreach (object o in m_data) 1132 foreach (object o in Data)
1114 { 1133 {
1115 output = output + o.ToString(); 1134 output = output + o.ToString();
1116 } 1135 }
@@ -1305,12 +1324,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
1305 public string ToPrettyString() 1324 public string ToPrettyString()
1306 { 1325 {
1307 string output; 1326 string output;
1308 if (m_data.Length == 0) 1327 if (Data.Length == 0)
1309 { 1328 {
1310 return "[]"; 1329 return "[]";
1311 } 1330 }
1312 output = "["; 1331 output = "[";
1313 foreach (object o in m_data) 1332 foreach (object o in Data)
1314 { 1333 {
1315 if (o is String) 1334 if (o is String)
1316 { 1335 {
@@ -1377,27 +1396,6 @@ namespace OpenSim.Region.ScriptEngine.Shared
1377 } 1396 }
1378 } 1397 }
1379 1398
1380 //
1381 // BELOW IS WORK IN PROGRESS... IT WILL CHANGE, SO DON'T USE YET! :)
1382 //
1383
1384 public struct StringTest
1385 {
1386 // Our own little string
1387 internal string actualString;
1388 public static implicit operator bool(StringTest mString)
1389 {
1390 if (mString.actualString.Length == 0)
1391 return true;
1392 return false;
1393 }
1394 public override string ToString()
1395 {
1396 return actualString;
1397 }
1398
1399 }
1400
1401 [Serializable] 1399 [Serializable]
1402 public struct key 1400 public struct key
1403 { 1401 {
@@ -1451,6 +1449,16 @@ namespace OpenSim.Region.ScriptEngine.Shared
1451 return false; 1449 return false;
1452 } 1450 }
1453 } 1451 }
1452
1453 public static bool operator true(key k)
1454 {
1455 return (Boolean)k;
1456 }
1457
1458 public static bool operator false(key k)
1459 {
1460 return !(Boolean)k;
1461 }
1454 1462
1455 static public implicit operator key(string s) 1463 static public implicit operator key(string s)
1456 { 1464 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiAvatarTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiAvatarTests.cs
new file mode 100644
index 0000000..af1da7c
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiAvatarTests.cs
@@ -0,0 +1,158 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Text;
32using log4net;
33using Nini.Config;
34using NUnit.Framework;
35using OpenMetaverse;
36using OpenMetaverse.Assets;
37using OpenMetaverse.StructuredData;
38using OpenSim.Framework;
39using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
40using OpenSim.Region.OptionalModules.World.NPC;
41using OpenSim.Region.Framework.Scenes;
42using OpenSim.Region.ScriptEngine.Shared;
43using OpenSim.Region.ScriptEngine.Shared.Api;
44using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
46using OpenSim.Services.Interfaces;
47using OpenSim.Tests.Common;
48using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
49using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
50
51namespace OpenSim.Region.ScriptEngine.Shared.Tests
52{
53 /// <summary>
54 /// Tests relating directly to avatars
55 /// </summary>
56 [TestFixture]
57 public class LSL_ApiAvatarTests : OpenSimTestCase
58 {
59 protected Scene m_scene;
60 protected XEngine.XEngine m_engine;
61
62 [SetUp]
63 public override void SetUp()
64 {
65 base.SetUp();
66
67 IConfigSource initConfigSource = new IniConfigSource();
68 IConfig config = initConfigSource.AddConfig("XEngine");
69 config.Set("Enabled", "true");
70
71 m_scene = new SceneHelpers().SetupScene();
72 SceneHelpers.SetupSceneModules(m_scene, initConfigSource);
73
74 m_engine = new XEngine.XEngine();
75 m_engine.Initialise(initConfigSource);
76 m_engine.AddRegion(m_scene);
77 }
78
79 /// <summary>
80 /// Test llSetLinkPrimtiveParams for agents.
81 /// </summary>
82 /// <remarks>
83 /// Also testing entity updates here as well. Possibly that's putting 2 different concerns into one test and
84 /// this should be separated.
85 /// </remarks>
86 [Test]
87 public void TestllSetLinkPrimitiveParamsForAgent()
88 {
89 TestHelpers.InMethod();
90// TestHelpers.EnableLogging();
91
92 UUID userId = TestHelpers.ParseTail(0x1);
93
94 SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene).RootPart;
95 part.RotationOffset = new Quaternion(0.7071068f, 0, 0, 0.7071068f);
96
97 LSL_Api apiGrp1 = new LSL_Api();
98 apiGrp1.Initialize(m_engine, part, null);
99
100 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId);
101
102 // sp has to be less than 10 meters away from 0, 0, 0 (default part position)
103 Vector3 startPos = new Vector3(3, 2, 1);
104 sp.AbsolutePosition = startPos;
105
106 sp.HandleAgentRequestSit(sp.ControllingClient, sp.UUID, part.UUID, Vector3.Zero);
107
108 int entityUpdates = 0;
109 ((TestClient)sp.ControllingClient).OnReceivedEntityUpdate += (entity, flags) => { if (entity is ScenePresence) { entityUpdates++; }};
110
111 // Test position
112 {
113 Vector3 newPos = new Vector3(1, 2, 3);
114 apiGrp1.llSetLinkPrimitiveParams(2, new LSL_Types.list(ScriptBaseClass.PRIM_POSITION, newPos));
115
116 Assert.That(sp.OffsetPosition, Is.EqualTo(newPos));
117
118 m_scene.Update(1);
119 Assert.That(entityUpdates, Is.EqualTo(1));
120 }
121
122 // Test small reposition
123 {
124 Vector3 newPos = new Vector3(1.001f, 2, 3);
125 apiGrp1.llSetLinkPrimitiveParams(2, new LSL_Types.list(ScriptBaseClass.PRIM_POSITION, newPos));
126
127 Assert.That(sp.OffsetPosition, Is.EqualTo(newPos));
128
129 m_scene.Update(1);
130 Assert.That(entityUpdates, Is.EqualTo(2));
131 }
132
133 // Test world rotation
134 {
135 Quaternion newRot = new Quaternion(0, 0.7071068f, 0, 0.7071068f);
136 apiGrp1.llSetLinkPrimitiveParams(2, new LSL_Types.list(ScriptBaseClass.PRIM_ROTATION, newRot));
137
138 Assert.That(
139 sp.Rotation, new QuaternionToleranceConstraint(part.GetWorldRotation() * newRot, 0.000001));
140
141 m_scene.Update(1);
142 Assert.That(entityUpdates, Is.EqualTo(3));
143 }
144
145 // Test local rotation
146 {
147 Quaternion newRot = new Quaternion(0, 0.7071068f, 0, 0.7071068f);
148 apiGrp1.llSetLinkPrimitiveParams(2, new LSL_Types.list(ScriptBaseClass.PRIM_ROT_LOCAL, newRot));
149
150 Assert.That(
151 sp.Rotation, new QuaternionToleranceConstraint(newRot, 0.000001));
152
153 m_scene.Update(1);
154 Assert.That(entityUpdates, Is.EqualTo(4));
155 }
156 }
157 }
158}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs
index ab44e38..9a5ebce 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs
@@ -45,7 +45,6 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
45using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 45using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
46using OpenSim.Services.Interfaces; 46using OpenSim.Services.Interfaces;
47using OpenSim.Tests.Common; 47using OpenSim.Tests.Common;
48using OpenSim.Tests.Common.Mock;
49 48
50namespace OpenSim.Region.ScriptEngine.Shared.Tests 49namespace OpenSim.Region.ScriptEngine.Shared.Tests
51{ 50{
@@ -101,12 +100,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
101 SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine, m_urlModule); 100 SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine, m_urlModule);
102 101
103 SceneObjectGroup so = SceneHelpers.AddSceneObject(m_scene); 102 SceneObjectGroup so = SceneHelpers.AddSceneObject(m_scene);
104 m_scriptItem = TaskInventoryHelpers.AddScript(m_scene, so.RootPart); 103 m_scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, so.RootPart);
105 104
106 // This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm. 105 // This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm.
107 // Possibly this could be done and we could obtain it directly from the MockScriptEngine. 106 // Possibly this could be done and we could obtain it directly from the MockScriptEngine.
108 m_lslApi = new LSL_Api(); 107 m_lslApi = new LSL_Api();
109 m_lslApi.Initialize(m_engine, so.RootPart, m_scriptItem, null); 108 m_lslApi.Initialize(m_engine, so.RootPart, m_scriptItem);
110 } 109 }
111 110
112 [TearDown] 111 [TearDown]
@@ -246,4 +245,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
246 } 245 }
247 } 246 }
248 } 247 }
249} \ No newline at end of file 248}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
index 6dd6c17..9b7cab2 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
@@ -44,7 +44,7 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
44using OpenSim.Region.ScriptEngine.Shared.Instance; 44using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Services.Interfaces; 45using OpenSim.Services.Interfaces;
46using OpenSim.Tests.Common; 46using OpenSim.Tests.Common;
47using OpenSim.Tests.Common.Mock; 47using PermissionMask = OpenSim.Framework.PermissionMask;
48 48
49namespace OpenSim.Region.ScriptEngine.Shared.Tests 49namespace OpenSim.Region.ScriptEngine.Shared.Tests
50{ 50{
@@ -91,10 +91,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
91 91
92 // Create an object embedded inside the first 92 // Create an object embedded inside the first
93 UUID itemId = TestHelpers.ParseTail(0x20); 93 UUID itemId = TestHelpers.ParseTail(0x20);
94 TaskInventoryHelpers.AddSceneObject(m_scene, so1.RootPart, inventoryItemName, itemId, userId); 94 TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, so1.RootPart, inventoryItemName, itemId, userId);
95 95
96 LSL_Api api = new LSL_Api(); 96 LSL_Api api = new LSL_Api();
97 api.Initialize(m_engine, so1.RootPart, null, null); 97 api.Initialize(m_engine, so1.RootPart, null);
98 98
99 // Create a second object 99 // Create a second object
100 SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, userId, "so2", 0x100); 100 SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, userId, "so2", 0x100);
@@ -127,17 +127,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
127 SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10); 127 SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10);
128 m_scene.AddSceneObject(so1); 128 m_scene.AddSceneObject(so1);
129 LSL_Api api = new LSL_Api(); 129 LSL_Api api = new LSL_Api();
130 api.Initialize(m_engine, so1.RootPart, null, null); 130 api.Initialize(m_engine, so1.RootPart, null);
131 131
132 // Create an object embedded inside the first 132 // Create an object embedded inside the first
133 UUID itemId = TestHelpers.ParseTail(0x20); 133 UUID itemId = TestHelpers.ParseTail(0x20);
134 TaskInventoryHelpers.AddSceneObject(m_scene, so1.RootPart, inventoryItemName, itemId, user1Id); 134 TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, so1.RootPart, inventoryItemName, itemId, user1Id);
135 135
136 // Create a second object 136 // Create a second object
137 SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, user2Id, "so2", 0x100); 137 SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, user2Id, "so2", 0x100);
138 m_scene.AddSceneObject(so2); 138 m_scene.AddSceneObject(so2);
139 LSL_Api api2 = new LSL_Api(); 139 LSL_Api api2 = new LSL_Api();
140 api2.Initialize(m_engine, so2.RootPart, null, null); 140 api2.Initialize(m_engine, so2.RootPart, null);
141 141
142 // *** Firstly, we test where llAllowInventoryDrop() has not been called. *** 142 // *** Firstly, we test where llAllowInventoryDrop() has not been called. ***
143 api.llGiveInventory(so2.UUID.ToString(), inventoryItemName); 143 api.llGiveInventory(so2.UUID.ToString(), inventoryItemName);
@@ -167,5 +167,122 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
167 Assert.That(copiedItems[0].Name, Is.EqualTo(inventoryItemName)); 167 Assert.That(copiedItems[0].Name, Is.EqualTo(inventoryItemName));
168 } 168 }
169 } 169 }
170
171 /// <summary>
172 /// Test giving inventory from an object to an avatar that is not the object's owner.
173 /// </summary>
174 [Test]
175 public void TestLlGiveInventoryO2DifferentAvatar()
176 {
177 TestHelpers.InMethod();
178 // TestHelpers.EnableLogging();
179
180 UUID user1Id = TestHelpers.ParseTail(0x1);
181 UUID user2Id = TestHelpers.ParseTail(0x2);
182 string inventoryItemName = "item1";
183
184 SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10);
185 m_scene.AddSceneObject(so1);
186 LSL_Api api = new LSL_Api();
187 api.Initialize(m_engine, so1.RootPart, null);
188
189 // Create an object embedded inside the first
190 UUID itemId = TestHelpers.ParseTail(0x20);
191 TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, so1.RootPart, inventoryItemName, itemId, user1Id);
192
193 UserAccountHelpers.CreateUserWithInventory(m_scene, user2Id);
194
195 api.llGiveInventory(user2Id.ToString(), inventoryItemName);
196
197 InventoryItemBase receivedItem
198 = UserInventoryHelpers.GetInventoryItem(
199 m_scene.InventoryService, user2Id, string.Format("Objects/{0}", inventoryItemName));
200
201 Assert.IsNotNull(receivedItem);
202 }
203
204 /// <summary>
205 /// Test giving inventory from an object to an avatar that is not the object's owner and where the next
206 /// permissions do not include mod.
207 /// </summary>
208 [Test]
209 public void TestLlGiveInventoryO2DifferentAvatarNoMod()
210 {
211 TestHelpers.InMethod();
212// TestHelpers.EnableLogging();
213
214 UUID user1Id = TestHelpers.ParseTail(0x1);
215 UUID user2Id = TestHelpers.ParseTail(0x2);
216 string inventoryItemName = "item1";
217
218 SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10);
219 m_scene.AddSceneObject(so1);
220 LSL_Api api = new LSL_Api();
221 api.Initialize(m_engine, so1.RootPart, null);
222
223 // Create an object embedded inside the first
224 UUID itemId = TestHelpers.ParseTail(0x20);
225 TaskInventoryItem tii
226 = TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, so1.RootPart, inventoryItemName, itemId, user1Id);
227 tii.NextPermissions &= ~((uint)PermissionMask.Modify);
228
229 UserAccountHelpers.CreateUserWithInventory(m_scene, user2Id);
230
231 api.llGiveInventory(user2Id.ToString(), inventoryItemName);
232
233 InventoryItemBase receivedItem
234 = UserInventoryHelpers.GetInventoryItem(
235 m_scene.InventoryService, user2Id, string.Format("Objects/{0}", inventoryItemName));
236
237 Assert.IsNotNull(receivedItem);
238 Assert.AreEqual(0, receivedItem.CurrentPermissions & (uint)PermissionMask.Modify);
239 }
240
241 [Test]
242 public void TestLlRemoteLoadScriptPin()
243 {
244 TestHelpers.InMethod();
245// TestHelpers.EnableLogging();
246
247 UUID user1Id = TestHelpers.ParseTail(0x1);
248 UUID user2Id = TestHelpers.ParseTail(0x2);
249
250 SceneObjectGroup sourceSo = SceneHelpers.AddSceneObject(m_scene, "sourceSo", user1Id);
251 m_scene.AddSceneObject(sourceSo);
252 LSL_Api api = new LSL_Api();
253 api.Initialize(m_engine, sourceSo.RootPart, null);
254 TaskInventoryHelpers.AddScript(m_scene.AssetService, sourceSo.RootPart, "script", "Hello World");
255
256 SceneObjectGroup targetSo = SceneHelpers.AddSceneObject(m_scene, "targetSo", user1Id);
257 SceneObjectGroup otherOwnedTargetSo = SceneHelpers.AddSceneObject(m_scene, "otherOwnedTargetSo", user2Id);
258
259 // Test that we cannot load a script when the target pin has never been set (i.e. it is zero)
260 api.llRemoteLoadScriptPin(targetSo.UUID.ToString(), "script", 0, 0, 0);
261 Assert.IsNull(targetSo.RootPart.Inventory.GetInventoryItem("script"));
262
263 // Test that we cannot load a script when the given pin does not match the target
264 targetSo.RootPart.ScriptAccessPin = 5;
265 api.llRemoteLoadScriptPin(targetSo.UUID.ToString(), "script", 3, 0, 0);
266 Assert.IsNull(targetSo.RootPart.Inventory.GetInventoryItem("script"));
267
268 // Test that we cannot load into a prim with a different owner
269 otherOwnedTargetSo.RootPart.ScriptAccessPin = 3;
270 api.llRemoteLoadScriptPin(otherOwnedTargetSo.UUID.ToString(), "script", 3, 0, 0);
271 Assert.IsNull(otherOwnedTargetSo.RootPart.Inventory.GetInventoryItem("script"));
272
273 // Test that we can load a script when given pin and dest pin match.
274 targetSo.RootPart.ScriptAccessPin = 3;
275 api.llRemoteLoadScriptPin(targetSo.UUID.ToString(), "script", 3, 0, 0);
276 TaskInventoryItem insertedItem = targetSo.RootPart.Inventory.GetInventoryItem("script");
277 Assert.IsNotNull(insertedItem);
278
279 // Test that we can no longer load if access pin is unset
280 targetSo.RootPart.Inventory.RemoveInventoryItem(insertedItem.ItemID);
281 Assert.IsNull(targetSo.RootPart.Inventory.GetInventoryItem("script"));
282
283 targetSo.RootPart.ScriptAccessPin = 0;
284 api.llRemoteLoadScriptPin(otherOwnedTargetSo.UUID.ToString(), "script", 3, 0, 0);
285 Assert.IsNull(otherOwnedTargetSo.RootPart.Inventory.GetInventoryItem("script"));
286 }
170 } 287 }
171} \ No newline at end of file 288}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiLinkingTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiLinkingTests.cs
index ac9f93b..14b1890 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiLinkingTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiLinkingTests.cs
@@ -45,7 +45,6 @@ using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 45using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
46using OpenSim.Services.Interfaces; 46using OpenSim.Services.Interfaces;
47using OpenSim.Tests.Common; 47using OpenSim.Tests.Common;
48using OpenSim.Tests.Common.Mock;
49 48
50namespace OpenSim.Region.ScriptEngine.Shared.Tests 49namespace OpenSim.Region.ScriptEngine.Shared.Tests
51{ 50{
@@ -93,7 +92,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
93 // FIXME: This should really be a script item (with accompanying script) 92 // FIXME: This should really be a script item (with accompanying script)
94 TaskInventoryItem grp1Item 93 TaskInventoryItem grp1Item
95 = TaskInventoryHelpers.AddNotecard( 94 = TaskInventoryHelpers.AddNotecard(
96 m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!"); 95 m_scene.AssetService, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
97 grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; 96 grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
98 97
99 SceneObjectGroup grp2 = SceneHelpers.CreateSceneObject(2, ownerId, "grp2-", 0x20); 98 SceneObjectGroup grp2 = SceneHelpers.CreateSceneObject(2, ownerId, "grp2-", 0x20);
@@ -105,7 +104,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
105 m_scene.AddSceneObject(grp2); 104 m_scene.AddSceneObject(grp2);
106 105
107 LSL_Api apiGrp1 = new LSL_Api(); 106 LSL_Api apiGrp1 = new LSL_Api();
108 apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item, null); 107 apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
109 108
110 apiGrp1.llCreateLink(grp2.UUID.ToString(), ScriptBaseClass.TRUE); 109 apiGrp1.llCreateLink(grp2.UUID.ToString(), ScriptBaseClass.TRUE);
111 110
@@ -127,12 +126,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
127 // FIXME: This should really be a script item (with accompanying script) 126 // FIXME: This should really be a script item (with accompanying script)
128 TaskInventoryItem grp1Item 127 TaskInventoryItem grp1Item
129 = TaskInventoryHelpers.AddNotecard( 128 = TaskInventoryHelpers.AddNotecard(
130 m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!"); 129 m_scene.AssetService, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
131 130
132 grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; 131 grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
133 132
134 LSL_Api apiGrp1 = new LSL_Api(); 133 LSL_Api apiGrp1 = new LSL_Api();
135 apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item, null); 134 apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
136 135
137 apiGrp1.llBreakLink(2); 136 apiGrp1.llBreakLink(2);
138 137
@@ -141,5 +140,47 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
141 SceneObjectGroup grp2 = m_scene.GetSceneObjectGroup("grp1-Part1"); 140 SceneObjectGroup grp2 = m_scene.GetSceneObjectGroup("grp1-Part1");
142 Assert.That(grp2, Is.Not.Null); 141 Assert.That(grp2, Is.Not.Null);
143 } 142 }
143
144 [Test]
145 public void TestllBreakAllLinks()
146 {
147 TestHelpers.InMethod();
148
149 UUID ownerId = TestHelpers.ParseTail(0x1);
150
151 SceneObjectGroup grp1 = SceneHelpers.CreateSceneObject(3, ownerId, "grp1-", 0x10);
152 grp1.AbsolutePosition = new Vector3(10, 10, 10);
153 m_scene.AddSceneObject(grp1);
154
155 // FIXME: This should really be a script item (with accompanying script)
156 TaskInventoryItem grp1Item
157 = TaskInventoryHelpers.AddNotecard(
158 m_scene.AssetService, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
159
160 grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
161
162 LSL_Api apiGrp1 = new LSL_Api();
163 apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
164
165 apiGrp1.llBreakAllLinks();
166
167 {
168 SceneObjectGroup nowGrp = m_scene.GetSceneObjectGroup("grp1-Part1");
169 Assert.That(nowGrp, Is.Not.Null);
170 Assert.That(nowGrp.Parts.Length, Is.EqualTo(1));
171 }
172
173 {
174 SceneObjectGroup nowGrp = m_scene.GetSceneObjectGroup("grp1-Part2");
175 Assert.That(nowGrp, Is.Not.Null);
176 Assert.That(nowGrp.Parts.Length, Is.EqualTo(1));
177 }
178
179 {
180 SceneObjectGroup nowGrp = m_scene.GetSceneObjectGroup("grp1-Part3");
181 Assert.That(nowGrp, Is.Not.Null);
182 Assert.That(nowGrp.Parts.Length, Is.EqualTo(1));
183 }
184 }
144 } 185 }
145} \ No newline at end of file 186}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs
index 60de5cb..34a29e6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs
@@ -37,7 +37,6 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
37using OpenSim.Region.ScriptEngine.Shared.Instance; 37using OpenSim.Region.ScriptEngine.Shared.Instance;
38using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 38using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
39using OpenMetaverse; 39using OpenMetaverse;
40using OpenSim.Tests.Common.Mock;
41 40
42using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat; 41using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
43using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; 42using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
@@ -68,7 +67,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
68 engine.AddRegion(scene); 67 engine.AddRegion(scene);
69 68
70 m_lslApi = new LSL_Api(); 69 m_lslApi = new LSL_Api();
71 m_lslApi.Initialize(engine, part, null, null); 70 m_lslApi.Initialize(engine, part, null);
72 } 71 }
73 72
74 [Test] 73 [Test]
@@ -134,4 +133,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
134 } 133 }
135 } 134 }
136 } 135 }
137 } \ No newline at end of file 136 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiNotecardTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiNotecardTests.cs
index 42d1b3b..9ab3115 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiNotecardTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiNotecardTests.cs
@@ -18,7 +18,6 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
18using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 18using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
19using OpenSim.Services.Interfaces; 19using OpenSim.Services.Interfaces;
20using OpenSim.Tests.Common; 20using OpenSim.Tests.Common;
21using OpenSim.Tests.Common.Mock;
22 21
23namespace OpenSim.Region.ScriptEngine.Shared.Tests 22namespace OpenSim.Region.ScriptEngine.Shared.Tests
24{ 23{
@@ -62,12 +61,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
62 SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine); 61 SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine);
63 62
64 m_so = SceneHelpers.AddSceneObject(m_scene); 63 m_so = SceneHelpers.AddSceneObject(m_scene);
65 m_scriptItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart); 64 m_scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, m_so.RootPart);
66 65
67 // This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm. 66 // This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm.
68 // Possibly this could be done and we could obtain it directly from the MockScriptEngine. 67 // Possibly this could be done and we could obtain it directly from the MockScriptEngine.
69 m_lslApi = new LSL_Api(); 68 m_lslApi = new LSL_Api();
70 m_lslApi.Initialize(m_engine, m_so.RootPart, m_scriptItem, null); 69 m_lslApi.Initialize(m_engine, m_so.RootPart, m_scriptItem);
71 } 70 }
72 71
73 [Test] 72 [Test]
@@ -78,7 +77,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
78 string[] ncLines = { "One", "Twoè", "Three" }; 77 string[] ncLines = { "One", "Twoè", "Three" };
79 78
80 TaskInventoryItem ncItem 79 TaskInventoryItem ncItem
81 = TaskInventoryHelpers.AddNotecard(m_scene, m_so.RootPart, "nc", "1", "10", string.Join("\n", ncLines)); 80 = TaskInventoryHelpers.AddNotecard(m_scene.AssetService, m_so.RootPart, "nc", "1", "10", string.Join("\n", ncLines));
82 81
83 AssertValidNotecardLine(ncItem.Name, 0, ncLines[0]); 82 AssertValidNotecardLine(ncItem.Name, 0, ncLines[0]);
84 AssertValidNotecardLine(ncItem.Name, 2, ncLines[2]); 83 AssertValidNotecardLine(ncItem.Name, 2, ncLines[2]);
@@ -103,7 +102,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
103 { 102 {
104 TestHelpers.InMethod(); 103 TestHelpers.InMethod();
105 104
106 TaskInventoryItem ncItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart, "nc1", "Not important"); 105 TaskInventoryItem ncItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, m_so.RootPart, "nc1", "Not important");
107 106
108 AssertInValidNotecardLine(ncItem.Name, 0); 107 AssertInValidNotecardLine(ncItem.Name, 0);
109 } 108 }
@@ -267,4 +266,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
267// } 266// }
268// } 267// }
269 } 268 }
270} \ No newline at end of file 269}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiObjectTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiObjectTests.cs
index ed61dc0..d957bf2 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiObjectTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiObjectTests.cs
@@ -45,7 +45,6 @@ using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 45using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
46using OpenSim.Services.Interfaces; 46using OpenSim.Services.Interfaces;
47using OpenSim.Tests.Common; 47using OpenSim.Tests.Common;
48using OpenSim.Tests.Common.Mock;
49using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; 48using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
50using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list; 49using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
51 50
@@ -90,7 +89,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
90 m_scene.AddSceneObject(grp1); 89 m_scene.AddSceneObject(grp1);
91 90
92 LSL_Api apiGrp1 = new LSL_Api(); 91 LSL_Api apiGrp1 = new LSL_Api();
93 apiGrp1.Initialize(m_engine, grp1.RootPart, null, null); 92 apiGrp1.Initialize(m_engine, grp1.RootPart, null);
94 93
95 // Check simple 1 prim case 94 // Check simple 1 prim case
96 { 95 {
@@ -168,7 +167,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
168 Assert.That(scene.AddNewSceneObject(new SceneObjectGroup(part1), false), Is.True); 167 Assert.That(scene.AddNewSceneObject(new SceneObjectGroup(part1), false), Is.True);
169 168
170 LSL_Api apiGrp1 = new LSL_Api(); 169 LSL_Api apiGrp1 = new LSL_Api();
171 apiGrp1.Initialize(m_engine, part1, null, null); 170 apiGrp1.Initialize(m_engine, part1, null);
172 171
173 // Note that prim hollow check is passed with the other prim params in order to allow the 172 // Note that prim hollow check is passed with the other prim params in order to allow the
174 // specification of a different check value from the prim param. A cylinder, prism, sphere, 173 // specification of a different check value from the prim param. A cylinder, prism, sphere,
@@ -210,11 +209,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
210 ScriptBaseClass.PRIM_TYPE_BOX, // Prim type 209 ScriptBaseClass.PRIM_TYPE_BOX, // Prim type
211 ScriptBaseClass.PRIM_HOLE_TRIANGLE, // Prim hole type 210 ScriptBaseClass.PRIM_HOLE_TRIANGLE, // Prim hole type
212 new LSL_Types.Vector3(0.0d, 1.0d, 0.0d), // Prim cut 211 new LSL_Types.Vector3(0.0d, 1.0d, 0.0d), // Prim cut
213 0.95f, // Prim hollow 212 0.99f, // Prim hollow
214 new LSL_Types.Vector3(1.0d, 0.0d, 0.0d), // Prim twist 213 new LSL_Types.Vector3(1.0d, 0.0d, 0.0d), // Prim twist
215 new LSL_Types.Vector3(1.0d, 1.0d, 0.0d), // Prim taper 214 new LSL_Types.Vector3(1.0d, 1.0d, 0.0d), // Prim taper
216 new LSL_Types.Vector3(0.0d, 0.0d, 0.0d), // Prim shear 215 new LSL_Types.Vector3(0.0d, 0.0d, 0.0d), // Prim shear
217 0.95f); // Prim hollow check 216 0.99f); // Prim hollow check
218 217
219 // Test a tube. 218 // Test a tube.
220 CheckllSetPrimitiveParams( 219 CheckllSetPrimitiveParams(
@@ -247,7 +246,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
247 ScriptBaseClass.PRIM_TYPE_PRISM, // Prim type 246 ScriptBaseClass.PRIM_TYPE_PRISM, // Prim type
248 ScriptBaseClass.PRIM_HOLE_SQUARE, // Prim hole type 247 ScriptBaseClass.PRIM_HOLE_SQUARE, // Prim hole type
249 new LSL_Types.Vector3(0.0d, 1.0d, 0.0d), // Prim cut 248 new LSL_Types.Vector3(0.0d, 1.0d, 0.0d), // Prim cut
250 0.95f, // Prim hollow 249 0.99f, // Prim hollow
251 // Expression for x selected to test precision problems during sbyte 250 // Expression for x selected to test precision problems during sbyte
252 // cast in SetPrimitiveShapeBlockParams. 251 // cast in SetPrimitiveShapeBlockParams.
253 new LSL_Types.Vector3(0.7d + 0.2d, 0.0d, 0.0d), // Prim twist 252 new LSL_Types.Vector3(0.7d + 0.2d, 0.0d, 0.0d), // Prim twist
@@ -396,4 +395,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
396 } 395 }
397 396
398 } 397 }
399} \ No newline at end of file 398}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
index 7e3726a..d929da8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
@@ -37,7 +37,6 @@ using OpenSim.Region.ScriptEngine.Shared.Instance;
37using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 37using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
38using OpenMetaverse; 38using OpenMetaverse;
39using System; 39using System;
40using OpenSim.Tests.Common.Mock;
41 40
42namespace OpenSim.Region.ScriptEngine.Shared.Tests 41namespace OpenSim.Region.ScriptEngine.Shared.Tests
43{ 42{
@@ -66,7 +65,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
66 engine.AddRegion(scene); 65 engine.AddRegion(scene);
67 66
68 m_lslApi = new LSL_Api(); 67 m_lslApi = new LSL_Api();
69 m_lslApi.Initialize(engine, part, null, null); 68 m_lslApi.Initialize(engine, part, null);
70 } 69 }
71 70
72 [Test] 71 [Test]
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiUserTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiUserTests.cs
new file mode 100644
index 0000000..a8964bf
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiUserTests.cs
@@ -0,0 +1,157 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Threading;
31using Nini.Config;
32using NUnit.Framework;
33using OpenMetaverse;
34using OpenSim.Framework;
35using OpenSim.Region.Framework.Scenes;
36using OpenSim.Region.ScriptEngine.Shared.Api;
37using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
38using OpenSim.Services.Interfaces;
39using OpenSim.Tests.Common;
40
41namespace OpenSim.Region.ScriptEngine.Shared.Tests
42{
43 [TestFixture]
44 public class LSL_ApiUserTests : OpenSimTestCase
45 {
46 private Scene m_scene;
47 private MockScriptEngine m_engine;
48
49 [SetUp]
50 public override void SetUp()
51 {
52 base.SetUp();
53
54 m_engine = new MockScriptEngine();
55
56 m_scene = new SceneHelpers().SetupScene();
57 SceneHelpers.SetupSceneModules(m_scene, m_engine);
58 }
59
60 [Test]
61 public void TestLlRequestAgentDataOnline()
62 {
63 TestHelpers.InMethod();
64// TestHelpers.EnableLogging();
65
66 UUID userId = TestHelpers.ParseTail(0x1);
67
68 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, userId);
69
70 SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene).RootPart;
71 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, part);
72
73 LSL_Api apiGrp1 = new LSL_Api();
74 apiGrp1.Initialize(m_engine, part, scriptItem);
75
76 // Initially long timeout to test cache
77 apiGrp1.LlRequestAgentDataCacheTimeoutMs = 20000;
78
79 // Offline test
80 {
81 apiGrp1.llRequestAgentData(userId.ToString(), ScriptBaseClass.DATA_ONLINE);
82
83 Assert.That(m_engine.PostedEvents.ContainsKey(scriptItem.ItemID));
84
85 List<EventParams> events = m_engine.PostedEvents[scriptItem.ItemID];
86 Assert.That(events.Count, Is.EqualTo(1));
87 EventParams eventParams = events[0];
88 Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
89
90 string data = eventParams.Params[1].ToString();
91 Assert.AreEqual(0, int.Parse(data));
92
93 m_engine.PostedEvents.Clear();
94 }
95
96 // Online test. Should get the 'wrong' result because of caching.
97 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1);
98
99 {
100 apiGrp1.llRequestAgentData(userId.ToString(), ScriptBaseClass.DATA_ONLINE);
101
102 Assert.That(m_engine.PostedEvents.ContainsKey(scriptItem.ItemID));
103
104 List<EventParams> events = m_engine.PostedEvents[scriptItem.ItemID];
105 Assert.That(events.Count, Is.EqualTo(1));
106 EventParams eventParams = events[0];
107 Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
108
109 string data = eventParams.Params[1].ToString();
110 Assert.AreEqual(0, int.Parse(data));
111
112 m_engine.PostedEvents.Clear();
113 }
114
115 apiGrp1.LlRequestAgentDataCacheTimeoutMs = 1;
116
117 // Make absolutely sure that we should trigger cache timeout.
118 Thread.Sleep(apiGrp1.LlRequestAgentDataCacheTimeoutMs + 1);
119
120 {
121 apiGrp1.llRequestAgentData(userId.ToString(), ScriptBaseClass.DATA_ONLINE);
122
123 Assert.That(m_engine.PostedEvents.ContainsKey(scriptItem.ItemID));
124
125 List<EventParams> events = m_engine.PostedEvents[scriptItem.ItemID];
126 Assert.That(events.Count, Is.EqualTo(1));
127 EventParams eventParams = events[0];
128 Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
129
130 string data = eventParams.Params[1].ToString();
131 Assert.AreEqual(1, int.Parse(data));
132
133 m_engine.PostedEvents.Clear();
134 }
135
136 m_scene.CloseAgent(userId, false);
137
138 Thread.Sleep(apiGrp1.LlRequestAgentDataCacheTimeoutMs + 1 + 1);
139
140 {
141 apiGrp1.llRequestAgentData(userId.ToString(), ScriptBaseClass.DATA_ONLINE);
142
143 Assert.That(m_engine.PostedEvents.ContainsKey(scriptItem.ItemID));
144
145 List<EventParams> events = m_engine.PostedEvents[scriptItem.ItemID];
146 Assert.That(events.Count, Is.EqualTo(1));
147 EventParams eventParams = events[0];
148 Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
149
150 string data = eventParams.Params[1].ToString();
151 Assert.AreEqual(0, int.Parse(data));
152
153 m_engine.PostedEvents.Clear();
154 }
155 }
156 }
157}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs
index c88bad5..2f9a564 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs
@@ -44,7 +44,6 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
44using OpenSim.Region.ScriptEngine.Shared.Instance; 44using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Services.Interfaces; 45using OpenSim.Services.Interfaces;
46using OpenSim.Tests.Common; 46using OpenSim.Tests.Common;
47using OpenSim.Tests.Common.Mock;
48 47
49namespace OpenSim.Region.ScriptEngine.Shared.Tests 48namespace OpenSim.Region.ScriptEngine.Shared.Tests
50{ 49{
@@ -94,7 +93,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
94 m_scene.AddSceneObject(so); 93 m_scene.AddSceneObject(so);
95 94
96 OSSL_Api osslApi = new OSSL_Api(); 95 OSSL_Api osslApi = new OSSL_Api();
97 osslApi.Initialize(m_engine, part, null, null); 96 osslApi.Initialize(m_engine, part, null);
98 97
99 string notecardName = "appearanceNc"; 98 string notecardName = "appearanceNc";
100 99
@@ -135,7 +134,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
135 m_scene.AddSceneObject(so); 134 m_scene.AddSceneObject(so);
136 135
137 OSSL_Api osslApi = new OSSL_Api(); 136 OSSL_Api osslApi = new OSSL_Api();
138 osslApi.Initialize(m_engine, part, null, null); 137 osslApi.Initialize(m_engine, part, null);
139 138
140 string notecardName = "appearanceNc"; 139 string notecardName = "appearanceNc";
141 140
@@ -159,4 +158,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
159 Assert.That(savedAppearance.AvatarHeight, Is.EqualTo(sp.Appearance.AvatarHeight)); 158 Assert.That(savedAppearance.AvatarHeight, Is.EqualTo(sp.Appearance.AvatarHeight));
160 } 159 }
161 } 160 }
162} \ No newline at end of file 161}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAttachmentTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAttachmentTests.cs
index e422f5b..b6b3f12 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAttachmentTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAttachmentTests.cs
@@ -44,7 +44,6 @@ using OpenSim.Region.ScriptEngine.Shared.Api;
44using OpenSim.Region.ScriptEngine.Shared.Instance; 44using OpenSim.Region.ScriptEngine.Shared.Instance;
45using OpenSim.Services.Interfaces; 45using OpenSim.Services.Interfaces;
46using OpenSim.Tests.Common; 46using OpenSim.Tests.Common;
47using OpenSim.Tests.Common.Mock;
48 47
49namespace OpenSim.Region.ScriptEngine.Shared.Tests 48namespace OpenSim.Region.ScriptEngine.Shared.Tests
50{ 49{
@@ -97,16 +96,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
97 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1); 96 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1);
98 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID); 97 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID);
99 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID); 98 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
100 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart); 99 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
101 100
102 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 101 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
103 OSSL_Api osslApi = new OSSL_Api(); 102 OSSL_Api osslApi = new OSSL_Api();
104 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 103 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
105 104
106// SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, ua1.PrincipalID); 105// SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, ua1.PrincipalID);
107 106
108 // Create an object embedded inside the first 107 // Create an object embedded inside the first
109 TaskInventoryHelpers.AddSceneObject(m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID); 108 TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
110 109
111 osslApi.osForceAttachToAvatarFromInventory(taskInvObjItemName, (int)attachPoint); 110 osslApi.osForceAttachToAvatarFromInventory(taskInvObjItemName, (int)attachPoint);
112 111
@@ -143,15 +142,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
143 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1); 142 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1);
144 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID); 143 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID);
145 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID); 144 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
146 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart); 145 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
147 146
148 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 147 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
149 OSSL_Api osslApi = new OSSL_Api(); 148 OSSL_Api osslApi = new OSSL_Api();
150 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 149 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
151 150
152 // Create an object embedded inside the first 151 // Create an object embedded inside the first
153 TaskInventoryHelpers.AddNotecard( 152 TaskInventoryHelpers.AddNotecard(
154 m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, TestHelpers.ParseTail(0x900), "Hello World!"); 153 m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, TestHelpers.ParseTail(0x900), "Hello World!");
155 154
156 bool exceptionCaught = false; 155 bool exceptionCaught = false;
157 156
@@ -191,15 +190,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
191 190
192 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1); 191 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1);
193 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID); 192 SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
194 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart); 193 TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
195 194
196 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 195 new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
197 OSSL_Api osslApi = new OSSL_Api(); 196 OSSL_Api osslApi = new OSSL_Api();
198 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null); 197 osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
199 198
200 // Create an object embedded inside the first 199 // Create an object embedded inside the first
201 TaskInventoryHelpers.AddSceneObject( 200 TaskInventoryHelpers.AddSceneObject(
202 m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID); 201 m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
203 202
204 ScenePresence sp2 = SceneHelpers.AddScenePresence(m_scene, ua2); 203 ScenePresence sp2 = SceneHelpers.AddScenePresence(m_scene, ua2);
205 204
@@ -230,4 +229,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
230 Assert.That(sp2.Appearance.GetAttachpoint(attachmentsInAppearance2[0].ItemID), Is.EqualTo((uint)attachPoint)); 229 Assert.That(sp2.Appearance.GetAttachpoint(attachmentsInAppearance2[0].ItemID), Is.EqualTo((uint)attachPoint));
231 } 230 }
232 } 231 }
233} \ No newline at end of file 232}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
index 495e684..99bff83 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
@@ -46,7 +46,6 @@ using OpenSim.Region.ScriptEngine.Shared.Instance;
46using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 46using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
47using OpenSim.Services.Interfaces; 47using OpenSim.Services.Interfaces;
48using OpenSim.Tests.Common; 48using OpenSim.Tests.Common;
49using OpenSim.Tests.Common.Mock;
50 49
51namespace OpenSim.Region.ScriptEngine.Shared.Tests 50namespace OpenSim.Region.ScriptEngine.Shared.Tests
52{ 51{
@@ -100,7 +99,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
100 m_scene.AddSceneObject(so); 99 m_scene.AddSceneObject(so);
101 100
102 OSSL_Api osslApi = new OSSL_Api(); 101 OSSL_Api osslApi = new OSSL_Api();
103 osslApi.Initialize(m_engine, part, null, null); 102 osslApi.Initialize(m_engine, part, null);
104 103
105 string notecardName = "appearanceNc"; 104 string notecardName = "appearanceNc";
106 osslApi.osOwnerSaveAppearance(notecardName); 105 osslApi.osOwnerSaveAppearance(notecardName);
@@ -126,7 +125,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
126 m_scene.AddSceneObject(so); 125 m_scene.AddSceneObject(so);
127 126
128 OSSL_Api osslApi = new OSSL_Api(); 127 OSSL_Api osslApi = new OSSL_Api();
129 osslApi.Initialize(m_engine, so.RootPart, null, null); 128 osslApi.Initialize(m_engine, so.RootPart, null);
130 129
131 bool gotExpectedException = false; 130 bool gotExpectedException = false;
132 try 131 try
@@ -161,7 +160,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
161 m_scene.AddSceneObject(so); 160 m_scene.AddSceneObject(so);
162 161
163 OSSL_Api osslApi = new OSSL_Api(); 162 OSSL_Api osslApi = new OSSL_Api();
164 osslApi.Initialize(m_engine, part, null, null); 163 osslApi.Initialize(m_engine, part, null);
165 164
166 string notecardName = "appearanceNc"; 165 string notecardName = "appearanceNc";
167 osslApi.osOwnerSaveAppearance(notecardName); 166 osslApi.osOwnerSaveAppearance(notecardName);
@@ -196,7 +195,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
196 m_scene.AddSceneObject(so); 195 m_scene.AddSceneObject(so);
197 196
198 OSSL_Api osslApi = new OSSL_Api(); 197 OSSL_Api osslApi = new OSSL_Api();
199 osslApi.Initialize(m_engine, part, null, null); 198 osslApi.Initialize(m_engine, part, null);
200 199
201 osslApi.osOwnerSaveAppearance(firstAppearanceNcName); 200 osslApi.osOwnerSaveAppearance(firstAppearanceNcName);
202 201
@@ -234,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
234 m_scene.AddSceneObject(so); 233 m_scene.AddSceneObject(so);
235 234
236 OSSL_Api osslApi = new OSSL_Api(); 235 OSSL_Api osslApi = new OSSL_Api();
237 osslApi.Initialize(m_engine, part, null, null); 236 osslApi.Initialize(m_engine, part, null);
238 237
239 osslApi.osOwnerSaveAppearance(firstAppearanceNcName); 238 osslApi.osOwnerSaveAppearance(firstAppearanceNcName);
240 239
@@ -286,10 +285,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
286 m_scene.AddSceneObject(otherSo); 285 m_scene.AddSceneObject(otherSo);
287 286
288 OSSL_Api osslApi = new OSSL_Api(); 287 OSSL_Api osslApi = new OSSL_Api();
289 osslApi.Initialize(m_engine, part, null, null); 288 osslApi.Initialize(m_engine, part, null);
290 289
291 OSSL_Api otherOsslApi = new OSSL_Api(); 290 OSSL_Api otherOsslApi = new OSSL_Api();
292 otherOsslApi.Initialize(m_engine, otherPart, null, null); 291 otherOsslApi.Initialize(m_engine, otherPart, null);
293 292
294 string notecardName = "appearanceNc"; 293 string notecardName = "appearanceNc";
295 osslApi.osOwnerSaveAppearance(notecardName); 294 osslApi.osOwnerSaveAppearance(notecardName);
@@ -333,7 +332,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
333 m_scene.AddSceneObject(so); 332 m_scene.AddSceneObject(so);
334 333
335 OSSL_Api osslApi = new OSSL_Api(); 334 OSSL_Api osslApi = new OSSL_Api();
336 osslApi.Initialize(m_engine, part, null, null); 335 osslApi.Initialize(m_engine, part, null);
337 336
338 string notecardName = "appearanceNc"; 337 string notecardName = "appearanceNc";
339 osslApi.osOwnerSaveAppearance(notecardName); 338 osslApi.osOwnerSaveAppearance(notecardName);
@@ -349,4 +348,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
349 Assert.That(npc, Is.Null); 348 Assert.That(npc, Is.Null);
350 } 349 }
351 } 350 }
352} \ No newline at end of file 351}
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs
index 87ea9c4..0094af6 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs
@@ -1,6 +1,7 @@
1using System.Reflection; 1using System.Reflection;
2using System.Runtime.CompilerServices; 2using System.Runtime.CompilerServices;
3using System.Runtime.InteropServices; 3using System.Runtime.InteropServices;
4using Mono.Addins;
4 5
5// General Information about an assembly is controlled through the following 6// General Information about an assembly is controlled through the following
6// set of attributes. Change these attribute values to modify the information 7// set of attributes. Change these attribute values to modify the information
@@ -29,5 +30,7 @@ using System.Runtime.InteropServices;
29// Build Number 30// Build Number
30// Revision 31// Revision
31// 32//
32[assembly: AssemblyVersion("0.8.0.*")] 33[assembly: AssemblyVersion("0.8.2.*")]
33 34
35[assembly: Addin("OpenSim.Region.ScriptEngine.XEngine", OpenSim.VersionInfo.VersionNumber)]
36[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)]
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Resources/XEngine.addin.xml b/OpenSim/Region/ScriptEngine/XEngine/Resources/XEngine.addin.xml
deleted file mode 100644
index 96c9c3a..0000000
--- a/OpenSim/Region/ScriptEngine/XEngine/Resources/XEngine.addin.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<Addin id="OpenSim.Region.ScriptEngine.XEngine" version="0.2">
2 <Runtime>
3 <Import assembly="OpenSim.Region.ScriptEngine.XEngine.dll"/>
4 </Runtime>
5
6 <Dependencies>
7 <Addin id="OpenSim" version="0.5" />
8 </Dependencies>
9
10 <Extension path = "/OpenSim/RegionModules">
11 <RegionModule id="XEngine" type="OpenSim.Region.ScriptEngine.XEngine.XEngine" />
12 </Extension>
13</Addin>
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineBasicTests.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineBasicTests.cs
index 5abfe9a..878e571 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineBasicTests.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineBasicTests.cs
@@ -36,15 +36,14 @@ using OpenSim.Region.CoreModules.Scripting.WorldComm;
36using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
38using OpenSim.Tests.Common; 38using OpenSim.Tests.Common;
39using OpenSim.Tests.Common.Mock;
40 39
41namespace OpenSim.Region.ScriptEngine.XEngine.Tests 40namespace OpenSim.Region.ScriptEngine.XEngine.Tests
42{ 41{
43 /// <summary> 42 /// <summary>
44 /// XEngine tests. 43 /// Basic XEngine tests.
45 /// </summary> 44 /// </summary>
46 [TestFixture] 45 [TestFixture]
47 public class XEngineTest : OpenSimTestCase 46 public class XEngineBasicTests : OpenSimTestCase
48 { 47 {
49 private TestScene m_scene; 48 private TestScene m_scene;
50 private XEngine m_xEngine; 49 private XEngine m_xEngine;
@@ -87,7 +86,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
87 public void TestCompileAndStartScript() 86 public void TestCompileAndStartScript()
88 { 87 {
89 TestHelpers.InMethod(); 88 TestHelpers.InMethod();
90// log4net.Config.XmlConfigurator.Configure(); 89 TestHelpers.EnableLogging();
91 90
92 UUID userId = TestHelpers.ParseTail(0x1); 91 UUID userId = TestHelpers.ParseTail(0x1);
93// UUID objectId = TestHelpers.ParseTail(0x100); 92// UUID objectId = TestHelpers.ParseTail(0x100);
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineCrossingTests.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineCrossingTests.cs
new file mode 100644
index 0000000..587695f
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineCrossingTests.cs
@@ -0,0 +1,195 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Threading;
30using Nini.Config;
31using NUnit.Framework;
32using OpenMetaverse;
33using OpenSim.Framework;
34using OpenSim.Region.CoreModules.Framework.EntityTransfer;
35using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Region.ScriptEngine.Shared;
38using OpenSim.Tests.Common;
39
40namespace OpenSim.Region.ScriptEngine.XEngine.Tests
41{
42 /// <summary>
43 /// XEngine tests connected with crossing scripts between regions.
44 /// </summary>
45 [TestFixture]
46 public class XEngineCrossingTests : OpenSimTestCase
47 {
48 [TestFixtureSetUp]
49 public void FixtureInit()
50 {
51 // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
52 Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
53 }
54
55 [TestFixtureTearDown]
56 public void TearDown()
57 {
58 // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
59 // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
60 // tests really shouldn't).
61 Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
62 }
63
64 /// <summary>
65 /// Test script state preservation when a script crosses between regions on the same simulator.
66 /// </summary>
67 [Test]
68 public void TestScriptCrossOnSameSimulator()
69 {
70 TestHelpers.InMethod();
71// TestHelpers.EnableLogging();
72
73 UUID userId = TestHelpers.ParseTail(0x1);
74 int sceneObjectIdTail = 0x2;
75
76 EntityTransferModule etmA = new EntityTransferModule();
77 EntityTransferModule etmB = new EntityTransferModule();
78 LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule();
79 XEngine xEngineA = new XEngine();
80 XEngine xEngineB = new XEngine();
81 xEngineA.DebugLevel = 1;
82 xEngineB.DebugLevel = 1;
83
84 IConfigSource configSource = new IniConfigSource();
85
86 IConfig startupConfig = configSource.AddConfig("Startup");
87 startupConfig.Set("DefaultScriptEngine", "XEngine");
88
89 IConfig xEngineConfig = configSource.AddConfig("XEngine");
90 xEngineConfig.Set("Enabled", "true");
91 xEngineConfig.Set("StartDelay", "0");
92
93 // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
94 // to AssemblyResolver.OnAssemblyResolve fails.
95 xEngineConfig.Set("AppDomainLoading", "false");
96
97 IConfig modulesConfig = configSource.AddConfig("Modules");
98 modulesConfig.Set("EntityTransferModule", etmA.Name);
99 modulesConfig.Set("SimulationServices", lscm.Name);
100
101 SceneHelpers sh = new SceneHelpers();
102 TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000, configSource);
103 TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999, configSource);
104
105 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, configSource, lscm);
106 SceneHelpers.SetupSceneModules(sceneA, configSource, etmA, xEngineA);
107 SceneHelpers.SetupSceneModules(sceneB, configSource, etmB, xEngineB);
108 sceneA.StartScripts();
109 sceneB.StartScripts();
110
111 SceneObjectGroup soSceneA = SceneHelpers.AddSceneObject(sceneA, 1, userId, "so1-", sceneObjectIdTail);
112 soSceneA.AbsolutePosition = new Vector3(128, 10, 20);
113
114 // CREATE SCRIPT TODO
115 InventoryItemBase scriptItemSceneA = new InventoryItemBase();
116 // itemTemplate.ID = itemId;
117 scriptItemSceneA.Name = "script1";
118 scriptItemSceneA.Folder = soSceneA.UUID;
119 scriptItemSceneA.InvType = (int)InventoryType.LSL;
120
121 AutoResetEvent chatEvent = new AutoResetEvent(false);
122 OSChatMessage messageReceived = null;
123 sceneA.EventManager.OnChatFromWorld += (s, m) => { messageReceived = m; chatEvent.Set(); };
124
125 sceneA.RezNewScript(userId, scriptItemSceneA,
126@"integer c = 0;
127
128default
129{
130 state_entry()
131 {
132 llSay(0, ""Script running"");
133 }
134
135 changed(integer change)
136 {
137 llSay(0, ""Changed"");
138 }
139
140 touch_start(integer n)
141 {
142 c = c + 1;
143 llSay(0, (string)c);
144 }
145}");
146
147 chatEvent.WaitOne(60000);
148
149 Assert.That(messageReceived, Is.Not.Null, "No chat message received.");
150 Assert.That(messageReceived.Message, Is.EqualTo("Script running"));
151
152 {
153 // XXX: Should not be doing this so directly. Should call some variant of EventManager.touch() instead.
154 DetectParams[] det = new DetectParams[1];
155 det[0] = new DetectParams();
156 det[0].Key = userId;
157 det[0].Populate(sceneA);
158
159 EventParams ep = new EventParams("touch_start", new Object[] { new LSL_Types.LSLInteger(1) }, det);
160
161 xEngineA.PostObjectEvent(soSceneA.LocalId, ep);
162 chatEvent.WaitOne(60000);
163
164 Assert.That(messageReceived.Message, Is.EqualTo("1"));
165 }
166
167 sceneB.EventManager.OnChatFromWorld += (s, m) => { messageReceived = m; chatEvent.Set(); };
168
169 // Cross with a negative value
170 soSceneA.AbsolutePosition = new Vector3(128, -10, 20);
171
172 chatEvent.WaitOne(60000);
173 Assert.That(messageReceived.Message, Is.EqualTo("Changed"));
174
175 // TEST sending event to moved prim and output
176 {
177 SceneObjectGroup soSceneB = sceneB.GetSceneObjectGroup(soSceneA.Name);
178 TaskInventoryItem scriptItemSceneB = soSceneB.RootPart.Inventory.GetInventoryItem(scriptItemSceneA.Name);
179
180 // XXX: Should not be doing this so directly. Should call some variant of EventManager.touch() instead.
181 DetectParams[] det = new DetectParams[1];
182 det[0] = new DetectParams();
183 det[0].Key = userId;
184 det[0].Populate(sceneB);
185
186 EventParams ep = new EventParams("touch_start", new Object[] { new LSL_Types.LSLInteger(1) }, det);
187
188 xEngineB.PostObjectEvent(soSceneB.LocalId, ep);
189 chatEvent.WaitOne(60000);
190
191 Assert.That(messageReceived.Message, Is.EqualTo("2"));
192 }
193 }
194 }
195} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs
new file mode 100644
index 0000000..2ef4058
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs
@@ -0,0 +1,152 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Linq;
32using System.Threading;
33using Nini.Config;
34using NUnit.Framework;
35using OpenMetaverse;
36using OpenSim.Framework;
37using OpenSim.Region.CoreModules.Avatar.Attachments;
38using OpenSim.Region.CoreModules.Framework.InventoryAccess;
39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Region.ScriptEngine.XEngine;
41using OpenSim.Services.Interfaces;
42using OpenSim.Tests.Common;
43
44namespace OpenSim.Region.ScriptEngine.Tests
45{
46 [TestFixture]
47 public class XEnginePersistenceTests : OpenSimTestCase
48 {
49 private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
50
51 private void OnChatFromWorld(object sender, OSChatMessage oscm)
52 {
53 // Console.WriteLine("Got chat [{0}]", oscm.Message);
54
55 // m_osChatMessageReceived = oscm;
56 m_chatEvent.Set();
57 }
58
59 private void AddCommonConfig(IConfigSource config, List<object> modules)
60 {
61 config.AddConfig("Modules");
62 config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
63
64 AttachmentsModule attMod = new AttachmentsModule();
65 attMod.DebugLevel = 1;
66 modules.Add(attMod);
67 modules.Add(new BasicInventoryAccessModule());
68 }
69
70 private void AddScriptingConfig(IConfigSource config, XEngine.XEngine xEngine, List<object> modules)
71 {
72 IConfig startupConfig = config.AddConfig("Startup");
73 startupConfig.Set("DefaultScriptEngine", "XEngine");
74
75 IConfig xEngineConfig = config.AddConfig("XEngine");
76 xEngineConfig.Set("Enabled", "true");
77 xEngineConfig.Set("StartDelay", "0");
78
79 // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
80 // to AssemblyResolver.OnAssemblyResolve fails.
81 xEngineConfig.Set("AppDomainLoading", "false");
82
83 modules.Add(xEngine);
84 }
85
86 private Scene CreateScriptingEnabledTestScene(XEngine.XEngine xEngine)
87 {
88 IConfigSource config = new IniConfigSource();
89 List<object> modules = new List<object>();
90
91 AddCommonConfig(config, modules);
92 AddScriptingConfig(config, xEngine, modules);
93
94 Scene scene
95 = new SceneHelpers().SetupScene(
96 "attachments-test-scene", TestHelpers.ParseTail(999), 1000, 1000, config);
97 SceneHelpers.SetupSceneModules(scene, config, modules.ToArray());
98
99 scene.StartScripts();
100
101 return scene;
102 }
103
104 [Test]
105 public void TestScriptedAttachmentPersistence()
106 {
107 TestHelpers.InMethod();
108// TestHelpers.EnableLogging();
109
110 XEngine.XEngine xEngine = new XEngine.XEngine();
111 Scene scene = CreateScriptingEnabledTestScene(xEngine);
112 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
113 ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1);
114
115 SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10);
116 TaskInventoryHelpers.AddScript(
117 scene.AssetService,
118 so.RootPart,
119 "scriptItem",
120 "default { attach(key id) { if (id != NULL_KEY) { llSay(0, \"Hello World\"); } } }");
121
122 InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000);
123
124 // FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running.
125 // In the future, we need to be able to do this programatically more predicably.
126 scene.EventManager.OnChatFromWorld += OnChatFromWorld;
127
128 SceneObjectGroup rezzedSo
129 = scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest);
130 TaskInventoryItem rezzedScriptItem = rezzedSo.RootPart.Inventory.GetInventoryItem("scriptItem");
131
132 // Wait for chat to signal rezzed script has been started.
133 m_chatEvent.WaitOne(60000);
134
135 // Force save
136 xEngine.DoBackup(new Object[] { 0 });
137
138// Console.WriteLine("ItemID {0}", rezzedScriptItem.ItemID);
139//
140// foreach (
141// string s in Directory.EnumerateFileSystemEntries(
142// string.Format("ScriptEngines/{0}", scene.RegionInfo.RegionID)))
143// Console.WriteLine(s);
144
145 Assert.IsFalse(
146 File.Exists(
147 string.Format("ScriptEngines/{0}/{1}.state", scene.RegionInfo.RegionID, rezzedScriptItem.ItemID)));
148
149 scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo);
150 }
151 }
152} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 1831c39..466c190 100644..100755
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -43,6 +43,7 @@ using OpenMetaverse.StructuredData;
43using log4net; 43using log4net;
44using Nini.Config; 44using Nini.Config;
45using Amib.Threading; 45using Amib.Threading;
46using Mono.Addins;
46using OpenSim.Framework; 47using OpenSim.Framework;
47using OpenSim.Framework.Console; 48using OpenSim.Framework.Console;
48using OpenSim.Region.Framework.Scenes; 49using OpenSim.Region.Framework.Scenes;
@@ -61,6 +62,7 @@ using ScriptCompileQueue = OpenSim.Framework.LocklessQueue<object[]>;
61 62
62namespace OpenSim.Region.ScriptEngine.XEngine 63namespace OpenSim.Region.ScriptEngine.XEngine
63{ 64{
65 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "XEngine")]
64 public class XEngine : INonSharedRegionModule, IScriptModule, IScriptEngine 66 public class XEngine : INonSharedRegionModule, IScriptModule, IScriptEngine
65 { 67 {
66 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 68 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -71,7 +73,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
71 /// <remarks> 73 /// <remarks>
72 /// If DebugLevel >= 1, then we log every time that a script is started. 74 /// If DebugLevel >= 1, then we log every time that a script is started.
73 /// </remarks> 75 /// </remarks>
74// public int DebugLevel { get; set; } 76 public int DebugLevel { get; set; }
77
78 /// <summary>
79 /// A parameter to allow us to notify the log if at least one script has a compilation that is not compatible
80 /// with ScriptStopStrategy.
81 /// </summary>
82 public bool HaveNotifiedLogOfScriptStopMistmatch { get; private set; }
75 83
76 private SmartThreadPool m_ThreadPool; 84 private SmartThreadPool m_ThreadPool;
77 private int m_MaxScriptQueue; 85 private int m_MaxScriptQueue;
@@ -87,6 +95,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
87 /// </summary> 95 /// </summary>
88 private int m_StartDelay; 96 private int m_StartDelay;
89 97
98 /// <summary>
99 /// Are we stopping scripts co-operatively by inserting checks in them at C# compile time (true) or aborting
100 /// their threads (false)?
101 /// </summary>
102 private bool m_coopTermination;
103
90 private int m_IdleTimeout; 104 private int m_IdleTimeout;
91 private int m_StackSize; 105 private int m_StackSize;
92 private int m_SleepTime; 106 private int m_SleepTime;
@@ -96,7 +110,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
96 private bool m_InitialStartup = true; 110 private bool m_InitialStartup = true;
97 private int m_ScriptFailCount; // Number of script fails since compile queue was last empty 111 private int m_ScriptFailCount; // Number of script fails since compile queue was last empty
98 private string m_ScriptErrorMessage; 112 private string m_ScriptErrorMessage;
99 private Dictionary<string, string> m_uniqueScripts = new Dictionary<string, string>();
100 private bool m_AppDomainLoading; 113 private bool m_AppDomainLoading;
101 private Dictionary<UUID,ArrayList> m_ScriptErrors = 114 private Dictionary<UUID,ArrayList> m_ScriptErrors =
102 new Dictionary<UUID,ArrayList>(); 115 new Dictionary<UUID,ArrayList>();
@@ -308,12 +321,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
308 m_ScriptConfig = configSource.Configs["XEngine"]; 321 m_ScriptConfig = configSource.Configs["XEngine"];
309 m_ConfigSource = configSource; 322 m_ConfigSource = configSource;
310 323
311 string rawScriptStopStrategy = m_ScriptConfig.GetString("ScriptStopStrategy", "abort"); 324 string rawScriptStopStrategy = m_ScriptConfig.GetString("ScriptStopStrategy", "co-op");
312 325
313 m_log.InfoFormat("[XEngine]: Script stop strategy is {0}", rawScriptStopStrategy); 326 m_log.InfoFormat("[XEngine]: Script stop strategy is {0}", rawScriptStopStrategy);
314 327
315 if (rawScriptStopStrategy == "co-op") 328 if (rawScriptStopStrategy == "co-op")
316 { 329 {
330 m_coopTermination = true;
317 ScriptClassName = "XEngineScript"; 331 ScriptClassName = "XEngineScript";
318 ScriptBaseClassName = typeof(XEngineScriptBase).FullName; 332 ScriptBaseClassName = typeof(XEngineScriptBase).FullName;
319 ScriptBaseClassParameters = typeof(XEngineScriptBase).GetConstructor(new Type[] { typeof(WaitHandle) }).GetParameters(); 333 ScriptBaseClassParameters = typeof(XEngineScriptBase).GetConstructor(new Type[] { typeof(WaitHandle) }).GetParameters();
@@ -457,19 +471,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
457 (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStartScript)); 471 (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStartScript));
458 472
459 MainConsole.Instance.Commands.AddCommand( 473 MainConsole.Instance.Commands.AddCommand(
460 "Scripts", false, "debug scripts log", "debug scripts log <item-id> <log-level>", "Extra debug logging for a script", 474 "Debug", false, "debug scripts log", "debug scripts log <item-id> <log-level>", "Extra debug logging for a particular script.",
461 "Activates or deactivates extra debug logging for the given script.\n" 475 "Activates or deactivates extra debug logging for the given script.\n"
462 + "Level == 0, deactivate extra debug logging.\n" 476 + "Level == 0, deactivate extra debug logging.\n"
463 + "Level >= 1, log state changes.\n" 477 + "Level >= 1, log state changes.\n"
464 + "Level >= 2, log event invocations.\n", 478 + "Level >= 2, log event invocations.\n",
465 HandleDebugScriptLogCommand); 479 HandleDebugScriptLogCommand);
466 480
467// MainConsole.Instance.Commands.AddCommand( 481 MainConsole.Instance.Commands.AddCommand(
468// "Debug", false, "debug xengine", "debug xengine [<level>]", 482 "Debug", false, "debug xengine log", "debug xengine log [<level>]",
469// "Turn on detailed xengine debugging.", 483 "Turn on detailed xengine debugging.",
470// "If level <= 0, then no extra logging is done.\n" 484 "If level <= 0, then no extra logging is done.\n"
471// + "If level >= 1, then we log every time that a script is started.", 485 + "If level >= 1, then we log every time that a script is started.",
472// HandleDebugLevelCommand); 486 HandleDebugLevelCommand);
473 } 487 }
474 488
475 private void HandleDebugScriptLogCommand(string module, string[] args) 489 private void HandleDebugScriptLogCommand(string module, string[] args)
@@ -512,26 +526,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
512 /// </summary> 526 /// </summary>
513 /// <param name="module"></param> 527 /// <param name="module"></param>
514 /// <param name="args"></param> 528 /// <param name="args"></param>
515// private void HandleDebugLevelCommand(string module, string[] args) 529 private void HandleDebugLevelCommand(string module, string[] args)
516// { 530 {
517// if (args.Length == 3) 531 if (args.Length >= 4)
518// { 532 {
519// int newDebug; 533 int newDebug;
520// if (int.TryParse(args[2], out newDebug)) 534 if (ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, args[3], out newDebug))
521// { 535 {
522// DebugLevel = newDebug; 536 DebugLevel = newDebug;
523// MainConsole.Instance.OutputFormat("Debug level set to {0}", newDebug); 537 MainConsole.Instance.OutputFormat("Debug level set to {0} in XEngine for region {1}", newDebug, m_Scene.Name);
524// } 538 }
525// } 539 }
526// else if (args.Length == 2) 540 else if (args.Length == 3)
527// { 541 {
528// MainConsole.Instance.OutputFormat("Current debug level is {0}", DebugLevel); 542 MainConsole.Instance.OutputFormat("Current debug level is {0}", DebugLevel);
529// } 543 }
530// else 544 else
531// { 545 {
532// MainConsole.Instance.Output("Usage: debug xengine 0..1"); 546 MainConsole.Instance.Output("Usage: debug xengine log <level>");
533// } 547 }
534// } 548 }
535 549
536 /// <summary> 550 /// <summary>
537 /// Parse the raw item id into a script instance from the command params if it's present. 551 /// Parse the raw item id into a script instance from the command params if it's present.
@@ -631,7 +645,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
631 } 645 }
632 646
633 sb.AppendFormat("Scripts loaded : {0}\n", scriptsLoaded); 647 sb.AppendFormat("Scripts loaded : {0}\n", scriptsLoaded);
634 sb.AppendFormat("Unique scripts : {0}\n", m_uniqueScripts.Count);
635 sb.AppendFormat("Scripts waiting for load : {0}\n", m_CompileQueue.Count); 648 sb.AppendFormat("Scripts waiting for load : {0}\n", m_CompileQueue.Count);
636 sb.AppendFormat("Max threads : {0}\n", m_ThreadPool.MaxThreads); 649 sb.AppendFormat("Max threads : {0}\n", m_ThreadPool.MaxThreads);
637 sb.AppendFormat("Min threads : {0}\n", m_ThreadPool.MinThreads); 650 sb.AppendFormat("Min threads : {0}\n", m_ThreadPool.MinThreads);
@@ -754,6 +767,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
754 { 767 {
755 if (instance.Running) 768 if (instance.Running)
756 { 769 {
770 instance.StayStopped = true; // the script was stopped explicitly
771
757 instance.Stop(0); 772 instance.Stop(0);
758 773
759 SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID); 774 SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID);
@@ -778,11 +793,20 @@ namespace OpenSim.Region.ScriptEngine.XEngine
778 // 793 //
779 if (m_Assemblies.ContainsKey(instance.AssetID)) 794 if (m_Assemblies.ContainsKey(instance.AssetID))
780 { 795 {
796<<<<<<< HEAD
797 // Force a final state save
798 //
799 try
800 {
801 if (instance.StatePersistedHere)
802 instance.SaveState();
803=======
781 string assembly = m_Assemblies[instance.AssetID]; 804 string assembly = m_Assemblies[instance.AssetID];
782 805
783 try 806 try
784 { 807 {
785 instance.SaveState(assembly); 808 instance.SaveState(assembly);
809>>>>>>> avn/ubitvar
786 } 810 }
787 catch (Exception e) 811 catch (Exception e)
788 { 812 {
@@ -794,10 +818,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
794 } 818 }
795 } 819 }
796 820
821<<<<<<< HEAD
822 // Clear the event queue and abort the instance thread
823 //
824 instance.Stop(0, true);
825=======
797 // Clear the event queue and abort the instance thread 826 // Clear the event queue and abort the instance thread
798 // 827 //
799 instance.ClearQueue(); 828 instance.ClearQueue();
800 instance.Stop(0); 829 instance.Stop(0);
830>>>>>>> avn/ubitvar
801 831
802 // Release events, timer, etc 832 // Release events, timer, etc
803 // 833 //
@@ -898,6 +928,25 @@ namespace OpenSim.Region.ScriptEngine.XEngine
898 928
899 List<IScriptInstance> instances = new List<IScriptInstance>(); 929 List<IScriptInstance> instances = new List<IScriptInstance>();
900 930
931<<<<<<< HEAD
932 lock (m_Scripts)
933 {
934 foreach (IScriptInstance instance in m_Scripts.Values)
935 {
936 if (instance.StatePersistedHere)
937 {
938// m_log.DebugFormat(
939// "[XEngine]: Adding script {0}.{1}, item UUID {2}, prim UUID {3} in {4} for state persistence",
940// instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, World.Name);
941
942 instances.Add(instance);
943 }
944 }
945 }
946
947 foreach (IScriptInstance i in instances)
948 {
949=======
901 lockScriptsForRead(true); 950 lockScriptsForRead(true);
902 foreach (IScriptInstance instance in m_Scripts.Values) 951 foreach (IScriptInstance instance in m_Scripts.Values)
903 instances.Add(instance); 952 instances.Add(instance);
@@ -913,9 +962,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
913 assembly = m_Assemblies[i.AssetID]; 962 assembly = m_Assemblies[i.AssetID];
914 963
915 964
965>>>>>>> avn/ubitvar
916 try 966 try
917 { 967 {
918 i.SaveState(assembly); 968 i.SaveState();
919 } 969 }
920 catch (Exception e) 970 catch (Exception e)
921 { 971 {
@@ -927,8 +977,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
927 } 977 }
928 } 978 }
929 979
930 instances.Clear();
931
932 if (saveTime > 0) 980 if (saveTime > 0)
933 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoBackup), 981 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoBackup),
934 new Object[] { saveTime }); 982 new Object[] { saveTime });
@@ -938,6 +986,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
938 986
939 public void SaveAllState() 987 public void SaveAllState()
940 { 988 {
989 DoBackup(new object[] { 0 });
990 }
991
992 public object DoMaintenance(object p)
993 {
994 object[] parms = (object[])p;
995 int sleepTime = (int)parms[0];
996
941 foreach (IScriptInstance inst in m_Scripts.Values) 997 foreach (IScriptInstance inst in m_Scripts.Values)
942 { 998 {
943 if (inst.EventTime() > m_EventLimit) 999 if (inst.EventTime() > m_EventLimit)
@@ -947,14 +1003,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
947 inst.Start(); 1003 inst.Start();
948 } 1004 }
949 } 1005 }
950 }
951
952 public object DoMaintenance(object p)
953 {
954 object[] parms = (object[])p;
955 int sleepTime = (int)parms[0];
956
957 SaveAllState();
958 1006
959 System.Threading.Thread.Sleep(sleepTime); 1007 System.Threading.Thread.Sleep(sleepTime);
960 1008
@@ -1032,8 +1080,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1032 if (restOfFirstLine.StartsWith("c#") 1080 if (restOfFirstLine.StartsWith("c#")
1033 || restOfFirstLine.StartsWith("vb") 1081 || restOfFirstLine.StartsWith("vb")
1034 || restOfFirstLine.StartsWith("lsl") 1082 || restOfFirstLine.StartsWith("lsl")
1035 || restOfFirstLine.StartsWith("js")
1036 || restOfFirstLine.StartsWith("yp")
1037 || restOfFirstLine.Length == 0) 1083 || restOfFirstLine.Length == 0)
1038 warnRunningInXEngine = true; 1084 warnRunningInXEngine = true;
1039 1085
@@ -1067,12 +1113,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1067 if (engine != ScriptEngineName) 1113 if (engine != ScriptEngineName)
1068 return; 1114 return;
1069 1115
1070 // If we've seen this exact script text before, use that reference instead
1071 if (m_uniqueScripts.ContainsKey(script))
1072 script = m_uniqueScripts[script];
1073 else
1074 m_uniqueScripts[script] = script;
1075
1076 Object[] parms = new Object[]{localID, itemID, script, startParam, postOnRez, (StateSource)stateSource}; 1116 Object[] parms = new Object[]{localID, itemID, script, startParam, postOnRez, (StateSource)stateSource};
1077 1117
1078 if (stateSource == (int)StateSource.ScriptedRez) 1118 if (stateSource == (int)StateSource.ScriptedRez)
@@ -1086,11 +1126,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1086 } 1126 }
1087 else 1127 else
1088 { 1128 {
1089 m_CompileQueue.Enqueue(parms);
1090 lock (m_CompileDict) 1129 lock (m_CompileDict)
1091 {
1092 m_CompileDict[itemID] = 0; 1130 m_CompileDict[itemID] = 0;
1093 } 1131
1132 // This must occur after the m_CompileDict so that an existing compile thread cannot hit the check
1133 // in DoOnRezScript() before m_CompileDict has been updated.
1134 m_CompileQueue.Enqueue(parms);
1094 1135
1095// m_log.DebugFormat("[XEngine]: Added script {0} to compile queue", itemID); 1136// m_log.DebugFormat("[XEngine]: Added script {0} to compile queue", itemID);
1096 1137
@@ -1112,49 +1153,81 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1112 1153
1113 public Object DoOnRezScriptQueue(Object dummy) 1154 public Object DoOnRezScriptQueue(Object dummy)
1114 { 1155 {
1115 if (m_InitialStartup) 1156 try
1116 { 1157 {
1117 // This delay exists to stop mono problems where script compilation and startup would stop the sim 1158 if (m_InitialStartup)
1118 // working properly for the session. 1159 {
1119 System.Threading.Thread.Sleep(m_StartDelay); 1160 // This delay exists to stop mono problems where script compilation and startup would stop the sim
1161 // working properly for the session.
1162 System.Threading.Thread.Sleep(m_StartDelay);
1120 1163
1121 m_log.InfoFormat("[XEngine]: Performing initial script startup on {0}", m_Scene.Name); 1164 m_log.InfoFormat("[XEngine]: Performing initial script startup on {0}", m_Scene.Name);
1122 } 1165 }
1123 1166
1124 object[] o; 1167 object[] o;
1125 1168
1126 int scriptsStarted = 0; 1169 int scriptsStarted = 0;
1127 1170
1128 while (m_CompileQueue.Dequeue(out o)) 1171 while (m_CompileQueue.Dequeue(out o))
1129 {
1130 if (DoOnRezScript(o))
1131 { 1172 {
1132 scriptsStarted++; 1173 try
1174 {
1175 if (DoOnRezScript(o))
1176 {
1177 scriptsStarted++;
1133 1178
1134 if (m_InitialStartup) 1179 if (m_InitialStartup)
1135 if (scriptsStarted % 50 == 0) 1180 if (scriptsStarted % 50 == 0)
1136 m_log.InfoFormat( 1181 m_log.InfoFormat(
1137 "[XEngine]: Started {0} scripts in {1}", scriptsStarted, m_Scene.Name); 1182 "[XEngine]: Started {0} scripts in {1}", scriptsStarted, m_Scene.Name);
1183 }
1184 }
1185 catch (Exception e)
1186 {
1187 m_log.Error(
1188 string.Format(
1189 "[XEngine]: Failure in DoOnRezScriptQueue() for item {0} in {1}. Continuing. Exception ",
1190 o[1], m_Scene.Name),
1191 e);
1192 }
1138 } 1193 }
1139 }
1140 1194
1141 if (m_InitialStartup) 1195 if (m_InitialStartup)
1142 m_log.InfoFormat( 1196 m_log.InfoFormat(
1143 "[XEngine]: Completed starting {0} scripts on {1}", scriptsStarted, m_Scene.Name); 1197 "[XEngine]: Completed starting {0} scripts on {1}", scriptsStarted, m_Scene.Name);
1144 1198
1145 // NOTE: Despite having a lockless queue, this lock is required 1199 }
1146 // to make sure there is never no compile thread while there 1200 catch (Exception e)
1147 // are still scripts to compile. This could otherwise happen 1201 {
1148 // due to a race condition 1202 m_log.Error(
1149 // 1203 string.Format("[XEngine]: Failure in DoOnRezScriptQueue() in {0}. Exception ", m_Scene.Name), e);
1150 lock (m_CompileQueue) 1204 }
1151 m_CurrentCompile = null; 1205 finally
1206 {
1207 // FIXME: On failure we must trigger this even if the compile queue is not actually empty so that the
1208 // RegionReadyModule is not forever waiting. This event really needs a different name.
1209 m_Scene.EventManager.TriggerEmptyScriptCompileQueue(m_ScriptFailCount,
1210 m_ScriptErrorMessage);
1152 1211
1153 m_Scene.EventManager.TriggerEmptyScriptCompileQueue(m_ScriptFailCount, 1212 m_ScriptFailCount = 0;
1154 m_ScriptErrorMessage); 1213 m_InitialStartup = false;
1155 1214
1156 m_ScriptFailCount = 0; 1215 // NOTE: Despite having a lockless queue, this lock is required
1157 m_InitialStartup = false; 1216 // to make sure there is never no compile thread while there
1217 // are still scripts to compile. This could otherwise happen
1218 // due to a race condition
1219 //
1220 lock (m_CompileQueue)
1221 {
1222 m_CurrentCompile = null;
1223
1224 // This is to avoid a situation where the m_CompileQueue while loop above could complete but
1225 // OnRezScript() place a new script on the queue and check m_CurrentCompile = null before we hit
1226 // this section.
1227 if (m_CompileQueue.Count > 0)
1228 m_CurrentCompile = m_ThreadPool.QueueWorkItem(DoOnRezScriptQueue, null);
1229 }
1230 }
1158 1231
1159 return null; 1232 return null;
1160 } 1233 }
@@ -1201,16 +1274,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1201 return false; 1274 return false;
1202 } 1275 }
1203 1276
1204 m_log.DebugFormat( 1277 if (DebugLevel > 0)
1205 "[XEngine]: Loading script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}", 1278 m_log.DebugFormat(
1206 part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID, 1279 "[XEngine]: Loading script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}",
1207 part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); 1280 part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID,
1281 part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName);
1208 1282
1209 UUID assetID = item.AssetID; 1283 UUID assetID = item.AssetID;
1210 1284
1211 ScenePresence presence = m_Scene.GetScenePresence(item.OwnerID); 1285 ScenePresence presence = m_Scene.GetScenePresence(item.OwnerID);
1212 1286
1213 string assembly = ""; 1287 string assemblyPath = "";
1214 1288
1215 Culture.SetCurrentCulture(); 1289 Culture.SetCurrentCulture();
1216 1290
@@ -1222,12 +1296,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1222 { 1296 {
1223 lock (m_AddingAssemblies) 1297 lock (m_AddingAssemblies)
1224 { 1298 {
1225 m_Compiler.PerformScriptCompile(script, assetID.ToString(), item.OwnerID, out assembly, out linemap); 1299 m_Compiler.PerformScriptCompile(script, assetID.ToString(), item.OwnerID, out assemblyPath, out linemap);
1226 1300
1227 if (!m_AddingAssemblies.ContainsKey(assembly)) { 1301// m_log.DebugFormat(
1228 m_AddingAssemblies[assembly] = 1; 1302// "[XENGINE]: Found assembly path {0} onrez {1} in {2}",
1303// assemblyPath, item.ItemID, World.Name);
1304
1305 if (!m_AddingAssemblies.ContainsKey(assemblyPath)) {
1306 m_AddingAssemblies[assemblyPath] = 1;
1229 } else { 1307 } else {
1230 m_AddingAssemblies[assembly]++; 1308 m_AddingAssemblies[assemblyPath]++;
1231 } 1309 }
1232 } 1310 }
1233 1311
@@ -1387,11 +1465,156 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1387 } 1465 }
1388 else 1466 else
1389 { 1467 {
1468<<<<<<< HEAD
1469 m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString());
1470 m_ScriptErrorMessage += "Exception creating app domain:\n";
1471 m_ScriptFailCount++;
1472 lock (m_AddingAssemblies)
1473 {
1474 m_AddingAssemblies[assemblyPath]--;
1475 }
1476 return false;
1477=======
1390 sandbox = AppDomain.CurrentDomain; 1478 sandbox = AppDomain.CurrentDomain;
1479>>>>>>> avn/ubitvar
1480 }
1481
1482<<<<<<< HEAD
1483 IScript scriptObj = null;
1484 EventWaitHandle coopSleepHandle;
1485 bool coopTerminationForThisScript;
1486
1487 // Set up assembly name to point to the appropriate scriptEngines directory
1488 AssemblyName assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyPath));
1489 assemblyName.CodeBase = Path.GetDirectoryName(assemblyPath);
1490
1491 if (m_coopTermination)
1492 {
1493 try
1494 {
1495 coopSleepHandle = new XEngineEventWaitHandle(false, EventResetMode.AutoReset);
1496
1497 scriptObj
1498 = (IScript)m_AppDomains[appDomain].CreateInstanceAndUnwrap(
1499 assemblyName.FullName,
1500 "SecondLife.XEngineScript",
1501 false,
1502 BindingFlags.Default,
1503 null,
1504 new object[] { coopSleepHandle },
1505 null,
1506 null);
1507
1508 coopTerminationForThisScript = true;
1509 }
1510 catch (TypeLoadException)
1511 {
1512 coopSleepHandle = null;
1513
1514 try
1515 {
1516 scriptObj
1517 = (IScript)m_AppDomains[appDomain].CreateInstanceAndUnwrap(
1518 assemblyName.FullName,
1519 "SecondLife.Script",
1520 false,
1521 BindingFlags.Default,
1522 null,
1523 null,
1524 null,
1525 null);
1526 }
1527 catch (Exception e2)
1528 {
1529 m_log.Error(
1530 string.Format(
1531 "[XENGINE]: Could not load previous SecondLife.Script from assembly {0} in {1}. Not starting. Exception ",
1532 assemblyName.FullName, World.Name),
1533 e2);
1534
1535 return false;
1536 }
1537
1538 coopTerminationForThisScript = false;
1539 }
1540 }
1541 else
1542 {
1543 try
1544 {
1545 scriptObj
1546 = (IScript)m_AppDomains[appDomain].CreateInstanceAndUnwrap(
1547 assemblyName.FullName,
1548 "SecondLife.Script",
1549 false,
1550 BindingFlags.Default,
1551 null,
1552 null,
1553 null,
1554 null);
1555
1556 coopSleepHandle = null;
1557 coopTerminationForThisScript = false;
1391 } 1558 }
1559 catch (TypeLoadException)
1560 {
1561 coopSleepHandle = new XEngineEventWaitHandle(false, EventResetMode.AutoReset);
1562
1563 try
1564 {
1565 scriptObj
1566 = (IScript)m_AppDomains[appDomain].CreateInstanceAndUnwrap(
1567 assemblyName.FullName,
1568 "SecondLife.XEngineScript",
1569 false,
1570 BindingFlags.Default,
1571 null,
1572 new object[] { coopSleepHandle },
1573 null,
1574 null);
1575 }
1576 catch (Exception e2)
1577 {
1578 m_log.Error(
1579 string.Format(
1580 "[XENGINE]: Could not load previous SecondLife.XEngineScript from assembly {0} in {1}. Not starting. Exception ",
1581 assemblyName.FullName, World.Name),
1582 e2);
1583
1584 return false;
1585 }
1586
1587 coopTerminationForThisScript = true;
1588 }
1589 }
1392 1590
1591 if (m_coopTermination != coopTerminationForThisScript && !HaveNotifiedLogOfScriptStopMistmatch)
1592 {
1593 // Notify the log that there is at least one script compile that doesn't match the
1594 // ScriptStopStrategy. Operator has to manually delete old DLLs - we can't do this on Windows
1595 // once the assembly has been loaded evne if the instantiation of a class was unsuccessful.
1596 m_log.WarnFormat(
1597 "[XEngine]: At least one existing compiled script DLL in {0} has {1} as ScriptStopStrategy whereas config setting is {2}."
1598 + "\nContinuing with script compiled strategy but to remove this message please set [XEngine] DeleteScriptsOnStartup = true for one simulator session to remove old script DLLs (script state will not be lost).",
1599 World.Name, coopTerminationForThisScript ? "co-op" : "abort", m_coopTermination ? "co-op" : "abort");
1600
1601 HaveNotifiedLogOfScriptStopMistmatch = true;
1602 }
1603
1604 instance = new ScriptInstance(this, part,
1605 item,
1606 startParam, postOnRez,
1607 m_MaxScriptQueue);
1608
1609 if (
1610 !instance.Load(
1611 scriptObj, coopSleepHandle, assemblyPath,
1612 Path.Combine(ScriptEnginePath, World.RegionInfo.RegionID.ToString()), stateSource, coopTerminationForThisScript))
1613 return false;
1614=======
1393// if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource)) 1615// if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource))
1394// return false; 1616// return false;
1617>>>>>>> avn/ubitvar
1395 1618
1396 m_AppDomains[appDomain] = sandbox; 1619 m_AppDomains[appDomain] = sandbox;
1397 1620
@@ -1444,11 +1667,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1444 } 1667 }
1445 1668
1446 if (!m_Assemblies.ContainsKey(assetID)) 1669 if (!m_Assemblies.ContainsKey(assetID))
1447 m_Assemblies[assetID] = assembly; 1670 m_Assemblies[assetID] = assemblyPath;
1448 1671
1449 lock (m_AddingAssemblies) 1672 lock (m_AddingAssemblies)
1450 { 1673 {
1451 m_AddingAssemblies[assembly]--; 1674 m_AddingAssemblies[assemblyPath]--;
1452 } 1675 }
1453 1676
1454 if (instance!=null) 1677 if (instance!=null)
@@ -1482,6 +1705,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1482 return; 1705 return;
1483 } 1706 }
1484 1707
1708<<<<<<< HEAD
1709 instance.Stop(m_WaitForEventCompletionOnScriptStop, true);
1710=======
1485 IScriptInstance instance=m_Scripts[itemID]; 1711 IScriptInstance instance=m_Scripts[itemID];
1486 lockScriptsForRead(false); 1712 lockScriptsForRead(false);
1487 lockScriptsForWrite(true); 1713 lockScriptsForWrite(true);
@@ -1492,6 +1718,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1492 instance.Stop(m_WaitForEventCompletionOnScriptStop); 1718 instance.Stop(m_WaitForEventCompletionOnScriptStop);
1493 1719
1494// bool objectRemoved = false; 1720// bool objectRemoved = false;
1721>>>>>>> avn/ubitvar
1495 1722
1496 lock (m_PrimObjects) 1723 lock (m_PrimObjects)
1497 { 1724 {
@@ -1504,14 +1731,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1504 1731
1505 // If there are no more scripts, remove prim 1732 // If there are no more scripts, remove prim
1506 if (m_PrimObjects[localID].Count == 0) 1733 if (m_PrimObjects[localID].Count == 0)
1507 {
1508 m_PrimObjects.Remove(localID); 1734 m_PrimObjects.Remove(localID);
1509// objectRemoved = true;
1510 }
1511 } 1735 }
1512 } 1736 }
1513 1737
1514 instance.RemoveState(); 1738 if (instance.StatePersistedHere)
1739 instance.RemoveState();
1740
1515 instance.DestroyScriptInstance(); 1741 instance.DestroyScriptInstance();
1516 1742
1517 if (m_DomainScripts.ContainsKey(instance.AppDomain)) 1743 if (m_DomainScripts.ContainsKey(instance.AppDomain))
@@ -1653,7 +1879,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1653 1879
1654 IScriptInstance instance = (ScriptInstance) parms; 1880 IScriptInstance instance = (ScriptInstance) parms;
1655 1881
1656 //m_log.DebugFormat("[XEngine]: Processing event for {0}", instance); 1882// m_log.DebugFormat("[XEngine]: Processing event for {0}", instance);
1657 1883
1658 return instance.EventProcessor(); 1884 return instance.EventProcessor();
1659 } 1885 }
@@ -1829,6 +2055,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1829 IScriptInstance instance = GetInstance(itemID); 2055 IScriptInstance instance = GetInstance(itemID);
1830 if (instance != null) 2056 if (instance != null)
1831 instance.ApiResetScript(); 2057 instance.ApiResetScript();
2058
2059 // Send the new number of threads that are in use by the thread
2060 // pool, I believe that by adding them to the locations where the
2061 // script is changing states that I will catch all changes to the
2062 // thread pool
2063 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
1832 } 2064 }
1833 2065
1834 public void ResetScript(UUID itemID) 2066 public void ResetScript(UUID itemID)
@@ -1836,6 +2068,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1836 IScriptInstance instance = GetInstance(itemID); 2068 IScriptInstance instance = GetInstance(itemID);
1837 if (instance != null) 2069 if (instance != null)
1838 instance.ResetScript(m_WaitForEventCompletionOnScriptStop); 2070 instance.ResetScript(m_WaitForEventCompletionOnScriptStop);
2071
2072 // Send the new number of threads that are in use by the thread
2073 // pool, I believe that by adding them to the locations where the
2074 // script is changing states that I will catch all changes to the
2075 // thread pool
2076 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
1839 } 2077 }
1840 2078
1841 public void StartScript(UUID itemID) 2079 public void StartScript(UUID itemID)
@@ -1845,6 +2083,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1845 instance.Start(); 2083 instance.Start();
1846 else 2084 else
1847 m_runFlags.AddOrUpdate(itemID, true, 240); 2085 m_runFlags.AddOrUpdate(itemID, true, 240);
2086
2087 // Send the new number of threads that are in use by the thread
2088 // pool, I believe that by adding them to the locations where the
2089 // script is changing states that I will catch all changes to the
2090 // thread pool
2091 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
1848 } 2092 }
1849 2093
1850 public void StopScript(UUID itemID) 2094 public void StopScript(UUID itemID)
@@ -1853,6 +2097,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1853 2097
1854 if (instance != null) 2098 if (instance != null)
1855 { 2099 {
2100 lock (instance.EventQueue)
2101 instance.StayStopped = true; // the script was stopped explicitly
2102
1856 instance.Stop(m_WaitForEventCompletionOnScriptStop); 2103 instance.Stop(m_WaitForEventCompletionOnScriptStop);
1857 } 2104 }
1858 else 2105 else
@@ -1860,6 +2107,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1860// m_log.DebugFormat("[XENGINE]: Could not find script with ID {0} to stop in {1}", itemID, World.Name); 2107// m_log.DebugFormat("[XENGINE]: Could not find script with ID {0} to stop in {1}", itemID, World.Name);
1861 m_runFlags.AddOrUpdate(itemID, false, 240); 2108 m_runFlags.AddOrUpdate(itemID, false, 240);
1862 } 2109 }
2110
2111 // Send the new number of threads that are in use by the thread
2112 // pool, I believe that by adding them to the locations where the
2113 // script is changing states that I will catch all changes to the
2114 // thread pool
2115 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
1863 } 2116 }
1864 2117
1865 public DetectParams GetDetectParams(UUID itemID, int idx) 2118 public DetectParams GetDetectParams(UUID itemID, int idx)
@@ -2225,7 +2478,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2225 catch (IOException ex) 2478 catch (IOException ex)
2226 { 2479 {
2227 // if there already exists a file at that location, it may be locked. 2480 // if there already exists a file at that location, it may be locked.
2228 m_log.ErrorFormat("[XEngine]: Linemap file {0} already exists! {1}", mappath, ex.Message); 2481 m_log.Error(
2482 string.Format("[XEngine]: Linemap file {0} could not be written. Exception ", mappath), ex);
2229 } 2483 }
2230 } 2484 }
2231 } 2485 }
@@ -2251,6 +2505,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2251 m_log.ErrorFormat("[XEngine]: Error whilst writing state file {0}, {1}", statepath, ex.Message); 2505 m_log.ErrorFormat("[XEngine]: Error whilst writing state file {0}, {1}", statepath, ex.Message);
2252 } 2506 }
2253 2507
2508// m_log.DebugFormat(
2509// "[XEngine]: Wrote state for script item with ID {0} at {1} in {2}", itemID, statepath, m_Scene.Name);
2510
2254 return true; 2511 return true;
2255 } 2512 }
2256 2513
@@ -2272,7 +2529,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2272 2529
2273 public Dictionary<uint, float> GetObjectScriptsExecutionTimes() 2530 public Dictionary<uint, float> GetObjectScriptsExecutionTimes()
2274 { 2531 {
2275 long tickNow = Util.EnvironmentTickCount();
2276 Dictionary<uint, float> topScripts = new Dictionary<uint, float>(); 2532 Dictionary<uint, float> topScripts = new Dictionary<uint, float>();
2277 2533
2278 lock (m_Scripts) 2534 lock (m_Scripts)
@@ -2282,7 +2538,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2282 if (!topScripts.ContainsKey(si.LocalID)) 2538 if (!topScripts.ContainsKey(si.LocalID))
2283 topScripts[si.RootLocalID] = 0; 2539 topScripts[si.RootLocalID] = 0;
2284 2540
2285 topScripts[si.RootLocalID] += CalculateAdjustedExectionTime(si, tickNow); 2541 topScripts[si.RootLocalID] += GetExectionTime(si);
2286 } 2542 }
2287 } 2543 }
2288 2544
@@ -2296,7 +2552,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2296 return 0.0f; 2552 return 0.0f;
2297 } 2553 }
2298 float time = 0.0f; 2554 float time = 0.0f;
2299 long tickNow = Util.EnvironmentTickCount();
2300 IScriptInstance si; 2555 IScriptInstance si;
2301 // Calculate the time for all scripts that this engine is executing 2556 // Calculate the time for all scripts that this engine is executing
2302 // Ignore any others 2557 // Ignore any others
@@ -2305,36 +2560,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2305 si = GetInstance(id); 2560 si = GetInstance(id);
2306 if (si != null && si.Running) 2561 if (si != null && si.Running)
2307 { 2562 {
2308 time += CalculateAdjustedExectionTime(si, tickNow); 2563 time += GetExectionTime(si);
2309 } 2564 }
2310 } 2565 }
2311 return time; 2566 return time;
2312 } 2567 }
2313 2568
2314 private float CalculateAdjustedExectionTime(IScriptInstance si, long tickNow) 2569 private float GetExectionTime(IScriptInstance si)
2315 { 2570 {
2316 long ticksElapsed = tickNow - si.MeasurementPeriodTickStart; 2571 return (float)si.ExecutionTime.GetSumTime().TotalMilliseconds;
2317
2318 // Avoid divide by zero
2319 if (ticksElapsed == 0)
2320 ticksElapsed = 1;
2321
2322 // Scale execution time to the ideal 55 fps frame time for these reasons.
2323 //
2324 // 1) XEngine does not execute scripts per frame, unlike other script engines. Hence, there is no
2325 // 'script execution time per frame', which is the original purpose of this value.
2326 //
2327 // 2) Giving the raw execution times is misleading since scripts start at different times, making
2328 // it impossible to compare scripts.
2329 //
2330 // 3) Scaling the raw execution time to the time that the script has been running is better but
2331 // is still misleading since a script that has just been rezzed may appear to have been running
2332 // for much longer.
2333 //
2334 // 4) Hence, we scale execution time to an idealised frame time (55 fps). This is also not perfect
2335 // since the figure does not represent actual execution time and very hard running scripts will
2336 // never exceed 18ms (though this is a very high number for script execution so is a warning sign).
2337 return ((float)si.MeasurementPeriodExecutionTime / ticksElapsed) * 18.1818f;
2338 } 2572 }
2339 2573
2340 public void SuspendScript(UUID itemID) 2574 public void SuspendScript(UUID itemID)
@@ -2346,6 +2580,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2346 instance.Suspend(); 2580 instance.Suspend();
2347// else 2581// else
2348// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID); 2582// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
2583
2584 // Send the new number of threads that are in use by the thread
2585 // pool, I believe that by adding them to the locations where the
2586 // script is changing states that I will catch all changes to the
2587 // thread pool
2588 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
2349 } 2589 }
2350 2590
2351 public void ResumeScript(UUID itemID) 2591 public void ResumeScript(UUID itemID)
@@ -2357,6 +2597,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2357 instance.Resume(); 2597 instance.Resume();
2358// else 2598// else
2359// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID); 2599// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
2600
2601 // Send the new number of threads that are in use by the thread
2602 // pool, I believe that by adding them to the locations where the
2603 // script is changing states that I will catch all changes to the
2604 // thread pool
2605 m_Scene.setThreadCount(m_ThreadPool.InUseThreads);
2360 } 2606 }
2361 2607
2362 public bool HasScript(UUID itemID, out bool running) 2608 public bool HasScript(UUID itemID, out bool running)
@@ -2370,5 +2616,30 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2370 running = instance.Running; 2616 running = instance.Running;
2371 return true; 2617 return true;
2372 } 2618 }
2619
2620 public void SleepScript(UUID itemID, int delay)
2621 {
2622 IScriptInstance instance = GetInstance(itemID);
2623 if (instance == null)
2624 return;
2625
2626 instance.ExecutionTimer.Stop();
2627 try
2628 {
2629 if (instance.CoopWaitHandle != null)
2630 {
2631 if (instance.CoopWaitHandle.WaitOne(delay))
2632 throw new ScriptCoopStopException();
2633 }
2634 else
2635 {
2636 Thread.Sleep(delay);
2637 }
2638 }
2639 finally
2640 {
2641 instance.ExecutionTimer.Start();
2642 }
2643 }
2373 } 2644 }
2374} 2645}