@capacitor-community/bluetooth-le 6.1.0 → 7.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.
- package/CapacitorCommunityBluetoothLe.podspec +1 -1
- package/README.md +6 -5
- package/android/build.gradle +11 -11
- package/android/src/main/java/com/capacitorjs/community/plugins/bluetoothle/Conversion.kt +5 -4
- package/dist/esm/bleClient.js.map +1 -1
- package/dist/esm/conversion.js +1 -1
- package/dist/esm/conversion.js.map +1 -1
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/validators.js.map +1 -1
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +39 -41
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +39 -41
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/Conversion.swift +13 -4
- package/ios/Plugin/Plugin.swift +1 -1
- package/package.json +18 -18
package/dist/plugin.cjs.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var core = require('@capacitor/core');
|
|
6
4
|
|
|
7
5
|
/**
|
|
@@ -108,7 +106,7 @@ function dataViewToHexString(value) {
|
|
|
108
106
|
}
|
|
109
107
|
return s;
|
|
110
108
|
})
|
|
111
|
-
.join('
|
|
109
|
+
.join('');
|
|
112
110
|
}
|
|
113
111
|
function webUUIDToString(uuid) {
|
|
114
112
|
if (typeof uuid === 'string') {
|
|
@@ -209,7 +207,7 @@ class BleClientClass {
|
|
|
209
207
|
await this.queue(async () => {
|
|
210
208
|
var _a;
|
|
211
209
|
const key = `onEnabledChanged`;
|
|
212
|
-
await ((_a = this.eventListeners.get(key)) === null || _a ===
|
|
210
|
+
await ((_a = this.eventListeners.get(key)) === null || _a === undefined ? undefined : _a.remove());
|
|
213
211
|
const listener = await BluetoothLe.addListener(key, (result) => {
|
|
214
212
|
callback(result.value);
|
|
215
213
|
});
|
|
@@ -221,7 +219,7 @@ class BleClientClass {
|
|
|
221
219
|
await this.queue(async () => {
|
|
222
220
|
var _a;
|
|
223
221
|
const key = `onEnabledChanged`;
|
|
224
|
-
await ((_a = this.eventListeners.get(key)) === null || _a ===
|
|
222
|
+
await ((_a = this.eventListeners.get(key)) === null || _a === undefined ? undefined : _a.remove());
|
|
225
223
|
this.eventListeners.delete(key);
|
|
226
224
|
await BluetoothLe.stopEnabledNotifications();
|
|
227
225
|
});
|
|
@@ -265,7 +263,7 @@ class BleClientClass {
|
|
|
265
263
|
options = this.validateRequestBleDeviceOptions(options);
|
|
266
264
|
await this.queue(async () => {
|
|
267
265
|
var _a;
|
|
268
|
-
await ((_a = this.scanListener) === null || _a ===
|
|
266
|
+
await ((_a = this.scanListener) === null || _a === undefined ? undefined : _a.remove());
|
|
269
267
|
this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {
|
|
270
268
|
const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement
|
|
271
269
|
? this.convertValue(resultInternal.rawAdvertisement)
|
|
@@ -278,7 +276,7 @@ class BleClientClass {
|
|
|
278
276
|
async stopLEScan() {
|
|
279
277
|
await this.queue(async () => {
|
|
280
278
|
var _a;
|
|
281
|
-
await ((_a = this.scanListener) === null || _a ===
|
|
279
|
+
await ((_a = this.scanListener) === null || _a === undefined ? undefined : _a.remove());
|
|
282
280
|
this.scanListener = null;
|
|
283
281
|
await BluetoothLe.stopLEScan();
|
|
284
282
|
});
|
|
@@ -313,7 +311,7 @@ class BleClientClass {
|
|
|
313
311
|
var _a;
|
|
314
312
|
if (onDisconnect) {
|
|
315
313
|
const key = `disconnected|${deviceId}`;
|
|
316
|
-
await ((_a = this.eventListeners.get(key)) === null || _a ===
|
|
314
|
+
await ((_a = this.eventListeners.get(key)) === null || _a === undefined ? undefined : _a.remove());
|
|
317
315
|
const listener = await BluetoothLe.addListener(key, () => {
|
|
318
316
|
onDisconnect(deviceId);
|
|
319
317
|
});
|
|
@@ -385,7 +383,7 @@ class BleClientClass {
|
|
|
385
383
|
service = parseUUID(service);
|
|
386
384
|
characteristic = parseUUID(characteristic);
|
|
387
385
|
return this.queue(async () => {
|
|
388
|
-
if (!(value === null || value ===
|
|
386
|
+
if (!(value === null || value === undefined ? undefined : value.buffer)) {
|
|
389
387
|
throw new Error('Invalid data.');
|
|
390
388
|
}
|
|
391
389
|
let writeValue = value;
|
|
@@ -402,7 +400,7 @@ class BleClientClass {
|
|
|
402
400
|
service = parseUUID(service);
|
|
403
401
|
characteristic = parseUUID(characteristic);
|
|
404
402
|
await this.queue(async () => {
|
|
405
|
-
if (!(value === null || value ===
|
|
403
|
+
if (!(value === null || value === undefined ? undefined : value.buffer)) {
|
|
406
404
|
throw new Error('Invalid data.');
|
|
407
405
|
}
|
|
408
406
|
let writeValue = value;
|
|
@@ -433,7 +431,7 @@ class BleClientClass {
|
|
|
433
431
|
characteristic = parseUUID(characteristic);
|
|
434
432
|
descriptor = parseUUID(descriptor);
|
|
435
433
|
return this.queue(async () => {
|
|
436
|
-
if (!(value === null || value ===
|
|
434
|
+
if (!(value === null || value === undefined ? undefined : value.buffer)) {
|
|
437
435
|
throw new Error('Invalid data.');
|
|
438
436
|
}
|
|
439
437
|
let writeValue = value;
|
|
@@ -453,9 +451,9 @@ class BleClientClass {
|
|
|
453
451
|
await this.queue(async () => {
|
|
454
452
|
var _a;
|
|
455
453
|
const key = `notification|${deviceId}|${service}|${characteristic}`;
|
|
456
|
-
await ((_a = this.eventListeners.get(key)) === null || _a ===
|
|
454
|
+
await ((_a = this.eventListeners.get(key)) === null || _a === undefined ? undefined : _a.remove());
|
|
457
455
|
const listener = await BluetoothLe.addListener(key, (event) => {
|
|
458
|
-
callback(this.convertValue(event === null || event ===
|
|
456
|
+
callback(this.convertValue(event === null || event === undefined ? undefined : event.value));
|
|
459
457
|
});
|
|
460
458
|
this.eventListeners.set(key, listener);
|
|
461
459
|
await BluetoothLe.startNotifications({
|
|
@@ -471,7 +469,7 @@ class BleClientClass {
|
|
|
471
469
|
await this.queue(async () => {
|
|
472
470
|
var _a;
|
|
473
471
|
const key = `notification|${deviceId}|${service}|${characteristic}`;
|
|
474
|
-
await ((_a = this.eventListeners.get(key)) === null || _a ===
|
|
472
|
+
await ((_a = this.eventListeners.get(key)) === null || _a === undefined ? undefined : _a.remove());
|
|
475
473
|
this.eventListeners.delete(key);
|
|
476
474
|
await BluetoothLe.stopNotifications({
|
|
477
475
|
deviceId,
|
|
@@ -579,7 +577,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
579
577
|
const filters = this.getFilters(options);
|
|
580
578
|
const device = await navigator.bluetooth.requestDevice({
|
|
581
579
|
filters: filters.length ? filters : undefined,
|
|
582
|
-
optionalServices: options === null || options ===
|
|
580
|
+
optionalServices: options === null || options === undefined ? undefined : options.optionalServices,
|
|
583
581
|
acceptAllDevices: filters.length === 0,
|
|
584
582
|
});
|
|
585
583
|
this.deviceMap.set(device.id, device);
|
|
@@ -596,7 +594,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
596
594
|
this.scan = await navigator.bluetooth.requestLEScan({
|
|
597
595
|
filters: filters.length ? filters : undefined,
|
|
598
596
|
acceptAllAdvertisements: filters.length === 0,
|
|
599
|
-
keepRepeatedDevices: options === null || options ===
|
|
597
|
+
keepRepeatedDevices: options === null || options === undefined ? undefined : options.allowDuplicates,
|
|
600
598
|
});
|
|
601
599
|
}
|
|
602
600
|
onAdvertisementReceived(event) {
|
|
@@ -604,7 +602,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
604
602
|
const deviceId = event.device.id;
|
|
605
603
|
this.deviceMap.set(deviceId, event.device);
|
|
606
604
|
const isNew = !this.discoveredDevices.has(deviceId);
|
|
607
|
-
if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a ===
|
|
605
|
+
if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === undefined ? undefined : _a.allowDuplicates)) {
|
|
608
606
|
this.discoveredDevices.set(deviceId, true);
|
|
609
607
|
const device = this.getBleDevice(event.device);
|
|
610
608
|
const result = {
|
|
@@ -614,14 +612,14 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
614
612
|
txPower: event.txPower,
|
|
615
613
|
manufacturerData: mapToObject(event.manufacturerData),
|
|
616
614
|
serviceData: mapToObject(event.serviceData),
|
|
617
|
-
uuids: (_b = event.uuids) === null || _b ===
|
|
615
|
+
uuids: (_b = event.uuids) === null || _b === undefined ? undefined : _b.map(webUUIDToString),
|
|
618
616
|
};
|
|
619
617
|
this.notifyListeners('onScanResult', result);
|
|
620
618
|
}
|
|
621
619
|
}
|
|
622
620
|
async stopLEScan() {
|
|
623
621
|
var _a;
|
|
624
|
-
if ((_a = this.scan) === null || _a ===
|
|
622
|
+
if ((_a = this.scan) === null || _a === undefined ? undefined : _a.active) {
|
|
625
623
|
this.scan.stop();
|
|
626
624
|
}
|
|
627
625
|
this.scan = null;
|
|
@@ -642,7 +640,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
642
640
|
const bleDevices = devices
|
|
643
641
|
.filter((device) => {
|
|
644
642
|
var _a;
|
|
645
|
-
return (_a = device.gatt) === null || _a ===
|
|
643
|
+
return (_a = device.gatt) === null || _a === undefined ? undefined : _a.connected;
|
|
646
644
|
})
|
|
647
645
|
.map((device) => {
|
|
648
646
|
this.deviceMap.set(device.id, device);
|
|
@@ -670,7 +668,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
670
668
|
catch (error) {
|
|
671
669
|
// cancel pending connect call, does not work yet in chromium because of a bug:
|
|
672
670
|
// https://bugs.chromium.org/p/chromium/issues/detail?id=684073
|
|
673
|
-
await ((_b = device.gatt) === null || _b ===
|
|
671
|
+
await ((_b = device.gatt) === null || _b === undefined ? undefined : _b.disconnect());
|
|
674
672
|
if (error === timeoutError) {
|
|
675
673
|
throw new Error('Connection timeout');
|
|
676
674
|
}
|
|
@@ -692,11 +690,11 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
692
690
|
}
|
|
693
691
|
async disconnect(options) {
|
|
694
692
|
var _a;
|
|
695
|
-
(_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a ===
|
|
693
|
+
(_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === undefined ? undefined : _a.disconnect();
|
|
696
694
|
}
|
|
697
695
|
async getServices(options) {
|
|
698
696
|
var _a, _b;
|
|
699
|
-
const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a ===
|
|
697
|
+
const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === undefined ? undefined : _a.getPrimaryServices()))) !== null && _b !== undefined ? _b : [];
|
|
700
698
|
const bleServices = [];
|
|
701
699
|
for (const service of services) {
|
|
702
700
|
const characteristics = await service.getCharacteristics();
|
|
@@ -738,12 +736,12 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
738
736
|
}
|
|
739
737
|
async getCharacteristic(options) {
|
|
740
738
|
var _a;
|
|
741
|
-
const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a ===
|
|
742
|
-
return service === null || service ===
|
|
739
|
+
const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === undefined ? undefined : _a.getPrimaryService(options === null || options === undefined ? undefined : options.service));
|
|
740
|
+
return service === null || service === undefined ? undefined : service.getCharacteristic(options === null || options === undefined ? undefined : options.characteristic);
|
|
743
741
|
}
|
|
744
742
|
async getDescriptor(options) {
|
|
745
743
|
const characteristic = await this.getCharacteristic(options);
|
|
746
|
-
return characteristic === null || characteristic ===
|
|
744
|
+
return characteristic === null || characteristic === undefined ? undefined : characteristic.getDescriptor(options === null || options === undefined ? undefined : options.descriptor);
|
|
747
745
|
}
|
|
748
746
|
async discoverServices(_options) {
|
|
749
747
|
throw this.unavailable('discoverServices is not available on web.');
|
|
@@ -759,7 +757,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
759
757
|
}
|
|
760
758
|
async read(options) {
|
|
761
759
|
const characteristic = await this.getCharacteristic(options);
|
|
762
|
-
const value = await (characteristic === null || characteristic ===
|
|
760
|
+
const value = await (characteristic === null || characteristic === undefined ? undefined : characteristic.readValue());
|
|
763
761
|
return { value };
|
|
764
762
|
}
|
|
765
763
|
async write(options) {
|
|
@@ -771,7 +769,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
771
769
|
else {
|
|
772
770
|
dataView = options.value;
|
|
773
771
|
}
|
|
774
|
-
await (characteristic === null || characteristic ===
|
|
772
|
+
await (characteristic === null || characteristic === undefined ? undefined : characteristic.writeValueWithResponse(dataView));
|
|
775
773
|
}
|
|
776
774
|
async writeWithoutResponse(options) {
|
|
777
775
|
const characteristic = await this.getCharacteristic(options);
|
|
@@ -782,11 +780,11 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
782
780
|
else {
|
|
783
781
|
dataView = options.value;
|
|
784
782
|
}
|
|
785
|
-
await (characteristic === null || characteristic ===
|
|
783
|
+
await (characteristic === null || characteristic === undefined ? undefined : characteristic.writeValueWithoutResponse(dataView));
|
|
786
784
|
}
|
|
787
785
|
async readDescriptor(options) {
|
|
788
786
|
const descriptor = await this.getDescriptor(options);
|
|
789
|
-
const value = await (descriptor === null || descriptor ===
|
|
787
|
+
const value = await (descriptor === null || descriptor === undefined ? undefined : descriptor.readValue());
|
|
790
788
|
return { value };
|
|
791
789
|
}
|
|
792
790
|
async writeDescriptor(options) {
|
|
@@ -798,37 +796,37 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
798
796
|
else {
|
|
799
797
|
dataView = options.value;
|
|
800
798
|
}
|
|
801
|
-
await (descriptor === null || descriptor ===
|
|
799
|
+
await (descriptor === null || descriptor === undefined ? undefined : descriptor.writeValue(dataView));
|
|
802
800
|
}
|
|
803
801
|
async startNotifications(options) {
|
|
804
802
|
const characteristic = await this.getCharacteristic(options);
|
|
805
|
-
characteristic === null || characteristic ===
|
|
806
|
-
characteristic === null || characteristic ===
|
|
807
|
-
await (characteristic === null || characteristic ===
|
|
803
|
+
characteristic === null || characteristic === undefined ? undefined : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);
|
|
804
|
+
characteristic === null || characteristic === undefined ? undefined : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);
|
|
805
|
+
await (characteristic === null || characteristic === undefined ? undefined : characteristic.startNotifications());
|
|
808
806
|
}
|
|
809
807
|
onCharacteristicValueChanged(event) {
|
|
810
808
|
var _a, _b;
|
|
811
809
|
const characteristic = event.target;
|
|
812
|
-
const key = `notification|${(_a = characteristic.service) === null || _a ===
|
|
810
|
+
const key = `notification|${(_a = characteristic.service) === null || _a === undefined ? undefined : _a.device.id}|${(_b = characteristic.service) === null || _b === undefined ? undefined : _b.uuid}|${characteristic.uuid}`;
|
|
813
811
|
this.notifyListeners(key, {
|
|
814
812
|
value: characteristic.value,
|
|
815
813
|
});
|
|
816
814
|
}
|
|
817
815
|
async stopNotifications(options) {
|
|
818
816
|
const characteristic = await this.getCharacteristic(options);
|
|
819
|
-
await (characteristic === null || characteristic ===
|
|
817
|
+
await (characteristic === null || characteristic === undefined ? undefined : characteristic.stopNotifications());
|
|
820
818
|
}
|
|
821
819
|
getFilters(options) {
|
|
822
820
|
var _a;
|
|
823
821
|
const filters = [];
|
|
824
|
-
for (const service of (_a = options === null || options ===
|
|
822
|
+
for (const service of (_a = options === null || options === undefined ? undefined : options.services) !== null && _a !== undefined ? _a : []) {
|
|
825
823
|
filters.push({
|
|
826
824
|
services: [service],
|
|
827
|
-
name: options === null || options ===
|
|
828
|
-
namePrefix: options === null || options ===
|
|
825
|
+
name: options === null || options === undefined ? undefined : options.name,
|
|
826
|
+
namePrefix: options === null || options === undefined ? undefined : options.namePrefix,
|
|
829
827
|
});
|
|
830
828
|
}
|
|
831
|
-
if (((options === null || options ===
|
|
829
|
+
if (((options === null || options === undefined ? undefined : options.name) || (options === null || options === undefined ? undefined : options.namePrefix)) && filters.length === 0) {
|
|
832
830
|
filters.push({
|
|
833
831
|
name: options.name,
|
|
834
832
|
namePrefix: options.namePrefix,
|
|
@@ -848,7 +846,7 @@ class BluetoothLeWeb extends core.WebPlugin {
|
|
|
848
846
|
const bleDevice = {
|
|
849
847
|
deviceId: device.id,
|
|
850
848
|
// use undefined instead of null if name is not available
|
|
851
|
-
name: (_a = device.name) !== null && _a !==
|
|
849
|
+
name: (_a = device.name) !== null && _a !== undefined ? _a : undefined,
|
|
852
850
|
};
|
|
853
851
|
return bleDevice;
|
|
854
852
|
}
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\n/**\n * Convert a string of hex into a DataView of raw bytes.\n * Note: characters other than [0-9a-fA-F] are ignored\n * @param hex string of values, e.g. \"00 01 02\" or \"000102\"\n * @return DataView of raw bytes\n */\nexport function hexStringToDataView(hex) {\n const bin = [];\n let i, c, isEmpty = 1, buffer = 0;\n for (i = 0; i < hex.length; i++) {\n c = hex.charCodeAt(i);\n if ((c > 47 && c < 58) || (c > 64 && c < 71) || (c > 96 && c < 103)) {\n buffer = (buffer << 4) ^ ((c > 64 ? c + 9 : c) & 15);\n if ((isEmpty ^= 1)) {\n bin.push(buffer & 0xff);\n }\n }\n }\n return numbersToDataView(bin);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join(' ');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","const makeQueue = () => {\n let currentTask = Promise.resolve();\n // create a new promise so that errors can be bubbled\n // up to the caller without being caught by the queue\n return (fn) => new Promise((resolve, reject) => {\n currentTask = currentTask\n .then(() => fn())\n .then(resolve)\n .catch(reject);\n });\n};\nexport function getQueue(enabled) {\n if (enabled) {\n return makeQueue();\n }\n return (fn) => fn();\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async requestEnable() {\n await this.queue(async () => {\n await BluetoothLe.requestEnable();\n });\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n if (!Array.isArray(deviceIds)) {\n throw new Error('deviceIds must be an array');\n }\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async getBondedDevices() {\n return this.queue(async () => {\n const result = await BluetoothLe.getBondedDevices();\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId, options) {\n await this.queue(async () => {\n await BluetoothLe.createBond(Object.assign({ deviceId }, options));\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async requestEnable() {\n throw this.unavailable('requestEnable is not available on web.');\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => options.deviceIds.includes(device.id))\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getBondedDevices() {\n return {};\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","Capacitor","WebPlugin"],"mappings":";;;;;;AAAA;AACA;AACA;AACWA,0BAAS;AACpB,CAAC,UAAU,QAAQ,EAAE;AACrB;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,qBAAqB,CAAC;AAC1E;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC;AACxE;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,uBAAuB,CAAC;AAC9E,CAAC,EAAEA,gBAAQ,KAAKA,gBAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AAChC;AACA;AACA;AACWC,oCAAmB;AAC9B,CAAC,UAAU,kBAAkB,EAAE;AAC/B;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,GAAG,8BAA8B,CAAC;AAChH;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,0BAA0B,CAAC;AACxG;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC,GAAG,+BAA+B,CAAC;AAClH,CAAC,EAAEA,0BAAkB,KAAKA,0BAAkB,GAAG,EAAE,CAAC,CAAC;;ACzCnD;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,IAAI,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AACD;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACxF,CAAC;AACD;AACA;AACA;AACO,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AACD;AACA;AACA;AACO,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAC;AACpF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,GAAG,EAAE;AACzC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AACtC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAQ,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;AAC7E,YAAY,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,YAAY,KAAK,OAAO,IAAI,CAAC,GAAG;AAChC,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACxC,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AACM,SAAS,mBAAmB,CAAC,KAAK,EAAE;AAC3C,IAAI,OAAO,iBAAiB,CAAC,KAAK,CAAC;AACnC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK;AACpB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,KAAK,CAAC;AACN,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AACM,SAAS,eAAe,CAAC,IAAI,EAAE;AACtC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACvC,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;AACxC,KAAK;AACL,CAAC;AACM,SAAS,WAAW,CAAC,GAAG,EAAE;AACjC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK;AAChC,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,GAAG,CAAC;AACf;;AClFY,MAAC,WAAW,GAAGC,mBAAc,CAAC,aAAa,EAAE;AACzD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AAClE,CAAC;;ACHD,MAAM,SAAS,GAAG,MAAM;AACxB,IAAI,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACxC;AACA;AACA,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACpD,QAAQ,WAAW,GAAG,WAAW;AACjC,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7B,aAAa,IAAI,CAAC,OAAO,CAAC;AAC1B,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3B,KAAK,CAAC,CAAC;AACP,CAAC,CAAC;AACK,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,SAAS,EAAE,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AACxB;;AChBO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC9E,KAAK;AACL,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,wEAAwE,CAAC,IAAI,CAAC,CAAC;AACpH,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,wEAAwE,CAAC,CAAC,CAAC;AAC/H,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB;;ACLA,MAAM,cAAc,CAAC;AACrB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACxC,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpC,KAAK;AACL,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpC,KAAK;AACL,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,SAAS,GAAG;AACtB,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,CAAC;AACzD,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;AAC9C,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;AACvC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;AACxC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE;AAC9C,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC3C,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,YAAY,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK;AAC5E,gBAAgB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnD,YAAY,MAAM,WAAW,CAAC,yBAAyB,EAAE,CAAC;AAC1D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,wBAAwB,GAAG;AACrC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC3C,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,MAAM,WAAW,CAAC,wBAAwB,EAAE,CAAC;AACzD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG;AAC9B,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;AACjE,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,MAAM,oBAAoB,GAAG;AACjC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,oBAAoB,EAAE,CAAC;AACrD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACtD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;AAChD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,iBAAiB,CAAC,cAAc,EAAE;AAC5C,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAChE,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;AACtF,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACpD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpE,YAAY,OAAO,MAAM,CAAC;AAC1B,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;AAC3C,QAAQ,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAChE,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9F,YAAY,IAAI,CAAC,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,cAAc,KAAK;AAClG,gBAAgB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;AACvQ,0BAA0B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC5E,0BAA0B,SAAS,EAAE,CAAC,CAAC;AACvC,gBAAgB,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjC,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9F,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;AAC3C,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,SAAS,EAAE;AAChC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACvC,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC1D,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACvE,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,mBAAmB,CAAC,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAY,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/E,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,gBAAgB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;AAChE,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;AACnD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvD,gBAAgB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7G,gBAAgB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;AAC1E,oBAAoB,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC3C,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACvD,aAAa;AACb,YAAY,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACtD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpE,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,WAAW,CAAC,QAAQ,EAAE;AAChC,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACtD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvE,YAAY,OAAO,MAAM,CAAC,QAAQ,CAAC;AACnC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClE,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,EAAE;AAClE,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC1F,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpE,YAAY,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE;AAC3D,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC1E,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AACnE,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACjD,aAAa;AACb,YAAY,IAAI,UAAU,GAAG,KAAK,CAAC;AACnC,YAAY,IAAIC,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxD,aAAa;AACb,YAAY,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC5D,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AAClF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACjD,aAAa;AACb,YAAY,IAAI,UAAU,GAAG,KAAK,CAAC;AACnC,YAAY,IAAIA,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxD,aAAa;AACb,YAAY,MAAM,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC3E,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE;AACjF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AACpF,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,gBAAgB,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AACxC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACzF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACjD,aAAa;AACb,YAAY,IAAI,UAAU,GAAG,KAAK,CAAC;AACnC,YAAY,IAAIA,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxD,aAAa;AACb,YAAY,MAAM,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AACtE,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,gBAAgB,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE;AAC1E,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AAChF,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,YAAY,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK;AAC3E,gBAAgB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACvG,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnD,YAAY,MAAM,WAAW,CAAC,kBAAkB,CAAC;AACjD,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;AAC/D,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;AACnD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AAChF,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,MAAM,WAAW,CAAC,iBAAiB,CAAC;AAChD,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,+BAA+B,CAAC,OAAO,EAAE;AAC7C,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC9B,YAAY,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/D,SAAS;AACT,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE;AACtC,YAAY,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/E,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAY,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC9C,SAAS;AACT,aAAa,IAAI,KAAK,KAAK,SAAS,EAAE;AACtC,YAAY,OAAO,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,aAAa,CAAC,GAAG,EAAE;AACvB,QAAQ,IAAI,GAAG,KAAK,SAAS,EAAE;AAC/B,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5C,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACW,MAAC,SAAS,GAAG,IAAI,cAAc;;AC5VpC,eAAe,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AAC/D,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,QAAQ,OAAO;AACf,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACnC,YAAY,KAAK,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9D,SAAS,CAAC;AACV,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C;;ACLO,MAAM,cAAc,SAASC,cAAS,CAAC;AAC9C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;AAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AACnC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,QAAQ,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;AAChD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjG,KAAK;AACL,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACtE,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,kDAAkD,CAAC,CAAC;AACvF,SAAS;AACT,QAAQ,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;AACxE,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;AACpE,SAAS;AACT,KAAK;AACL,IAAI,MAAM,SAAS,GAAG;AACtB;AACA,QAAQ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC;AACzE,KAAK;AACL,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,MAAM,yBAAyB,GAAG;AACtC;AACA,KAAK;AACL,IAAI,MAAM,wBAAwB,GAAG;AACrC;AACA,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG;AAC9B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;AAC7E,KAAK;AACL,IAAI,MAAM,oBAAoB,GAAG;AACjC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;AACjF,KAAK;AACL,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;AAC3E,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG;AAC9B;AACA,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjD,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;AAC/D,YAAY,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS;AACzD,YAAY,gBAAgB,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB;AACxG,YAAY,gBAAgB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC9C,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACpD,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;AAC/C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjD,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3C,QAAQ,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC/G,QAAQ,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC5G,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;AAC5D,YAAY,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS;AACzD,YAAY,uBAAuB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AACzD,YAAY,mBAAmB,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,eAAe;AAC1G,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACzC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,QAAQ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5D,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE;AACpH,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3D,YAAY,MAAM,MAAM,GAAG;AAC3B,gBAAgB,MAAM;AACtB,gBAAgB,SAAS,EAAE,MAAM,CAAC,IAAI;AACtC,gBAAgB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChC,gBAAgB,OAAO,EAAE,KAAK,CAAC,OAAO;AACtC,gBAAgB,gBAAgB,EAAE,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACrE,gBAAgB,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3D,gBAAgB,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC;AACtG,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACzD,SAAS;AACT,KAAK;AACL,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;AAC7E,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAC/D,QAAQ,MAAM,UAAU,GAAG,OAAO;AAClC,aAAa,MAAM,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACtE,aAAa,GAAG,CAAC,CAAC,MAAM,KAAK;AAC7B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxD,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvC,KAAK;AACL,IAAI,MAAM,mBAAmB,CAAC,QAAQ,EAAE;AACxC,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAC/D,QAAQ,MAAM,UAAU,GAAG,OAAO;AAClC,aAAa,MAAM,CAAC,CAAC,MAAM,KAAK;AAChC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;AACxF,SAAS,CAAC;AACV,aAAa,GAAG,CAAC,CAAC,MAAM,KAAK;AAC7B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxD,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvC,KAAK;AACL,IAAI,MAAM,gBAAgB,GAAG;AAC7B,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/D,QAAQ,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1F,QAAQ,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACvF,QAAQ,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;AACtC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACvC,YAAY,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC;AACpH,YAAY,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAC/E,SAAS;AACT,QAAQ,OAAO,KAAK,EAAE;AACtB;AACA;AACA,YAAY,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5F,YAAY,IAAI,KAAK,KAAK,YAAY,EAAE;AACxC,gBAAgB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACtD,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,KAAK,CAAC;AAC5B,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACzC,QAAQ,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/C,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxC,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;AACtE,KAAK;AACL,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AACjH,KAAK;AACL,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE;AAC/B,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,QAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC/L,QAAQ,MAAM,WAAW,GAAG,EAAE,CAAC;AAC/B,QAAQ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACxC,YAAY,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACvE,YAAY,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC1C,YAAY,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;AAC1D,gBAAgB,kBAAkB,CAAC,IAAI,CAAC;AACxC,oBAAoB,IAAI,EAAE,cAAc,CAAC,IAAI;AAC7C,oBAAoB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAClE,oBAAoB,WAAW,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AAC1E,iBAAiB,CAAC,CAAC;AACnB,aAAa;AACb,YAAY,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC1F,SAAS;AACT,QAAQ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACzC,KAAK;AACL,IAAI,MAAM,cAAc,CAAC,cAAc,EAAE;AACzC,QAAQ,IAAI;AACZ,YAAY,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;AACtE,YAAY,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AACpD,gBAAgB,IAAI,EAAE,UAAU,CAAC,IAAI;AACrC,aAAa,CAAC,CAAC,CAAC;AAChB,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS;AACT,KAAK;AACL,IAAI,aAAa,CAAC,cAAc,EAAE;AAClC,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS;AAC1D,YAAY,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,IAAI;AAChD,YAAY,oBAAoB,EAAE,cAAc,CAAC,UAAU,CAAC,oBAAoB;AAChF,YAAY,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK;AAClD,YAAY,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM;AACpD,YAAY,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;AACxD,YAAY,yBAAyB,EAAE,cAAc,CAAC,UAAU,CAAC,yBAAyB;AAC1F,YAAY,aAAa,EAAE,cAAc,CAAC,UAAU,CAAC,aAAa;AAClE,YAAY,mBAAmB,EAAE,cAAc,CAAC,UAAU,CAAC,mBAAmB;AAC9E,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACjN,QAAQ,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AACrK,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAClL,KAAK;AACL,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE;AAC3B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE;AAC9C,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC;AACrF,KAAK;AACL,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,MAAM,KAAK,GAAG,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;AACzH,QAAQ,OAAO,EAAE,KAAK,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;AACzB,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,IAAI,QAAQ,CAAC;AACrB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;AACrC,SAAS;AACT,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChI,KAAK;AACL,IAAI,MAAM,oBAAoB,CAAC,OAAO,EAAE;AACxC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,IAAI,QAAQ,CAAC;AACrB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;AACrC,SAAS;AACT,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnI,KAAK;AACL,IAAI,MAAM,cAAc,CAAC,OAAO,EAAE;AAClC,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAQ,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7G,QAAQ,OAAO,EAAE,KAAK,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,eAAe,CAAC,OAAO,EAAE;AACnC,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAQ,IAAI,QAAQ,CAAC;AACrB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;AACrC,SAAS;AACT,QAAQ,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxG,KAAK;AACL,IAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACpL,QAAQ,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACjL,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACpH,KAAK;AACL,IAAI,4BAA4B,CAAC,KAAK,EAAE;AACxC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,QAAQ,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5C,QAAQ,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3N,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AAClC,YAAY,KAAK,EAAE,cAAc,CAAC,KAAK;AACvC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACnH,KAAK;AACL,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC;AAC3B,QAAQ,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC7I,YAAY,OAAO,CAAC,IAAI,CAAC;AACzB,gBAAgB,QAAQ,EAAE,CAAC,OAAO,CAAC;AACnC,gBAAgB,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI;AACpF,gBAAgB,UAAU,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU;AAChG,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,MAAM,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAClL,YAAY,OAAO,CAAC,IAAI,CAAC;AACzB,gBAAgB,IAAI,EAAE,OAAO,CAAC,IAAI;AAClC,gBAAgB,UAAU,EAAE,OAAO,CAAC,UAAU;AAC9C,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpD,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;AAC9G,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,YAAY,CAAC,MAAM,EAAE;AACzB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,QAAQ,EAAE,MAAM,CAAC,EAAE;AAC/B;AACA,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS;AAC/E,SAAS,CAAC;AACV,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\n/**\n * Convert a string of hex into a DataView of raw bytes.\n * Note: characters other than [0-9a-fA-F] are ignored\n * @param hex string of values, e.g. \"00 01 02\" or \"000102\"\n * @return DataView of raw bytes\n */\nexport function hexStringToDataView(hex) {\n const bin = [];\n let i, c, isEmpty = 1, buffer = 0;\n for (i = 0; i < hex.length; i++) {\n c = hex.charCodeAt(i);\n if ((c > 47 && c < 58) || (c > 64 && c < 71) || (c > 96 && c < 103)) {\n buffer = (buffer << 4) ^ ((c > 64 ? c + 9 : c) & 15);\n if ((isEmpty ^= 1)) {\n bin.push(buffer & 0xff);\n }\n }\n }\n return numbersToDataView(bin);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join('');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","const makeQueue = () => {\n let currentTask = Promise.resolve();\n // create a new promise so that errors can be bubbled\n // up to the caller without being caught by the queue\n return (fn) => new Promise((resolve, reject) => {\n currentTask = currentTask\n .then(() => fn())\n .then(resolve)\n .catch(reject);\n });\n};\nexport function getQueue(enabled) {\n if (enabled) {\n return makeQueue();\n }\n return (fn) => fn();\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async requestEnable() {\n await this.queue(async () => {\n await BluetoothLe.requestEnable();\n });\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n if (!Array.isArray(deviceIds)) {\n throw new Error('deviceIds must be an array');\n }\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async getBondedDevices() {\n return this.queue(async () => {\n const result = await BluetoothLe.getBondedDevices();\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId, options) {\n await this.queue(async () => {\n await BluetoothLe.createBond(Object.assign({ deviceId }, options));\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async requestEnable() {\n throw this.unavailable('requestEnable is not available on web.');\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => options.deviceIds.includes(device.id))\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getBondedDevices() {\n return {};\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","Capacitor","WebPlugin"],"mappings":";;;;AAAA;AACA;AACA;AACWA;AACX,CAAC,UAAU,QAAQ,EAAE;AACrB;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,qBAAqB;AACzE;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB;AACvE;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,uBAAuB;AAC7E,CAAC,EAAEA,gBAAQ,KAAKA,gBAAQ,GAAG,EAAE,CAAC,CAAC;AAC/B;AACA;AACA;AACWC;AACX,CAAC,UAAU,kBAAkB,EAAE;AAC/B;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,GAAG,8BAA8B;AAC/G;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,0BAA0B;AACvG;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC,GAAG,+BAA+B;AACjH,CAAC,EAAEA,0BAAkB,KAAKA,0BAAkB,GAAG,EAAE,CAAC,CAAC;;ACzCnD;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,IAAI,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACtD;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AACvF;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,4BAA4B,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,GAAG,EAAE;AACzC,IAAI,MAAM,GAAG,GAAG,EAAE;AAClB,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;AACrC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAQ,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7B,QAAQ,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;AAC7E,YAAY,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChE,YAAY,KAAK,OAAO,IAAI,CAAC,GAAG;AAChC,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvC;AACA;AACA;AACA,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC;AACjC;AACO,SAAS,mBAAmB,CAAC,KAAK,EAAE;AAC3C,IAAI,OAAO,iBAAiB,CAAC,KAAK;AAClC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK;AACpB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AACvB;AACA,QAAQ,OAAO,CAAC;AAChB,KAAK;AACL,SAAS,IAAI,CAAC,EAAE,CAAC;AACjB;AACO,SAAS,eAAe,CAAC,IAAI,EAAE;AACtC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI;AACnB;AACA,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACvC,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC;AACjC;AACA,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC;AACvC;AACA;AACO,SAAS,WAAW,CAAC,GAAG,EAAE;AACjC,IAAI,MAAM,GAAG,GAAG,EAAE;AAClB,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,QAAQ,OAAO,SAAS;AACxB;AACA,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK;AAChC,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;AACnC,KAAK,CAAC;AACN,IAAI,OAAO,GAAG;AACd;;AClFY,MAAC,WAAW,GAAGC,mBAAc,CAAC,aAAa,EAAE;AACzD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AAClE,CAAC;;ACHD,MAAM,SAAS,GAAG,MAAM;AACxB,IAAI,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE;AACvC;AACA;AACA,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACpD,QAAQ,WAAW,GAAG;AACtB,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE;AAC5B,aAAa,IAAI,CAAC,OAAO;AACzB,aAAa,KAAK,CAAC,MAAM,CAAC;AAC1B,KAAK,CAAC;AACN,CAAC;AACM,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,SAAS,EAAE;AAC1B;AACA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACvB;;AChBO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC7E;AACA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,wEAAwE,CAAC,IAAI,CAAC;AACnH,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,wEAAwE,CAAC,CAAC;AAC9H;AACA,IAAI,OAAO,IAAI;AACf;;ACLA,MAAM,cAAc,CAAC;AACrB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE;AACvC,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;AACnC;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;AACnC;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AACpC;AACA,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;AACjD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,SAAS,GAAG;AACtB,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE;AACxD,YAAY,OAAO,MAAM,CAAC,KAAK;AAC/B,SAAS,CAAC;AACV,QAAQ,OAAO,OAAO;AACtB;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,aAAa,EAAE;AAC7C,SAAS,CAAC;AACV;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,MAAM,EAAE;AACtC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,OAAO,EAAE;AACvC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE;AAC9C,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC;AAC1C,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AACxG,YAAY,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK;AAC5E,gBAAgB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClD,YAAY,MAAM,WAAW,CAAC,yBAAyB,EAAE;AACzD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,wBAAwB,GAAG;AACrC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC;AAC1C,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AACxG,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,YAAY,MAAM,WAAW,CAAC,wBAAwB,EAAE;AACxD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,iBAAiB,GAAG;AAC9B,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE;AAChE,YAAY,OAAO,MAAM,CAAC,KAAK;AAC/B,SAAS,CAAC;AACV,QAAQ,OAAO,OAAO;AACtB;AACA,IAAI,MAAM,oBAAoB,GAAG;AACjC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,oBAAoB,EAAE;AACpD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,qBAAqB,EAAE;AACrD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,eAAe,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,IAAI,MAAM,iBAAiB,CAAC,cAAc,EAAE;AAC5C,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC;AAC/D,SAAS,CAAC;AACV;AACA,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,GAAG,SAAS;AACrF,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACpD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACnE,YAAY,OAAO,MAAM;AACzB,SAAS,CAAC;AACV,QAAQ,OAAO,MAAM;AACrB;AACA,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;AAC3C,QAAQ,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC;AAC/D,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AAC7F,YAAY,IAAI,CAAC,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,cAAc,KAAK;AAClG,gBAAgB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC;AACvP,0BAA0B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,gBAAgB;AAC3E,0BAA0B,SAAS,EAAE,CAAC;AACtC,gBAAgB,QAAQ,CAAC,MAAM,CAAC;AAChC,aAAa,CAAC;AACd,YAAY,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACpD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AAC7F,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC,YAAY,MAAM,WAAW,CAAC,UAAU,EAAE;AAC1C,SAAS,CAAC;AACV;AACA,IAAI,MAAM,UAAU,CAAC,SAAS,EAAE;AAChC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACvC,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACzD;AACA,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AACtE,YAAY,OAAO,MAAM,CAAC,OAAO;AACjC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,mBAAmB,CAAC,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAY,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;AACxD;AACA,QAAQ,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1C,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC9E,YAAY,OAAO,MAAM,CAAC,OAAO;AACjC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,gBAAgB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE;AAC/D,YAAY,OAAO,MAAM,CAAC,OAAO;AACjC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;AACnD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACtD,gBAAgB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AAC5G,gBAAgB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;AAC1E,oBAAoB,YAAY,CAAC,QAAQ,CAAC;AAC1C,iBAAiB,CAAC;AAClB,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACtD;AACA,YAAY,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3E,SAAS,CAAC;AACV;AACA,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9E,SAAS,CAAC;AACV;AACA,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACtD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnE,YAAY,OAAO,MAAM,CAAC,KAAK;AAC/B,SAAS,CAAC;AACV,QAAQ,OAAO,QAAQ;AACvB;AACA,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;AACtD,SAAS,CAAC;AACV;AACA,IAAI,MAAM,WAAW,CAAC,QAAQ,EAAE;AAChC,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACtD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;AACtE,YAAY,OAAO,MAAM,CAAC,QAAQ;AAClC,SAAS,CAAC;AACV,QAAQ,OAAO,QAAQ;AACvB;AACA,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC5D,SAAS,CAAC;AACV;AACA,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;AACjE,YAAY,OAAO,MAAM,CAAC,KAAK;AAC/B,SAAS,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,EAAE;AAClE,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,MAAM,WAAW,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AACzF,SAAS,CAAC;AACV;AACA,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnE,YAAY,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3C,SAAS,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE;AAC3D,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC1E,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,SAAS,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,MAAM,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AACnE,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAM,GAAG,SAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AAChD;AACA,YAAY,IAAI,UAAU,GAAG,KAAK;AAClC,YAAY,IAAIC,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACvD;AACA,YAAY,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC5D,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9D,SAAS,CAAC;AACV;AACA,IAAI,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AAClF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAM,GAAG,SAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AAChD;AACA,YAAY,IAAI,UAAU,GAAG,KAAK;AAClC,YAAY,IAAIA,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACvD;AACA,YAAY,MAAM,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC3E,gBAAgB,OAAO;AACvB,gBAAgB,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9D,SAAS,CAAC;AACV;AACA,IAAI,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE;AACjF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AAC1C,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACnD,YAAY,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AACpF,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,gBAAgB,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;AACvC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,SAAS,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACzF,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AAC1C,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;AACtC,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAM,GAAG,SAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAgB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AAChD;AACA,YAAY,IAAI,UAAU,GAAG,KAAK;AAClC,YAAY,IAAIA,cAAS,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACnD;AACA,gBAAgB,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACvD;AACA,YAAY,MAAM,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;AACtE,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,gBAAgB,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1D,SAAS,CAAC;AACV;AACA,IAAI,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE;AAC1E,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC/E,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AACxG,YAAY,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK;AAC3E,gBAAgB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAM,GAAG,SAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACtG,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClD,YAAY,MAAM,WAAW,CAAC,kBAAkB,CAAC;AACjD,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,aAAa,CAAC;AACd,SAAS,CAAC;AACV;AACA,IAAI,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;AAC/D,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAQ,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC/E,YAAY,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AACxG,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,YAAY,MAAM,WAAW,CAAC,iBAAiB,CAAC;AAChD,gBAAgB,QAAQ;AACxB,gBAAgB,OAAO;AACvB,gBAAgB,cAAc;AAC9B,aAAa,CAAC;AACd,SAAS,CAAC;AACV;AACA,IAAI,+BAA+B,CAAC,OAAO,EAAE;AAC7C,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC9B,YAAY,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9D;AACA,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE;AACtC,YAAY,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9E;AACA,QAAQ,OAAO,OAAO;AACtB;AACA,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAY,OAAO,mBAAmB,CAAC,KAAK,CAAC;AAC7C;AACA,aAAa,IAAI,KAAK,KAAK,SAAS,EAAE;AACtC,YAAY,OAAO,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACnD;AACA,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,aAAa,CAAC,GAAG,EAAE;AACvB,QAAQ,IAAI,GAAG,KAAK,SAAS,EAAE;AAC/B,YAAY,OAAO,SAAS;AAC5B;AACA,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5C,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD;AACA,QAAQ,OAAO,MAAM;AACrB;AACA;AACY,MAAC,SAAS,GAAG,IAAI,cAAc;;AC5VpC,eAAe,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AAC/D,IAAI,IAAI,KAAK;AACb,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,QAAQ,OAAO;AACf,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACnC,YAAY,KAAK,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;AAC7D,SAAS,CAAC;AACV,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;AACzC;;ACLO,MAAM,cAAc,SAASC,cAAS,CAAC;AAC9C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;AAClC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE;AAC1C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,0BAA0B,GAAG,KAAK;AAC/C,QAAQ,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtF,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACpE,QAAQ,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;AAChG;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACtE,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,kDAAkD,CAAC;AACtF;AACA,QAAQ,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE;AACvE,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC;AACnE;AACA;AACA,IAAI,MAAM,SAAS,GAAG;AACtB;AACA,QAAQ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,wCAAwC,CAAC;AACxE;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC;AACjE;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,kCAAkC,CAAC;AAClE;AACA,IAAI,MAAM,yBAAyB,GAAG;AACtC;AACA;AACA,IAAI,MAAM,wBAAwB,GAAG;AACrC;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG;AAC9B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,4CAA4C,CAAC;AAC5E;AACA,IAAI,MAAM,oBAAoB,GAAG;AACjC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAAC;AAC/E;AACA,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,gDAAgD,CAAC;AAChF;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,0CAA0C,CAAC;AAC1E;AACA,IAAI,MAAM,iBAAiB,GAAG;AAC9B;AACA;AACA,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAChD,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;AAC/D,YAAY,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS;AACzD,YAAY,gBAAgB,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,gBAAgB;AACxG,YAAY,gBAAgB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AAClD,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AAC7C,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACnD,QAAQ,OAAO,SAAS;AACxB;AACA,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,OAAO;AAC9C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAChD,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE;AAC1C,QAAQ,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,CAAC;AAC9G,QAAQ,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,CAAC;AAC3G,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;AAC5D,YAAY,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS;AACzD,YAAY,uBAAuB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AACzD,YAAY,mBAAmB,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,eAAe;AAC1G,SAAS,CAAC;AACV;AACA,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AACxC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;AAClD,QAAQ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3D,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE;AACpH,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACtD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1D,YAAY,MAAM,MAAM,GAAG;AAC3B,gBAAgB,MAAM;AACtB,gBAAgB,SAAS,EAAE,MAAM,CAAC,IAAI;AACtC,gBAAgB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChC,gBAAgB,OAAO,EAAE,KAAK,CAAC,OAAO;AACtC,gBAAgB,gBAAgB,EAAE,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACrE,gBAAgB,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3D,gBAAgB,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC;AACtG,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC;AACxD;AACA;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,EAAE;AAC7E,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC5B;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB;AACA,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE;AAC9D,QAAQ,MAAM,UAAU,GAAG;AAC3B,aAAa,MAAM,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACrE,aAAa,GAAG,CAAC,CAAC,MAAM,KAAK;AAC7B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACjD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvD,YAAY,OAAO,SAAS;AAC5B,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACtC;AACA,IAAI,MAAM,mBAAmB,CAAC,QAAQ,EAAE;AACxC,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE;AAC9D,QAAQ,MAAM,UAAU,GAAG;AAC3B,aAAa,MAAM,CAAC,CAAC,MAAM,KAAK;AAChC,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,SAAS;AACvF,SAAS;AACT,aAAa,GAAG,CAAC,CAAC,MAAM,KAAK;AAC7B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACjD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvD,YAAY,OAAO,SAAS;AAC5B,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACtC;AACA,IAAI,MAAM,gBAAgB,GAAG;AAC7B,QAAQ,OAAO,EAAE;AACjB;AACA,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC9D,QAAQ,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzF,QAAQ,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACtF,QAAQ,MAAM,YAAY,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACvC,YAAY,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;AACxD;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,0BAA0B;AACnH,YAAY,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC;AAC9E;AACA,QAAQ,OAAO,KAAK,EAAE;AACtB;AACA;AACA,YAAY,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC3F,YAAY,IAAI,KAAK,KAAK,YAAY,EAAE;AACxC,gBAAgB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACrD;AACA,iBAAiB;AACjB,gBAAgB,MAAM,KAAK;AAC3B;AACA;AACA;AACA,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AACxC,QAAQ,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC;AACvC;AACA,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,qCAAqC,CAAC;AACrE;AACA,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC;AACnE;AACA,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,IAAI,EAAE;AACd,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,UAAU,EAAE;AAChH;AACA,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE;AAC/B,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,EAAE,GAAG,EAAE;AAC9L,QAAQ,MAAM,WAAW,GAAG,EAAE;AAC9B,QAAQ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACxC,YAAY,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE;AACtE,YAAY,MAAM,kBAAkB,GAAG,EAAE;AACzC,YAAY,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;AAC1D,gBAAgB,kBAAkB,CAAC,IAAI,CAAC;AACxC,oBAAoB,IAAI,EAAE,cAAc,CAAC,IAAI;AAC7C,oBAAoB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAClE,oBAAoB,WAAW,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AAC1E,iBAAiB,CAAC;AAClB;AACA,YAAY,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;AACzF;AACA,QAAQ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;AACxC;AACA,IAAI,MAAM,cAAc,CAAC,cAAc,EAAE;AACzC,QAAQ,IAAI;AACZ,YAAY,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE;AACrE,YAAY,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AACpD,gBAAgB,IAAI,EAAE,UAAU,CAAC,IAAI;AACrC,aAAa,CAAC,CAAC;AACf;AACA,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,EAAE;AACrB;AACA;AACA,IAAI,aAAa,CAAC,cAAc,EAAE;AAClC,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS;AAC1D,YAAY,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,IAAI;AAChD,YAAY,oBAAoB,EAAE,cAAc,CAAC,UAAU,CAAC,oBAAoB;AAChF,YAAY,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK;AAClD,YAAY,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM;AACpD,YAAY,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;AACxD,YAAY,yBAAyB,EAAE,cAAc,CAAC,UAAU,CAAC,yBAAyB;AAC1F,YAAY,aAAa,EAAE,cAAc,CAAC,UAAU,CAAC,aAAa;AAClE,YAAY,mBAAmB,EAAE,cAAc,CAAC,UAAU,CAAC,mBAAmB;AAC9E,SAAS;AACT;AACA,IAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,QAAQ,IAAI,EAAE;AACd,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAChN,QAAQ,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,cAAc,CAAC;AACpK;AACA,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AACjL;AACA,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,2CAA2C,CAAC;AAC3E;AACA,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE;AAC3B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC;AACjE;AACA,IAAI,MAAM,yBAAyB,CAAC,QAAQ,EAAE;AAC9C,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,oDAAoD,CAAC;AACpF;AACA,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC;AACnE;AACA,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,MAAM,KAAK,GAAG,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;AACxH,QAAQ,OAAO,EAAE,KAAK,EAAE;AACxB;AACA,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;AACzB,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD;AACA,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK;AACpC;AACA,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC/H;AACA,IAAI,MAAM,oBAAoB,CAAC,OAAO,EAAE;AACxC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD;AACA,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK;AACpC;AACA,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAClI;AACA,IAAI,MAAM,cAAc,CAAC,OAAO,EAAE;AAClC,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC5D,QAAQ,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAM,GAAG,SAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;AAC5G,QAAQ,OAAO,EAAE,KAAK,EAAE;AACxB;AACA,IAAI,MAAM,eAAe,CAAC,OAAO,EAAE;AACnC,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC5D,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/C,YAAY,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD;AACA,aAAa;AACb,YAAY,QAAQ,GAAG,OAAO,CAAC,KAAK;AACpC;AACA,QAAQ,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAM,GAAG,SAAM,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvG;AACA,IAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC;AACnL,QAAQ,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC;AAChL,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;AACnH;AACA,IAAI,4BAA4B,CAAC,KAAK,EAAE;AACxC,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM;AAC3C,QAAQ,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,SAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;AAC1N,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AAClC,YAAY,KAAK,EAAE,cAAc,CAAC,KAAK;AACvC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpE,QAAQ,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAM,GAAG,SAAM,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;AAClH;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,EAAE;AACd,QAAQ,MAAM,OAAO,GAAG,EAAE;AAC1B,QAAQ,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,EAAE,GAAG,EAAE,EAAE;AAC7I,YAAY,OAAO,CAAC,IAAI,CAAC;AACzB,gBAAgB,QAAQ,EAAE,CAAC,OAAO,CAAC;AACnC,gBAAgB,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI;AACpF,gBAAgB,UAAU,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,UAAU;AAChG,aAAa,CAAC;AACd;AACA,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,MAAM,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAM,GAAG,SAAM,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAClL,YAAY,OAAO,CAAC,IAAI,CAAC;AACzB,gBAAgB,IAAI,EAAE,OAAO,CAAC,IAAI;AAClC,gBAAgB,UAAU,EAAE,OAAO,CAAC,UAAU;AAC9C,aAAa,CAAC;AACd;AACA,QAAQ,OAAO,OAAO;AACtB;AACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AAC/B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnD,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC;AAC7G;AACA,QAAQ,OAAO,MAAM;AACrB;AACA,IAAI,YAAY,CAAC,MAAM,EAAE;AACzB,QAAQ,IAAI,EAAE;AACd,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,QAAQ,EAAE,MAAM,CAAC,EAAE;AAC/B;AACA,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,SAAM,GAAG,EAAE,GAAG,SAAS;AAC/E,SAAS;AACT,QAAQ,OAAO,SAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;"}
|