@op-engineering/op-sqlite 3.0.7 → 5.0.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.
Files changed (40) hide show
  1. package/android/CMakeLists.txt +9 -4
  2. package/android/build.gradle +44 -17
  3. package/android/cpp-adapter.cpp +5 -1
  4. package/android/gradle.properties +1 -1
  5. package/android/src/main/java/com/op/sqlite/OPSQLiteBridge.kt +3 -1
  6. package/android/src/main/java/com/op/sqlite/OPSQLiteModule.kt +23 -19
  7. package/android/src/main/java/com/op/sqlite/OPSQLitePackage.kt +10 -23
  8. package/android/src/main/jniLibs/arm64-v8a/libcrsqlite.so +0 -0
  9. package/android/src/main/jniLibs/armeabi-v7a/libcrsqlite.so +0 -0
  10. package/android/src/main/jniLibs/x86/libcrsqlite.so +0 -0
  11. package/android/src/main/jniLibs/x86_64/libcrsqlite.so +0 -0
  12. package/cpp/DumbHostObject.cpp +1 -0
  13. package/cpp/bindings.cpp +7 -3
  14. package/cpp/bindings.h +1 -1
  15. package/cpp/bridge.cpp +32 -3
  16. package/cpp/bridge.h +3 -2
  17. package/ios/OPSQLite.h +8 -8
  18. package/ios/OPSQLite.mm +89 -70
  19. package/ios/crsqlite.xcframework/Info.plist +40 -0
  20. package/ios/crsqlite.xcframework/ios-arm64/crsqlite.framework/Info.plist +18 -0
  21. package/ios/crsqlite.xcframework/ios-arm64/crsqlite.framework/crsqlite +0 -0
  22. package/ios/crsqlite.xcframework/ios-arm64_x86_64-simulator/crsqlite.framework/Info.plist +18 -0
  23. package/ios/crsqlite.xcframework/ios-arm64_x86_64-simulator/crsqlite.framework/crsqlite +0 -0
  24. package/lib/commonjs/NativeOPSQLite.js +1 -2
  25. package/lib/commonjs/NativeOPSQLite.js.map +1 -1
  26. package/lib/commonjs/index.js +33 -15
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/module/NativeOPSQLite.js.map +1 -1
  29. package/lib/module/index.js +31 -12
  30. package/lib/module/index.js.map +1 -1
  31. package/lib/typescript/{NativeOPSQLite.d.ts → src/NativeOPSQLite.d.ts} +1 -1
  32. package/lib/typescript/src/NativeOPSQLite.d.ts.map +1 -0
  33. package/lib/typescript/src/index.d.ts.map +1 -0
  34. package/op-sqlite.podspec +53 -11
  35. package/package.json +4 -11
  36. package/src/NativeOPSQLite.ts +1 -1
  37. package/src/index.ts +16 -20
  38. package/lib/typescript/NativeOPSQLite.d.ts.map +0 -1
  39. package/lib/typescript/index.d.ts.map +0 -1
  40. /package/lib/typescript/{index.d.ts → src/index.d.ts} +0 -0
package/op-sqlite.podspec CHANGED
@@ -8,6 +8,36 @@ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
8
8
  folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
9
9
  fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
10
10
 
11
+ parent_folder_name = File.basename(__dir__)
12
+ app_package = nil
13
+ # for development purposes on user machines the podspec should be able to read the package.json from the root folder
14
+ # since it lives inside node_modules/@op-engineering/op-sqlite
15
+ if parent_folder_name == "op-sqlite"
16
+ app_package = JSON.parse(File.read(File.join(__dir__, "example", "package.json")))
17
+ else
18
+ app_package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
19
+ end
20
+
21
+ op_sqlite_config = app_package["op-sqlite"]
22
+ use_sqlcipher = false
23
+ use_crsqlite = false
24
+ performance_mode = "0"
25
+ phone_version = false
26
+ sqlite_flags = ""
27
+
28
+ if(op_sqlite_config != nil)
29
+ use_sqlcipher = op_sqlite_config["sqlcipher"] == true
30
+ use_crsqlite = op_sqlite_config["crsqlite"] == true
31
+ performance_mode = op_sqlite_config["performanceMode"] || "0"
32
+ phone_version = op_sqlite_config["iosSqlite"] == true
33
+ sqlite_flags = op_sqlite_config["sqliteFlags"] || ""
34
+ end
35
+
36
+ if phone_version && use_sqlcipher
37
+ raise "Cannot use phone embedded version and SQLCipher. SQLCipher needs to be compiled from sources with the project."
38
+ end
39
+
40
+
11
41
  Pod::Spec.new do |s|
12
42
  s.name = "op-sqlite"
13
43
  s.version = package["version"]
@@ -19,7 +49,6 @@ Pod::Spec.new do |s|
19
49
  s.platforms = { :ios => "13.0", :osx => "10.15" }
20
50
  s.source = { :git => "https://github.com/op-engineering/op-sqlite.git", :tag => "#{s.version}" }
21
51
 
22
- # s.header_mappings_dir = "cpp"
23
52
  s.source_files = "ios/**/*.{h,m,mm}", "cpp/**/*.{h,cpp,c}"
24
53
 
25
54
  xcconfig = {
@@ -28,14 +57,16 @@ Pod::Spec.new do |s|
28
57
  :USE_HEADERMAP => "No",
29
58
  :CLANG_CXX_LANGUAGE_STANDARD => "c++17",
30
59
  }
60
+
61
+ log_message.call("[OP-SQLITE] Configuration:")
31
62
 
32
- if ENV['OP_SQLITE_USE_SQLCIPHER'] == '1' then
33
- log_message.call("[OP-SQLITE] using SQLCipher! 🔒")
63
+ if use_sqlcipher then
64
+ log_message.call("[OP-SQLITE] using SQLCipher 🔒")
34
65
  s.exclude_files = "cpp/sqlite3.c", "cpp/sqlite3.h"
35
66
  xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " OP_SQLITE_USE_SQLCIPHER=1 HAVE_FULLFSYNC=1 SQLITE_HAS_CODEC SQLITE_TEMP_STORE=2"
36
67
  s.dependency "OpenSSL-Universal"
37
68
  else
38
- log_message.call("[OP-SQLITE] using vanilla SQLite! 📦")
69
+ log_message.call("[OP-SQLITE] using vanilla SQLite 📦")
39
70
  s.exclude_files = "cpp/sqlcipher/sqlite3.c", "cpp/sqlcipher/sqlite3.h"
40
71
  end
41
72
 
@@ -51,23 +82,34 @@ Pod::Spec.new do |s|
51
82
 
52
83
  optimizedCflags = other_cflags + '$(inherited) -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DEPRECATED=1 -DSQLITE_OMIT_PROGRESS_CALLBACK=1 -DSQLITE_OMIT_SHARED_CACHE=1 -DSQLITE_USE_ALLOCA=1'
53
84
 
54
- if ENV['OP_SQLITE_USE_PHONE_VERSION'] == '1' then
55
- log_message.call("[OP-SQLITE] using iOS embedded SQLite! 📱")
85
+
86
+ if phone_version then
87
+ log_message.call("[OP-SQLITE] using iOS embedded SQLite 📱")
56
88
  xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " OP_SQLITE_USE_PHONE_VERSION=1"
57
89
  s.exclude_files = "cpp/sqlite3.c", "cpp/sqlite3.h"
58
90
  s.library = "sqlite3"
59
91
  end
60
92
 
61
- if ENV['OP_SQLITE_PERF'] == '1' then
62
- log_message.call("[OP-SQLITE] performance mode enabled! 🚀")
93
+ if performance_mode == '1' then
94
+ log_message.call("[OP-SQLITE] Thread unsafe (1) performance mode enabled. Use only transactions! 🚀🚀")
63
95
  xcconfig[:OTHER_CFLAGS] = optimizedCflags + ' -DSQLITE_THREADSAFE=0 '
64
96
  end
65
97
 
66
- if ENV['OP_SQLITE_PERF'] == '2' then
67
- log_message.call("[OP-SQLITE] (thread safe) performance mode enabled! 🚀")
98
+ if performance_mode == '2' then
99
+ log_message.call("[OP-SQLITE] Thread safe (2) performance mode enabled 🚀")
68
100
  xcconfig[:OTHER_CFLAGS] = optimizedCflags + ' -DSQLITE_THREADSAFE=1 '
69
101
  end
70
102
 
103
+ if use_crsqlite then
104
+ log_message.call("[OP-SQLITE] using CRQSQLite 🤖")
105
+ xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " OP_SQLITE_USE_CRSQLITE=1"
106
+ s.vendored_frameworks = "ios/crsqlite.xcframework"
107
+ end
108
+
109
+ if sqlite_flags != "" then
110
+ log_message.call("[OP-SQLITE] Custom SQLite flags: #{sqlite_flags}")
111
+ xcconfig[:OTHER_CFLAGS] += " #{sqlite_flags}"
112
+ end
113
+
71
114
  s.pod_target_xcconfig = xcconfig
72
-
73
115
  end
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@op-engineering/op-sqlite",
3
- "version": "3.0.7",
3
+ "version": "5.0.0",
4
4
  "description": "Next generation SQLite for React Native",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
7
- "types": "lib/typescript/index.d.ts",
7
+ "types": "lib/typescript/src/index.d.ts",
8
8
  "react-native": "src/index",
9
9
  "source": "src/index",
10
10
  "files": [
@@ -14,6 +14,7 @@
14
14
  "ios",
15
15
  "cpp",
16
16
  "op-sqlite.podspec",
17
+ "crsqlite.xcframework",
17
18
  "!lib/typescript/example",
18
19
  "!android/build",
19
20
  "!android/.cxx",
@@ -48,7 +49,7 @@
48
49
  "devDependencies": {
49
50
  "lefthook": "^1.5.5",
50
51
  "react": "18.2.0",
51
- "react-native": "0.73.1",
52
+ "react-native": "0.74.0-rc.6",
52
53
  "react-native-builder-bob": "^0.23.2",
53
54
  "turbo": "^1.12.4",
54
55
  "typescript": "5.0.4"
@@ -57,14 +58,6 @@
57
58
  "react": "*",
58
59
  "react-native": "*"
59
60
  },
60
- "codegenConfig": {
61
- "name": "OPSQLiteSpec",
62
- "type": "modules",
63
- "jsSrcsDir": "src",
64
- "android": {
65
- "javaPackageName": "com.op.sqlite"
66
- }
67
- },
68
61
  "workspaces": [
69
62
  "example"
70
63
  ],
@@ -1,4 +1,4 @@
1
- import { TurboModuleRegistry, TurboModule } from 'react-native';
1
+ import { TurboModuleRegistry, type TurboModule } from 'react-native';
2
2
 
3
3
  export interface Spec extends TurboModule {
4
4
  getConstants: () => {
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
- import NativeOPSQLite from './NativeOPSQLite';
1
+ // import NativeOPSQLite from './NativeOPSQLite';
2
+ import { NativeModules } from 'react-native';
2
3
 
3
4
  declare global {
4
5
  function nativeCallSyncHook(): unknown;
@@ -6,21 +7,21 @@ declare global {
6
7
  }
7
8
 
8
9
  if (global.__OPSQLiteProxy == null) {
9
- if (NativeOPSQLite == null) {
10
+ if (NativeModules.OPSQLite == null) {
10
11
  throw new Error('Base module not found. Maybe try rebuilding the app.');
11
12
  }
12
13
 
13
- if (NativeOPSQLite.install == null) {
14
+ if (NativeModules.OPSQLite.install == null) {
14
15
  throw new Error(
15
16
  'Failed to install op-sqlite: React Native is not running on-device. OPSQLite can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'
16
17
  );
17
18
  }
18
19
 
19
20
  // Call the synchronous blocking install() function
20
- const result = NativeOPSQLite.install();
21
+ const result = NativeModules.OPSQLite.install();
21
22
  if (result !== true) {
22
23
  throw new Error(
23
- `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`
24
+ `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings, check the native logs for more info`
24
25
  );
25
26
  }
26
27
 
@@ -36,19 +37,14 @@ const proxy = global.__OPSQLiteProxy;
36
37
  export const OPSQLite = proxy as ISQLite;
37
38
 
38
39
  export const {
39
- // @ts-expect-error
40
40
  IOS_DOCUMENT_PATH,
41
- // @ts-expect-error
42
41
  IOS_LIBRARY_PATH,
43
- // @ts-expect-error
44
42
  ANDROID_DATABASE_PATH,
45
- // @ts-expect-error
46
43
  ANDROID_FILES_PATH,
47
- // @ts-expect-error
48
44
  ANDROID_EXTERNAL_FILES_PATH,
49
- } = !!NativeOPSQLite.getConstants
50
- ? NativeOPSQLite.getConstants()
51
- : NativeOPSQLite;
45
+ } = !!NativeModules.OPSQLite.getConstants
46
+ ? NativeModules.OPSQLite.getConstants()
47
+ : NativeModules.OPSQLite;
52
48
 
53
49
  /**
54
50
  * Object returned by SQL Query executions {
@@ -358,7 +354,7 @@ OPSQLite.transaction = async (
358
354
 
359
355
  throw executionError;
360
356
  } finally {
361
- locks[dbName].inProgress = false;
357
+ locks[dbName]!.inProgress = false;
362
358
  isFinalized = false;
363
359
  startNextTransaction(dbName);
364
360
  }
@@ -371,7 +367,7 @@ OPSQLite.transaction = async (
371
367
  },
372
368
  };
373
369
 
374
- locks[dbName].queue.push(tx);
370
+ locks[dbName]!.queue.push(tx);
375
371
  startNextTransaction(dbName);
376
372
  });
377
373
  };
@@ -381,14 +377,14 @@ const startNextTransaction = (dbName: string) => {
381
377
  throw Error(`Lock not found for db: ${dbName}`);
382
378
  }
383
379
 
384
- if (locks[dbName].inProgress) {
380
+ if (locks[dbName]!.inProgress) {
385
381
  // Transaction is already in process bail out
386
382
  return;
387
383
  }
388
384
 
389
- if (locks[dbName].queue.length) {
390
- locks[dbName].inProgress = true;
391
- const tx = locks[dbName].queue.shift();
385
+ if (locks[dbName]!.queue.length) {
386
+ locks[dbName]!.inProgress = true;
387
+ const tx = locks[dbName]!.queue.shift();
392
388
 
393
389
  if (!tx) {
394
390
  throw new Error('Could not get a operation on datebase');
@@ -472,5 +468,5 @@ export const moveAssetsDatabase = (
472
468
  dbName: string,
473
469
  extension: string
474
470
  ): boolean => {
475
- return NativeOPSQLite.moveAssetsDatabase(dbName, extension);
471
+ return NativeModules.OPSQLite.moveAssetsDatabase(dbName, extension);
476
472
  };
@@ -1 +0,0 @@
1
- {"version":3,"file":"NativeOPSQLite.d.ts","sourceRoot":"","sources":["../../src/NativeOPSQLite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,YAAY,EAAE,MAAM;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,2BAA2B,EAAE,MAAM,CAAC;KACrC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC;IAEnB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9D;;AAED,wBAAkE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,SAAS,kBAAkB,IAAI,OAAO,CAAC;IACvC,IAAI,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AA8BD,eAAO,MAAM,QAAQ,SAAmB,CAAC;AAEzC,eAAO,MAEL,iBAAiB,OAEjB,gBAAgB,OAEhB,qBAAqB,OAErB,kBAAkB,OAElB,2BAA2B,KAGX,CAAC;AAEnB;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QACL,iCAAiC;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,+BAA+B;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;KAC5B,CAAC;IACF;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,uLAAuL;IACvL,IAAI,EAAE,MAAM,CAAC;IACb;qDACiD;IACjD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC;IACxD,YAAY,EAAE,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,KACvB,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,QAAQ,EAAE,MAAM,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAUjC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,WAAW,CAAC;CAC5B,CAAC;AAEF,UAAU,OAAO;IACf,IAAI,EAAE,CAAC,OAAO,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,MAAM,EAAE,CACN,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,KACd,IAAI,CAAC;IACV,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC;IACxE,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,gBAAgB,CAAC;IAC9E,iBAAiB,EAAE,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EAAE,KACtB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxE,UAAU,EAAE,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EACL,CAAC,CAAC,MAAM,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,mBAAmB,CAAC;QAC/B,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,IAAI,CAAC,GACX,IAAI,KACL,IAAI,CAAC;IACV,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACvE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC1E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,eAAe,EAAE,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1D;AAuMD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC;IACxD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACtE,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,gBAAgB,CAAC;IAC9D,iBAAiB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5E,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,UAAU,EAAE,CACV,QAAQ,EACJ,CAAC,CAAC,MAAM,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,mBAAmB,CAAC;QAC/B,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,IAAI,CAAC,GACX,IAAI,KACL,IAAI,CAAC;IACV,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC1D,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnE,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,IAAI,YAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,KAAG,kBAiCH,CAAC;AAEF,eAAO,MAAM,kBAAkB,WACrB,MAAM,aACH,MAAM,KAChB,OAEF,CAAC"}
File without changes