steamworks-ffi-node 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/SteamAPICore.d.ts +221 -8
- package/dist/internal/SteamAPICore.d.ts.map +1 -1
- package/dist/internal/SteamAPICore.js +234 -14
- package/dist/internal/SteamAPICore.js.map +1 -1
- package/dist/internal/SteamAchievementManager.d.ts +602 -31
- package/dist/internal/SteamAchievementManager.d.ts.map +1 -1
- package/dist/internal/SteamAchievementManager.js +601 -32
- package/dist/internal/SteamAchievementManager.js.map +1 -1
- package/dist/internal/SteamCallbackPoller.d.ts +68 -0
- package/dist/internal/SteamCallbackPoller.d.ts.map +1 -0
- package/dist/internal/SteamCallbackPoller.js +134 -0
- package/dist/internal/SteamCallbackPoller.js.map +1 -0
- package/dist/internal/SteamLeaderboardManager.d.ts +338 -0
- package/dist/internal/SteamLeaderboardManager.d.ts.map +1 -0
- package/dist/internal/SteamLeaderboardManager.js +734 -0
- package/dist/internal/SteamLeaderboardManager.js.map +1 -0
- package/dist/internal/SteamLibraryLoader.d.ts +15 -0
- package/dist/internal/SteamLibraryLoader.d.ts.map +1 -1
- package/dist/internal/SteamLibraryLoader.js +42 -5
- package/dist/internal/SteamLibraryLoader.js.map +1 -1
- package/dist/internal/SteamStatsManager.d.ts +357 -50
- package/dist/internal/SteamStatsManager.d.ts.map +1 -1
- package/dist/internal/SteamStatsManager.js +444 -106
- package/dist/internal/SteamStatsManager.js.map +1 -1
- package/dist/steam.d.ts +169 -9
- package/dist/steam.d.ts.map +1 -1
- package/dist/steam.js +178 -0
- package/dist/steam.js.map +1 -1
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
|
@@ -37,18 +37,85 @@ exports.SteamAPICore = void 0;
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* SteamAPICore
|
|
41
|
+
*
|
|
42
|
+
* Core Steam API initialization and lifecycle management.
|
|
43
|
+
* Handles Steam client connection, interface management, and callback processing.
|
|
44
|
+
*
|
|
45
|
+
* This class manages the fundamental Steam API operations:
|
|
46
|
+
* - Initialization and shutdown of the Steam API
|
|
47
|
+
* - Interface retrieval (UserStats, User)
|
|
48
|
+
* - Status monitoring (Steam running, initialization state)
|
|
49
|
+
* - Callback processing for Steam events
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const loader = new SteamLibraryLoader();
|
|
54
|
+
* const apiCore = new SteamAPICore(loader);
|
|
55
|
+
*
|
|
56
|
+
* const success = apiCore.init({ appId: 480 });
|
|
57
|
+
* if (success) {
|
|
58
|
+
* console.log('[Steamworks] Steam API initialized!');
|
|
59
|
+
* // Use Steam features...
|
|
60
|
+
* apiCore.shutdown();
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
41
63
|
*/
|
|
42
64
|
class SteamAPICore {
|
|
65
|
+
/**
|
|
66
|
+
* Creates a new SteamAPICore instance
|
|
67
|
+
*
|
|
68
|
+
* @param libraryLoader - The Steam library loader for FFI calls
|
|
69
|
+
*/
|
|
43
70
|
constructor(libraryLoader) {
|
|
71
|
+
/** Whether the Steam API has been successfully initialized */
|
|
44
72
|
this.initialized = false;
|
|
73
|
+
/** The Steam App ID for this application */
|
|
45
74
|
this.appId = 0;
|
|
75
|
+
/** Pointer to the ISteamUserStats interface */
|
|
46
76
|
this.userStatsInterface = null;
|
|
77
|
+
/** Pointer to the ISteamUser interface */
|
|
47
78
|
this.userInterface = null;
|
|
79
|
+
/** Pointer to the ISteamUtils interface */
|
|
80
|
+
this.utilsInterface = null;
|
|
48
81
|
this.libraryLoader = libraryLoader;
|
|
49
82
|
}
|
|
50
83
|
/**
|
|
51
|
-
* Initialize Steam API
|
|
84
|
+
* Initialize the Steam API
|
|
85
|
+
*
|
|
86
|
+
* Establishes connection to the Steam client and retrieves necessary interfaces.
|
|
87
|
+
* Creates steam_appid.txt file required by Steam, loads the Steamworks library,
|
|
88
|
+
* and initializes all necessary Steam interfaces.
|
|
89
|
+
*
|
|
90
|
+
* @param options - Initialization options containing the Steam App ID
|
|
91
|
+
* @returns true if initialization was successful, false otherwise
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const success = apiCore.init({ appId: 480 });
|
|
96
|
+
* if (success) {
|
|
97
|
+
* console.log('[Steamworks] Connected to Steam for App ID:', 480);
|
|
98
|
+
* } else {
|
|
99
|
+
* console.error('[Steamworks] Failed to initialize Steam API');
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* @remarks
|
|
104
|
+
* - Creates steam_appid.txt file in the current working directory
|
|
105
|
+
* - Sets SteamAppId environment variable
|
|
106
|
+
* - Automatically requests current stats from Steam servers
|
|
107
|
+
* - Runs callbacks to process initial Steam events
|
|
108
|
+
*
|
|
109
|
+
* @warning
|
|
110
|
+
* Requires Steam client to be running and user to be logged in
|
|
111
|
+
*
|
|
112
|
+
* Steamworks SDK Functions:
|
|
113
|
+
* - `SteamAPI_Init()` - Initialize the Steam API
|
|
114
|
+
* - `SteamAPI_IsSteamRunning()` - Check if Steam client is running
|
|
115
|
+
* - `SteamAPI_SteamUserStats_v013()` - Get ISteamUserStats interface
|
|
116
|
+
* - `SteamAPI_SteamUser_v023()` - Get ISteamUser interface
|
|
117
|
+
* - `SteamAPI_ISteamUserStats_RequestCurrentStats()` - Request current stats from Steam
|
|
118
|
+
* - `SteamAPI_RunCallbacks()` - Process Steam callbacks
|
|
52
119
|
*/
|
|
53
120
|
init(options) {
|
|
54
121
|
try {
|
|
@@ -79,6 +146,11 @@ class SteamAPICore {
|
|
|
79
146
|
}
|
|
80
147
|
// Get User interface
|
|
81
148
|
this.userInterface = this.libraryLoader.SteamAPI_SteamUser_v023();
|
|
149
|
+
// Get Utils interface
|
|
150
|
+
this.utilsInterface = this.libraryLoader.SteamAPI_SteamUtils_v010();
|
|
151
|
+
if (!this.utilsInterface || this.utilsInterface === null) {
|
|
152
|
+
console.warn('[Steamworks] WARNING: Failed to get SteamUtils interface');
|
|
153
|
+
}
|
|
82
154
|
// Request current stats from Steam servers
|
|
83
155
|
console.log('[Steamworks] Requesting current stats from Steam...');
|
|
84
156
|
const statsRequested = this.libraryLoader.SteamAPI_ISteamUserStats_RequestCurrentStats(this.userStatsInterface, 0);
|
|
@@ -95,14 +167,33 @@ class SteamAPICore {
|
|
|
95
167
|
catch (error) {
|
|
96
168
|
console.error('[Steamworks] ERROR: Failed to initialize Steam API:', error.message);
|
|
97
169
|
console.error('[Steamworks] Make sure:');
|
|
98
|
-
console.error('
|
|
99
|
-
console.error('
|
|
100
|
-
console.error('
|
|
170
|
+
console.error('[Steamworks] 1. Steam client is running and you\'re logged in');
|
|
171
|
+
console.error('[Steamworks] 2. Steamworks redistributable binaries are available');
|
|
172
|
+
console.error('[Steamworks] 3. App ID is valid and game is in your library');
|
|
101
173
|
return false;
|
|
102
174
|
}
|
|
103
175
|
}
|
|
104
176
|
/**
|
|
105
|
-
* Shutdown Steam API
|
|
177
|
+
* Shutdown the Steam API
|
|
178
|
+
*
|
|
179
|
+
* Cleanly shuts down the Steam API connection and releases all interfaces.
|
|
180
|
+
* Should be called when the application is closing or Steam features are no longer needed.
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* process.on('SIGINT', () => {
|
|
185
|
+
* apiCore.shutdown();
|
|
186
|
+
* process.exit(0);
|
|
187
|
+
* });
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @remarks
|
|
191
|
+
* - Safe to call multiple times (only shuts down if initialized)
|
|
192
|
+
* - Clears all interface pointers
|
|
193
|
+
* - Sets initialized state to false
|
|
194
|
+
*
|
|
195
|
+
* Steamworks SDK Functions:
|
|
196
|
+
* - `SteamAPI_Shutdown()` - Shutdown the Steam API
|
|
106
197
|
*/
|
|
107
198
|
shutdown() {
|
|
108
199
|
if (this.libraryLoader.isLoaded() && this.initialized) {
|
|
@@ -111,11 +202,32 @@ class SteamAPICore {
|
|
|
111
202
|
this.initialized = false;
|
|
112
203
|
this.userStatsInterface = null;
|
|
113
204
|
this.userInterface = null;
|
|
205
|
+
this.utilsInterface = null;
|
|
114
206
|
console.log('[Steamworks] Steam API shutdown complete');
|
|
115
207
|
}
|
|
116
208
|
}
|
|
117
209
|
/**
|
|
118
|
-
* Get current Steam status
|
|
210
|
+
* Get the current Steam status
|
|
211
|
+
*
|
|
212
|
+
* Returns detailed status information including initialization state,
|
|
213
|
+
* App ID, and the current user's Steam ID.
|
|
214
|
+
*
|
|
215
|
+
* @returns Object containing initialization status, App ID, and Steam ID
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* const status = apiCore.getStatus();
|
|
220
|
+
* console.log(`[Steamworks] Initialized: ${status.initialized}`);
|
|
221
|
+
* console.log(`[Steamworks] App ID: ${status.appId}`);
|
|
222
|
+
* console.log(`[Steamworks] Steam ID: ${status.steamId}`);
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* @remarks
|
|
226
|
+
* - Steam ID is '0' if not initialized or unable to retrieve
|
|
227
|
+
* - App ID is 0 if not initialized
|
|
228
|
+
*
|
|
229
|
+
* Steamworks SDK Functions:
|
|
230
|
+
* - `SteamAPI_ISteamUser_GetSteamID()` - Get current user's Steam ID
|
|
119
231
|
*/
|
|
120
232
|
getStatus() {
|
|
121
233
|
let steamId = '0';
|
|
@@ -125,7 +237,7 @@ class SteamAPICore {
|
|
|
125
237
|
steamId = steamIdNum.toString();
|
|
126
238
|
}
|
|
127
239
|
catch (error) {
|
|
128
|
-
console.warn('Failed to get Steam ID:', error.message);
|
|
240
|
+
console.warn('[Steamworks] Failed to get Steam ID:', error.message);
|
|
129
241
|
}
|
|
130
242
|
}
|
|
131
243
|
return {
|
|
@@ -136,6 +248,25 @@ class SteamAPICore {
|
|
|
136
248
|
}
|
|
137
249
|
/**
|
|
138
250
|
* Run Steam callbacks to process pending events
|
|
251
|
+
*
|
|
252
|
+
* Processes all pending Steam callbacks and events. Should be called regularly
|
|
253
|
+
* (e.g., in a game loop or timer) to ensure Steam events are processed promptly.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```typescript
|
|
257
|
+
* // In a game loop or setInterval
|
|
258
|
+
* setInterval(() => {
|
|
259
|
+
* apiCore.runCallbacks();
|
|
260
|
+
* }, 100); // Every 100ms
|
|
261
|
+
* ```
|
|
262
|
+
*
|
|
263
|
+
* @remarks
|
|
264
|
+
* - Safe to call even if not initialized (will be ignored)
|
|
265
|
+
* - Automatically called by init() and after stat/achievement operations
|
|
266
|
+
* - Required for receiving Steam events and callbacks
|
|
267
|
+
*
|
|
268
|
+
* Steamworks SDK Functions:
|
|
269
|
+
* - `SteamAPI_RunCallbacks()` - Process all pending Steam callbacks
|
|
139
270
|
*/
|
|
140
271
|
runCallbacks() {
|
|
141
272
|
if (this.initialized && this.libraryLoader.isLoaded()) {
|
|
@@ -143,12 +274,32 @@ class SteamAPICore {
|
|
|
143
274
|
this.libraryLoader.SteamAPI_RunCallbacks();
|
|
144
275
|
}
|
|
145
276
|
catch (error) {
|
|
146
|
-
console.warn('Warning: Error running Steam callbacks:', error.message);
|
|
277
|
+
console.warn('[Steamworks] Warning: Error running Steam callbacks:', error.message);
|
|
147
278
|
}
|
|
148
279
|
}
|
|
149
280
|
}
|
|
150
281
|
/**
|
|
151
|
-
* Check if Steam client is running
|
|
282
|
+
* Check if the Steam client is running
|
|
283
|
+
*
|
|
284
|
+
* Verifies that the Steam client application is currently running on the user's system.
|
|
285
|
+
*
|
|
286
|
+
* @returns true if Steam is running, false otherwise
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* if (apiCore.isSteamRunning()) {
|
|
291
|
+
* console.log('[Steamworks] Steam client is active');
|
|
292
|
+
* } else {
|
|
293
|
+
* console.warn('[Steamworks] Steam client is not running');
|
|
294
|
+
* }
|
|
295
|
+
* ```
|
|
296
|
+
*
|
|
297
|
+
* @remarks
|
|
298
|
+
* - Returns false if Steam API is not initialized
|
|
299
|
+
* - Safe to call at any time
|
|
300
|
+
*
|
|
301
|
+
* Steamworks SDK Functions:
|
|
302
|
+
* - `SteamAPI_IsSteamRunning()` - Check if Steam client is running
|
|
152
303
|
*/
|
|
153
304
|
isSteamRunning() {
|
|
154
305
|
if (this.initialized && this.libraryLoader.isLoaded()) {
|
|
@@ -156,30 +307,99 @@ class SteamAPICore {
|
|
|
156
307
|
return this.libraryLoader.SteamAPI_IsSteamRunning();
|
|
157
308
|
}
|
|
158
309
|
catch (error) {
|
|
159
|
-
console.warn('Warning: Error checking if Steam is running:', error.message);
|
|
310
|
+
console.warn('[Steamworks] Warning: Error checking if Steam is running:', error.message);
|
|
160
311
|
return false;
|
|
161
312
|
}
|
|
162
313
|
}
|
|
163
314
|
return false;
|
|
164
315
|
}
|
|
165
316
|
/**
|
|
166
|
-
* Check if initialized
|
|
317
|
+
* Check if the Steam API is initialized
|
|
318
|
+
*
|
|
319
|
+
* Returns the current initialization state of the Steam API.
|
|
320
|
+
*
|
|
321
|
+
* @returns true if initialized and ready to use, false otherwise
|
|
322
|
+
*
|
|
323
|
+
* @example
|
|
324
|
+
* ```typescript
|
|
325
|
+
* if (!apiCore.isInitialized()) {
|
|
326
|
+
* console.error('[Steamworks] Cannot perform Steam operations - not initialized');
|
|
327
|
+
* return;
|
|
328
|
+
* }
|
|
329
|
+
* ```
|
|
167
330
|
*/
|
|
168
331
|
isInitialized() {
|
|
169
332
|
return this.initialized;
|
|
170
333
|
}
|
|
171
334
|
/**
|
|
172
|
-
* Get
|
|
335
|
+
* Get the ISteamUserStats interface pointer
|
|
336
|
+
*
|
|
337
|
+
* Returns the native pointer to the ISteamUserStats interface, which is used
|
|
338
|
+
* for achievement and stats operations.
|
|
339
|
+
*
|
|
340
|
+
* @returns Pointer to ISteamUserStats interface, or null if not initialized
|
|
341
|
+
*
|
|
342
|
+
* @example
|
|
343
|
+
* ```typescript
|
|
344
|
+
* const userStats = apiCore.getUserStatsInterface();
|
|
345
|
+
* if (userStats) {
|
|
346
|
+
* // Use interface for stats/achievement operations
|
|
347
|
+
* }
|
|
348
|
+
* ```
|
|
349
|
+
*
|
|
350
|
+
* @remarks
|
|
351
|
+
* - Returns null if Steam API is not initialized
|
|
352
|
+
* - This is a native pointer for use with FFI calls
|
|
173
353
|
*/
|
|
174
354
|
getUserStatsInterface() {
|
|
175
355
|
return this.userStatsInterface;
|
|
176
356
|
}
|
|
177
357
|
/**
|
|
178
|
-
* Get
|
|
358
|
+
* Get the ISteamUser interface pointer
|
|
359
|
+
*
|
|
360
|
+
* Returns the native pointer to the ISteamUser interface, which is used
|
|
361
|
+
* for user identity operations.
|
|
362
|
+
*
|
|
363
|
+
* @returns Pointer to ISteamUser interface, or null if not initialized
|
|
364
|
+
*
|
|
365
|
+
* @example
|
|
366
|
+
* ```typescript
|
|
367
|
+
* const user = apiCore.getUserInterface();
|
|
368
|
+
* if (user) {
|
|
369
|
+
* // Use interface for user operations
|
|
370
|
+
* }
|
|
371
|
+
* ```
|
|
372
|
+
*
|
|
373
|
+
* @remarks
|
|
374
|
+
* - Returns null if Steam API is not initialized
|
|
375
|
+
* - This is a native pointer for use with FFI calls
|
|
179
376
|
*/
|
|
180
377
|
getUserInterface() {
|
|
181
378
|
return this.userInterface;
|
|
182
379
|
}
|
|
380
|
+
/**
|
|
381
|
+
* Get the ISteamUtils interface pointer
|
|
382
|
+
*
|
|
383
|
+
* Returns the native pointer to the ISteamUtils interface, which is used
|
|
384
|
+
* for utility operations including API call result checking.
|
|
385
|
+
*
|
|
386
|
+
* @returns Pointer to ISteamUtils interface, or null if not initialized
|
|
387
|
+
*
|
|
388
|
+
* @example
|
|
389
|
+
* ```typescript
|
|
390
|
+
* const utils = apiCore.getUtilsInterface();
|
|
391
|
+
* if (utils) {
|
|
392
|
+
* // Use interface for utility operations
|
|
393
|
+
* }
|
|
394
|
+
* ```
|
|
395
|
+
*
|
|
396
|
+
* @remarks
|
|
397
|
+
* - Returns null if Steam API is not initialized
|
|
398
|
+
* - This is a native pointer for use with FFI calls
|
|
399
|
+
*/
|
|
400
|
+
getUtilsInterface() {
|
|
401
|
+
return this.utilsInterface;
|
|
402
|
+
}
|
|
183
403
|
}
|
|
184
404
|
exports.SteamAPICore = SteamAPICore;
|
|
185
405
|
//# sourceMappingURL=SteamAPICore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SteamAPICore.js","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAI7B
|
|
1
|
+
{"version":3,"file":"SteamAPICore.js","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAI7B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAa,YAAY;IAmBvB;;;;OAIG;IACH,YAAY,aAAiC;QApB7C,8DAA8D;QACtD,gBAAW,GAAY,KAAK,CAAC;QAErC,4CAA4C;QACpC,UAAK,GAAW,CAAC,CAAC;QAE1B,+CAA+C;QACvC,uBAAkB,GAAQ,IAAI,CAAC;QAEvC,0CAA0C;QAClC,kBAAa,GAAQ,IAAI,CAAC;QAElC,2CAA2C;QACnC,mBAAc,GAAQ,IAAI,CAAC;QAQjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,IAAI,CAAC,OAAyB;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAE3B,kCAAkC;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAE/C,uDAAuD;YACvD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAClE,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvD,OAAO,CAAC,GAAG,CAAC,mDAAmD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAE7E,mBAAmB;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAE1B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAEtD,uBAAuB;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YAEtD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;YAED,4BAA4B;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC;YAClE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YACnF,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC;YAElE,sBAAsB;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YAC3E,CAAC;YAED,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACnE,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,4CAA4C,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;YAEnH,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YAC3F,CAAC;YAED,oDAAoD;YACpD,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,+CAA+C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAEzE,OAAO,IAAI,CAAC;QAEd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YAC/F,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS;QACP,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzF,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY;QACV,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;gBACpG,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,qBAAqB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AAnXD,oCAmXC"}
|